Puppet 是否可以在不保存的情况下运行 shell 脚本(从 master 下载)?

smi*_*lli 7 puppet

我在 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',
}
Run Code Online (Sandbox Code Playgroud)

setup_app_keys.sh脚本有点太长,无法制作成(可读的)单行,所以我将它保存到机器的文件系统并从那里执行它。它在其中创建文件/etc/pki...并且运行良好。

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

我认为必须有一种方法可以使用exec专门重写它,这将允许我在需要时从 puppetmaster 下载脚本,执行一次,然后丢弃脚本(或不首先存储它)。但我尝试过的一切都是这样的:

command => 'puppet:///modules/app_module/setup_app_keys.sh',
Run Code Online (Sandbox Code Playgroud)

或者

command => 'curl http://__[various puppetmaster URLs]__ | sh',
Run Code Online (Sandbox Code Playgroud)

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

小智 2

你可以添加你的“exec”

require => File["/root/setup_app_keys.sh"],
refreshonly => true,
Run Code Online (Sandbox Code Playgroud)

所以只有当你更改脚本时它才会再次运行

或者您可以在上次运行后添加到“文件”中

ensure  => purged,
Run Code Online (Sandbox Code Playgroud)