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?

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


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

1

Hapus saja titik dua

debug: msg="Mosh Version {{ mosh_version.stdout }}"

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.