Kev*_*ker 5 ansible ansible-playbook
我使用" 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
Run Code Online (Sandbox Code Playgroud)
变量文件的内容
#/root/tempplate.yml
- name: ens35
bootproto: dhcp
- name: ens34
bootproto: none
Run Code Online (Sandbox Code Playgroud)
执行时:
任务:[mac | 设置MAC]***************************************************致命:[192.168.211.146] => 一个或多个未定义的变量:'dict'对象没有属性'stdout'
致命:所有主机都已经失败 - 中止
register在循环内部使用时有点不同(见这里).在这种情况下,您的变量将有一个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"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
然后你可以循环而不是原始列表:
- 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10415 次 |
| 最近记录: |