2016-07-25 131 views
1

Ansible中是否存在「全局」變量(即跨多個主機)?我想設置一個錯誤標誌,然後調用一個特定的單獨的劇本,如果我們打錯了狀態。我的結構像下面的東西:Ansible - 全局變量

- hosts: localhost 
    connection: local 
    gather_facts: no 
    roles: 
    - role1 <-- some error flag is set here 
    - role2 
- include: teardown.yml 
    when: error_flag is defined and error_flag == true 

我試過在group_vars設置一個變量,但在我看來,這裏還有在運行時改變變量值沒有真正的方法。

Set_fact不起作用,因爲拆卸的when不在本地主機中。即使我嘗試訪問hostvars['localhost']['error_flag],這也不起作用,因爲您似乎無法在when子句中使用Jinja模板。

+0

主機變量'hostvars.localhost.error_flag'應該可以在沒有Jinja2模板的'when'子句中訪問。也就是說,不用'{{''}}'Jinja2分隔符來寫這個表達式。 –

回答

0

正如Chin Huang上面所說的,我搞砸了關於使用when子句的語法。所以通過修正,when條款顯然有效。在Ansible中聲明動態「全局」變量似乎並不是一種好方法,因此在hostvars對象中使用每個主機的變量似乎是最實際的方法。

其他來源也提到使用文件和從文件中讀取數據,但這似乎效率非常低。所以我一直通過將東西存入localhost