在 Ansible Playbook 中循环注册变量 [英] Register Variables in Loop in an Ansible Playbook

查看:30
本文介绍了在 Ansible Playbook 中循环注册变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个 ansible 任务如下

I have two ansible tasks as follows

  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)中的接口列表并获取每个接口的总线地址.我在同一个剧本中还有一项如下任务

which is used to get a list of interfaces in a machine (linux) and get the bus address for each. I have one more task as follows in tha same playbook

 - name: Binding the interfaces
   shell: echo {{ item.item }}
   with_flattened: var2.results
   register: var3

我希望从 var2 迭代值,然后打印总线编号.

which I expect to iterate over value from var2 and then print the bus numbers.

var2.results 如下

var2.results is as follows

"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") .我试着给像

My objective is to get the value of stdout in each item above for example ("stdout": "09:00.0") . I tried giving something like

     - name: Binding the interfaces
       shell: echo {{ item.item.stdout}}
       with_flattened: var2.results
#       with_indexed_items: var2.results
       register: var3

但这并没有正确给出标准输出中的总线值.当第二个变量是索引列表时,感谢在任务中列出变量值的变量的帮助,如下所示.我试图避免直接索引编号,例如 item[0],因为接口的数量是动态的,直接索引可能会导致意外结果.

But this is not giving the bus values in stdout correctly. Appreciate help in listing the variable of variable value in task as given below when the second variable is and indexed list. I am trying to avoid direct index numbering such as item[0] because the number of interfaces are dynamic and direct indexing may result in unexpected outcomes.

谢谢

推荐答案

这是您要找的:

- 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}}"

来源:在 Ansible playbook 的 with_items 循环中注册变量

这篇关于在 Ansible Playbook 中循环注册变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆