#はじめに
Playbook Collectionは、システム構築で利用されるOSやMiddleware用のAnsible Playbook集です。
OS向けの環境構築用Roleと設定収集用Roleがまとめられています。
対応OSは以下の4つになり、主要なところが提供されています。
・RHEL7
・RHEL8
・Windows2016
・Windows2019
本記事ではOS向けの設定を行うためのロールパッケージ「Windows Server 2019」から以下の環境構築用Roleを実行します。
・hosts設定
・環境変数
・ローカルユーザー
#作業環境
作業環境は以下の通りです。
ITAを操作するためのクライアントPC
・Windows10
・Google Chrome
ITAホストサーバ
・Linux CentOS7.8
・Exastro IT Automation1.8.1
・Ansible 2.11.2
環境構築の設定を行う対象サーバ
・Windows Server2019
##今回紹介するシナリオ
本記事は以下のシナリオで進めていきます。
【準備編】
- ロールパッケージのダウンロード
- ITAホストサーバへの準備作業
- WinRMの有効化
- 今回使用するPlaybookの確認
- ロールパッケージをアップロードしてジョブ(Movement)に紐付ける
- 変数ネスト管理の更新
- Conductorの作成
- ターゲットマシンの登録
- メニューグループの作成
- データシートの作成
- パラメータシートの作成
- データシートへのレコード登録
- 代入値自動登録設定の登録
【実行編】
- オペレーションの登録
- パラメータシートへ代入値登録
- Conductorの実行
- 実行結果の確認
- おわりに
##【準備編】
##1. ロールパッケージのダウンロード
Github 上で公開されている、Playbook Collectionのロールパッケージをダウンロードします。
本記事では、Windows2019用のRole Packageをダウンロードします。
ダウンロードはGithub上で画像のリンクをクリックすることで可能です。
##2. ITAホストサーバへの準備作業
本手順はITAで設定・収集を行う際に一度だけ実行する必要があります
以降の手順は特に明記の無い限りITAホストサーバ上で実行します
本作業の詳細については、Exastro Playbook Collectionでより詳細に解説されています。
2-1 ITAホストサーバにsudo権限を付与したユーザでログインします
2-2 必要なツールをインストールします
sudo yum -y install git wget
2-3 Playbook実行フォルダを作成し、フォルダ下に移動します
mkdir ansible_work
cd ansible_work/
2-4 パラメータ生成共通部品のロールリストをダウンロードし、前作業で作成したフォルダに配置します
wget https://exastro-suite.github.io/playbook-collection-docs/requirements/prerequire_list.yml
2-5 ansible-galaxyコマンドでロールをダウンロードします
ansible-galaxy install -r prerequire_list.yml -p roles
2-6 以下を参考にPlaybookとインベントリを作成する
・Playbook(prerequire.yml)の作成
---
- hosts: local
become: yes
roles:
- setup_paragen
・インベントリの作成
※AnsibleをPython2で動作させる場合、ansible_python_interpreterの定義は不要です。
[local]
localhost
[local:vars]
ansible_python_interpreter=/usr/bin/python3
ansible_become_pass=<sudoパスワード>
2-7 Playbookを実行してパラメータ生成用共通部品をインストールします
ansible-playbook -c local -i inventory prerequire.yml
##3. WinRMの有効化
AnsibleをWindows Serverに接続するために、WinRMを有効にします。
3-1 Powershellを管理者権限で起動します
作業対象サーバに入り、PowerShellを管理者権限で起動します。
3-2 Powershellのバージョンを確認します
※3.0以上のバージョンが必須です。
PS > $PSVersionTable
Name Value
---- -----
PSVersion 5.1.17763.1007
3-3 WinRMを設定します
確認事項は3点です。
本作業の詳細については、「Exastro IT AutomationでWindows Serverの自動設定をやってみた」でより詳細に解説されています。
PS > Enable-PSRemoting -Force
3-3-1 NetworkCategoryがprivateになっている
PS > Set-NetConnectionProfile -NetworkCategory Private
PS > Get-NetConnectionProfile
NetworkCategory : Private
3-3-2 Basic=trueになっている
PS > winrm set winrm/config/service/auth '@{Basic="true"}'
PS > winrm get winrm/config/service/auth
Basic = true
3-3-3 AllowUnencrypted=trueになっている
PS > winrm set winrm/config/service '@{AllowUnencrypted="true"}'
PS > winrm get winrm/config/service
AllowUnencrypted = true
##4. 今回使用するPlaybookの確認
hosts設定(WIN_Hosts/OS_build)
本ロールは、Windows Server 2019に関するhosts設定についての情報の設定を行います。
このRoleの特徴として、変数にファイルの内容を定義しています。
変数の内容に基づき、templateモジュールでファイルを配置しています。
まずは実行されているPlaybookを見てみましょう。
内容はテンプレートの配置になります。
---
- name: "Write file. ({{ item.path }})"
win_template:
src: hosts.j2
dest: "{{ item.path }}"
ではテンプレートを見てみます。
リスト 「item.text」の要素を順に展開するjinja2文が書かれています。
{% for line in item.text %}
{{ line }}
{% endfor %}
最後に、セットのITAreadmeです。
VAR_WIN_Hosts[n].path にはhostsファイルの配置先を定義し、VAR_WIN_Hosts[n].text にはhostsファイルの内容を定義します。
VAR_WIN_Hosts:
- path: C:/Windows/System32/drivers/etc/hosts
text:
- '# Copyright (c) 1993-2009 Microsoft Corp.'
- '#'
- '# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.'
- '#'
- '# This file contains the mappings of IP addresses to host names. Each'
環境変数(WIN_EnvSetting/OS_build)
本ロールは、Windows Server 2019に関する環境変数についての情報の設定を行います。
本Roleを使用して、ユーザ環境変数(User)とシステム環境変数(Machine)を設定することができます。
VAR_WIN_EnvSetting[n].Name には変数名を定義し、VAR_WIN_EnvSetting[n].Value には値を定義します。
VAR_WIN_EnvSetting[n].Actionをabsentとすることで環境変数の削除も可能です。
---
VAR_WIN_EnvSetting:
Machine:
- Action: present
Name: TEST_PROGRAM
Value: 'c:\TEST_PRPGRAM'
User:
- Action: present
Name: Path
Value: '%USERPROFILE%\AppData\Local\PF\PF_APP;'
ローカルユーザー(WIN_UserAccount/OS_build)
このRoleではユーザの作成や削除を行います。
Playbookではparameter以下のメンバー変数に基づきユーザを作成します。
VAR_WIN_UserAccount[n].Actionをabsentとすることでユーザの削除も可能です。
VAR_WIN_UserAccount:
- Action: present
Description: Test User Create
Disabled: false
FullName: 'TestUser'
Name: TestUser
Password: 'Passw0rd123'
PasswordApply: true
PasswordChangeable: true
PasswordExpires: false
PasswordRequired: false
##5. ロールパッケージをアップロードしてジョブ(Movement)に紐付ける
5-1 Movementを登録
Conductorは一つ以上のMovementから構成されるため、Movementを作成します。
メニューグループ「Ansible-LegacyRole」> 「Movement一覧」>「登録」を選択し、
以下内容を入力後に、「登録」を押下します。
今回は以下のように登録します。
Movement名 | ホスト指定形式 | WinRM接続 |
---|---|---|
hosts設定 | IP | ● |
環境変数 | IP | ● |
ローカルユーザ | IP | ● |
5-2 ロールパッケージのアップロード
ダウンロードしたロールパッケージ「OS-Windows2019.zip」をITAにアップロードします。
メニューグループ「Ansible-LegacyRole」> 「ロールパッケージ管理」>「登録」を選択し、「ファイルを選択」でダウンロードしたロールパッケージを開き、アップロード後に「登録」を押下します。
今回は以下のように登録します。
ロールパッケージ名 | ロールパッケージファイル(zip形式) |
---|---|
Windows2019 | OS-Windows2019.zip |
5-3 アップロードしたロールパッケージをMovementに紐付け
登録したMovementとロールパッケージを紐付けます。
メニューグループ「Ansible-LegacyRole」> 「Movement-ロール紐付」>「登録」を選択し、
以下内容を入力後に、「登録」を押下します。
今回は以下のように登録します。
Movement | ロールパッケージ名 | ロール名 | インクルード順序 |
---|---|---|---|
hosts設定 | OS-Windows2019 | WIN_Hosts/OS_build | 1 |
環境変数 | OS-Windows2019 | WIN_EnvSetting/OS_build | 1 |
ローカルユーザ | OS-Windows2019 | WIN_UserAccount/OS_build | 1 |
##6. 変数ネスト管理の更新
登録したロールパッケージで定義されている多段変数内で繰返配列定義されているメンバー変数の配列の最大繰返数を更新します。
本記事ではユーザ環境変数を2つ、システム環境変数を3つ設定しようと思うので、
変数「VAR_WIN_EnvSetting」の最大繰返数を更新します。
6-1. メニューグループ「Ansible-LegacyRole」> 「変数ネスト管理」>
表示フィルタ「フィルタ」を押下し、「一覧」から変数名「VAR_WIN_EnvSetting」の
「更新」を押下後、「最大繰返数」を変更し「更新」を押下します。
変数名 | メンバー変数名(繰返し有) | 最大繰返数 |
---|---|---|
VAR_WIN_EnvSetting | User | 2 |
変数名 | メンバー変数名(繰返し有) | 最大繰返数 |
---|---|---|
VAR_WIN_EnvSetting | Machine | 3 |
##7. Conductorの作成
Movementをまとめて実行するために作成したMovementを元に、Conductorを作成します。
7-1. メニューグループ「Conductor」> 「Conductorクラス編集」> 画像のように内容入力後に「登録」を押下します。
今回は以下のように登録します。
Conductor名 | 内容 |
---|---|
OS初期設定 | (画像を参照) |
##8. ターゲットマシンの登録
作業対象となるWindowsサーバをITAに登録します。
8-1.メニューグループ「基本コンソール」> 「機器一覧」>「登録」を選択し、
以下内容を入力後に、「登録」を押下します。
今回は以下のように登録します。
HW機器種別 | ホスト名 | IPアドレス | ログインユーザID | ログインパスワード管理 | ログインパスワード | Legacy/Role利用情報認証方式 |
---|---|---|---|---|---|---|
SV | targetserver | (作業対象マシンのIPアドレス) | root | ● | ******** | パスワード認証(winrm) |
##9. メニューグループの作成
データシートを格納するメニューグループを作成します。
ITAではデフォルトで作成したパラメータシートやデータシートを格納するメニューグループ「入力用」が存在しますが、本記事ではパラメータシートとデータシートの管理をわかりやすくするためデータシート用のメニューグループを作成しておきます。
9-1.メニューグループ「管理コンソール」> 「メニューグループ管理」>「登録」を選択し、
以下内容を入力後に、「登録」を押下します。
今回は以下のように登録します。
メニューグループ名称 | 表示順序 |
---|---|
データシート管理 | 1 |
##10. データシートの作成
データシートを1件作成していきます。
データシートは、ITA上で情報を管理する場合に利用できます。
また、他のパラメータシートやデータシートのプルダウンで選択する項目の参照元として利用することで、文言の揺れなどを防ぐことが可能です。
詳細は利用手順マニュアル メニュー作成機能に記載されています。
10-1. メニューグループ「メニュー作成」> 「メニュー定義・作成」>
画像のように内容入力後に「作成」を押下します。
メニュー名 |
---|
アクション種別 |
##11. パラメータシートの作成
hosts設定、環境変数の設定、ユーザ設定のパラメータシートを作成していきます。
環境変数の設定のパラメータシートはユーザ環境変数用とシステム環境変数用の2つのパラメータシートを作成しますので、計4つのパラメータシートを作成します。
11-1. メニューグループ「メニュー作成」> 「メニュー定義・作成」>
画像のように内容入力後に「作成」を押下します。
■hosts設定
メニュー名 |
---|
hosts設定 |
■環境変数の設定
環境変数の設定ではリピート機能と縦メニューを使用して
ユーザ環境変数を2つ、システム環境変数を3つ設定しようと思います。
リピート機能と縦メニューの説明については以下をご参照頂ければと思います。
リピート機能と縦メニュー
決まった組み合わせを複数定義する場合リピート機能を利用することができ、設定した値に応じた回数だけ項目が追加されます。
縦メニューとは、この機能を用いて作成したメニューを指します。
詳細は利用手順マニュアル メニュー作成機能を参考にしてください。
メニュー名 |
---|
環境変数_user |
メニュー名 |
---|
環境変数_machine |
■ローカルユーザ
メニュー名 |
---|
ローカルユーザ |
##12. データシートへのレコード登録
プルダウン参照元となるデータシートへのレコード登録をします。
12-1. メニューグループ「データシート管理」> 「アクション種別」>「登録」を選択し、
以下内容を入力後に、「登録」を押下します。
今回は以下のように登録します。
アクション種別 | |
---|---|
1件目 | absent |
2件目 | present |
##13. 代入値自動登録設定の登録
パラメータシートのパラメータと、Role中の変数を紐づけます。
紐づけると、パラメータシートに入力すると変数への代入値が自動的に定義されるようになります。
13-1.メニューグループ「Ansible-LegacyRole」> 「代入値自動登録設定」>
「登録」を選択し、以下内容を入力後に、「登録」を押下します。
■「hosts設定」の登録内容
共通の設定
メニューグループ:メニュー | 登録方式 | Movement | 変数名 |
---|---|---|---|
hosts設定 | value型 | hosts設定 | VAR_WIN_Hosts |
項目 | メンバ変数名 | 代入順序 |
---|---|---|
パラメータ/ファイルパス | [0].path | - |
パラメータ/hostsファイルの内容 | [0].text | 1 |
■「ユーザ用の環境変数設定」の登録内容
共通の設定
メニューグループ:メニュー | 登録方式 | Movement | 変数名 |
---|---|---|---|
環境変数_user | value型 | 環境変数 | VAR_WIN_EnvSetting |
項目 | メンバ変数名 | 代入順序 |
---|---|---|
パラメータ/アクション種別 | User[0].Action | - |
パラメータ/変数名 | User[0].Name | - |
パラメータ/設定値 | User[0].Value | - |
パラメータ/アクション種別[2] | User[1].Action | - |
パラメータ/変数名[2] | User[1].Name | - |
パラメータ/アクション種別[2] | User[1].Value | - |
■「システム用の環境変数設定」の登録内容
共通の設定
メニューグループ:メニュー | 登録方式 | Movement | 変数名 |
---|---|---|---|
環境変数_machine | value型 | 環境変数 | VAR_WIN_EnvSetting |
項目 | メンバ変数名 | 代入順序 |
---|---|---|
パラメータ/アクション種別 | Machine[0].Action | - |
パラメータ/変数名 | Machine[0].Name | - |
パラメータ/設定値 | Machine[0].Value | - |
パラメータ/アクション種別[2] | Machine[1].Action | - |
パラメータ/変数名[2] | Machine[1].Name | - |
パラメータ/設定値[2] | Machine[1].Value | - |
パラメータ/アクション種別[3] | Machine[2].Action | - |
パラメータ/変数名[3] | Machine[2].Name | - |
パラメータ/設定値[3] | Machine[2].Value | - |
■「ローカルユーザ」の登録内容
共通の設定
メニューグループ:メニュー | 登録方式 | Movement | 変数名 |
---|---|---|---|
ローカルユーザ | value型 | ローカルユーザ | VAR_WIN_UserAccount |
項目 | メンバ変数名 | 代入順序 |
---|---|---|
パラメータ/アクション種別 | [0].Action | - |
パラメータ/ユーザ名 | [0].Name | - |
パラメータ/フルネーム | [0].FullName | - |
パラメータ/説明 | [0].Description | - |
パラメータ/初回ログイン時のPW変更の要否 | [0].PasswordRequired | - |
パラメータ/PW変更実施の権限 | [0].PasswordChangeable | - |
パラメータ/PW無期限設定 | [0].PasswordExpires | - |
パラメータ/アカウント無効化 | [0].Disabled | - |
パラメータ/PW変更情報フラグ | [0].PasswordApply | - |
パラメータ/パスワード | [0].Password | - |
##【実行編】
##1. オペレーションの登録
オペレーション(作業名)を登録します。
※オペレーションとは、ITAにおける作業実行の単位になります。
1-1. メニューグループ「基本コンソール」> 「オペレーション一覧」>「登録」を選択し、
以下内容を入力後に、「登録」を押下します。
今回は以下のように登録します。
オペレーション名 | 実施予定日時 |
---|---|
OS初期設定 | (任意の日時) |
##2. パラメータシートへ代入値登録
パラメータシートで、実際に代入値を登録していきます。
■hosts設定
メニューグループ「入力用」> 「hosts設定」>「登録」を選択し、
以下内容を入力後に、「登録」を押下します。
ホスト名 | オペレーション | ファイルパス |
---|---|---|
targetserver | OS初期設定 | C:\Windows\System32\drivers\etc\hosts |
hostsファイルの内容 |
---|
# Copyright (c) 1993-2009 Microsoft Corp. # # This is a sample HOSTS file used by Microsoft TCP/IP for Windows. # # This file contains the mappings of IP addresses to host names. Each # entry should be kept on an individual line. The IP address should # be placed in the first column followed by the corresponding host name. # The IP address and the host name should be separated by at least one # space. # # Additionally, comments (such as these) may be inserted on individual # lines or following the machine name denoted by a '#' symbol. # # For example: # # 102.54.94.97 rhino.acme.com # source server # 38.25.63.10 x.acme.com # x client host # localhost name resolution is handled within DNS itself. # 127.0.0.1 localhost # ::1 localhost 10.1.1.1 host01 10.1.1.2 host02 |
■ユーザ用の環境変数設定
メニューグループ「入力用」> 「環境変数_user」>「登録」を選択し、
以下内容を入力後に、「登録」を押下します。
ホスト名 | オペレーション | 代入順序 | アクション種別 | 変数名 | 設定値 |
---|---|---|---|---|---|
targetserver | OS初期設定 | 1 | present | Env_user1 | test1 |
targetserver | OS初期設定 | 2 | present | Env_user2 | test2 |
■システム用の環境変数設定
メニューグループ「入力用」> 「環境変数_machine」>「登録」を選択し、
以下内容を入力後に、「登録」を押下します。
ホスト名 | オペレーション | 代入順序 | アクション種別 | 変数名 | 設定値 |
---|---|---|---|---|---|
targetserver | OS初期設定 | 1 | present | Env_machine1 | test1 |
targetserver | OS初期設定 | 2 | present | Env_machine2 | test2 |
targetserver | OS初期設定 | 3 | present | Env_machine3 | test3 |
■ローカルユーザ
メニューグループ「入力用」> 「ローカルユーザ」>「登録」を選択し、
以下内容を入力後に、「登録」を押下します。
ホスト名 | オペレーション | アクション種別 | ユーザ名 | フルネーム | 説明 |
---|---|---|---|---|---|
targetserver | OS初期設定 | present | testuser | testuser | テスト用ユーザ |
初回ログイン時のPW変更の要否 | PW変更実施の権限 | PW無期限設定 | アカウント無効化 |
---|---|---|---|
False | True | False | False |
PW変更情報フラグ | パスワード |
---|---|
True | (任意のパスワード) |
##3. Conductorの実行
Conductorを実行し、作成した各Monementを実行していきます。
3-1.メニューグループ「Conductor」> 「Conductor作業実行」> 以下内容を選択し、「実行」を押下します。
##4. 実行結果の確認
Conductor実行後の作業画面を確認します。
ノード(Movement)をクリックすることでステータスや詳細結果を確認できます。
次にターゲットサーバであるWindows Serverにて設定後の確認を行います。
■hosts設定
指定したパス「C:\Windows\System32\drivers\etc」に配置しているhostsファイルを確認したところ、
ファイルの中身が変更されています。
■環境変数
ユーザー環境変数に2つの変数、システム環境変数に3つの変数が追加されていることが確認できます。
■ローカルユーザ
testuserが作成されていることが確認できます。
##5. おわりに
今回はPlaybook CollectionとITAを利用して、ターゲットサーバへ環境構築設定を行いました。
1からPlaybookを作成する手間が省力化されているので、作業を大きく効率化できることを実感できました。
また本記事で使用したRoleはほんの一部で、他にも多様なRoleが公開されていているので
様々な用途でPlaybook Collectionを活用することができるのではないでしょうか。
##関連リンク
・Exastro-Suite公式サイト
・Exastro Playbook Collection
・Exastroの参考になる記事をまとめてみた
・Exastro IT AutomationでWindows Serverの自動設定をやってみた
・Exastro Playbook Collectionを使ってみた