如果其中一个文件不存在,有没有办法告诉puppet只执行命令?

时间:2014-08-07 11:44:28

标签: 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,

  notify  => Service['openvpn'],
}
[...]

首先它会创建认证,但是如果我修改了usercerts变量,它将不再启动脚本。
有没有限制,create参数无法处理数组?
如果存在这些文件中的任何一个或者全部存在,那么木偶会阻止执行吗?
我应该创建一个脚本来检查这些文件是否存在并将其放入onlyif?

1 个答案:

答案 0 :(得分:1)

你不应该在课堂上这样做。

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'],
    }
}

然后通过

使用此功能
openvpn_keys {
   [ "user1", "user2" ]:
}