use*_*247 21 linux scripting automation ansible
我有两个ansible任务如下
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
Run Code Online (Sandbox Code Playgroud)
用于获取机器(linux)中的接口列表,并获取每个接口的总线地址.我在同一本剧本中还有一项如下任务
- name: Binding the interfaces
shell: echo {{ item.item }}
with_flattened: var2.results
register: var3
Run Code Online (Sandbox Code Playgroud)
我期望从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": []
}
]
Run Code Online (Sandbox Code Playgroud)
我的目标是在上面的每个项目中获取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
Run Code Online (Sandbox Code Playgroud)
但这并没有正确地给出stdout中的总线值.如果第二个变量是索引列表,请在下面给出的任务中列出变量值变量的帮助.我试图避免直接索引编号,如item [0],因为接口的数量是动态的,直接索引可能会导致意外的结果.
谢谢
Kas*_*yap 36
这是你在寻找的东西:
- 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}}"
Run Code Online (Sandbox Code Playgroud)
来源:在Ansible playbook的with_items循环中注册变量
| 归档时间: |
|
| 查看次数: |
59338 次 |
| 最近记录: |