Ansible escape-строка \ - PullRequest
0 голосов
/ 23 марта 2020

Попытка добавить \ перед . в список IP-адресов в Ansible.

Пример:

"msg": "192.168.5.0"

Ожидаемый результат:

"msg": "192\.168\.5\.0"

Я попробовал это без удачи.

---        
- hosts: localhost
  vars:
    ip: "{{ ansible_default_ipv4.network }}"
  tasks:
    - debug: msg="{{ ip | regex_replace('\.', '\\.')}}"

Вывод:

ok: [localhost] => {
    "msg": "192\\.168\\.5\\.0"
}

---        
- hosts: localhost
  vars:
    ip: "{{ ansible_default_ipv4.network }}"
  tasks:
    - debug: msg="{{ ip | regex_replace('.', '\.')}}"

Вывод:

ok: [localhost] => {
    "msg": "192\\.168\\.5\\.0"
}

1 Ответ

0 голосов
/ 23 марта 2020

Функция regex_replace работает так, как вы ожидаете. Двойные обратные слеши, которые вы видите, являются оценкой строки по debug. Например, отобразить длину строки

    - set_fact:
        ip2: "{{ ip | regex_replace(myregex, myreplace) }}"
      vars:
        myregex: '\.'
        myreplace: '\.'
    - debug:
        msg: "length of {{ ip2 }} is {{ ip2|length }}"

дают

    "msg": "length of 192\\.168\\.5\\.0 is 14"

Также возможно записать строку в файл. Например, шаблон

shell> cat test.txt.j2
{{ ip2 }}

и задача

    - template:
        src: test.txt.j2
        dest: test.txt

дают

shell> cat test.txt
192\.168\.5\.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...