Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

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

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

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

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

service { sshd:
    ensure => running
}

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

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

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

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

или

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

Это работает для 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"]
            }

}

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

Поставить в известность:

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
}