LoginSignup
3
1

TurbonomicのAPIを叩いてみよう with Python

Last updated at Posted at 2023-10-16

はじめに

この記事ではARM(Application Resource Management)製品である、IBM Turbonomicにて提供されているREST APIをPythonで叩き、取得したデータをJSONファイルとして保存する方法を記載いたします。

Turbonomic自体にも様々なダッシュボードが用意されていますが、ご自身の手でTurbonomicからデータを取得し利用したいシーンなどがあると思いますので、ご参考程度に読んでいただければと思います。

Turbonomicにはフリートライアルもありますのでこちらの記事もぜひ!

Turbonomic側の準備

はじめにTurbonomicのコンソール画面にて、API実行用のローカルユーザーを作成します。

Turbonomicにログインし、画面左端の SETTINGS をクリックします。
Turbonomic Settings画面が表示されたら、User Management をクリックします。
image.png

User Management画面が表示されたら、右上の NEW LOCAL USER をクリックします。
image.png

USERNAME, PASSWORD を入力し、ROLEは今回は Site Administorator を選択し、SAVE USER をクリックします。

ROLEとOPTIONSについては公式ドキュメントにて説明があります。
必要に応じて参照し適切なロールを設定してください。

ここで入力したユーザー名・パスワードをPythonでも使うので忘れない様に!

image.png

これでTurbonomic側の準備は完了です。

ターミナルで疎通確認

Pythonで書く前に作成したユーザーでデータが取得できることを確認したいと思います。
コマンドの例はドキュメントにも記載があります

ターミナル or コマンドプロンプト を開き各コマンドをご自身の情報に書き換えて実行してみましょう。

認証トークンの取得

コマンド
curl -s -k -c ① \
-H 'accept: application/json' \
'https://②/api/v3/login?hateoas=true' \
-d 'username=③&password=④'

①…cookieの保存場所/名前。例)/tmp/cookie
②…TurbonomicのIPアドレスまたはホスト名
③…先ほど作成したローカルユーザーの名前
④…先ほど作成したローカルユーザーのパスワード

下記の様なレスポンスが返ってきたらOKです。

{"uuid":"9999999999999","username":"adachi","roles":[{"name":"SITE_ADMIN"}],"loginProvider":"Local","authToken":"XXXXXX","showSharedUserSC":false}%   

データの取得

認証が通ったので、ユーザーのリストを下記コマンドで取得してみます。
①…cookieの保存場所/名前。例)/tmp/cookie
②…TurbonomicのIPアドレスまたはホスト名

curl -k -X 'GET' -b ① \
'https://②/api/v3/users' \
-H 'accept: application/json' 

成功すると下記の様なレスポンスが得られます。(みやすい様に整形してあります。)

[
	{
		"uuid": "9999999999999",
		"displayName": "adachi",
		"username": "adachi",
		"roles": [
			{
				"name": "SITE_ADMIN"
			}
		],
		"loginProvider": "Local",
		"type": "DedicatedCustomer",
		"showSharedUserSC": false
	},
	{
		"uuid": "1111111111111",
		"displayName": "xxxxx",
		"username": "xxxxx",
		"roles": [
			{
				"name": "OPERATIONAL_OBSERVER"
			}
		],
		"loginProvider": "Local",
		"type": "DedicatedCustomer",
		"showSharedUserSC": false
	}
]

これでREST API経由でデータが取得できることが確認できました。
ここまででデータが取得できない方は認証情報の見直しや、コマンドが合っているかを確認してください。

Pythonでデータ取得

step by stepでソースコードを記載していきます。

ライブラリのインストール

環境によってはpipではなくpip3を使用ください。

pip install requests

認証トークン取得コマンドの書き換え

import requests

def login_to_turbonomic(base_url, username, password):
    session = requests.Session()
    url = f"{base_url}/api/v3/login"
    headers = {
        'accept': 'application/json'
    }
    payload = {
        'username': username,
        'password': password
    }    
    params = {
        'hateoas': 'true'
    }

    response = session.post(url, headers=headers, data=payload, params=params, verify=True)
    if response.status_code == 200:
        return session
    else:
        response.raise_for_status()

BASE_URL = "https://Turbonomicのホスト名"

# ログイン処理
session = login_to_turbonomic(BASE_URL, 'ユーザー名', 'パスワード')

ユーザー一覧取得コマンドの書き換え

import requests

def login_to_turbonomic(base_url, username, password):
    session = requests.Session()
    url = f"{base_url}/api/v3/login"
    headers = {
        'accept': 'application/json'
    }
    payload = {
        'username': username,
        'password': password
    }    
    params = {
        'hateoas': 'true'
    }

    response = session.post(url, headers=headers, data=payload, params=params, verify=True)
    if response.status_code == 200:
        return session
    else:
        response.raise_for_status()

+ def get_users(session, base_url):
+     url = f"{base_url}/api/v3/users"
+     headers = {
+         'accept': 'application/json'
+     }
+ 
+     # SSL証明書の検証をスキップする場合は verify=False を引数に追加ください。
+     response = session.get(url, headers=headers)
+     if response.status_code == 200:
+         return response.json()
+     else:
+         response.raise_for_status()

BASE_URL = "https://TurbonomicのIPアドレスまたはホスト名"

# ログイン処理
session = login_to_turbonomic(BASE_URL, 'ユーザー名', 'パスワード')

+ # ユーザー一覧取得
+ users = get_users(session, BASE_URL)

JSONファイルとして保存

import requests
+ import json

def login_to_turbonomic(base_url, username, password):
    session = requests.Session()
    url = f"{base_url}/api/v3/login"
    headers = {
        'accept': 'application/json'
    }
    payload = {
        'username': username,
        'password': password
    }    
    params = {
        'hateoas': 'true'
    }

    response = session.post(url, headers=headers, data=payload, params=params, verify=True)
    if response.status_code == 200:
        return session
    else:
        response.raise_for_status()

def get_users(session, base_url):
    url = f"{base_url}/api/v3/users"
    headers = {
        'accept': 'application/json'
    }

    # SSL証明書の検証をスキップする場合は verify=False を引数に追加ください。
    response = session.get(url, headers=headers)
    if response.status_code == 200:
        return response.json()
    else:
        response.raise_for_status()

+ def json_dump(data, filename):
+     with open(filename + '.json', 'w') as f:
+         json.dump(data, f, indent=4)

BASE_URL = "https://TurbonomicのIPアドレスまたはホスト名"

# ログイン処理
session = login_to_turbonomic(BASE_URL, 'ユーザー名', 'パスワード')

# ユーザー一覧取得
users = get_users(session, BASE_URL)

+ # データをJSONとして保存
+ json_dump(users, 'users')

完成したソースコード

import requests
import json

def login_to_turbonomic(base_url, username, password):
    session = requests.Session()
    url = f"{base_url}/api/v3/login"
    headers = {
        'accept': 'application/json'
    }
    payload = {
        'username': username,
        'password': password
    }    
    params = {
        'hateoas': 'true'
    }

    response = session.post(url, headers=headers, data=payload, params=params, verify=True)
    if response.status_code == 200:
        return session
    else:
        response.raise_for_status()

def get_users(session, base_url):
    url = f"{base_url}/api/v3/users"
    headers = {
        'accept': 'application/json'
    }

    # SSL証明書の検証をスキップする場合は verify=False を引数に追加ください。
    response = session.get(url, headers=headers)
    if response.status_code == 200:
        return response.json()
    else:
        response.raise_for_status()

def json_dump(data, filename):
    with open(filename + '.json', 'w') as f:
        json.dump(data, f, indent=4)

BASE_URL = "https://TurbonomicのIPアドレスまたはホスト名"

# ログイン処理
session = login_to_turbonomic(BASE_URL, 'ユーザー名', 'パスワード')

# ユーザー一覧取得
users = get_users(session, BASE_URL)

# データをJSONとして保存
json_dump(users, 'users')

任意の名前で保存し、実行してみましょう。
.pyと同じフォルダにusers.jsonというファイルが生成されていると思います。

中身を確認すると先ほどコマンドで取得したデータと同じものが書き込まれているのではないでしょうか。

最後に

これでPythonを使って、Turbonomicからデータを取得することができました。
今回は取得結果をそのままJSONファイルとして保存しましたが、もちろん保存前に加工をしたりすることもできます。
本ソースコードを改修する際はぜひpandasやrequestsモジュールの使い方を調べつつ拡張ください。

Turbonomicにどの様なエンドポイントが存在するかについては、ドキュメントもしくは、Swaggerにてご確認ください。

Swaggerへのアクセスは、https://TurbonomicのIPアドレスまたはホスト名/swagger/external/index.html となります。

3
1
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
3
1