我正在研究 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