木偶包“确保=>最新”并不总是工作

我有一个独特的情况,木偶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'], } 

集体地位:

 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 

我试着在受影响的系统上debugging这个:

 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 

如果我在hp-snmp-agents包中ensure => 9.50-xxx ,我可以强制这个工作在顽固的系统上。 即使input一个虚假的版本号码,似乎也会启动目录的构build,而后续的puppet代理运行正常。 我只是好奇,为什么这个服务器在26台服务器上无缝工作,需要按摩其余的。

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

我相信有关的问题是这样的:

 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 

在这个bug中讨论了这个问题: 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 /bin/rpm -qa ... | sort之间的输出工作正确,并没有正确的工作find罪魁祸首包。 从LANG = C更改为LANG = en_US.UTF-8(或任何其他有效的UTF-8 LANG)也应暂时解决该问题。