Ansible:打印playbook中的警告

Ansible:打印playbook中的警告,ansible,Ansible,我是否可以像Ansible打印内部警告一样打印Ansible的警告,如: [WARNING]: Ignoring invalid attribute: xx 目标用途是警告,不是错误,因此它们不应该结束剧本的执行,但它们应该清晰可见(标准Ansible紫色) 用法示例: 我有一些最新版本的硬编码URL playbook将下载最新的可用URL 如果URL不同,则打印警告 由于源不受信任,下载的URL应仅用于比较,而不是直接使用 根据您的问题,如果您不信任提供的URL,但要回答有关生成URL的问

我是否可以像Ansible打印内部警告一样打印Ansible的警告,如:

 [WARNING]: Ignoring invalid attribute: xx
目标用途是警告,不是错误,因此它们不应该结束剧本的执行,但它们应该清晰可见(标准Ansible紫色)

用法示例:

  • 我有一些最新版本的硬编码URL
  • playbook将下载最新的可用URL
  • 如果URL不同,则打印警告
  • 由于源不受信任,下载的URL应仅用于比较,而不是直接使用

  • 根据您的问题,如果您不信任提供的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**