2017-07-30 58 views
3

我試圖在爲目的地區段預製with_items時進行多重連接。Concat多個變量和字符串在可靠的劇本

現在它看起來是這樣的:

- 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解析器上自己測試標量,它與導致Ansible不能正確解析YAML的錯誤相同。

This解析器,正確處理標量:,並且不會在輸入中產生錯誤(但存在其他問題)。