puppet - 使用带有包“版本”和“持有”的确保

hok*_*key 3 puppet

概述:

刚开始使用 Puppet 并使用以下数组和“确保”,因此安装了特定版本的 Apache(而不是最新版本)并“保留”(这意味着它不会按照标准升级apt-get dist-upgrade到最新版本。

问题:

当使用下面的代码时,Puppet 只考虑确保数组中的第一个值。因此,当执行下面的代码时,它会安装正确版本的 Apache,但该包未设置为保留(通过运行检查dpkg --get-selection)。

如果交换数组中的值,则保留该包但安装最新版本。

代码:

package { 'apache2':

        ensure => [ "2.0.64", held ],
 }
Run Code Online (Sandbox Code Playgroud)

感谢任何关于这个的指针!
谢谢。

Kyl*_*ith 6

我可以通过阅读源代码告诉我,“可持有”功能从根本上是有缺陷的。确保(请参阅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)