2017-04-20 65 views
0

我創建了一個模塊來從主服務器複製一個文件並安裝到代理,並且它可以正常工作,但是現在我試圖複製3不同目錄下的不同文件並將其安裝在不同的節點集上。 (它類似於一系列稱爲A系統的ips或dns名稱...) 例如:文件需要在A系統節點中的所有代理上安裝。 文件B需要對B中的系統節點 文件C需要所有的代理要在用C系統的所有代理安裝安裝的節點如何從puppet master複製並安裝3個不同的文件到3個不同的代理位置

[或者你可以把它看作:文件1需要在所有銀系統安裝]等,對文件2和文件3

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」的$::environment變量,和「C」,然後設定新的變量的源文件和目標路徑的新變量,取決於它處於哪個環境中。

我們荷蘭國際集團的if statement

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 
} 

你也可以使用一個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

謝謝你回答 - 但我應該說沒有environemt,它是節點的集合......就像我需要file1被安裝在所有的銀色系統/節點上。 它可以用於查找與DNS,但掙扎什麼是正確的代碼 – Moez

+0

什麼是「銀色系統」?沒有關於如何分類節點的更多信息,不可能提供有用的答案。 –

+0

在任何情況下,無論您如何對系統進行分類,都應該使用此答案 - 只需將「$ environment」變量名稱更改爲您使用的任何名稱即可。 '$ colour'。 –

相關問題