змінну msg для відлагодження друкованої помилки


17

Я намагаюся надрукувати попередньо зареєстровану mosh_versionзмінну за допомогою команди ansible debug msg:

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

але це просто надрукує "Мош".

Який найкращий спосіб запустити це?

Відповіді:


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

Спробуйте спершу просто надрукувати змінну і побачити вихід без спеціального повідомлення, як-от так: - name: Print 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]" ] } } це працює, я б дуже хотів, щоб користувальницьке повідомлення хоч ;-)
Zulakis

1
Перевірте мою оновлену відповідь
Том Аак

Зверніть увагу: debug: "msg = Версія Mosh: '{{mosh_version.stdout}}'" відображатиметься лише "Mosh". Msg = "..." має бути в лапках замість цілого повідомлення. Але відповідь від @xddsg працює краще, оскільки це більш детальний var dump.
Далібор Філус


1

Просто видаліть товсту кишку

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

Чесно кажучи, це не повне рішення, але все-таки воно спрацювало і вирішило наступне питання, яке у мене було. Неможливо використовувати інший синтаксис, тому що я використовую його, whenщоб видалити товсту кишку, насправді це найпростіший спосіб вирішити це питання. тому я підтримую заяву;)
TecHunter

0

Я використовую це, помічайте розташування подвійних лапок (") та одинарних лапок (')

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

0

У будь-який час, коли у мене виникають проблеми зі спеціальними символами в рядках Ansible / 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.