web-dev-qa-db-ja.com

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-xxxhp-snmp-agentsパッケージ、これを頑固なシステムで動作させることができます。偽のバージョン番号を入力しても、カタログビルドがすぐに開始され、その後のPuppetエージェントの実行が適切に機能し、更新されます。これが30台中26台のサーバーでシームレスに機能し、残りのサーバーでのマッサージが必要な理由に興味があります。

注、私はyum clean all最初のトラブルシューティング手順としてMcollectiveを使用

7
ewwhite

私は関連する問題はこれだと信じています:

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)に変更すると、一時的に問題も解決するはずです。

4
freiheit