4

在 puppet 中,您可以通过执行以下操作 chown/chmod 单个文件:

file {
    '/var/log/mylog/test.log':
    ensure  => 'present',
    mode    => '0644',
    owner    => 'me';
}

关于这个的两个问题:

  1. ensure=>'present' 将确保 '/var/log/mylog/test.log' 存在,如果不存在则创建它。如果文件存在,如果文件不存在,有什么办法可以让它执行操作,不要费心创建/删除它,只需忽略它并继续。

  2. 假设我在 /var/log/mylog/ 下有 3 个文件,我想批量对它们进行 chown/chmod,而不是在我的 puppet 代码中有 3 个文件资源部分。我可以做类似下面的事情吗(因为,下面的代码不存在,它现在在我的梦想中^_^):

    files {
        '/var/log/mylog/*.log':
        ensure  => 'present',
        mode    => '0644',
        owner    => 'me';
    }
    
4

1 回答 1

8
  1. 如果您想指定在文件存在、文件不存在等情况下采取给定的操作。您目前别无选择(据我所知),只能使用exec带有creates+ onlyifunless指令的资源。例如,您可以使用(请参阅参考文档

     exec { "touch /var/log/mylog/test.log":
        path    => "/usr/bin:/usr/sbin:/bin",
        user    => "${yourmodule::params::user}",
        group   => "${yourmodule::params::group}",
        creates => "/var/log/mylog/test.log", 
        unless  => "test -f /var/log/mylog/test.log"
     }
    
     file { '/var/log/mylog/test.log':
        ensure  => 'present',
        mode    => "${${yourmodule::params::mode}",
        owner   => "${yourmodule::params::user}",
        group   => "${yourmodule::params::group}",
        require => Exec["touch /var/log/mylog/test.log"]    
     }
    
  2. 不,同样,您必须使用exec资源。

于 2012-06-07T08:44:24.313 回答