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を使用
私は関連する問題はこれだと信じています:
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)文字を取得しているため、パペットは「yum」プロバイダーが良くないと考えています。 「rpm」フォールバックプロバイダーにはensure => latest
サポート、それを無視し、古いバージョンを取得します。
修正を含むパペット3.4.3にアップグレードするか、/bin/rpm -qa ... | sort
問題のあるパッケージを見つけるために正しく機能したボックスと正しく機能しなかったボックス間の出力。 LANG = CからLANG = en_US.UTF-8(またはその他の有効なUTF-8 LANG)に変更すると、一時的に問題も解決するはずです。