User management (Answers)

Questions (Repost)

Create and manage the following users in Exastro IT Automation.
Make sure to not only manage users, but to also configure host names and manage packages.
表 101 User information

User name

User ID

Login password

Group name

wwwuser01

10001

password01

www

wwwuser02

10002

password02

www

appuser01

20001

password01

app

appuser02

20002

password02

app

Design parameters

In this guide, we have managed users. But the users also needs to belong to a group.
First, we will make it so users can be managed on a parameter sheet.

Create Group parameter sheets

First, we will create a parameter sheet for groups.
The Ansible Playbook used is written below. Make sure to create the parameter sheet so it can use the parameter below.
リスト 300 group.yml
---
- 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'
表 102 Group settings parameters

Item

Description

group_name

Group name

group_id

Group ID

action

Construction settings
present: Create/Update
absent: Delete
From Create Parameter sheet ▶ Define/Create Parameter sheet, register a parameter sheet.

Tip

By checking both Required and Unique restriction, the parameter sheet can reference items from external parameter sheets.

Tip

By checking "use" in the Use bundle in the Parameter creation information, we can configure multiple parameters to a single item.
Group parameter sheet
表 103 Group parameter sheet setting value

Setting item

Item 1 setting item

Item 2 setting item

Item 3 setting item

Item name

Group name

Group ID

State

Item name(Rest API)

group_name

group_id

state

Input method

String(Single line)

Integer

Pulldown selection

Minimum value

(No item)

1000

(No item)

Maximum value

(No item)

(No item)

Maximum byte size

32

(No item)

(No item)

Regular expression

(No item)

(No item)

Select item

(No item)

(No item)

Input:State:present-absent

Reference item

(No item)

(No item)

Default value

Required

Unique restriction

Description

Remarks

表 104 Parameter creation information setting value

Item name

Setting value

Item number

(Automatic)

Parameter sheet name

Group

Parameter sheet name(REST)

groups

Creation target

Parameter sheet(With host/operation)

Display order

4

Use bundles

Check the "Use" box(Activate)

Last updated date/time

(Automatic)

Last updated by

(Automatic)

Create parameter sheet for users

Next, we will create a parameter sheets for the users.
The Ansible Playbook used is written below. Make sure to create the parameter sheet so it can use the parameter below.
リスト 301 user.yml
---
- 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'
表 105 User settings parameters

Item

Description

user_name

User name

user_id

User ID

group_id

Group ID

comment

Comment

home_dir

Home directory

login_shell

Login shell

password

Password

action

Construction settings
present: Create/Update
absent: Delete

password_apply

Password settings when constructing
true: Will configure a password
false: Will not configure a password
From Create Parameter sheet ▶ Define/Create Parameter sheet, register a parameter sheet.

Tip

By configuring Pulldown selection for the Input method, we can reference the datasheet registered in Create Group parameter sheets.
User parameter creation 1
表 106 パラメータ項目の設定値(1/2)

Setting item

Item 1 setting value

Item 2 setting value

Item 3 setting value

Item 4 setting value

Item 5 setting value

Item name

User name

User ID

Password

Password settings

Group

Item name(Rest API)

user_name

user_id

password

password_apply

group

Input method

String(Single line)

Integer

Password

Pulldown selection

Pulldown selection

Maximum byte size

32

(No item)

32

(No item)

(No item)

Regular expression

(No item)

(No item)

(No item)

(No item)

Minimum value

(No item)

1000

(No item)

(No item)

(No item)

Maximum value

(No item)

(No item)

(No item)

(No item)

Select item

(No item)

(No item)

(No item)

Create Parameter sheet:Selection 2:True-False

Input:Group:Group name

Reference item

(No item)

(No item)

(No item)

Default value

(No item)

False

Required

Unique restriction

Description

Remarks

User parameter sheet creation 2
表 107 Parameter item setting value(2/2)

Setting item

Item 6 setting value

Item 7 setting value

Item 8 setting value

Item 9 setting value

Item name

Home directory

Login shell

Comment

State

Item name(Rest API)

home_dir

login_shell

comment

state

Input method

String(Single line)

String(Single line)

String(Single line)

Pulldown selection

Maximum byte size

128

32

128

(No item)

Regular expression

(No item)

Minimum value

(No item)

(No item)

(No item)

(No item)

Maximum value

(No item)

(No item)

(No item)

(No item)

Select item

(No item)

(No item)

(No item)

Input:State:present-absent

Reference item

(No item)

(No item)

(No item)

Default value

/bin/bash

Required

Unique restriction

Description

Remarks

表 108 Parameter sheet creation information and setting values

Item name

Setting value

Item number

(Automatic)

Parameter sheet name

User

Parameter sheet name(REST)

users

Creation target

Parameter sheet(With host/operation)

Display order

3

Use bundles

Check the "Use" box(Activate)

Last updated date/time

(Automatic)

Last updated by

(Automatic)

Register operation target

Register the target device where the operations will be executed to.

Register device

We will use the web01 server registered in the previous scenario, meaning no additional steps are required.

Register operation steps

We will now configure a Movement so it executes the Ansible Playbook so the Group(s) are created/deleted and then the users are created/deleted.
Up until now, we have only linked 1 Ansible Playbook per movement, but in this one, we will manage both groups and users with 1 Movement.

注釈

We can achieve the same result by creating 1 Movement for bboth managing groups and managing users.

Register Movement

From Ansible-Legacy ▶ Movement list, register a Movement for managing users.
Register Movement
表 109 Movement information setting value

Movement name

Ansible use information

Host specification method

Header section

User management

IP

※reference Header section

リスト 302 Header section
- hosts: all
  remote_user: "{{ __loginuser__ }}"
  gather_facts: no
  become: yes

Register Ansible Playbook

In this scenario, we will use the Playbook below. Copy it and create group.yml and user.yml as yml format.
リスト 303 group.yml
---
- 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'
リスト 304 user.yml
---
- 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'
From Ansible-Legacy ▶ Playbook file collection, register the Playbook above.
Register Ansible-Playbook
表 110 Register Ansible Playbook information

Playbook file name

Playbook file

group

group.yml

user

user.yml

Substitute value auto registration settings

Ansible-Legacy ▶ 代入値自動登録設定 から、パラメータシートの項目と Ansible Playbook の変数の紐付けを行います。
大量のデータを一度に登録するような場合には、全件ダウンロード・ファイル一括登録を使って、ファイルからデータを投入する方法が適切です。
Ansible-Legacy ▶ 代入値自動登録設定 ▶ 全件ダウンロード・ファイル一括登録 から、新規登録用ファイルをダウンロードします。ダウンロードしたファイルを編集し、ファイル一括登録にてファイルを登録すると代入値自動登録設定が簡単に行うことが出来ます。
グループの代入値自動登録設定
表 112 グループの代入値自動登録設定の設定値

Parameter sheet(From)

Registration method

Movement name

IaC変数(To)

Menu group:Menu:Item

Substitute order

Movement name:Variable name

Substitute order

Substitute value auto registration:Group:Group name

1

Value type

User management

User management:group_name

1

Substitute value auto registration:Group:Group ID

1

Value type

User management

User management:group_id

1

Substitute value auto registration:Group:State

1

Value type

User management

User management:group_action

1

Substitute value auto registration:Group:Group name

2

Value type

User management

User management:group_name

2

Substitute value auto registration:Group:Group ID

2

Value type

User management

User management:group_id

2

Substitute value auto registration:Group:State

2

Value type

User management

User management:group_action

2

...

...

...

...

...

...

Substitute value auto registration:Group:Group name

5

Value type

User management

User management:group_name

5

Substitute value auto registration:Group:Group ID

5

Value type

User management

User management:group_id

5

Substitute value auto registration:Group:State

5

Value type

User management

User management:group_action

5

User's Substitute value auto registration settings
User's Substitute value auto registration settings
User's Substitute value auto registration settings
User's Substitute value auto registration settings
User's Substitute value auto registration settings
表 113 User's Substitute value auto registration settings

Parameter sheet(From)

Registration method

Movement name

IaC variables(To)

Menu group:Menu:Item

Substitute order

Movement name:Variable name

Substitute order

Substitute value auto registration:ユーザー:User name

1

Value type

User management

User management:user_name

1

Substitute value auto registration:ユーザー:User ID

1

Value type

User management

User management:user_id

1

Substitute value auto registration:ユーザー:パスワード

1

Value type

User management

User management:password

1

Substitute value auto registration:ユーザー:Password settings

1

Value type

User management

User management:password_apply

1

Substitute value auto registration:ユーザー:グループ

1

Value type

User management

User management:group

1

Substitute value auto registration:ユーザー:Home directory

1

Value type

User management

User management:home_dir

1

Substitute value auto registration:ユーザー:Login shell

1

Value type

User management

User management:login_shell

1

Substitute value auto registration:ユーザー:Comment

1

Value type

User management

User management:comment

1

Substitute value auto registration:ユーザー:State

1

Value type

User management

User management:user_action

1

Substitute value auto registration:ユーザー:User name

2

Value type

User management

User management:user_name

2

Substitute value auto registration:ユーザー:User ID

2

Value type

User management

User management:user_id

2

Substitute value auto registration:ユーザー:パスワード

2

Value type

User management

User management:password

2

Substitute value auto registration:ユーザー:Password settings

2

Value type

User management

User management:password_apply

2

Substitute value auto registration:ユーザー:グループ

2

Value type

User management

User management:group

2

Substitute value auto registration:ユーザー:Home directory

2

Value type

User management

User management:home_dir

2

Substitute value auto registration:ユーザー:Login shell

2

Value type

User management

User management:login_shell

2

Substitute value auto registration:ユーザー:Comment

2

Value type

User management

User management:comment

2

Substitute value auto registration:ユーザー:State

2

Value type

User management

User management:user_action

2

Substitute value auto registration:ユーザー:User name

3

Value type

User management

User management:user_name

3

Substitute value auto registration:ユーザー:User ID

3

Value type

User management

User management:user_id

3

Substitute value auto registration:ユーザー:パスワード

3

Value type

User management

User management:password

3

Substitute value auto registration:ユーザー:Password settings

3

Value type

User management

User management:password_apply

3

Substitute value auto registration:ユーザー:グループ

3

Value type

User management

User management:group

3

Substitute value auto registration:ユーザー:Home directory

3

Value type

User management

User management:home_dir

3

Substitute value auto registration:ユーザー:Login shell

3

Value type

User management

User management:login_shell

3

Substitute value auto registration:ユーザー:Comment

3

Value type

User management

User management:comment

3

Substitute value auto registration:ユーザー:State

3

Value type

User management

User management:user_action

3

Substitute value auto registration:ユーザー:User name

4

Value type

User management

User management:user_name

4

Substitute value auto registration:ユーザー:User ID

4

Value type

User management

User management:user_id

4

Substitute value auto registration:ユーザー:パスワード

4

Value type

User management

User management:password

4

Substitute value auto registration:ユーザー:Password settings

4

Value type

User management

User management:password_apply

4

Substitute value auto registration:ユーザー:グループ

4

Value type

User management

User management:group

4

Substitute value auto registration:ユーザー:Home directory

4

Value type

User management

User management:home_dir

4

Substitute value auto registration:ユーザー:Login shell

4

Value type

User management

User management:login_shell

4

Substitute value auto registration:ユーザー:Comment

4

Value type

User management

User management:comment

4

Substitute value auto registration:ユーザー:State

4

Value type

User management

User management:user_action

4

...

...

...

...

...

...

Substitute value auto registration:ユーザー:User name

10

Value type

User management

User management:user_name

10

Substitute value auto registration:ユーザー:User ID

10

Value type

User management

User management:user_id

10

Substitute value auto registration:ユーザー:パスワード

10

Value type

User management

User management:password

10

Substitute value auto registration:ユーザー:Password settings

10

Value type

User management

User management:password_apply

10

Substitute value auto registration:ユーザー:グループ

10

Value type

User management

User management:group

10

Substitute value auto registration:ユーザー:Home directory

10

Value type

User management

User management:home_dir

10

Substitute value auto registration:ユーザー:Login shell

10

Value type

User management

User management:login_shell

10

Substitute value auto registration:ユーザー:Comment

10

Value type

User management

User management:comment

10

Substitute value auto registration:ユーザー:State

10

Value type

User management

User management:user_action

10

機器登録

作業対象となるサーバーは 前のシナリオ で登録した web01 を利用するため、作業は不要です。

ユーザー追加作業の実施

Movement を実行してユーザーとグループを追加します。

作業概要の作成

まずは作業計画を立てましょう。
表 114 作業の方針

作業実施日時

2024/04/04 12:00:00

作業対象

web01(RHEL8)

作業内容

Webサーバーへユーザー追加作業

作業概要登録

基本コンソール ▶ オペレーション一覧 から、作業実施日時や作業名を登録します。
Conductor作業実行
表 115 オペレーション登録内容

オペレーション名

実施予定日時

Webサーバーへユーザー追加作業

2024/04/04 12:00:00

パラメータ設定

Input ▶ グループ から、グループに対するパラメータを登録します。
グループのパラメータ登録
表 116 グループパラメータの設定値

ホスト名

オペレーション

Substitute order

パラメータ

オペレーション名

Group name

Group 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

Input ▶ User から、ユーザーに対するパラメータを登録します。
ユーザのパラメータ登録
ユーザのパラメータ登録
表 117 ユーザーパラメータの設定値

ホスト名

オペレーション

Substitute order

パラメータ

オペレーション名

User name

User ID

パスワード

パスワード設定

グループ

Home directory

ログインシェル

コメント

状態

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

作業実行

  1. 事前確認

    現在のサーバーの状態を確認しましょう。
    グループ一覧を確認します。
    リスト 305 コマンド
    # グループ一覧の取得
    cat /etc/group|grep -E "www|app"
    
    リスト 306 実行結果
    # 何も表示されない
    
    ユーザー一覧を確認します。
    リスト 307 コマンド
    # ユーザー一覧の取得
    cat /etc/passwd|grep -E "www|app"
    
    リスト 308 実行結果
    # 何も表示されない
    
  2. 作業実行

    Ansible-Legacy ▶ 作業実行 から、User management Movement を選択し、 作業実行 を押下します。
    次に、作業実行設定 で、オペレーションに Webサーバーへユーザー追加作業 を選択し、作業実行 を押下します。
    作業状態確認 画面が開き、実行が完了した後に、ステータスが「完了」になったことを確認します。
作業実行
  1. 事後確認

    再度サーバーに下記のグループとユーザーが設定されていることを確認しましょう。
    グループ一覧を確認します。
    リスト 309 コマンド
    # グループ一覧の取得
    cat /etc/group|grep -E "app|www"
    
    リスト 310 実行結果
    www:x:10001:
    app:x:10002:
    
    ユーザー一覧を確認します。
    リスト 311 コマンド
    # ユーザー一覧の取得
    cat /etc/passwd|grep -E "app|www"
    
    リスト 312 実行結果
    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
    

(参考) 既存のジョブフローへの追加

本演習では、ジョブフローを利用せずに Movement から直接ユーザー設定作業を実施しましたが、当然ジョブフローの利用も可能です。
ジョブフローシナリオまでに行ったサーバー構築の一連の作業の中に本演習で作成した Movement を組み込むことで、ホスト名登録、パッケージ導入、ユーザー登録といった一連の作業フローを組み立てることができます。
この場合の作業の流れは、
  1. ジョブフローの作成

  2. オペレーション登録

  3. ホスト名のパラメータ登録 (パラメータ変更なし)

  4. パッケージのパラメータ登録 (パラメータ変更なし)

  5. グループのパラメータ登録

  6. ユーザーのパラメータ登録

  7. ジョブフロー実行

となります。
しかし、Exastro IT Automation では、オペレーションと機器の組み合わせごとにパラメータを登録する必要があるため、今回のように、グループとユーザーのみの設定にも関わらず、それ以外のホスト名やパッケージといったパラメータを設定をしなげればなりません。
このような場合に個別オペレーションを使うことで、Movement ごとにオペレーションを設定することができます。
ただし、個別オペレーションを使った場合、実行時のオペレーションとは異なるオペレーションによりパラメータが管理されるため、運用上パラメータの見通しが悪くなることもあります。

ジョブフローの編集と実行 (失敗例)

Conductor ▶ Conductor一覧 から、サーバー構築詳細 を押下し、ジョブフローを編集します。
1. 画面上部の  編集 を押下し、更新モードに移行します。
2. 右下のペインに、作成した User management Movement があるので、これを画面中央にドラッグアンドドロップします。
3. 各 Mode 間を下記の様に再接続します。
表 118 オブジェクト間の接続

OUT

IN

Start

ホスト名設定

ホスト名設定

パッケージ管理

パッケージ管理

User management

User management

End

4. 画面上部にある、  更新 を押下します。
5. Conductor ▶ Conductor編集/作業実行 から、 選択 を押下します。
6. サーバー構築 Conductor を選択し、選択決定 を押下します。
7. オペレーションに Webサーバーへユーザー追加作業 を選択し、作業実行 を押下します。
実行失敗
Conductor作業確認 画面が開き、ホスト名設定の Movement が ERROR となり想定外エラーになるはずです。
これは、Webサーバーへユーザー追加作業 に紐づくホスト名のパラメータがないことにより起こる動作です。

ジョブフローの編集と実行 (成功例)

Conductor ▶ Conductor一覧 から、サーバー構築詳細 を押下し、再度ジョブフローを編集します。
1. 画面上部の  編集 を押下し、更新モードに移行します。
2. 右下のペインに、作成した User management Movement があるので、これを画面中央にドラッグアンドドロップします。
3. 各 Mode に対して下記の様に個別オペレーションを設定します。
表 119 個別オペレーション設定

Movement

オペレーション名

ホスト名設定

RHEL8のホスト名変更作業

パッケージ管理

RHEL8のパッケージ管理

User management

Webサーバーへユーザー追加作業

4. 画面上部にある、  更新 を押下します。
5. Conductor ▶ Conductor編集/作業実行 から、 選択 を押下します。
6. サーバー構築 Conductor を選択し、選択決定 を押下します。
7. オペレーションに Webサーバーへユーザー追加作業 を選択し、作業実行 を押下します。
実行成功
Conductor作業確認 画面が開き、実行が完了した後に、全ての Movement のステータスが「Done」になったことを確認します。

まとめ

本シナリオでは、これまでのシナリオの確認のために、演習課題を実施しました。
また Conductor のパラメータ連携の1つの手段として、個別オペレーションについて紹介をしました。
より詳細な情報を知りたい場合は、Manuals を参照してください。