gpt4 book ai didi

Ansible、循环、寄存器和标准输出

转载 作者:行者123 更新时间:2023-12-05 01:17:57 25 4
gpt4 key购买 nike

我有一个看起来像这样的剧本:

- hosts: host1
gather_facts: false
tasks:
- name: "Loop"
command: "echo {{ item }}"
with_items: [ 0, 2, 4, 6, 8, 10 ]
register: hello
- debug: "msg={{ hello.results }}"

一切正常,输出返回,但有成吨的输出。结果是:

  - debug: "msg={{ hello.results.1.stdout }}"

完全按照我的意愿行事——只需从命令中获取标准输出——但仅在循环的六次中有一次。

我真正想要/需要做的是:

  - debug: "msg={{ hello.results.*.stdout }}"

它进入 hello 结构,访问 results 条目,转到该数组的每个成员,并拉出 stdout值(value)。

这可能吗?


更新

- hosts: host1
gather_facts: false
tasks:
- name: "Loop"
command: "echo {{ item }}"
with_items: [ 0, 2, 4, 6, 8, 10 ]
register: hello
- debug:
msg: "{{item.stdout}}"
with_items: "{{hello.results}}"

和我原来的例子一样冗长。

TASK [debug] *******************************************************************
ok: [host1] => (item={'_ansible_parsed': True, 'stderr_lines': [], u'cmd': [
u'echo', u'0'], u'end': u'2018-01-02 20:53:08.916774', '_ansible_no_log': False
, u'stdout': u'0', '_ansible_item_result': True, u'changed': True, 'item': 0,
u'delta': u'0:00:00.002137', u'stderr': u'', u'rc': 0, u'invocation': {u'module_
args': {u'warn': True, u'executable': None, u'_uses_shell': False, u'_raw_params
': u'echo 0', u'removes': None, u'creates': None, u'chdir': None, u'stdin': Non
e}}, 'stdout_lines': [u'0'], u'start': u'2018-01-02 20:53:08.914637', 'failed':
False}) => {
"item": {
"changed": true,
"cmd": [
"echo",
"0"
],
"delta": "0:00:00.002137",
"end": "2018-01-02 20:53:08.916774",
"failed": false,
"invocation": {
"module_args": {
"_raw_params": "echo 0",
"_uses_shell": false,
"chdir": null,
"creates": null,
"executable": null,
"removes": null,
"stdin": null,
"warn": true
}
},
"item": 0,
"rc": 0,
"start": "2018-01-02 20:53:08.914637",
"stderr": "",
"stderr_lines": [],
"stdout": "0",
"stdout_lines": [
"0"
]
},
"msg": "0"
}

我得到上述构造的 6 个副本。

感觉我已经很接近了,但我还是做错了什么。我在底部看到 "msg": "0",这就是我想要的。我只是不想剩下的。

最佳答案

解决方案:

- debug: "msg={{ hello.results | map(attribute='stdout') | join('\n') }}"

备注:

默认情况下,Ansible 将打印可见的 \n 双字符序列而不是换行,因此要么使用回调插件来获得人类可读的输出(example),要么使用:

- copy:
content: "{{ hello.results | map(attribute='stdout') | join('\n') }}"
dest: ./result.txt

并检查result.txt的内容。

关于Ansible、循环、寄存器和标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48067059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com