CentOS
Ansible
構成管理

Ansibleでユーザ追加とグループ作成方法

More than 1 year has passed since last update.


ansibleでユーザとグループの設定する


イベントリファイルの作成

dev-serverという親グループを作成し、共通設定としてcommon-baseという子グループを作成し、dev-serverを包含させる。

親グループを複数作成し、子グループへ属させことで、実行タスクを振り分けPlayBookの再利用性を高めたいのでこの構成を組む。


staging

[dev-server]

dev002

[common-base:children]
dev-server



マスタープレイブック作成

実行ホストと実行タスクが増えた時に修正が容易になるように、マスタープレイブックはシンプルにする。

今回は1つのymlのみinculuedさせる


site.yml

---

- include: common-base.yml


グループのプレイブック作成

実行ホストをイベントリで設定したグループを指定し、変数を定義したymlファイルとタスクを定義したymlファイルをinculdeする


common-base.yml

---

- hosts: common-base
vars_files:
- ./vars/usergroup.yml
tasks:
- include: ./tasks/user-group-setting.yml


変数定義ファイルの作成

いろいろなサイトをみたところkey名にユーザー名を当てているものがあったが、拡張性が悪くなるので以下のように定義。


usergroup.yml

usergroup:

user:
name: hoge
group: hoge
uid: 4519
gid: 4519
password: $6$hoge$zOyVU7p6q2aLNjyi7.WZy8sgiSqUPRnQBYruV9iAIdBr5p3tqipt9ZscPHlwe8wBEW91jb4mB2fLGPY7dsRBA/

group:
name: hogegroup
gid: 1919



パスワードの作成

AnsibleのUSERモジュールで設定するパスワードはハッシュ化されたものを記載する必要がある。

以下でハッシュ化して変数ファイルのpasswordに設定

python -c 'import crypt; print crypt.crypt("123456789", "$6$hogehoge$")'

※ pythonではcrypt.crypt("ここにパスワード","$6$ここにハッシュkey")でHASH化できるのでそれをprintさせて取得する


タスクファイルの作成

構築対象のサーバーの設定をタスクとして定義する。ユーザ作成とグループ作成を行う場合は

userモジュールとgroupモジュールを利用して変数定義ファイルから設定値を取得してユーザとグループを設定する


user-group-setting.yml

- name: create group

group: name={{usergroup.group.name}} gid={{usergroup.group.gid}}

- name: add users that join to group (wheel and usergroup)
user: name={{usergroup.user.name}} uid={{usergroup.user.uid}} state=present password={{usergroup.user.password}} groups={{usergroup.user.group}},wheel

- name: user join to other group
user: name={{usergroup.user.name}} append=yes groups={{usergroup.group.name}}

- name: ~/.ssh for users exist
file: path="/home/{{usergroup.user.name}}/.ssh" state=directory owner={{usergroup.user.name}} group={{usergroup.user.group}} mode=0700



実行

テストをして問題ないことを確認したら実行する


シンタックステスト

$ ansible-playbook -i ~/ansible/playbook/common-playbook/staging  ~/ansible/playbook/common-playbook/site.yml --syntax-check


実行タスクリストを確認

$ ansible-playbook -i ~/ansible/playbook/common-playbook/staging  ~/ansible/playbook/common-playbook/site.yml --list-task


リハーサル(dry-rub)

$ ansible-playbook -i ~/ansible/playbook/common-playbook/staging  ~/ansible/playbook/common-playbook/site.yml --check


本番

$ ansible-playbook -i ~/ansible/playbook/common-playbook/staging  ~/ansible/playbook/common-playbook/site.yml


参考

http://docs.ansible.com/ansible/playbooks_best_practices.html#top-level-playbooks-are-separated-by-role

http://knowledge.sakura.ad.jp/tech/3084/