有没有办法在Puppet的语言中声明,按照数组中给出的顺序安装软件包?
我想自动安装CUDA,需要按照特定的顺序安装、和(以RHEL7为例)。 我不想硬编码软件包数组,因为我需要支持不同的发行版,它们需要不同的软件包。 因此,通过Hiera提供软件包的数组似乎是一个很好的主意。
我的第一个解决方案是,但最近停止工作了(可能是由于NVIDIA软件包的更改)。 问题似乎是这段代码会随机安装软件包,如果已经安装了其他任何软件包,则无法再安装nvidia-driver-latest-dkms。
我的下一个方法,
我需要的是相当于循环实例之间的
我想自动安装CUDA,需要按照特定的顺序安装、和(以RHEL7为例)。 我不想硬编码软件包数组,因为我需要支持不同的发行版,它们需要不同的软件包。 因此,通过Hiera提供软件包的数组似乎是一个很好的主意。
我的第一个解决方案是,但最近停止工作了(可能是由于NVIDIA软件包的更改)。 问题似乎是这段代码会随机安装软件包,如果已经安装了其他任何软件包,则无法再安装nvidia-driver-latest-dkms。
我的下一个方法,
$packages.each | $package | {
ensure_packages($package)
}
与...有着同样的问题
$packages.each | $package | {
package { "cuda-${package}":
name => $package
}
}
我需要的是相当于循环实例之间的
->
或~>
运算符,或者一些“悬挂指针”结构,使我可以访问前一个$package
,这样我就可以在包资源中编写require => Package[$magic_previous_instance]
。也就是说,我想创建相当于:package { 'cuda-epel-release':
name => 'epel-release'
}
-> package { 'cuda-nvidia-driver-latest-dkms':
name => 'nvidia-driver-latest-dkms'
}
-> package { 'cuda-cuda':
name => 'cuda'
}
-> package { 'cuda-cuda-drivers':
name => 'cuda-drivers'
}
(这实际上是有效的,但仅适用于RHEL 7)动态地从Hiera数据中获取。