У меня уникальная ситуация, когда пакет 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) также должен временно решить проблему.