2016-08-01 12 views
0

人形を呼び出すにはとにかくfileリソースからexecリソースからunless条件が満たされている場合のみですか?手段はデフォルトでfileリソースが実行されるべきではなく、execリソースのみによってトリガーされる可能性があります。人形人形はexecリソースからのみファイルリソースを呼び出す必要があります

更新内容:

ここ

は私のマニフェストファイル

ここ
file { '/tmp/test_script.sh': 
     path => '/tmp/test_script.sh', 
     mode => 755, 
     owner => 'root', 
     group => 'root', 
     ensure => file, 
     source => "puppet:///modules/custom_files//tmp/test_script.sh", 
} 

exec {'run_script': 
     unless => '/bin/rpm -qa | grep package-name', 
     require => File['test_script.sh'], 
     command => '/tmp/test_script.sh', 
} 

である私は、file { '/tmp/test_script.sh':リソースがexecリソースの状態unless => '/bin/rpm -qa | grep package-name',が満たしていない場合にのみ、実行していたいです。そうしないと、このファイルリソースは実行されません。

+0

なぜこのようなことが必要ですか? –

+1

いいえ、存在しません。あなたが達成しようとしていることをより完全に説明すれば、多分別の方法を提案することができます。 –

+0

私は@JohnBollingerに同意します。あなたに教育的意見を与えるために十分な情報を誰かに提供したかどうかはわかりません。コード例を提供できますか? – ptierno

答えて

1

あなたが提示したものは、あなたが意図するようなことをすることはありません。 Execは最初に(条件付きで)Fileを適用する必要があるため、独自のunlessパラメータは時間的に評価されません。

一般的に言えば、パペットがそのマシンのカタログの内容を決定する際の機械の現在の状態の詳細は、ファクトを介してカタログコンパイラに伝えなければなりません。 Puppet/Facterには、必要な情報を伝えるビルトインファクトはありませんが、エージェントがあなたのために評価するexternal factまたはcustom factを追加するのはかなり簡単です。

関連するソフトウェアのバージョンによって若干の違いがありますが、リモートで最近のPuppetとFacterを使用している場合は、私の推薦は外部の事実です。たとえば、あなたが適切なモジュールのfacts.d/ディレクトリにこのスクリプトをドロップすることがあります

#!/bin/bash 

echo mypackage=$(/bin/rpm -q mypackage || echo none) 

をあなたのマニフェストでは、あなたがこれを行うことができます:

if $mypackage == 'none' { 
    file { '/tmp/test_script.sh': 
    path => '/tmp/test_script.sh', 
    mode => 755, 
    owner => 'root', 
    group => 'root', 
    ensure => file, 
    source => "puppet:///modules/custom_files//tmp/test_script.sh", 
    } 

    exec {'run_script': 
    command => '/tmp/test_script.sh', 
    require => File['test_script.sh'], 
    } 
} 

注意を任意のリソースが適用される前に事実が評価されること、問題のRPMを管理する可能性のある他のマニフェストがある場合は、それを調整したいと思うでしょう。

+0

詳細情報をありがとう!それは事実を通して私を助けます。私はこれを制限する人形ファイルのリソース自体に同じ方法があるはずだと思った。 – Karthi1234

関連する問題