Ansible: L'inventaire ne répond pas aux exigences de liste_hôte / script (Ansible 2.7.1)

Créé le 18 nov. 2018  ·  45Commentaires  ·  Source: ansible/ansible



SOMMAIRE


Après la mise à niveau vers la version 2.7.1 ansible à l'aide de Homebrew sur macOS, je reçois l'avertissement d'information suivant lors de l'exécution de playbooks avec l'option verbose.

/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

Mes playbooks fonctionnent toujours et se terminent sans problème. Je n'ai jamais eu de problèmes avec mon fichier hosts dans le passé, et ce message ne s'affiche pas avec ansible 2.7.0.

TYPE DE PROBLEME
  • Rapport d'erreur
NOM DU COMPOSANT


plugin host_list (fichier d'inventaire)
plugin de script (fichier d'inventaire)

VERSION ANSIBLE

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)]
CONFIGURATION

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


macOS High Sierra 10.13.6

ÉTAPES POUR REPRODUIRE


Basculez vers la version 2.7.1 ansible, exécutez n'importe quel playbook avec verbose activé.

ansible-playbook test.yml -v

RÉSULTATS ATTENDUS

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

TASK [Gathering Facts] *******************************************************************************************************************************
ok: [localhost]
RÉSULTATS ACTUELS


Les playbooks fonctionnent toujours et se terminent sans problème. Mais le message d'information détaillé d'ansible suggère que quelque chose ne va pas avec mon fichier d'inventaire avec la dernière version disponible (sur 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

Commentaire le plus utile

Tout ce que font ces plugins qui obtiennent checked doit être signalé. Le simple fait de dire que quelque chose ne va pas mais de ne donner absolument aucune idée de ce qui ne va pas est faux. Soit le message "ne répond pas aux exigences" s'affiche sans raison et doit être supprimé, soit une vraie raison indiquant QUOI, O et POURQUOI.

Tous les 45 commentaires

Salut @ mil1i , merci d'avoir soumis ce numéro!

cliquez ici pour obtenir de l'aide sur les robots

Fichiers identifiés dans la description:

Si ces fichiers sont inexacts, veuillez mettre à jour la section component name de la description ou utiliser la commande !component bot.

cliquez ici pour obtenir de l'aide sur les robots

Cela a été délibérément implémenté dans https://github.com/ansible/ansible/pull/46766 pour fournir des informations supplémentaires lors de l'exécution d'ansible avec -v ou plus.

Si vous avez d'autres questions, veuillez vous rendre à l'IRC ou à la liste de diffusion:

IMO, ce ne sont pas des informations supplémentaires. S'il indiquait pourquoi les exigences n'étaient pas respectées, ou s'il avait simplement un lien avec les nouvelles exigences, cela pourrait être utile.

pas de nouvelles exigences, il vous donne juste des informations sur pourquoi un plugin a été ignoré, il y a de nombreuses raisons, dans ce cas, c'est parce qu'il n'a pas passé la phase de `` vérification '' pour le plugin, qui devrait avoir les exigences spécifiques dans son propre documentation (voir l'inventaire ansible-doc -t)

Je ne vois rien dans le message qui dit POURQUOI, juste QUOI, et qu'il fait mal. ansible-doc -t inventory ini ne me donne aucun indice sur ce qui pourrait ne pas être vérifié. Si la phase de vérification a une plainte, elle doit être spécifique à ce sujet (ligne, colonne, ce qui n'est pas correct), pas un message vague qui ne veut rien dire si vous ne vivez pas dans le code source d'Ansible.

Le POURQUOI est que les exigences n'ont pas été satisfaites, une erreur d'analyse peut être une autre raison et cela donnera une exception / tracekback spécifique. Chaque plugin a ses propres exigences et vérification, dans de nombreux cas, cela n'a pas à voir avec le contenu du fichier mais la nature du fichier lui-même.

En utilisant -vvv, vous devriez voir au moins l'une des raisons pour lesquelles les exigences ne sont pas remplies:
Skipping due to inventory source not existing or not being readable by the current user

-vvv n'affiche rien de plus que le message -v. -Vvvvvv non plus. Cela me semble être un bogue pour une alerte à un problème inexistant, du moins pour les inventaires basés sur ini.

J'ai donné cela à titre d'exemple, il y a d'autres raisons, toutes ne montrent pas les informations spécifiques, cela dépend des plugins spécifiques. L'inventaire ini ne cause pas cela, directement, vous le voyez parce que 2 autres plugins sont «vérifiés» avant que l'ini n'accepte le fichier.

Tout ce que font ces plugins qui obtiennent checked doit être signalé. Le simple fait de dire que quelque chose ne va pas mais de ne donner absolument aucune idée de ce qui ne va pas est faux. Soit le message "ne répond pas aux exigences" s'affiche sans raison et doit être supprimé, soit une vraie raison indiquant QUOI, O et POURQUOI.

c'est une amélioration progressive, cette partie du code ne connaît pas la raison, juste que le plugin l'a rejeté en phase de vérification, c'est plus d'informations que vous n'en aviez auparavant, dans lesquelles vous ne saviez pas qu'il a été rejeté dans cette phase

Puisque tout fonctionne pour moi-même l'affiche originale, cela ne ressemble pas à une amélioration.

Très déroutant, en effet.

J'ai également trouvé ce message déroutant.

Je suis d'accord que son message "d'erreur" n'est pas utile, au moins il devrait y avoir un lien vers le chapitre spécifique de la documentation contenant les exigences de host_list. Mes playbooks fonctionnent sans problème et je n'ai aucune idée de la raison pour laquelle ce message se produit et comment résoudre le problème.

c'est une amélioration progressive, cette partie du code ne connaît pas la raison, juste que le plugin l'a rejeté en phase de vérification, c'est plus d'informations que vous n'en aviez auparavant, dans lesquelles vous ne saviez pas qu'il a été rejeté dans cette phase

Alors peut-être que ces plugins devraient mieux déclencher un message (ou non) car ils possèdent des informations utiles?

Je reconnais que le message est déroutant. Je n'avais aucune idée de ce que sont les "exigences host_list", ou de quel plugin il parlait.

Après avoir lu la documentation sur les plugins d'inventaire , j'ai trouvé une solution de contournement. Si vous configurez Ansible avec uniquement le plugin d'inventaire que vous utilisez, vous évitez les avertissements concernant les fichiers ne répondant pas aux exigences des autres plugins.

[inventory]

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

Comment savez-vous QUEL plugin a généré le message? Ce serait au moins un indice. J'ai réduit ma liste de plugins à un (yaml) et je reçois toujours le message, mais l'inventaire semble bien analysé.

le message a toujours eu le nom du plugin, liste_hôte / ini / script / yaml / etc, le nouveau le place maintenant au début du message au lieu du milieu.

Non, ce n'est pas le cas. Il contient le fichier dont on se plaint au début, pas le nom du plugin qui se plaint.

/Users/alan/Source/ansible_home/hosts.ini ne répondait pas aux exigences de la liste d'hôte, consultez la documentation du plugin si cela est inattendu

Je ne vois rien qui ressemble à un nom de plugin. Comme @ leedm777 l'a suggéré, limiter le plugin activé pour l'inventaire à juste ini élimine le message, donc même l'indication du nom de fichier n'est pas correcte.

Étant donné que enable_plugins = ini arrête le message, il me semble qu'un autre plugin d'inventaire obtient incorrectement le fichier ini en entrée et s'en plaint, avec un message d'erreur inadéquat. Comment n'est-ce pas un bug?

@alanbantuit lit le nouveau message du PR ci-dessus, c'est celui qui met le plugin au début

À partir de votre exemple, 'host_list' est le plugin, ce qui, je suis d'accord, n'est pas clair, c'est pourquoi je l'ai changé pour qu'il soit au début.

Alors qu'est-ce que les frères? Qu'est-ce que le plugin "host_list" ??

J'ai ajouté

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

à ma conf mais même message

Cela semble être un type de bogue qui ne ressemble pas à un bogue pour l'auteur mais qui pose évidemment des problèmes aux utilisateurs ordinaires. Peut-être que le libellé devrait être plus clair qu'il ne s'agit pas d'une erreur et que le nom du plugin devrait être entre guillemets, comme dans

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

Le texte a déjà changé, https://github.com/ansible/ansible/pull/49080 , j'ai également rencontré la verbosité qu'il montre.

Pour clarifier ce n'est PAS un avertissement ni une erreur, juste un message d'information qui apparaît lors de l'utilisation du paramètre de verbosité. Aucun des messages sur l'augmentation de la verbosité n'est des erreurs, ceux-ci sont toujours affichés, vous pouvez obtenir plus d'informations sur une erreur mais les erreurs et les avertissements ont leurs propres fonctions d'affichage.

hmm vrai, les avertissements sont en violet et les erreurs en rouge

Je ne sais toujours pas de quoi parle le message: D

Il me semble que si un code émet des messages d'information sur les entrées qui ne passent pas un test, un autre code qui teste la même entrée devrait émettre un message d'information sur cette entrée réussissant son test. Ce serait cohérent et plus informatif. Ici, il semble que l'entrée passe un test quelque part, mais nous ne savons pas où.

lorsque le test réussit, vous voyez le plugin `` traiter '' l'entrée, ce message était destiné à donner des informations sur les raisons pour lesquelles les plugins n'ont pas tenté de le faire

C'est drôle que ce problème soit le premier qui apparaît après la recherche des messages d'erreur indiqués dans la description. Parce que c'est ce que j'ai dû faire pour trouver une solution après avoir comparé ma liste d'inventaire avec les exemples de documentation ne trouvant aucune bizarrerie.

J'ai du respect pour l'équipe Ansible et je suis reconnaissant pour son travail, mais ce n'est pas un changement cool @bcoca, c'est déroutant et inutile car cela nous laisse avec des questions plutôt que des réponses.

Si Ansible a un problème avec mes fichiers d'entrée, je veux qu'il se termine brutalement, dites-moi exactement quel est le problème afin que je puisse le résoudre et continuer la tâche.

le fonctionnement des plugins d'inventaire est que nous en avons une liste, étant donné une source, nous parcourons la liste et voyons si cette source correspond au plugin, puis si elle peut être analysée, vous obtiendrez un avertissement (basculer pour en faire une erreur ) si aucun plugin n'est capable de lire un fichier.

ie étant donné un hosts.ini, nous essayons d'abord 'host_list' (qui prend la chaîne d'hôte en ligne -i "host1, host2," ), puis script (pour les scripts dynamiques), puis yaml et enfin ini (si cela a été ignoré, alors 'auto' ). J'ai ajouté le message pour expliquer pourquoi un plugin a ignoré la source, dans ce cas, qu'il n'a pas passé la phase de `` vérification '', PR ci-dessus rend ce message plus clair.

Encore une fois, ce n'était jamais une erreur ou un avertissement, c'était l'un des nombreux messages que vous obtenez lorsque vous exécutez des commentaires.

Maintenant que j'ai lu cette discussion, je comprends en quoi consistent ces messages. Mais il est intéressant de noter que j'ai passé peut-être 20 minutes à rechercher et à lire ceci (et les commentaires indiquent que c'était une préoccupation pour beaucoup plus d'utilisateurs.) _Si chaque message en sortie verbeuse était si inquiétant pour provoquer ce genre de réponse, personne n'obtiendrait jamais tout ce qui est utile fait avec Ansible et / ou le mode verbeux serait considéré comme inutile.

Le problème pour moi était que l'utilisation de "-v" ou "-vv" signale les plugins qui ne fonctionnaient PAS, mais n'indiquait PAS lequel fonctionnait. Vous devez aller plein "-vvv" pour voir quel plugin a fonctionné. Peut-être que simplement faire afficher le message de réussite du plugin au même niveau détaillé que les messages d'échec du plugin éviterait cette confusion.

@flatrocks encore

Je dois dire que je trouve le message aussi déroutant, c'est la raison pour laquelle j'ai fini par lire ce bug.

Il s'agit davantage d'un message de niveau de débogage qui s'imprime toujours sur V = 1, ce qui n'est pas correct. L'ironie est que ces messages sont imprimés mais vous ne savez pas quel plugin a été utilisé pour charger le fichier hosts à la fin, s'il a été chargé du tout.

Je pense que le bug est authentique et souligne plusieurs problèmes:

  • Le message mentionne correctement le nom du plugin, il devrait être quelque chose de clair comme 'FILE ne répond pas aux exigences du plugin d'inventaire FOO , le chargement a été ignoré.
  • Cela devrait être un message sur le chargement réussi du fichier d'inventaire
  • Le saut de charge d'un fichier d'inventaire ne doit être affiché que si une plus grande verbosité est activée lile V> = 2 ou plus.
  • Les messages RTFD qui n'incluent pas de permaliens vers les documents, fournissent une mauvaise expérience utilisateur. Si un message recommande à l'utilisateur de lire les documents, il doit inclure une URL.

J'obtiens "Impossible de correspondre au modèle d'hôte fourni, ignorant: 'all'" après ces messages, il est donc clair que quelque chose ne fonctionne pas quelque part, mais il n'y a aucune information sur la façon de trouver ou de le réparer. A vraiment besoin d'un meilleur message d'erreur.

Pouvons-nous savoir à quel type d'exigences nous devons répondre pour ne pas recevoir ce message d'information?

Le nouveau message dans le commit PR de correction est:
display.vvv("%s declined parsing %s as it did not pass it's verify_file() method" % (plugin_name, source))

@bcoca
Ne devrait-il pas être « son » au lieu de « c'est »?
https://github.com/ansible/ansible/blob/devel/lib/ansible/inventory/manager.py#L281
Au fait, merci pour cette clarification.

Oui, «c'est» est la contraction de «c'est», pas le possessif de «ça». Le possessif est «son».

De: "sremy" [email protected]
À: "ansible / ansible" [email protected]
Cc: "Alan Brenner" [email protected] , "Comment" [email protected]
Envoyé: vendredi 4 janvier 2019 07:05:19
Objet: Re: [ansible / ansible] L'inventaire ne répond pas aux exigences de liste_hôte / script (Ansible 2.7.1) (# 48859)

Le nouveau message dans le commit PR de correction est:
display.vvv ("% s a refusé l'analyse de% s car il n'a pas réussi sa méthode verify_file ()"% (plugin_name, source))

[ https://github.com/bcoca | @bcoca ]
Ne devrait-il pas être «son» au lieu de «c'est»?
[ 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 ]
Au fait, merci pour cette clarification.

-
Vous recevez ceci parce que vous avez commenté.
Répondez directement à cet e-mail, [ https://github.com/ansible/ansible/issues/48859#issuecomment -451426545 | visualisez-le sur GitHub], ou [ https://github.com/notifications/unsubscribe-auth/AAigO-Cbc5kdXQNhBL8mpkefzwoemKN9ks5u_0N_gaJpZM4YoJPK | couper le fil].

S'il vous plaît, dites-moi si après avoir lu tout cela, je l'ai enfin en tête. Il existe plusieurs plugins différents pour lire l'inventaire (j'utilise yaml).

Tout ce que j'essaie de me dire, c'est qu'il n'a pas réussi la vérification d'inventaire pour le style ini, le script ou tout autre?

@sgutermann Oui, il essaie de vous dire qu'il n'a pas réussi la vérification d'inventaire pour le script ini (car il utilise le script yaml à la place.

Si dans le ansible.cfg vous venez d'utiliser:

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

Ensuite, ces «avis d'information» disparaîtraient. Je conviens qu'il n'est pas clair à quoi ils servent, mais après quelques essais et erreurs, j'ai pu me débarrasser de ces «avis». J'utilise le format ini pour tout, et je ne lance pas "one offs" ... donc j'utilise juste ini et tada ... plus de messages irritants.

quelle est cette erreur, je suis un débutant qui veut essayer Ansible,

Mais cela a provoqué une erreur, que je ne sais pas comment résoudre .....

Je continue aussi à comprendre, malgré la mise

enable_plugins = ini

dans mon fichier ansible.cfg . Super ennuyeux ...

@bcoca , clarifier le message comme le suggère @ssbarnea aiderait énormément. Le message du PR n'est pas aussi clair, et la suggestion aiderait à empêcher les utilisateurs de vouloir regarder sous le capot pour découvrir pourquoi quelque chose est «refusé» parce qu'il est «non vérifié», plutôt que d'être «ignoré» pour un autre inventaire brancher. Le message doit également identifier le plugin comme un plugin d'inventaire comme suggéré. Merci également d'avoir fourni le message d'information en premier lieu et d'avoir défini la verbosité pour qu'elle corresponde au niveau du plugin d'inventaire réellement chargé. J'ai appris quelque chose aujourd'hui après m'être demandé "qu'est-ce que j'ai fait de mal?" :)

Avec 2.7.8, je reçois ce message:

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

Pour moi, il n'était pas évident que host_list et script étaient les noms réels des plugins.

Je pense que ce serait plus clair comme:

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 même problème !!

[ root @ localhost ~] _ ### ansible-playbook -i / etc / ansible / hosts openshift-ansible / playbooks / openshift-node / bootstrap.retry -vvv_
ansible-playbook 2.7.10
fichier de configuration = /etc/ansible/ansible.cfg
chemin de recherche du module configuré = [u '/ root / .ansible / plugins / modules', u '/ usr / share / ansible / plugins / modules']
Emplacement du module python ansible = /usr/lib/python2.7/site-packages/ansible
emplacement de l'exécutable = / usr / bin / ansible-playbook
version python = 2.7.5 (par défaut, 26 mars 2019, 22:13:06) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
Utilisation de /etc/ansible/ansible.cfg comme fichier de configuration
/ etc / ansible / hosts ne répondait pas aux exigences de liste_hôte, vérifiez la documentation du plugin si cela est inattendu
/ etc / ansible / hosts ne répondait pas aux exigences du script, vérifiez la documentation du plugin si cela est inattendu
Analyse de la source d'inventaire / etc / ansible / hosts avec le plugin ini
ERREUR! les playbooks doivent être une liste de jeux

L'erreur semble avoir été dans '/root/openshift-ansible/playbooks/openshift-node/bootstrap.retry': ligne 1, colonne 1, mais peut
être ailleurs dans le fichier en fonction du problème de syntaxe exact.

La ligne incriminée semble être:

master.istic.linsoft.com

ERREUR! les playbooks doivent être une liste de jeux

C'est un problème différent. Vous fournissez un fichier de nouvelle tentative comme s'il s'agissait d'un playbook YAML, et ce n'est pas le cas; c'est une liste d'hôtes défaillants.

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

Comme ce n'est pas un bogue, veuillez ne pas en discuter davantage ici - utilisez plutôt le groupe google ansible-project.

Hey ! merci pour la réponse rapide
sinon je reçois toujours le même problème
...

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

ERREUR! les playbooks doivent être une liste de jeux

C'est un problème différent. Vous fournissez un fichier de nouvelle tentative comme s'il s'agissait d'un
Playbook YAML, et ce n'est pas le cas; c'est une liste d'hôtes défaillants.

Utilisez: ansible-playbook /path/to/bootstrap.yml --limit
@ / chemin / vers / bootstrap.retry

Comme ce n'est pas un bogue, veuillez vous abstenir de poursuivre la discussion ici - utilisez
le groupe google ansible-project à la place.

-
Vous recevez ceci parce que vous avez commenté.
Répondez directement à cet e-mail, affichez-le sur GitHub
https://github.com/ansible/ansible/issues/48859#issuecomment-485232650 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/ALWB2BCFZ5OPUOJSKEXNP6TPRQMT7ANCNFSM4GFASPFA
.

Cette page vous a été utile?
0 / 5 - 0 notes