Tintri Python SDKをリリース
RICK EHRHART / 2016年11月2日
Rick Ehrhart は、API中心のソフトウェア開発において輝かしい経歴を持つTintriのデベロッパー エバンジェリストです。これまでにVMware、NetApp、HP、IBM、Cisco、Citrixなど多くの企業のAPI統合を支援してきました。最近、自身のブログではTintri APIに関する話題を中心に取り上げています。
2015年5月にTintriに入社する前は、NetApp、Pinnacle、Hewlett Packard、Hughes Aircraftに勤務し、サービス レベル目標、GUIフロントエンド、API、アクセス制御、rsh、Telnet、ビデオ ファイル システム、I/Oシステム、ビットマップ グラフィックス、ボリューム管理、エスカレーション エンジニアリング、トレーニングなどさまざまなプロジェクトに携わってきました。また、化学の学士号を取得しており、現在もサイエンスものに興味があるほか、旅行やSF、ガーデニング、列車の旅、レゴなどの趣味を楽しんでいます。
Tintri REST API用のPython SDK(PySDK)がご利用いただけるようになりました。コード比較やGitHubへのリンクについては、この記事の内容をご覧ください。
Tintriが推し進めるクラウド イニシアチブの一環として、このたびGitHubでTintri REST API用のPython SDK(PySDK)の提供を開始しました。TintriのPySDKはREST API上の薄い層となるもので、以下の特長を備えています。
- 自動ページネーション
- タイムアウト後の自動再ログイン
- Tintri OS 4.2とTintri Global Center(TGC)3.0に対応するv310.51のすべてのAPIを利用可能
- Python 2.7で動作
- オブジェクト指向
PySDKとtintri_1.1.pyを比較する
GitHubでtintri_1.1.pyライブラリを使っていた方なら、PySDKの良さにすぐに気づくはずです。図にすると以下のような違いがあることがわかります。
tintri_1.1.pyとPySDKのコードを比べれば、PySDKを使いたくなるに違いありません。以下のコード スニペットは、tintri_1.1.pyを使用した場合のものです。なお、この場合URLを指定し、結果をディクショナリに格納する必要があります。
# VMの一覧を取得して、ページ サイズのみを返す。
url = "/v310/vm"
r = tintri.api_get (server_name, url, session_id )
vm_paginated_result = r.json()
num_vms = int (vm_paginated_result["filteredTotal"])
if num_vms == 0:
raise tintri.TintriRequestsException("No VMs present")
print_info(str(num_vms) + " VMs present")
一方、PySDKを使用した場合は、汎用のgetメソッドの代わりにget_vms
メソッドを呼び出し、型指定されたプロパティを持つオブジェクトとして結果が返されます。また、PySDKオブジェクトが追跡するため、session_id
は必要ありません。
# ページ サイズ フィルターが適用されたVMを取得する。
vms = tintri.get_vms (filters = vm_filter_spec)
num_vms = vms.filteredTotal
if num_vms == 0:
raise TintriServerError(0, cause="No VMs present")
print_info(str(num_vms) + " VMs present")
PySDKには、各REST APIのメソッド呼び出しが用意されています。examplesディレクトリにはこの他にも多数のコード例があるのでご覧ください。
以下は更新後の違いを比較した例です。最初のコード スニペットは、VMstoreをメンテナンス モードに設定する方法を示しています。
if (new_is_enabled):
# 有効にするメンテナンス モードDTOを作成する。
new_maint_mode_info = \
{"typeId": "com.tintri.api.rest.v310.dto.domain.beans.hardware.ApplianceMaintenanceMode",
"endTime" : add_6_str,
"isEnabled" : new_is_enabled,
"startTime" : now_str
}
else:
# 無効にするメンテナンス モードDTOを作成する。
new_maint_mode_info = \
{"typeId": "com.tintri.api.rest.v310.dto.domain.beans.hardware.ApplianceMaintenanceMode",
"isEnabled" : new_is_enabled,
}
# 新しいApplianceDns DTOを使用してApplianceオブジェクトを作成する。
new_appliance = \
{"typeId": "com.tintri.api.rest.v310.dto.domain.Appliance",
"maintenanceMode": new_maint_mode_info
}
# Appliance DTOを使用してRequestオブジェクトを作成する。
request = \
{"typeId": "com.tintri.api.rest.v310.dto.Request",
"objectsWithNewValues": [new_appliance],
"propertiesToBeUpdated": ["maintenanceMode"]
}
# appliance APIを呼び出して、メンテナンス モードに設定する。
url = APPLIANCE_URL
r = tintri.api_pu t(server_name, url, request, session_id )
上記の例ではすべてのDTOにtypeId
を指定する必要がありますが、PySDKではPythonオブジェクトで対応できます。以前のライブラリではPythonのディクショナリが使用されますが、PySDKではオブジェクトのプロパティが使用されます。
# appliance maintenance modeオブジェクトを作成する。
new_maint_mode_info = ApplianceMaintenanceMode()
if (new_is_enabled):
# 有効にする属性を追加する。
new_maint_mode_info.isEnabled = new_is_enabled
new_maint_mode_info.endTime = add_6_str
new_maint_mode_info.startTime = now_str
else:
# 無効にする属性を追加する。
new_maint_mode_info.isEnabled = new_is_enabled
# update applianceメソッドを呼び出して、メンテナンス モードに設定する。
server.update_appliance (None, "default", maintenance_mode = new_maint_mode_info)
コーディングにPySDKを使用すると以下のメリットがあります。
- 記述するコードの量を削減できる
- Tintri APIの中身ではなく、手元の作業に集中できるようになる
- コードが読みやすくなる
PySDKとPowerShellを比較する
では、PySDKとPowerShell Toolkit 3.0を比べた場合を見ていきましょう。
この図からもわかるように、PowerShellの方がライブラリ層が厚くなっています。PowerShell Toolkitでは、便利なコマンドレットが用意されています。たとえば、PowerShellではEnable-TintriMaintenanceMode
とDisable-TintriMaintenanceMode
を使用するのに対し、PySDKではupdate_appliance
メソッドを使用します。詳しくは、set_maintenance_mode.pyのコード例を参照してください。また、PowerShell Toolkitではハイパーバイザー オブジェクトがサポートされていますが、PySDKでは利用できません。
PowerShellはWindowsクライアントに適しているのに対して、PythonはWindows以外のクライアントでも使用できます。また、PythonはPySDKによってさらに強化されています。
PySDKを使用するには
PySDKを使用するには、READMEファイルの手順に従ってwheelをインストールします。こちらのドキュメントに簡単なチュートリアルを載せていますのでご確認ください。私が今後ご紹介するPythonのコード例には、PySDKを使用する予定です。
ぜひPySDKをご活用ください。
– Rick –
Rick EhrhartのTwitterアカウントはこちら(@rick_ehrhart)です。