Ansible: 库存不符合host_list / script要求(Ansible 2.7.1)

创建于 2018-11-18  ·  45评论  ·  资料来源: ansible/ansible



概要


在macOS上使用Homebrew升级到ansible版本2.7.1之后,运行带有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

我的剧本仍然可以正常运行且完整无缺。 过去,我的主机文件从未遇到任何问题,并且在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

重现步骤


切换到ansible版本2.7.1,运行启用了详细功能的任何剧本。

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中有意实现的,以在以-v或更高版本运行ansible时提供其他信息。

如果您还有其他疑问,请通过IRC或邮件列表停止:

  • IRC:irc.freenode.net上的#ansible
  • 邮件列表: https: //groups.google.com/forum/#!forum/ansible -project

IMO,这不是其他信息。 如果它说明了为什么不满足要求,甚至只是链接到新要求是什么,那么它可能会很有用。

没有新的要求,只是为您提供了为什么插件的信息被跳过,这有很多原因,在这种情况下,是因为它没有通过插件的“验证”阶段,该阶段应具有特定的要求文档(请参阅ansible-doc -t广告资源

我在消息中看不到为什么,只是什么以及效果不佳的消息。 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要求”,或者它在说什么插件。

阅读了清单插件文档后,我确实找到了解决方法。 如果仅使用正在使用的清单插件来配置Ansible,则可以避免出现有关文件不满足其他插件要求的警告。

[inventory]

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

您怎么知道WHICH插件生成了消息? 至少这将是一个提示。 我将插件列表缩减为一个(yaml),但仍然收到消息,但清单似乎解析良好。

该消息始终具有插件名称host_list / ini / script / yaml / etc,新的插件现在将其放在消息的开头,而不是中间。

不,不是。 它在一开始就抱怨该文件,而不是抱怨的插件名称。

/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”报告了无效的插件,但没有指出哪个DID有效。 您必须输入完整的“ -vvv”才能查看哪个插件有效。 也许仅使插件成功消息始终显示在与插件失败消息相同的详细级别上即可避免这种混乱。

再次@flatrocks ,看看上面的PR,它就是那样

我不得不说我也发现该消息令人困惑,这就是我最终阅读此错误的原因。

这更多是调试级别的消息,仍然在V = 1上打印,这不是正常的。 具有讽刺意味的是,这些消息是打印出来的,但是您根本不知道最后使用哪个插件来加载主机文件(如果已加载)。

我认为该错误是真实的,并强调了几个问题:

  • 消息确实正确提到了插件名称,应该很清楚,例如“文件不符合FOO库存插件要求,跳过了加载。
  • 它应该是有关库存文件满载的消息
  • 仅当启用更大详细度时,才显示清单文件的跳过负载,而V> = 2左右。
  • 不包含文档永久链接的RTFD消息会带来不良的用户体验。 如果一条消息要求用户阅读文档,则它必须包含一个URL。

这些消息发出后,我收到“无法匹配提供的主机模式,忽略:'all'”,因此很明显某些地方不起作用,但是没有有关如何查找或修复它的信息。 绝对需要更好的错误消息。

我们可以知道需要匹配哪种类型的需求,以便我们不会收到此信息消息吗?

固定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”通知@ github.com
发送至:“ ansible / [email protected]
抄送:“ Alan Brenner” [email protected] ,“评论” [email protected]
发送:2019年1月4日星期五7:05:19 AM
主题:回复:[ansible / ansible]广告资源不符合host_list / script要求(Ansible 2.7.1)(#48859)

固定PR提交中的新消息是:
display.vvv(“%s拒绝分析%s,因为它没有通过它的verify_file()方法”%(plugin_name,源))

[ 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格式用于所有内容,并且不运行“ one offs” ...因此,我只使用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']
ansible python模块位置= /usr/lib/python2.7/site-packages/ansible
可执行位置= / usr / bin / ansible-playbook
python版本= 2.7.5(默认,Mar 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不符合脚本要求,如果这是意外情况,请查看插件文档
使用ini插件解析/ etc / ansible / hosts清单资源
错误! 剧本必须是剧本清单

错误似乎出在'/root/openshift-ansible/playbooks/openshift-node/bootstrap.retry':第1行,第1列,但可能
在文件中的其他位置,具体取决于确切的语法问题。

令人反感的行似乎是:

master.istic.linsoft.com

错误! 剧本必须是剧本清单

那是另一个问题。 您提供的重试文件就像是YAML剧本一样,不是。 这是失败主机的列表。

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

由于这不是错误,请不要在此处进行进一步的讨论-请改用ansible-project谷歌论坛。

嘿! 谢谢您的快速回复
否则我仍然会遇到同样的问题
...

乐昏。 21平均 2019à08:54,布莱恩·坎德尔(Brian Candler) [email protected] a
écrit:

错误! 剧本必须是剧本清单

那是另一个问题。 您正在提供一个重试文件,就好像它是一个
YAML剧本,事实并非如此; 这是失败主机的列表。

使用:ansible-playbook /path/to/bootstrap.yml --limit
@ / path / to / 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 等级