Pacote de marionetes “assegurar = mais recente” nem sempre funciona

6

Eu tenho uma situação única em que a diretiva ensure => latest do pacote Puppet só funcionava em alguns dos meus sistemas. Dos 30 servidores, os pacotes foram atualizados corretamente em todos, menos nos 4. Estou tentando obter versões principais do pacote de software de < 9,40 a 9,50. Eu poderia especificar um nível difícil, mas eu encontrei o problema de curinga de várias arquiteturas .

Snippet de código de manifesto:

# Install packages
$spppackages = [ "hp-snmp-agents", "hpssa", "hp-health", "hp-smh-templates", "hpsmh", "hpssacli", "hponcfg", ]

package { $spppackages:
  ensure  => latest,
  require => Yumrepo['HP-spp'],
}

Status 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

Eu tentei depurar isso nos sistemas afetados com:

puppet apply --verbose --debug --execute 'package { hp-snmp-agents: ensure => latest }'

Como resultado:

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

A execução de yum list updates hp-snmp-agents mostra que o pacote pode ser atualizado pelo yum e há uma versão mais recente disponível:

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 

Parece que o problema pode ser o formato de consulta da versão rpm. Correr isso manualmente gera:

# /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

Se eu ensure => 9.50-xxx no pacote hp-snmp-agents , eu posso forçar isso para trabalhar nos sistemas teimosos. Mesmo introduzindo um falso número de versão, parece haver um salto na construção do catálogo, e as execuções subseqüentes do trabalho do agente fantoche são atualizadas corretamente. Eu só estou curioso para saber por que isso funcionou perfeitamente em 26 de 30 servidores e precisava de massagear o resto.

Note que eu fiz yum clean all via Mcollective como uma etapa inicial de solução de problemas

    
por ewwhite 26.02.2014 / 12:08

1 resposta

4

Eu acredito que o problema relevante é este:

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

O que é falado neste bug: link

Basicamente, em algum lugar na saída rpm -qa ... , você está obtendo um caractere UTF-8 (ou outro não-ASCII), e isso está causando o fantoche pensar que o provedor "yum" não é bom. Como o provedor de fallback "rpm" não possui ensure => latest support, ele ignora isso e você obtém a versão antiga.

Você pode atualizar para o fantoche 3.4.3, que inclui uma correção, ou comparar /bin/rpm -qa ... | sort de saída entre as caixas que funcionaram corretamente e não funcionou corretamente para encontrar o pacote culpado. Alterar de LANG = C para LANG = en_US.UTF-8 (ou qualquer outro LANG UTF-8 válido) deve resolver temporariamente o problema também.

    
por 27.02.2014 / 01:07