Estou usando o módulo ec2 com ansible-playbook
Desejo definir uma variável para o conteúdo de um arquivo. É assim que estou fazendo isso atualmente.
- Var com o nome do arquivo
- tarefa de shell para
cat
o arquivo - use o resultado de
cat
para passar para o módulo ec2.
Conteúdo de exemplo do meu manual.
vars:
amazon_linux_ami: "ami-fb8e9292"
user_data_file: "base-ami-userdata.sh"
tasks:
- name: user_data_contents
shell: cat {{ user_data_file }}
register: user_data_action
- name: launch ec2-instance
local_action:
...
user_data: "{{ user_data_action.stdout }}"
Presumo que haja uma maneira muito mais fácil de fazer isso, mas não consegui encontrar enquanto pesquisava nos documentos do Ansible.
ansible
ansible-playbook
TesterJeff
fonte
fonte
Respostas:
Você pode usar pesquisas no Ansible para obter o conteúdo de um arquivo, por exemplo
Advertência: esta pesquisa funcionará com arquivos locais, não com arquivos remotos.
Aqui está um exemplo completo dos documentos :
fonte
cat
comando no exemplo de @TesterJeff está sendo executado na máquina remota.Você pode usar o módulo slurp: (Obrigado a @mlissner por sugerir isso)
fonte
Você pode usar o módulo fetch para copiar arquivos de hosts remotos para o local e o módulo lookup para ler o conteúdo dos arquivos buscados.
fonte
lookup só funciona em localhost. Se você deseja recuperar variáveis de um variáveis arquivo que você fez remotamente usar include_vars:
{{ varfile }}
. O conteúdo de{{ varfile }}
deve ser um dicionário da forma{"key":"value"}
, você descobrirá que o ansible causa problemas se incluir um espaço após os dois pontos.fonte
include_vars
funciona localmente na máquina de controle, não com arquivos no destino.