cetak variabel pesan debug yang dimungkinkan

17

Saya mencoba mencetak yang sebelumnya terdaftar mosh_version variabel yang menggunakan debug msgperintah yang mungkin seperti ini:

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

Tidak berfungsi dan mencetak kesalahan berikut:

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

Saya mencoba

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

tetapi ini hanya akan mencetak "Mosh".

Apa cara terbaik untuk menjalankan ini?

Zulakis
sumber

Jawaban:

25

Coba ini:

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

Info lebih lanjut di http://docs.ansible.com/YAMLSyntax.html#gotchas

Diedit: Sesuatu seperti ini sangat cocok untuk saya:

- 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
sumber
Tidak ada lagi kesalahan sintaksis, tetapi tidak berhasil:TASK: [ Print mosh version] ************************************** ok: [127.0.0.1] => { "msg": "Mosh" }
Zulakis
Coba dulu hanya cetak variabel dan lihat hasilnya tanpa pesan khusus, seperti ini: - nama: Cetak debug versi mosh: 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]" ] } } ini berfungsi, saya benar-benar lebih suka pesan khusus ;-)
Zulakis
1
Periksa jawaban saya yang diperbarui
Tom Aac
Harap diperhatikan: debug: "msg = Versi Mosh: '{{mosh_version.stdout}}'" hanya akan menampilkan "Mosh". Msg = "..." harus dalam tanda kutip, bukan seluruh pesan. Tetapi jawaban dari @xddsg berfungsi lebih baik, karena var dump lebih detail.
Dalibor Filus
6

Jawaban paling sederhana

- debug: var=mosh_version.stdout
xddsg
sumber
1

Hapus saja titik dua

debug: msg="Mosh Version {{ mosh_version.stdout }}"
remintz
sumber
Jujur, ini bukan solusi lengkap tapi tetap berhasil dan memecahkan masalah berikutnya yang saya miliki. Tidak dapat menggunakan sintaks lain karena saya menggunakannya dengan whenmenghapus usus besar sebenarnya adalah cara paling sederhana untuk menyelesaikan ini. jadi saya
menang
0

Saya menggunakan ini, perhatikan lokasi tanda kutip ganda (") dan tanda kutip tunggal (')

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

Kapan pun saya memiliki masalah dengan karakter khusus di string / cmds yang dimungkinkan, saya melakukan ini:

  1. Bungkus dengan tanda kutip tunggal
  2. Bungkus dengan kurung keriting ganda

Jadi usus besar standar Anda menjadi {{':'}}

Dan tugas Anda menjadi:

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

Sekali lagi ini berfungsi untuk sebagian besar karakter khusus, bahkan string. Pertimbangkan yang berikut ini:

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

Untuk menjalankan ini di Ansible, cukup terapkan logika yang sama, tugas berikut dijalankan seperti yang diharapkan:

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