我的Puppet清单中有一系列exec
:
/tmp
。 当我第一次应用清单时,它可以正常工作。但是,当我清理/tmp
并再次应用清单时,它会失败,因为第一个exec没有执行(这是正确的),但第二个仍然尝试执行并失败,因为ZIP文件不存在。< / p>
如果第一个exec没有下载文件,如何修改清单以跳过第二个exec?
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'],
}
答案 0 :(得分:5)
试试这个:
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则不会运行。
通常我会把它放到一个更永久的位置并留在那里。然后代替除非=&gt; '哪个ngrok'检查,替换为creates =&gt; '/path/to/zip.file'。结果是只要文件仍然存在,就不会触发任何执行。
在对zip文件进行版本设置并想要更改版本时派上用场。
答案 1 :(得分:0)
你也可以尝试更简单的方法:
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'],
refreshonly => true,
}
Exec ['ngrok-download']通知Exec ['ngrok-unzip']如果应用,Exec ['ngrok-unzip']仅在需要时刷新其状态
通过以下方式可以实现同样的目的:
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'],
refreshonly => true,
}
Exec['ngrok-download'] ~> Exec['ngrok-unzip']
希望这有帮助。