Puppet 对一个目录下的文件批量复制chown/chmod

Puppet 对一个目录下的文件批量复制chown/chmod,puppet,Puppet,在puppet中,您可以通过执行以下操作来chown/chmod单个文件: file { '/var/log/mylog/test.log': ensure => 'present', mode => '0644', owner => 'me'; } 关于这一点,有两个问题: 确保=>'present'将确保'/var/log/mylog/test.log'存在,如果它不存在,它将创建它。如果文件存在,我有什么方法可以让它执行操作

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

file {
    '/var/log/mylog/test.log':
    ensure  => 'present',
    mode    => '0644',
    owner    => 'me';
}
关于这一点,有两个问题:

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

  • 假设我在/var/log/mylog/下有3个文件,我希望在批处理中对它们进行chown/chmod,而不是在我的puppet代码中有3个文件资源部分。我可以做下面这样的事情吗(当然,下面的代码不存在,它现在在我的梦中^ u^):

  • 如果要指定在文件存在、文件不存在等情况下执行给定操作,则(据我所知)当前除了使用
    exec
    资源和
    creates
    +
    onlyif
    指令之外,您别无选择。
    例如,您可以使用(请参阅)

  • 否。同样,您必须使用
    exec
    资源

  • files {
        '/var/log/mylog/*.log':
        ensure  => 'present',
        mode    => '0644',
        owner    => 'me';
    }
    
     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"]    
     }