[英]Register Variables in Loop in an Ansible Playbook
我有以下两项艰巨的任务
tasks:
- shell: ifconfig -a | sed 's/[ \t].*//;/^\(lo\|\)$/d'
register: var1
- debug: var=var1
- shell: ethtool -i {{ item }} | grep bus-info | cut -b 16-22
with_items: var1.stdout_lines
register: var2
- debug: var=var2
用于获取计算机(Linux)中的接口列表并获取每个接口的总线地址。 我在同一本剧本中还有另外一项任务,如下
- name: Binding the interfaces
shell: echo {{ item.item }}
with_flattened: var2.results
register: var3
我希望对var2的值进行迭代,然后打印总线号。
var2.results如下
"var2": {
"changed": true,
"msg": "All items completed",
"results": [
{
"changed": true,
"cmd": "ethtool -i br0: | grep bus-info | cut -b 16-22",
"delta": "0:00:00.005778",
"end": "2015-04-14 20:29:47.122203",
"invocation": {
"module_args": "ethtool -i br0: | grep bus-info | cut -b 16-22",
"module_name": "shell"
},
"item": "br0:",
"rc": 0,
"start": "2015-04-14 20:29:47.116425",
"stderr": "",
"stdout": "",
"warnings": []
},
{
"changed": true,
"cmd": "ethtool -i enp13s0: | grep bus-info | cut -b 16-22",
"delta": "0:00:00.005862",
"end": "2015-04-14 20:29:47.359749",
"invocation": {
"module_args": "ethtool -i enp13s0: | grep bus-info | cut -b 16-22",
"module_name": "shell"
},
"item": "enp13s0:",
"rc": 0,
"start": "2015-04-14 20:29:47.353887",
"stderr": "",
"stdout": "0d:00.0",
"warnings": []
},
{
"changed": true,
"cmd": "ethtool -i enp14s0: | grep bus-info | cut -b 16-22",
"delta": "0:00:00.005805",
"end": "2015-04-14 20:29:47.576674",
"invocation": {
"module_args": "ethtool -i enp14s0: | grep bus-info | cut -b 16-22",
"module_name": "shell"
},
"item": "enp14s0:",
"rc": 0,
"start": "2015-04-14 20:29:47.570869",
"stderr": "",
"stdout": "0e:00.0",
"warnings": []
},
{
"changed": true,
"cmd": "ethtool -i enp15s0: | grep bus-info | cut -b 16-22",
"delta": "0:00:00.005873",
"end": "2015-04-14 20:29:47.875058",
"invocation": {
"module_args": "ethtool -i enp15s0: | grep bus-info | cut -b 16-22",
"module_name": "shell"
},
"item": "enp15s0:",
"rc": 0,
"start": "2015-04-14 20:29:47.869185",
"stderr": "",
"stdout": "0f:00.0",
"warnings": []
},
{
"changed": true,
"cmd": "ethtool -i enp5s0f1: | grep bus-info | cut -b 16-22",
"delta": "0:00:00.005870",
"end": "2015-04-14 20:29:48.112027",
"invocation": {
"module_args": "ethtool -i enp5s0f1: | grep bus-info | cut -b 16-22",
"module_name": "shell"
},
"item": "enp5s0f1:",
"rc": 0,
"start": "2015-04-14 20:29:48.106157",
"stderr": "",
"stdout": "05:00.1",
"warnings": []
},
{
"changed": true,
"cmd": "ethtool -i enp5s0f2: | grep bus-info | cut -b 16-22",
"delta": "0:00:00.005863",
"end": "2015-04-14 20:29:48.355733",
"invocation": {
"module_args": "ethtool -i enp5s0f2: | grep bus-info | cut -b 16-22",
"module_name": "shell"
},
"item": "enp5s0f2:",
"rc": 0,
"start": "2015-04-14 20:29:48.349870",
"stderr": "",
"stdout": "05:00.2",
"warnings": []
},
{
"changed": true,
"cmd": "ethtool -i enp5s0f3: | grep bus-info | cut -b 16-22",
"delta": "0:00:00.005829",
"end": "2015-04-14 20:29:48.591244",
"invocation": {
"module_args": "ethtool -i enp5s0f3: | grep bus-info | cut -b 16-22",
"module_name": "shell"
},
"item": "enp5s0f3:",
"rc": 0,
"start": "2015-04-14 20:29:48.585415",
"stderr": "",
"stdout": "05:00.3",
"warnings": []
},
{
"changed": true,
"cmd": "ethtool -i enp9s0f0: | grep bus-info | cut -b 16-22",
"delta": "0:00:00.005943",
"end": "2015-04-14 20:29:48.910992",
"invocation": {
"module_args": "ethtool -i enp9s0f0: | grep bus-info | cut -b 16-22",
"module_name": "shell"
},
"item": "enp9s0f0:",
"rc": 0,
"start": "2015-04-14 20:29:48.905049",
"stderr": "",
"stdout": "09:00.0",
"warnings": []
},
{
"changed": true,
"cmd": "ethtool -i enp9s0f1: | grep bus-info | cut -b 16-22",
"delta": "0:00:00.005863",
"end": "2015-04-14 20:29:49.143706",
"invocation": {
"module_args": "ethtool -i enp9s0f1: | grep bus-info | cut -b 16-22",
"module_name": "shell"
},
"item": "enp9s0f1:",
"rc": 0,
"start": "2015-04-14 20:29:49.137843",
"stderr": "",
"stdout": "09:00.1",
"warnings": []
},
{
"changed": true,
"cmd": "ethtool -i lo: | grep bus-info | cut -b 16-22",
"delta": "0:00:00.005856",
"end": "2015-04-14 20:29:49.386044",
"invocation": {
"module_args": "ethtool -i lo: | grep bus-info | cut -b 16-22",
"module_name": "shell"
},
"item": "lo:",
"rc": 0,
"start": "2015-04-14 20:29:49.380188",
"stderr": "Cannot get driver information: Operation not supported",
"stdout": "",
"warnings": []
},
{
"changed": true,
"cmd": "ethtool -i virbr0: | grep bus-info | cut -b 16-22",
"delta": "0:00:00.005859",
"end": "2015-04-14 20:29:49.632356",
"invocation": {
"module_args": "ethtool -i virbr0: | grep bus-info | cut -b 16-22",
"module_name": "shell"
},
"item": "virbr0:",
"rc": 0,
"start": "2015-04-14 20:29:49.626497",
"stderr": "",
"stdout": "",
"warnings": []
},
{
"changed": true,
"cmd": "ethtool -i virbr0-nic: | grep bus-info | cut -b 16-22",
"delta": "0:00:00.024850",
"end": "2015-04-14 20:29:49.901539",
"invocation": {
"module_args": "ethtool -i virbr0-nic: | grep bus-info | cut -b 16-22",
"module_name": "shell"
},
"item": "virbr0-nic:",
"rc": 0,
"start": "2015-04-14 20:29:49.876689",
"stderr": "",
"stdout": "",
"warnings": []
}
]
我的目标是获取上述每个项目中stdout的值,例如(“ stdout”:“ 09:00.0”)。 我试图给像
- name: Binding the interfaces
shell: echo {{ item.item.stdout}}
with_flattened: var2.results
# with_indexed_items: var2.results
register: var3
但这不能正确提供标准输出中的总线值。 当第二个变量是and indexed list时,如下面给出的那样,在列出任务中变量值的变量方面提供了帮助。 我试图避免像item [0]这样的直接索引编号,因为接口的数量是动态的,并且直接索引可能会导致意外的结果。
谢谢
这是您要找的东西吗?
- hosts: localhost
tags: s21
gather_facts: no
vars:
images:
- foo
- bar
tasks:
- shell: "echo result-{{item}}"
register: "r"
with_items: "{{images}}"
- debug: var=r
- debug: msg="item.item={{item.item}}, item.stdout={{item.stdout}}, item.changed={{item.changed}}"
with_items: "{{r.results}}"
- debug: msg="Gets printed only if this item changed - {{item}}"
when: "{{item.changed == true}}"
with_items: "{{r.results}}"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.