2015-04-24 9 views
6

我能夠在group_vars定義哈希(字典)像下面/所有:如何在安全庫存文件中定義散列(dict)?

region_subnet_matrix: 
    site1: 
    region: "{{ aws_region }}" 
    subnet: "subnet-xxxxxxx" 
    zone: "{{aws_region}}a" 
    site2: 
    region: "{{ aws_region }}" 
    subnet: "subnet-xxxxxxx" 
    zone: "{{aws_region}}b" 

,但對我的生活,我無法弄清楚如何定義它在hosts文件

[all:vars] 
region_subnet_matrix="{ 
    site1: 
    region: "{{ aws_region }}" 
    subnet: "subnet-xxxxxxx" 
    zone: "{{aws_region}}a" 
    site2: 
    region: "{{ aws_region }}" 
    subnet: "subnet-xxxxxxx" 
    zone: "{{aws_region}}b" 
}" 

我知道這是不正確的,但我不知道正確的方法。請有人賜教我嗎?

回答

5

您不能在庫存文件中使用dict,因爲它使用ini格式。 Ansible中的首選實踐實際上並不是將變量存儲在主庫存文件中。主機和組變量可以存儲在相對於清單文件的單個文件中。

假設清單文件路徑爲:/etc/ansible/hosts

如果主機在以下位置在YAML文件名爲「TESTSERVER」變量將被提供給主機:/etc/ansible/host_vars/testserver

這個文件中的數據可能看起來像:

region_subnet_matrix: 
    site1: 
    region: "{{ aws_region }}" 
    subnet: "subnet-xxxxxxx" 
    zone: "{{aws_region}}a" 
    site2: 
    region: "{{ aws_region }}" 
    subnet: "subnet-xxxxxxx" 
    zone: "{{aws_region}}b" 

更多here

+1

此外'host_vars'文件夾是[Ansible最佳實踐](http://docs.ansible.com/playbooks_best_practices.html#directory-layout)目錄佈局的一部分。 – kalefranz

6

當我閱讀Ansible的源代碼時,清單文件中變量的值由Python的「ast.literal_eval()」評估。因此,您可以通過單行Python文字描述庫存文件中的字典變量。

你的例子可能是這樣的:

[all:vars] 
region_subnet_matrix={'site1': {'subnet': 'subnet-xxxxxxx', 'region': '{{ aws_region }}', 'zone': '{{aws_region}}a'}, 'site2': {'subnet': 'subnet-xxxxxxx', 'region': '{{ aws_region }}', 'zone': '{{aws_region}}b'}} 

確保沒有變量在本例中評價。

N.B .:我不知道這種庫存變量定義是官方允許的。

相關問題