4

puppet では、次のようにして単一のファイルを chown/chmod できます。

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

これに関する2つの質問:

  1. ensure=>'present' は、'/var/log/mylog/test.log' が存在することを確認します。存在しない場合は作成します。ファイルが存在する場合にアクションを実行させる方法はありますか? ファイルが存在しない場合は、作成/削除する必要はありません。無視して続行してください。

  2. /var/log/mylog/ の下に 3 つのファイルがあるとします。パペット コードに 3 つのファイル リソース セクションを含めるのではなく、それらすべてをバッチで chown/chmod したいと考えています。以下のようなことはできますか (以下のコードは存在しません。今は私の夢の中にあります ^_^ ):

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

1 に答える 1

8
  1. ファイルが存在する場合、ファイルが存在しない場合などに特定のアクションを実行するように指定したい場合は、現在、+ またはディレクティブでexecリソースを使用する以外に (私の知る限り) 選択肢がありません。たとえば、次を使用できます(参照ドキュメントを参照)createsonlyifunless

     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 に答える