Похоже, у вас четыре проблемы:
Создание словаря кажется странным, словарь в python заключен в фигурные скобки { ... }
Итак, вы строчите словарь
"{{item.0}}:{{item.1}}"
Должно быть
"{{ {item.0: item.1} }}"
Добавление в файл в Ansible выполняется через модуль lineinfile
, а не через copy
one.
Ваш l oop на самом деле не имеет смысла, поскольку Ansible уже выполняет каждую задачу на всех хостах, поэтому у вас есть только одна информация также происходит из-за этого: вы продолжаете отменять факт output
, чтобы сделать это в своей пробной версии.
По той же причине, что и выше, вместо вашего with_together
l oop, вы должны использовать специальную переменную inventory_hostname
, так как это
Имя инвентаря для «текущего» хоста, который повторяется в игре
Источник: https://docs.ansible.com/ansible/latest/reference_appendices/special_variables.html#special -переменные
Итак, после вашей команды shell
, здесь должен б e следующая задача:
- lineinfile:
path: results.txt
line: "{{ {inventory_hostname: myshell_output.stdout} | string }}"
create: yes
delegate_to: localhost
Помните, что фильтр string
был добавлен для преобразования словаря в строку для записи ее в файл без Ansible выдачи предупреждения.
Примером playbook будет:
- hosts: all
gather_facts: no
tasks:
- name: Creating a fake shell result
shell:
cmd: echo 'Linux Vlersion XYZ {{ inventory_hostname }}'
register: shell_output
- lineinfile:
path: results.txt
line: "{{ {inventory_hostname: shell_output.stdout} | string }}"
create: yes
delegate_to: localhost
Что дает резюме:
PLAY [all] ******************************************************************************************************************************************
TASK [Creating a fake shell result] *****************************************************************************************************************
changed: [host2]
changed: [host1]
TASK [lineinfile] ***********************************************************************************************************************************
changed: [host1 -> localhost]
changed: [host2 -> localhost]
PLAY RECAP ******************************************************************************************************************************************
host1 : ok=2 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
host2 : ok=2 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
И заполните results.txt файл с:
{'host1': 'Linux Vlersion XYZ host1'}
{'host2': 'Linux Vlersion XYZ host2'}