У меня есть сценарий Perl, который я отправил всем своим клиентам Puppet Linux. С тех пор я отредактировал свой сценарий module / modulename / files / scripts / a_script на главном сервере Puppet, но клиенты не получают изменений, потому что у них есть файл. Очевидно, он не использует контрольную сумму и не использует время мода. Как лучше всего обеспечить актуальность файлов с помощью основной версии? Нужно ли мне писать логику контрольной суммы или уже есть встроенная функция?
Первоначально я использовал следующий код:
file { '/sbin/a_script':
ensure => present,
mode => 744,
owner => root,
source => "puppet:///modulename/scripts/a_script"
}
Очевидно, что удаление файла и его восстановление - это хакерское решение, я надеюсь на что-то более красноречивое.
ОБНОВИТЬ Puppet выполняет контрольную сумму и синхронизирует файлы в puppet: /// filebucket при следующем запуске, у меня должна была быть ошибка, из-за которой объявление файла не запускалось. Когда я переместил объявление в site.pp, он синхронизировал изменения в уже существующих файлах на клиентах.
Я бы посоветовал обслуживать ваши скрипты из плоской структуры каталогов, например puppet:///modulename/a_script
вместо того puppet:///modulename/scripts/a_script
Но если это не вариант, это похоже на вариант использования recurse
директива. Без него действие по умолчанию, кажется, только гарантирует, что ваш файл присутствует, независимо от его содержимого.
Также ознакомьтесь с Справка по типу файла Puppet.
-- Редактировать --
Я думал, вы пытаетесь синхронизировать каталог скриптов.
В вашем случае Puppet по умолчанию replace => true
по типу файла если контрольная сумма источника изменяется.
Какой у вас результат puppet agent -t
(или puppet agent --debug -t
) в клиентских системах?