2016-12-06 94 views
6

我已經安裝了以下版本:ansible 2.3.0(devel的2131eaba0c)Ansible:用於定義使用劇本可變舉辦

我想指定我的主機變量作爲外部變量,然後在劇本使用與此類似:

hosts: "{{integration}}" 

在我group_vars /所有文件我有以下定義的變量:

integration: "int60" 

主機文件看起來是這樣的:

[int60] 
hostA 

[int61] 
hostB 

可惜,這是行不通的。我也嘗試以下列方式來定義主機VAR

[integration] 
127.0.0.1 ansible_host="{{ integration_env }}" 

,並有/在我的group_vars指定的integration_env所有文件。在這種情況下,它似乎是在本地運行任務,而不是在期望的環境中運行。

是否有可能做到這樣的事情?我會接受全新的做法。主要目標是簡單地在var文件中定義主機變量。

回答

7

如果你通過integration變量作爲額外的變量這將工作:

ansible-playbook -e integration=int60 myplaybook.yml 

比賽中「頭」中使用的變量,Ansible分析劇本之前,應該被定義。

在您的示例中,您將integration定義爲主機事實。事實只在任務級別上定義,而不是在玩遊戲級別。

更新:您可以使用其他方式傳遞變量,而不僅僅是額外的變量。 例如:

- hosts: "{{ lookup('env','DYN_HOSTS') }}" 

也將工作。

+0

感謝您的快速回答。我已經看到過類似的解決方案,但這對我來說不起作用,因爲我通過jenkins工作(和一個不合理的插件)運行,不允許傳遞任何額外的變量。另外,我需要在合理的任務中更改整合變量,以便下次運行可以選擇不同的環境。你知道其他解決方案嗎? – Vetemi

+0

我用另一個例子更新了我的答案。 –

+0

詹金斯ansible插件確實允許額外的變量。在Jenkins創建Ansible步驟時,它隱藏在「高級」選項下。 –