variável de mensagem de depuração de impressão ansible

17

Eu tento imprimir a mosh_versionvariável registrada anteriormente usando o debug msgcomando ansible como este:

- name: Print mosh version
  debug: msg="Mosh Version: {{ mosh_version.stdout }}"

Não funciona e imprime o seguinte erro:

Note: The error may actually appear before this position: line 55, column 27

- name: Print mosh version
  debug: msg="Mosh Version: {{ mosh_version.stdout }}"
                          ^
We could be wrong, but this one looks like it might be an issue with
missing quotes.  Always quote template expression brackets when they
start a value. For instance:

    with_items:
      - {{ foo }}

Should be written as:

    with_items:
      - "{{ foo }}"

eu tentei

- name: Print mosh version
  debug: msg=Mosh Version: "{{ mosh_version.stdout }}"

mas isso apenas imprimirá "Mosh".

Qual é a melhor maneira de fazer isso funcionar?

Zulakis
fonte

Respostas:

25

Tente o seguinte:

- name: Print mosh version
  debug: "msg=Mosh Version: '{{ mosh_version.stdout }}'"

Mais informações em http://docs.ansible.com/YAMLSyntax.html#gotchas

Editado: Algo assim funciona perfeito para mim:

- name: Check Ansible version
  command: ansible --version
  register: ansibleVersion

- name: Print version
  debug:
    msg: "Ansible Version: {{ ansibleVersion.stdout }}"

http://pastie.org/private/cgeqjucn3l5kxhkkyhtpta

Tom Aac
fonte
Não há mais erros de sintaxe, mas também não funciona:TASK: [ Print mosh version] ************************************** ok: [127.0.0.1] => { "msg": "Mosh" }
Zulakis 1/15
Tente primeiro apenas imprimir variável e ver uma saída sem mensagem personalizada, assim: - Nome: Imprimir mosh versão de depuração: var = mosh_version.stdout_lines
Tom Aac
ok: [127.0.0.1] => { "var": { "mosh_version.stdout_lines": [ "mosh 1.2.4a [build mosh-1.2.4-57-g9eeb2fb]" ] } } isso funciona, eu realmente prefiro a mensagem personalizada embora ;-)
Zulakis
11
Verifique minha resposta atualizada
Tom Aac
Observe: debug: "msg = Versão do Mosh: '{{mosh_version.stdout}}'" "exibirá apenas" Mosh ". O msg = "..." deve estar entre aspas, em vez da mensagem inteira. Mas a resposta do @xddsg funciona melhor, pois é um var dump mais detalhado.
Dalibor Filus 26/11/2015
6

Resposta mais simples

- debug: var=mosh_version.stdout
xddsg
fonte
1

Basta remover o cólon

debug: msg="Mosh Version {{ mosh_version.stdout }}"
remintz
fonte
Honestamente, essa não é uma solução completa, mas ainda assim funcionou e resolveu o próximo problema que eu tinha. Não é possível usar a outra sintaxe, porque eu a uso whenpara remover os dois pontos, na verdade, é a maneira mais simples de resolver isso. então eu votei;)
TecHunter 27/10
0

Eu uso isso, observe a localização de aspas duplas (") e aspas simples (')

- name: Print mosh version
  debug: "msg='Mosh Version: {{ mosh_version.stdout }}'"
soma de verificação
fonte
0

Sempre que tenho problemas com caracteres especiais em cadeias de caracteres Ansible / cmds, faço isso:

  1. Enrole com aspas simples
  2. Enrole com colchetes duplos

Então seu cólon padrão se torna {{':'}}

E sua tarefa se torna:

- debug: msg="Ansible Version{{':'}} {{ ansibleVersion.stdout }}"

Novamente, isso funciona para a maioria dos caracteres especiais, inclusive para as seqüências de caracteres. Considere o seguinte:

docker ps --format '{{.Names}}'

Para executar isso no Ansible, basta aplicar a mesma lógica, a seguinte tarefa é executada conforme o esperado:

- name: Get the docker container names
  become: yes
  shell: "docker ps --format '{{'{{'}}.Names{{'}}'}}'"
  register: docker_containers
Collin Cudd
fonte