Как правильно избежать обратной косой черты в доступных сценариях?
Я пытаюсь выполнить поиск и заменить обратную косую черту в пароле, но я даже не могу добавить обратную косую черту в виде строки в фильтр jinja2 regex_replace. Я использую доступную версию 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
Здесь вы смешиваете стили синтаксиса, и цитата установлена неправильно:
- name: Escape root password - working
set_fact: "password_escaped={{ password | regex_replace ('U','\\X') }}"
Должно быть либо:
- name: Escape root password - working
set_fact:
password_escaped: "{{ password | regex_replace ('U','\\X') }}"
или:
- name: Escape root password - working
set_fact: password_escaped="{{ password | regex_replace ('U','\\X') }}"
Вы можете проверить, есть ли цитирование соответствует вашим потребностям лучше, чем regex_replace. Используйте это так:
- name: Escape root password - working
set_fact:
password_escaped: "{{ password | quote }}"