2017-07-04 9 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 

期待される結果:二つのタスク

実際の結果(上で同じ結果不可能な2 .3.1.0):

  • 一旦逃げ、テンプレートモジュールは、二回逃げるときに第一基準
  • を表示することができないルックアップモジュール第二基準間接参照に失敗

答えて

1

template作用templateルックアップが知られていますいくつかのケースで異なる結果を出す。

問題をお気軽にお寄せください。

- 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> 
ここ

{% 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は、アクションとして、ルックアップの両方同じ結果が得られます。この問題を回避するには、あなたがあなたのテンプレートでsetを使用することができるよう

関連する問題