Ansible: Инвентарь не соответствует требованиям host_list / скрипту (Ansible 2.7.1)

Созданный на 18 нояб. 2018  ·  45Комментарии  ·  Источник: ansible/ansible



РЕЗЮМЕ


После обновления до доступной версии 2.7.1 с использованием Homebrew в macOS я получаю следующее информационное предупреждение при запуске playbooks с опцией подробного вывода.

/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

Мои учебники по-прежнему работают без проблем. У меня никогда не было проблем с моим файлом hosts, и это сообщение не отображается с помощью ansible 2.7.0.

ТИП ПРОБЛЕМЫ
  • Сообщение об ошибке
КОМПОНЕНТ НАЗВАНИЕ


плагин host_list (файл инвентаря)
плагин скрипта (файл инвентаря)

ДОСТУПНАЯ ВЕРСИЯ

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)]
КОНФИГУРАЦИЯ

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
ОС / СРЕДА


macOS High Sierra 10.13.6

ДЕЙСТВИЯ ПО ВОСПРОИЗВЕДЕНИЮ


Переключитесь на доступную версию 2.7.1, запустите любой playbook с включенной подробной информацией.

ansible-playbook test.yml -v

ОЖИДАЕМЫЕ РЕЗУЛЬТАТЫ

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

TASK [Gathering Facts] *******************************************************************************************************************************
ok: [localhost]
ФАКТИЧЕСКИЕ РЕЗУЛЬТАТЫ


Пособия по-прежнему работают и заполняются без проблем. Но подробное информационное сообщение ansible предполагает, что что-то не так с моим файлом инвентаризации с последней доступной версией (на 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

Самый полезный комментарий

О том, что делают те плагины, которые получают checked , необходимо сообщать. Просто сказать, что что-то не так, но не дать понять, что не так, неправильно. Либо сообщение «не соответствует требованиям» появляется без причины и должно быть удалено, либо приводится реальная причина, в которой указано ЧТО, ГДЕ и ПОЧЕМУ.

Все 45 Комментарий

Привет, @ mil1i , спасибо, что отправили этот вопрос!

нажмите здесь, чтобы получить помощь по ботам

Файлы, указанные в описании:

Если эти файлы неточны, обновите раздел component name описания или используйте команду !component bot.

нажмите здесь, чтобы получить помощь по ботам

Это было специально реализовано в https://github.com/ansible/ansible/pull/46766 для предоставления дополнительной информации при запуске ansible с -v или выше.

Если у вас есть дополнительные вопросы, зайдите в IRC или в список рассылки:

ИМО, это не дополнительная информация. Если бы в нем говорилось, почему требования не были выполнены, или даже была ссылка на новые требования, это могло бы быть полезно.

нет новых требований, он просто дает вам информацию о том, ПОЧЕМУ плагин был пропущен, есть много причин, в этом случае это потому, что он не прошел этап проверки для плагина, который должен иметь определенные требования в себе документация (см. ansible-doc -t inventory)

Я не вижу в сообщении ничего, что говорит ПОЧЕМУ, а только ЧТО, и что это плохо. ansible-doc -t inventory ini не дает мне ни малейшего намека на то, что нельзя проверить. Если на этапе проверки есть жалоба, она должна быть конкретной (строка, столбец, что неверно), а не расплывчатым сообщением, которое ничего не значит, если вы не живете в исходном коде Ansible.

ПОЧЕМУ в том, что требования не были выполнены, ошибка синтаксического анализа может быть другой причиной, и это приведет к определенному исключению / трассировке. Каждый плагин имеет свои собственные требования и проверку, во многих случаях это связано не с содержимым файла, а с природой самого файла.

Используя -vvv, вы должны увидеть по крайней мере одну из причин несоблюдения требований:
Skipping due to inventory source not existing or not being readable by the current user

-vvv не показывает ничего, кроме сообщения -v. И -vvvvvv тоже. Мне кажется, это ошибка для предупреждения о несуществующей проблеме, по крайней мере, для инвентаризаций на основе ini.

Я привел это в качестве одного примера, есть и другие причины, не все из них показывают конкретную информацию, это зависит от конкретных плагинов. Инвентаризация ini не вызывает этого напрямую, вы видите это, потому что 2 других плагина «проверяются» до того, как ini примет файл.

О том, что делают те плагины, которые получают checked , необходимо сообщать. Просто сказать, что что-то не так, но не дать понять, что не так, неправильно. Либо сообщение «не соответствует требованиям» появляется без причины и должно быть удалено, либо приводится реальная причина, в которой указано ЧТО, ГДЕ и ПОЧЕМУ.

это постепенное улучшение, эта часть кода не знает причины, просто плагин отклонил ее на этапе проверки, это больше информации, чем вы получили раньше, в которой вы не знали, что она была отклонена на этой фазе

Поскольку все работает как у меня, так и у оригинального плаката, это не похоже на улучшение.

Действительно, очень запутанно.

Я также нашел это сообщение сбивающим с толку.

Я согласен, что его сообщение об "ошибке" бесполезно, по крайней мере, должна быть ссылка на конкретную главу в документации, содержащую требования host_list. Мои плейбуки работают без проблем, и я понятия не имею, почему именно появляется это сообщение и как решить проблему.

это постепенное улучшение, эта часть кода не знает причины, просто плагин отклонил ее на этапе проверки, это больше информации, чем вы получили раньше, в которой вы не знали, что она была отклонена на этой фазе

Так, может быть, эти плагины должны лучше запускать сообщение (или нет), поскольку они обладают какой-либо полезной информацией?

Я согласен с тем, что сообщение сбивает с толку. Я понятия не имел, что такое «требования к host_list» или о каком плагине идет речь.

Прочитав документацию по подключаемым модулям

[inventory]

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

Как узнать, КАКОЙ плагин сгенерировал сообщение? По крайней мере, это будет намек. Я сократил свой список плагинов до одного (yaml) и все еще получаю сообщение, но инвентарь, похоже, разбирается нормально.

сообщение всегда имело имя плагина host_list / ini / script / yaml / и т. д., новое теперь помещает его в начало сообщения, а не в середину.

Нет, это не так. Он содержит файл, на который жалуются в начале, а не имя плагина, который жалуется.

/Users/alan/Source/ansible_home/hosts.ini не соответствует требованиям host_list, проверьте документацию плагина, если это неожиданно

Я не вижу ничего похожего на название плагина. Как предложил @ leedm777 , ограничение плагина с включенной инвентаризацией только ini устраняет сообщение, поэтому даже подсказка имени файла

Учитывая, что enable_plugins = ini останавливает сообщение, мне кажется, что какой-то другой плагин инвентаризации неправильно получает ini-файл в качестве входных данных и жалуется на него с неадекватным сообщением об ошибке. Как это не ошибка?

@alanbantuit прочитайте новое сообщение из PR выше, это то, что ставит плагин в начало

Как видно из вашего примера, host_list - это плагин, который, я согласен, неясен, поэтому я изменил его так, чтобы он находился в начале.

Так что же братья? Что такое плагин host_list ??

я добавил

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

в мою конф, но такое же сообщение

Похоже, что это один из типов ошибок, который автору не кажется ошибкой, но, очевидно, вызывает проблемы у обычных пользователей. Может быть, формулировка должна быть более ясной, что это не ошибка, и имя плагина должно быть в кавычках, как в

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

Текст уже изменился, https://github.com/ansible/ansible/pull/49080 , также я столкнулся с многословием, на котором он отображается.

Чтобы уточнить, это НЕ предупреждение и не ошибка, а просто информационное сообщение, которое появляется при использовании настройки детализации. Ни одно из сообщений с повышенной степенью детализации не является ошибкой, они отображаются всегда, вы можете получить дополнительную информацию об ошибке, но ошибки и предупреждения имеют собственные средства отображения.

хм правда, предупреждения фиолетовым, а ошибки красным

я до сих пор не знаю, о чем идет речь: D

Мне кажется, что если какой-то код выдает информационные сообщения о входных данных, не прошедших тест, другой код, который проверяет тот же вход, должен выдавать информационное сообщение о том, что входные данные проходят его тест. Это было бы последовательным и более информативным. Здесь похоже, что ввод где-то проходит проверку, но мы не знаем где.

когда тест проходит, вы видите, что плагин «обрабатывает» ввод, это сообщение должно было дать некоторую информацию о том, почему плагины не пытались это сделать

Забавно, что эта проблема является первой, которая появляется после поиска сообщений об ошибках, указанных в описании. Потому что это то, что мне пришлось сделать, чтобы найти решение после сравнения моего инвентарного списка с примерами документации, не обнаружив никаких странностей.

Я уважаю команду Ansible и благодарен за их работу, но это не крутое изменение @bcoca, оно сбивает с толку и ненужно, потому что оставляет нам вопросы, а не ответы.

Если у Ansible есть проблема с моими входными файлами, я хочу, чтобы он завершился жестко, скажите мне, в чем именно проблема, чтобы я мог ее исправить и продолжить выполнение задачи.

Плагины инвентаризации работают так: у нас есть их список, с учетом источника мы просматриваем список и смотрим, соответствует ли этот источник плагину, а затем, если он может быть проанализирован, вы получите предупреждение (переключите, чтобы сделать его ошибкой ), если ни один плагин не может прочитать файл.

то есть, учитывая hosts.ini, сначала мы пробуем 'host_list' (который принимает встроенную строку хоста -i "host1, host2," ), затем script (для динамических скриптов), затем yaml и затем ini (если это было пропущено, тогда 'auto' ). Я добавил сообщение, чтобы прояснить, почему плагин пропустил источник, в данном случае, что он не прошел этап проверки, PR выше делает это сообщение более понятным.

Опять же, это никогда не было ошибкой или предупреждением, это было еще одно из многих сообщений, которые вы получаете при многословном запуске.

Теперь, когда я прочитал это обсуждение, я понимаю, о чем эти сообщения. Но стоит отметить, что я потратил около 20 минут, изучая и читая это (и комментарии показывают, что это было проблемой для многих других пользователей). _Если каждое сообщение в подробном выводе было настолько тревожным, что вызвало такой ответ, никто бы никогда не получил все полезное, сделанное с помощью Ansible и / или подробного режима, будет считаться бесполезным.

Проблема для меня заключалась в том, что использование «-v» или «-vv» сообщает о плагинах, которые НЕ работали, но НЕ указывает, какой из них работает. Вы должны ввести "-vvv", чтобы увидеть, какой плагин работает. Возможно, просто заставив сообщение об успешном выполнении плагина всегда отображаться на том же уровне подробности, что и сообщения об ошибке плагина, можно избежать этой путаницы.

@flatrocks снова, посмотрите на PR выше, он сделал именно это

Должен сказать, что это сообщение меня тоже сбивает с толку, поэтому я и прочитал эту ошибку.

Это скорее сообщение уровня отладки, которое все еще печатается на V = 1, что не нормально. Ирония заключается в том, что эти сообщения печатаются, но вы не знаете, какой плагин был использован для загрузки файла hosts в конце, если он был загружен вообще.

Я считаю, что ошибка подлинная и подчеркивает несколько проблем:

  • В сообщении правильно указано имя плагина, должно быть что-то ясное, например, «ФАЙЛ не соответствует требованиям плагина FOO inventory, загрузка пропущена.
  • Должно появиться сообщение об успешной загрузке файла инвентаря.
  • Пропуск загрузки файла инвентаризации должен отображаться только в том случае, если включена большая детализация lile V> = 2 или около того.
  • Сообщения RTFD, не содержащие постоянных ссылок на документы, создают неудобства для пользователей. Если сообщение рекомендует пользователю прочитать документы, оно должно включать URL-адрес.

После этих сообщений я получаю сообщение «Не удалось сопоставить предоставленный шаблон хоста, игнорируя:« все »», поэтому очевидно, что что-то где-то не работает, но нет информации о том, как найти это или исправить. Определенно нужно лучшее сообщение об ошибке.

Можем ли мы узнать, каким требованиям нам нужно соответствовать, чтобы не получить это информационное сообщение?

Новое сообщение в фиксации фиксации PR:
display.vvv("%s declined parsing %s as it did not pass it's verify_file() method" % (plugin_name, source))

@bcoca
Разве это не должно быть « его », а не « это »?
https://github.com/ansible/ansible/blob/devel/lib/ansible/inventory/manager.py#L281
Кстати, спасибо за это разъяснение.

Да, «это» является сокращением «это есть», а не притяжательным словом «оно». Притяжательное - это «его».

От: "sremy" [email protected]
Кому: "ansible / ansible "
Копия: «Алан Бреннер» [email protected] , «Комментарий» [email protected]
Отправлено: пятница, 4 января 2019 г., 7:05:19
Тема: Re: [ansible / ansible] Инвентарь не соответствует требованиям host_list / скрипту (Ansible 2.7.1) (# 48859)

Новое сообщение в фиксации фиксации PR:
display.vvv ("% s отказался от синтаксического анализа% s, поскольку он не передал свой метод verify_file ()"% (plugin_name, source))

[ https://github.com/bcoca | @bcoca ]
Разве это не должно быть «его», а не «это»?
[ 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 ]
Кстати, спасибо за это разъяснение.

-
Вы получили это, потому что оставили комментарий.
Ответьте на это письмо напрямую, [ https://github.com/ansible/ansible/issues/48859#issuecomment -451426545 | просмотреть его на GitHub] или [ https://github.com/notifications/unsubscribe-auth/AAigO-Cbc5kdXQNhBL8mpkefzwoemKN9ks5u_0N_gaJpZM4YoJPK | отключить поток].

Кто-нибудь, пожалуйста, скажите мне, если после прочтения всего этого у меня наконец-то это прямо в голове. Есть несколько разных плагинов для чтения инвентаря (я использую yaml).

Все, что эта штука пытается мне сказать, заключается в том, что она не прошла инвентаризацию для стиля ini, скрипта или чего-то еще?

@sgutermann Да, он пытается сказать вам, что не прошел инвентаризацию для ini-скрипта (потому что вместо этого он использует yaml-скрипт.

Если в ansible.cfg вы только что использовали:

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

Тогда эти «информационные сообщения» исчезнут. Я согласен с тем, что не совсем понятно, для чего они нужны, но после некоторых проб и ошибок мне удалось избавиться от этих «уведомлений». Я использую формат ini для всего и не запускаю "разовые" ... поэтому я просто использую ini и tada ... больше никаких раздражающих сообщений.

что это за ошибка, я новичок, который хочу попробовать Ansible,

Но возникла ошибка, которую я не знаю, как исправить ...

Я тоже получаю это, несмотря на то, что

enable_plugins = ini

в моем ansible.cfg файле. Супер раздражает ...

@bcoca , @ssbarnea , очень поможет. Сообщение в PR не так ясно, и это предложение поможет предотвратить желание пользователей заглянуть под капот, чтобы узнать, почему что-то «отклоняется» из-за того, что оно «не подтверждено», а не «пропускается» для другого инвентаря. плагин. В сообщении также должно быть указано, что плагин является плагином инвентаризации, как предлагается. Кроме того, спасибо за предоставление информационного сообщения в первую очередь и за настройку детализации в соответствии с уровнем фактически загруженного плагина инвентаризации. Сегодня я кое-чему научился, задавшись вопросом: «Что я сделал не так?» :)

С 2.7.8 я получаю это сообщение:

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

Для меня не было очевидным, что host_list и script были настоящими именами плагинов.

Думаю, было бы понятнее:

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 такая же проблема !!

[ root @ localhost ~] _ ### ansible-playbook -i / etc / ansible / hosts openshift-ansible / playbooks / openshift-node / bootstrap.retry -vvv_
ansible-playbook 2.7.10
файл конфигурации = /etc/ansible/ansible.cfg
настроенный путь поиска модуля = [u '/ root / .ansible / plugins / modules', u '/ usr / share / ansible / plugins / modules']
доступное расположение модуля Python = /usr/lib/python2.7/site-packages/ansible
расположение исполняемого файла = / usr / bin / ansible-playbook
версия python = 2.7.5 (по умолчанию, 26 марта 2019 г., 22:13:06) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]
Использование /etc/ansible/ansible.cfg в качестве файла конфигурации
/ etc / ansible / hosts не соответствует требованиям host_list, проверьте документацию плагина, если это неожиданно
/ etc / ansible / hosts не соответствует требованиям скрипта, проверьте документацию плагина, если это неожиданно
Разобрал / etc / ansible / hosts источник инвентаря с плагином ini
ОШИБКА! playbooks должен быть списком пьес

Ошибка, похоже, была в '/root/openshift-ansible/playbooks/openshift-node/bootstrap.retry': строка 1, столбец 1, но может
быть в другом месте файла в зависимости от точной синтаксической проблемы.

Оскорбительная строка выглядит так:

master.istic.linsoft.com

ОШИБКА! playbooks должен быть списком пьес

Это другая проблема. Вы предоставляете файл повтора, как если бы это была книга воспроизведения YAML, а это не так; это список неудачных хостов.

Использование: ansible-playbook /path/to/bootstrap.yml --limit @/path/to/bootstrap.retry

Поскольку это не ошибка, пожалуйста, воздержитесь от дальнейшего обсуждения здесь - используйте вместо этого группу ansible-project google.

Привет ! спасибо за быстрый ответ
в противном случае у меня все еще будет та же проблема
...

Le dim. 21 авр. 2019 в 08:54, Брайан Кэндлер [email protected] а
écrit:

ОШИБКА! playbooks должен быть списком пьес

Это другая проблема. Вы предоставляете файл повтора, как если бы это был
YAML playbook, а это не так; это список неудачных хостов.

Используйте: ansible-playbook /path/to/bootstrap.yml --limit
@ / путь / к / bootstrap.retry

Поскольку это не ошибка, воздержитесь от дальнейшего обсуждения здесь - используйте
вместо этого группа ansible-project google.

-
Вы получили это, потому что оставили комментарий.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/ansible/ansible/issues/48859#issuecomment-485232650 ,
или отключить поток
https://github.com/notifications/unsubscribe-auth/ALWB2BCFZ5OPUOJSKEXNP6TPRQMT7ANCNFSM4GFASPFA
.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги