Цитирование в толстой кишке

Я пытаюсь использовать ansible, чтобы проверить, что на выходе конкретной программы установлено определенное значение. Это значение включает двоеточие, за которым следует пробел, и это, похоже, регистрируется как синтаксическая ошибка, независимо от того, как я ее цитирую.

пример:

---
- hosts: all
  tasks:
    - raw: echo "something: else"
  register: progOutput

- debug:
    msg: "something else happened!"
  when: progOutput.stdout_lines[-1] != "something: else"

Когда я запускаю это, я получаю сообщение об ошибке в первой "сырой" команде:

ERROR! Syntax Error while loading YAML.


The error appears to have been in '<snip>/test.yml': line 4, column 27, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

  tasks:
    - raw: echo "something: else"
                          ^ here

(Естественно, мой реальный вариант использования включал в себя реальную программу с двоеточием на выходе, а не "raw: echo". Тем не менее, это была ошибка, которую я видел.)

Ясно, что цитирование рассматриваемой строки не решает проблему. Я также попытался избежать: с обратной косой чертой (\).

2 ответа

Это задокументировано в документации Ansible по этому поводу.

Вы можете избежать двоеточия, как это -

- raw: echo "something {{':'}} else"

и вывод это как -

changed: [localhost] => {
    "changed": true,
    "rc": 0,
    "stderr": "",
    "stdout": "something : else\n",
    "stdout_lines": [
        "something : else"
    ]
}

Поиграв с цитатами, я наконец-то получил полезное сообщение об ошибке. По-видимому, вы будете путать синтаксический анализатор YAML, если не цитируете всю строку.

Вот рабочий пример:

---
- hosts: localhost
  tasks:
    - raw: "echo 'something: else'"
      register: progOutput

    - debug:
        msg: "something else happened!"
      when: 'progOutput.stdout_lines[-1] != "something: else"'

И вот полезное сообщение об ошибке:

ERROR! Syntax Error while loading YAML.


The error appears to have been in '<snip>/test.yml': line 4, column 28, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

  tasks:
    - raw: "echo 'something\: else'"
                           ^ here
This one looks easy to fix.  There seems to be an extra unquoted colon in the line
and this is confusing the parser. It was only expecting to find one free
colon. The solution is just add some quotes around the colon, or quote the
entire line after the first colon.

For instance, if the original line was:

    copy: src=file.txt dest=/path/filename:with_colon.txt

It can be written as:

    copy: src=file.txt dest='/path/filename:with_colon.txt'

Or:

    copy: 'src=file.txt dest=/path/filename:with_colon.txt'
Другие вопросы по тегам