2016-11-14 46 views
1

我正在寻找一种方法,以获得来自Ansible模块的更详细的输出,成功执行,但似乎实现的唯一示例是shell模块,它允许注册并稍后打印stdout和stderr。 虽然这将是一个解决方法,但如果内置Ansible模块存在,那么触发shell并不是一个好的做法。Ansible:模块的详细输出

举个例子,当从一个模块更详细的输出将是有益的:

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

这将更新使用百胜模块的所有包。但是,它不显示更新(如果有的话)。

类似的行为可以在其他模块中观察到。所以真正的问题是:是否有任何Ansible开关/设置可以在剧本中强制执行单个任务的更详细的输出? (我想樱桃选择我得到详细的输出,并避免其他任何噪音)。

回答

3

好,感谢@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" 
     ] 
    } 
} 

这肯定给了我,我一直在寻找,可根据具体情况逐案进行应用的详细程度。

2

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

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

这是*几乎* spot,谢谢。我会给它一个upvote,因为它让我走向正确的方向。一会儿会回答我自己的问题。 – sysconfig

+0

我很高兴它帮助@sysconfig。干杯 – xeroqu