0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-12-06

関連リンク

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連携イメージ

image.png

#今回紹介するシナリオ

本記事は以下のシナリオで進めていきます。
ServiceNow連携は会社、ハードウェアモデル、Linux、Windows、UNIX、ESX、CI関係性の7テーブルと連携しています。
※ServiceNowはdeveloperインスタンス(無料)を利用しています。

今回は下記と連携を行います。
  ・組織>会社
  ・Product Catalog>製品モデル>ハードウェアモデル
  ・構成管理(CMDB)>サーバ>Linux
  ・構成管理(CMDB)>サーバ>ESX
  ・CI関係性
  ※CI関係性はFilter Navigatorにcmdb_rel_ci.listを入力することで表示されます

準備/導入編

※以前の手順と同一のため、こちらをご参照ください。

仕込編

  1. 連携データの収集
  2. プロキシ情報の登録
  3. 証明書認証回避フラグの登録
  4. 削除実行フラグの登録
  5. ServiceNow連携情報の登録
  6. 製品モデル名_sys_id紐づけ表の登録
  7. サーバ名_sys_id紐づけ表の登録
  8. CIリレーションシップタイプの登録
  9. 会社の登録
  10. ハードウェアモデルの登録
  11. ESXの登録
  12. CI関係性の登録

実行編

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

仕込編

1. 連携データの収集

※詳細はExastro IT Automation の収集比較機能を使ってみたを参照

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

1.1 機器一覧へターゲットホストの登録

※ 情報収集の対象を決めるのとServicenowへ連携する際の表示名に利用されます。

  1. 「基本コンソール」>「機器一覧」へ移動する。
  2. 「登録開始」を押下して、下記表の情報を登録したら「登録」をクリック。
項目名 設定値
HW機器種別 SV
ホスト名 Sample_Linux01
IPアドレス 収集対象のIPアドレス
ログインユーザID 収集対象のSSHログインユーザ
管理 ログインパスワードを利用する場合に選択
ログインパスワード 収集対象のSSHログインパスワード
認証方式 Ansible利用時の認証方法

image.png

1.2 オペレーションを登録

  1. 「基本コンソール」>「オペレーション一覧」へ移動する。
  2. 「登録開始」を押下してパラメータの値を必要に応じて入力する。
    必要な項目に情報を登録したら「登録」をクリック。
項目名 設定値
オペレーション名 収集_0801
実施予定日時 2022/08/01 12:00

image.png

1.3 Movementを登録

  1. 「Ansible-Legacy」>「Movement一覧」へ移動する。
  2. 「登録開始」を押下してパラメータの値を必要に応じて入力する。
    必要な項目に情報を登録したら「登録」をクリック。
項目名 設定値
Movement名 GatherFacts
ホスト指定形式 IP
ヘッダーセクション 下記を入力
- hosts: all
  remote_user: "{{ __loginuser__ }}"
  gather_facts: yes
 become: yes

image.png

1.4 Playbookを登録

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

_Authorizationの値については下記のマニュアルを参照してください。
Exastro-ITA_利用手順マニュアル_RestAPI.pdf

GatherFacts_os.yml
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

image.png

1.5 MovementとPlaybookを紐付け

  1. 「Ansible-Legacy」>「Movement-Playbook紐付」へ移動する。
  2. 「登録開始」を押下してパラメータの値を必要に応じて入力する。
    必要な項目に情報を登録したら「登録」をクリック。
項目名 設定値
Movement 1:GatherFacts
Playbook素材 GatherFacts
インクルード順序 1

image.png

1.6 オペレーション・Movement・作業対象ホストを紐付け

  1. 「Ansible-Legacy」>「作業対象ホスト」へ移動する。
  2. 「登録開始」を押下してパラメータの値を必要に応じて入力する。
    必要な項目に情報を登録したら「登録」をクリック。
項目名 設定値
オペレーション 1:収集_0801
Movement 1:GatherFacts
ホスト 1:Sample_Linux01

image.png

1.7 収集項目(FROM)とパラメータシート(TO)を紐付け

  1. 「Ansible共通」>「収集項目値管理」へ移動する。
  2. 「登録開始」を押下してパラメータの値を必要に応じて入力する。
    必要な項目に情報を登録したら「登録」をクリック。
項目名 設定値
バース形式 YAML
PREFIX(ファイル名) gatherfacts
変数名 hostname
メニューグループ 2100011611:代入値自動登録:600020:Linux
項目 パラメータ/名前

image.png

※残りの項目とも紐づけて最終的に下記のようになる
image.png

1.8 収集インターフェース情報変更

  1. 「Ansible共通」>「収集インターフェース情報」へ移動する。
  2. 「フィルタ」を押下すると一つだけ表示されるので「更新」をクリック。
  3. 必要な項目に情報を登録したら「更新」をクリック。
項目名 設定値
RESTユーザー admnistrator
RESTパスワード 上記ユーザーのパスワードを入力。

※上記以外は変更しない

image.png

1.9 作業実行

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

image.png

image.png

※作業状態確認で、ステータスが完了になれば作業完了です。
image.png

※作業は完了したのに、メニューに表示されない場合
こちらを参照してください。

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

項目名
オペレーション CentOS

image.png

2. プロキシ情報の登録

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

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

image.png

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

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

  1. 「Ansible共通」>「グローバル変数管理」へ移動する。
  2. 「フィルタ」>「グローバル変数名」がGBL_CERTFLAGのレコードの更新ボタンをクリック。
  3. 「具体値」項目にONを入力して「更新」ボタンをクリック。
    image.png

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

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

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

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

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

image.png

5. ServiceNow連携情報の登録

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

  1. 「ServiceNow接続情報」>「ServiceNow接続情報」へ移動する。
  2. 「オペレーション名」がServiceNow連携のレコードの更新をクリック
  3. 全ての項目に値を入力し「更新」をクリック。
項目名
インスタンス名 ドメインなしのServiceNowインスタンス名
ユーザー名 ServiceNowのユーザー
パスワード ServiceNowのパスワード

image.png

6. 製品モデル名_sys_id紐づけ表の登録

  1. 「マスタ管理_Servicenow連携モデル」>「製品モデル名_sys_id紐づけ表」へ移動する。
  2. 「登録開始」を押下して、下記表の情報を登録したら「登録」をクリック。
項目名 設定値
名前 Sample_model01
sys_id 入力/変更不可※Ansibleが設定する項目

image.png

7. サーバ名_sys_id紐づけ表の登録

  1. 「マスタ管理_Servicenow連携モデル」>「サーバ名_sys_id紐づけ表」へ移動する。
  2. 「登録開始」を押下して、下記表の情報を登録したら「登録」をクリック。
項目名 設定値
名前 Sample_ESX01
sys_id 入力/変更不可※Ansibleが設定する項目

image.png

8. CIリレーションシップタイプの登録

ServiceNow側

  1. 「構成管理(CMDB)」>「CI関係タイプ」へ移動する。
  2. ITAに登録したいレコードの上で右クリックし、「sys_idのコピー」をクリック。

image.png

ITA側

  1. 「マスタ管理_Servicenow連携モデル」>「CIリレーションシップタイプ」へ移動する。
  2. 「登録開始」を押下して、下記表の情報を登録したら「登録」をクリック。
項目名 設定値
名前 登録:::登録済み
sys_id コピーしてきたsys_id

image.png

9. 会社の登録

  1. 「組織_Servicenow連携モデル」>「会社」へ移動する。
  2. 「登録開始」を押下して、下記表の情報を登録したら「登録」をクリック。
項目名 設定値
ホスト名 exastro-it-automation
オペレーション 2021/04/01 12:00_600001:ServiceNow連携
代入順序 1
ServiceNow側連携日時 入力/変更不可※Ansibleが設定する項目
名前 VMware, Inc.
番地
市区町村
郵便番号
電話番号

image.png

10. ハードウェアモデルの登録

  1. 「製品モデル_Servicenow連携モデル」>「ハードウェアモデル」へ移動する。
  2. 「登録開始」を押下して、下記表の情報を登録したら「登録」をクリック。
項目名 設定値
ホスト名 exastro-it-automation
オペレーション 2021/04/01 12:00_600001:ServiceNow連携
代入順序 1
ServiceNow側連携日時 入力/変更不可※Ansibleが設定する項目
名前 Sample_model01
メーカー VMware, Inc.
モデル番号

image.png

11. ESXの登録

  1. 「サーバ_Servicenow連携モデル」>「ESX」へ移動する。
  2. 「登録開始」を押下して、下記表の情報を登録したら「登録」をクリック。
項目名 設定値
ホスト名 exastro-it-automation
オペレーション 2021/04/01 12:00_600001:ServiceNow連携
代入順序 1
ServiceNow側連携日時 入力/変更不可※Ansibleが設定する項目
名前 Sample_ESX01
メーカー VMware, Inc.
モデルID Sample_model01
オペレーティングシステム CentOS
OSバージョン 7.8
説明
クラス

image.png

12. CI関係性の登録

  1. 「関係性_Servicenow連携モデル」>「CI関係性」へ移動する。
  2. 「登録開始」を押下して、下記表の情報を登録したら「登録」をクリック。
項目名 設定値
ホスト名 exastro-it-automation
オペレーション 2021/04/01 12:00_600001:ServiceNow連携
代入順序 1
ServiceNow側連携日時 入力/変更不可※Ansibleが設定する項目
sys_id 入力/変更不可※Ansibleが設定する項目
親ホスト/名前 Sample_ESX01
関係性/名前 登録:::登録済み
子ホスト/名前 Sample_Linux01

image.png

実行編

1. ServiceNow連携の実行

単体実行

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

image.png

image.png

定期実行

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

必須項目
● Conductor名称:プルダウンから[ServiceNow連携]を選択する。
● オペレーション名:プルダウンから[ServiceNow連携]を選択する
● スケジュール設定:利用手順マニュアル Conductorの「4.1.7 Conductor定期作業実行」を参考にスケジュールを設定する。

image.png

※スケジュール設定サンプル
image.png

2. 実行結果の確認

ITA側

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

image.png

ServiceNow側

  1. ServiceNowへログインする。
  2. 各メニューへ移動し、ITAに登録したレコードが連携されていることを確認する。

image.png

image.png

image.png

image.png

image.png
※ CI関係性は下記のようにURLに指定するかフィルタでcmdb_rel_ci.listを入力すると見れます。
https://[インスタンス名].service-now.com/now/nav/ui/classic/params/target/cmdb_rel_ci_list.do


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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?