Я хочу предложить еще одно решение:
- 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 пьесы должны быть идемпотентными. Вы должны думать о них не как последовательность действий в императивном стиле, а как желаемое состояние, декларативный стиль. В результате вы сможете запустить его несколько раз и получить тот же результат, то же самое состояние сервера.
Все это звучит здорово, но есть некоторые нюансы. Одним из них является управление пользователями. «Желаемое состояние» означает, что каждый раз, когда вы запускаете игру, которая создает пользователя, он будет обновлен, чтобы точно соответствовать этому состоянию. Под «обновлением» я подразумеваю, что его пароль также будет изменен. Но, скорее всего, это не то, что вам нужно. Как правило, вам нужно создать пользователя, установить и закончить его пароль только один раз, дальнейшие прогоны воспроизведения не должны обновлять его пароль.
К счастью, Ansible имеет атрибут update_password
в модуле user
, который решает эту проблему. Смешивая это с зарегистрированными переменными , вы также можете истек его пароль только тогда, когда пользователь фактически обновлен.
Обратите внимание, что если вы меняете оболочку пользователя вручную (предположим, вам не нравится оболочка, которую злодейский администратор заставил играть), пользователь будет обновлен, поэтому его пароль будет истек.
Также обратите внимание, как вы можете легко использовать начальные пароли обычного текста в играх. Нет необходимости кодировать их где-то еще и вставлять хэши, вы можете использовать фильтр Jinja2 для этого. Однако это может быть недостатком безопасности, если кто-то случайно заходит в систему, прежде чем вы это сделаете.
Мой rails_helper пропустил это:
CarrierWave.configure do |config|
config.root = Rails.root.join('spec/fixtures')
config.cache_only = true
config.enable_processing = false
config.base_path = "/"
end