2016-06-06 12 views
0

Ich habe eine host_vars Datei verweisen, die wie folgt aussieht:ansible: Wie Variablen eines bestimmten Schlüssels

--- 
clients: 
cl1: 
    to_install: 
    - value11 
    - value21 
    to_uninstall: 
    - value31 
cl3: 
    to_install: 
    - value12 
    - value22 
    - value32 
    to_uninstall: 
    - value42 

ich die Werte unter cl1/to_install aufgeführt möchte nur cl1 Client installiert werden, und diejenigen, die unter cl3/to_install nur zu cl3 installiert werden. Dies sollte durch Schleifen der in to_install enthaltenen Werte erfolgen. cl1 und cl3 sind ebenfalls in der hosts-Datei definiert. Ich versuche nur, um die Werte zu drucken:

- name: test variables... 
    hosts: localhost 
    vars_files: 
    - path/to/hosts_vars 
tasks: 
- name: Print softwares to install 
    debug: msg="Softwares installed on {{ item.key }} are: {{ item.value.to_install }}" 
    with_dict: 
    - "{{ clients }}" 

aber to_install beiden Kunden drucken. Ich könnte auch explizit auf den Client verweisen (zum Beispiel mit cl1 anstelle von Schlüssel), aber die Anzahl der Clients, die in host_vars definiert sind, wird jedes Mal geändert. Wie kann ich nur auf die Werte in to_install eines bestimmten Clients verweisen? Dank

Antwort

1

Ich glaube, Sie suchen etwas wie folgt aus:

--- 
clients: 
    cl1: 
    name: My-First-Machine 
    to_install: 
     - value11 
     - value21 
    to_uninstall: 
     - value31 
    cl3: 
    name: My-Second-Machine 
    to_install: 
    - value12 
    - value22 
    - value32 
    to_uninstall: 
    - value42 

und dann in Ihrem Textbuch etwas wie folgt aus:

tasks: 
    - debug: 
     msg: "Softwares installed on {{ clients[machine].name }} are: {{ clients[machine].to_install }}" 

Dann können Sie Ihre Textbuch, wie dies für CL1 Maschine verwenden:

ansible-playbook -i hosts test.yml -e "machine=cl1" 

geben Sie das Ergebnis wie folgt aus:

ok: [localhost] => { 
    "msg": "Softwares installed on My-First-Machine are: [u'value11', u'value21']" 
} 

PLAY RECAP ********************************************************************* 
localhost     : ok=1 changed=0 unreachable=0 failed=0 

Auch können Sie Ihre Textbuch, wie dies für cI3 Maschine verwenden:

ansible-playbook -i hosts test.yml -e "machine=cl3" 

geben Sie das Ergebnis wie folgt aus:

PLAY [local] ******************************************************************* 

TASK [debug] ******************************************************************* 
ok: [localhost] => { 
    "msg": "Softwares installed on My-Second-Machine are: [u'value12', u'value22', u'value32']" 
} 

PLAY RECAP ********************************************************************* 
localhost     : ok=1 changed=0 unreachable=0 failed=0 

Hoffnung, dass Sie helfen könnten.

+0

Danke das hilft sicherlich. Ich habe mich gefragt, wofür "-e" steht, wenn du das Playbook nennst? und wenn ich das 'name'-Feld leer lasse, d. h. ohne' My-first-Machine' funktioniert es auch? – diegus

+0

'-e' steht für Extra-Variable, benutze dies, um die Informationen für spezifische Maschinen wie cl1/cl3 zu erhalten und wenn du den' name' belässt, funktioniert es, aber zeigt dir die komplette Variable anstelle des Maschinennamens. versuchen Sie es und lassen Sie mich wissen, wenn Sie mehr Hilfe brauchen –

+0

Es funktioniert super! Ich habe den Namen weggelassen und verwende nur '{{machine}}', so dass der Name des Clients ausgegeben wird. Danke nochmal – diegus

Verwandte Themen