biến thông báo gỡ lỗi in ansible


17

Tôi cố gắng in mosh_versionbiến đã đăng ký trước đó bằng debug msglệnh ansible như thế này:

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

Nó không hoạt động và in lỗi sau:

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

Tôi đã thử

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

nhưng điều này sẽ chỉ in "Mosh".

Cách tốt nhất để chạy này là gì?

Câu trả lời:


25

Thử đi:

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

Thêm thông tin trong http://docs.ansible.com/YAMLSyntax.html#gotchas

Đã chỉnh sửa: Một cái gì đó như thế này hoạt động hoàn hảo đối với tôi:

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

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

http://pastie.org/private/cgeqjucn3l5kxhkkyhtpta


Không còn lỗi cú pháp nữa, nhưng nó cũng không hoạt động:TASK: [ Print mosh version] ************************************** ok: [127.0.0.1] => { "msg": "Mosh" }
Zulakis

Trước tiên hãy thử biến in và xem đầu ra mà không có thông báo tùy chỉnh, như sau: - name: In phiên bản mosh gỡ lỗi: 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]" ] } } điều này hoạt động, tôi thực sự thích thông điệp tùy chỉnh hơn ;-)
Zulakis

1
Kiểm tra câu trả lời được cập nhật của tôi
Tom Aac

Xin lưu ý: gỡ lỗi: "dir = Phiên bản Mosh: '{{mosh_version.stdout}}'" sẽ chỉ hiển thị "Mosh". Thông điệp = "..." phải nằm trong dấu ngoặc kép, thay vì toàn bộ tin nhắn. Nhưng câu trả lời từ @xddsg hoạt động tốt hơn, vì nó là var dump chi tiết hơn.
Dalibor Filus

6

Câu trả lời đơn giản nhất

- debug: var=mosh_version.stdout

1

Chỉ cần loại bỏ ruột kết

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

Thành thật mà nói, đây không phải là một giải pháp đầy đủ nhưng nó vẫn hoạt động và giải quyết vấn đề tiếp theo tôi có. Không thể sử dụng cú pháp khác bởi vì tôi sử dụng nó với whenviệc loại bỏ dấu hai chấm thực sự là cách đơn giản nhất để giải quyết vấn đề này. vì vậy tôi upvote;)
TecHunter

0

Tôi sử dụng cái này, chú ý vị trí của dấu ngoặc kép (") và dấu ngoặc đơn (')

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

0

Bất cứ khi nào tôi gặp vấn đề với các ký tự đặc biệt trong chuỗi Ansible / cmds, tôi sẽ làm điều này:

  1. Gói với dấu ngoặc đơn
  2. Bọc với dấu ngoặc kép

Vì vậy, tiêu chuẩn của bạn trở thành {{':'}}

Và nhiệm vụ của bạn trở thành:

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

Một lần nữa điều này hoạt động cho hầu hết các ký tự đặc biệt, thậm chí cả chuỗi. Hãy xem xét những điều sau đây:

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

Để chạy cái này trong Ansible, chỉ cần áp dụng logic tương tự, tác vụ sau sẽ thực thi như mong đợi:

- name: Get the docker container names
  become: yes
  shell: "docker ps --format '{{'{{'}}.Names{{'}}'}}'"
  register: docker_containers
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.