2017-04-20 12 views
0

マスターから1つのファイルをコピーしてエージェントにインストールするモジュールを作成し、以下のコードで正常に動作します。別のディレクトリにある別のファイルを開き、それぞれを別のノードセットにインストールします。 (Aシステムと呼ばれるipsまたはdnsの名前のようなものです...) たとえば、AシステムノードのすべてのエージェントにファイルAをインストールする必要があります。 BシステムノードのすべてのエージェントにファイルBをインストールする必要があります CシステムノードのすべてのエージェントにファイルCをインストールする必要があります3つの異なるエージェントの場所に3つの異なるファイルをコピーしてインストールする方法

[または、ファイルシステムはすべてのシルバーシステムにインストールする必要があります。]というように、FILE2とFILE3

class profile::ma { 
    file { '/tmp/filename.sh': 
     ensure => 'present', 
     replace => 'no', 
     source => 'puppet:///module/files/filename.sh', 
     mode => '0755', 
     notify => Exec['install'], 
    } 

    exec { 'install': 
     command  => '/tmp/filename.sh -i', 
     onlyif  => '/usr/bin/test ! -e /etc/filetocheck', 
    } 
} 

答えて

0

のソースのための新しい変数を設定し、その後、「A」、「B」、および「C」のため$::environment変数をテストし、あなたは人形環境を意味すると仮定すると、ファイルと、それが入っている環境に応じてターゲットパスの新しい変数を設定します。

if $::environment == 'A' { 
    $source_file = 'filename_A.sh' 
    $target_file = '/tmp/filename_A.sh' 
} elsif $environment == 'B' { 
    $source_file = 'filename_B.sh' 
    $target_file = '/tmp/filename_B.sh' 
# and so on 
} 

あなたはまた、1つの変数のみをテストするためにcase statementを使用することができます:

case $::environment { 
    'A': { 
    $source_file = 'filename_A.sh' 
    $target_file = '/tmp/filename_A.sh' 
    } 
    'B': { 
    $source_file = 'filename_B.sh' 
    $target_file = '/tmp/filename_B.sh' 
    } 
} 

をそして、ハードコードされた値の代わりにこれらの変数を使用します。

file { $target_file: 
    ensure => 'present', 
    replace => 'no', 
    source => "puppet:///module/files/${source_file}", 
    mode => '0755', 
    notify => Exec['install'], 
} 
+0

感謝if statementはINGのあなたは返信のために - しかし、私は環境ではないと言わざるを得ない、それはノードのセットです...私はfile1がすべてのシルバーシステム/ノードにインストールされる必要があります。 DNSでルックアップを使用することはできますが、正しいコードに苦しんでいる可能性があります – Moez

+0

「シルバーシステム」とは何ですか?ノードをどのように分類しているかについての詳細な情報がなければ、役に立つ答えは得られません。 –

+0

どのような場合でも、あなたのシステムを分類しても、この答えは適用可能です。 '$ environment'変数名を使用するものに変更してください。 '$ colour'です。 –

関連する問題