Kompira

Menu Menu

Enterprise Technical information

外部との連携 Kompira REST APIを利用して外部からオブジェクト情報を取得する

Kompira REST APIを利用して外部からジョブフローを実行する」では、指定のジョブフローを外部から操作する方法を紹介しました。
今回はKompiraのREST APIの別の利用方法として、外部からKompiraのオブジェクト情報を取得してみましょう。
また、取得した情報の応用例として、Kompira上のテーブルのデータを取得し、CSV形式のデータを作成する方法についても合わせてご紹介します。


 

動作確認環境

ソフトウェア バージョン
Kompira 1.5.5.post7
LinuxOS CentOS7.8-2003

以降では、kompiraサーバーのIPアドレスを <kompiraサーバー> と表記します。

 


事前準備

APIトークンの取得

APIの利用に必要な「REST APIトークン」を、「Kompira REST APIを利用して外部からジョブフローを実行する」に記載されている手順で取得してください。
取得したトークンを以降では <api_token> と表記します。

 

オブジェクトの作成

外部から取得するオブジェクトをKompira上に作成します。
ここでは、下図のようなテーブルオブジェクトにノード情報を登録します。


 

基本の取得方法

実際にAPIリクエストを使ってオブジェクトの情報を取得してみましょう。
オブジェクト取得時のリクエストURLは以下になります。

GET <オブジェクトパス>

ここでは、ターミナルのcURLコマンドを実行します。

$ curl -GET \
  -H "Accept: application/json" \
  -H "Authorization: Token <api_token>" \
  http://<kompiraサーバー>/root/サーバーリスト/server1

すると下記のようなJSON形式の辞書データが返却されます。

{
  "id": 58,
  "abspath": "/root/サーバーリスト/server1",
  "owner": "root",
  "fields": {
    "account": null,
    "shell": "",
    "hostname": "server1",
    "ipaddr": "192.168.1.10",
    "conntype": "ssh",
    "proxy": null,
    "port": null,
    "use_shell": true
  },
  "extra_properties": {},
  "user_permissions": {},
  "group_permissions": {},
  "display_name": "server1",
  "description": "",
  "created": "2018-10-18T05:01:45.341394Z",
  "updated": "2018-10-18T05:03:39.248934Z",
  "type_object": "/system/types/NodeInfo",
  "parent_object": "/root/サーバーリスト"
}

 

レスポンスデータの中身は以下の通りです。

キー名 説明
id オブジェクトID
abspath オブジェクトパス
owner オブジェクト所有者ユーザー名
fields フィールドデータ辞書(オブジェクト依存)
extra_properties オブジェクト拡張属性
user_permissions ユーザーパーミッション辞書
group_permissions グループパーミッション辞書
display_name 表示名
description 説明
created オブジェクト生成日時
updated オブジェクト最終更新日時
type_object 型オブジェクトのパス
parent_object 親オブジェクトのパス

 


 

オブジェクト一覧の取得

GETリクエストのエンドポイントにディレクトリもしくはテーブルオブジェクトを指定することで、配下に存在するオブジェクトを一括で取得することができます。

リクエストのURLは以下の2通りになります。

 

GET <ディレクトリもしくはテーブルのパス>.children   # 子オブジェクト一覧
GET <ディレクトリもしくはテーブルのパス>.descendant # 子孫オブジェクト一覧

 

コマンドでの実行は以下のようになります。

 

$ curl -GET \
  -H "Accept: application/json" \
  -H "Authorization: Token <api_token>" \
  http://<kompiraサーバー>/root/サーバーリスト.children

 

このときのレスポンスデータは以下です。
“results”の中に、先ほどのレスポンスデータがリストとして格納されています。

 

{
  "count": 3,
  "next": null,
  "previous": null,
  "results": [
    { "abspath": "/root/サーバーリスト/server1", ... },
    { "abspath": "/root/サーバーリスト/server2", ... },
    { "abspath": "/root/サーバーリスト/server3", ... }
  ]
}

 

一覧取得時のレスポンスデータの中身は以下の通りです。

 

キー名 説明
count オブジェクト総数
next 次ページのURL
previous 前ページのURL
results オブジェクトデータリスト

 


 

応用例1(フィルタ条件付きの一覧取得)

一覧取得のリクエスト時にクエリパラメータを指定することで、レスポンスに含まれるデータを絞り込むことができます。

例えば、以下の条件でのフィルタを行います。

1. “/root”の子孫にある
2. ノード情報オブジェクトの内、
3. 本日の00:00:00以降に更新されたオブジェクトを取得する。

このときに指定するクエリは下の表のようになります。

 

クエリパラメータ 説明
type_object 指定した型のオブジェクトのみを取得
updated__gte 指定した日付以降に更新されたオブジェクトを取得

 

コマンドでの実行は以下のようになります。

 

$ curl -GET \
  -H "Accept: application/json" \
  -H "Authorization: Token <api_token>" \
  -d "type_object=/system/types/Jobflow" \
  -d "updated__gte=$(date +'%Y-%m-%dT00:00:00')" \
  http://<kompiraサーバー>/root.descendant

 

または、クエリをURLで直接指定する以下の方法もあります。

 

$ curl -GET \
  -H "Accept: application/json" \
  -H "Authorization: Token <api_token>" \
  http://<kompiraサーバー>/root.descendant?type_object=/system/types/NodeInfo\&updated__gte=$(date +'%Y-%m-%dT00:00:00')

 

お知らせ

近日リリース予定のバージョン1.5.2では、より強力なフィルタ指定を行うことができます。乞うご期待。


 

応用例2(CSVファイルへの変換)

REST API経由で取得したデータを活用する方法について一例を説明します。
先述の「オブジェクト一覧」で取得したノードオブジェクトの情報について、CSV形式のファイルへ変換します。
ここでは整形用のコマンドとして、 jq コマンドを用いています。

 

$ curl -GET \
  -H "Accept: application/json" \
  -H "Authorization: Token <api_token>" \
  http://<kompiraサーバー>/root/サーバーリスト.children |
  jq -r '.results[].fields | [.hostname, .ipaddr, .conntype] | @csv' \
  > server_list.csv

 

変換後のデータは以下のようになります。

 

スタートガイド

Kompiraジョブフローの基礎

ジョブフローの簡単な例

Kompiraの機能

外部との連携