Ansible:打印playbook中的警告
我是否可以像Ansible打印内部警告一样打印Ansible的警告,如:Ansible:打印playbook中的警告,ansible,Ansible,我是否可以像Ansible打印内部警告一样打印Ansible的警告,如: [WARNING]: Ignoring invalid attribute: xx 目标用途是警告,不是错误,因此它们不应该结束剧本的执行,但它们应该清晰可见(标准Ansible紫色) 用法示例: 我有一些最新版本的硬编码URL playbook将下载最新的可用URL 如果URL不同,则打印警告 由于源不受信任,下载的URL应仅用于比较,而不是直接使用 根据您的问题,如果您不信任提供的URL,但要回答有关生成URL的问
[WARNING]: Ignoring invalid attribute: xx
目标用途是警告,不是错误,因此它们不应该结束剧本的执行,但它们应该清晰可见(标准Ansible紫色)
用法示例:
根据您的问题,如果您不信任提供的URL,但要回答有关生成URL的问题,您可能希望剧本失败
[警告]:
据我所知,实现这一点的唯一方法是使用您自己的ansible模块或插件
您的模块或插件将与您描述的URL进行比较,并发出适当的消息
在ansible模块中,您创建的模块
对象具有一个警告
函数,您可以调用该函数,如:
module.warn(“您的文本”)
在插件中,您的代码将生成一个显示
对象,该对象将具有一个警告
函数,您可以这样调用:
显示。警告(“您的文本”)
如果您的目标只是获得一条ansible purple警告消息,而不是您可以通过
调试模块生成的消息,那么这似乎需要大量工作。下面是一个简单的过滤器插件,它将发出警告消息:
从ansible.utils.display导入显示
类FilterModule(对象):
def筛选器(self):返回{'warn_me':self.warn_filter}
def warn_过滤器(自身、消息、**kwargs):
Display().警告(消息)
回信
将上述内容放入文件中,例如,[playbook\u dir]/filter\u plugins/warn\u me.py
调用此筛选器的人为示例playbook可能如下所示:
---
-名称:演示警告过滤器插件
收集事实:不
主持人:全部
任务:
-梅塔:结束比赛
当:(“无法处理文件XYZ”| warn_me())
委托给:localhost
跑一次:是的
运行此剧本可能会产生以下输出:
$ansible剧本测试\u warnme.yml-l转发
__________________________________________
------------------------------------------
\ ^__^
\(oo)\_______
(__)\ )\/\
||----w|
|| ||
[警告]:无法处理文件XYZ
____________
<播放重述>
------------
\ ^__^
\(oo)\_______
(__)\ )\/\
||----w|
|| ||
警告可以通过使用失败:
+当:
+忽略错误:
来进行排序
e、 g
警告显示为致命错误,然后是…跳过
,它们的计数将显示在播放重述
中,显示为忽略=N
e、 g
信用证:您能否提供一些背景信息,说明为什么/何时需要发出警告,以及为什么需要警告而不是标准的调试消息?您可以轻松地从ansible回调生成紫色[警告]消息,但创建回调只是为了生成消息似乎有些过分,除非回调在生成消息的过程中做了一些有意义的事情。我添加了我的目标用途作为示例。我发现这个问题非常有效,并且当前接受的答案不是真正的解决方案,因为它不允许用户创建警告。整个想法是在运行时发出警告,并能够在剧本末尾处理它们。@sorin我刚刚在Ansible打开了一个功能请求:这个回答中的过滤器对我有效,尽管我使用set\u fact
执行并保存显示的警告。
- name: Check hostname matches entry in ansible/hosts
fail:
msg: "Warning: Expected hostname to be '{{ inventory_hostname }}' but was '{{ ansible_facts.fqdn}}'"
when: ansible_facts.fqdn != inventory_hostname
ignore_errors: True
TASK [mytask: Check hostname matches entry in ansible/hosts] ***************
fatal: [myhost]: FAILED! => {"changed": false, "msg": "Warning: Expected hostname to be 'myhost' but was 'myhost.my.example.com'"}
...ignoring
PLAY RECAP *************************************************************************************
myhost ok=0 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 **ignored=1**