在 Puppet 中将数组作为值传递会安装我的包吗?

在 Puppet 中将数组作为值传递会安装我的包吗?

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

相关内容