2014-11-18 15 views
11

Sono in difficoltà con un modello che estrae le scorte di inventario nei modelli Ansible, per favore aiuto. :)Ciclo anonimo attraverso le vars di gruppo nel modello

Sto configurando un server di monitoraggio e desidero essere in grado di eseguire il provisioning automatico dei server utilizzando Ansible. Sto lottando con i loop nel modello per consentirmi di farlo.

mio soluition semi-lavoro finora è nel playbook che chiama il compito modello che ho:

monitoringserver.yml

vars: 
     servers_to_monitor: 
     - {cname: web1, ip_address: 192.168.33.111} 
     - {cname: web2, ip_address: 192.168.33.112} 
     - {cname: db1, ip_address: 192.168.33.211} 
     - {cname: db2, ip_address: 192.168.33.212} 

template.yml

all_hosts += [ 
      {% for host in servers_to_monitor %} 
        "{{ host.cname }}{{ host.ip }}|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/", 
      {% endfor %} 
] 

Ma questo isn È ideale in quanto non è possibile definire un indirizzo IP diverso per i diversi server da monitorare. Come hanno fatto le altre persone? Sono sicuro che deve essere banale, ma il mio cervello sta lottando con la sintassi.

Grazie

Alan

Edit: Per chiarire il modello risultante simile a questa:

all_hosts += [ 
         "web1|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/", 
         "web2|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/", 
         "db1|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/", 
         "db2|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/", 
] 

Quello che vorrei è i valori web1/Web2/db1/DB2 di essere diversi a seconda che io stia utilizzando un file di inventario di produzione o un file di inventario di sviluppo.

+1

Potrebbe aggiungere quello che vuoi il risultato attuale? –

+0

Grazie Ramon, ho aggiunto una modifica per chiarire :) –

+0

Ora sono riuscito a risolverlo creando due dirs di group_var monitor-dev e monitor-pub, in cui il libro di gioco utilizza il ruolo tutti e il file di inventario per produzione chiamando il gruppo specifico vars. Non sembra proprio vero però :) –

risposta

18

Idealmente, utilizzeresti diversi file di inventario per la produzione e la gestione temporanea, che ti consentirebbero di mantenere lo stesso valore {{ inventory_hostname }}, ma di indirizzare i computer diversi.

È inoltre possibile scorrere i diversi gruppi ...

eserciti:

[web] 
web1 
web2 

[db] 
db1 
db2 

playbook:

- name: play that sets a group to loop over 
    vars: 
    servers_to_monitor: "{{ groups['db'] }}" 

    tasks: 
    - template: 
     src: set-vars.j2 
     dest: set-vars.js 

modello:

all_hosts += [ 
{% for host in servers_to_monitor %} 
    "{{ hostvars[host].inventory_hostname }}{{ hostvars[host].ansible_default_ipv4.address }}|cmk-agent|prod|lan|tcp|wato|/" + FOLDER_PATH + "/", 
{% endfor %} 
]