如何在人偶条件中添加OR

时间:2018-10-08 17:52:11

标签: puppet

我是木偶的新手,我需要修改现有的木偶脚本

所以,我在连锁店里:

package { 'python-pip':
    ensure  => 'present',
} ->

实际上应该是

package { 'python2-pip':
    ensure  => 'present',
} ->

我可以添加一个OR条件,以便它同时适用于“ python2-pip”和“ python-pip”吗?因此,如果安装了这些软件包中的任何一个,结果将是肯定的-可能吗?

1 个答案:

答案 0 :(得分:1)

  

我可以添加一个OR条件,以便它同时适用于“ python2-pip”和“ python-pip”吗?因此,如果安装了这些软件包中的任何一个,结果将是肯定的-可能吗?

否,这是不可能的。每个Package资源都只管理一个软件包,而声明这样的资源意味着Puppet应该尝试确保指定的状态-在这种情况下,指定版本的软件包已安装在目标节点上。如果声明了两个软件包,那么Puppet将尝试管理两个软件包。

如果确实是“实际上应该是” python2-pip,那么您只需简单地更改清单即可。

但是,如果您管理的节点是异构的,实际上您可能是说在节点的严格子集上,程序包名称实际上应该是“ python2-pip”,而在其他情况下,当前的“ python-pip”是正确的。这种情况比较常见,通常可以通过使用节点事实来调整声明来解决。

这可以采用使用if块或其他条件语句在可替换的整个声明之间进行切换的形式,但是通常情况下,可能更需要外科手术。例如,一种常见的方法是有条件地选择包名称,将结果存储在变量中,然后将其插入声明中。也许是这样的:

$pip_package = $::operatingsystemmajrelease ? {
  default => 'python-pip',
  '7'     => 'python2-pip'
}

package { $pip_package:
    ensure  => 'present',
}

由于您是新手,因此值得花一些时间看看一些现有模块如何解决此类问题。 Github上提供了许多模块供您浏览,并且从Forge安装的任何内容至少在计算机上本地可用,供您检查。