GNU/Linux >> LINUX-Kenntnisse >  >> Linux

4 Schritte zum Erstellen von Linux-Benutzern aus einer CSV-Datei mit Ansible

Ansible hat die Automatisierung einfach gemacht und ist zur universellen Automatisierungssprache geworden. Inzwischen sind die Vorteile in der IT-Community bekannt. Wie bei allen guten Technologien können jedoch Herausforderungen bestehen oder Ansätze kombiniert werden. Erwägen Sie die Verwendung von Dateien mit kommagetrennten Werten (CSV) und Ansible, um Linux-Benutzerkonten zu erstellen.

In diesem Artikel besteht das Ziel darin, die Benutzererstellung mit Ansible zu automatisieren. Eine Liste von Benutzern kann über eine externe Variablendatei mit vars_files übergeben werden oder über eine Schleife direkt in das Playbook. Das Problem entsteht, wenn die Liste der zu erstellenden Benutzer nur in einem Format wie CSV vorliegt, während der Ansible-Entwickler sich mit einer YAML-Liste wohler fühlt. Ich persönlich habe Situationen erlebt, in denen eine Benutzerliste mit Passwörtern in einer CSV-Datei bereitgestellt wird, mit der Anforderung, diese Benutzer auf mehreren Linux-Computern mit einem Automatisierungstool wie Ansible zu erstellen.

[Das könnte Ihnen auch gefallen:Automatisieren Sie die Bereitstellung virtueller Maschinen mit Ansible:Design ]

Was ist die Lösung?

Glücklicherweise wird Ansible mit mehr als tausend Modulen ausgeliefert, darunter eines zum Lesen von CSV-Dateien. Dieses Modul kann genau das bieten, was für diese Aufgabe benötigt wird. Unten sehen Sie das Modul in Aktion.

Betrachten Sie die CSV-Datei, die mehrere Felder wie Nutzername enthält , UID , Vornamen , Nachnamen , Gruppen und Passwort unten gezeigt. Die Anforderung besteht darin, alle diese Benutzer mit ihren relevanten Informationen auf mehreren Linux-Servern anzulegen.

Username,UID,First_name,Last_name,Groups,Password
booker12,9012,Rachel,Booker,Operations,iambooker
grey07,2070,Laura,Grey,Developers,iamgrey
johnson81,4081,Craig,Johnson,Operations,iamjohnson
jenkins46,9346,Mary,Jenkins,Developers,iamjenkins
smith79,5079,Jamie,Smith,Operations,iamsmith

Schritt 1

Nachdem Sie nun eine CSV-Datei haben, besteht der nächste Schritt darin, Ansible dazu zu bringen, diese CSV-Datei zu lesen. Verwenden Sie dazu die read_csv Modul. Um auszudrucken, wie Ansible die CSV-Datei geparst hat, verwenden Sie debug Modul. Beachten Sie die Verwendung von delegate_to:localhost in der ersten Aufgabe. Das liegt daran, dass die Datei username.csv auf dem Kontrollknoten und nicht auf den verwalteten Hosts vorhanden ist. Ansible analysiert diese CSV-Datei in einem Listenformat mit mehreren Wörterbüchern darin. Aus diesem Grund müssen Sie die Untervariable list hinzufügen bis zum Ende Ihrer ursprünglich registrierten Variable user_list .

---
- name: create users from csv file
  hosts: all
  tasks:
   - name: reading the csv file
     read_csv:
      path: username.csv
     register: user_list
     delegate_to: localhost

   - name: display user_list data
     debug:
      var: user_list.list

Schritt 2

Wenn Sie dieses Playbook ausführen, sehen Sie, dass die Ausgabe eine Liste enthält, wie durch das Paar eckiger Klammern angegeben. Diese Liste enthält ferner ein Wörterbuch, das durch die geschweiften Klammern angegeben ist. Jede Zeile in der CSV-Datei wurde basierend auf der Kommatrennung zwischen ihnen in ein Wörterbuch konvertiert. Ein Wörterbuch wird verwendet, um Daten in einem Paar aus Schlüsseln und Werten zu speichern. Der Schlüssel ist beispielsweise First_name , und der Wert ist Rachel .

ok: [192.168.0.3] => {
    "user_list.list": [
        {
            "First_name": "Rachel",
            "Groups": "Operations",
            "Last_name": "Booker",
            "Password": "iambooker",
            "UID": "9012",
            "Username": "booker12"
        },
        {
            "First_name": "Laura",
            "Groups": "Developers",
            "Last_name": "Grey",
            "Password": "iamgrey",
            "UID": "2070",
            "Username": "grey07"
        },
        {
            "First_name": "Craig",
            "Groups": "Operations",
            "Last_name": "Johnson",
            "Password": "iamjohnson",
            "UID": "4081",
            "Username": "johnson81"
        },
      -------OUTPUT OMITTED-------
        }
    ]
}

Schritt 3

Sie können die CSV-Datei erfolgreich über Ansible lesen und drucken. Jetzt ist es an der Zeit, einen dieser Werte zu extrahieren, um zu sehen, ob Sie dieses Wörterbuch manipulieren können, um es an die Bedürfnisse des Benutzers anzupassen Modul in Ansible. Versuchen Sie etwas Einfaches wie das Extrahieren des Werts des Benutzernamens Schlüssel für alle Wörterbücher in dieser Liste. Dazu verwenden Sie den Benutzernamen des Wörterbuchs key als Untervariable für Ihre Ansible-Schleife.

----OUTPUT OMITTED----
- name: extract Username from all dictionaries
  debug:
    msg: "{{ item.Username }}"
    loop: "{{ user_list.list }}"

ok: [192.168.0.3] => (item={'Username': 'booker12', 'UID': '9012', 'First_name': 'Rachel', 'Last_name': 'Booker', 'Groups': 'Operations', 'Password': 'iambooker'}) => {
    "msg": "booker12"
}
ok: [192.168.0.3] => (item={'Username': 'grey07', 'UID': '2070', 'First_name': 'Laura', 'Last_name': 'Grey', 'Groups': 'Developers', 'Password': 'iamgrey'}) => {
    "msg": "grey07"
}
----OUTPUT OMITTED----

Wie Sie hier sehen können, haben Sie den Benutzernamen extrahiert Werte aus den Wörterbüchern. Nach demselben Konzept können Sie diese Werte in den Namen einfügen Feld des Benutzers Modul zum Erstellen der Benutzer.

Schritt 4

Nachdem Sie nun den Wert des gewünschten Schlüssels extrahiert haben, sollten Sie in der Lage sein, mit allen Schlüssel-Wert-Paaren zu arbeiten. Legen Sie sie im Benutzer ab Modul, um Ihre Benutzer mit allen erforderlichen Informationen zu erstellen. Beachten Sie das Passwort Option des Arbeitsplatzmoduls. Es enthält einen Filter, um das Passwort zu verschlüsseln Wert mit dem SHA-512-Algorithmus. Dies geschieht, weil RHEL8 SHA-512 verwendet, um Benutzerkennwörter zu verschlüsseln. Dieses Passwort wird verschlüsselt in /etc/shadow gespeichert Datei auf den verwalteten Hosts. Auch der Kommentar Option enthält zwei Variablen, weil Sie GECOS möchten (Benutzerkommentare) Feld des Benutzers mit Vor- und Nachname. Zum Beispiel der Benutzer booker12 werden ihre GECOS haben als "Rachel Booker". Darüber hinaus verwenden Sie in dieser Aufgabe die Rechteausweitung, da für die Benutzererstellung Root-Rechte erforderlich sind.

-----OUTPUT OMITTED-----  
- name: create users from the csv
  user:
    name: "{{ item.Username }}"
    uid: "{{ item.UID }}"
    groups: "{{ item.Groups }}"
    append: true
    password: "{{ item.Password | password_hash('sha512') }}"
    comment: "{{ item.First_Name }} {{ item.Last_Name }}"
    state: present
  loop: "{{ user_list.list }}"
  become: true

[ Ein kostenloser Kurs für Sie:Virtualization and Infrastructure Migration Technical Overview. ] 

Abschluss

Sie haben die angegebenen Benutzer erfolgreich mit ihrer UID erstellt , Gruppen , Passwort und GECOS indem Sie die gewünschten Werte aus einer CSV-Datei extrahieren. Dies ist praktisch, da die meisten Unternehmen Formate wie CSV verwenden, um ihre Daten zu speichern und zu verwalten. Ein Ansible-Entwickler, der CSV-Dateien bearbeiten kann, kann seine Umgebung effizient verwalten, ohne alles von Grund auf neu direkt in das Playbook oder eine YAML-Datei mit externen Variablen schreiben zu müssen. Um Ihre Umgebung weiter effektiv zu verwalten, würde ich die Verwendung von Ansible Tower empfehlen, der von Red Hat angebotenen Ansible-Unternehmenslösung. Vielleicht entscheiden Sie sich auch für das Schulungsangebot DO447 – Advanced Automation:Ansible Best Practices.


Linux
  1. Dateiberechtigungen unter Linux mit Beispiel

  2. Erstellen Sie eine Linux-Auslagerungsdatei

  3. So erstellen Sie ein ZFS-Dateisystem mit Dateikomprimierung unter Linux

  4. Wie erstelle ich eine Datei in Linux aus dem Terminalfenster?

  5. Lesen einer CSV-Datei mit SQL-Abfragen aus der Linux-Shell

So erstellen Sie eine Datei unter Linux

Linux-WC-Befehl mit Beispielen

So erstellen Sie Verzeichnisse aus einer Textdatei unter Linux

So erstellen Sie neue Benutzer in OpenShift mit htpasswd und OAuth

4 Möglichkeiten zum Erstellen einer neuen Datei unter Linux

4 Stat-Befehle in Linux mit Beispiel für Anfänger