Je souhaite proposer encore une autre solution:
- 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
Pourquoi c'est mieux? Comme cela a déjà été noté ici, les jeux Ansible doivent être idempotents. Vous ne devriez pas les considérer comme une séquence d'actions dans un style impératif, mais comme un état souhaité, un style déclaratif. En conséquence, vous devriez pouvoir l'exécuter plusieurs fois et obtenir le même résultat, le même état de serveur.
Tout cela sonne bien, mais il y a quelques nuances. L'un d'eux est la gestion des utilisateurs. «État souhaité» signifie que chaque fois que vous exécutez une lecture qui crée un utilisateur, il sera mis à jour pour correspondre exactement à cet état. Par «mis à jour», je veux dire que son mot de passe sera également modifié. Mais ce n'est probablement pas ce dont vous avez besoin. Habituellement, vous devez créer un utilisateur, définir et expirer son mot de passe une seule fois, les autres parties ne doivent pas mettre à jour son mot de passe.
Heureusement, Ansible a un update_password
attribut dans le user
module qui résout ce problème. En mélangeant cela avec des variables enregistrées, vous pouvez également expirer son mot de passe uniquement lorsque l'utilisateur est réellement mis à jour.
Notez que si vous changez manuellement le shell de l'utilisateur (supposons que vous n'aimez pas le shell que l'administrateur maléfique a forcé dans son jeu), l'utilisateur sera mis à jour, donc son mot de passe sera expiré.
Notez également comment vous pouvez facilement utiliser les mots de passe initiaux en texte brut dans les jeux. Pas besoin de les encoder ailleurs et de coller des hachages, vous pouvez utiliser le filtre Jinja2 pour cela. Cependant, cela peut être une faille de sécurité si quelqu'un se connecte avant vous.
password
n'est pas censé être en texte brut mais plutôt préhaché.