Linux 在Ansible剧本的循环中注册变量
我有两项任务,如下所示Linux 在Ansible剧本的循环中注册变量,linux,scripting,automation,ansible,Linux,Scripting,Automation,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 "
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
"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": []
}
]
它用于获取机器(linux)中的接口列表,并获取每个接口的总线地址。在同一个剧本中,我还有一个任务,如下所示
- name: Binding the interfaces
shell: echo {{ item.item }}
with_flattened: var2.results
register: var3
我希望迭代var2中的值,然后打印总线号
var2.结果如下
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
"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": []
}
]
我的目标是获取上面每个项目中的标准输出值,例如(“标准输出”:“09:00.0”)。我试着给一些类似的东西
- name: Binding the interfaces
shell: echo {{ item.item.stdout}}
with_flattened: var2.results
# with_indexed_items: var2.results
register: var3
但这并不能正确地给出标准输出中的总线值。当第二个变量是索引列表时,请按照下面给出的方式帮助列出任务中变量值的变量。我试图避免直接索引编号,例如项[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}}"
来源:@user3364247您尝试将
与\u项一起使用,而不是将其展平以循环var2。结果
?你能发布新的代码吗?实际上你的解决方案是正确的,但是为了得到我想要的,修改了代码,如下所示:你的解决方案是正确的。但是为了得到我想要的,我修改了代码如下-shell:echo{{{{item.stdout}},带有_items:var2.results when:item.stdout!=“”寄存器:var3-调试:var=var3@user3364247是的,我的答案是这样的。为了使ansible 2.2.1.0版能够正常工作,您必须将带有_项的:images
更改为带有_项的:“{{images}”
在您的第一个任务中