Назад | Перейти на главную страницу

Пакет марионетки «sure => 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'],
}

Коллективный статус:

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 в качестве начального шага по устранению неполадок

Я считаю, что актуальная проблема заключается в следующем:

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 ... output, вы получаете символ UTF-8 (или другой не-ASCII), и это заставляет марионетку думать, что провайдер "yum" не годится. Поскольку у резервного поставщика "rpm" нет ensure => latest support, он игнорирует это, и вы получаете старую версию.

Вы можете перейти на марионетку 3.4.3, которая включает исправление, или сравнить /bin/rpm -qa ... | sort вывод между блоками, которые работали правильно и не работали правильно, чтобы найти виновный пакет. Переход с LANG = C на LANG = en_US.UTF-8 (или любой другой допустимый язык UTF-8 LANG) также должен временно решить проблему.