gpt4 book ai didi

ansible 使用循环和多个变量

转载 作者:行者123 更新时间:2023-12-02 16:59:36 25 4
gpt4 key购买 nike

我正在使用“shell:”通过循环“with_items:”并将其注册为另一个变量来获取一些数据。稍后使用“lineinfile:”我尝试应用早期变量的内容,但无法使用“{{variable.stdout}}”,因为它显示为在“with_items:”中未定义

有没有办法告诉ansible“variable.stdout”不要在“with_items:”中查找

---
- include_vars: /root/template.yml

- name: Getting MAC
shell: "cat /sys/class/net/{{item.name}}/address"
register: mac
with_items:
- "{{ interfaces_ipv4 }}"

- name: Setting MAC
lineinfile:
state=present
dest=/etc/sysconfig/network-scripts/ifcfg-{{item.name}}
regexp='^HWADDR=.*'
line="HWADDR={{mac.stdout}}"
with_items:
- "{{ interfaces_ipv4 }}"
tags:
- set_mac

变量文件的内容

#/root/tempplate.yml

- name: ens35
bootproto: dhcp
- name: ens34
bootproto: none

执行时:

任务:[mac |设置 MAC] ************************************************** ******fatal: [192.168.211.146] => 一个或多个 undefined variable :“dict”对象没有属性“stdout”

致命:所有主机都已失败 - 正在中止

最佳答案

register 在循环内部使用时工作方式略有不同(请参阅 here )。在这种情况下,您的变量将有一个 results 项,它是一个列表,其中包含每次迭代的结果作为项。该列表中的每个项目还将有一个 item 项目,并迭代该元素。

例如:

mac: {
msg: "All items completed",
results: [
{
changed: True,
stdout: "some_stdout",
item: {
name: "some_name1"
}
},
{
changed: True,
stdout: "some_stdout2",
item: {
name: "some_name2"
}
}
]
}

然后您可以循环它而不是原始列表:

- name: Setting MAC
lineinfile:
state=present
dest=/etc/sysconfig/network-scripts/ifcfg-{{item.item.name}}
regexp='^HWADDR=.*'
line="HWADDR={{item.stdout}}"
with_items: mac.results
tags:
- set_mac

关于ansible 使用循环和多个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26774742/

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