Запишіть змінну у файл у Ansible


101

Я перетягую JSON через модуль URI і хочу записати отриманий вміст у файл. Я в змозі отримати вміст і вивести його на відладчик, тому я знаю, що вміст отримано, але я не знаю кращої практики для написання файлів.

Відповіді:


200

Ви можете використовувати copyмодуль з contentпараметром:

- copy: content="{{ your_json_feed }}" dest=/path/to/destination/file

Документи тут: модуль копіювання


5
content = "{{your_json_feed}}" стосується пробілів та нових рядків. Цитати важливі.
m.kocikowski

@RamondelaFuente Якщо я хотів би додати у файл кілька контентів, потрібно мені кілька разів використовувати модуль "копіювати" чи є інший спосіб?
KishoreReddy

1
@KishoreReddy Я думаю, ви можете використовувати синтаксис jinja2 для додавання змінних. Щось на зразок "{{змінний ~ інший_перемінний}}". Не дуже, але якщо все ускладнюється, ви можете використовувати template:модуль і заповнити його змінними, зареєстрованими під час виконання.
Рамон де ла Фуенте

Це краще спрацьовує, коли ви хочете генерувати файл суми sha256 у формі shahash /path/to/file(помітити 2 пробіли між ними), а потім перевірити з командного рядка (через sha256sum -c shafile) те, що ви створили за допомогою Ansible.
Даніель Андрій Мінка

11

Якщо ви не пишете дуже маленькі файли, вам, ймовірно, слід користуватися шаблонами .

Приклад:

- name: copy upstart script
  template: 
    src: myCompany-service.conf.j2 
    dest: "/etc/init/myCompany-service.conf"

2
Хоча відповідь Рамона стосується саме того, що йому було запропоновано, ця відповідь є найкращим підходом загалом. Наприклад, якщо у вас є книга з програмою, яка створює VM у хмарі, і ви хочете створити інвентар хостів для іншої книги, шаблон - це шлях.
Луїс Артола

Чи можете ви пояснити, чому це краще?
Vorticity

@Vorticity краще, ніж що?
Янус Трольсен

@JanusTroelsen Вибачте, чи можете ви пояснити, чому це краще, ніж прийнята відповідь при написанні великих файлів?
Vorticity

1
@ Vorticity, оскільки це стає непростим, коли у вас вбудований інший файл. вам потрібно втекти, і підсвічування синтаксису не працюватиме. механізм шаблонування дозволяє вставляти речі в середину, якщо вам це потрібно.
Янус Трольсен

9

На основі відповіді Рамона я зіткнувся з помилкою. Проблема, де пробіли в JSON я спробував записати, я її виправив, змінивши завдання в програмі, щоб виглядати так:

- copy:
    content: "{{ your_json_feed }}"
    dest: "/path/to/destination/file"

На сьогоднішній день я не впевнений, навіщо це було потрібно. Я найкраще здогадуюсь, що це було пов'язане із тим, як замінені змінні в Ansible і що отриманий файл аналізується.


0

destЗараз ми можемо безпосередньо вказати файл призначення за допомогою параметра. У наведеному нижче прикладі вихід json зберігається у/tmp/repo_version_file

- name: Get repository file repo_version model to set ambari_managed_repositories=false
  uri:
    url: 'http://<server IP>:8080/api/v1/stacks/HDP/versions/3.1/repository_versions/1?fields=operating_systems/*'
    method: GET
    force_basic_auth: yes
    user: xxxxx
    password: xxxxx
    headers:
      "X-Requested-By": "ambari"
      "Content-type": "Application/json"
    status_code: 200
    dest: /tmp/repo_version_file
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.