Захватить вывод шаблона на лету

8

Мне нужно выполнить команду на целевом сервере, которая принимает данные только через стандартный ввод. Данные, которые я передаю, поступают из файла шаблона и содержат конфиденциальные данные, поэтому я бы предпочел, чтобы они не оставались в файловой системе даже на секунду.

Я пытаюсь найти способ получить выходные данные шаблона задачи, чтобы я мог передать его команде. Что-то вроде:

- name: generate data
  template:
    src: data.j2
    dest: [I'd rather not have any files written]
  register: myvar

- name: run command
  shell: "command < {{ myvar }}"

Есть ли лучший способ сделать это, не включающий запись временного файла, подачу его в команду, а затем стирание?

Джованни Тирлони
источник
Сделал это один раз, как вы описали, с временным файлом. Создан запрос на добавление функции для ребят с ответом: github.com/ansible/ansible/issues/22134
Селиванов Павел

Ответы:

6

Получил ответ от откровенных ребят:

some_var: "{{ lookup('template', 'tmpl.j2') }}"
Селиванов Павел
источник
1
Большой! Если вы используете «with_items» в своей задаче, вы можете использовать переменную «item» в шаблоне.
Икром
2

Правильный способ обработки команд, которые требуют ввода, stdin- это ожидаемый модуль.

Правильный способ работы с конфиденциальными данными с Ansible - это хранилище данных . Так или иначе, данные будут храниться незашифрованными в файловой системе, поскольку Ansible создает скрипты Python для выполнения команд, определенных в задачах.

Хенрик Пингел
источник