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の機能

外部との連携