対象のAnsibleのバージョンは1.9から利用できます。
コードは下記になります。
# 変数passwordに入っている値をsha512でハッシュ化
# ハッシュ化した値をユーザのパスワードとして設定する
# ログイン時は変数passwordに入っていた値を入力
user: name={{ user_name }} password={{ password |password_hash('sha512') }}
ユーザのパスワードは平文ではなく必ずハッシュ化した値が必要です。以前はハッシュ化した値を設定するためにPythonのコードをタスク中に
実行して結果を利用したり、事前にハッシュ化するコードを実行して結果を
直接埋め込んだりするなど手間がかかっていたのですが
password_hash()で簡単に設定ができるようになったと思います。
# このコードはAnsibleのドキュメントに記載されている方法 # Ansibleインストールマシンにpython-passlibを事前にインストールが必要 python -c "from passlib.hash import sha512_crypt; import getpass; print sha512_crypt.encrypt(getpass.getpass())"
# python-passlibをインストールせずに生成する方法
# $1$はMD5ハッシュの印
python -c 'import crypt; print crypt.crypt("password", "$1$mysalt$")'
# vars_promptでencryptを利用する変数を定義して
# Ansibleインストールマシンにpython-passlibをインストールしていない場合
# ERROR: passlib must be installed to encrypt vars_prompt values
# というエラーメッセージが表示され失敗します
vars_prompt:
- name: "password"
prompt: "ユーザーパスワードを入力"
private: yes
encrypt: "sha512_crypt"
confirm: yes
salt_size: 8
複数ユーザのパスワード一括設定で、ユーザごとにパスワードを別々のものにする必要があるときpassword_hash()の方法は使いやすいです。
sha512ハッシュにしているのはCentOS6がsha512を利用しているので。
参考
Ansible - How do I generate crypted passwords for the user module?
Ansible - Jinja2 filters / Hashing filters