傀儡可以运行一个shell脚本(它从主下载),而不保存它?

我在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') }