![在 Puppet 中将数组作为值传递会安装我的包吗?](https://linux22.com/image/801960/%E5%9C%A8%20Puppet%20%E4%B8%AD%E5%B0%86%E6%95%B0%E7%BB%84%E4%BD%9C%E4%B8%BA%E5%80%BC%E4%BC%A0%E9%80%92%E4%BC%9A%E5%AE%89%E8%A3%85%E6%88%91%E7%9A%84%E5%8C%85%E5%90%97%EF%BC%9F.png)
我正在研究 Puppet 文档。其中一项练习是使用一些条件逻辑来编写通用安装清单:
练习:使用 $operatingsystem 事实编写清单,在基于 Debian(“debian”、“ubuntu”)和基于 Enterprise Linux(“centos”、“redhat”)的机器上安装构建环境。(这两种类型的系统都需要 gcc 包,但 Debian 类型的系统还需要 build-essential。)
我编写了可以运行的代码,但是因为我的机器是 centos 机器,所以我无法检查分支是否有效:
$build_packages = $::operatingsystem ? {
/(?i)centos|redhat/ => 'gcc',
/(?i)debian|ubuntu/ => ['gcc','build-essential'],
default => undef
}
notify {"build_packages":
message => "Build packages for ${::operatingsystem} are: ${build_packages}\n",
before => Package['build']
}
package {'build':
ensure => installed,
name => $build_packages
}
我的问题是,如果我使用的是 Debian 或 ubuntu 系统,这会起作用吗?具体来说,如果我设置$build_packages
为数组,包资源会做正确的事情并安装这两个包吗?或者我应该像这样重新定义该资源?:
package {$build_packages:
ensure => installed
}
答案1
第二个,package {$build_packages:
。它将扩展为数组中每个成员的资源,并且将安装数组中的每个包。
请注意,由于数组假定它是一个字符串,因此它会破坏notify
资源。message
$build_packages