Вопрос: Кукольный пакет «обеспечить => последний» не всегда работает


У меня есть уникальная ситуация, когда пакет 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 пакет, я могу заставить это работать на упрямых системах. Даже ввод фиктивного номера версии, похоже, ускоряет сборку каталогов, и последующие прогоны марионеточного агента работают и обновляются должным образом. Мне просто интересно, почему это работало на 26 из 30 серверов и требовало массажа для остальных.

Заметьте, я сделал yum clean all через Mcollective в качестве начального этапа устранения неполадок


6
2018-02-26 11:08


Источник




Ответы:


Я считаю, что проблема такова:

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 (или любой другой допустимый LANG UTF-8) также должен временно решить проблему.


4
2018-02-27 00:07



Я подозревал, что что-то в списке пакетов было проблемой ... Но, глядя глубже, это комбинация кукольных версий а также вышеупомянутая проблема с кодировкой. Серверы с pe-puppet-enterprise-release-3.0.1-1.pe.el6.noarch обновляется отлично, независимо от настройки кодирования LANG. Серверы с pe-puppet-enterprise-release-3.1.0-0.pe.el6.noarch не удалось, если LANG не был установлен en_US.UTF, - ewwhite