Ищу помощь с проблемой, с которой я боролся несколько часов. Я хочу выполнить итерацию по списку, запустить команду, зарегистрировать вывод для каждой команды, а затем выполнить итерацию с отладкой по каждому уникальному регистру {{someregister}}. Stdout
Например, следующий код выдаст «msg»: «1» и «msg»: «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'"}
Разве невозможно динамически назвать регистр выходом команды, который затем может быть вызван позже в игре? Я хотел бы, чтобы каждая итерация команды и ее последующее имя register были доступны уникальным образом, например, учитывая последний пример, я ожидаю, что будут зарегистрированы переменные с именем "first" и «второй», но их нет.
Удаление with_items из раздела отладки и простое явное определение переменной или сообщения с помощью first.stdout возвращает значение «undefined».
Версия Ansible - 2.0.2.0 на Centos 7_2.
Заранее спасибо.