刚开始使用 Puppet 并使用以下数组和“确保”,因此安装了特定版本的 Apache(而不是最新版本)并“保留”(这意味着它不会按照标准升级apt-get dist-upgrade到最新版本。
当使用下面的代码时,Puppet 只考虑确保数组中的第一个值。因此,当执行下面的代码时,它会安装正确版本的 Apache,但该包未设置为保留(通过运行检查dpkg --get-selection)。
如果交换数组中的值,则保留该包但安装最新版本。
package { 'apache2':
ensure => [ "2.0.64", held ],
}
Run Code Online (Sandbox Code Playgroud)
感谢任何关于这个的指针!
谢谢。
我可以通过阅读源代码告诉我,“可持有”功能从根本上是有缺陷的。确保(请参阅ensurable.do第 50 行)不能接受选项数组。因此,一个包不能既安装在特定版本上又使用 dpkg 标记为保持。我假设解析器的默认行为是这样的,如果它收到一个不支持的数组,则使用第一个值。这将解释你的结果。
在我看来,版本和/或可保留功能应该作为新变量重新实现,例如:
package { 'apache2'
ensure => installed,
version => '2.0.64',
hold => true,
}
Run Code Online (Sandbox Code Playgroud)
我建议您提交错误报告。与此同时,你可以这样做:
package { 'apache2':
ensure => '2.0.64',
}
exec { 'hold-apache2-version':
command => 'dpkg ...',
require => Package['apache2'],
}
Run Code Online (Sandbox Code Playgroud)