関連リンク
Qiita記事
・Exastro IT Automation クイックスタート (ver1.9.0)
・Exastro IT Automation の Setting samples(ServiceNow連携版)を使ってみた
ITAコミュニティサイト
・Exastro IT Automation コミュニティサイト
・ServiceNow連携モデル 概要
・ServiceNow連携モデル 導入手順
・GitHubリリースページ
・ITA_利用手順マニュアル エクスポート/インポート
・ITA_利用手順マニュアル Ansible-driver
・Exastro IT Automation の収集比較機能を使ってみた
はじめに
Setting samplesにServiceNow連携モデル(ITAからServiceNow上のCMDBへシステム情報の連携機能)のITA1.9.1版が公開されていたので使ってみました。
今回も収集機能で取得した情報を連携する形で、導入(インポート)~実行までをしていきます。
Servicenow連携イメージ
#今回紹介するシナリオ
本記事は以下のシナリオで進めていきます。
ServiceNow連携は会社、ハードウェアモデル、Linux、Windows、UNIX、ESX、CI関係性の7テーブルと連携しています。
※ServiceNowはdeveloperインスタンス(無料)を利用しています。
今回は下記と連携を行います。
・組織>会社
・Product Catalog>製品モデル>ハードウェアモデル
・構成管理(CMDB)>サーバ>Linux
・構成管理(CMDB)>サーバ>ESX
・CI関係性
※CI関係性はFilter Navigatorにcmdb_rel_ci.listを入力することで表示されます
準備/導入編
※以前の手順と同一のため、こちらをご参照ください。
仕込編
- 連携データの収集
- プロキシ情報の登録
- 証明書認証回避フラグの登録
- 削除実行フラグの登録
- ServiceNow連携情報の登録
- 製品モデル名_sys_id紐づけ表の登録
- サーバ名_sys_id紐づけ表の登録
- CIリレーションシップタイプの登録
- 会社の登録
- ハードウェアモデルの登録
- ESXの登録
- CI関係性の登録
実行編
- ServiceNow連携の実行
- 実行結果の確認
仕込編
1. 連携データの収集
※詳細はExastro IT Automation の収集比較機能を使ってみたを参照
下記のユーザーでログインしなおします。
ユーザーID:administrator
パスワード:ITAインストール時に変更したパスワード
1.1 機器一覧へターゲットホストの登録
※ 情報収集の対象を決めるのとServicenowへ連携する際の表示名に利用されます。
- 「基本コンソール」>「機器一覧」へ移動する。
- 「登録開始」を押下して、下記表の情報を登録したら「登録」をクリック。
項目名 | 設定値 |
---|---|
HW機器種別 | SV |
ホスト名 | Sample_Linux01 |
IPアドレス | 収集対象のIPアドレス |
ログインユーザID | 収集対象のSSHログインユーザ |
管理 | ログインパスワードを利用する場合に選択 |
ログインパスワード | 収集対象のSSHログインパスワード |
認証方式 | Ansible利用時の認証方法 |
1.2 オペレーションを登録
- 「基本コンソール」>「オペレーション一覧」へ移動する。
- 「登録開始」を押下してパラメータの値を必要に応じて入力する。
必要な項目に情報を登録したら「登録」をクリック。
項目名 | 設定値 |
---|---|
オペレーション名 | 収集_0801 |
実施予定日時 | 2022/08/01 12:00 |
1.3 Movementを登録
- 「Ansible-Legacy」>「Movement一覧」へ移動する。
- 「登録開始」を押下してパラメータの値を必要に応じて入力する。
必要な項目に情報を登録したら「登録」をクリック。
項目名 | 設定値 |
---|---|
Movement名 | GatherFacts |
ホスト指定形式 | IP |
ヘッダーセクション | 下記を入力 |
- hosts: all
remote_user: "{{ __loginuser__ }}"
gather_facts: yes
become: yes
1.4 Playbookを登録
- 「Ansible-Legacy」>「Playbook素材集」へ移動する。
- 「登録開始」を押下してパラメータの値を必要に応じて入力する。
必要な項目に情報を登録したら「登録」をクリック。
項目名 | 設定値 |
---|---|
Playbook素材名 | GatherFacts |
Playbook素材 | GatherFacts_os.yml |
_Authorizationの値については下記のマニュアルを参照してください。
Exastro-ITA_利用手順マニュアル_RestAPI.pdf
GatherFacts_os.yml
- name: Set value
set_fact:
_ita_url: "ITAのURL"
_Authorization: "ITAの認証情報"
# サーバ名_sys_id紐づけ表に対象があるか確認
- name: Check server name
uri:
url: "https://{{ _ita_url }}/default/menu/07_rest_api_ver1.php?no=0000600008"
headers:
Content-type: "application/json"
Authorization: "{{ _Authorization }}"
X-Command: FILTER_DATAONLY
method: POST
status_code: 200
validate_certs: no
body_format: json
body:
"1":
"NORMAL": "0"
"3":
"LIST": [
"{{ inventory_hostname }}"
]
register: _ita_record
environment:
no_proxy: "{{ _ita_url }}"
delegate_to: localhost
- block:
# サーバ名_sys_id紐づけ表に対象が存在しない場合レコードの登録
- name: Add server nam
uri:
url: "https://{{ _ita_url }}/default/menu/07_rest_api_ver1.php?no=0000600008"
headers:
Content-type: "application/json"
Authorization: "{{ _Authorization }}"
X-Command: EDIT
method: POST
status_code: 200
validate_certs: no
body_format: json
body:
"0": {
"0": "登録",
"3": "{{ inventory_hostname }}"
}
environment:
no_proxy: "{{ _ita_url }}"
delegate_to: localhost
when: _ita_record.json.resultdata.CONTENTS.RECORD_LENGTH <= 0
# メーカー名取得
- name: Get manufacturer
shell:
cmd: dmidecode --type system | grep 'Manufacturer' | awk -F '{{ ":" }} ' '{print $2}'
register: manufacturer_reg
# メーカー_sys_id紐づけ表に対象があるか確認
- name: Check manufacturer
uri:
url: "https://{{ _ita_url }}/default/menu/07_rest_api_ver1.php?no=0000600006"
headers:
Content-type: "application/json"
Authorization: "{{ _Authorization }}"
X-Command: FILTER_DATAONLY
method: POST
status_code: 200
validate_certs: no
body_format: json
body:
"1":
"NORMAL": "0"
"3":
"LIST": [
"{{ manufacturer_reg.stdout }}"
]
register: _ita_record_manufacturer
environment:
no_proxy: "{{ _ita_url }}"
delegate_to: localhost
- block:
# メーカー_sys_id紐づけ表に対象が存在しない場合レコードの登録
- name: Add manufacturer
uri:
url: "https://{{ _ita_url }}/default/menu/07_rest_api_ver1.php?no=0000600006"
headers:
Content-type: "application/json"
Authorization: "{{ _Authorization }}"
X-Command: EDIT
method: POST
status_code: 200
validate_certs: no
body_format: json
body:
"0": {
"0": "登録",
"3": "{{ manufacturer_reg.stdout }}"
}
environment:
no_proxy: "{{ _ita_url }}"
delegate_to: localhost
when: _ita_record_manufacturer.json.resultdata.CONTENTS.RECORD_LENGTH <= 0
# オペレーティングシステムに対象があるか確認
- name: Check os
uri:
url: "https://{{ _ita_url }}/default/menu/07_rest_api_ver1.php?no=0000600005"
headers:
Content-type: "application/json"
Authorization: "{{ _Authorization }}"
X-Command: FILTER_DATAONLY
method: POST
status_code: 200
validate_certs: no
body_format: json
body:
"1":
"NORMAL": "0"
"3":
"LIST": [
"{{ ansible_distribution }}"
]
register: _ita_record_distribution
environment:
no_proxy: "{{ _ita_url }}"
delegate_to: localhost
- block:
# オペレーティングシステムに対象が存在しない場合レコードの登録
- name: Add os
uri:
url: "https://{{ _ita_url }}/default/menu/07_rest_api_ver1.php?no=0000600005"
headers:
Content-type: "application/json"
Authorization: "{{ _Authorization }}"
X-Command: EDIT
method: POST
status_code: 200
validate_certs: no
body_format: json
body:
"0": {
"0": "登録",
"3": "{{ ansible_distribution }}"
}
environment:
no_proxy: "{{ _ita_url }}"
delegate_to: localhost
when: _ita_record_distribution.json.resultdata.CONTENTS.RECORD_LENGTH <= 0
- name: Make yaml file
blockinfile:
create: yes
mode: 0644
insertbefore: EOF
marker: ""
dest: "{{ __parameter_dir__ }}/{{ inventory_hostname }}/gatherfacts.yml"
content: |
hostname : {{ inventory_hostname }}
ansible_distribution : {{ ansible_distribution }}
ansible_distribution_version : {{ ansible_distribution_version }}
ansible_manufacturer : {{ manufacturer_reg.stdout }}
delegate_to: 127.0.0.1
1.5 MovementとPlaybookを紐付け
- 「Ansible-Legacy」>「Movement-Playbook紐付」へ移動する。
- 「登録開始」を押下してパラメータの値を必要に応じて入力する。
必要な項目に情報を登録したら「登録」をクリック。
項目名 | 設定値 |
---|---|
Movement | 1:GatherFacts |
Playbook素材 | GatherFacts |
インクルード順序 | 1 |
1.6 オペレーション・Movement・作業対象ホストを紐付け
- 「Ansible-Legacy」>「作業対象ホスト」へ移動する。
- 「登録開始」を押下してパラメータの値を必要に応じて入力する。
必要な項目に情報を登録したら「登録」をクリック。
項目名 | 設定値 |
---|---|
オペレーション | 1:収集_0801 |
Movement | 1:GatherFacts |
ホスト | 1:Sample_Linux01 |
1.7 収集項目(FROM)とパラメータシート(TO)を紐付け
- 「Ansible共通」>「収集項目値管理」へ移動する。
- 「登録開始」を押下してパラメータの値を必要に応じて入力する。
必要な項目に情報を登録したら「登録」をクリック。
項目名 | 設定値 |
---|---|
バース形式 | YAML |
PREFIX(ファイル名) | gatherfacts |
変数名 | hostname |
メニューグループ | 2100011611:代入値自動登録:600020:Linux |
項目 | パラメータ/名前 |
1.8 収集インターフェース情報変更
- 「Ansible共通」>「収集インターフェース情報」へ移動する。
- 「フィルタ」を押下すると一つだけ表示されるので「更新」をクリック。
- 必要な項目に情報を登録したら「更新」をクリック。
項目名 | 設定値 |
---|---|
RESTユーザー | admnistrator |
RESTパスワード | 上記ユーザーのパスワードを入力。 |
※上記以外は変更しない
1.9 作業実行
- 「Ansible-Legacy」>「作業実行」へ移動する。
- 登録したMovementとオペレーションを選択して「実行」をクリック。
※作業は完了したのに、メニューに表示されない場合
こちらを参照してください。
連携するためにServivenow側にも追加された情報が存在していないとエラーになります。
なので、今回はServicenow側にも下記を追加しました。
※Servicenowへの登録方法は割愛します。
項目名 | 値 |
---|---|
オペレーション | CentOS |
2. プロキシ情報の登録
※ ExastroからServiceNowへの通信にプロキシを利用しない場合はこの手順を省略可能です。
- 「Ansible共通」>「グローバル変数管理」へ移動します。
- 「フィルタ」>「グローバル変数名」がGBL_PROXYのレコードの更新ボタンをクリック。
- 「具体値」項目にプロキシサーバーの情報を入力して「更新」ボタンをクリック。
3. 証明書認証回避フラグの登録
※ ExastroからServiceNowへの通信で証明書認証を回避しない場合はこの手順を省略可能です。
- 「Ansible共通」>「グローバル変数管理」へ移動する。
- 「フィルタ」>「グローバル変数名」がGBL_CERTFLAGのレコードの更新ボタンをクリック。
- 「具体値」項目にONを入力して「更新」ボタンをクリック。
4. 削除実行フラグの登録
※ ServiceNowの連携テーブルのレコードを削除しない場合はこの手順を省略可能です。
- 「Ansible共通」>「グローバル変数管理」へ移動する。
- 「フィルタ」>「グローバル変数名」がGBL_DELETE_EXECUTEのレコードの更新ボタンを押下する。
- 「具体値」項目にONを入力して「更新」ボタンを押下する。
追加、更新、削除の条件は以下の通り
ITA | ServiceNow | ServiceNowに実行される処理 |
---|---|---|
レコードあり | レコードなし | 追加 |
レコードあり | レコードあり | 更新 |
レコードなし | レコードあり | 削除実行フラグON:削除 削除実行フラグOFF:スキップ |
レコードなし | レコードなし | スキップ |
5. ServiceNow連携情報の登録
※ ITAからServicenowへの接続をするための情報を登録します。
- 「ServiceNow接続情報」>「ServiceNow接続情報」へ移動する。
- 「オペレーション名」がServiceNow連携のレコードの更新をクリック
- 全ての項目に値を入力し「更新」をクリック。
項目名 | 値 |
---|---|
インスタンス名 | ドメインなしのServiceNowインスタンス名 |
ユーザー名 | ServiceNowのユーザー |
パスワード | ServiceNowのパスワード |
6. 製品モデル名_sys_id紐づけ表の登録
- 「マスタ管理_Servicenow連携モデル」>「製品モデル名_sys_id紐づけ表」へ移動する。
- 「登録開始」を押下して、下記表の情報を登録したら「登録」をクリック。
項目名 | 設定値 |
---|---|
名前 | Sample_model01 |
sys_id | 入力/変更不可※Ansibleが設定する項目 |
7. サーバ名_sys_id紐づけ表の登録
- 「マスタ管理_Servicenow連携モデル」>「サーバ名_sys_id紐づけ表」へ移動する。
- 「登録開始」を押下して、下記表の情報を登録したら「登録」をクリック。
項目名 | 設定値 |
---|---|
名前 | Sample_ESX01 |
sys_id | 入力/変更不可※Ansibleが設定する項目 |
8. CIリレーションシップタイプの登録
ServiceNow側
- 「構成管理(CMDB)」>「CI関係タイプ」へ移動する。
- ITAに登録したいレコードの上で右クリックし、「sys_idのコピー」をクリック。
ITA側
- 「マスタ管理_Servicenow連携モデル」>「CIリレーションシップタイプ」へ移動する。
- 「登録開始」を押下して、下記表の情報を登録したら「登録」をクリック。
項目名 | 設定値 |
---|---|
名前 | 登録:::登録済み |
sys_id | コピーしてきたsys_id |
9. 会社の登録
- 「組織_Servicenow連携モデル」>「会社」へ移動する。
- 「登録開始」を押下して、下記表の情報を登録したら「登録」をクリック。
項目名 | 設定値 |
---|---|
ホスト名 | exastro-it-automation |
オペレーション | 2021/04/01 12:00_600001:ServiceNow連携 |
代入順序 | 1 |
ServiceNow側連携日時 | 入力/変更不可※Ansibleが設定する項目 |
名前 | VMware, Inc. |
番地 | |
市区町村 | |
郵便番号 | |
電話番号 |
10. ハードウェアモデルの登録
- 「製品モデル_Servicenow連携モデル」>「ハードウェアモデル」へ移動する。
- 「登録開始」を押下して、下記表の情報を登録したら「登録」をクリック。
項目名 | 設定値 |
---|---|
ホスト名 | exastro-it-automation |
オペレーション | 2021/04/01 12:00_600001:ServiceNow連携 |
代入順序 | 1 |
ServiceNow側連携日時 | 入力/変更不可※Ansibleが設定する項目 |
名前 | Sample_model01 |
メーカー | VMware, Inc. |
モデル番号 |
11. ESXの登録
- 「サーバ_Servicenow連携モデル」>「ESX」へ移動する。
- 「登録開始」を押下して、下記表の情報を登録したら「登録」をクリック。
項目名 | 設定値 |
---|---|
ホスト名 | exastro-it-automation |
オペレーション | 2021/04/01 12:00_600001:ServiceNow連携 |
代入順序 | 1 |
ServiceNow側連携日時 | 入力/変更不可※Ansibleが設定する項目 |
名前 | Sample_ESX01 |
メーカー | VMware, Inc. |
モデルID | Sample_model01 |
オペレーティングシステム | CentOS |
OSバージョン | 7.8 |
説明 | |
クラス |
12. CI関係性の登録
- 「関係性_Servicenow連携モデル」>「CI関係性」へ移動する。
- 「登録開始」を押下して、下記表の情報を登録したら「登録」をクリック。
項目名 | 設定値 |
---|---|
ホスト名 | exastro-it-automation |
オペレーション | 2021/04/01 12:00_600001:ServiceNow連携 |
代入順序 | 1 |
ServiceNow側連携日時 | 入力/変更不可※Ansibleが設定する項目 |
sys_id | 入力/変更不可※Ansibleが設定する項目 |
親ホスト/名前 | Sample_ESX01 |
関係性/名前 | 登録:::登録済み |
子ホスト/名前 | Sample_Linux01 |
実行編
1. ServiceNow連携の実行
単体実行
- 「Conductor」>「Conductor作業実行」へ移動する
- 「Conductor[一覧]」の「ServiceNow連携」を選択する。
- 「オペレーション[一覧]」から「ServiceNow連携」を選択する。
※「5. オペレーション一覧の登録」で実施したやつも表示されるがそれは選択しない - 画面下部の実行ボタンをクリック。
定期実行
- 「Conductor」>「Conductor定期作業実行」へ移動する
- 「Conductor[登録]」>「登録開始」をクリック。
- 必要な項目に情報を登録したら「登録」をクリック。
必須項目
● Conductor名称:プルダウンから[ServiceNow連携]を選択する。
● オペレーション名:プルダウンから[ServiceNow連携]を選択する
● スケジュール設定:利用手順マニュアル Conductorの「4.1.7 Conductor定期作業実行」を参考にスケジュールを設定する。
2. 実行結果の確認
ITA側
- Statusに「正常終了」が表示されていることを確認する
ServiceNow側
- ServiceNowへログインする。
- 各メニューへ移動し、ITAに登録したレコードが連携されていることを確認する。
※ CI関係性は下記のようにURLに指定するかフィルタでcmdb_rel_ci.listを入力すると見れます。
https://[インスタンス名].service-now.com/now/nav/ui/classic/params/target/cmdb_rel_ci_list.do
以上、今回は、Setting samplesの準備・導入~実行を実施しました。