Puppet 包“ensure => latest”并不总是有效

Puppet 包“ensure => latest”并不总是有效

我遇到了一种特殊情况,即 Puppet 软件包ensure => latest指令仅在我的部分系统上有效。在 30 台服务器中,除了 4 台之外,软件包在其他所有服务器上都正确更新。我试图将软件套件的主要版本从 < 9.40 升级到 9.50。我可以指定一个硬级别,但我会遇到多架构通配符问题

清单代码片段:

# Install packages
$spppackages = [ "hp-snmp-agents", "hpssa", "hp-health", "hp-smh-templates", "hpsmh", "hpssacli", "hponcfg", ]

package { $spppackages:
  ensure  => latest,
  require => Yumrepo['HP-spp'],
}

Mcollective 状态:

mco package hp-snmp-agents status

Summary of Ensure:

   9.50-2564.40.rhel6 = 14
   9.50-2564.34.rhel5 = 9
   9.40-2506.37.rhel6 = 4 <== This is what I'm trying to fix!
   9.50-2564.35.rhel5 = 1

我尝试在受影响的系统上使用以下命令进行调试:

puppet apply --verbose --debug --execute 'package { hp-snmp-agents: ensure => latest }'

导致:

Info: Applying configuration version '1393411670'
Debug: Prefetching yum resources for package
Debug: Executing '/bin/rpm --version'
Debug: Executing '/bin/rpm -qa --nosignature --nodigest --qf '%{NAME} %|EPOCH?{%{EPOCH}}:{0}| %{VERSION} %{RELEASE} %{ARCH} :DESC: %{SUMMARY}\n''
Error: Could not prefetch package provider 'yum': invalid byte sequence in US-ASCII
Debug: Executing '/bin/rpm -q hp-snmp-agents --nosignature --nodigest --qf '%{NAME} %|EPOCH?{%{EPOCH}}:{0}| %{VERSION} %{RELEASE} %{ARCH} :DESC: %{SUMMARY}\n''
Debug: Finishing transaction 11762680
Debug: Storing state
Debug: Stored state in 0.09 seconds

运行yum list updates hp-snmp-agents显示该软件包可以通过 yum 更新,并且有较新的版本可用:

Installed Packages
hp-snmp-agents.x86_64                                   9.40-2506.37.rhel6                                   @HP-spp
Available Packages
hp-snmp-agents.x86_64                                   9.50-2564.40.rhel6                                   HP-spp 

问题似乎可能出在 rpm 版本查询格式上。手动运行该命令会得到以下结果:

# /bin/rpm -q hp-snmp-agents --nosignature --nodigest --qf '%{NAME} %|EPOCH?{%{EPOCH}}:{0}| %{VERSION} %{RELEASE} %{ARCH} :DESC: %{SUMMARY}\n'
hp-snmp-agents 0 9.40 2506.37.rhel6 x86_64 :DESC: Insight Management Agents(SNMP) for HP ProLiant Systems

如果我ensure => 9.50-xxx打开这个hp-snmp-agents包,我可以强制它在顽固的系统上工作。即使在那里输入一个虚假的版本号似乎也能启动目录构建,并且 Puppet 代理的后续运行可以正常工作并更新。我只是好奇为什么这在 30 台服务器中的 26 台上无缝运行,而其余的服务器则需要进行调整。

注意,我yum clean all通过 Mcollective 进行了初始故障排除步骤

答案1

我认为相关问题是这样的:

Debug: Executing '/bin/rpm -qa --nosignature --nodigest --qf '%{NAME} %|EPOCH?{%{EPOCH}}:{0}| %{VERSION} %{RELEASE} %{ARCH} :DESC: %{SUMMARY}\n''
Error: Could not prefetch package provider 'yum': invalid byte sequence in US-ASCII

这个错误中讨论了这一点:https://tickets.puppetlabs.com/browse/PUP-736

基本上,在该rpm -qa ...输出中的某个地方,您会得到一个 UTF-8(或其他非 ASCII)字符,这导致 puppet 认为“yum”提供程序不好。由于“rpm”后备提供程序不受支持ensure => latest,它会忽略这一点,您会得到旧版本。

您可以升级到包含修复程序的 puppet 3.4.3,或者比较/bin/rpm -qa ... | sort正常工作和不正常工作的框之间的输出以找到罪魁祸首包。将 LANG=C 更改为 LANG=en_US.UTF-8(或任何其他有效的 UTF-8 LANG)也应该可以暂时解决问题。

相关内容