Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Register Variables in Loop in an Ansible Playbook

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 

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 

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

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": []         }     ] 

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 

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.

Thanks

like image 426
user3364247 Avatar asked Apr 14 '15 19:04

user3364247


People also ask

How do I register variables in Ansible?

Ansible registers are used when you want to capture the output of a task to a variable. You can then use the value of these registers for different scenarios like a conditional statement, logging etc. The variables will contain the value returned by the task. The common return values are documented in Ansible docs.

How do I register multiple variables in Ansible?

No, this is not possible. Ansible (as of current version 2.4) does not allow to register partial output of the module (or several different parts of it). You can register only full result and extract parts of it in the tasks to follow.

How do you pass variables in Ansible playbook?

To pass a value to nodes, use the --extra-vars or -e option while running the Ansible playbook, as seen below. This ensures you avoid accidental running of the playbook against hardcoded hosts.

What is loop VAR in Ansible?

Ansible loop is used to repeat any task or a part of code multiple times in an Ansible-playbook. It includes the creation of multiple users using the user module, installing multiple packages using apt or yum module or changing permissions on several files or folders using the file module.


1 Answers

Is this what you're looking for:

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

Source: Register variables in with_items loop in Ansible playbook

like image 102
Kashyap Avatar answered Oct 13 '22 21:10

Kashyap