はじめに
PowerVS の API を プライベート・ エンドポイントで curl コマンドで実行するための環境変数設定ログです。
参考:IBM Cloud Docs Power Cloud API
当記事記載時点(2023年2月) ibmcloud コマンドの power-iaas プラグインはプライベート・エンドポイントをサポートしていないそうです。
そのためプライベート・エンドポイントで操作したい場合は、APIを直接実行となるようです。
# ibmcloud pi service-target crn:v1:bluemix:public:power-iaas:osa21:a/52xxxxxde69144428266:97xxxxa7-xxxx-xxxx-xxxx-f87xxxxd::
失敗
プラグイン 'power-iaas 0.4.6' はプライベート・エンドポイントをサポートしていません。 'ibmcloud api' を実行してパブリック API エンドポイントを設定してやり直してください。
対象読者
PowerVS の API を プライベート・エンドポイントで実施したい方
環境
PowerVS API のプライベート・エンドポイント実行は、
IBM Cloud Kubernetes Service (Classic) の Linux コンテナから実施しました。
環境変数の設定
以下の環境変数を設定します。
・APIKEY
・TOK_CRN (Tokyo Region のClond Resource Name(CRN))
・TOK_CLOUD_INSTANCE_ID (Tokyo Region の PowerVS Cloud Instance ID)
・ACCESS_TOKEN
APIキーの設定
APIキーの作成は以下を参照
IBM Cloud コンソールで**「管理」** > 「アクセス (IAM)」 > **「API キー」**に移動します。
**「IBM Cloud API キーの作成」をクリックします。
API キーの名前と説明を入力します。
「作成」 をクリックします。
次に、「表示」をクリックして API キーを表示します。または、「コピー」をクリックして後で使用するためにコピーして保存するか、または「ダウンロード」**をクリックします。
作成したAPIキーを変数に設定します。
# export APIKEY=< API Key>
Cloud Resource Name(CRN) の設定
CRNの取得は以下を参照
CRNは ibmcloud pi service-list コマンドで確認可能です。
一例
$ ibmcloud pi service-list
ID 名前
crn:v1:bluemix:public:power-iaas:us-south:a/xxxxxb0f3a4109xxxxx144428266:ef5xxxxx-0xxc-4287-xxxx-45b96870xxxx:: psvs-dal
crn:v1:bluemix:public:power-iaas:osa21:a/xxxxxcb0f3a41xxxxx69144xxxxxx66:976c66a7-xxxx-4432-xxxx-f876cce6db0d:: psvs-osa21
crn:v1:bluemix:public:power-iaas:tok04:a/xxxxxf3a4109ac0xxxxx4428266xxxx:xxxxxdx0-26e5-xxxx-xxdf-728xxxxbxxxx:: psvs-tok04
また対象のワークスペースの表示からも確認できます。
確認した値を変数として設定します。
# export TOK_CRN="xxxxxf3a4109ac0xxxxx4428266xxxx:xxxxxdx0-26e5-xxxx-xxdf-728xxxxbxxxx::"
CLOUD INSTANCE ID の取得
CLOUD INSTANCE IDは CRN の後方部分から取得が可能です。
例
export TOK_CLOUD_INSTANCE_ID=`echo $TOK_CRN | awk -F '[:]' '{print $8}'`
ACCESS TOKENの取得
ACCESS TOKEN は iam.cloud.ibm.com/identity/token のAPIを実行します。
以下の実行で直接変数"ACCESS_TOKEN"に入力します。
$ export ACCESS_TOKEN=$(curl -X POST "https://private.iam.cloud.ibm.com/identity/token" -H "content-type: application/x-www-form-urlencoded" -H "accept: application/json" -d "grant_type=urn%3Aibm%3Aparams%3Aoauth%3Agrant-type%3Aapikey&apikey=${APIKEY}" --insecure | jq -r '.access_token')
ACCESS_TOKEN 取得確認
# echo $ACCESS_TOKEN
xxxxxxxxxxxxxxxiOiJSUzI1NiJ9.eyJpYW1faWQiOxxxxxxxxxxxxxxxyNzAwMDFNUktTIiwicmVhbG1pZCI6IklCTWlkIiwianRpIjoiMmE2MWU4NDMtNjljZS00NzgzLThjNWItNjM5ZDZiZjM0ZjMyIiwiaxxxxxxxxxxxxxxxMU1SS1MiLCJnaXZlbl9uYW1lIjoiQ2hpeW9rbyxxxxxaGl5b2tvIFVzaGlvZ2kiLCJlbWFpbCI6IkFIQTAzNjQwQGpwLmlibS5jb20iLCJzdWIiOiJBSEEwMzY0MEBqcC5pYm0uY29tIiwiYXV0aG4iOnsic3ViIjoiQUhBMDxxxxxTWlkLTI3MDAwMU1xxxxxxxxxxxxxxx2hpb2dpIiwiZ2l2ZW5fbmFtZSI6IkNoaXlva28iLCJmYW1pbHlfbmFtZSI6IlVzaGlvZ2kiLCJlbWFpbCI6IkFIQTAzNjQwQGpwLmlibS5jb20ifSwiYWNjb3VudCI6eyJib3VuZGFyeSI6Imdsb2JhbCIsInZhbGlkIjp0cnVlLCJic3xxxxxiIxxxxxxxxxxxxxxxSIsImZyb3plbiI6dHJ1ZSwiaW1zIjoiMTM3ODk0MyJ9LCJtZmEiOnsiaW1zIjxxxxxxxxxxxxxxxmlibS5jb20vaWRlbnRpdHkiLCJncmFudF90eXBlIjoidXJuOmlibTpwYXJhbXM6b2F1dGg6Z3JhbnQtdHlwZTphcGlrZXkiLCJzY29wZSI6ImlibSxxxxx19.vO70LKQ3-NH4tR1esXKt0i59H5UkVKlKbSUAwqaDf2E6oxIyLxxxxxxxxxxxxxxxxxxEiJ1SIk-NSC3IEs2LpGFJurwa9vebknzCgS1jfHnPBDrFrWuSY-Ohv9MYyXfwUW2k4QCz1GJxYziEtr4VayP-xxxxxxxxxxxxxxxOzqmM0QFwaJlqbepjjYgCPUfD-XqbpeGOfg3A5D2tODJQf1WUlFp519TwqNq872F_1uWC2I5_qUlTh9Fb485s7uFpWdkTNSox5xxxxxxxxxxxxxxx
これで PowerVS API プライベート・エンドポイントで curl での操作が可能となりました。
(参考実行) ボリュームの情報取得
PowerVS API 実行のボリュームの情報取得の例です。
プライベート・エンドポイントで、"private.jp-tok.power-iaas.cloud.ibm.com" を指定しています。
PowerVS API : List all volumes attached to a PVM Instance
# curl -sSfX GET https://private.jp-tok.power-iaas.cloud.ibm.com/pcloud/v1/cloud-instances/${TOK_CLOUD_INSTANCE_ID}/volumes -H "Authorization: Bearer ${ACCESS_TOKEN}" -H "CRN: ${TOK_CRN}" -H 'Content-Type: application/json' | jq -r
{
"volumes": [
{
"bootVolume": false,
"bootable": false,
"creationDate": "2022-03-07T07:57:53.000Z",
"diskType": "tier3",
"href": "/pcloud/v1/cloud-instances/xxxxxx080031f60c3e6fac3/volumes/e6exxx5-413c-495e-91dc-5bxxxxxx6",
"lastUpdateDate": "2022-03-09T01:50:00.000Z",
"name": "bkdisk",
"pvmInstanceIDs": [],
"shareable": false,
"size": 80,
"state": "available",
"volumeID": "e6xxxxx45-413c-4xxx-91dc-5bb0xxxxxxx",
"volumePool": "Tier3-Flash-2",
"volumeType": "Tier3-Flash-2",
"wwn": "600507xxxxxxx0000001958"
},
{
"bootVolume": false,
"bootable": false,
"creationDate": "2022-02-02T08:45:37.000Z",
"diskType": "tier3",
"href": "/pcloud/v1/cloud-instances/0b02xxxxxxx1f60c3e6fac3/volumes/2sssss-7bc8-452d-a081-0xxxxxxc0",
"lastUpdateDate": "2022-02-02T11:19:34.000Z",
"name": "vol10",
"pvmInstanceIDs": [],
"shareable": false,
"size": 80,
"state": "available",
"volumeID": "xxxxxef2-7bc8-xxxx-a081-0ebfxxxxxx0",
"volumePool": "Tier3-Flash-2",
"volumeType": "Tier3-Flash-2",
"wwn": "6005xxxxxxx18000000000014BE"
},
~ 省略 ~
ここからさらに jq コマンドや awk コマンドを使って取得したい情報だけ抜き出します。
以下は ボリューム名 "bkdisk" の Volume ID を抜き出す例
# curl -sSfX GET https://private.jp-tok.power-iaas.cloud.ibm.com/pcloud/v1/cloud-instances/${TOK_CLOUD_INSTANCE_ID}/volumes -H "Authorization: Bearer ${ACCESS_TOKEN}" -H "CRN: ${TOK_CRN}" -H 'Content-Type: application/json' | jq -r '.volumes[] | [.volumeID,.name] | @tsv' | grep -w bkdisk | awk '{print $1}'
e6xxxxx45-413c-4xxx-91dc-5bb0xxxxxxx
以上です。