我在 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...
并且运行良好。
令人讨厌的是,shell 脚本基本上是一次性使用的东西。在机器的整个生命周期内,它都不应该再次运行,但它必须保留在 Puppet 存储它的文件系统上。如果删除了它,Puppet 会很有帮助地重新创建它。
我认为必须有一种使用exec
排他性重写此脚本的方法,这样我就可以在需要时从 Puppetmaster 下载脚本,执行一次,然后丢弃该脚本(或者首先不存储它)。但我尝试过的所有方法都是这样的:
command => 'puppet:///modules/app_module/setup_app_keys.sh',
或者
command => 'curl http://__[various puppetmaster URLs]__ | sh',
这两种方法似乎都不起作用。是我要求太多了,还是这种方法存在缺陷?
答案1
答案2
您可以添加“exec”
require => File["/root/setup_app_keys.sh"],
refreshonly => true,
因此只有你更改脚本它才会再次运行
或者您可以在上次运行后添加您的“文件”
ensure => purged,
答案3
对于这种情况,我认为最好使用 ansible 或 mcollective,对于这种事情,我使用 ansible。
欲了解更多信息,请访问。
http://docs.ansible.com/intro_getting_started.html
答案4
您可以从模板运行命令:
exec { 'my-command':
command => template('template-for-my-command.erb')
}