我想只在没有特定的rpm版本时才执行某些类。
例如:
class base{
if specified_rpm_absent {
include base::class1
include base::class2
}
else {
notify {"Already there":}
}
}
答案 0 :(得分:2)
你可以做的是定义一个custom fact,根据RPM的存在与否,返回true或false,然后在条件逻辑中使用它,即
事实代码:
Facter.add(:specified_rpm_absent) do
setcode do
# Some Ruby code to return true or false depending on RPM package
# Facter::Core::Execution.exec() can be used to execute a shell
# command.
end
end
Puppet 4
class base {
if $facts['specified_rpm_absent'] {
include base::class1
include base::class2
}
else {
notify {"Already there":}
}
}
Puppet 3
class base {
if $::specified_rpm_absent {
include base::class1
include base::class2
}
else {
notify {"Already there":}
}
}
OP在下面论述,最好在这里使用木偶函数,函数也允许参数。
如果使用了Masterup Puppet,Puppet不支持,可以使用函数来实现此目的,Jussi Heinonen的书“Learning Puppet(2015)”中描述了这个用例。
出于以下几个原因,我不推荐这种方法:
最后,应该指出的是,设计中可能存在一些更根本的错误,这些设计涉及根据是否安装了RPM来做出决策。为什么Puppet不知道RPM是否已安装?