概要
- cohesityとは
- クラウド、オンプレにあるVMなどに対しバックアップ取得できるストレージ製品
- Protection>job>object(VMなど)というデータ構造になっている
要件
- Cohesityが提供しているRESTを使用しProtectionjobのバックアップを取得
補足
実装方法(REST)
-
GET /public/accessTokens
を使用しaccessToken払い出し(以降手順ではヘッダーにaccessTokenを利用) -
GET /public/search/protectionSources?searchString={VM名}
sourceIDを取得 -
GET /public/restore/objects?search={job名}
jobIdを取得 -
GET /public/protectionJobs/{jobId}
jobに関するobjectを取得 -
PUT /public/protectionJobs/{jobId}
bodyにobjectを使用、その中のsourceIdsにsourceIDを追加(リスト構造)
(ex.) sourceIds: [100, 150] → sourceIds: [100, 150, 190]
実装方法(management-sdk-python)
RESTで実現する手順を理解してやれば同様のことをこのライブラリで実現可能。
HeaderやTokenなどはいい感じに巻き取ってくれているためこのライブラリを使用するならば不要
bodyの構造はもう少し複雑だが省略
注意点として帰ってきたjsonをprintし中身を表記させたkeyにアクセスしようとするとアトリビュートエラーが出ることがある。
sourceIdsというkeyではなくsource_idsでアクセス可能な場合あり、全体的にキャメルと見せかけて実はスネークだったパターンが何個かある。
ログイン情報は各環境に応じて任意の値にする
cluster_vipはcohesityのip、domainはLOCALで入れた(地味にハマった)
add_vm.py
from cohesity_management_sdk.api_helper import APIHelper
from cohesity_management_sdk import cohesity_client
cohesity_client = CohesityClient(cluster_vip=CLUSTER_VIP,
username=CLUSTER_USERNAME,
password=CLUSTER_PASSWORD,
domain=DOMAIN)
# 1 sourceid取得
source_id = cohesity_client.search.search_protection_sources(search_string=VM名)
# objectで帰ってくるためAPIHelperを使用しrawに変換
# 中身はstring 後の手順でエラーを回避するためintに変換しておく
source_id = int(APIHelper.json_serialize(source_id))
# 2 jobidを取得
jobid = cohesity_client.search.search_protection_sources(search_string=job名)
jobid = APIHelper.json_serialize(jobid)
# 3 jobidを使用しobject(body)を取得
body = cohesity_client.protection_jobs.get_protection_jobs(ids=jobid)
# 4リストの加工
body[0].source_ids.append(source_id)
# 対象jobにVMなどを追加
cohesity_client.protection_jobs.update_protection_jobs(body=body[0], id=jobid)
所感
やってみた系の技術ブログが皆無だったため公式リファレンスとライブラリのREADMEやソースの中身をにらめっこし突破。
大企業ではない製品やそれに付随するライブラリは手軽に解説してるとこがほぼ無く0からの調査、実践が頻繁に発生するため実力がつく。
落ち着いてライブラリの中身を読み込めばどこで何をしてるか理解できるが工数と要相談。
後学のためここに記す、説明は相当雑だが同じ苦しみを味わっている人の一助になればいいと思っている。