gpt4 book ai didi

puppet - 在 Puppet 中声明数组元素之间的依赖关系

转载 作者:行者123 更新时间:2023-12-05 05:47:41 26 4
gpt4 key购买 nike

有没有什么方法可以用 Puppet 的语言声明数组中的包应该按照它们在数组中给出的顺序安装?

我想自动安装 CUDA,这需要 nvidia-driver-latest-dkmscudacuda-drivers(在以 RHEL7 为例)按此顺序安装。我不想硬编码包数组,因为我需要支持不同的发行版,这需要不同的包。因此,一个包含通过 Hiera 提供的包的数组似乎是个好主意。

我的第一个解决方案是 ensure_packages($packages_parameter_filled_via_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 数据。

最佳答案

是的,这实际上可以通过“包装器”定义的资源类型实现:

define custom::install(Hash $pkg_hash) {
# iterates through the packages in the hash using their keys, and creates a package default where each requires the previous package
# index > 0 ensures the first package does not attempt to require a nonexistent previous package
keys($pkg_hash).each |Integer $index, String $pkg| { if $index > 0 { Package[keys($pkg_hash)[$index - 1]] -> Package[$pkg] } }

create_resources(package, $pkg_hash)
}

为了表扬应有的功劳,Henrik Lindberg 最初向我指出了这个方向,所以这不完全是我的创作。已定义资源类型的输入 Hash $pkg_hash 是一个包 hash 类型,类似于 create_resources 函数第二个参数的输入参数结构。例如:

$pkg_hash = {
'cuda-epel-release' => { ensure => installed },
'cuda-nvidia-driver-latest-dkms' => { ensure => installed }
}

或 Hiera 数据 YAML 格式:

pkg_hash:
'cuda-epel-release':
ensure: installed
'cuda-nvidia-driver-latest-dkms':
ensure: installed

然后是预期的custom::install($pkg_hash)

注意DRT中的create_resources可以正常替换:

$pkg_hash.each |String $package, Hash $attributes| {
package { $package: *=> $attributes }
}

documentation底部所述(Puppet 文档快速链接无效)。

关于puppet - 在 Puppet 中声明数组元素之间的依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70942825/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com