puppet: принудительный перезапуск службы после изменения файла конфигурации

21

Как я могу убедиться, что если новая версия файла конфигурации загружается через марионетку из главного репозитория на один из управляемых серверов, соответствующая служба перезапускается.

типичный сценарий - скажем, есть новый конфиг munin или apache. кукольный клиент обнаруживает его, перезаписывает локальные файлы ... и ... - как убедиться, что служба перезапущена / перезагружена?

большое спасибо!

PQD
источник

Ответы:

23

Альтернативой для уведомления является подписка:

file { "/etc/sshd_config":
    source => "....",
}

service { sshd:
    ensure => running,
    subscribe => File["/etc/sshd_config"],
}

Разница в том, что отношения описываются с другого конца. Например, вы можете заставить apache подписаться на /etc/apache/httpd.conf, но вы сделаете так, чтобы файл vhost уведомлял apache, так как ваш класс apache не будет знать о каждом имеющемся у вас vhost.

Аналогичная двусторонняя ситуация применима к требованию и раньше. Это просто вопрос, который имеет больше смысла в конкретной ситуации.

Как упоминал Чад, если вы обнаружите, что puppet постоянно пытается запустить ваш сервис, вам нужно добавить параметр шаблона, который является регулярным выражением для применения к списку процессов. По умолчанию Puppet остановится и начнет перезапускать сервис. Если вы добавите «hasrestart => true», он будет использовать команду, указанную в параметре «restart», для перезапуска службы.

Дэвид Пашли
источник
22

кажется, я что-то нашел:

file { "/etc/sshd_config":
    source => "....",
    notify => Service[sshd]
}

service { sshd:
    ensure => running
}

посмотрим, как это будет работать. В любом случае, ваши мысли на эту тему приветствуются.

PQD
источник
1
Да. Вы можете найти подробности в справочнике типов кукол в разделе «Метапараметры» ( reductivelabs.com/trac/puppet/wiki/TypeReference#metaparameters )
Чад Хьюнейкутт,
1
Да, и в зависимости от вашей ОС вам, возможно, придется поиграть с параметрами hasstatus, hasrestart и / или pattern типа сервиса.
Чад Хьюникутт
2

(Я знаю, что это очень старый вопрос, но я подумал, что я бы поставил свои два цента с (на мой взгляд) гораздо более простым способом сделать это)

Не стесняйтесь использовать обозначение стрелки также:

file { "/etc/sshd_config":
  source => "....",
} ~>
service { sshd:
  ensure => running
}

или

File['/etc/sshd_config'] ~> Service['sshd']
Этан Брауэр
источник
в первом примере вам не нужна опция уведомления, если вы используете стрелку
c4f4t0r
К сожалению. Я просто скопировал и забыл вынуть это.
Итан Брауэр
1

Это работает для Solaris 10 :)

class sun_cron_root {
    file { "/var/spool/cron/crontabs/root" :
            source => "puppet:///files/cron/sun/sun_cron_root"
            }

    service {
            "cron":
            provider => "smf",
            ensure => running,
            enable => true,
            hasrestart => true,
            subscribe => File["/var/spool/cron/crontabs/root"]
            }

}
CMag
источник
0

Есть несколько эквивалентных обозначений:

Уведомить :

file { '/etc/sshd_config':
    notify => Service[sshd],
}

service { sshd:
    ensure => running
}

Подписаться :

file { '/etc/sshd_config':
   ...
}

service { sshd:
    ensure => running,
    subscribe => File['/etc/sshd_config'],
}

Обозначение стрелки :

File['/etc/sshd_config'] ~> Service['sshd']

Цепные декларации

file { '/etc/sshd_config':
   ...
}
~> service { sshd:
    ensure => running,
}

Если вы хотите запустить reloadвместо restart, настройте объявление службы:

service { sshd:
    ensure => running,
    restart => 'pkill -HUP sshd', # if service support such reload
}
Tombart
источник