我想运行一个基于文件更新的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
挂钩到部署过程中。 木偶是确保一些资源(文件,软件包,服务等)的存在。