Я хочу запропонувати ще одне рішення:
- 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
Чому це краще? Як уже зазначалося тут, п'єси з відповідями повинні бути безсильними. Ви повинні думати про них не як послідовність дій в імперативному стилі, а як бажаний стан, декларативний стиль. В результаті ви повинні мати змогу запускати його кілька разів і отримувати той самий результат, той самий стан сервера.
Це все звучить чудово, але є деякі нюанси. Один з них - управління користувачами. "Бажаний стан" означає, що кожного разу, коли ви запустите гру, яка створює користувача, він буде оновлюватися, щоб відповідати саме такому стану. Під "оновленим" я маю на увазі, що його пароль теж буде змінено. Але, швидше за все, це не те, що потрібно. Зазвичай вам потрібно створити користувача, встановити та термін дії його пароля лише один раз, подальший цикл відтворення не повинен оновлювати його пароль.
На щастя, Ansible має update_password
атрибут у user
модулі, який вирішує цю проблему. Змішуючи це з зареєстрованими змінними, ви можете також термін дії його пароля лише тоді, коли користувач фактично оновлений.
Зауважте, що якщо змінити оболонку користувача вручну (припустимо, вам не сподобається оболонка, яку злий адміністратор змусив у своїй грі), користувач буде оновлений, таким чином його термін дії буде втрачено.
Також зверніть увагу на те, як ви можете легко використовувати початкові паролі для простого тексту у п’єсах. Не потрібно кодувати їх деінде та вставляти хеші, ви можете використовувати для цього фільтр Jinja2 . Однак це може бути вадою безпеки, якщо хтось увійде в систему, перш ніж ви робите це.
password
не повинен бути в простому тексті, а скоріше попередньо попередньо підготовлений.