it-swarm.com.ru

Ansible - сохранить зарегистрированную переменную в файл

Как мне сохранить зарегистрированную переменную в файл? Я взял это из учебника :

- hosts: web_servers

  tasks:

     - Shell: /usr/bin/foo
       register: foo_result
       ignore_errors: True

     - Shell: /usr/bin/bar
       when: foo_result.rc == 5

Как мне сохранить переменную foo_result в файл, например foo_result.log используя ansible?

28
Maximilian Kindshofer

Вы можете использовать модуль copy с параметром content=.

Я дал точно такой же ответ здесь: Записать переменную в файл в Ansible

В вашем случае, похоже, что вы хотите, чтобы эта переменная была записана в локальный лог-файл, поэтому вы можете объединить ее с нотацией local_action:

- local_action: copy content={{ foo_result }} dest=/path/to/destination/file
57
Ramon de la Fuente

Я использую Ansible 1.9.4, и это то, что у меня сработало - 

- local_action: copy content="{{ foo_result.stdout }}" dest="/path/to/destination/file"
10
Umesh Tyagi

Локальное действие будет выполняться один раз для каждого удаленного хоста (параллельно). Если вам нужен уникальный файл для каждого хоста, убедитесь, что имя инвентарного_хоста является частью имени файла. 

- local_action: copy content={{ foo_result }} dest=/path/to/destination/{{ inventory_hostname }}file

Если вместо этого вам нужен один файл со всей информацией о хосте, один из способов - выполнить последовательное задание (не добавлять параллельное), а затем добавить к файлу с помощью модуля (lineinfile способен или может передать с помощью Shell команда)

- hosts: web_servers
  serial: 1
  tasks:
  - local_action: lineinfile line={{ foo_result }} path=/path/to/destination/file

Кроме того, вы можете добавить в пьесу вторую пьесу/роль/задачу, которая работает только с локальным хостом. Затем получите доступ к переменной с каждого из хостов, где команда регистрации выполнялась внутри шаблона Доступ к документам по переменным других хостовДокументы по шаблону модуля

5
Chad Autry
---
- hosts: all
  tasks:
  - name: Gather Version
    debug:
     msg: "The server Operating system is {{ ansible_distribution }} {{ ansible_distribution_major_version }}"
  - name: Write  Version
    local_action: Shell echo "This is  {{ ansible_distribution }} {{ ansible_distribution_major_version }}" >> /tmp/output
1
Mohd Aftab