Puppet 包“確保 => 最新”並不總是有效
我有一個獨特的情況,即 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'], }
集體狀態:
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 作為初始故障排除步驟
我相信相關的問題是:
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)也應該可以暫時解決問題。