Ansible: O inventário não atende aos requisitos de host_list / script (Ansible 2.7.1)

Criado em 18 nov. 2018  ·  45Comentários  ·  Fonte: ansible/ansible



RESUMO


Depois de atualizar para o ansible versão 2.7.1 usando o Homebrew no macOS, recebo o seguinte aviso informativo ao executar manuais com a opção detalhada.

/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected

Meus manuais ainda funcionam e são concluídos sem problemas. Nunca tive problemas com meu arquivo hosts no passado, nem essa mensagem é exibida com o ansible 2.7.0.

TIPO DE PROBLEMA
  • Relatório de erro
NOME DO COMPONENTE


plugin host_list (arquivo de inventário)
plugin de script (arquivo de inventário)

VERSÃO ANSÍVEL

ansible 2.7.1
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/Users/myuser/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/Cellar/ansible/2.7.1/libexec/lib/python3.7/site-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 3.7.1 (default, Nov  6 2018, 18:45:35) [Clang 10.0.0 (clang-1000.11.45.5)]
CONFIGURAÇÃO

ANSIBLE_PIPELINING(/etc/ansible/ansible.cfg) = True
DEFAULT_HOST_LIST(/etc/ansible/ansible.cfg) = ['/etc/ansible/hosts']
DEFAULT_REMOTE_USER(/etc/ansible/ansible.cfg) = myuser
RETRY_FILES_ENABLED(/etc/ansible/ansible.cfg) = False
OS / MEIO AMBIENTE


macOS High Sierra 10.13.6

PASSOS PARA REPRODUZIR


Mude para ansible versão 2.7.1, execute qualquer manual com verbose ativado

ansible-playbook test.yml -v

RESULTADOS ESPERADOS

Using /etc/ansible/ansible.cfg as config file
PLAY [localhost] *************************************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************************************
ok: [localhost]
RESULTADOS REAIS


Os manuais ainda funcionam e são completos sem problemas. Mas a mensagem informativa detalhada do ansible sugere que algo está errado com meu arquivo de inventário com a versão mais recente disponível (no Homebrew).

Using /etc/ansible/ansible.cfg as config file
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected
PLAY [localhost] *************************************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************************************
ok: [localhost]
affects_2.7 bug module python3 core

Comentários muito úteis

O que quer que os plug-ins que recebem checked estejam fazendo, precisa ser relatado. Apenas dizer algo não está certo, mas não dar absolutamente nenhuma pista sobre o que está errado, é errado. A mensagem "não atendeu aos requisitos" está aparecendo sem motivo e deve ser removida ou forneça um motivo real que diga O QUÊ, ONDE e POR QUÊ.

Todos 45 comentários

Olá @ mil1i , obrigado por enviar este problema!

clique aqui para obter ajuda do bot

Arquivos identificados na descrição:

Se esses arquivos estiverem imprecisos, atualize a seção component name da descrição ou use o comando !component bot.

clique aqui para obter ajuda do bot

Isso foi implementado propositalmente em https://github.com/ansible/ansible/pull/46766 para fornecer informações adicionais ao executar o ansible com -v ou superior.

Se você tiver mais perguntas, pare no IRC ou na lista de e-mails:

IMO, não é informação adicional. Se dissesse por que os requisitos não foram atendidos ou apenas tivesse um link para saber quais são os novos requisitos, pode ser útil.

sem novos requisitos, é apenas dar-lhe informações sobre PORQUE um plugin foi ignorado, há muitos motivos, neste caso é porque não passou na fase de 'verificação' do plugin, que deve ter os requisitos específicos em si documentação (ver ansible-doc -t inventário)

Não vejo nada na mensagem que diga POR QUE, apenas O QUE, e que o resultado seja ruim. ansible-doc -t inventory ini não me dá nenhuma dica sobre o que pode não ser verificado. Se a fase de verificação tem uma reclamação, ela deve ser específica sobre ela (linha, coluna, o que não está correto), não uma mensagem vaga que não significa nada se você não vive no código-fonte do Ansible.

O PORQUE é que os requisitos não foram atendidos, um erro de análise pode ser outro motivo e isso dará uma exceção / tracekback específico. Cada plugin tem seus próprios requisitos e verificação, em muitos casos não tem a ver com o conteúdo do arquivo, mas com a natureza do próprio arquivo.

Usando -vvv, você verá pelo menos uma das razões para os requisitos não serem atendidos:
Skipping due to inventory source not existing or not being readable by the current user

-vvv não mostra nada mais do que a mensagem -v. Nem -vvvvvv. Parece-me um bug para um alerta para um problema inexistente, pelo menos para inventários baseados em INI.

Dei isso como exemplo, existem outros motivos, nem todos mostram a informação específica, depende dos plugins específicos. O inventário do ini não está causando isso, diretamente, você está vendo porque 2 outros plug-ins são 'verificados' antes que o ini aceite o arquivo.

O que quer que os plug-ins que recebem checked estejam fazendo, precisa ser relatado. Apenas dizer algo não está certo, mas não dar absolutamente nenhuma pista sobre o que está errado, é errado. A mensagem "não atendeu aos requisitos" está aparecendo sem motivo e deve ser removida ou forneça um motivo real que diga O QUÊ, ONDE e POR QUÊ.

é uma melhoria incremental, aquela parte do código não sabe o motivo, apenas que o plugin o rejeitou na fase de verificação, é mais informação do que você obteve antes, na qual você não sabia que foi rejeitado naquela fase

Como tudo corre para mim no pôster original, não parece uma melhoria.

Muito confuso, de fato.

Eu também achei esta mensagem confusa.

Eu concordo que sua mensagem de "erro" não ajuda, pelo menos deve haver um link para o capítulo específico na documentação que contém os requisitos da host_list. Meus manuais funcionam sem problemas e não tenho ideia de por que exatamente essa mensagem ocorre e como corrigir o problema.

é uma melhoria incremental, aquela parte do código não sabe o motivo, apenas que o plugin o rejeitou na fase de verificação, é mais informação do que você obteve antes, na qual você não sabia que foi rejeitado naquela fase

Então, talvez esses plug-ins devam acionar melhor uma mensagem (ou não), pois eles possuem alguma informação útil?

Eu concordo que a mensagem é confusa. Eu não tinha ideia do que eram "requisitos de host_list" ou de qual plugin ele estava falando.

Depois de ler os documentos do Inventory Plugins , descobri uma solução alternativa. Se você configurar o Ansible apenas com o plug-in de inventário que está usando, evitará avisos sobre os arquivos que não atendem aos requisitos dos outros plug-ins.

[inventory]

# avoid "did not meet _ requirements" warnings when using -v
# see https://github.com/ansible/ansible/issues/48859
enable_plugins = ini

Como você sabe qual plugin gerou a mensagem? Isso pelo menos seria uma dica. Reduzi minha lista de plugins para um (yaml) e ainda recebo a mensagem, mas o inventário parece estar bem analisado.

a mensagem sempre teve o nome do plugin, host_list / ini / script / yaml / etc, o novo agora o coloca no início da mensagem em vez de no meio.

Não, não faz. Ele tem o arquivo que está sendo reclamado no início, não o nome do plugin que está reclamando.

/Users/alan/Source/ansible_home/hosts.ini não atendeu aos requisitos de host_list, verifique a documentação do plugin se isso for inesperado

Não vejo nada que se pareça com o nome de um plugin. Como @ leedm777 sugeriu, limitar o plugin habilitado para inventário apenas ini elimina a mensagem, então mesmo a dica do nome do arquivo não está correta.

Dado que enable_plugins = ini interrompe a mensagem, parece-me que algum outro plugin de inventário está obtendo incorretamente o arquivo ini como entrada, e reclamando sobre isso, com uma mensagem de erro inadequada. Como isso não é um bug?

@alanbantuit leu a nova mensagem do PR acima, que é a que coloca o plugin no início

Como no seu exemplo, 'host_list' é o plugin, que eu concordo que não está claro, é por isso que mudei para o início dele.

Então, o que irmãos? O que é o plugin "host_list" ??

Eu adicionei

[inventory]
enable_plugins = host_list, script, yaml, ini, auto

para minha conf, mas a mesma mensagem

Este parece ser um tipo de bug que não parece um bug para o autor, mas que obviamente causa problemas para usuários comuns. Talvez o texto deva ser mais claro que não é um erro, e o nome do plugin deve estar entre aspas, como em

INFO somefile.inv does not meet the requirements of the "host_list" plugin

O texto já mudou, https://github.com/ansible/ansible/pull/49080 , também me surpreendi com a verbosidade que mostra em.

Para esclarecer, isso NÃO é um aviso nem um erro, apenas uma mensagem informativa que aparece ao usar a configuração de detalhamento. Nenhuma das mensagens sobre o aumento do detalhamento são erros, eles são sempre exibidos, você pode obter mais informações sobre um erro, mas os erros e avisos têm seus próprios recursos de exibição.

hmm verdade, os avisos estão em roxo e os erros em vermelho

Eu ainda não sei do que se trata a mensagem: D

Parece-me que se algum código está emitindo mensagens informativas sobre entradas que não passaram no teste, outro código que testa a mesma entrada deve emitir uma mensagem informativa sobre essa entrada que passou no teste. Isso seria consistente e mais informativo. Aqui, parece que a entrada passou em algum teste em algum lugar, mas não sabemos onde.

quando o teste passa, você vê o plugin 'processando' a entrada, esta mensagem foi feita para fornecer algumas informações sobre porque os plugins não tentaram fazer isso

Engraçado que esse problema é o primeiro que surge depois de pesquisar as mensagens de erro indicadas na descrição. Porque foi isso que tive de fazer para encontrar uma solução depois de comparar minha lista de inventário com os exemplos de documentação que não encontraram esquisitices.

Tenho respeito pela equipe Ansible e sou grato pelo trabalho deles, mas essa não é uma mudança legal @bcoca é confusa e desnecessária porque nos deixa com perguntas ao invés de respostas.

Se o Ansible tiver um problema com meus arquivos de entrada, quero que ele saia de forma abrupta, diga exatamente qual é o problema para que eu possa corrigi-lo e prosseguir com a tarefa.

a forma como os plug-ins de inventário funcionam é que temos uma lista deles, dada uma fonte, examinamos a lista e vemos se essa fonte corresponde ao plug-in e, se puder ser analisado, você receberá um aviso (alterne para torná-lo um erro ) se nenhum plugin for capaz de ler um arquivo.

isto é, dado um hosts.ini, primeiro tentamos 'host_list' (que recebe a string de host inline -i "host1, host2," ), então script (para scripts dinâmicos), então yaml e então ini (se foi ignorado, então 'auto' ) Eu adicionei a mensagem para deixar claro porque um plugin pulou a fonte, neste caso, que não passou na fase de 'verificação', o PR acima deixa essa mensagem mais clara.

Novamente, isso nunca foi um erro ou aviso, foi mais uma das muitas mensagens que você recebe ao executar o verbose.

Agora que li esta discussão, entendo do que tratam essas mensagens. Mas é importante notar que gastei cerca de 20 minutos pesquisando e lendo isso (e os comentários indicam que era uma preocupação para muitos mais usuários.) _Se cada mensagem na saída detalhada fosse tão preocupante para causar esse tipo de resposta, ninguém jamais receberia qualquer coisa útil feita com Ansible e / ou o modo verbose seria considerada inútil._

O problema para mim foi que usar "-v" ou "-vv" relata os plug-ins que NÃO funcionaram, mas NÃO indica qual funcionou. Você tem que ir "-vvv" completo para ver qual plugin funcionou. Talvez apenas fazer a mensagem de sucesso do plug-in sempre exibida no mesmo nível detalhado das mensagens de falha do plug-in evite essa confusão.

@flatrocks novamente, olhe para PR acima, fez exatamente isso

Devo dizer que também achei a mensagem confusa, por isso acabei lendo este bug.

Esta é mais uma mensagem de nível de depuração que ainda imprime em V = 1, o que não está ok. A ironia é que essas mensagens são impressas, mas você não tem ideia de qual plugin foi usado para carregar o arquivo hosts no final, se ele foi carregado.

Acho que o bug é genuíno e destaca vários problemas:

  • a mensagem menciona corretamente o nome do plug-in, deve ser algo claro como 'O ARQUIVO não atendeu aos FOO requisitos do plug-in de inventário, ignorou o carregamento.
  • Deve ser uma mensagem sobre o carregamento bem-sucedido do arquivo de inventário
  • Ignorando o carregamento de um arquivo de inventário deve ser exibido apenas quando maior detalhamento está habilitado lile V> = 2 ou assim.
  • Mensagens RTFD que não incluem permalinks para documentos fornecem uma experiência ruim para o usuário. Se uma mensagem recomenda que o usuário leia os documentos, ela deve incluir um url.

Estou recebendo "Não foi possível corresponder ao padrão de host fornecido, ignorando: 'todos'" após essas mensagens, então claramente algo não está funcionando em algum lugar, mas não há informações sobre como encontrar ou consertar isso. Definitivamente, precisa de uma mensagem de erro melhor.

Podemos saber que tipo de requisitos precisamos atender para não recebermos essa mensagem de informação?

A nova mensagem no commit de PR de correção é:
display.vvv("%s declined parsing %s as it did not pass it's verify_file() method" % (plugin_name, source))

@bcoca
Não deveria ser " é " em vez de " é "?
https://github.com/ansible/ansible/blob/devel/lib/ansible/inventory/manager.py#L281
By the way, obrigado por este esclarecimento.

Sim, “é” é a contração de “é”, não o possessivo de “isso”. O possessivo é “seu”.

De: "sremy" [email protected]
Para: "ansible / ansible" [email protected]
Cc: "Alan Brenner" [email protected] , "Comment" [email protected]
Enviado: sexta-feira, 4 de janeiro de 2019 7:05:19
Assunto: Re: [ansible / ansible] O inventário não atende aos requisitos de host_list / script (Ansible 2.7.1) (# 48859)

A nova mensagem no commit de PR de correção é:
display.vvv ("% s recusou a análise de% s porque não passou no método verify_file ()"% (plugin_name, fonte))

[ https://github.com/bcoca | @bcoca ]
Não deveria ser "é" em vez de "é"?
[ https://github.com/ansible/ansible/blob/devel/lib/ansible/inventory/manager.py#L281 | https://github.com/ansible/ansible/blob/devel/lib/ansible/inventory/manager.py#L281 ]
By the way, obrigado por este esclarecimento.

-
Você está recebendo isso porque comentou.
Responda diretamente a este e-mail, [ https://github.com/ansible/ansible/issues/48859#issuecomment -451426545 | visualizá-lo no GitHub] ou [ https://github.com/notifications/unsubscribe-auth/AAigO-Cbc5kdXQNhBL8mpkefzwoemKN9ks5u_0N_gaJpZM4YoJPK | silenciar o tópico].

Por favor, alguém me diga se depois de ler tudo isso eu finalmente entendi direito. Existem vários plug-ins diferentes para ler o inventário (eu uso yaml).

Tudo o que está tentando me dizer é que ele não passou na verificação de inventário para o estilo ini, script ou qualquer outro?

@sgutermann Sim, ele está tentando dizer a você que não passou na verificação de inventário para o script ini (porque está usando o yaml em vez disso.

Se no ansible.cfg você acabou de usar:

[inventory]
# enable inventory plugins, default: 'host_list', 'script', 'yaml', 'ini'
enable_plugins = yaml

Então, esses "avisos informativos" desapareceriam. Concordo que não está claro para que eles servem, mas depois de algumas tentativas e erros, consegui me livrar dessas "notificações". Eu uso o formato ini para tudo, e não corro "one offs" ... então eu apenas uso ini e tada ... chega de mensagens irritantes.

que erro é esse, sou um novato que quer experimentar o Ansible,

Mas provocou um erro, que não sei como resolver .....

Eu também continuo recebendo isso, apesar de colocar

enable_plugins = ini

no meu arquivo ansible.cfg . Super irritante ...

@bcoca , esclarecer a mensagem como @ssbarnea sugere ajudaria imensamente. A mensagem no PR não é tão clara e a sugestão ajudaria a evitar que os usuários queiram olhar sob o capô para descobrir por que algo está sendo "recusado" devido a ser "não verificado", em vez de ser "ignorado" para outro inventário plugar. A mensagem também deve identificar o plugin como um plugin de inventário, conforme sugerido. Além disso, obrigado por fornecer a mensagem de informação em primeiro lugar e definir o detalhamento para corresponder ao nível do plugin de inventário que está realmente carregado. Eu aprendi algo hoje depois de me perguntar "o que eu fiz de errado?" :)

Com 2.7.8 eu recebo esta mensagem:

Using /root/ansible/ansible.cfg as config file
/root/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected
/root/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected

Para mim, não era óbvio que host_list e script eram os nomes reais dos plug-ins.

Acho que ficaria mais claro como:

Using /root/ansible/ansible.cfg as config file
/root/ansible/hosts did not meet requirements for "host_list" plugin, check plugin documentation if this is unexpected
/root/ansible/hosts did not meet requirements for "script" plugin, check plugin documentation if this is unexpected

@candlerb mesmo problema !!

[ root @ localhost ~] _ ### ansible-playbook -i / etc / ansible / hosts openshift-ansible / playbooks / openshift-node / bootstrap.retry -vvv_
ansible-playbook 2.7.10
arquivo de configuração = /etc/ansible/ansible.cfg
caminho de pesquisa do módulo configurado = [u '/ root / .ansible / plugins / modules', u '/ usr / share / ansible / plugins / modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
local do executável = / usr / bin / ansible-playbook
versão do python = 2.7.5 (padrão, 26 de março de 2019, 22:13:06) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
Usando /etc/ansible/ansible.cfg como arquivo de configuração
/ etc / ansible / hosts não atendeu aos requisitos host_list, verifique a documentação do plugin se isso for inesperado
/ etc / ansible / hosts não atendeu aos requisitos de script, verifique a documentação do plugin se isso for inesperado
Fonte de inventário / etc / ansible / hosts analisada com o plugin ini
ERRO! os manuais devem ser uma lista de peças

O erro parece ter sido em '/root/openshift-ansible/playbooks/openshift-node/bootstrap.retry': linha 1, coluna 1, mas pode
estar em outro lugar no arquivo dependendo do problema de sintaxe exato.

A linha ofensiva parece ser:

master.istic.linsoft.com

ERRO! os manuais devem ser uma lista de peças

Esse é um problema diferente. Você está fornecendo um arquivo de nova tentativa como se fosse um manual YAML, e não é; é uma lista de hosts com falha.

Use: ansible-playbook /path/to/bootstrap.yml --limit @/path/to/bootstrap.retry

Como isso não é um bug, evite discussões adicionais aqui - use o ansible-project google group.

Ei ! obrigado pela resposta rápida
caso contrário, continuo tendo o mesmo problema
...

Le dim. 21 AVR. 2019 à 08:54, Brian Candler [email protected] a
écrit:

ERRO! os manuais devem ser uma lista de peças

Esse é um problema diferente. Você está fornecendo um arquivo de nova tentativa como se fosse um
Manual YAML, e não é; é uma lista de hosts com falha.

Use: ansible-playbook /path/to/bootstrap.yml --limit
@ / path / to / bootstrap.retry

Uma vez que isso não é um bug, evite discussões adicionais aqui - use
o grupo ansible-project google em vez disso.

-
Você está recebendo isso porque comentou.
Responda a este e-mail diretamente, visualize-o no GitHub
https://github.com/ansible/ansible/issues/48859#issuecomment-485232650 ,
ou silenciar o tópico
https://github.com/notifications/unsubscribe-auth/ALWB2BCFZ5OPUOJSKEXNP6TPRQMT7ANCNFSM4GFASPFA
.

Esta página foi útil?
0 / 5 - 0 avaliações