我在Puppet模块中有一个步骤,粗略地做了以下设置一些应用程序键:
file { '/root/setup_app_keys.sh': ensure => file, owner => 'root', group => 'root', mode => '0700', source => 'puppet:///modules/app_module/setup_app_keys.sh', } exec { 'setup_app_keys': unless => '/etc/pki/tls/private/app-foo.key', command => '/root/setup_app_keys.sh', user => 'root', group => 'root', }
setup_app_keys.sh脚本有点太长,无法做成(可读的)单行程序,所以我把它保存到机器的文件系统中并从那里执行。 它在/etc/pki...创build它的文件/etc/pki...并且它工作得很好。
令人讨厌的是,shell脚本基本上是一次性使用的东西。 它不应该再次运行在机器的生命周期,但它必须留在Puppet存储它的文件系统。 如果它被删除,Puppet再次有用地重新创build它。
我认为必须有一种方法来使用exec完全重写,这将允许我在需要的时候从puppetmaster下载脚本,执行一次,然后放弃脚本(或者不把它存储在第一位)。 但是我试过的一切都是这样的:
command => 'puppet:///modules/app_module/setup_app_keys.sh',
要么
command => 'curl http://__[various puppetmaster URLs]__ | sh',
而且两种方法似乎都不起作用。 我问的太多了,还是这个方法有缺陷?
在执行之前,您可以尝试将file置于过渡状态 。 最后的状态是
ensure => absent
这是写作时的年龄材料。 你的旅费可能会改变。
你可以添加你的'exec'
require => File["/root/setup_app_keys.sh"], refreshonly => true,
所以如果您更改脚本,它将只会再次运行
或者你可以在上次运行后添加你的'文件'
ensure => purged,
因为我认为你更好地使用ansible或mcollective,对于这种事情,我使用ansible。
有关它的更多信息。
http://docs.ansible.com/intro_getting_started.html
你可以从模板运行命令:
exec { 'my-command': command => template('template-for-my-command.erb') }