it-swarm.com.de

Ansible: Wie deklariere ich eine globale Variable im Playbook?

Wie kann ich eine globale Variable in Ansible Playbook deklarieren? Ich habe in Google gesucht und die folgende Lösung gefunden, aber es funktioniert nicht wie erwartet.

- hosts: all
  vars:
    prod-servers:
     - x.x.x.x
     - x.x.x.x


- hosts: "{{prod-servers}}"
  tasks:
  - name: ping
    action: ping

Wenn ich den obigen Code ausprobiere, heißt es, dass die Variable prod-servers undefiniert ist.

5
Shibankar

Sie können kann nicht eine Variable definieren, auf die auf Playbook-Ebene (globale Variable) innerhalb eines Spiels zugegriffen werden kann.

Variable Bereiche

Ansible hat 3 Hauptbereiche:

  • Global: Dies wird durch Konfiguration, Umgebungsvariablen und die Befehlszeile festgelegt

  • Spielen: Jedes Spiel enthielt Strukturen, VARS-Einträge (VARS; VARS_Dateien; VARS_Prompt), Rollenvorgaben und VARS.

  • Host: Variablen, die direkt mit einem Host verknüpft sind, z. B. Inventar, include_vars, Fakten oder registrierte Aufgabenausgaben

Alles, was Sie in einem Spiel deklarieren, kann also nur eine Spielvariable oder eine (Host-) Tatsache sein.


So definieren Sie eine Variable, die Sie in der hosts -Deklaration verwenden können:

  • lauf ansible-playbook mit --extra-vars Option und übergebe den Wert im Argument;

oder um dieselbe Funktionalität zu erreichen (entscheiden Sie, auf welchen Hosts innerhalb eines vorhergehenden Spiels ein Spiel ausgeführt werden soll):

5
techraf

was Sie anscheinend wünschen, ist ein Inventar ( http://docs.ansible.com/ansible/latest/intro_inventory.html ). Es sieht so aus, als hätten Sie eine statische Liste von IPs, die Prod-Server (oder dev.) sind oder was auch immer), Sie können also ein statisches Inventar erstellen.

In Ihrem zweiten Spiel möchten Sie die Liste der IPs als Hosts verwenden, um die Aufgaben auszuführen. Dies erwartet Ansible nicht. Nach dem Schlüsselwort "hosts" in einer Spieldeklaration erwartet Ansible einen Gruppennamen aus dem Inventar.

Wenn sich Ihre Produktserver auf der Opossite-Website von Zeit zu Zeit ändern, müssen Sie möglicherweise ein dynamisches Inventar erstellen. Beispiele finden Sie in https://github.com/ansible/ansible/tree/devel/contrib/inventory (beispielsweise gibt es Beispiele für dynamisches Inventar, das auf EC2 von Amazon oder vsphere basiert).

grüße

0
Jordi Molina