ตัวแปร msg debug พิมพ์ได้


17

ฉันพยายามพิมพ์mosh_versionตัวแปรที่ลงทะเบียนก่อนหน้านี้โดยใช้debug msgคำสั่งansible เช่นนี้:

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

มันไม่ทำงานและพิมพ์ข้อผิดพลาดต่อไปนี้:

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

ฉันเหนื่อย

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

แต่นี่จะพิมพ์ "Mosh"

เป็นวิธีที่ดีที่สุดในการทำงานนี้คืออะไร

คำตอบ:


25

ลองสิ่งนี้:

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

ข้อมูลเพิ่มเติมในhttp://docs.ansible.com/YAMLSyntax.html#gotchas

แก้ไข: บางอย่างเช่นนี้เหมาะสำหรับฉัน:

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

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

http://pastie.org/private/cgeqjucn3l5kxhkkyhtpta


ไม่มีข้อผิดพลาดทางไวยากรณ์อีกต่อไป แต่ก็ใช้ไม่ได้เช่นกันTASK: [ Print mosh version] ************************************** ok: [127.0.0.1] => { "msg": "Mosh" }
Zulakis

ลองพิมพ์ตัวแปรก่อนแล้วดูผลลัพธ์โดยไม่มีข้อความที่กำหนดเองดังนี้: - ชื่อ: พิมพ์ mosh เวอร์ชั่น debug: 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]" ] } } ผลงานนี้ฉันชอบข้อความที่กำหนดเองจริงๆ ;-)
Zulakis

1
ตรวจสอบคำตอบที่อัปเดตของฉัน
Tom Aac

โปรดทราบ: debug: "msg = รุ่น Mosh: '{{mosh_version.stdout}}'" จะแสดงเฉพาะ "Mosh" msg = "... " จะต้องอยู่ในเครื่องหมายคำพูดแทนที่จะเป็นข้อความทั้งหมด แต่คำตอบจาก @xddsg ทำงานได้ดีขึ้นเพราะเป็น var dump ที่มีรายละเอียดมากกว่า
Dalibor Filus


1

เพียงลบลำไส้ใหญ่

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

สุจริตนี่ไม่ใช่วิธีการแก้ปัญหาที่สมบูรณ์ แต่ก็ยังใช้งานได้และแก้ไขปัญหาต่อไปที่ฉันมี ไม่สามารถใช้ไวยากรณ์อื่นได้เนื่องจากฉันใช้ด้วยwhenดังนั้นการลบเครื่องหมายโคลอนจริงๆแล้วเป็นวิธีที่ง่ายที่สุดในการแก้ปัญหานี้ ดังนั้นฉันจึง
โหวต

0

ฉันใช้สิ่งนี้สังเกตตำแหน่งของเครื่องหมายคำพูดคู่ (") และเครื่องหมายคำพูดเดี่ยว (')

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

0

ทุกครั้งที่ฉันมีปัญหากับตัวละครพิเศษใน Ansible strings / cmds ฉันทำสิ่งนี้:

  1. ห่อด้วยเครื่องหมายคำพูดเดี่ยว
  2. ห่อด้วยเครื่องหมายปีกกาคู่

ดังนั้นลำไส้ใหญ่มาตรฐานของคุณจะกลายเป็น {{':'}}

และงานของคุณจะกลายเป็น:

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

มันใช้งานได้กับตัวละครพิเศษส่วนใหญ่แม้กระทั่งสายอักขระ พิจารณาสิ่งต่อไปนี้:

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

ในการรันสิ่งนี้ใน Ansible เพียงใช้ตรรกะเดียวกันงานต่อไปนี้จะดำเนินการตามที่คาดไว้:

- name: Get the docker container names
  become: yes
  shell: "docker ps --format '{{'{{'}}.Names{{'}}'}}'"
  register: docker_containers
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.