这似乎是一个错误。但是在向ansible的github项目发布问题之前,我在这里问。
Playbook:
- hosts: localhost
tasks:
- template: >
dest=/tmp/test.xml
src=test.xml.j2
- debug: msg="{{ lookup( 'template', 'test.xml.j2' ) }}"
vars:
- command: 'echo "word1 word2"'
test.xml.j2
<command>ssh {{ command| regex_replace('"(.*)"', '"\\"\1\\""') }} #1</command>
<command>ssh {{ command| regex_replace('"(.*)"', '"\\"\\1\\""') }} #2</command>
测试命令
ansible-playbook test.yml -D -C
预期结果:两项任务的结果相同
实际结果(ansible 2.3.1.0):
答案 0 :(得分:1)
template
操作和template
查找在几种情况下会产生不同的结果。
您可以随时提出问题。
作为解决方法,您可以在模板中使用set
:
{% set repl = '"\\"\\1\\""' %}
<command>ssh {{ command| regex_replace('"(.*)"', '"\\"\1\\""') }} #1</command>
<command>ssh {{ command| regex_replace('"(.*)"', '"\\"\\1\\""') }} #2</command>
<command>ssh {{ command| regex_replace('"(.*)"', repl) }} #3</command>
此处#3
通过操作和查找提供相同的结果:
- template:
dest: /tmp/test.xml
src: test.xml.j2
- copy:
content: "{{ lookup( 'template', 'test.xml.j2' ) }}"
dest: /tmp/test2.xml
结果:
<command>ssh echo "\"\"" #1</command>
<command>ssh echo "\"word1 word2\"" #2</command>
<command>ssh echo "\"word1 word2\"" #3</command>
<command>ssh echo "\"word1 word2\"" #1</command>
<command>ssh echo "\"\1\"" #2</command>
<command>ssh echo "\"word1 word2\"" #3</command>