Automation 有没有办法告诉puppet仅在其中一个文件不存在时执行命令?
我想用puppet创建openvpn证书。我有一个创建这些证书的脚本,但我只想在必要时执行它。清单如下所示:Automation 有没有办法告诉puppet仅在其中一个文件不存在时执行命令?,automation,puppet,Automation,Puppet,我想用puppet创建openvpn证书。我有一个创建这些证书的脚本,但我只想在必要时执行它。清单如下所示: [...] $keydir = ['/etc/openvpn/easy-rsa/keys'] $usercerts = ["$keydir/user1.crt", "$keydir/user2.crt"] exec { 'build-keys': command => '/opt/openvpn/build-keys', creates => $usercerts
[...]
$keydir = ['/etc/openvpn/easy-rsa/keys']
$usercerts = ["$keydir/user1.crt", "$keydir/user2.crt"]
exec { 'build-keys':
command => '/opt/openvpn/build-keys',
creates => $usercerts,
notify => Service['openvpn'],
}
[...]
首先它创建证书,但是如果我修改usercerts变量,它将不再启动脚本是否存在creates参数无法处理数组的限制
如果存在这些文件中的任何一个或所有文件,puppet是否会阻止执行
我是否应该创建一个脚本来检查这些文件是否存在并将其放入onlyif中?您不应该在类中执行此操作
define openvpn_keys($username=$name, $keydir = '/etc/openvpn/easy-rsa/keys') {
$usercert = "$keydir/$username.crt"
exec { "build-keys-for-$username":
command => '/opt/openvpn/build-keys',
creates => $usercert,
notify => Service['openvpn'],
}
}
然后使用这个via
openvpn_keys {
[ "user1", "user2" ]:
}
它应该会起作用。这是什么版本的Puppet(代理)?节点上的Puppet版本是2.7.23OK,应该足够了。您是否尝试过使用
-dv
标志运行?这表示已注意到Exec[build keys],但它没有运行。我在下面发布了结果:注意:/Stage[main]/Openvpn::Keygen/Exec[build keys]:将从1个事件触发“刷新”调试:/Stage[main]/Openvpn::Keygen/Exec[build keys]:容器类[Openvpn::Keygen]将传播我的刷新事件信息:/Stage[main]/Openvpn::Keygen/Exec[build keys]:调度服务刷新[Openvpn]Hm,还不清楚。最后,您是否确保$usercerts
的当前值不表示代理系统上已经存在的文件?