2017-07-04 22 views
0

这似乎是一个错误。但在将问题发布到安全的github项目之前,我在这里问。查找模块无法使用regex_replace过滤器计算模板的值

剧本:

- 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):

  • 逸出一次时,模板模块无法显示第一参考
  • 逸出两次时,查找模块无法提领第二参考

回答

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>