2014-11-04 4 views
18

Как сохранить зарегистрированную переменную в файл? Я взял это из tutorial: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 используя доступный?

+0

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

+0

Вы можете использовать переменные в вашем пути dest, например: '-local_action: copy content = {{var}} dest =/path/to/{{var}}. Log', но я не нашел лучшего решение еще/или мне не нужен другой. –

+2

Возможный дубликат [Запись переменной в файл в Ansible] (http://stackoverflow.com/questions/26638180/write-variable-to-a-file-in-ansible) – techraf

ответ

39

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

Я дал тот же ответ здесь: Write variable to a file in Ansible

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

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

Именно то, что я искал. Почему-то я не наткнулся на предыдущий вопрос. Thanx для ответа снова –

+0

N.P. Я действительно был очень рад найти модуль копирования, поддерживающий это, поэтому вопросы «как мне сохранить в файл», как правило, бросаются в глаза :-) –

7

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

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

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

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

Если вы хотите, один файл с информацией о все хосте, вы должны добавить вторые игры/роль/задачи на PlayBook, который работает только против локального хоста. Затем перейдите к переменной с каждого из хостов, где команда регистрации запустилась внутри шаблона Access Other Hosts Variables DocsTemplate Module Docs

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