gpt4 book ai didi

ansible - 使用 with_items 和寄存器进行迭代

转载 作者:行者123 更新时间:2023-12-01 23:39:47 25 4
gpt4 key购买 nike

寻求帮助来解决我几个小时以来一直困扰的问题。我想迭代一个列表,运行一个命令,注册每个命令的输出,然后通过调试迭代每个唯一的寄存器 {{ someregister }}.stdout

例如,以下代码将输出 "msg": "1""msg": "2"

---

- hosts: localhost
gather_facts: false

vars:
numbers:
- name: "first"
int: "1"
- name: "second"
int: "2"

tasks:

- name: Register output
command: "/bin/echo {{ item.int }}"
register: result
with_items: "{{ numbers }}"

- debug: msg={{ item.stdout }}
with_items: "{{ result.results }}"

但是,如果我 try catch 使用 with_list 命名的寄存器变量中的命令的输出,我将无法访问列表或其中的元素。例如,将代码稍微更改为:

---

- hosts: localhost
gather_facts: false

vars:
numbers:
- name: "first"
int: "1"
- name: "second"
int: "2"

tasks:

- name: Register output
command: "/bin/echo {{ item.int }}"
register: "{{ item.name }}"
with_items: "{{ numbers }}"

- debug: var={{ item.name.stdout }}
with_items: "{{ numbers }}"

给我:

TASK [debug] 

> ******************************************************************* fatal: [localhost]: FAILED! => {"failed": true, "msg": "'unicode
> object' has no attribute 'stdout'"}

是否无法动态地将寄存器命名为命令的输出,然后可以在稍后的播放中调用该输出?我希望命令的每次迭代及其后续的 register 名称都能被唯一访问,例如,给出最后一个示例,我希望有注册的变量称为“first”和“第二”,但没有。

从调试节中删除 with_items,并使用first.stdout 显式定义 var 或消息返回“未定义”。

Centos 7_2 上的 Ansible 版本为 2.0.2.0。

提前致谢。

最佳答案

好的,我找到了 post on stackoverflow这帮助我更好地理解这里发生了什么以及如何访问 result.results 中的元素。

我最终得到的代码是:

---

- hosts: localhost
gather_facts: false

vars:
numbers:
- name: "first"
int: "1"
- name: "second"
int: "2"

tasks:

- name: Register output
command: "/bin/echo {{ item.int }}"
register: echo_out
with_items: "{{ numbers }}"

- debug: msg="item.item={{item.item.name}}, item.stdout={{item.stdout}}"
with_items: "{{ echo_out.results }}"

这给了我想要的结果:

"msg": "item.item=first, item.stdout=1"
"msg": "item.item=second, item.stdout=2"

关于ansible - 使用 with_items 和寄存器进行迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37925282/

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