
Мне нужно запустить команду на целевом сервере, которая принимает данные только через stdin. Данные, которые я ему передаю, берутся из файла шаблона и содержат конфиденциальные данные, поэтому я бы предпочел, чтобы они не оставались в файловой системе даже на секунду.
Я пытаюсь найти способ получить вывод шаблонной задачи, чтобы передать его команде. Что-то вроде:
- name: generate data
template:
src: data.j2
dest: [I'd rather not have any files written]
register: myvar
- name: run command
shell: "command < {{ myvar }}"
Есть ли лучший способ сделать это, не включающий создание временного файла, передачу его команде и последующее его удаление?
решение1
Получил ответ от ребят из ansible:
some_var: "{{ lookup('template', 'tmpl.j2') }}"
решение2
Правильный способ обработки команд, требующих ввода, stdin
— этоожидатьмодуль.
Правильный способ работы с конфиденциальными данными с помощью Ansible:хранилище ansible. Так или иначе, данные будут храниться в файловой системе в незашифрованном виде, поскольку Ansible создает скрипты Python для выполнения команд, определенных в задачах.
решение3
Объединив здесь несколько предыдущих ответов, получаем:
- name: run command
command: "command"
args:
stdin: "{{ lookup('template', 'tmpl.j2') }}"