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}”
在您的第一个任务中