2015-04-24 14 views
6

io sono in grado di definire un hash (dict) come di seguito in group_vars/tutto:Come definire hash (dict) nel file di inventario ansible?

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" 

, ma per la vita di me, non riuscivo a capire come definire sotto 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" 
}" 

So che non era corretto, ma non conosco la strada giusta. Qualcuno può illuminarmi, per favore?

risposta

5

Non è possibile utilizzare la dict nel file di inventario perché utilizza il formato ini. La pratica preferita in Ansible in realtà non è quella di memorizzare le variabili nel file di inventario principale. Le variabili host e di gruppo possono essere memorizzate in singoli file relativi al file di inventario.

Supponendo che il percorso del file inventario è: /etc/ansible/hosts

Se l'host si chiama ‘TestServer’ variabili in file YAML nel seguente percorso sarà messo a disposizione per l'host: /etc/ansible/host_vars/testserver.

I dati nel questo file potrebbe essere simile:

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" 

Leggi tutto here.

+1

Anche una cartella 'host_vars' fa parte del layout di directory [Ansible best practice] (http://docs.ansible.com/playbooks_best_practices.html#directory-layout). – kalefranz

6

Mentre leggo il codice sorgente di Ansible, i valori delle variabili nei file di inventario vengono valutati da "ast.literal_eval()" di Python. Quindi puoi descrivere le variabili di dict nei file di inventario con i letterali Python a una sola riga.

Il vostro esempio potrebbe essere simile:

[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'}} 

Assicurarsi che nessuna variabile vengono valutate in questo esempio.

N.B .: Non so che questo tipo di definizione di variabile di inventario è ufficialmente consentito.

Problemi correlati