it-swarm.com.de

zugriff auf das Inventar Hostvariable im Spielbuch

Ich benutze ansible 2.1. Ich habe die folgende Bestandshostdatei und eine Rolle, die von einem Spiel aufgerufen wird, das Zugriff auf die Hostdateivariable benötigt. Überlegungen zum Zugriff (derzeit wird ein Fehler angezeigt):

Hostdatei

[test1]
test-1 ansible_ssh_Host=abc.def.ghi.jkl ansible_ssh_port=1212

[test2]
test2-1 ansible_ssh_Host=abc.def.ghi.mno ansible_ssh_port=1212

[test3]
test3-1 ansible_ssh_Host=abc.def.ghi.pqr ansible_ssh_port=1212
test3-2 ansible_ssh_Host=abc.def.ghi.stu ansible_ssh_port=1212

[all:children]
test1
test2
test3

role Ich habe versucht, auf die Rolle in den folgenden Modi zuzugreifen:

{{ hostvars.ansible_ssh_Host }} 

&&

{{ hostvars.test1.ansible_ssh_Host }}

Ich versuche, auf den Ansible_ssh_Host im Test1-Abschnitt zuzugreifen. 

Error

fatal: [localhost]: FAILED! => {"failed": true, "msg": "'ansible.vars.hostvars.HostVars object' has no attribute 'ansible'"}
26
ali haider

Sie sind auf dem richtigen Weg über hostvars.
Diese magic Variable wird verwendet, um auf Informationen über andere Hosts zuzugreifen.

hostvars ist ein Hash mit Inventar-Hostnamen als Schlüssel.
Um auf Felder jedes Hosts zuzugreifen, verwenden Sie hostvars['test-1'], hostvars['test2-1'] usw. 

ansible_ssh_Host ist veraltet zugunsten von ansible_Host seit 2.0.
Sie sollten also zuerst "_ssh" aus den Argumenten des Inventarhosts entfernen (d. H. "Ansible_user", "ansible_Host" und "ansible_port"), dann in Ihrer Rolle Folgendes mit

{{ hostvars['your_Host_group'].ansible_Host }}
33
[Host_group]
Host-1 ansible_ssh_Host=192.168.0.21 node_name=foo
Host-2 ansible_ssh_Host=192.168.0.22 node_name=bar

[Host_group:vars]
custom_var=asdasdasd

Sie können auf Hostgruppen-Variablen zugreifen, indem Sie

{{ hostvars['Host_group'].custom_var }}

Wenn Sie einen bestimmten Wert von einem bestimmten Host benötigen, können Sie Folgendes verwenden:

{{ hostvars[groups['Host_group'][0]].node_name }}
8
Eduardo Cuomo

Sie sollten den Variablennamen direkt verwenden können

ansible_ssh_Host

Oder Sie können Hostvars durchgehen, ohne den Host buchstäblich angeben zu müssen mit der magische Variableinventory_hostname

hostvars[inventory_hostname].ansible_ssh_Host
5
Jason S

Damit hatte ich auch zu kämpfen. Mein spezielles Setup ist: Ihre Host.ini (mit den modernen Namen):

[test3]
test3-1 ansible_Host=abc.def.ghi.pqr ansible_port=1212
test3-2 ansible_Host=abc.def.ghi.stu ansible_port=1212

plus ein play fill_file.yml

---
- remote_user: ec2-user
  hosts: test3
  tasks:
   - name: fill file
     template:
       src: file.j2
       dest: filled_file.txt

plus eine Vorlage file.j2, wie

{% for Host in groups['test3'] %}
   {{ hostvars[Host].ansible_Host }}
{% endfor %}

Das hat bei mir geklappt, das Ergebnis ist

abc.def.ghi.pqr
abc.def.ghi.stu

Ich muss zugeben, dass es 2.7 ist, nicht 2.1. Die Vorlage ist eine Variation eines Beispiels in https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html .

Die akzeptierte Antwort hat in meinem Setup nicht funktioniert. Mit einer Vorlage

{{ hostvars['test3'].ansible_Host }}

mein Spiel schlägt mit "AnsibleUndefinedVariable: \" hostvars ['test3']\"ist undefiniert" fehl.

Anmerkung: Ich habe einige Variationen ausprobiert, bin jedoch gelegentlich mit "ansible.vars.hostvars.HostVars-Objekt hat kein Element" gescheitert. Einige davon könnten durch das, was sie sagen, erklärt werden. in https://github.com/ansible/ansible/issues/13343#issuecomment-160992631

hostvars emuliert ein Wörterbuch [...]. Hostvars ist auch faul geladen

2
ynux

Vielen Dank, dieser Hinweis war sehr nützlich für mich! Konnte die unter/group_var/vars im Ansible-Playbook definierte Variable wie unten angegeben senden.

aufgaben:
- Name: Überprüfen Sie, ob das Kennwort für das Dienstkonto abgelaufen ist
- Befehl:

sh /home/monit/get_ldap_attr.sh {{ item }} {{ LDAP_AUTH_USR }}
1
Kumaran M

Ich habe auch eine nette und einfache Möglichkeit gefunden, hostsvars zu adressieren direkt bei Ansible Github-Problemen

Sieht aus, als könnten Sie das auch tun:

 - debug:
    msg: "{{ ansible_ssh_Host }}"
0
Michael