zmienna msg debugowania wydruku

17

Próbuję wydrukować poprzednio zarejestrowaną mosh_versionzmienną za pomocą debug msgpolecenia ansible w następujący sposób:

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

Nie działa i drukuje następujący błąd:

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 }}"

próbowałem

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

ale to po prostu wypisze „Mosh”.

Jaki jest najlepszy sposób na uruchomienie tego?

Zulakis
źródło

Odpowiedzi:

25

Spróbuj tego:

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

Więcej informacji na stronie http://docs.ansible.com/YAMLSyntax.html#gotchas

Edytowane: Coś takiego działa dla mnie idealnie:

- 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
źródło
Nie ma już błędów składniowych, ale to też nie działa:TASK: [ Print mosh version] ************************************** ok: [127.0.0.1] => { "msg": "Mosh" }
Zulakis
Spróbuj najpierw wydrukować zmienną i zobaczyć dane wyjściowe bez niestandardowego komunikatu, na przykład: - nazwa: Drukuj debugowanie wersji mosh: var = wersja_mosh.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]" ] } } to działa, ale naprawdę wolę niestandardową wiadomość ;-)
Zulakis
1
Sprawdź moją zaktualizowaną odpowiedź
Tom Aac
Uwaga: debugowanie: „msg = Mosh Wersja:„ {{mosh_version.stdout}} ”” wyświetli tylko „Mosh”. Msg = "..." musi być w cudzysłowie zamiast całej wiadomości. Ale odpowiedź z @xddsg działa lepiej, ponieważ jest to bardziej szczegółowy var dump.
Dalibor Filus
6

Najprostsza odpowiedź

- debug: var=mosh_version.stdout
xddsg
źródło
1

Po prostu usuń dwukropek

debug: msg="Mosh Version {{ mosh_version.stdout }}"
remintz
źródło
Szczerze mówiąc, nie jest to pełne rozwiązanie, ale nadal działało i rozwiązało następny problem, który miałem. Nie mogę użyć innej składni, ponieważ używam jej do whenusuwania okrężnicy, tak naprawdę jest najprostszym sposobem rozwiązania tego problemu. więc głosuję;)
TecHunter
0

Używam tego, zauważam lokalizację podwójnych cudzysłowów („) i pojedynczych cudzysłowów (')

- name: Print mosh version
  debug: "msg='Mosh Version: {{ mosh_version.stdout }}'"
suma kontrolna
źródło
0

Za każdym razem, gdy mam problemy ze znakami specjalnymi w Ansible strings / cmds, robię to:

  1. Zawiń pojedyncze cytaty
  2. Zawiń za pomocą podwójnych nawiasów klamrowych

Tak więc staje się twój standardowy dwukropek {{':'}}

A Twoim zadaniem jest:

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

Ponownie działa to w przypadku większości znaków specjalnych, nawet ciągów znaków. Rozważ następujące:

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

Aby uruchomić to w Ansible, po prostu zastosuj tę samą logikę, następujące zadanie zostanie wykonane zgodnie z oczekiwaniami:

- name: Get the docker container names
  become: yes
  shell: "docker ps --format '{{'{{'}}.Names{{'}}'}}'"
  register: docker_containers
Collin Cudd
źródło