我的 Puppet list 中有一系列 exec
:
- 第一个下载带有二进制文件的 ZIP 文件(除非已经安装了二进制文件)并将其保存到
/tmp
。 - 第二个将其解压缩。
当我第一次应用 list 时,它工作正常。但是,当我清理 /tmp
并再次应用 list 时,它会失败,因为第一个 exec 未执行(这是正确的),但第二个仍尝试执行并失败,因为 ZIP 文件是不存在。
如果第一个执行程序未下载文件,如何修改 list 以跳过第二个执行程序?
exec { 'ngrok-download':
command => 'wget https://dl.ngrok.com/linux_386/ngrok.zip -O /tmp/ngrok.zip',
unless => 'which ngrok',
path => ['/bin', '/usr/bin'],
}
exec { 'ngrok-unzip':
command => 'unzip ngrok.zip',
cwd => '/tmp',
path => ['/usr/bin'],
require => Exec['ngrok-download'],
}
最佳答案
试试这个:
exec { 'ngrok-download':
command => 'wget https://dl.ngrok.com/linux_386/ngrok.zip -O /tmp/ngrok.zip',
unless => 'which ngrok',
path => ['/bin', '/usr/bin'],
notify => Exec['ngrok-unzip'],
}
exec { 'ngrok-unzip':
command => 'unzip ngrok.zip',
cwd => '/tmp',
path => ['/usr/bin'],
refreshonly => true,
require => Exec['ngrok-download'],
}
这将导致 unzip exec 仅在 wget exec 实际执行某些操作时运行 - 如果找到 ngrok,则不会运行。
通常我会把它放到一个更永久的位置并留在那里。然后,用create => '/path/to/zip.file' 替换,而不是unless => 'which ngrok' 检查。结果是只要文件仍然存在,就不会触发任何执行操作。
当您对 zip 文件进行版本控制并想要更改版本时会派上用场。
关于puppet - Puppet 中的 Exec 序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21046339/