citando cólon em ansible

3

Estou tentando usar ansible para verificar se a saída de um determinado programa está definida para um determinado valor. Esse valor inclui dois pontos, seguido de um espaço, e isso parece ser registrado como um erro de sintaxe, não importa como eu o cite.

exemplo:

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

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

Quando executo isso, recebo um erro no primeiro comando "raw":

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

(naturalmente, meu caso de uso real envolvia um programa real que tinha dois pontos em sua saída, não "raw: echo". Esse foi o erro que vi.)

Claramente, a citação da string em questão não resolve o problema. Eu também tentei escapar do: com uma barra invertida ( \ ).

    
por stochastic 04.10.2016 / 18:49

2 respostas

4

Brincando com citações, recebi finalmente uma mensagem de erro útil. Aparentemente, você irá confundir o analisador YAML a menos que você cite toda a linha .

Aqui está o exemplo de trabalho:

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

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

E aqui está a mensagem de erro útil:

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'
    
por 04.10.2016 / 18:49
1

Está documentado na documentação da Ansible sobre este .

Você pode escapar do cólon assim -

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

e saída disso é como -

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

Tags