実践ServiceNow ー コンピュータ名とIPアドレスの登録

# 概要
ServiceNowではコンピュータはIPアドレスは、コンピュータのネットワークアダプタに割り当てられるIPアドレスとして登録される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/f818b2a3-2352-6480-b3f2-0b3e9b42f733.png)
そのためにコンピュータとそのIPアドレスを登録するにはcmdb_ci_computer、cmdb_ci_network_adapter、cmdb_ci_ip_addressテーブルに登録する必要がある。
Easy Importを利用してテーブル毎にデータをアップロードすることも可能ですが、今回はインポートセットを利用して一斉にデータを登録します。

# 前提条件
1. 一つのExcelファイルから一回の登録で3つのテーブルにデータを登録する
2. 一つのコンピュータには複数のネットワークアダプタを設定することが可能
3. 一つのネットワークアダプタには1つのIPアドレスを割り当てることができる<br/>（Excelシートを利用するため、一つのコンピュータに複数のネットワークアダプタを設定して、一つのネットワークアダプタに複数のIPアドレスは設定できないため。）

# インポート定義の手順
データソースを利用してファイルデータをServiceNowに読ませる場合は3段階で行います。
①読込むデータを指定
②読込むデータフィールドとServiceNowテーブル列のマッピング
③データの読込む

## データソースの定義
読込むデータの指定はデータソースの定義で行います。
今回はExcelのデータをServiceNowのコンピュータ、ネットワークアダプタ、IPアドレステーブルに読み込みます。
1. 次のようなExcelシートを作成します。列１には列名を記述します。後でこの列名を利用してマッピングルールを作成します。<br/>コンピュータに複数のIPアドレスを設定できることを想定して、IPアドレスフィールドにはセミコロン区切りでIPアドレスを指定します。<br/>![datasource_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/9c1f9a52-0101-6ad3-7647-d248c32b993e.png)
2. ServiceNowのアプリケーションナビゲータから「データソース」を検索して「管理」下の「データソース」をクリックします。<br/>![datasource_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/2e28be5d-a0dc-f2a4-4b24-1050689bff04.png)
3. 新しいデータソースを定義します。<br/>「新規」ボタンを押下します。<br/>![datasource_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/6fc9e9cd-8b44-6961-186e-654269c66449.png)
4. 次のように入力します。フォーマットのプルダウンには「Excel(.xlsx/.xls）」が2つあります。ページに「シート番号」フィールドが表示される方を選択します。 

|項目名|値|コメント|
|---|---|---|
|名前|import computer with ip address||
|インポートセットテーブル名|u_import_computer_with_ip_address||
|フォーマット|Excel(.xlsx/.xls)|フィールド「シート番号」が表示される方|
![datasource_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/bf6009d6-0ebf-2309-c982-4fa442183fec.png)
5. 次のように入力します。今回はこのデータソースページをインポートするファイルを添付します。もしftpサーバなどのファイルを読込ませる場合はフィールド「ファイル取得手法」を該当する方法に設定します。

|項目名|値|コメント|
|---|---|---|
|シート番号|1|
|ヘッダー行|1|
|ファイル取得手法|添付ファイル|
![datasource_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/8b233df6-4a6b-7323-acfc-2c36f3620ce2.png)
6. データソースの設定を保存します。<br/>ヘッダ領域を右クリックして「保存」を選択します。<br/>![datasource_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/55c8ea84-fc64-4d78-2cc9-1e6d1dd7b3eb.png)
7. 作成したExcelファイルをページに添付します。<br/>ペーパクリップのアイコンをクリックします。<br/>![datasource_7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/4c84059d-729a-b21b-e35d-37eaec1f79dc.png)<br/>![datasource_8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/3bfee12a-8bdb-5c81-9966-be1ca150d044.png)
8.「ファイルを選択してください」ボタンを押下して、作成したExcelファイルを選択します。<br/>![datasource_9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/e7f31b19-7af4-5233-9d72-55c06ce1bd9a.png)
9. 選択したExcelファイル名が「添付ファイルを管理」に表示されます。<br/>正しくアップロードできるか確認するために「20件のレコードのテストロード」リンクをクリックします。<br/>![datasource_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/b3a087eb-4371-9966-e641-79452a1f54fe.png)
10.正常にアップロードできる場合はStateが「完了」であり、Completion codeの値が「成功」です。<br/>成功であることを確認した後に「Create transform map」リンクをクリックして読込んむファイルの列とServiceNowテーブル列の対応を定義します。<br/>![transform_map_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/03f698d6-91c9-f7fc-9996-da774f6c7fc2.png)

## 変換マップの定義
1. コンピュータテーブルのデータを読込む場合は次のように設定します。

|項目名|値|コメント|
|---|---|---|
|名前|import_computer_with_ip_address||
|必須項目を強制する|マップしたフィールドのみ|必須フィールドが入力されていない行はエラーとする|
|ターゲットテーブル|コンピューター[cmdb_ci_computer]|コンピュータテーブルでデータを入力するため|
![transform_map_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/32dc7625-719e-2ce4-e3c2-6f6213758883.png)
2. 設定を保存します。<br/>ヘッダ領域を右クリックして「保存」を選択します。<br/>![transform_map_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/ac3481de-db9f-29e0-e95b-134b67a7753e.png)
3. 自動でマッピングします。Excelの列名をServiceNowテーブルの列名と同じにしておくと自動マッピングすることができます。<br/>「一致フィールドの自動マップ」リンクをクリックします。<br/>![transform_map_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/8162833d-3211-8871-8009-00aa80720d5b.png)
4. レコードを識別するキーを指定します。<br/>今回は列「名前」をキーにします。<br/>「u_名前」の結合を「true」に設定します。<br/>![transform_map_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/81606e37-14fc-9a23-76e0-13987f710729.png)
5. ネットワークアダプタテーブルとIPアドレステーブルにレコードをスクリプトで入力させます。<br/>「変換スクリプト」タブを選択します。<br/>![transform_map_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/9643a74f-3726-0fcb-28bc-da9341715245.png)
6. 「新規」ボタンを押下します。<br/>![transform_map_7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/eb8db429-3894-31e3-a759-db287e785fbe.png)
7. ネットワークアダプタを挿入したコンピュータ行と関連付けるためにコンピュータテーブルに行を追加した後にネットワークアダプタテーブルとIPアドレステーブルにデータを追加するようにします。<br/>フィールド時期を「onAfter」に設定します。<br/>次のスクリプトを入力してした後に「送信」ボタンを押下します。

```
    if (action == "insert") {  // 挿入の場合のみ実行する
        var ip_address_list = source.u_ipアドレス.split(";");  // セミコロン区切りのIPアドレスをリストに分割
        for (var i = 0; i < ip_address_list.length; i++) {    // IPアドレス毎に処理を実行
            var gr_nic = new GlideRecord("cmdb_ci_network_adapter"); // ネットワークアダプタレコードを作成
            gr_nic.initialize();                                     // レコードを初期化
            gr_nic.name = source.u_名前 + "_nic_"+ (i+1);            // 名前を「コンピュータ名_nic_連番」にする
            gr_nic.netmask = "255.255.255.0";                       // ネットマスクは固定値「255.255.255.0」にする
            gr_nic.cmdb_ci = target.sys_id;                         // 挿入したコンピュータレコードと関連付ける
            gr_nic.install_status = 1;                              // ステータスを「インストール」にする
            gr_nic.dhcp_enabled = false;                            // DHCPを無効にする
            var gr_nic_sys_id = gr_nic.insert();                    // ネットワークアダプタレコードを挿入する
            var gr_ip_address = new GlideRecord("cmdb_ci_ip_address"); // IPアドレスレコードを作成する
            gr_ip_address.initialize();                            // レコードを初期化
            gr_ip_address.ip_address = ip_address_list[i];         // IPアドレスを設定する
            gr_ip_address.nic = gr_nic_sys_id;                     // 挿入したネットワークアダプタと関連付ける
            gr_ip_address.insert();                                // レコードを挿入する
        }
    }
```
![transform_map_8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/93531880-ef31-fd38-44ed-2aac1e69f2e6.png)

# 実行
実際にExcelのデータを読込ませてServiceNowのコンピュータ、ネットワークアダプタ、IPアドレステーブルにレコードを作成します。
1. 作成したデータソースを開きます。<br/>アプリケーションナビゲータから「データソース」を検索して、「管理」下の「データソース」を選択します。<br/>![import_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/057bfcee-ee08-6249-69fd-62abf01ef5dd.png)
2. 定義したデータソース「import computer with ip address」を選択します。<br/>![import_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/55e38beb-a19c-bf9d-adb1-987ce1b43470.png)
3. Excelのデータを読込ませます。<br/>「すべてのレコードをロード」リンクをクリックします。<br/>![import_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/fe6bc1cc-1e88-a1d5-f6ad-6166c7840e15.png)
4. 正常に読み込まれたらStateが「完了」になりComplete codeが「成功」になります。<br/>確認した後にデータ変換を行います。<br/>「Run Transform」リンクをクリックします。<br/>![import_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/705b1829-402e-f25a-0aa6-53d5720f351a.png)
5. 定義した変換マップ名が右の箱に表示されます。「変換」ボタンを押下して変換を実行します。<br/>![import_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/9392cadb-2b58-74ce-0328-c4253020ea67.png)
6. 挿入結果を確認します。<br/>アプリケーションナビゲータから「コンピュータ」を検索して、ベースアイテム下の「コンピュータ」を選択します。<br/>![import_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/95769820-c95c-3a8b-c12e-587b6cc1d8d5.png)
7. Excelに入力したコンピュータが一覧に表示されます。<br/>![import_7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/6d219dae-43d0-3e1a-d601-b02eba9022e4.png)
8.コンピュータのフィールドを確認します。 入力された１つのレコードを選択します。<br/>![import_8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/a041d482-d178-eb5e-ee3f-97c6e540c1d4.png)
9. ネットワークアダプタとIPアドレスも正しく設定されているか確認します。<br/>ページ下に表示されている「ネットワークアダプター」タブを選択します。IPアドレス分のネットワークアダプタが表示されていることを確認します。<br/>![import_9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/c74f58e8-8aee-80de-8102-4142bb2e5548.png)
10. IPアドレスが正しく登録されているか確認します。<br/>「CI IP」タブを選択します。IPアドレス一覧が表示されます。<br/>![import_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698027/18a55df3-b586-17bb-e49a-330d9018e5bb.png)

以上