Puppetで条件付きでファイル/ディレクトリを作成する方法は?


17

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

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

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

ありがとう


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

回答:


30

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

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

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

5
ああ、それは悪です、私はそれが好きです:-)
デニスカースメーカー

1
さらに簡単になります:exec {"test -e / path / must / be / available":}
デニスカースメーカー

1
ありがとう。これは、単一のディレクトリチェックに最適です。ただし、ディレクトリの配列を検証しようとしています...これを関数に追加すると、「再宣言できません」というエラーが表示されます。
ddario

6
素晴らしいアイデアですが、これはすべてのPuppetの実行で「Exec [check_presence] / returns:execution successfully」という通知が表示されることを意味します。より良いでしょう:exec {'check_presence':command => '/ bin / false'、ただし=> '/ usr / bin / test -e / path / must / be / available'、}これは同じですが、パスが実際に存在しない場合にのみエラー/通知を作成します。
S0me0ne

2
「require」の失敗を引き起こすものは、onlyifを使用する場合も、exceptを使用する場合も、失敗した依存関係を持つものとしてエラーを生成します。
デビッドガードナー

0

私も、ディレクトリが存在しない場合にモジュールが実行されないようにする方法を理解するのが困難でした。これが私にとってうまくいったことがわかった。

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

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

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


1
これはマスター上でのみ実行され、モジュール内のファイルを見つけるためのものです。
bodgit

ありがたいことですが、フルパスを提供するかどうかによって、OS上のファイルを見つけるのにも使用できますか?
マイク

カタログがコンパイルされるマシン、つまりマスター上のみ。
bodgit

はい、そうです。
マイク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.