Puppet

Puppet 包“確保 => 最新”並不總是有效

  • July 7, 2014

我有一個獨特的情況,即 Puppet 包ensure =&gt; 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  =&gt; latest,
 require =&gt; 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 &lt;== This is what I'm trying to fix!
  9.50-2564.35.rhel5 = 1

我已經嘗試在受影響的系統上調試它:

puppet apply --verbose --debug --execute 'package { hp-snmp-agents: ensure =&gt; 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?{&#37;{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?{&#37;{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?{&#37;{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 =&gt; 9.50-xxxhp-snmp-agents包裝上,我可以強制它在頑固的系統上工作。即使在此處輸入虛假版本號似乎也會啟動目錄建構,並且隨後執行 puppet 代理可以正常工作和更新。我只是好奇為什麼這可以在 30 台伺服器中的 26 台上無縫執行,而其餘的則需要按摩。

請注意,我yum clean all通過 Mcollective 作為初始故障排除步驟

我相信相關的問題是:

Debug: Executing '/bin/rpm -qa --nosignature --nodigest --qf '%{NAME} %|EPOCH?{&#37;{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 =&gt; latest支持,它會忽略這一點,您會得到舊版本。

您可以升級到包含修復程序的 puppet 3.4.3,或者比較/bin/rpm -qa ... | sort正常工作和不正常工作的盒子之間的輸出以找到罪魁禍首包。從 LANG=C 更改為 LANG=en_US.UTF-8(或任何其他有效的 UTF-8 LANG)也應該可以暫時解決問題。

引用自:https://serverfault.com/questions/578393