Başka bir çözüm önermek istiyorum:
- 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
Neden daha iyi? Burada daha önce belirtildiği gibi Ansible oyunları idempotent olmalıdır. Bunları emir niteliğindeki bir eylemler dizisi olarak değil, istenen bir durum, bildirim tarzı gibi düşünmelisiniz. Sonuç olarak, onu birden çok kez çalıştırabilmeli ve aynı sonucu, aynı sunucu durumunu alabilmelisiniz.
Bunların hepsi kulağa harika geliyor ama bazı nüanslar var. Bunlardan biri kullanıcıları yönetmek. "İstenen durum", bir kullanıcı oluşturan bir oyunu her çalıştırdığınızda, kullanıcının tam olarak bu duruma uyacak şekilde güncelleneceği anlamına gelir. "Güncellenmiş" derken şifresinin de değişeceğini kastediyorum. Ama büyük ihtimalle ihtiyacın olan şey bu değil. Genellikle, kullanıcı oluşturmanız, şifresini yalnızca bir kez ayarlamanız ve sonlandırmanız gerekir, daha fazla oynatma işlemi şifresini güncellememelidir.
Neyse ki, Ansible modülünde bu sorunu çözen bir update_password
öznitelik var . Bunu kayıtlı değişkenlerle karıştırarak , şifresini yalnızca kullanıcı gerçekten güncellendiğinde sona erdirebilirsiniz.user
Kullanıcının kabuğunu manuel olarak değiştirirseniz (farz edin, kötü yöneticinin oyunda zorladığı kabuğu beğenmezsiniz), kullanıcı güncellenecek ve bu nedenle şifresinin süresi dolacaktır.
Ayrıca oyunlarda düz metin ilk şifrelerini nasıl kolayca kullanabileceğinizi unutmayın. Bunları başka bir yerde kodlamanıza ve hash'leri yapıştırmanıza gerek yok, bunun için Jinja2 filtresini kullanabilirsiniz . Ancak, sizden önce birisi oturum açarsa bu bir güvenlik açığı olabilir.
password
düz metin değil, önceden karıştırılmış olması gerekiyor.