最初のディレクトリが存在する場合にのみ作成されるディレクトリ/ファイルの関数を作成しようとしています。依存関係が失敗したためにスキップする必要はありません。
私は試しました この "onlyif"回避策 ですが、残念ながら、私の機能では動作しません。
$check_directory = file("/path/to/directory")
if($check_directory != '') {
file{"/path/to/config":
ensure => directory,
mode => 0755,
}
file{"/path/to/config/a.conf":
ensure => file,
mode => 0755,
content => template("config_template.conf"),
}
}
エラーが発生しました:
Error: Is a directory - /path/to/directory
他のifステートメントを実行する方法はありますか?または任意のパラメータ?ありがとうございました。
a.conf
ファイルリソースでrequire
ステートメントを使用するだけでよいはずです。
file{"/path/to/directory":
ensure => directory,
mode => 0755,
}
file{"/path/to/config":
ensure => directory,
mode => 0755,
}
file{"/path/to/config/a.conf":
ensure => file,
mode => 0755,
content => template("config_template.conf"),
require => File["/path/to/directory"],
}
これにより、ファイルの前にディレクトリが作成されます。
@Svenの答えの精神は完全に正しいです。Puppetでbefore
、require
、notify
などを使用してリソースの依存関係を設定します。変更するのは、 defined()
関数を使用してテストします。
_file { '/tmp/foo':
ensure => 'directory',
mode => '0755',
}
if defined(File['/tmp/foo']) {
notice("/tmp/foo is defined! making /tmp/bar/baz")
file { '/tmp/bar':
ensure => 'directory',
mode => '0755',
}
file { '/tmp/bar/baz':
ensure => 'present',
mode => '0755',
require => File['/tmp/bar'],
}
}
_
他に役立つ2つのヒント:
Puppet 3.2+で "Future Parser" を有効にすると、_$a = File['/tmp/foo']['ensure']
_のようなリソース属性にアクセスできます。これにより、_/tmp/foo
_ファイルリソースのensure
属性の値が変数_$a
_に格納されます。これを調べることにした場合は、上記の例をif defined(File['/tmp/foo']) and File['/tmp/foo']['ensure'] == 'directory'
(未テスト)を使用するように書き換えます。
これらの項目をパラメーターとしてクラスに渡す場合は、 in-puppet-how-can-i-access-a-variable-attribute-inside- a-defined-type 。