我正在尝试编写一个将通过un-tar安装模块的puppet脚本。我想要木偶失败,如果它已经没有焦油。我尝试在代码下面做,但即使目录不存在也总是失败。
我正在检查/ 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 :(得分:2)
定义custom_fact并将其与fail资源结合使用。
在您的ruby目录中,例如/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
接下来在木偶清单中使用它。例如,我将它与stdlib:{/ p>中的str2bool函数结合起来
class test {
if !str2bool($::tmp_exist) {
fail('TMP NOT EXIST')
}
if !str2bool($::foo_exist) {
fail('FOO NOT EXIST')
}
}
include test
在/root
仅创建tmp
文件。
结果你会得到:
错误:在节点dbmaster上的/etc/puppet/deploy/tests/test.pp:8上不存在FOO
更新:我更新了我的回答。克里斯皮特曼是对的,我之前的解决方案只适用于木偶大师或木偶申请。 我还发现了一篇描述如何在puppet中定义自定义函数file_exists的文章。这也可能有所帮助。
答案 1 :(得分:0)
您应该使用exec的“creates”属性,例如:
exec { 'install':
command => "tar zxf ${package}",
cwd => $some_location,
path => $path,
creates => "${some_location}/my_package",
}
如果“$ {some_location} / my_package”不存在,Puppet将只执行'install'。