我正在研究木偶文档。其中一项练习是使用一些条件逻辑来编写一般安装清单:
练习:使用 $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
}
第二个,
package {$build_packages:
。它被扩展为数组中每个成员的资源,数组中的每个包都将被安装。但是请注意,该数组将破坏
notify
资源,因为它message
假定这$build_packages
是一个字符串。