【问题标题】:Ansible: Verbose output for modulesAnsible:模块的详细输出
【发布时间】:2016-11-14 12:41:08
【问题描述】:

我正在寻找一种方法从 Ansible 模块中获取更详细的输出,以便 成功 执行,但似乎实现的唯一示例是 shell 模块,它允许注册然后打印标准输出和标准错误。 虽然这是一种变通方法,但如果存在内置 Ansible 模块,则突破到 shell 并不是一个好的做法。

举个例子,一个模块的更详细的输出会很有用:

- name: upgrade all packages
  yum: name=* state=latest

这会更新所有使用 yum 模块的软件包。但是,它不显示更新的内容(如果有的话)。

在其他模块中也可以观察到类似的行为。所以实际的问题是:是否有任何 Ansible 开关/设置可以强制为剧本中的单个任务提供更详细的输出? (我想挑选我得到详细输出的地方,并避免其他一切产生噪音。)

【问题讨论】:

    标签: ansible ansible-2.x


    【解决方案1】:

    一个想法是有另一个任务,如果它成功,它将打印前一个任务的输出。我没有测试,但这样的事情可能会起作用:

     - name: upgrade all packages
       yum: name=* state=latest
       register: result
     - name: Show output
       when: result|succeeded
       debug: msg="{{ result.stdout_lines }}"
    

    【讨论】:

    • 那是几乎,谢谢。我会给它一个赞成票,因为它让我进入了正确的方向。将在一秒钟内回答我自己的问题。
    【解决方案2】:

    好的,感谢@xeroqu,我现在可以自己回答了:

      - name: upgrade all packages
        yum: name=* state=latest
        register: result
      - name: Show output
        when: result|succeeded
        debug: msg="{{ result.results }}"
    

    密钥在{{result.results}},而不是{{result.stdout_lines}}。更准确地说,模块似乎返回了一个包含(至少?)以下内容的字典:

    ok: [localhost] => {
       "msg": {
           "changed": false,
           "msg": "",
           "rc": 0,
           "results": [
              "Nothing to do here, all packages are up to date"
           ]
       }
    }
    

    这无疑给了我想要的详细信息,可以根据具体情况应用。

    【讨论】:

      猜你喜欢
      • 2012-11-06
      • 1970-01-01
      • 2015-04-27
      • 2015-08-06
      • 1970-01-01
      • 2014-11-21
      • 2020-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多