2015-04-14 4 views
11

У меня есть две анзибль задачи следующим образомРегистрация Переменные в петле в качестве анзибль Playbook

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) и получить адрес шины для каждого. У меня есть еще одна задача, как следует в тха же сборника пьес

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

, который я ожидал перебирать значения от 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": [] 
     } 
    ] 

Моя цель состоит в том, чтобы получить значение в стандартный вывод каждого пункта выше, например («стандартный вывод»: «09: 00,0»). Я попытался дать что-то вроде

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

Но это не дает правильные значения для шины в stdout. Оцените помощь при перечислении переменной значения переменной в задаче, как указано ниже, когда вторая переменная является и индексированным списком. Я пытаюсь избежать прямой нумерации индекса, такой как item [0], потому что количество интерфейсов динамическое и прямая индексация может привести к неожиданным результатам.

Благодаря

ответ

20

Это то, что вы ищете:

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

Источник: Register variables in with_items loop in Ansible playbook

+0

Это не решает мою проблему – user3364247

+0

@ user3364247 вы пытались использовать 'with_items' вместо уплощенная перебрать "var2.results'? Можете ли вы опубликовать новый код? – Kashyap

+0

На самом деле ваше решение верное, но чтобы получить то, что я хотел, изменил код, как показано ниже. – user3364247

Смежные вопросы