Ansibleでは、ユーザーを管理するためのUserモジュールが提供されており、こちらを活用することでユーザー管理の業務を効率化することが出来ます。
こちらの記事にてUserモジュールを使用して特定の規則に沿ってユーザー作成を行うための方法をご紹介します。
Userモジュール
AnsibleのUser モジュールは Name パラメーターに値を与えてあげることで、そのユーザーを作成してくれます。この時、パラメーターを追加することで同時に Group やパスワードの指定も可能です。サンプルコードではシンプルにUserの作成を行う例を紹介します。
---
- name: Ensure users
hosts: node1
become: yes
tasks:
- name: Create user
user:
name: user001
state: present
実行結果は以下の通り
[student10@ansible ansible-files]$ ansible-playbook singleuser.yml
PLAY [Ensure users] ************************************************************
TASK [Gathering Facts] *********************************************************
ok: [node1]
TASK [Create user] *************************************************************
changed: [node1]
PLAY RECAP *********************************************************************
node1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
このように、Ansibleを使用してユーザーの作成が行えました。しかし、日々の運用ではユーザーを大量に作成する機会も多いと思います。その時に活躍するのが roop 機能です。
引用:Ansible Workshop
https://github.com/ansible/workshops/blob/master/exercises/ansible_rhel/1.5-handlers/README.ja.md
---
- name: Ensure users
hosts: node1
become: yes
tasks:
- name: Ensure three users are present
user:
name: "{{ item }}"
state: present
loop:
- dev_user
- qa_user
- prod_user
UserモジュールのNameパラメーターが {{ item }} が設定されており、このitem変数には loop で指定された項目が順に入力され実行されます。つまり、ここでは「dev_user」「qa_user」「prod_user」が順に入力され、ユーザーの作成が行われます。実行結果は下記のようになります。
[student9@ansible ansible-files]$ ansible-playbook loop_users.yml
PLAY [Ensure users] ************************************************************
TASK [Gathering Facts] *********************************************************
ok: [node1]
TASK [Ensure three users are present] ******************************************
changed: [node1] => (item=dev_user)
changed: [node1] => (item=qa_user)
changed: [node1] => (item=prod_user)
PLAY RECAP *********************************************************************
node1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
特定の規則に沿ってユーザーの作成を行いたい場合は、with_sequence を使用してユーザーの作成を行うことができます。
下記の例では0からスタートして10まで、つまり10回User作成が行われ、その時のユーザー名のフォーマットが「testuser%03g」で記載されています。つまり1回目の実行では「testuser000」、2回目は「testuser001」、最後の11回目には「testuser010」が作成される形になります。
---
- name: Ensure users
hosts: node1
become: yes
tasks:
- name: loop sequence
user:
name: "{{ item }}"
with_sequence: start=0 end=10 stride=1 format=testuser%03g
実行結果は下記のとおりになります。
[student10@ansible ansible-files]$ ansible-playbook loop_users.yml
PLAY [Ensure users] ************************************************************
TASK [Gathering Facts] *********************************************************
ok: [node1]
TASK [loop sequence] ***********************************************************
changed: [node1] => (item=testuser000)
changed: [node1] => (item=testuser001)
changed: [node1] => (item=testuser002)
changed: [node1] => (item=testuser003)
changed: [node1] => (item=testuser004)
changed: [node1] => (item=testuser005)
changed: [node1] => (item=testuser006)
changed: [node1] => (item=testuser007)
changed: [node1] => (item=testuser008)
changed: [node1] => (item=testuser009)
changed: [node1] => (item=testuser010)
PLAY RECAP *********************************************************************
node1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
このように、AnsibleにてUserモジュールを使用したユーザー管理を行うことで日々の業務がより楽にそして確実に行うことも出来ます。4月にはユーザー作成業務が大量に必要になるケースがあるかと思います。そのときにはこちらのUserモジュールが活躍する場がありましたら是非ご活用ください。