2016-05-25 40 views
1

我有一個發揮如下Ansible如何引用項目中的Jinja2模板

- name: create the unison preference file 
     template: 
     src: default.prf.j2 
     dest: /root/.unison/{{ item }}.prf 
     with_items: groups['ndeployslaves'] 

如下

root = /home 
    root = ssh://[email protected]{{ item }}//home 
    ignore = Path virtfs 
    ignore = Path */mail 

項變量不工作的default.prf.j2文件的內容在模板和我得到錯誤

任務[unison_master:創建統一prefrence文件] ************************ 致命的: [127.0.0.1]:失敗! => {「failed」:true,「msg」:「'item'is undefined」}

如何參考劇本中使用的模板內的項目?

+0

你確定'ndeployslaves'是否正確設置了你當前的劇本?你可以在模板渲染任務之前添加一個調試任務並打印該變量,只是爲了驗證它的內容是否如你所期望的那樣? – fishi

+0

我的意思是打印'groups ['ndeployslaves']' – fishi

+0

任務[unison_master:debug this]的內容*************************** ******************* [棄權警告]:不推薦使用裸變量。更新您的Playbook,以便環境值使用完整變量語法 ('{{groups ['ndeployslaves']}'')。 此功能將在未來版本中刪除。可以通過在ansible.cfg中設置 deprecation_warnings = False來禁用棄用警告。 ok:[127.0.0.1] =>(item = cpanel.host.net)=> { 「item」:「cpanel.sysally.net」, 「msg」:「Hello world!」 } {「failed」:true,「msg」:「'item'is undefined」} –

回答

1

因爲它不是讓你使用{{項目}}模板,你可以這樣做:

- name: create the unison preference file 
    copy: 
    src: default.prf 
    dest: "/root/.unison/{{ item }}.prf" 
    force: no 
    with_items: "{{ groups['ndeployslaves'] }}" 

- name: edit preference file 
    lineinfile: 
    dest: "/root/.unison/{{ item }}.prf" 
    line: "root = ssh://[email protected]{{item}}//home" 
    regexp: '^root = ssh://' 
    with_items: "{{ groups['ndeployslaves'] }}" 

default.prf的內容在本地主機上應該是:

root = /home 
root = ssh:// 
ignore = Path virtfs 
ignore = Path */mail 

但是我有{{item}}在模板中工作。你確定你的空白是正確的嗎? src和dest需要比模板縮進一層,但with_items需要與模板位於同一層。

- name: create the unison preference file 
    template: 
    src: default.prf.j2 
    dest: "/root/.unison/{{ item }}.prf" 
    with_items: "{{ groups['ndeployslaves'] }}" 
+0

相同的錯誤。我甚至嘗試添加該項目作爲變量變量: the_host:「{{item}}」,然後在j2模板中引用the_host沒有幫助 –

+0

剛編輯我的答案。我想我有一個語法錯誤。 – smiller171

+0

with_items:groups ['ndeployslaves']正常工作,並且該項目=在調試中正確顯示。正如我所提到的,需要工作的是將模板文件中的值作爲變量 –

0

該錯誤是由縮進錯誤引起的。
with_items: groups['ndeployslaves']縮進比它應該有的更深層次。