2015-07-20 38 views
1

我想寫一個puppet腳本,將通過un-tar安裝一個模塊。如果它已經沒有焦油,我想讓傀儡失敗。我試圖做下面的代碼,但它總是失敗,即使目錄不存在。失敗,當一個文件存在於木偶

我檢查/ opt/sk是否存在,然後失敗,否則繼續安裝。

define splunk::fail($target) 
{ 
    $no = 'true' 
    case $no { 
     default : { notice($no) }#fail('sk is already installed.')} 
    } 
} 

define splunk::forwarder($filename , $target) 
{ 
    file{"$target/sk": 
     ensure => present 
    } 

    splunk::fail{"NO": 
     target => '/opt/', 
     require => File[$target], 
    } 

    file{"$target/A.tgz": 
     source => $filename , 
     replace => false , 
    } 

    exec{"NO1": 
     command => "tar xzvf A.tgz" , 
     cwd => $target , 
     require => File["$target/A.tgz"] , 
    } 

    exec{"Clean": 
     command => "rm -rf A.tgz" , 
     cwd => target , 
     require => Exec["NO1"], 
    } 
} 

splunk::forwarder {"non": 
    filename => 'puppet:///modules/splunk/files/NO.tgz' , 
    target => '/opt/', 
} 

感謝

回答

0

您應該使用 「創」 EXEC的屬性,例如:

exec { 'install': 
    command => "tar zxf ${package}", 
    cwd  => $some_location, 
    path => $path, 
    creates => "${some_location}/my_package", 
} 

木偶將只執行 '安裝',如果 「$ {} some_location/my_package」 不存在。

2

定義custom_fact,並用它來與fail資源相結合。

在Ruby目錄e.g /usr/lib/ruby/vendor_ruby/facter與內容定義文件tmp_exist.rb

# tmp_exist.rb 

Facter.add('tmp_exist') do 
    setcode do 
    File.exist? '/root/tmp' 
    end 
end 

接下來用它在木偶表現。 E.g我str2bool功能結合從STDLIB:

class test { 

    if !str2bool($::tmp_exist) { 
    fail('TMP NOT EXIST') 
    } 

    if !str2bool($::foo_exist) { 
    fail('FOO NOT EXIST') 
    } 
} 

include test 

/root只創建tmp文件。

在結果你將有:

Error: FOO NOT EXIST at /etc/puppet/deploy/tests/test.pp:8 on node dbmaster

更新:我更新了我的答案。克里斯皮特曼是對的,我以前的解決方案只適用於木偶大師或與傀儡適用。 我還發現了一篇文章,介紹如何在puppet中定義自定義函數file_exists。這也可能有幫助。

+0

這隻能在木偶大師身上運作。 –

+0

@ChrisPitman確實,我的不好。我更新了我的答案。 – kkamilpl