Barra invertida ansível escapando em playbooks

3

Como você pode escapar de uma barra invertida em playbooks ansiosos?

Estou tentando fazer uma pesquisa e substituir a barra invertida na senha, mas nem sequer posso adicionar a barra invertida como uma string no filtro regex_replace jinja2. Estou usando a versão ansible 2.1.1.0.

Aqui está um exemplo do problema:

$ cat jinja2-escape-test.yml
---
- hosts: localhost
  gather_facts: no

  vars:
    password: '\Udl5DoQfa3Uy_:1sbcE'

  tasks:

  - debug: var=password

  - name: Escape root password - working
    set_fact: "password_escaped={{ password | regex_replace ('U','\X') }}"

  - name: Escape root password - not working
    set_fact: "password_escaped={{ password | regex_replace ('U','\') }}"

  - debug: msg=password_escaped={{ password_escaped }}

# vim:et:sw=2:ts=2:sts=2:

$ ansible-playbook jinja2-escape-test.yml
ERROR! failed at splitting arguments, either an unbalanced jinja2 block or quotes: password_escaped={{ password | regex_replace ('U','\') }}

The error appears to have been in '/home/mot/build-dashboards/jinja2-escape-test.yml': line 15, column 5, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:


  - name: Escape root password - not working
    ^ here
    
por Mircea Vutcovici 21.09.2016 / 16:10

1 resposta

5

Você está misturando estilos de sintaxe aqui e uma citação está errada:

  - name: Escape root password - working
    set_fact: "password_escaped={{ password | regex_replace ('U','\X') }}"

Deve ser:

  - name: Escape root password - working
    set_fact:
      password_escaped: "{{ password | regex_replace ('U','\X') }}"

ou:

  - name: Escape root password - working
    set_fact: password_escaped="{{ password | regex_replace ('U','\X') }}"

Você pode verificar se citações se adequa melhor às suas necessidades do que regex_replace. Use assim:

  - name: Escape root password - working
    set_fact:
      password_escaped: "{{ password | quote }}"
    
por 26.09.2016 / 12:05