Neu bei Ansible - Benutzer je nach Typ zu Servern hinzufügen

Neu bei Ansible - Benutzer je nach Typ zu Servern hinzufügen

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  

userlistwird 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 newuserstattdessen 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_varsunterhalb des Verzeichnisses, das die Inventardatei enthält, mit einer Datei pro Gruppe, z. B.

$ cat grp1

userlist: 
   - user1
   - user2   

und würde dann userlistfü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

verwandte Informationen