2016-06-20 3 views
3

Ищет помощь с проблемой, с которой я боролся в течение нескольких часов. Я хочу перебирать список, запускать команду, регистрировать вывод для каждой команды, а затем повторять отладку по каждому уникальному регистру {{someregister}}. StdoutИтерация с использованием with_items и регистрация

Например, следующий код будет выплеснуть msg «:„1“ и „сообщение“:„2“

--- 

- hosts: localhost 
    gather_facts: false 

    vars: 
    numbers: 
     - name: "first" 
     int: "1" 
     - name: "second" 
     int: "2" 

    tasks: 

    - name: Register output 
     command: "/bin/echo {{ item.int }}" 
     register: result 
     with_items: "{{ numbers }}" 

    - debug: msg={{ item.stdout }} 
     with_items: "{{ result.results }}" 

однако, если я пытаюсь захватить вывод команды в переменном регистре, который называется использованием with_list, у меня возникли проблемы с доступом к список или элементы внутри него. Например, слегка изменяя код:

--- 

- hosts: localhost 
    gather_facts: false 

    vars: 
    numbers: 
     - name: "first" 
     int: "1" 
     - name: "second" 
     int: "2" 

    tasks: 

    - name: Register output 
     command: "/bin/echo {{ item.int }}" 
     register: "{{ item.name }}" 
     with_items: "{{ numbers }}" 

    - debug: var={{ item.name.stdout }} 
     with_items: "{{ numbers }}" 

дает мне:

TASK [debug] 

> ******************************************************************* fatal: [localhost]: FAILED! => {"failed": true, "msg": "'unicode 
> object' has no attribute 'stdout'"} 

Разве нельзя динамически назвать зарегистрировать вывод команды, который затем может быть назван позже в игре ? Я бы хотел, чтобы каждая итерация команды и ее последующее имя было получено уникальным образом, например, учитывая последний пример, я ожидал бы, что там будут зарегистрированные переменные «первый» и «второй», но их нет.

Отбирать с_имя из отладочной строфы и просто явно указывать var или message, используя first.stdout возвращает «undefined».

Несущая версия 2.0.2.0 на Centos 7_2.

Заранее спасибо.

ответ

1

Я не уверен, если я понимаю вопрос правильно, но, возможно, это может помочь:

- debug: msg="{{ item.stdout }}" 
     with_items: echo_out.results 

Пожалуйста, обратите внимание, что анзибль будет печатать каждый пункт и Сообщ оба - так что вы должны смотреть тщательно для линии, которая выглядит как "msg": "2".

+0

Спасибо Amit, который помог и я переписал вопрос в надежде, что это понятно. – Rowley

7

ОК, поэтому я нашел post on stackoverflow, что помогло мне лучше понять, что здесь происходит и как получить доступ к элементам в результатах. Результаты.

Полученный код, который я закончил с был:

--- 

- hosts: localhost 
    gather_facts: false 

    vars: 
    numbers: 
     - name: "first" 
     int: "1" 
     - name: "second" 
     int: "2" 

    tasks: 

    - name: Register output 
     command: "/bin/echo {{ item.int }}" 
     register: echo_out 
     with_items: "{{ numbers }}" 

    - debug: msg="item.item={{item.item.name}}, item.stdout={{item.stdout}}" 
     with_items: "{{ echo_out.results }}" 

Который дал мне желаемый результат:

"msg": "item.item=first, item.stdout=1" 
"msg": "item.item=second, item.stdout=2" 
+1

Это приводит меня к следующему вопросу. Как сравнить stdout с каждой итерацией команды, чтобы вы могли проверить и исправить с помощью другой команды, если возвращаемое значение не соответствует ожидаемому ... – Rowley

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