Dies ist eine alte Version des Dokuments!
Ansible - weiterte Beispiele: Admin Benutzer verwalten
Im Eingangskapitel Grundlagen haben wir uns mit der Installation bereits befasst. Mit den Hintergrundinformationen haben wir uns auch schon in den beiden Kapiteln Playbooks und YAML - was ist das? eingehend beschäftigt, sowie erste Erfahrungen mit Playbooks gesammelt.
Aufgabenstellung
Für die Grundkonfiguration in der Basisausführung der Ansible-Umgebung, wie wir Sie im Kapitel Erste Schritte Rund um Ansible - (Grund-)Konfiguration Eingangs kennengelernt hatten, benötigen wir eine vordefinierte Grundinstallation und Konfiguration. Damit diese Erstkonfiguration unserer Ansible-Umgebung nicht von Hand erfolgen muss, greifen wir auf das Playbook ansible_grundconfig_v1.yml
zurück.
Mit Hilfe dieses Playbooks können alle erforderlichen Konfigurationsschritte reproduzierbar und beliebig oft abgesetzt werden. Bei Bedarf ist als also jederzeit ohne grossen Aufwand möglich den Ansible-Controll-Node neu aufzusetzen und das System für spätere Playbook-Rollouts vorzubereiten, den Host also auch initial frisch zu versorgen.
Folgende Schritte sollen von dem playbook abgearbeitet werden:
- Kopieren der Ansible-Konfigurationsdatei /etc/ansible/ansible.cfg in das
$HOME
-Verzeichnis des Admin-Users. - Anpassen, sprich konfigurieren der individuellen Ansible Umgebung.
- Ansible Directory Layout anlegen und mit Dummy-Inhalten versorgen.
Schliesslich wollen wir unsere Zeit als Admin ja auch sinnvoll nutzen und mit möglichst geringen Aufwand zu Ziel kommen.
Lösung
Der ungeduldigen Leser kann auch direkt zur Tat schreiten und das manuelle Anlegen des Verzeichnisses und des Ansible-Scripts überspringen. Mit Folgendem Befehl erledigt man dies sozusagen auf einem Rutsch:
$ mkdir ~/ansible ; wget https://gitlab.nausch.org/django/example_13/-/archive/main/example_13-main.tar.gz -O - | tar -xz --strip-components=1 -C ~/ansible
Anschliessend kann man direkt zur Ausführung schreiten.
$ ansible-vault edit inventories/production/group_vars/all/admins
- admins
linux_admins: - user : Michael Nausch name : django groups : wheel ids : 1000 shell : /bin/bash state : present pwd : $6$QYCbUeY2/EecXmL4$iA7Q.M457er0F0354573RoPyKcbbPMozx8uFYKMpZLJnz2JIoAlcMxi0o0b1zJywJLECw1fSB2OCdfzc9vOX1 key : ssh-ed25519 AAAAC3N1NTE5A0aTHP001zaC1lZDI1NTE5AAAAINPs/cN40aTu2HTGeHhV7IV1EngqT5 openpgp:0xDAED833F - user : Christoph Leichi name : rookie groups : wheel ids : 1001 shell : /bin/bash state : present pwd : $6$n9UE0JVV7T.nzFJOdSY1dHDEsbfY3$0SPNKmewfaQ0z5thaRMrrrI9Uig.nzFJOdSY1erIZbw5yzDqeCg4S2oXa8zn2jEf9KDfjg31 key : ssh-ed25519 AAAAC3NzaqK6Pb38bv0oM9fw0C1lZDI1NTE5AAAAIDo46Pb38bv0oM9fmgM6byylc0815 rookie@nausch.org - user : Oliver Gewinnbringer name : oliver groups : wheel ids : 1002 shell : /bin/bash state : absent pwd : $6$nJVSYV9J17.SY1v0oM9fow8Do46dHDEsbfY3$0SPNKmewfaQ0z5tsafZi3haRMrrrI9Uig.OdSY1e6dHDEsbfY3$rI51ewfaQ0z5th key : ssh-ed25519 AAAAK6Pb38bv0oM9fw8DoOdSY1er4b38bNzaqK6Pb38bv0oM9fw01erIZbw5yzDqeCC5 oliver@nausch.org
--- - name: "Sicherstellen dass die Gruppen für Admin-User existieren" ansible.builtin.group: gid: '{{ item.ids }}' name: '{{ item.name }}' state: present with_items: '{{ linux_admins }}' - name: "Sicherstellen dass die Admin-User existieren" ansible.builtin.user: append: true comment: '{{ item.user }}' create_home: true force: true state: '{{ item.state }}' group: '{{ item.name }}' groups: '{{ item.groups }}' name: '{{ item.name }}' password: '{{ item.pwd }}' shell: '{{ item.shell }}' uid: '{{ item.ids }}' remove: true with_items: "{{ linux_admins }}" - name: "Gruppe entfernen, sofern der User zum Löschen gekennzeichnet ist mit absent im Inventory/Vault" ansible.builtin.group: gid: '{{ item.ids }}' name: '{{ item.name }}' state: '{{ item.state }}' with_items: '{{ linux_admins }}' - name: "SSH-Client-Verzeichnis anlegen" ansible.builtin.file: path: /home/{{ item.name }}/.ssh state: directory owner: '{{ item.name }}' group: '{{ item.name }}' mode: '0700' when: ' item.state == "present"' with_items: '{{ linux_admins }}' - name: "SSH-Key des Admins hinterlegen" ansible.builtin.copy: dest: /home/{{ item.name }}/.ssh/authorized_keys content: | {{ item.key }} owner: '{{ item.name }}' group: '{{ item.name }}' mode: '0600' when: ' item.state == "present"' with_items: '{{ linux_admins }}' - name: "VIM Konfig ablegen" ansible.builtin.copy: src: files/vimrc dest: /home/{{ item.name }}/.vimrc owner: '{{ item.name }}' group: '{{ item.name }}' mode: '0640' when: ' item.state == "present"' with_items: '{{ linux_admins }}' - name: "bashrc Konfig ablegen" ansible.builtin.copy: src: files/bashrc dest: /home/{{ item.name }}/.bashrc owner: '{{ item.name }}' group: '{{ item.name }}' mode: '0640' when: ' item.state == "present"' with_items: '{{ linux_admins }}' - name: "bash_logout Konfig ablegen" ansible.builtin.copy: src: files/bash_logout dest: /home/{{ item.name }}/.bash_logout owner: '{{ item.name }}' group: '{{ item.name }}' mode: '0640' when: ' item.state == "present"' with_items: '{{ linux_admins }}' - name: "bash_profile Konfig ablegen" ansible.builtin.copy: src: files/bash_profile dest: /home/{{ item.name }}/.bash_profile owner: '{{ item.name }}' group: '{{ item.name }}' mode: '0640' when: ' item.state == "present"' with_items: '{{ linux_admins }}' - name: "SSH-Client-Verzeichnis entfernen, sofern der User zum Löschen gekennzeichnet ist mit absent im Inventory/Vault" ansible.builtin.file: path: /home/{{ item.name }}/.ssh state: absent when: ' item.state == "absent" ' with_items: '{{ linux_admins }}' ...