Exastro IT AutomationでWindows Serverの自動設定をやってみた

関連リンク

+ [Exastro IT Automationインストール(v1.5.0)](https://qiita.com/standsetx/items/c0e4ed7c6a2c34b2f068)
+ [Exastro IT Automation v1.5.0を実際に動かしてみた(クイックスタート)](https://qiita.com/standsetx/items/7a96f2286b6d1f3a3524)
+ [Exastro IT Automation ver1.5.0のキホンの"キ"](https://qiita.com/wakky0328/items/cf29c22cbf7cb42d462b)
+ [Exastroコミュニティ](https://exastro-suite.github.io/it-automation-docs/index_ja.html)



#はじめに
ITA（[Exastro IT Automation](https://exastro-suite.github.io/it-automation-docs/index_ja.html)）は、システム設定をIaC（Infrastructure as Code）化して一元管理や自動実行するためのオープンソースフレームワークです。

システム構成に関するさまざまな情報（機器情報、設定値、作業履歴など）を管理することと、AnsibleなどのPF構築ツールと連携してシステム構築や運用設定などを実行する機能を備えています。

今回は作業対象サーバをWindows Serverにして、IIS（Microsoft Internet Information Services）をインストールして設定を投入するところまでやってみたいと思います。

こちらは構成環境予定図です。
今回は作業対象のWindows Serverを２つにしてみます。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/e8a33ca3-6b7c-dfd3-0309-e3a227d49654.png)



#今回紹介するシナリオ
大まかな流れとしてはこのようになります。

**【準備編】・・・AnsibleがWindows Serverに接続できるようWinRMを設定する。
　　　　　　　　必要素材を用意する。
　　↓
【仕込編】・・・ITAに必要な情報を登録する。
　　↓
【実行編】・・・ITAで作業実行し、IISをWindows Serverに投入する。
　　↓
　完了**

これをもとに、以下のように具体的な手順をご説明していきたいと思います。

---
**1.【準備編】**
　1-1　AnsibleがWindows Serverに接続できるようWinRMを設定する
　1-2　playbookを用意する
　1-3　htmlファイルを用意する
**2.【仕込編】**
　2-1　作業対象ホストを登録する
　2-2　Movementを作成する
　2-3　playbookを登録する
　2-4　htmlファイルを登録する
　2-5　Movement詳細を登録する
　2-6　Conductorを作成する
　2-7　メニューグループを作成する
　2-8　メニューを作成する
　2-9　パラメータシートの項目名を定義する
　2-10　代入値自動登録設定を行う
**3.【実行編】**
　3-1　オペレーションを新規登録する
　3-2　パラメータシートにデータを登録する
　3-3　作業対象ホストを登録する
　3-4　代入値を確認する
　3-5　Conductorを実行する
　3-6　Movementごとの詳細結果を確認する
　3-7　実機で確認する

---



##1.【準備編】
###1-1　WinRMでWindows Serverに接続する
AnsibleをWindows Serverに接続させるために、WinRMを有効にします。
（基本的にAnsibleは、対象となるサーバにSSHで接続しますが、Windows ServerではデフォルトでSSH接続ができないため、代替手段としてWindows Remote Management（WinRM）を使います。）

※今回はPowerShellから直接コマンド入力で設定しましたが、Ansibleから設定のためのスクリプトが出ているようなので、そちらでやってみても良さそうです。
[Ansible　WinRMの設定](https://docs.ansible.com/ansible/2.9_ja/user_guide/windows_setup.html#id3)


**①PowerShell を管理者権限で起動する**
作業対象サーバに入り、PowerShellを管理者権限で起動します。

**②PowerShell のバージョンを確認する**
PowerShellはバージョン3.0以上が必須なようなので、バージョンを確認します。

```
PS > $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.14393.3866
```
バージョン5.1なのでOKでした。


**③WinRMを設定する**
まずリモート操作を有効にします。

```
PS > Enable-PSRemoting -Force
```

次に以下3点を確認します。

1）　NetworkCategoryがPrivateになっている

```
PS > Set-NetConnectionProfile -NetworkCategory Private
PS > Get-NetConnectionProfile

NetworkCategory  : Private
```

2）　Basic=trueになっている

```
PS > winrm set winrm/config/service/auth '@{Basic="true"}'
PS > winrm get winrm/config/service/auth

Basic = true
```

3）　AllowUnencrypted=trueになっている

```
PS > winrm set winrm/config/service '@{AllowUnencrypted="true"}'
PS > winrm get winrm/config/service

AllowUnencrypted = true
```

これでwinRMが有効になりました。


###1-2　playbookを用意する
今回は以下の３つのplaybookを使用します。

| ファイル名 | 使用目的 |
|:--|:--|
| 1-install_iis.yml | IISインストール用 |
| 2-start_service_iis.yml | IIS起動用 |
| 3-setting_iis.yml | 設定内容の記述用 |

**①以下よりファイル名とコードをコピペして保存する**
1-install_iis.yml・・・IISをインストールします。

```1-install_iis.yml
- name: install iis
  win_feature:
    name: Web-Server
    state: present
```
2-start_service_iis.yml・・・IISを起動します。

```2-start_service_iis.yml
- name: start iis service
  win_service:
    name: W3Svc
    state: started
```
3-setting_iis.yml・・・設定内容は以下の通りです。
![qiita_31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/7c43f327-53e3-3545-e4bf-4fe80ae695f1.png)

```3-setting_iis.yml
- name: Create website directory
  win_file:
    path: "{{ VAR_path }}"
    state: directory
  
- name: Create website
  win_iis_website:
    name: "{{ VAR_name }}"
    state: started
    port: "{{ VAR_port }}"
    physical_path: "{{ VAR_path }}"

- name: restart IIS service
  win_service:
    name: W3Svc
    state: restarted
    start_mode: auto

- name: Open port for website on the firewall
  win_firewall_rule:
    name: "iisport{{ VAR_port }}"
    enable: yes
    state: present
    localport: "{{ VAR_port }}"
    action: Allow
    direction: In
    protocol: Tcp

- name: Copy website index.html
  win_copy:
    src: "{{ CPF_index_html }}"
    dest: '{{ VAR_path }}\index.html'
```


###1-3　htmlファイルを用意する
**①Webサイト表示用に、任意のhtmlファイルを用意する**
以下は今回使用したサンプルです。

```4-index.html
<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
  <title>test</title>
  <style type="text/css">
  body{
    margin: 0 ;
    padding: 0 ;
    font-size: 15px ;
    line-height: 1.618 ;
  }
  .header{
  	border-bottom: 3px solid #b5c7d3 ;
  	padding: 1em 3em ;
  	background: #0f4c81 ;
    color: #fff;
  }
  .footer{
  	border-top: 3px solid #b5c7d3 ;
  	text-align: center ;
  	padding: 1em 0 ;
  	background: #0f4c81 ;
    color: #fff;
  }
  .wrapper{
  	width: 1000px ;
  	margin: 0 auto ;
  	padding: 2em 0 ;
    overflow: hidden ;
  }
  .cont{
    background: #658dc6 ;
  }
  .main{
    margin-left: 40px;
  	width: 580px ;
  	padding: 20px ;
  	border: 0 solid #b5c7d3 ;
    float: left ;
    background: #fff ;
  }
.side{
  	width: 300px ;
    float: right ;
  }
  </style>
</head>
<body>
  <div class="header">
  	<h1 class="logo-wrapper">
  		test IIS Server
  	</h1>
  </div>
  <div class="cont">
    <div class="wrapper">
      <div class="main">
      	<h1>Hello! My test IIS Server</h1>
      		<p>testtesttesttest<br>testtesttesttest<br>testtesttesttest<br>testtesttesttest<br>testtesttesttest</p>
      </div>
      <div class="side">
      	<div class="menulist">
      		<h2>menu</h2>
      		<ul>
      			<li>menu1</li>
      			<li>menu2</li>
      			<li>menu3</li>
      		</ul>
      	</div>
      </div>
    </div>
  </div>
  <div class="footer">
  	<p>My test IIS Server</p>
  </div>
</body>
</html>
```



##2.【仕込編】
それでは、ITAに必要なデータを登録していきます。

###2-1　作業対象ホストを登録する
**①「基本コンソール」 >> 「機器一覧」　を開く**
登録開始ボタンを押す。

**②以下の項目を入力する**
WinRM接続情報を入力します。
WindowsServerを作業対象サーバとしてAnsibleLegacyを実行する場合は、機器一覧にWinRM接続情報を入力する必要があるようです。

| ホスト名 | IPアドレス | ログインユーザID | 管理 | ログインパスワード | 認証方式 |
|:--------|:--------|:--------|:--------|:--------|:--------|
| ita-win1 | 192.0.2.10 | Administrator | ● | xxxxxxxx | パスワード認証 |
| ita-win2 | 192.0.2.11 | Administrator | ● | xxxxxxxx | パスワード認証 |

![qiita_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/1775ec8b-e1c5-f0ea-f04f-60b45c0383e9.png)
※1　ポート番号は、未入力の場合はデフォルト（5985）でのWinRM接続となるので未入力となります。状況に応じて設定してください。
※2　サーバー証明書は、WinRM接続ポートでhttpsのポート番号を指定した場合に入力するものなので、今回はhttps接続ではないので未入力です。こちらも状況に応じて設定してください。

**③登録ボタンを押す**
![qiita_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/b7cbd26d-964e-9b74-7ee9-3d2cb785360b.png)



###2-2　Movementを作成する
**①「Ansible-Legacy」 >> 「Movement一覧」　を開く**
登録開始ボタンを押す。

**②以下の項目を入力する**
・ Movement名は任意ですが、今回はplaybook３つ登録するので、それに対応する名称を付けました。
・Windows Serverの場合は、Movement一覧のWinRM接続を「●」にします。

| Movement名（任意の名称） | ホスト指定形式 | WinRM接続 |
|:-----------|:-----------|:-----------|
| Install_IIS | IP | ● |
| Start_Service_IIS | IP | ● |
| Setting_IIS | IP | ● |

![qiita_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/9c3f2770-faa0-3af8-3f97-1e256b4f8bd9.png)
**③登録ボタンを押す**



###2-3　playbookを登録する
**①「Ansible-Legacy 」 >> 「プレイブック素材集」　を開く**
登録開始ボタンを押す。

**②以下の項目を入力／アップロードする**
用意しておいたplaybookをそれぞれアップロードします。
・playbook素材名は任意です。今回はわかりやすく、ymlファイル名と同じにしました。
・プレイブック素材は、ファイルを選択してから「事前アップロード」ボタンを押さないと登録できないようです。

| プレイブック素材名（任意の名称） | プレイブック素材 |
|:-----------|:-----------|
| Install_IIS | 1-install_iis.yml |
| Start_Service_IIS | 2-start_service_iis.yml |
| Setting_IIS | 3-setting_iis.yml |

![qiita_08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/e19bc10d-06d3-8175-e8c5-6a2e06644f8d.png)
**③登録ボタンを押す**



###2-4　htmlファイルを登録する
用意しておいたhtmlファイルを登録します。

**①「Ansible共通」 >> 「ファイル管理」　を開く**
登録開始ボタンを押す。

**②以下の項目を入力／アップロードする**

| ファイル埋込変数名 | ファイル素材 |
|:--|:--|
| CPF_index_html | 4-index.html |

![qiita_24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/7059edf5-a9be-3263-6afe-6460688a8a56.png)
**③登録ボタンを押す**


###2-5　Movement詳細を登録する
**2-2**で登録したMovementと、**2-3**で登録したplaybookを関連付けます。

**①「Ansible-Legacy 」 >> 「Movement詳細」　を開く**
登録開始ボタンを押す。

**②以下の項目を入力／プルダウンから選択する**

| Movement（プルダウンから選択） | プレイブック素材（プルダウンから選択） | インクルード順序（※） |
|:-----------|:-----------|:-----------|
| Install_IIS | install_iis | 1 |
| Start_Service_IIS | start_service_iis | 1 |
| Setting_IIS | setting_iis | 1 |

※　インクルード順序は、Movement１個に対して複数のプレイブックを登録するときの順序を指定します。今回登録するプレイブックは１つなので、「1」と設定します。

![qiita_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/00ed5730-e6b6-8bfd-83a8-0b23eb4fa4c7.png)
**③登録ボタンを押す**



###2-6　Conductorを作成する
Movementを何個かつなげて、１つのワークフローを作成します。

**①「Conductor」 >> 「Conductorクラス編集」　を開く**

**②Nameを入力する**
Conductorの名称を入力します。今回は「IIS構築」としました。

| Name（任意の名称） |
|:--|
| IIS構築 |

**③Movementをドラッグ＆ドロップする**
右下のMovement一覧から、使用するMovementを選んで作業フィールドにドラッグ＆ドロップし、実行したいワークフローの順番に並べます。

**④Nodeをつなげる**
並べたNode（各Movementのこと）のOUT-INをつなげます。OUTやINのところのネジのようなマークから、マウスをドラッグしてつなげられます。

**⑤登録ボタンを押す**

![qiita_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/b75b8903-c7f7-d8d5-21c0-c805322d8fea.png)



###2-7　メニューグループを作成する
**①「管理コンソール」 >> 「メニューグループ管理」　を開く**
登録開始ボタンを押す。

**②以下の項目を入力する**
今回は「WindowsServer」としました。

「参照用」についてはこちらをご覧ください。
<details><summary>参照用って何？</summary><div>
パラメータシートを作成すると、データ登録するメニューと合わせて参照用のメニューが自動で作成されます。
参照用メニューは閲覧専用のメニューで、データ登録されたメニューに登録されているオペレーション日時から指定した日付における最新の登録データを参照できるメニューです。
ITAでCMDBを作成する際に自動で作成されます。
![図14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662076/f8440e26-f106-9e25-f2d7-5022fe31bb1e.png)
</div></details>

| メニューグループ名称（任意の名称） | 表示順序 |
|:-----------|:-----------|
| WindowsServer | 200 |
| WindowsServer（参照用） | 201 |

![qiita_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/b413a8c5-f17e-571b-856d-36e230006e1d.png)


**③登録ボタンを押す**
ちなみにメニューグループ配下にあるメニューを作成（**2-8**参照）しないと、トップ画面にメニューグループのアイコンが表示されないようです。



###2-8　メニューを作成する
メニューグループ配下のメニューを作成します。

**①「メニュー作成」 >> 「メニュー定義/作成」　を開く**
登録開始ボタンを押す。

**②「基本情報」を入力する**

| メニュー名（任意の名称） | 作成対象（プルダウンから選択） | 表示順序（※） | 用途 |
|:--|:--|:--|:--|
| IIS設定 | パラメータシート（ホスト/オペレーション含む） | 1 | ホスト用 |

![qiita_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/967458cf-5ec7-dc65-2bad-30aea5b330fc.png)

**③「対象メニューグループ」を入力する**
「対象メニューグループ」ボタンを押すとモーダルが開くので、以下のように選択します。

| Host | Reference |
|:--|:--|
| WindowsServer | WindowsServer（参照用） |

![qiita_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/7b40a394-ea39-2558-a8c7-83021c946eaf.png)
↓　**2-9**に続く。


###2-9　パラメータシートの項目名を定義する
**2-8**と同じ画面で入力します。
パラメータシートの項目を作成します。

**①以下を入力／プルダウンから選択する**

| 項目（任意の名称） | 入力方式（プルダウンから選択） | 最大バイト数 |
|:--|:--|:--|
| path | 文字列（単一行） | 32 |
| name | 文字列（単一行） | 32 |
| port | 文字列（単一行） | 32 |

※　項目の個数は「項目」ボタンで増やしていけます。

**②「作成」ボタンを押す**
![qiita_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/521f9156-01aa-028b-ff3e-93251949c34e.png)


###2-10　代入値自動登録設定を行う
**①「Ansible-Legacy」 >> 「代入値自動登録設定」　を開く**
登録開始ボタンを押す。

**②以下の項目をプルダウンから選択する**

| メニューグループ:メニュー | 項目| 登録方式 | Movement | Value変数-変数名 |
|:--|:--|:--|:--|:--|
| WindowsServer:IIS設定 | パラメータ/path | Value型 | Setting_IIS | VAR_path |
| WindowsServer:IIS設定 | パラメータ/name | Value型 | Setting_IIS | VAR_name |
| WindowsServer:IIS設定 | パラメータ/port | Value型 | Setting_IIS | VAR_port |

![qiita_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/e1e58fda-7381-104a-66fc-313cf54c936d.png)
**⑤登録ボタンを押す**



##3.【実行編】
それではConductorを実行していきます。
２回目以降の作業は、この【実行編】だけでOKです。

###3-1　オペレーションを新規登録する
**①「基本コンソール」 >> 「投入オペレーション一覧」　を開く**
登録開始ボタンを押す。

**②以下の項目を入力する**
オペレーション名は任意ですが、今回はplaybookやMovementと同様にしました。

| オペレーション名（任意の名称） | 実施予定日時（任意の時間） |
|:--|:--|
| Install IIS | 2020/11/01 00:00 |

![qiita_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/e85837a3-02b9-63f9-6681-8d31307254a0.png)
**③登録ボタンを押す**



###3-2　パラメータシートにデータを登録する
**2-9**で作成したパラメータシートに、データを入力します。

**①「WindowsServer」 >> 「IIS設定」　を開く**
こちらは**2-8**で作成したメニューになります。
登録開始ボタンを押します。

**②以下の項目を入力する**

| ホスト名 | オペレーション名 | path | name | port |
|:--|:--|:--|:--|:--|
| ita-win1 | Install IIS | C:\sites\Myweb | TestWeb | 8080 |
| ita-win2 | Install IIS | C:\sites\Myweb2 | TestWeb2 | 8080 |

![qiita_18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/544fbacf-2386-6008-7a15-0cab93279659.png)
**③登録ボタンを押す**



###3-3　作業対象ホストを登録する
**2-1**で登録したホストと**2-2**で作成したMovement、**3-1**で作成したオペレーションを関連付けます。

**①「Ansible-Legacy」 >> 「作業対象ホスト」　を開く**
登録開始ボタンを押す。

**②以下の項目をプルダウンから選択する**

| オペレーション | Movement | ホスト |
|:-----------|:-----------|:-----------|
| Install IIS | Install_IIS | ita-win1 |
| Install IIS | Install_IIS | ita-win2 |
| Install IIS | Start_Service_IIS | ita-win1 |
| Install IIS | Start_Service_IIS | ita-win2 |

![qiita_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/08027087-b3fd-1912-1c6a-1396a89debd9.png)
**③登録ボタンを押す**

**④代入値自動登録で追加された2行分も含め、一覧で以下のように表示されているのを確認する**
![qiita_30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/361758aa-54f4-5352-449e-0cb96a171c3b.png)



###3-4　代入値を確認する
今回投入するデータが代入されているか確認します。

**①「Ansible-Legacy」 >> 「代入値管理」　を開く**

**②「表示フィルタ」＞＞「フィルタ」ボタンを押す**

**③「一覧/更新」に一覧が表示されるので、データが代入されているか確認する**

| オペレーション | Movement | ホスト | 変数名 | 具体値 |
|:--|:--|:--|:--|:--|
| Install IIS | Setting_IIS | ita-win1 | VAR_port | 8080 |
| Install IIS | Setting_IIS | ita-win1 | VAR_path | C:\sites\Myweb |
| Install IIS | Setting_IIS | ita-win1 | VAR_name | TestWeb |
| Install IIS | Setting_IIS | ita-win2 | VAR_port | 8080 |
| Install IIS | Setting_IIS | ita-win2 | VAR_path | C:\sites\Myweb2 |
| Install IIS | Setting_IIS | ita-win2 | VAR_name | TestWeb2 |

![qiita_19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/23d6229a-3663-20eb-0097-528dc4371c9a.png)



###3-5　Conductorを実行する
それではConductorとオペレーションを紐付けて、実行します。

**①「Conductor」 >> 「Conductor作業実行」　を開く**

**②「Conductor[一覧]」より2-6で作成したConductorを選択する**

| Conductor[一覧] |
|:--|
| IIS構築 |

**③「オペレーション[一覧]」より3-1で作成したオペレーションを選択する**

| オペレーション[一覧] |
|:--|
| Install IIS |

![qiita_20.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/ce9a19a7-0206-5451-5df0-5d10a206ad6a.jpeg)
**④「Conductor実行」の「実行」ボタンを押す**
![qiita_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/fb3976d0-8da4-4955-540f-bd87c263cc66.png)

**⑤Statusが正常終了になっていることを確認する**
各Movementも緑色の「DONE」になっていて、完了していることがわかります。
![qiita_23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/d502f69a-71c1-6846-7fa5-485a69d940d2.png)



###3-6　Movementごとの詳細結果を確認する
**①確認したいMovementのNodeを押す**
「Operation status」にURLが表示されます。
![qiita_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/4dac786c-9dd7-be0e-ede5-7c9115f01f58.png)

**②URLをクリックして、別窓を開く**
![qiita_26.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/47ca84a2-9852-a9a3-4d5a-f1f259deaf01.jpeg)
**③ステータスを確認する**
Movement全体のステータスは「対象作業」を確認します。
![qiita_27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/ad9b04de-51e8-4c31-c9b7-7a8d55ec129b.png)
さらに詳しいログは「進行状況(実行ログ)」で確認できるようです。
![qiita_28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/4b077eba-922c-b754-23a6-2535dbf00a2c.png)



###3-7　実機で確認する
**①クライアントPCのブラウザから、作業対象サーバのIPアドレスとポート番号にアクセスする**

**②登録したhtmlが表示されていればOK！**
![qiita_29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/573dc8b5-9839-a282-488d-896b1ec6452f.png)



##関連リンク
+ [Exastro IT Automationインストール(v1.5.0)](https://qiita.com/standsetx/items/c0e4ed7c6a2c34b2f068)
+ [Exastro IT Automation v1.5.0を実際に動かしてみた(クイックスタート)](https://qiita.com/standsetx/items/7a96f2286b6d1f3a3524)
+ [Exastro IT Automation ver1.5.0のキホンの"キ"](https://qiita.com/wakky0328/items/cf29c22cbf7cb42d462b)
+ [Exastroコミュニティ](https://exastro-suite.github.io/it-automation-docs/index_ja.html)