web-dev-qa-db-ja.com

ディレクトリが存在する場合にのみファイルを作成しますか?

ディレクトリが存在する場合、またはそれが何もしない場合に、ファイルを作成するモジュールを記述しようとしています。

class puppetmodule{
  exec { 'chk_dir_exists':
    command => 'test -d /usr/dir1',
    path    =>  ["/usr/bin","/usr/sbin", "/bin"],
  } ->

  file {'usr/dir1/test.txt':
    ensure => 'file',
    owner  => 'root',
    group  => 'root',
    mode   => '0750',
  }
}

以下はそれが投げているエラーです。これについてアドバイスしてください。

エラー:test -d/usr/dir1が[0]ではなく1を返しました

5
joe

このようなものはうまくいきます:

  $dir = "/usr/dir1"

  exec { "chk_${dir}_exist":
    command => "true",
    path    =>  ["/usr/bin","/usr/sbin", "/bin"],
    onlyif  => "test -d ${dir}"
  }

  file {"${dir}/test.txt":
    ensure => file,
    owner  => 'root',
    group  => 'root',
    mode   => '0750',
    require => Exec["chk_${dir}_exist"],
  }

説明:

onlyif => "test -d ${dir}"

つまり、Execリソースは、test -dの出力がtrueの場合にのみ作成されます。

require => Exec["chk_${dir}_exist"]

ファイルリソースは、Execリソースが存在する場合にのみ作成されることを意味します。

ディレクトリが存在しない場合、Puppetを実行すると、Execリソースが存在しないためにファイルリソースを作成できないことを示すエラーが生成されます。これは予想されることであり、パペットカタログの残りの部分が引き続き適用されるため、無視しても問題ありません。

ディレクトリが存在する場合、ファイルリソースが作成され、適用されます。

3
Martin K

人形は終わりの状態です。指定した状態または存在しない状態でファイルが存在することを確認できます。分岐(if)ロジックを実行する必要がある場合、Puppetはそれもサポートします。ドキュメントの条件文を参照してください- https://docs.puppet.com/puppet/latest/reference/lang_conditional.html

$directory_exists = <insert logic here> 

if $directory_exists {
  file {'usr/dir1/test.txt':
    ensure => 'file',
    owner  => 'root',
    group  => 'root',
    mode   => '0750',
  }
}
0
ferventcoder