2016-11-24 13 views
1

В моей управляемой среде марионетки, один сервис необходимо перезапустить каждый раз, когда файл изменяется. Сам файл не находится под контролем марионеток, но часть пакета, то есть может обновляться во время (yum) обновлений.Puppet: проверка внешних изменений файлов?

Таким образом, я хотел бы «подписаться» на этот файл и инициировать перезапуск службы при внесении изменений.

Поскольку файл не находится под управлением Кукольный, некоторые ревизии как подход не работает

file { '/path/to/foo': 
    audit => content, 
} 

notify { 'foo.notify': 
    subscribe => File['/path/to/foo'], 
    message => "foo has changed" 
} 

Есть ли способ, чтобы реализовать что-то подобное в кукольный? В идеале мне нужно было бы сравнить только с клиентом текущий и предыдущий хэш файла.

Но AFAIS в структуре Puppet потребовал бы сохранить текущий хэш файла на марионеточном хозяине и сравнить его снова с клиентом (который может работать через факт, но будет неуклюжим (?)).

+1

Если Puppet управляет пакетом, тогда подпишитесь на пакет. –

ответ

2

Это похоже на работу с Puppet 4.4.2 и 3.4.3, так что можно предположить, что оба Кукольный 3.x и 4.x сделать правильную вещь здесь:

$ cd /tmp 
$ echo foo >foo 
$ puppet apply -e 'file { "/tmp/foo": audit => "content" } ~> exec { "/bin/echo DING": refreshonly => true }' 
Notice: Compiled catalog for this-box in environment production in 0.13 seconds 
Notice: /Stage[main]/Main/File[/tmp/foo]/content: audit change: newly-recorded value {md5}d3b07384d113edec49eaa6238ad5ff00 
Notice: Applied catalog in 0.07 seconds 
$ puppet apply -e 'file { "/tmp/foo": audit => "content" } ~> exec { "/bin/echo DING": refreshonly => true }' 
Notice: Compiled catalog for this-box in environment production in 0.12 seconds 
Notice: Applied catalog in 0.06 seconds 
$ echo bar >foo 
$ puppet apply -e 'file { "/tmp/foo": audit => "content" } ~> exec { "/bin/echo DING": refreshonly => true }' 
Notice: Compiled catalog for this-box in environment production in 0.12 seconds 
Notice: /Stage[main]/Main/File[/tmp/foo]/content: audit change: previously recorded value {md5}d3b07384d113edec49eaa6238ad5ff00 has been changed to {md5}c157a79031e1c40f85931829bc5fc552 
Notice: /Stage[main]/Main/Exec[/bin/echo DING]: Triggered 'refresh' from 1 events 
Notice: Applied catalog in 0.09 seconds 

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

+1

«Кажется, он работает с Puppet' 4.4.2', что означает, что это работает в Puppet '> = 4.4.2', а не раньше? –

+0

@MattSchuchard Я лениво не тестировал другие версии. Я полагаю, что он будет работать с любым «4.x», и я считаю, что для «3.x». Запустите небольшой тест «3.4.3» и обновите ответ. –

+0

Хорошо, это просто показалось интересной версией. 4.8.1 является последним, 4.7.0 является последним внутри PE, а 4.6.2 - это то, что я считаю последним стабильным, поэтому мне было любопытно, почему выбор 4.4.2. –