Ansible 反斜杠在剧本中转义

Mir*_*ici 4 ansible ansible-playbook

如何在 ansible playbook 中正确转义反斜杠?

我正在尝试搜索并替换密码中的反斜杠,但我什至无法在 regex_replace jinja2 过滤器中添加反斜杠作为字符串。我正在使用 ansible 版本 2.1.1.0。

下面是问题的一个例子:

$ 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
Run Code Online (Sandbox Code Playgroud)

Hen*_*gel 5

您在这里混合了语法样式并且引号设置错误:

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

应该是:

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

或者:

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

您可能想检查引用是否比 regex_replace 更符合您的需求。像这样使用它:

  - name: Escape root password - working
    set_fact:
      password_escaped: "{{ password | quote }}"
Run Code Online (Sandbox Code Playgroud)