运行木偶执行文件更新权从第一次申请

我想运行一个基于文件更新的puppet exec-resource。 就像是:

File { '/tmp/foo.bar': audit => content, } ~> exec { 'deployment': command => 'do_something_meaningful.sh', } 

但是这会在每一个木偶应用程序中执行。 即使该文件没有改变。 所以我尝试了exec-attribute refreshonly 。 但是有了这个,执行者就不会被执行第一个傀儡 – 申请。 我认为这是因为state.yml没有md5校验和。 它从第二次运行很好。

我目前的解决方法是这样的:

 File { '/tmp/foo.bar': audit => content, } exec { 'deployment_on_change': command => 'do_something_meaningful.sh', refreshonly => true, subscribe => File['/tmp/foo.bar'] } exec {'deployment_on_first_run': command => 'do_something_meaningful.sh', onlyif => 'test ! -f marker.file', subscribe => File['/tmp/foo.bar'] } -> file { 'marker.file': ensure => present } 

有没有更好的方法来解决这个问题?

你迫使Puppet进入它不是为了devise的东西。 通过执行你只会延长每个木偶运行。 而你不想要的。

只需使用一个cron作业,它将检查是否有变化。

 file{'/usr/bin/local/do_something_meaningful': ensure => present, owner => 'myuser', mode => '0755', source => 'puppet:///modules/my_module/do_something_meaningful.sh', } cron { 'do_something_meaningful': command => '/usr/bin/local/do_something_meaningful', user => 'myuser', hour => ['8-17'], minute => '*/30', require => File['/usr/bin/local/do_something_meaningful'], } 

如果您使用其他工具部署代码,则应将do_something_meaningful.sh挂钩到部署过程中。 木偶是确保一些资源(文件,软件包,服务等)的存在。