ServiceNowとNutanixの連携 その3 Calm連携前編【ServiceNow Parisバージョン対応】

本記事は[Nutanix Advent Calendar 2019 #4](https://adventar.org/calendars/4475) 12/14 分の記事です。そして[前回記事](https://qiita.com/shocnt/items/7f6b9c587d0da5c82086)の続きです。

# 本シリーズ(全5回)では
ServiceNow社の提供する開発者インスタンスを用いてシンプルなServiceNow-Nutanixの統合環境を作ることを目指します。

# 本記事(その3)では
その1でご紹介した3つのユースケースのうち2つ目、「ServiceNowのリクエスト管理とCalmプラグインによるNutanixへのアプリケーションデプロイ」について実装方法の前半をご紹介します。

# 利用イメージ
管理者がServiceNowのカタログとしてCalmのブループリント、マーケットプレイスアイテムを公開し、ユーザがオンデマンド、セルフサービスで消費出来るサービス提供形態を目指します。
<img width="1025" alt="スクリーンショット 2019-12-12 14.27.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/72a8bbe8-fa28-668c-78df-d4cd6242b14e.png">


# 前提条件
## Nutanix
1. Prism Central v5.10以降
2. Nutanix Calm v2.4以降
3. Prism CentralがActive Directory連携していること
4. MIDサーバがデプロイ済みであること

## ServiceNow
1. KingstonまたはLondon(Calmプラグインバージョン1.0)
2. LondonまたはMadrid(Calmプラグインバージョン1.1)
3. MadridまたはNew York(Calmプラグインバージョン1.2)
4. New YorkまたはOrland(Calmプラグインバージョン1.3)
5. OrlandまたはParis(Calmプラグインバージョン1.4)
5. Incident Management(com.snc.incident.mim)プラグイン

# 手順
## 1. ServiceNowにおけるLDAP連携
ユーザによるセルフサービス環境を提供するため、Prism CentralとServiceNowで共通のLDAPサーバを参照する必要があります。こちらではServiceNowにおけるLDAP連携を行い、LDAPサーバ上のユーザ、グループ情報をServiceNowにインポートし、ServiceNow上のシステムユーザ、システムグループとして使用出来るようにします。

**AD連携せず、ServiceNowのローカルユーザで使用したい場合は1-1, 1-2をスキップし1-3を実施して下さい。**

### 1-1. LDAPサーバの追加
ナビゲーションペインで"LDAP"を検索し、"新規LDAPサーバーを作成"を指定します。以下内容で登録します。サーバ名、サーバURL、検索開始ディレクトリを入力し、"更新"を指定します。
<img width="1428" alt="スクリーンショット 2019-12-09 23.05.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/4e2d2351-0ed2-0bc8-5f1e-92ccc6e05a61.png">

"LDAPサーバー"ページに移動し、以下情報を入力して"更新"を指定します。
ログイン識別名: Administrator権限を持つユーザ名
ログインパスワード: Administrator権限を持つユーザパスワード
検索開始ディレクトリ: ルートドメイン
<img width="1428" alt="スクリーンショット 2019-12-09 23.06.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/cef9ece4-2a30-e29b-1f26-6a7a76c52ffe.png">

この時点ではServiceNowインスタンスと内部ネットワークのLDAPサーバ間に疎通がないため、以下のようなエラーが出力されます。この通信を担うのがMIDサーバとなり、以降の手順で登録を行います。
<img width="1428" alt="スクリーンショット 2019-12-09 23.06.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/ae486170-42f5-c4b9-727f-a63db0af7d20.png">

まずは画面下部の"リスナーを停止"を指定し、LDAPリスナーを一時停止します。
<img width="1428" alt="スクリーンショット 2019-12-09 23.07.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/ba2e69c7-8ceb-b4c5-dfb9-a0aff4b8f2e3.png">

"MIDサーバ"メニューから使用したいMIDサーバを指定します。
<img width="1428" alt="スクリーンショット 2019-12-09 23.07.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/5ae0d80d-c702-82df-0e2a-480cc027d99b.png">

"リスナー開始"後、"テスト接続"を行います。
<img width="1428" alt="スクリーンショット 2019-12-09 23.08.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/087a2b0c-c270-c301-2825-a0606b4a0c9b.png">

"Connected Successfully"が出れば接続完了です。
<img width="1428" alt="スクリーンショット 2019-12-09 23.09.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/db4989af-2a85-31d9-0114-5a5fb1670c43.png">

### 1-2. ユーザ、グループ情報の取得
LDAPサーバー編集画面下部にユーザ、グループを取得するためのOU定義の設定があります。自身のLDAPサーバーのドメイン構成に従い、RDNやフィルターを設定します。
<img width="1425" alt="スクリーンショット 2019-12-11 16.51.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/125db6b4-08ec-be70-dcac-7eef05350d78.png">

ナビゲーションペインから"ロードスケジュール"を指定し、(LDAPサーバ名)/Users Importに移動します。 
<img width="1428" alt="スクリーンショット 2019-12-09 23.10.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/51c361d9-b1f0-ce28-346b-22be4ef13c01.png">

"今すぐ実行"を指定し、対象LDAPサーバからServiceNowにユーザ情報をインポートします。
<img width="1428" alt="スクリーンショット 2019-12-09 23.10.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/98943248-d504-5cb7-e00a-9f8178805ec7.png">

ナビゲーションペインで"システムセキュリティ"配下の"ユーザ"に移動し、LDAPサーバに登録されたユーザが取得できていれば成功です。同じ操作をグループに対しても行います。
<img width="1425" alt="スクリーンショット 2019-12-11 17.14.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/81918e07-511f-d280-8aeb-422a59021e71.png">

### 1-3. ローカルグループ、ローカルユーザの設定
**AD連携せず、ServiceNowのローカルユーザで使用したい場合のみ1-3を実施して下さい。**
ナビゲーションペインで"システムセキュリティ"配下の"グループ"に移動し、"新規"ボタンから"Calm Admin"グループを作成します。同じ手順で"Calm User"グループも作成します。
![スクリーンショット 2021-03-10 21.00.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/14993650-6cd2-a3c6-aa97-0479e69bfe7f.png)

ナビゲーションペインで"システムセキュリティ"配下の"グループ"に移動し、"新規"ボタンから"calmadmin1"ユーザを作成します。同じ手順で"calmuser1"ユーザも作成します。
![スクリーンショット 2021-03-10 21.04.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/47466430-1aef-c768-8a60-f2237caca786.png)

"calmadmin1"ユーザ下部の"グループ"から"編集"をクリックし、上で作成した"Calm Admin"グループを紐付けます。同じ手順で"calmuser1"ユーザを"Calm User"グループに紐付けます。
![スクリーンショット 2021-03-10 21.05.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/974c55a3-2f41-75a3-096b-6a73be3b3a50.png)

## 2. メール設定
ServiceNow上のシステムから送られるメールを試験的に任意のメールアドレスに送信することが出来ます。ナビゲーションペインで"メールプロパティ"を検索し、"システムプロパティ"配下の"メールプロパティ"に移動します。"メール送信の有効化"にチェックを入れ、直下のフィールドにメールアドレスを入力します。
<img width="1428" alt="スクリーンショット 2019-12-09 23.13.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/9d043968-9403-b5e0-7b4c-45a68544450a.png">

## 3. アプリケーションピッカーの設定
ServiceNowには[アプリケーションスコープ](https://docs.servicenow.com/bundle/madrid-application-development/page/build/applications/concept/c_ApplicationScope.html)の概念があり、一部アプリケーションの設定変更が他のアプリケーションに及ぶことを防ぎます。

右上のギアアイコンから"開発者"メニューに移動し、"ヘッダーにアプリケーションピッカーを表示"を有効化します。
<img width="1428" alt="スクリーンショット 2019-12-10 15.44.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/1c0afd9c-deb6-7b98-6d4f-b19e4e81ce52.png">

画面上部のユーザ名の左にドロップダウンが出現しました。こちらを切り替えることによりアプリケーションスコープを選択します。
<img width="1428" alt="スクリーンショット 2019-12-10 15.44.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/515aa2eb-9582-b2f7-0a34-58fb3c07257e.png">

## 4. システムテーブル設定
下記リストのシステムテーブルに対してアプリケーションからのアクセスが必要となります。アクセス設定を変更します。

- item_option_new
- sc_category
- catalog_ui_policy
- sc_catalog
- catalog_script_client
- sys_user_has_role
- sys_group_has_role
- sys_user_group
- sys_user_grmember
- question
- question_choice
- sysapproval_approver

ナビゲーションペインで"テーブル"を検索し、"システム定義"配下の"テーブル"に移動します。名前欄に対象のテーブル名(ここではitem_option_new)を入力し、対象のテーブルを指定します。
<img width="1428" alt="スクリーンショット 2019-12-10 15.11.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/40c8fdab-b8cd-d0e1-819d-be77f6fbd6a7.png">

下記のようにテーブルへのアクセス権限を行い、”更新”をクリックします。同様の操作を上記リスト記載にあるテーブル全てに行って下さい。

<img width="1439" alt="スクリーンショット 2020-05-31 16.28.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/e886adb3-d839-7d3d-9dcb-4a4b75ca70cb.png">


## 5. システムプロパティ設定と前提となるプラグインインストール
ナビゲーションペインで"sys_properties.list"と検索します。
<img width="1428" alt="スクリーンショット 2019-12-10 15.57.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/e377a393-ed5d-3b26-0d2a-fa4ae3b93ae4.png">

名前欄で"glide.sc.guide.tab.validate"を検索し、"値"列を"true"に設定します。
<img width="1428" alt="スクリーンショット 2019-12-10 15.58.27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/3c90a1af-7f81-062c-3d20-d1c4f9f81be0.png">

同じく"glide.sc.reset_cascade"についても"値"列を"true"に設定します。

ナビゲーションペインで"プラグイン"を検索し、”システム定義”配下の”プラグイン”に移動します。検索ウィンドウで"com.glideapp.user_criteria.scoped.api"を検索し、出てくる"User Criteria Scoped API"プラグインをインストール、有効化します。
<img width="1439" alt="スクリーンショット 2020-05-31 16.24.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/4b88a764-f607-0361-b056-f03a5ce23ae0.png">
<img width="1439" alt="スクリーンショット 2020-05-31 16.24.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/ee7b68b4-78db-03a7-898e-bd35dd6fc8a9.png">


## 6. ServiceNow Calmプラグインのインストール及び各種設定
### 6-1. Calmプラグインv1.4のインストール
Calmプラグインv1.4はServiceNowストアからダウンロード・インストールが可能です。ナビゲーションペインから"システムアプリケーション"を検索し、”利用可能なすべてのアプリケーション”配下の"すべて"を選択します。

<img width="1440" alt="スクリーンショット 2020-06-06 22.37.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/827634ed-8878-29d5-5eab-af8f38756518.png">

検索欄で”Calm”を検索すると、”Calm Plugin for Application Life Cycle Management”が出てきますので、”インストール”をクリックします。

<img width="961" alt="スクリーンショット 2020-06-02 21.45.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/f7d15199-3ed7-a5c8-de81-4955d9afbfde.png">

### 6-2. Calmプラグインの設定
**注意: こちらの操作はNutanix Calmスコープで行います。アプリケーションピッカーのドロップダウンから"Calm Plugin for Application Lifecycle Management"を選択して下さい。**

ナビゲーションペインで"Nutanix"を検索し、"Application Properties"を選択し、次の情報を入力します。
MID Server: 使用するMIDサーバを指定
Calm Instance: Prism CentralのURLを指定
Calm Version: 自動的に入力されます。
Calm Admin Username: Calm(Prism Central)への接続に使用するユーザ名
Calm Admin Password: Calm(Prism Central)への接続に使用するユーザパスワード

<img width="1440" alt="スクリーンショット 2020-06-02 22.01.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/c0a3d5d5-3f29-02b3-d8e1-723ba59d04b2.png">

構成タブで以下設定を行います。

Approval Workflow: Nutanix - Auto Approve
Assignment Group: 承認フローの宛先となるグループを指定します。ここでは例として"Domain Admins"グループを指定しています。
Create incidents?: 有効化
Support URL: 空欄でOK
Use Local Groups: 有効化 (**1-1,1-2でAD連携をせずServiceNowのローカルユーザを使用する場合、必ず有効化して下さい。**)
Log Verbosity: Warning (お好みで)

<img width="1440" alt="スクリーンショット 2020-06-02 22.01.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/ed497620-71cf-1d32-a4bc-2c0aacc11267.png">

Action Workflow Configurationタブで以下設定を行います。

Enable/Disable workflow for actions: 有効化
Enable/Disable workflow for system actions: 有効化
System Action Workflow: Nutanix-System Actions Auto Approval
Enable/Disable workflow for user actions: 有効化
User Action Workflow: Nutanix-User Actions Auto Approval

<img width="1440" alt="スクリーンショット 2020-06-02 22.01.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134931/af0cd912-272b-f1c8-6c34-e3f7f9c875ae.png">

"Save Properties"をクリックし、認証が通ると、"今すぐ同期"メニューが現れますので、クリックして同期ジョブを開始します。プロジェクト、ブループリント、アプリケーション、マーケットプレイスアイテム等のCalmリソースがServiceNow上に同期されます。

## 7. まとめ
ServiceNowとNutanixの連携 その3として「ServiceNowのリクエスト管理とCalmプラグインによるNutanixへのアプリケーションデプロイ」のユースケースの実装方法前半、管理者として各種設定、Calmプラグインをインストール、CalmリソースのServiceNowへ同期する手順をご紹介しました。

次回は同じユースケースの実装方法後半としてServiceNowにおけるカタログアイテムの公開方法と利用方法についてご紹介します。