Ich möchte noch eine andere Lösung vorschlagen:
- name: Create madhead user
user:
name: madhead
password: "{{ 'password' | password_hash('sha512') }}"
shell: /bin/zsh
update_password: on_create
register: madhead
- name: Force madhead to change password
shell: chage -d 0 madhead
when: madhead.changed
Warum ist es besser? Wie hier bereits erwähnt, sollten Ansible-Spiele idempotent sein. Sie sollten sie nicht als eine Abfolge von Aktionen im imperativen Stil betrachten, sondern als einen gewünschten Zustand, einen deklarativen Stil. Infolgedessen sollten Sie es mehrmals ausführen können und dasselbe Ergebnis und denselben Serverstatus erhalten.
Das klingt alles großartig, aber es gibt einige Nuancen. Einer von ihnen verwaltet Benutzer. "Gewünschter Status" bedeutet, dass jedes Mal, wenn Sie ein Spiel ausführen, das einen Benutzer erstellt, dieser aktualisiert wird, um genau diesem Status zu entsprechen. Mit "aktualisiert" meine ich, dass auch sein Passwort geändert wird. Aber höchstwahrscheinlich ist es nicht das, was Sie brauchen. Normalerweise müssen Sie einen Benutzer erstellen, sein Passwort nur einmal festlegen und ablaufen lassen. Weitere Wiedergabeläufe sollten sein Passwort nicht aktualisieren.
Glücklicherweise hat Ansible ein update_password
Attribut im user
Modul , das dieses Problem löst. Wenn Sie dies mit registrierten Variablen mischen, können Sie sein Passwort auch nur dann ablaufen lassen, wenn der Benutzer tatsächlich aktualisiert wird.
Beachten Sie, dass der Benutzer aktualisiert wird, wenn Sie die Shell des Benutzers manuell ändern (angenommen, Sie mögen die Shell nicht, die der böse Administrator in seinem Spiel erzwungen hat), sodass sein Passwort abgelaufen ist.
Beachten Sie auch, wie Sie einfache Klartext-Anfangspasswörter in Spielen verwenden können. Sie müssen sie nicht woanders codieren und Hashes einfügen. Sie können dafür den Jinja2-Filter verwenden . Dies kann jedoch eine Sicherheitslücke sein, wenn sich jemand vor Ihrer ersten Anmeldung anmeldet.
password
sollst du nicht im Klartext sein, sondern vorgewaschen.