■ はじめに
Ansible には、ユーザーを管理(作成、削除など)する user
モジュール があります。
この記事では、 user
モジュールの公式ドキュメントに記載されている使用例をベースにして、使い方を説明します。
なお、公式ドキュメントの使用例は、Playbook 単位ではなくtask 単位で記載されています。この記事では Playbook 単位で例示します。
動作確認環境
- Ansible 2.3.0, 2.7.8
- CentOS 7.6 (Ansible 側、管理対象ホスト側とも)
目次
- ■ はじめに
- ■ [例1] 単純にユーザーを作成する
- ■ [例2] プライマリグループとユーザーIDを指定してユーザーを作成する
- ■ [例3] サブグループと使用シェルを指定してユーザーを作成する
- ■ [例4] ユーザーを削除する
- ■ まとめ
■ [例1] 単純にユーザーを作成する
Playbook
ユーザー kingyo
を作成する Playbook です。公式ドキュメントの使用例にはありませんが、一番シンプルな使い方です。
- hosts: linux gather_facts: no become: yes tasks: - name: Add the user 'kingyo' user: name: kingyo
name
オプション- 対象のユーザー名を指定します。(必須)
本タスクで指定していないその他のオプション例
state
オプション- 対象のユーザーが存在する状態(
present
)にするか、存在しない状態(absent
)にするかを指定します。(デフォルトpresent
) - ここでは
state: absent
を指定しているため、存在しない状態(存在する場合は削除)という指定になります。
- 対象のユーザーが存在する状態(
実行ログ
ここでは、kingyo
ユーザー未作成の状態で Playbook を実行します。
- リモート上の事前確認
$ id kingyo id: kingyo: no such user # kingyo ユーザーがまだ存在しない
- Ansible 側
$ ansible-playbook -i inventory user_add_simple.yml PLAY [linux] ************************************************************************************************** TASK [Add the user 'kingyo'] ********************************************************************************** changed: [linux1] PLAY RECAP **************************************************************************************************** linux1 : ok=1 changed=1 unreachable=0 failed=0
- リモート上の事後確認
$ id kingyo uid=1041(kingyo) gid=1041(kingyo) groups=1041(kingyo) # kingyo ユーザーが作成された $ cat /etc/passwd | grep kingyo kingyo:x:1041:1041::/home/kingyo:/bin/bash
無事に指定した通りに、ユーザー kingyo
が作成されました。
group
や groups
オプションを指定していなかったため、暗黙的に新たに作成された kingyo
グループにプライマリグループとして所属しています。
■ [例2] プライマリグループとユーザーIDを指定してユーザーを作成する
Playbook
作成済みの admin
グループにプライマリグループとして所属し、ユーザーID 1040
のユーザー jonhnd
を作成する Playbook です
- hosts: linux gather_facts: no become: yes tasks: - name: Add the user 'johnd' with a specific uid and a primary group of 'admin' user: name: johnd comment: John Doe uid: 1040 group: admin
name
オプション- 対象のユーザー名を指定します。(必須)
comment
オプション/etc/passwd
のコメント欄に記入するコメントを指定します。
uid
オプション- 対象のユーザーIDを指定します。
group
オプション- 対象のユーザーが所属するプライマリグループ名を指定します。
- 似たようなオプションに
groups
(サブグループの指定)があるので注意してください。
実行ログ
ここでは、johnd
ユーザーは未作成、admin
グループは作成済みの状態で Playbook を実行します。
$ ansible-playbook -i inventory user_add.yml PLAY [linux] ********************************************************************************** TASK [Add the user 'johnd' with a specific uid and a primary group of 'admin'] **************** changed: [linux1] PLAY RECAP ************************************************************************************ linux1 : ok=1 changed=1 unreachable=0 failed=0 $ $ id johnd uid=1040(johnd) gid=1002(admin) groups=1002(admin) $ cat /etc/passwd | grep johnd johnd:x:1040:1002:John Doe:/home/johnd:/bin/bash # johnd ユーザーが作成された
無事に指定した通りに、ユーザー johnd
が作成されました。
■ [例3] サブグループと使用シェルを指定してユーザーを作成する
Playbook
作成済みの admins
、developers
グループにサブグループとして所属し、`/bin/bash
を使用するユーザー james
を作成する Playbook です。
- hosts: linux gather_facts: no become: yes tasks: - name: Add the user 'james' with a bash shell, appending the group 'admins' and 'developers' to the user's groups user: name: james shell: /bin/bash groups: admins, developers append: yes
name
オプション- 対象のユーザー名を指定します。(必須)
shell
オプション- 使用するシェルを指定します。
groups
オプション- 対象のユーザーが所属するサブグループ名を指定します。
- 複のグループ名を指定できます。Ansible 2.3 からは、カンマ区切りの他にリストも指定できます。
- 似たようなオプションに
group
(プライマリグループの指定)があるので注意してください。
append
オプションgroups
オプションで指定したグループ名を追加所属させるかどうかを指定します。(デフォルトno
)append: no
を指定(デフォルト)の場合、groups
オプションで指定したグループ以外の所属は外れます。
実行ログ
ここでは、james
ユーザーは未作成、admins
、developers
グループは作成済みの状態で Playbook を実行します。
$ ansible-playbook -i inventory user_add_goups.yml PLAY [linux] ********************************************************************************** TASK [Add the user 'james' with a bash shell, appending the group 'admins' and 'developers' to the user's groups] *** changed: [linux1] PLAY RECAP ************************************************************************************ linux1 : ok=1 changed=1 unreachable=0 failed=0 $ id james uid=1002(james) gid=1005(james) groups=1005(james),1003(admins),1004(developers) # james ユーザーが作成された $ cat /etc/passwd | grep james james:x:1002:1005::/home/james:/bin/bash
無事に指定した通りに、ユーザー james
が作成されました。
■ [例4] ユーザーを削除する
Playbook
作成済みのユーザー johnd
を削除する Playbook です。
- hosts: linux gather_facts: no become: yes tasks: - name: Remove the user 'johnd' user: name: johnd state: absent remove: yes
name
オプション- 対象のユーザー名を指定します。(必須)
state
オプション- 対象のユーザーが存在する状態(
present
)にするか、存在しない状態(absent
)にするかを指定します。(デフォルトpresent
)
- 対象のユーザーが存在する状態(
remove
オプションstate: absent
の指定場合った場合、対象のユーザーに関連づいたディレクトリを削除します。(デフォルトno
)
実行ログ
$ id johnd uid=1040(johnd) gid=1002(admin) groups=1002(admin) # johnd ユーザーがまだ存在する $ cat /etc/passwd | grep johnd johnd:x:1040:1002:John Doe:/home/johnd:/bin/bash $ sudo ls -al /home/johnd/ total 20 # johnd のホームディレクトリがまだ存在する drwx------. 2 1040 admin 4096 Mar 3 01:53 . drwxr-xr-x. 6 root root 4096 Mar 3 02:08 .. -rw-r--r--. 1 1040 admin 18 Oct 30 17:07 .bash_logout -rw-r--r--. 1 1040 admin 193 Oct 30 17:07 .bash_profile -rw-r--r--. 1 1040 admin 231 Oct 30 17:07 .bashrc $ ansible-playbook -i inventory user_remove.yml PLAY [linux] ******************************************************************************************************************** TASK [Remove the user 'johnd'] ************************************************************************************************** changed: [linux1] PLAY RECAP ********************************************************************************************************************** linux1 : ok=1 changed=1 unreachable=0 failed=0 $ id johnd id: johnd: no such user # johnd ユーザーが削除された $ sudo ls -al /home/johnd/ ls: cannot access /home/johnd/: No such file or directory # johnd のホームディレクトリも削除された
無事に指定した通りに、ユーザー johnd
とホームディレクトリも削除されました。
■ まとめ
公式ドキュメントの使用例をベースにして、user
モジュール の使い方を説明しました。
他に「こんなことできるかな?」と気になる事がありましたら、公式ドキュメントで詳細をご確認ください。
また、user モジュールは System modules
に分類されています。System modules
には、他にも、グループを管理する group
や、cron エントリを管理する cron
、などのモジュールがあります。詳細は System modules
の一覧からご確認ください。