渡されたディレクトリパスが存在しない場合にfail
を実行する関数をパペットで記述しようとしています。
_if File["/some/path"]
_は常にtrueを返し、if defined(File["/some/path"])
は、リソースが実際に存在するかどうかに関係なく、リソースがパペットで定義されている場合にのみtrueを返します。
単純なif
ステートメントでこれを行う方法はありますか?
ありがとう
この回避策:exec "test"でのみifを使用し、実行するアクションでそれを要求します。
exec {"check_presence":
command => '/bin/true',
onlyif => '/usr/bin/test -e /path/must/be/available',
}
whatever {"foo...":
.....
require => Exec["check_presence"],
}
注意:マニフェストはマスターでコンパイルされます。彼らは提出する事実を除いてクライアントについて何も知りません。したがって、この情報を含む事実を書くか、一歩下がって実際に解決しようとしていることを教えて、ifステートメントよりも優れたアプローチを考え出すことができます。
また、組み込み関数find_file()を使用することもできます。ファイル/パスが存在しない場合はundefを返し、存在する場合は文字列を返します。
私も、ディレクトリが存在しない場合にモジュールが実行されないようにする方法を理解するのに苦労していました。これは私のために働いた私が見つけたものです。
exec { 'module_name':
command => "command to run with variables", # Double quotes for Variable interpolation
path => "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:",
onlyif => 'test -d /mydirectory',
}
パスを追加することは、本当に私にとってトリックをしたものです。何らかの理由で、/bin/test
などのテストコマンドへのパスを追加しても、正しく機能していないようです。
これが同じ問題を抱えている可能性のある他の人を助けることを願っています。