Exastro IT Automation の Setting samples(ServiceNow連携版)を使ってみた

#関連リンク

Qiita記事
・[Exastro IT Automation クイックスタート (ver1.7.2)](https://qiita.com/y-masaya3210/items/a6d59b3aca0031128ab7)

ITAコミュニティサイト
・[Exastro IT Automation コミュニティサイト](https://exastro-suite.github.io/it-automation-docs/setting-samples_ja.html#ServiceNow-model)
・[ServiceNow連携モデル 概要](https://exastro-suite.github.io/SettingSamples-ServiceNow/setting-samples-servicenow-overview_ja.pdf)
・[ServiceNow連携モデル 導入手順](https://exastro-suite.github.io/SettingSamples-ServiceNow/setting-samples-servicenow-install_ja.pdf)
・[GitHubリリースページ](https://github.com/exastro-suite/SettingSamples-ServiceNow/releases)
・[ITA_利用手順マニュアル エクスポート/インポート](https://exastro-suite.github.io/it-automation-docs/asset/Documents_ja/Exastro-ITA_利用手順マニュアル_エクスポート／インポート.pdf)
・[ITA_利用手順マニュアル Ansible-driver](https://exastro-suite.github.io/it-automation-docs/asset/Documents_ja/Exastro-ITA_利用手順マニュアル_Ansible-driver.pdf)
・[Exastro IT Automation の収集比較機能を使ってみた](https://qiita.com/ooif/items/efe4bd4f0269600653c6)

#はじめに

Setting samplesにServiceNow連携モデル(ITAからServiceNow上のCMDBへシステム情報の連携機能)が追加されていたので使ってみました。
今回は収集機能で取得した情報を連携する形で、導入（インポート）～実行までをしていきます。





#### Servicenow連携イメージ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/52179b7e-906e-d49f-21f6-787863ead243.png)



#今回紹介するシナリオ

本記事は以下のシナリオで進めていきます。
ServiceNow連携は現状Linux、Windows、UNIXの3テーブルと連携していますが、
今回はServiceNow側の構成管理(CMDB)＞サーバ＞Linuxとの連携を行います。
※ServiceNowはdeveloperインスタンス(無料)を利用しています。

###準備/導入編

1. ITAのインストール
1. playbook利用の準備
1. Setting samplesのインポート
1. ServiceNow連携用ユーザーの準備（ServiceNow側）

※コンテナ版を利用する場合は1～3の手順は不要です。
コンテナ版の利用方法は[こちら](https://hub.docker.com/r/exastro/settingsamples-servicenow)を参照してください。

###仕込編

1. 連携データの収集
<br>1.1 機器一覧へターゲットホストの登録
<br>1.2 オペレーションを登録
<br>1.3 Movementを登録
<br>1.4 Playbookを登録
<br>1.5 MovementとPlaybookを紐付け
<br>1.6 オペレーション・Movement・作業対象ホストを紐付け
<br>1.7 収集項目（FROM）とパラメータシート（TO）を紐付け
<br>1.8 収集インターフェース情報変更
<br>1.9 作業実行
1. プロキシ情報の登録
1. 証明書認証回避フラグの登録
1. 削除実行フラグの登録
1. ServiceNow連携情報の登録

###実行編

1. ServiceNow連携の実行
1. 実行結果の確認


# 準備/導入編
## 1. ITAのインストール

[Exastro IT Automation クイックスタート (ver1.7.2)](https://qiita.com/y-masaya3210/items/a6d59b3aca0031128ab7)を参考にインストールをしてください。


## 2. playbook利用の準備

**※ ITAからAnsibleのservicenowモジュールを呼び出すので、ITAサーバにモジュールをインストールしてます。**

1. ExastroがインストールされているサーバーにTeraterm等でログインし、Rootユーザーに切り替えます。

1. servicenowモジュールをインストール。<br>`# ansible-galaxy collection install servicenow.servicenow`

1. pysnowをインストール。<br>`# pip3 install pysnow`

## 3. Setting samplesのインポート

### 3.1 Setting samplesのダウンロード
[GitHubリリースページ](https://github.com/exastro-suite/SettingSamples-ServiceNow/releases)からパッケージファイルをダウンロードします。
ダウンロードするファイル名は「setting-samples-servicenow-1.0.0-exastro-1.7.2.kym」です.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/4857ce5f-a50b-19ae-d3c6-c5204f46d45e.png)

### 3.2 Setting samplesのインポート

1. 「エクスポート／インポート」＞「メニューインポート」を選択、「ファイルを選択」でダウンロードしたパッケージファイルを開き、アップロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/13623d6e-fc39-3cc1-3f3d-6f507ab26b29.png)

2. ファイルのアップロードが完了したらすべてのメニューを選択して、画面最下部の「インポート」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/eb1c5e22-57f5-9f3b-0b52-7157ff8b54e8.png)

3. 「エクスポート/インポート管理」＞「フィルタ」を押下し、インポートが完了しているか確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/ff485710-0d68-db25-e38e-a11da40cc0a1.png)


4. 下記のユーザーでログインしなおします。<br>ユーザーID：servicenow-user<BR>パスワード：password

5. 「パスワード変更画面」に遷移しますので、初期パスワードを変更します。

6. ログイン後、以下のように表示されます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/7abda13d-af7c-90f8-3c31-422600555984.png)



## 4. ServiceNow連携用ユーザーの準備（ServiceNow側）

**※ ServiceNowの連携対象テーブル(Linux、Windows、UNIX)にアクセスできるユーザを作成します。<br>すでにある場合はこの手順を省略可能です。**

1. ユーザー作成
製品ドキュメントなどを参照して作成してください。
[ユーザーの作成](https://docs.servicenow.com/bundle/paris-platform-administration/page/administer/users-and-groups/task/t_CreateAUser.html)

2. itilグループに追加
製品ドキュメントなどを参照して「itil」に追加してください。
[ユーザーをグループに追加 (Add a user to a group)](https://docs.servicenow.com/bundle/paris-platform-administration/page/administer/users-and-groups/task/t_CreateAGroup.html#t_AddAUserToAGroup)
 

#仕込編

## 1. 連携データの収集
**※詳細は[Exastro IT Automation の収集比較機能を使ってみた](https://qiita.com/ooif/items/efe4bd4f0269600653c6)を参照**

下記のユーザーでログインしなおします。<br>ユーザーID：administrator<BR>パスワード：ITAインストール時に変更したパスワード

### 1.1 機器一覧へターゲットホストの登録
**※ 情報収集の対象を決めるのとServicenowへ連携する際の表示名に利用されます。**

1. 「基本コンソール」＞「機器一覧」へ移動する。
1. 「登録開始」を押下してパラメータの値を必要に応じて入力する。
1. 必要な項目に情報を登録したら「登録」をクリック。

**必須項目**
● ホスト名：収集対象のホスト名<br>&emsp;例：targethost
● IPアドレス：収集対象のIPアドレス<br>&emsp;例：192.168.1.1等

**任意項目**
● ログインユーザID：収集対象のSSHログインユーザ<br>&emsp;例：root等
● 管理：ログインパスワードを利用する場合に選択<br>&emsp;例：●
● ログインパスワード：収集対象のSSHログインパスワード<br>&emsp;例：password等
● Ansible利用情報 - Legacy/Role利用情報 - 認証方式：Ansible利用時の認証方法<br>&emsp;例：パスワード認証


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/98b5fef7-5f09-9304-b613-c66bbbb1464d.png)

### 1.2 オペレーションを登録
**※ ITAに登録されているデータからServicenowへ連携するデータを絞り込むのにも利用します。**

1. 「基本コンソール」＞「オペレーション一覧」へ移動する。
1. 「登録開始」を押下してパラメータの値を必要に応じて入力する。<br>必要な項目に情報を登録したら「登録」をクリック。

**必須項目**
● オペレーション名：わかりやすい名前を入力<br>&emsp;例：収集_0915
● 実施予定日時：カレンダーから選択する。<br>&emsp;例：2021/09/15 12:00

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/a32e0296-ed3d-cde9-19d1-90d589d06052.png)

### 1.3 Movementを登録
1. 「Ansible-Legacy」＞「Movement一覧」へ移動する。
1. 「登録開始」を押下してパラメータの値を必要に応じて入力する。<br>必要な項目に情報を登録したら「登録」をクリック。

**必須項目**
● Movement名：わかりやすい名前を入力<br>&emsp;例：GatherFacts
● ホスト指定形式：プルダウンから選択する。<br>&emsp;例：IP

**任意項目**
● ヘッダーセクション：下記を入力

```
- hosts: all
  remote_user: "{{ __loginuser__ }}"
  gather_facts: yes
　become: yes
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/83b2c06f-4b44-5258-125a-054a2a45bf6f.png)

### 1.4 Playbookを登録
1. 「Ansible-Legacy」＞「Playbook素材集」へ移動する。
1. 「登録開始」を押下してパラメータの値を必要に応じて入力する。<br>必要な項目に情報を登録したら「登録」をクリック。

**必須項目**
● Playbook素材名：わかりやすい名前を入力<br>&emsp;例：GatherFacts
● Playbook素材：ymlファイルを選択。<br>&emsp;例：GatherFacts_os.yml

```GatherFacts_os.yml

- name: get makername
  shell: 
    cmd: dmidecode --type system | grep 'Manufacturer' | awk -F '{{ ":" }} ' '{print $2}'
  register: manufacturer_reg

- name: make yaml file
  blockinfile:
    create: yes
    mode: 0644
    insertbefore: EOF
    marker: ""
    dest: "{{ __parameter_dir__ }}/{{ inventory_hostname }}/gatherfacts.yml"
    content: |
      ansible_distribution              : {{ ansible_distribution }}
      ansible_distribution_version      : {{ ansible_distribution_version }}
      ansible_manufacturer              : {{ manufacturer_reg.stdout }}
  delegate_to: 127.0.0.1
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/40540284-f022-192e-efd3-4a67d5a76bda.png)

### 1.5 MovementとPlaybookを紐付け
1. 「Ansible-Legacy」＞「Movement-Playbook紐付」へ移動する。
1. 「登録開始」を押下してパラメータの値を必要に応じて入力する。<br>必要な項目に情報を登録したら「登録」をクリック。

**必須項目**
● Movement：わかりやすい名前を入力<br>&emsp;例：1:GatherFacts
● Playbook素材：ymlファイルを選択。<br>&emsp;例：GatherFacts
● インクルード順序：紐づけるymlファイルを何番目に実行するか入力。<br>&emsp;例：1

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/fa29bccf-7ab8-4f73-0203-37e77ab79bb6.png)


### 1.6 オペレーション・Movement・作業対象ホストを紐付け
1. 「Ansible-Legacy」＞「作業対象ホスト」へ移動する。
1. 「登録開始」を押下してパラメータの値を必要に応じて入力する。<br>必要な項目に情報を登録したら「登録」をクリック。

**必須項目**
● オペレーション：今回の作業対象を選択<br>&emsp;例：4:収集_0915
● Movement：オペレーションに紐づけたいMovementを選択。<br>&emsp;例：1:GatherFacts
● ホスト：作業対象のホストを選択。<br>&emsp;例：6:targethost

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/147ad52c-60d3-93e9-9c07-b050365b2ab8.png)

### 1.7 収集項目（FROM）とパラメータシート（TO）を紐付け
1. 「Ansible共通」＞「収集項目値管理」へ移動する。
1. 「登録開始」を押下してパラメータの値を必要に応じて入力する。<br>必要な項目に情報を登録したら「登録」をクリック。

**必須項目**
● バース形式：YAMLを選択<br>&emsp;例：YAML
● PREFIX(ファイル名)：1.4 Playbookを登録で作成したplaybook内で指定したymlファイル名を入力。<br>&emsp;例：gatherfacts
● 変数名：1.4 Playbookを登録で作成したplaybook内で指定した変数名を入力。<br>&emsp;例：ansible_distribution
● メニューグループ:メニュー：収集情報の連携先メニュー名を選択。<br>&emsp;例：2100011611:代入値自動登録:600010:Linux
● 項目：変数名で指定指定した情報を連携したい項目を選択。<br>&emsp;例：パラメータ/オペレーティングシステム


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/5caf548f-ae74-9e50-2073-b9b20259f587.png)

**※残りの項目とも紐づけて最終的に下記のようになる**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/922e1ae9-e571-d19f-2827-3a173366d861.png)


### 1.8 収集インターフェース情報変更
1. 「Ansible共通」＞「収集インターフェース情報」へ移動する。
1. 「フィルタ」を押下すると一つだけ表示されるので「更新」をクリック。
1. 必要な項目に情報を登録したら「更新」をクリック。

**必須項目**
● RESTユーザー：ITAへのREST権限があるユーザーを入力<br>&emsp;例：admnistrator
● RESTパスワード：上記ユーザーのパスワードを入力。
**※上記以外は変更しない** 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/5a0051f0-4676-7632-d379-e89fb0e00bd4.png)

### 1.9 作業実行
1. 「Ansible-Legacy」＞「作業実行」へ移動する。
1. 登録したMovementとオペレーションを選択して「実行」をクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/f02b3db0-c692-5c31-7c6b-57aed8d1c31a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/d7460d19-4445-ffc7-03b0-8b90da53818d.png)

**※作業状態確認で、ステータスが完了になれば作業完了です。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/7d1c9a8c-4e22-c6b7-0c64-968398a64fb9.png)



**※作業は完了したのに、メニューに表示されない場合**
「Ansible-Legacy」＞「作業管理」　から収集結果を確認してみてください。
「収集状況」という項目が「収集済み」以外の場合(例：収集済み(通知あり)など)、何かしらが原因で失敗しています。
「収集ログ」という項目にログファイルがあるので、中身を確認してみるといいと思います。

私の場合は、取得した値が「マスタ管理」＞「オペレーション」と「メーカー」に登録されておらず失敗してました。
取得された値を「マスタ管理」のそれぞれのメニューに追加したら、問題なく登録されました。

また、連携するためにServivenow側にも追加された情報が存在していないとエラーになります。
なので、今回はServicenow側にも下記を追加しました。
※Servicenowへの登録方法は割愛します。

|メニュー名|値|
|:---:|:---:|
|オペレーション|CentOS|
|メーカー|RDO|


**登録失敗例**
**●ITAの「サーバ」＞「Linux」の登録情報**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/a67159be-88ca-e990-f69a-9df53cd2a9b2.png)

**●Servicenowの「構成管理(CMDB)」＞「Linux」の登録情報**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/e8983e61-12d6-e7bd-338b-b52b29187e35.png)


## 2. プロキシ情報の登録

**※ ExastroからServiceNowへの通信にプロキシを利用しない場合はこの手順を省略可能です。**


1. 「Ansible共通」＞「グローバル変数管理」へ移動します。
1. 「フィルタ」＞「グローバル変数名」が**GBL_PROXY**のレコードの更新ボタンをクリック。
1. 「具体値」項目にプロキシサーバーの情報を入力して「更新」ボタンをクリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/c0b8c287-9c65-275d-08c2-e135642c0af3.png)

## 3. 証明書認証回避フラグの登録

**※ ExastroからServiceNowへの通信で証明書認証を回避しない場合はこの手順を省略可能です。**


1. 「Ansible共通」＞「グローバル変数管理」へ移動する。
1. 「フィルタ」＞「グローバル変数名」が**GBL_CERTFLAG**のレコードの更新ボタンをクリック。
1. 「具体値」項目にONを入力して「更新」ボタンをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/6063c80b-9902-9a56-8a0f-596290611e9a.png)

## 4. 削除実行フラグの登録

**※ ServiceNowの連携テーブルのレコードを削除しない場合はこの手順を省略可能です。**

1. 「Ansible共通」＞「グローバル変数管理」へ移動する。
1. 「フィルタ」＞「グローバル変数名」が**GBL_DELETE_EXECUTE**のレコードの更新ボタンを押下する。
1. 「具体値」項目にONを入力して「更新」ボタンを押下する。

#### 追加、更新、削除の条件は以下の通り

|ITA|ServiceNow|ServiceNowに実行される処理|
|:---|:---|:---|
|レコードあり|レコードなし|追加|
|レコードあり|レコードあり|更新|
|レコードなし|レコードあり|削除実行フラグON：削除<br> 削除実行フラグOFF：スキップ|
|レコードなし|レコードなし|スキップ|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/ab587965-99d0-1bd1-3ffc-7972fe76de91.png)

## 5. ServiceNow連携情報の登録

**※ ITAからServicenowへの接続をするための情報を登録します。**

1. 「ServiceNow接続情報」＞「ServiceNow接続情報」へ移動する。
1. 「オペレーション名」が**ServiceNow連携**のレコードの更新をクリック
1. 全ての項目に値を入力し「更新」をクリック。

**必須項目**
● インスタンス名：ドメインなしのServiceNowインスタンス名
● ユーザー名：ServiceNowのユーザー
● パスワード：ServiceNowのパスワード

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/3c5e63f6-b53f-b556-1ab8-4f8290a7612d.png)


#実行編

## 1. ServiceNow連携の実行

### 単体実行
1. 「Conductor」＞「Conductor作業実行」へ移動する
1. 「Conductor[一覧]」の「ServiceNow連携」を選択する。
1. 「オペレーション[一覧]」から「ServiceNow連携」を選択する。<br>※「5. オペレーション一覧の登録」で実施したやつも表示されるがそれは選択しない
1. 画面下部の実行ボタンをクリック。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/4211fa4b-7e19-86ae-5315-6e838f51055f.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/c01d262b-7f5e-f042-3144-d98147b30803.png)


### 定期実行
1. 「Conductor」＞「Conductor定期作業実行」へ移動する
1. 「Conductor[登録]」＞「登録開始」をクリック。
1. 必要な項目に情報を登録したら「登録」をクリック。

**必須項目**
● Conductor名称：プルダウンから[ServiceNow連携]を選択する。
● オペレーション名：プルダウンから[ServiceNow連携]を選択する
● スケジュール設定：[利用手順マニュアル Conductor](https://exastro-suite.github.io/it-automation-docs/asset/Documents_ja/Exastro-ITA_%E5%88%A9%E7%94%A8%E6%89%8B%E9%A0%86%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB_Conductor.pdf)の「4.1.7 Conductor定期作業実行」を参考にスケジュールを設定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/e112db0e-0713-13f1-331d-50a2ae5def06.png)


※スケジュール設定サンプル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/9593ac9e-162e-a5e2-7bd7-3f387bb39e8d.png)


## 2. 実行結果の確認

### ITA側
1. Statusに「正常終了」が表示されていることを確認する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/4790c037-97bf-9857-0a15-d6ebd53f1825.png)


### ServiceNow側

1. ServiceNowへログインする。
1. 「構成管理(CMDB)」＞「サーバー」＞「Linux」へ移動する。
1. ITAに登録したレコードが連携されていることを確認する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1770057/3970355b-6c75-0796-9057-3cd8a37f076c.png)

---
以上、今回は、Setting samplesの準備・導入～実行を実施しました。

収集機能を使うことで、ITAの連携対象の情報を常に最新にできるので、
対象に何か変更があっても自動的にServiceNowに最新の情報が連携されるため、手動で更新したりする手間が減りますね。