Sou novo no Ansible. Recentemente, preciso do ansible para fazer isso -
- execute um comando no cliente para obter o nome da função deste cliente
- copie um arquivo para este cliente pelo nome da função desse cliente - por exemplo. o nome do cliente pode ser -- "web1", "db1", "cache2" ... Isso pode ser obtido executando um aplicativo -- "/opt/userlib/getrolename" E o nome do arquivo seria "web1.conf", "db1.conf", "cache2.conf" ...
Então, estou tentando isso -
- name: conf_files
hosts: all
tasks:
- name: tracing
shell: |
date +%F_%T >> /tmp/ansible_record.log
- name: get host role
shell: |
/opt/userlib/getrolename|sed "s/rolename://"
register: host_output
- name: check output
debug:
msg: "{{host_output.stdout}}"
- name: copy file with number
copy:
src: {{ host_output.stdout }}.txt
dest: /tmp/reg_role.txt
A partir da saída de depuração, parece bom - que posso obter a função pelo stdout do registro. Mas falhou pelo nome da origem do arquivo dinâmico-- {{ host_output.stdout }}.txt
The offending line appears to be:
copy:
src: {{ host_output.stdout }}.txt
^ here
Você poderia me dizer se é possível usar o nome da fonte do arquivo dinâmico com a variável no ansible? E se sim, como usá-lo? Agradecemos antecipadamente por qualquer ajuda.
A solução para o seu problema é usar "aspas duplas", ou seja,
"{{ host_output.stdout }}.txt"
Veja também Sintaxe YAML (pegadinhas)