2017-07-30 14 views
3

宛先セクションのためにwith_itemsを実行するときに複数の連結を試みています。複数の変数と文字列をつなぐ可能性のある遊び方

今、それは次のようになります。

- name: create app except+lookup 
    copy: content="" dest="{{ dir.comp ~ '/config/con2dd/' ~ item.name ~ 'File.txt' }}" force=no group=devops owner=devops mode: 0755 
    with_items: 
... 

私が取得:

We could be wrong, but this one looks like it might be an issue with 
missing quotes. Always quote template expression brackets when they 
start a value. For instance:    

    with_items: 
     - {{ foo }} 

Should be written as: 

    with_items: 
     - "{{ foo }}" 

はアプローチのカップルをしようとしましたが、どれも働いて何かを生じませんでした。

変数を文字列と連結することはできますか?

答えて

2

純粋なYAMLとkey = valueの構文をパラメータに混用しないでください。そして、常に複雑な引数のためにYAML構文を使用してください:

- name: create app except+lookup 
    copy: 
    content: "" 
    dest: "{{ dir.comp }}/config/con2dd/{{ item.name }}File.txt" 
    force: no 
    group: devops 
    owner: devops 
    mode: 0755 
    with_items: 
    ... 
+0

この厳しい使い方はどちらも正しいです。ありがとう:) – Moshe

1

copyのキーに関連付けられている値は引用していません。それが起こるためには最初の文字は二重(または一重)引用符でなければなりません。この例は、フィードバックで与えられていますが、これを正しく行いますが、明示的ではありません。非引用付きスカラー開始すると(あなたはccontentからの引用は、もはや特別な意味を持ちませんスカラーで発生し始める。そのためAnsibleが使用するパーサのバグの

:(コロンスペース)そのスカラー(mode: 0755)内は、あなたが全体のスカラーを引用し、その中で起こる二重引用符をエスケープ倍増する必要があり、トラブルが発生します。

copy: "content=\"\" dest=\"{{ dir.comp ~ '/config/con2dd/' ~ item.name ~ 'File.txt' }}\" force=no group=devops owner=devops mode: 0755" 

または代わりに別のエスケープルールを持っている単一引用符(使用:

copy: 'content="" dest="{{ dir.comp ~ ''/config/con2dd/'' ~ item.name ~ ''File.txt'' }}" force=no group=devops owner=devops mode: 0755' 
をあなたが thisオンラインYAMLパーサにスカラーを自分でテストすることができます

は、それが正しくYAMLを解析しないAnsibleを引き起こすものと同じバグがあります。

Thisパーサーは、スカラー:を正しく処理し、入力にエラーが発生することはありませんが、その他の問題があります。

関連する問題