переменная 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 }}"

но это будет просто напечатать "Mosh".

Какой лучший способ запустить это?

Zulakis
источник

Ответы:

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: распечатать отладочную версию 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 Version: '{{mosh_version.stdout}}'" будет отображать только "Mosh". Msg = "..." должно быть в кавычках вместо всего сообщения. Но ответ от @xddsg работает лучше, так как это более подробный var dump.
Далибор Филус
6

Самый простой ответ

- debug: var=mosh_version.stdout
xddsg
источник
1

Просто удалите двоеточие

debug: msg="Mosh Version {{ mosh_version.stdout }}"
remintz
источник
Честно говоря, это не полное решение, но все же оно сработало и решило следующую проблему, с которой я столкнулся. Не могу использовать другой синтаксис, потому что я использую его, whenпоэтому удаление двоеточия на самом деле является самым простым способом решить эту проблему. так что я голосую;)
TecHunter
0

Я использую это, обратите внимание на расположение двойных кавычек (") и одинарных кавычек (')

- name: Print mosh version
  debug: "msg='Mosh Version: {{ mosh_version.stdout }}'"
контрольная сумма
источник
0

Каждый раз, когда у меня возникают проблемы со специальными символами в строках / командах Ansible, я делаю это:

  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
Коллин Кадд
источник