Ansible: El inventario no cumple con los requisitos de host_list / script (Ansible 2.7.1)

Creado en 18 nov. 2018  ·  45Comentarios  ·  Fuente: ansible/ansible



RESUMEN


Después de actualizar a la versión 2.7.1 de ansible usando Homebrew en macOS, recibo la siguiente advertencia informativa al ejecutar libros de jugadas con la opción detallada.

/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

Mis libros de jugadas aún funcionan y se completan sin problemas. Nunca he tenido ningún problema con mi archivo de hosts en el pasado, ni este mensaje se muestra con ansible 2.7.0.

TIPO DE PROBLEMA
  • Informe de error
NOMBRE DEL COMPONENTE


complemento host_list (archivo de inventario)
complemento de script (archivo de inventario)

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)]
CONFIGURACIÓN

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
SO / MEDIO AMBIENTE


macOS High Sierra 10.13.6

PASOS PARA REPRODUCIR


Cambie a ansible versión 2.7.1, ejecute cualquier libro de jugadas con verbose habilitado.

ansible-playbook test.yml -v

RESULTADOS PREVISTOS

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

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


Los libros de jugadas aún se ejecutan y se completan sin problemas. Pero el mensaje informativo detallado de Ansible sugiere que algo anda mal con mi archivo de inventario con la última versión disponible (en 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

Comentario más útil

Lo que sea que estén haciendo esos complementos que obtienen checked debe ser informado. Simplemente decir algo no está bien, pero no dar absolutamente ninguna pista sobre lo que está mal, está mal. O el mensaje "no cumplió con los requisitos" aparece sin ningún motivo y debe eliminarse, o proporcionar un motivo real que diga QUÉ, DÓNDE y POR QUÉ.

Todos 45 comentarios

Hola @ mil1i , ¡gracias por enviar este número!

haga clic aquí para obtener ayuda con el bot

Archivos identificados en la descripción:

Si estos archivos son inexactos, actualice la sección component name de la descripción o use el comando !component bot.

haga clic aquí para obtener ayuda con el bot

Esto se implementó a propósito en https://github.com/ansible/ansible/pull/46766 para proporcionar información adicional cuando se ejecuta ansible con -v o superior.

Si tiene más preguntas, visite el IRC o la lista de correo:

En mi opinión, no es información adicional. Si dijera por qué no se cumplieron los requisitos, o incluso si solo tuviera un enlace a cuáles son los nuevos requisitos, podría ser útil.

no hay nuevos requisitos, solo le brinda información sobre POR QUÉ se omitió un complemento, hay muchas razones, en este caso es porque no pasó la fase de 'verificación' para el complemento, que debería tener los requisitos específicos en su propio documentación (ver ansible-doc -t inventario)

No veo nada en el mensaje que diga POR QUÉ, solo QUÉ, y que lo haga mal. ansible-doc -t inventory ini no me da ninguna pista sobre lo que podría no verificar. Si la fase de verificación tiene una queja, debe ser específica (línea, columna, lo que no es correcto), no un mensaje vago que no significa nada si no vive en el código fuente de Ansible.

El PORQUÉ es que no se cumplieron los requisitos, un error de análisis puede ser otra razón y eso dará una excepción / rastreo específico. Cada complemento tiene sus propios requisitos y verificación, en muchos casos no tiene que ver con el contenido del archivo sino con la naturaleza del archivo en sí.

Al usar -vvv, debería ver al menos una de las razones por las que no se cumplen los requisitos:
Skipping due to inventory source not existing or not being readable by the current user

-vvv no muestra nada más que el mensaje -v. Tampoco -vvvvvv. Me parece un error para una alerta de un problema inexistente, al menos para inventarios basados ​​en ini.

Di eso como un ejemplo, hay otras razones, no todas muestran la información específica, depende de los complementos específicos. El inventario ini no está causando esto, directamente, lo está viendo porque otros 2 complementos se 'revisan' antes de que el ini acepte el archivo.

Lo que sea que estén haciendo esos complementos que obtienen checked debe ser informado. Simplemente decir algo no está bien, pero no dar absolutamente ninguna pista sobre lo que está mal, está mal. O el mensaje "no cumplió con los requisitos" aparece sin ningún motivo y debe eliminarse, o proporcionar un motivo real que diga QUÉ, DÓNDE y POR QUÉ.

es una mejora incremental, esa parte del código no sabe el motivo, solo que el complemento lo rechazó en la fase de verificación, es más información de la que obtuviste antes, en la que no sabías que fue rechazado en esa fase

Dado que todo funciona tanto para mí como para el póster original, no parece una mejora.

Muy confuso, de hecho.

También encontré este mensaje confuso.

Estoy de acuerdo en que su mensaje de "error" no es útil, al menos debería haber un enlace al capítulo específico en la documentación que contiene los requisitos de host_list. Mis libros de jugadas funcionan sin problemas y no tengo ni idea de por qué aparece exactamente este mensaje y cómo solucionar el problema.

es una mejora incremental, esa parte del código no sabe el motivo, solo que el complemento lo rechazó en la fase de verificación, es más información de la que obtuviste antes, en la que no sabías que fue rechazado en esa fase

Entonces, ¿tal vez esos complementos deberían activar un mensaje (o no) ya que poseen información útil?

Estoy de acuerdo en que el mensaje es confuso. No tenía idea de qué son los "requisitos de host_list", o de qué complemento estaba hablando.

Después de leer los documentos de Inventory Plugins , encontré una solución. Si configura Ansible solo con el complemento de inventario que está utilizando, evita las advertencias sobre archivos que no cumplen con los requisitos de los otros complementos.

[inventory]

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

¿Cómo sabe QUÉ complemento generó el mensaje? Eso al menos sería una pista. Reduje mi lista de complementos a uno (yaml) y aún recibo el mensaje, pero el inventario parece estar bien analizado.

el mensaje siempre ha tenido el nombre del complemento, host_list / ini / script / yaml / etc, el nuevo ahora lo coloca al principio del mensaje en lugar de en el medio.

No, no lo hace. Tiene el archivo sobre el que se queja al principio, no el nombre del complemento que se queja.

/Users/alan/Source/ansible_home/hosts.ini no cumplió con los requisitos de host_list, verifique la documentación del complemento si esto es inesperado

No veo nada que se parezca al nombre de un complemento. Como sugirió @ leedm777 , limitar el complemento habilitado para inventario a solo ini elimina el mensaje, por lo que incluso la sugerencia del nombre del archivo no es correcta.

Dado que enable_plugins = ini detiene el mensaje, me parece que algún otro complemento de inventario está obteniendo incorrectamente el archivo ini como entrada y se queja al respecto, con un mensaje de error inadecuado. ¿Cómo no es esto un error?

@alanbantuit leyó el nuevo mensaje del PR anterior, que es el que pone el complemento al principio

A partir de su ejemplo, 'host_list' es el complemento, que estoy de acuerdo que no está claro, por lo que lo cambié para que esté al principio.

Entonces, ¿qué hacen los hermanos? ¿Qué es el complemento "host_list"?

yo añadí

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

a mi conf pero el mismo mensaje

Este parece ser un tipo de error que no parece un error para el autor, pero que obviamente causa problemas a los usuarios normales. Quizás la redacción debería ser más clara de que no es un error, y el nombre del complemento debería estar entre comillas, como en

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

El texto ya ha cambiado, https://github.com/ansible/ansible/pull/49080 , también me sobresalté en la verbosidad que muestra.

Para aclarar, esto NO es una advertencia ni un error, solo un mensaje informativo que aparece cuando se usa la configuración de verbosidad. Ninguno de los mensajes sobre mayor verbosidad son errores, siempre se muestran, es posible que obtenga más información sobre un error, pero los errores y las advertencias tienen sus propias funciones de visualización.

hmm, cierto, las advertencias están en violeta y los errores en rojo

Sin embargo, todavía no sé de qué se trata el mensaje: D

Me parece que si algún código emite mensajes informativos sobre entradas que no pasan una prueba, otro código que prueba la misma entrada debería emitir un mensaje informativo sobre esa entrada que pasa su prueba. Eso sería coherente y más informativo. Aquí parece que la entrada pasa alguna prueba en alguna parte, pero no sabemos dónde.

cuando pasa la prueba, ve que el complemento 'procesa' la entrada, este mensaje estaba destinado a proporcionar información sobre por qué los complementos no intentaron hacerlo

Es curioso que este problema sea el primero que aparece después de buscar los mensajes de error indicados en la descripción. Porque eso es lo que tuve que hacer para encontrar una solución después de comparar mi lista de inventario con los ejemplos de documentación sin encontrar rarezas.

Respeto al equipo de Ansible y estoy agradecido por su trabajo, pero este no es un cambio genial @bcoca , es confuso e innecesario porque nos deja con preguntas en lugar de respuestas.

Si Ansible tiene un problema con mis archivos de entrada, quiero que salga por completo, dígame exactamente cuál es el problema para que pueda solucionarlo y continuar con la tarea.

la forma en que funcionan los complementos de inventario es que tenemos una lista de ellos, dada una fuente, revisamos la lista y vemos si esa fuente coincide con el complemento y luego, si se puede analizar, recibirá una advertencia (alternar para convertirlo en un error ) si ningún complemento puede leer un archivo.

es decir, dado un hosts.ini, primero probamos 'host_list' (que toma la cadena de host en línea -i "host1, host2," ), luego script (para scripts dinámicos), luego yaml y luego ini (si esto se omitió, entonces 'auto' ). Agregué el mensaje para aclarar por qué un complemento omitió la fuente, en este caso, que no pasó la fase de 'verificación', el PR anterior hace que este mensaje sea más claro.

Una vez más, esto nunca fue un error o advertencia, fue uno más de los muchos mensajes que recibe cuando ejecuta verbose.

Ahora que he leído esta discusión, entiendo de qué se tratan estos mensajes. Pero vale la pena señalar que pasé tal vez 20 minutos investigando y leyendo esto (y los comentarios indican que fue una preocupación para muchos más usuarios). _Si cada mensaje en la salida detallada fuera tan preocupante para causar este tipo de respuesta, nadie lo recibiría cualquier cosa útil hecha con Ansible y / o el modo detallado se consideraría inútil.

El problema para mí fue que el uso de "-v" o "-vv" informa de los complementos que NO funcionaron, pero NO indica cuál SI funcionó. Tienes que completar "-vvv" para ver qué complemento funcionó. Tal vez simplemente hacer que el mensaje de éxito del complemento siempre se muestre en el mismo nivel detallado que los mensajes de falla del complemento evitaría esta confusión.

@flatrocks de nuevo, mira PR arriba, hizo exactamente eso

Debo decir que el mensaje también me resulta confuso, siendo esta la razón por la que terminé leyendo este error.

Este es más un mensaje de nivel de depuración que todavía se imprime en V = 1, lo que no está bien. La ironía es que estos mensajes se imprimen, pero no tienes idea de qué complemento se utilizó para cargar el archivo de hosts al final, si es que se cargó.

Creo que el error es genuino y subraya varios problemas:

  • El mensaje menciona correctamente el nombre del complemento, debe ser algo claro como 'ARCHIVO no cumplió con los requisitos del complemento de inventario FOO , omitió cargarlo.
  • Debería ser un mensaje sobre la carga exitosa del archivo de inventario.
  • La omisión de carga de un archivo de inventario debe mostrarse solo cuando se habilita una mayor verbosidad lile V> = 2 aproximadamente.
  • Los mensajes RTFD que no incluyen enlaces permanentes a documentos proporcionan una mala experiencia de usuario. Si un mensaje recomienda al usuario que lea los documentos, debe incluir una URL.

Recibo el mensaje "No se pudo coincidir con el patrón de host proporcionado, ignorando: 'todos'" después de estos mensajes, por lo que claramente algo no funciona en alguna parte, pero no hay información sobre cómo encontrarlo o solucionarlo. Definitivamente necesita un mejor mensaje de error.

¿Podemos saber qué tipo de requisitos debemos cumplir para que no recibamos este mensaje de información?

El nuevo mensaje en el compromiso de reparación de PR es:
display.vvv("%s declined parsing %s as it did not pass it's verify_file() method" % (plugin_name, source))

@bcoca
¿No debería ser " su " en lugar de " es "?
https://github.com/ansible/ansible/blob/devel/lib/ansible/inventory/manager.py#L281
Por cierto, gracias por esta aclaración.

Sí, "es" es la contracción de "es", no el posesivo de "eso". El posesivo es "su".

De: "sremy" [email protected]
Para: "ansible / ansible" [email protected]
Cc: "Alan Brenner" [email protected] , "Comentario" [email protected]
Enviado: viernes 4 de enero de 2019 7:05:19 AM
Asunto: Re: [ansible / ansible] El inventario no cumple con los requisitos de host_list / script (Ansible 2.7.1) (# 48859)

El nuevo mensaje en el compromiso de reparación de PR es:
display.vvv ("% s rechazó el análisis de% s porque no pasó su método verify_file ()"% (plugin_name, source))

[ https://github.com/bcoca | @bcoca ]
¿No debería ser "su" en lugar de "es"?
[ 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 ]
Por cierto, gracias por esta aclaración.

-
Estás recibiendo esto porque comentaste.
Responda a este correo electrónico directamente, [ https://github.com/ansible/ansible/issues/48859#issuecomment -451426545 | verlo en GitHub], o [ https://github.com/notifications/unsubscribe-auth/AAigO-Cbc5kdXQNhBL8mpkefzwoemKN9ks5u_0N_gaJpZM4YoJPK | silenciar el hilo].

Por favor, que alguien me diga si después de leer todo esto finalmente lo tengo bien en la cabeza. Hay varios complementos diferentes para leer el inventario (yo uso yaml).

Todo lo que me está tratando de decir es que no pasó la verificación de inventario para el estilo ini, el guión o cualquier otro.

@sgutermann Sí, está tratando de decirle que no pasó la verificación de inventario para el script ini (porque en su lugar está usando el yaml.

Si en ansible.cfg acaba de usar:

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

Entonces esos "avisos informativos" desaparecerían. Estoy de acuerdo en que no está claro para qué son, pero después de algunas pruebas y errores, pude deshacerme de esos "avisos". Utilizo el formato ini para todo, y no ejecuto "one-offs" ... así que solo uso ini y tada ... no más mensajes irritantes.

¿Qué es este error? Soy un novato que quiere probar Ansible.

Pero se produjo un error, que no sé cómo resolver .....

También sigo recibiendo esto, a pesar de poner

enable_plugins = ini

en mi archivo ansible.cfg . Super molesto ...

@bcoca , aclarar el mensaje como sugiere @ssbarnea ayudaría enormemente. El mensaje en el PR no es tan claro, y la sugerencia ayudaría a evitar que los usuarios quieran mirar bajo el capó para descubrir por qué algo se "rechaza" debido a que "no está verificado", en lugar de "omitir" para otro inventario. enchufar. El mensaje también debe identificar el complemento como un complemento de inventario como se sugiere. Además, gracias por proporcionar el mensaje de información en primer lugar y configurar la verbosidad para que coincida con el nivel del complemento de inventario que está realmente cargado. Pude aprender algo hoy después de preguntarme "¿qué hice mal?" :)

Con 2.7.8 recibo este mensaje:

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 mí, no era obvio que host_list y script fueran los nombres reales de los complementos.

Creo que quedaría más 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 mismo problema !!

[ root @ localhost ~] _ ### ansible-playbook -i / etc / ansible / hosts openshift-ansible / playbooks / openshift-node / bootstrap.retry -vvv_
ansible-playbook 2.7.10
archivo de configuración = /etc/ansible/ansible.cfg
ruta de búsqueda de 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
ubicación ejecutable = / usr / bin / ansible-playbook
Python version = 2.7.5 (predeterminado, 26 de marzo de 2019, 22:13:06) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
Usando /etc/ansible/ansible.cfg como archivo de configuración
/ etc / ansible / hosts no cumplió con los requisitos de host_list, verifique la documentación del complemento si esto es inesperado
/ etc / ansible / hosts no cumplió con los requisitos del script, verifique la documentación del complemento si esto es inesperado
Fuente de inventario analizada / etc / ansible / hosts con el complemento ini
¡ERROR! los libros de jugadas deben ser una lista de jugadas

El error parece haber estado en '/root/openshift-ansible/playbooks/openshift-node/bootstrap.retry': línea 1, columna 1, pero puede
estar en otra parte del archivo dependiendo del problema de sintaxis exacto.

La línea ofensiva parece ser:

master.istic.linsoft.com

¡ERROR! los libros de jugadas deben ser una lista de jugadas

Ese es un problema diferente. Está proporcionando un archivo de reintento como si fuera un libro de jugadas YAML, y no lo es; es una lista de hosts fallidos.

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

Dado que eso no es un error, absténgase de seguir debatiendo aquí; use el grupo de google ansible-project en su lugar.

Oye ! gracias por la rápida respuesta
de lo contrario, sigo teniendo el mismo problema
...

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

¡ERROR! los libros de jugadas deben ser una lista de jugadas

Ese es un problema diferente. Está proporcionando un archivo de reintento como si fuera un
Libro de jugadas de YAML, y no lo es; es una lista de hosts fallidos.

Utilice: ansible-playbook /path/to/bootstrap.yml --limit
@ / ruta / a / bootstrap.retry

Dado que eso no es un error, absténgase de seguir discutiendo aquí - use
el grupo de google ansible-project en su lugar.

-
Estás recibiendo esto porque comentaste.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/ansible/ansible/issues/48859#issuecomment-485232650 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/ALWB2BCFZ5OPUOJSKEXNP6TPRQMT7ANCNFSM4GFASPFA
.

¿Fue útil esta página
0 / 5 - 0 calificaciones