Capture a saída do modelo em tempo real

8

Preciso executar um comando no servidor de destino que aceite dados apenas pelo stdin. Os dados que estou alimentando vêm de um arquivo de modelo e contêm dados confidenciais, portanto, prefiro não tê-los no sistema de arquivos nem por um segundo.

Estou tentando encontrar uma maneira de capturar a saída de uma tarefa de modelo para que eu possa passar para o comando. Algo como:

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

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

Existe uma maneira melhor de fazer isso que não envolve gravar um arquivo temporário, alimentá-lo com o comando e depois apagá-lo?

Giovanni Tirloni
fonte
Fiz isso uma vez como você descreveu, com arquivo temporário. Solicitação de recurso criado para rapazes ansible: github.com/ansible/ansible/issues/22134
Selivanov Pavel

Respostas:

6

Obtenha respostas de caras ansíveis:

some_var: "{{ lookup('template', 'tmpl.j2') }}"
Selivanov Pavel
fonte
1
Ótimo! Se você estiver usando "with_items" com sua tarefa, poderá usar a variável "item" no modelo.
Ikrom 14/12
2

A maneira correta de lidar com comandos que precisam de entrada stdiné o módulo expect .

A maneira correta de lidar com dados confidenciais com o Ansible é o cofre ansible . De uma forma ou de outra, os dados permanecerão sem criptografia no sistema de arquivos, pois o Ansible cria scripts Python para executar os comandos definidos nas tarefas.

Henrik Pingel
fonte