ユーザー管理 (解答)¶
問題 (再掲)¶
| ユーザー名 | ユーザーID | ログインパスワード | グループ名 | 
|---|---|---|---|
| wwwuser01 | 10001 | password01 | www | 
| wwwuser02 | 10002 | password02 | www | 
| appuser01 | 20001 | password01 | app | 
| appuser02 | 20002 | password02 | app | 
パラメータ設計¶
グループのパラメータシート作成¶
---
- name: create/update group
  group:
    name: "{{ item.0 }}"
    gid: "{{ item.1 }}"
  with_together:
    - "{{ group_name }}"
    - "{{ group_id }}"
    - "{{ group_action }}"
  when: item.2 == 'present'
- name: create/update group
  group:
    name: "{{ item.0 }}"
    gid: "{{ item.1 }}"
  with_together:
    - "{{ group_name }}"
    - "{{ group_id }}"
    - "{{ group_action }}"
  when: item.2 == 'absent'
| 項目 | 説明 | 
|---|---|
| group_name | グループ名 | 
| group_id | グループID | 
| action | 構築時の設定 present: 作成/更新 absent: 削除 | 
Tip
Tip
 
| 設定項目 | 項目1設定値 | 項目2設定値 | 項目3設定値 | 
|---|---|---|---|
| 項目の名前 | グループ名 | グループID | 状態 | 
| 項目の名前(Rest API用) | group_name | group_id | state | 
| 入力方式 | 文字列(単一行) | 整数 | プルダウン選択 | 
| 最小値 | (項目なし) | 1000 | (項目なし) | 
| 最大値 | (項目なし) | (項目なし) | |
| 最大バイト数 | 32 | (項目なし) | (項目なし) | 
| 正規表現 | (項目なし) | (項目なし) | |
| 選択項目 | (項目なし) | (項目なし) | 入力用:状態:present-absent | 
| 参照項目 | (項目なし) | (項目なし) | |
| 初期値 | |||
| 必須 | ✓ | ✓ | ✓ | 
| 一意制約 | ✓ | ✓ | |
| 説明 | |||
| 備考 | 
| 項目名 | 設定値 | 
|---|---|
| 項番 | (自動入力) | 
| パラメータシート名 | グループ | 
| パラメータシート名(REST) | groups | 
| 作成対象 | パラメータシート(ホスト/オペレーションあり) | 
| 表示順序 | 4 | 
| バンドル利用 | 「利用する」にチェックを入れる(有効) | 
| 最終更新日時 | (自動入力) | 
| 最終更新者 | (自動入力) | 
ユーザーのパラメータシート作成¶
---
- name: create user
  user:
    name: "{{ item.0 }}"
    uid: "{{ item.1 }}"
    group: "{{ item.2 }}"
    comment: "{{ item.3 }}"
    home: "{{ item.4 }}"
    shell: "{{ item.5 }}"
    password: "{{ item.6 | password_hash('sha512') }}"
  with_together:
    - "{{ user_name }}"
    - "{{ user_id }}"
    - "{{ group }}"
    - "{{ comment }}"
    - "{{ home_dir }}"
    - "{{ login_shell }}"
    - "{{ password }}"
    - "{{ user_action }}"
    - "{{ password_apply }}"
  when: item.7 == 'present' and password_apply
- name: create user
  user:
    name: "{{ item.0 }}"
    uid: "{{ item.1 }}"
    group: "{{ item.2 }}"
    comment: "{{ item.3 }}"
    home: "{{ item.4 }}"
    shell: "{{ item.5 }}"
  with_together:
    - "{{ user_name }}"
    - "{{ user_id }}"
    - "{{ group }}"
    - "{{ comment }}"
    - "{{ home_dir }}"
    - "{{ login_shell }}"
    - "{{ user_action }}"
    - "{{ password_apply }}"
  when: item.6 == 'present' and not password_apply
- name: delete user
  user:
    state: absent
    name: "{{ item.0 }}"
    remove: 'yes'
  with_together:
    - "{{ user_name }}"
    - "{{ user_action }}"
  when: item.1 == 'absent'
| 項目 | 説明 | 
|---|---|
| user_name | ユーザー名 | 
| user_id | ユーザーID | 
| group_id | グループID | 
| comment | コメント | 
| home_dir | ホームディレクトリ | 
| login_shell | ログインシェル名 | 
| password | パスワード | 
| action | 構築時の設定 present: 作成/更新 absent: 削除 | 
| password_apply | 構築時のパスワード設定の有無 true: パスワードの設定を行う false: パスワードの設定を行わない | 
Tip
 
| 設定項目 | 項目1設定値 | 項目2設定値 | 項目3設定値 | 項目4設定値 | 項目5設定値 | 
|---|---|---|---|---|---|
| 項目の名前 | ユーザー名 | ユーザーID | パスワード | パスワード設定 | グループ | 
| 項目の名前(Rest API用) | user_name | user_id | password | password_apply | group | 
| 入力方式 | 文字列(単一行) | 整数 | パスワード | プルダウン選択 | プルダウン選択 | 
| 最大バイト数 | 32 | (項目なし) | 32 | (項目なし) | (項目なし) | 
| 正規表現 | (項目なし) | (項目なし) | (項目なし) | (項目なし) | |
| 最小値 | (項目なし) | 1000 | (項目なし) | (項目なし) | (項目なし) | 
| 最大値 | (項目なし) | (項目なし) | (項目なし) | (項目なし) | |
| 選択項目 | (項目なし) | (項目なし) | (項目なし) | パラメータシート作成:選択2:True-False | 入力用:グループ:グループ名 | 
| 参照項目 | (項目なし) | (項目なし) | (項目なし) | ||
| 初期値 | (項目なし) | False | |||
| 必須 | ✓ | ✓ | ✓ | ✓ | ✓ | 
| 一意制約 | ✓ | ✓ | |||
| 説明 | |||||
| 備考 | 
 
| 設定項目 | 項目6設定値 | 項目7設定値 | 項目8設定値 | 項目9設定値 | 
|---|---|---|---|---|
| 項目の名前 | ホームディレクトリ | ログインシェル | コメント | 状態 | 
| 項目の名前(Rest API用) | home_dir | login_shell | comment | state | 
| 入力方式 | 文字列(単一行) | 文字列(単一行) | 文字列(単一行) | プルダウン選択 | 
| 最大バイト数 | 128 | 32 | 128 | (項目なし) | 
| 正規表現 | (項目なし) | |||
| 最小値 | (項目なし) | (項目なし) | (項目なし) | (項目なし) | 
| 最大値 | (項目なし) | (項目なし) | (項目なし) | (項目なし) | 
| 選択項目 | (項目なし) | (項目なし) | (項目なし) | 入力用:状態:present-absent | 
| 参照項目 | (項目なし) | (項目なし) | (項目なし) | |
| 初期値 | /bin/bash | |||
| 必須 | ✓ | ✓ | ✓ | ✓ | 
| 一意制約 | ||||
| 説明 | ||||
| 備考 | 
| 項目名 | 設定値 | 
|---|---|
| 項番 | (自動入力) | 
| パラメータシート名 | ユーザー | 
| パラメータシート名(REST) | users | 
| 作成対象 | パラメータシート(ホスト/オペレーションあり) | 
| 表示順序 | 3 | 
| バンドル利用 | 「利用する」にチェックを入れる(有効) | 
| 最終更新日時 | (自動入力) | 
| 最終更新者 | (自動入力) | 
作業対象の登録¶
機器登録¶
作業手順の登録¶
注釈
Movement 登録¶
 
| Movement名 | Ansible利用情報 | |
|---|---|---|
| ホスト指定形式 | ヘッダーセクション | |
| ユーザー管理 | IP | ※ヘッダーセクションを参照 | 
- hosts: all
  remote_user: "{{ __loginuser__ }}"
  gather_facts: no
  become: yes
Ansible Playbook 登録¶
---
- name: create/update group
  group:
    name: "{{ item.0 }}"
    gid: "{{ item.1 }}"
  with_together:
    - "{{ group_name }}"
    - "{{ group_id }}"
    - "{{ group_action }}"
  when: item.2 == 'present'
- name: create/update group
  group:
    name: "{{ item.0 }}"
    gid: "{{ item.1 }}"
  with_together:
    - "{{ group_name }}"
    - "{{ group_id }}"
    - "{{ group_action }}"
  when: item.2 == 'absent'
---
- name: create user
  user:
    name: "{{ item.0 }}"
    uid: "{{ item.1 }}"
    group: "{{ item.2 }}"
    comment: "{{ item.3 }}"
    home: "{{ item.4 }}"
    shell: "{{ item.5 }}"
    password: "{{ item.6 | password_hash('sha512') }}"
  with_together:
    - "{{ user_name }}"
    - "{{ user_id }}"
    - "{{ group }}"
    - "{{ comment }}"
    - "{{ home_dir }}"
    - "{{ login_shell }}"
    - "{{ password }}"
    - "{{ user_action }}"
    - "{{ password_apply }}"
  when: item.7 == 'present' and password_apply
- name: create user
  user:
    name: "{{ item.0 }}"
    uid: "{{ item.1 }}"
    group: "{{ item.2 }}"
    comment: "{{ item.3 }}"
    home: "{{ item.4 }}"
    shell: "{{ item.5 }}"
  with_together:
    - "{{ user_name }}"
    - "{{ user_id }}"
    - "{{ group }}"
    - "{{ comment }}"
    - "{{ home_dir }}"
    - "{{ login_shell }}"
    - "{{ user_action }}"
    - "{{ password_apply }}"
  when: item.6 == 'present' and not password_apply
- name: delete user
  user:
    state: absent
    name: "{{ item.0 }}"
    remove: 'yes'
  with_together:
    - "{{ user_name }}"
    - "{{ user_action }}"
  when: item.1 == 'absent'
 
| Playbook素材名 | Playbook素材 | 
|---|---|
| group | 
 | 
| user | 
 | 
Movement と Ansible Playbook の紐付け¶
 
| Movement名 | Playbook素材 | インクルード順序 | 
|---|---|---|
| ユーザー管理 | group.yml | 1 | 
| ユーザー管理 | user.yml | 2 | 
代入値自動登録設定¶
 
| パラメータシート(From) | 登録方式 | Movement名 | IaC変数(To) | ||
|---|---|---|---|---|---|
| メニューグループ:メニュー:項目 | 代入順序 | Movement名:変数名 | 代入順序 | ||
| 代入値自動登録用:グループ:グループ名 | 1 | Value型 | ユーザー管理 | ユーザー管理:group_name | 1 | 
| 代入値自動登録用:グループ:グループID | 1 | Value型 | ユーザー管理 | ユーザー管理:group_id | 1 | 
| 代入値自動登録用:グループ:状態 | 1 | Value型 | ユーザー管理 | ユーザー管理:group_action | 1 | 
| 代入値自動登録用:グループ:グループ名 | 2 | Value型 | ユーザー管理 | ユーザー管理:group_name | 2 | 
| 代入値自動登録用:グループ:グループID | 2 | Value型 | ユーザー管理 | ユーザー管理:group_id | 2 | 
| 代入値自動登録用:グループ:状態 | 2 | Value型 | ユーザー管理 | ユーザー管理:group_action | 2 | 
| ... | ... | ... | ... | ... | ... | 
| 代入値自動登録用:グループ:グループ名 | 5 | Value型 | ユーザー管理 | ユーザー管理:group_name | 5 | 
| 代入値自動登録用:グループ:グループID | 5 | Value型 | ユーザー管理 | ユーザー管理:group_id | 5 | 
| 代入値自動登録用:グループ:状態 | 5 | Value型 | ユーザー管理 | ユーザー管理:group_action | 5 | 
 
 
 
 
 
| パラメータシート(From) | 登録方式 | Movement名 | IaC変数(To) | ||
|---|---|---|---|---|---|
| メニューグループ:メニュー:項目 | 代入順序 | Movement名:変数名 | 代入順序 | ||
| 代入値自動登録用:ユーザー:ユーザー名 | 1 | Value型 | ユーザー管理 | ユーザー管理:user_name | 1 | 
| 代入値自動登録用:ユーザー:ユーザーID | 1 | Value型 | ユーザー管理 | ユーザー管理:user_id | 1 | 
| 代入値自動登録用:ユーザー:パスワード | 1 | Value型 | ユーザー管理 | ユーザー管理:password | 1 | 
| 代入値自動登録用:ユーザー:パスワード設定 | 1 | Value型 | ユーザー管理 | ユーザー管理:password_apply | 1 | 
| 代入値自動登録用:ユーザー:グループ | 1 | Value型 | ユーザー管理 | ユーザー管理:group | 1 | 
| 代入値自動登録用:ユーザー:ホームディレクトリ | 1 | Value型 | ユーザー管理 | ユーザー管理:home_dir | 1 | 
| 代入値自動登録用:ユーザー:ログインシェル | 1 | Value型 | ユーザー管理 | ユーザー管理:login_shell | 1 | 
| 代入値自動登録用:ユーザー:コメント | 1 | Value型 | ユーザー管理 | ユーザー管理:comment | 1 | 
| 代入値自動登録用:ユーザー:状態 | 1 | Value型 | ユーザー管理 | ユーザー管理:user_action | 1 | 
| 代入値自動登録用:ユーザー:ユーザー名 | 2 | Value型 | ユーザー管理 | ユーザー管理:user_name | 2 | 
| 代入値自動登録用:ユーザー:ユーザーID | 2 | Value型 | ユーザー管理 | ユーザー管理:user_id | 2 | 
| 代入値自動登録用:ユーザー:パスワード | 2 | Value型 | ユーザー管理 | ユーザー管理:password | 2 | 
| 代入値自動登録用:ユーザー:パスワード設定 | 2 | Value型 | ユーザー管理 | ユーザー管理:password_apply | 2 | 
| 代入値自動登録用:ユーザー:グループ | 2 | Value型 | ユーザー管理 | ユーザー管理:group | 2 | 
| 代入値自動登録用:ユーザー:ホームディレクトリ | 2 | Value型 | ユーザー管理 | ユーザー管理:home_dir | 2 | 
| 代入値自動登録用:ユーザー:ログインシェル | 2 | Value型 | ユーザー管理 | ユーザー管理:login_shell | 2 | 
| 代入値自動登録用:ユーザー:コメント | 2 | Value型 | ユーザー管理 | ユーザー管理:comment | 2 | 
| 代入値自動登録用:ユーザー:状態 | 2 | Value型 | ユーザー管理 | ユーザー管理:user_action | 2 | 
| 代入値自動登録用:ユーザー:ユーザー名 | 3 | Value型 | ユーザー管理 | ユーザー管理:user_name | 3 | 
| 代入値自動登録用:ユーザー:ユーザーID | 3 | Value型 | ユーザー管理 | ユーザー管理:user_id | 3 | 
| 代入値自動登録用:ユーザー:パスワード | 3 | Value型 | ユーザー管理 | ユーザー管理:password | 3 | 
| 代入値自動登録用:ユーザー:パスワード設定 | 3 | Value型 | ユーザー管理 | ユーザー管理:password_apply | 3 | 
| 代入値自動登録用:ユーザー:グループ | 3 | Value型 | ユーザー管理 | ユーザー管理:group | 3 | 
| 代入値自動登録用:ユーザー:ホームディレクトリ | 3 | Value型 | ユーザー管理 | ユーザー管理:home_dir | 3 | 
| 代入値自動登録用:ユーザー:ログインシェル | 3 | Value型 | ユーザー管理 | ユーザー管理:login_shell | 3 | 
| 代入値自動登録用:ユーザー:コメント | 3 | Value型 | ユーザー管理 | ユーザー管理:comment | 3 | 
| 代入値自動登録用:ユーザー:状態 | 3 | Value型 | ユーザー管理 | ユーザー管理:user_action | 3 | 
| 代入値自動登録用:ユーザー:ユーザー名 | 4 | Value型 | ユーザー管理 | ユーザー管理:user_name | 4 | 
| 代入値自動登録用:ユーザー:ユーザーID | 4 | Value型 | ユーザー管理 | ユーザー管理:user_id | 4 | 
| 代入値自動登録用:ユーザー:パスワード | 4 | Value型 | ユーザー管理 | ユーザー管理:password | 4 | 
| 代入値自動登録用:ユーザー:パスワード設定 | 4 | Value型 | ユーザー管理 | ユーザー管理:password_apply | 4 | 
| 代入値自動登録用:ユーザー:グループ | 4 | Value型 | ユーザー管理 | ユーザー管理:group | 4 | 
| 代入値自動登録用:ユーザー:ホームディレクトリ | 4 | Value型 | ユーザー管理 | ユーザー管理:home_dir | 4 | 
| 代入値自動登録用:ユーザー:ログインシェル | 4 | Value型 | ユーザー管理 | ユーザー管理:login_shell | 4 | 
| 代入値自動登録用:ユーザー:コメント | 4 | Value型 | ユーザー管理 | ユーザー管理:comment | 4 | 
| 代入値自動登録用:ユーザー:状態 | 4 | Value型 | ユーザー管理 | ユーザー管理:user_action | 4 | 
| ... | ... | ... | ... | ... | ... | 
| 代入値自動登録用:ユーザー:ユーザー名 | 10 | Value型 | ユーザー管理 | ユーザー管理:user_name | 10 | 
| 代入値自動登録用:ユーザー:ユーザーID | 10 | Value型 | ユーザー管理 | ユーザー管理:user_id | 10 | 
| 代入値自動登録用:ユーザー:パスワード | 10 | Value型 | ユーザー管理 | ユーザー管理:password | 10 | 
| 代入値自動登録用:ユーザー:パスワード設定 | 10 | Value型 | ユーザー管理 | ユーザー管理:password_apply | 10 | 
| 代入値自動登録用:ユーザー:グループ | 10 | Value型 | ユーザー管理 | ユーザー管理:group | 10 | 
| 代入値自動登録用:ユーザー:ホームディレクトリ | 10 | Value型 | ユーザー管理 | ユーザー管理:home_dir | 10 | 
| 代入値自動登録用:ユーザー:ログインシェル | 10 | Value型 | ユーザー管理 | ユーザー管理:login_shell | 10 | 
| 代入値自動登録用:ユーザー:コメント | 10 | Value型 | ユーザー管理 | ユーザー管理:comment | 10 | 
| 代入値自動登録用:ユーザー:状態 | 10 | Value型 | ユーザー管理 | ユーザー管理:user_action | 10 | 
機器登録¶
ユーザー追加作業の実施¶
作業概要の作成¶
| 作業実施日時 | 2024/04/04 12:00:00 | 
| 作業対象 | web01(RHEL8) | 
| 作業内容 | Webサーバーへユーザー追加作業 | 
作業概要登録¶
 
| オペレーション名 | 実施予定日時 | 
|---|---|
| Webサーバーへユーザー追加作業 | 2024/04/04 12:00:00 | 
パラメータ設定¶
 
| ホスト名 | オペレーション | 代入順序 | パラメータ | ||
|---|---|---|---|---|---|
| オペレーション名 | グループ名 | グループID | 状態 | ||
| web01 | 2023/04/04 12:00:00_Webサーバーへユーザー追加作業 | 1 | www | 10001 | present | 
| web01 | 2023/04/04 12:00:00_Webサーバーへユーザー追加作業 | 2 | app | 10002 | present | 
 
 
| ホスト名 | オペレーション | 代入順序 | パラメータ | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| オペレーション名 | ユーザー名 | ユーザーID | パスワード | パスワード設定 | グループ | ホームディレクトリ | ログインシェル | コメント | 状態 | ||
| web01 | 2024/04/04 12:00:00_Webサーバーへユーザー追加作業 | 1 | wwwuser01 | 10001 | password01 | True | www | /home/wwwuser01 | /bin/bash | Web server maintainer | present | 
| web01 | 2024/04/04 12:00:00_Webサーバーへユーザー追加作業 | 2 | wwwuser02 | 10002 | password02 | True | www | /home/wwwuser02 | /bin/bash | Web server maintainer | present | 
| web01 | 2024/04/04 12:00:00_Webサーバーへユーザー追加作業 | 3 | appuser01 | 20001 | password01 | True | app | /home/appuser01 | /bin/bash | Application server maintainer | present | 
| web01 | 2024/04/04 12:00:00_Webサーバーへユーザー追加作業 | 4 | appuser02 | 20002 | password02 | True | app | /home/appuser02 | /bin/bash | Application server maintainer | present | 
作業実行¶
- 事前確認 現在のサーバーの状態を確認しましょう。グループ一覧を確認します。- # グループ一覧の取得 cat /etc/group|grep -E "www|app" - # 何も表示されないユーザー一覧を確認します。- # ユーザー一覧の取得 cat /etc/passwd|grep -E "www|app" - # 何も表示されない
- 作業実行 から、ユーザー管理 Movement を選択し、 作業実行 を押下します。次に、 で、オペレーションに Webサーバーへユーザー追加作業 を選択し、作業実行 を押下します。画面が開き、実行が完了した後に、ステータスが「完了」になったことを確認します。
 
- 事後確認 再度サーバーに下記のグループとユーザーが設定されていることを確認しましょう。グループ一覧を確認します。- # グループ一覧の取得 cat /etc/group|grep -E "app|www" - www:x:10001: app:x:10002: ユーザー一覧を確認します。- # ユーザー一覧の取得 cat /etc/passwd|grep -E "app|www" - wwwuser01:x:10001:10001:Web server mainterner:/home/wwwuser01:/bin/bash wwwuser02:x:10002:10001:Web server mainterner:/home/wwwuser02:/bin/bash appuser01:x:20001:10002:Application server mainterner:/home/appuser01:/bin/bash appuser02:x:20002:10002:Application server mainterner:/home/appuser02:/bin/bash 
(参考) 既存のジョブフローへの追加¶
- ジョブフローの作成 
- オペレーション登録 
- ホスト名のパラメータ登録 (パラメータ変更なし) 
- パッケージのパラメータ登録 (パラメータ変更なし) 
- グループのパラメータ登録 
- ユーザーのパラメータ登録 
- ジョブフロー実行 
ジョブフローの編集と実行 (失敗例)¶
| OUT | IN | 
|---|---|
| Start | ホスト名設定 | 
| ホスト名設定 | パッケージ管理 | 
| パッケージ管理 | ユーザー管理 | 
| ユーザー管理 | End | 
 
ジョブフローの編集と実行 (成功例)¶
| Movement | オペレーション名 | 
|---|---|
| ホスト名設定 | RHEL8のホスト名変更作業 | 
| パッケージ管理 | RHEL8のパッケージ管理 | 
| ユーザー管理 | Webサーバーへユーザー追加作業 | 
