Марионетка: включайте другие файлы в зависимости от имени хоста

Я имел хороший успех с Zenoss. Это делает обычный контрольный материал out-of-the-box (свободная память, загрузка ЦП и т.д. для серверов, таблиц маршрутизации для маршрутизаторов...). Это может быть расширено различными способами (поддерживает плагины Nagios, может быть расширен в Python).

Во всяком случае самое изящное решение состоит в том, чтобы, вероятно, иметь Ваш контролируемый отчет программного обеспечения его состояние через SNMP (существуют различные доступные библиотеки, или Вы могли записать плагин для, например, NetSNMP). Затем любое способное к SNMP контрольное программное обеспечение сможет общаться с ним.

2
задан 12 March 2014 в 00:12
5 ответов

Альтернативным синтаксисом было бы использование селектора в исходном параметре.

file { '/boot/config.txt' :
    ensure      => present,
    mode        => '0755',
    source      => $::hostname?{
                      'host1' => 'puppet://puppet/files/boot/config.txt.portrait',
                      'host2' => 'puppet://puppet/files/boot/config.txt.portrait',
                      default => 'puppet://puppet/files/boot/config.txt.landscape',
                    },
}
6
ответ дан 3 December 2019 в 08:38

Основываясь на том, что сказал devicenull, вы можете затем сократить его, используя выборочные источники файлов:

# Normal config.txt for landscape mode.
file { '/boot/config.txt' :
    ensure      => present,
    mode        => '0755',
    source      => [ 
         "puppet://puppet/files/boot/config.txt.$hostname", # down the individual hostname if required
         "puppet://puppet/files/boot/config.txt.$layouttype", # a layout dimension fact (portrait/landscape)
         "puppet://puppet/files/boot/config.txt" # default
    ],
}

У меня есть много таких примеров в моих манифестах, где относительно статические файлы необходим для типа хоста (не часто до уровня имени хоста), но определенно $ domain, а пользовательский факт $ site_location (внешний, центр обработки данных, офис и т. д.) широко используется.

3
ответ дан 3 December 2019 в 08:38

Для того, о чем вы спрашиваете, я бы использовал Case Statements .

    case $hostname {
      'host1', 'host2': { # Modified config.txt for portrait mode. 
        file { '/boot/config.txt' :
            ensure      => present,
            mode        => '0755',
            source      => 'puppet://puppet/files/boot/config.txt.portrait',
        }  
      } 
      default:            { 
        file { '/boot/config.txt' :
            ensure      => present,
            mode        => '0755',
            source      => 'puppet://puppet/files/boot/config.txt.landscape',
        }
      } # apply the generic class
    }
1
ответ дан 3 December 2019 в 08:38

Мне пришлось использовать "или" вместо ||:

    if $hostname == 'host1' or $hostname == 'host2' {
0
ответ дан 3 December 2019 в 08:38

Tuinslak!

Мы решили нашу проблему следующим образом:

       if $hostname =~ /^sv-dns./ {
               file { '/etc/chrony.conf':
                  ensure => file,
                  owner  => 'root',
                  group  => 'root',
                  mode   => '0644',
                  source => [ 'puppet:///modules/basico/conf/ntp_server/chrony.conf_server' ]
               }
    } else {
               file { '/etc/chrony.conf':
                  ensure => file,
                  owner  => 'root',
                  group  => 'root',
                  mode   => '0644',
                  source => [ 'puppet:///modules/basico/conf/ntp_server/chrony.conf_client' ]
               }
    }

У нас есть два различных типа конфигурационных файлов хронометража: один для всех обычных машин и один для всех DNS-серверов, которые действуют как NTP-сервер внутри нашей сети. Здесь у нас есть соглашение об именах, что каждый DNS-сервер имеет имя хоста, начинающееся с "sv-dns". Таким образом, с помощью приведенного выше фрагмента мы можем гарантировать, что каждое имя хоста, которое начинается с "sv-dns", получит имя "chrony".файл conf_server и все остальные серверы получат файл chrony.conf_client.

Если имя вашего хоста исправлено, например dnsmachine.some.domain, вы можете использовать пример, предоставленный @kwiksand:

file { '/boot/config.txt' :
ensure      => present,
mode        => '0755',
source      => $::hostname?{
                  'host1' => 'puppet://puppet/files/boot/config.txt.portrait',
                  'host2' => 'puppet://puppet/files/boot/config.txt.portrait',
                  default => 'puppet://puppet/files/boot/config.txt.landscape',
                },

Best regards,

Adail

.
1
ответ дан 3 December 2019 в 08:38

Теги

Похожие вопросы