Help us understand the problem. What is going on with this article?

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

More than 3 years have 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/

okatai
gunosy
情報キュレーションサービス「グノシー」や「ニュースパス」の開発・運営を通じて、情報を世界の人に最適に届けていきます。
http://gunosy.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away