Puppet - 用变量更改文件的权限

时间:2013-10-25 19:03:18

标签: regex puppet

你如何使用puppet来更改没有一致名称的文件的权限?

我的任务是管理一个日期附加在其末尾的二进制文件,如下所示:

lrwxrwxrwx 1 root root       18 Oct 25 18:46 apbridge -> ./apbridge20131025
lrwxrwxrwx 1 root root       18 Oct 25 18:46 apbridge1025 -> ./apbridge20131025
-rwxr-xr-x 1 root root     2914 Oct 25 18:46 apbridge20131025

apbridge20131025拥有错误的权限。通常以下情况会改变它:

  file  {'/root/alpsSim/alps_simulator_r7537/tester/apbridge20131025':
    owner   =>  'root',
    group   =>  'root',
    ensure  =>  file,
    mode    => '0755',
  }

然而,因为我无法预测apbridge会以什么数字结束,所以这很可能会破裂。

我无法控制apbridgexxxxx的名称,因为它是由第三方脚本安装的。末尾的数字代表它安装的那一天。

有没有办法在puppet文件资源声明中使用通配符?

2 个答案:

答案 0 :(得分:3)

我建议你使用exec:

exec { 'apbridge':
  command => 'find /root/alpsSim/alps_simulator_r7537/tester/ -maxdepth 1 -type f -iname "apbridge*" -exec chmod 755 {} \;',
  path    => '/bin:/sbin:/usr/bin:/usr/sbin',
}

答案 1 :(得分:1)

通常情况下,我建议不要在Puppet中使用exec,但在这种情况下,chmod是幂等的 - 但是运行它会获得相同的结果。还有一个小小的好处,Puppet不必为每个尝试更改权限的文件计算md5哈希值。

也就是说,确保权限的一种更优雅的方法是将它们设置在包含文件的目录上 - 假设只有apbridge*文件存在。

file  {'/root/alpsSim/alps_simulator_r7537/tester':
    owner   =>  'root',
    group   =>  'root',
    ensure  =>  directory,
    recurse => true,
    mode    => '0755',
}