Puppet 是否可以运行 shell 脚本(从主服务器下载)而不保存它?

Puppet 是否可以运行 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...并且运行良好。

令人讨厌的是,shell 脚本基本上是一次性使用的东西。在机器的整个生命周期内,它都不应该再次运行,但它必须保留在 Puppet 存储它的文件系统上。如果删除了它,Puppet 会很有帮助地重新创建它。

我认为必须有一种使用exec排他性重写此脚本的方法,这样我就可以在需要时从 Puppetmaster 下载脚本,执行一次,然后丢弃该脚本(或者首先不存储它)。但我尝试过的所有方法都是这样的:

command => 'puppet:///modules/app_module/setup_app_keys.sh',

或者

command => 'curl http://__[various puppetmaster URLs]__ | sh',

这两种方法似乎都不起作用。是我要求太多了,还是这种方法存在缺陷?

答案1

您可以尝试将自己file过渡状态在执行之前存在。最终状态将是

ensure => absent

这是撰写本文时的最新材料。您的里程可能会有所不同。

答案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')
}

相关内容