web-dev-qa-db-ja.com

ファイル/ディレクトリがPuppetに条件付きで存在する方法は?

渡されたディレクトリパスが存在しない場合にfailを実行する関数をパペットで記述しようとしています。

_if File["/some/path"]_は常にtrueを返し、if defined(File["/some/path"])は、リソースが実際に存在するかどうかに関係なく、リソースがパペットで定義されている場合にのみtrueを返します。

単純なifステートメントでこれを行う方法はありますか?

ありがとう

19
ddario

この回避策:exec "test"でのみifを使用し、実行するアクションでそれを要求します。

exec {"check_presence":
  command => '/bin/true',
  onlyif => '/usr/bin/test -e /path/must/be/available',
}

whatever {"foo...":
  .....
  require => Exec["check_presence"],
}
32
Pascal Schmiel

注意:マニフェストはマスターでコンパイルされます。彼らは提出する事実を除いてクライアントについて何も知りません。したがって、この情報を含む事実を書くか、一歩下がって実際に解決しようとしていることを教えて、ifステートメントよりも優れたアプローチを考え出すことができます。

4

また、組み込み関数find_file()を使用することもできます。ファイル/パスが存在しない場合はundefを返し、存在する場合は文字列を返します。

https://puppet.com/docs/puppet/5.5/function.html#findfile

0
Mike

私も、ディレクトリが存在しない場合にモジュールが実行されないようにする方法を理解するのに苦労していました。これは私のために働いた私が見つけたものです。

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などのテストコマンドへのパスを追加しても、正しく機能していないようです。

これが同じ問題を抱えている可能性のある他の人を助けることを願っています。

0
Mike Taylor