Ich bin relativ neu bei Ansible und versuche, ein Playbook zu schreiben, das Benutzer je nach Benutzertyp (den ich zu definieren versuche) zu einer Gruppe von Servern hinzufügt ...
Also ... mein Spielbuch sieht ungefähr so aus ...
- name: add user
user:
name={{ item }}
state=present
shell=/bin/bash
with_items: "{{ userlist }}"
tags: add_new_user
become: true
userlist
wird in einer separaten YML-Datei definiert:
---
userlist:
user1
user2
user3
In meiner Hosts-Datei habe ich drei Gruppen definiert:
[grp1]
192.168.0.0
192.168.0.1
[grp2]
192.168.0.0
192.168.0.3
[grp3]
192.168.0.4
Ich denke daran, diese Gruppentypen zu meiner Benutzerliste hinzuzufügen, sodass sie ungefähr so aussieht:
---
userlist:
user1 grp1
user2 grp2
user3 grp3
Ich versuche herauszufinden, wie um Himmels Willen mein Playbook herausfinden soll, welche Benutzer zu welchen Servern hinzugefügt werden. Ich weiß, dass ich eine weitere Variable deklarieren muss, damit mein Playbook weiß, dass Benutzer1 zu den Servern in Grp1 hinzugefügt wird, aber ich komme nicht dahinter, wie.
Antwort1
Eine einfache Methode: Verwenden SieGruppenvariablen:
Wenn Sie nur einen Benutzer pro Server haben, können Sie ihn im Inventar definieren (Sie müssen Ihr Spiel anpassen, damit es nicht in einer Schleife auftritt, und ihn newuser
stattdessen als Variable verwenden):
[grp1:vars]
newuser=user1
Wenn es mehr Benutzer gibt, benötigen Sie entweder ein YAML-Inventar (anstelle von ini) oder verwenden eine Gruppen-Var-Datei: Erstellen Sie ein Unterverzeichnis mit dem Namen group_vars
unterhalb des Verzeichnisses, das die Inventardatei enthält, mit einer Datei pro Gruppe, z. B.
$ cat grp1
userlist:
- user1
- user2
und würde dann userlist
für jede Gruppe separat definiert werden.
Antwort2
Der einfache Weg ist über Hostvariablen oder Hostgruppenvariablen. Wie das geht, können Sie hier nachlesen:das Ansible-Handbuch. Eine weitere, fortgeschrittenere Option sind benutzerdefinierte Fakten oder Skripte. Sie müssen sich über die Variablenreihenfolge informieren, um unerwartetes Verhalten zu vermeiden.
außerdem möchte ich auf einige kleine Syntaxfehler hinweisen. Sie können eine Deklaration nicht mit einem Accolade ({) beginnen. Und verwenden Sie Doppelpunkte, wenn Sie eine einzelne Deklaration pro Zeile einfügen. So:
Inventardatei:
[grp1]
host1
host2
host3
[grp2]
host4
host5
host6
[grp3]
host1
host4
Datei:
- hosts: all
become: true
tasks:
- name: adding users to x
user:
name: "{{ item }} "
state: present
shell: /bin/bash
with_items: "{{ userlist }}"
tags: add_new_user
group_vars/grp1.yml:
---
userlist:
- user1
- user2
- user3
host_vars/host5.yml
---
userlist:
- user1
- user4
- user10