PowerVS で storagePoolAffinityを変更して異なるストレージ・プールのボリューム接続をAPIで実行する

#### はじめに

Power Systems Virtual Server のストレージにはプールのアフィニティという概念があり、デフォルトでは異なるストレージ・プールのボリュームは接続できません。


GUI では以下のように異なるストレージ・プールの属するボリュームを仮想マシンに接続する際にチェックを入れることで接続が可能です。

![スクリーンショット 2023-04-23 14.48.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/d42bc3b5-410c-bd2c-23a8-b6a1d1e2ae49.png)

CLI で接続する場合は、VM(仮想マシン)の属性値の storagePoolAffinity を false に変更する必要があります。


参考：[混合ストレージを接続できるように PVM インスタンスを設定するにはどうすればよいですか?](https://cloud.ibm.com/docs/power-iaas?topic=power-iaas-power-iaas-faqs&locale=ja#mixed_storage)
>PVM インスタンスのルート (ブート) ボリュームがデプロイされたストレージ・プールとは異なる、さまざまなストレージ・ティアとストレージ・プールから、PVM インスタンスにストレージ・ボリュームを接続できるようになりました。 これを行うには、PVM インスタンスを変更して、新しい PVM インスタンスの storagePoolAffinity プロパティーを false に設定する必要があります。 PVM インスタンスの storagePoolAffinity プロパティーは PVM インスタンスがデプロイされるときにデフォルトで true に設定され、PVM インスタンスの変更 API を使用してのみ変更することができます。 PVM インスタンスの変更の API について詳しくは、PVM インスタンスの変更を参照してください。 混合ストレージを PVM インスタンスに接続すると、PVM インスタンスのキャプチャー、複製、およびスナップショットの機能が影響を受けます



異なるストレージ・プールのボリュームは snapshot などのバックアップ操作に影響を及ぼすので(実施不可になる) 留意が必要です。

---

#### 環境

IBM Cloud Power Systems Virtual Server : AIX VM


---

#### 準備


使用する変数設定：

```
export POWER_IAAS_URL="https://private.jp-tok.power-iaas.cloud.ibm.com/pcloud/v1/cloud-instances"
export ACCESS_TOKEN="xxx"
export TOK_CRN="xxx"
export TOK_CLOUD_INSTANCE_ID="xxx"
export PVM_INSTANCE_ID="xxx"
export VOLUME_ID="xxx"
```



仮想マシンの状態確認：


```
# curl -sSfX GET ${POWER_IAAS_URL}/${TOK_CLOUD_INSTANCE_ID}/pvm-instances/${PVM_INSTANCE_ID} -H "Authorization: Bearer ${ACCESS_TOKEN}" -H "CRN: ${TOK_CRN}" -H 'Content-Type: application/json' | jq -r | grep status
    "status": "OK"
  "status": "ACTIVE",
```

=> OK、ACTIVEでないと変更の実行ができません。



storagepoolAffinity の確認:

```
# curl -sSfX GET ${POWER_IAAS_URL}/${TOK_CLOUD_INSTANCE_ID}/pvm-instances/${PVM_INSTANCE_ID} -H "Authorization: Bearer ${ACCESS_TOKEN}" -H "CRN: ${TOK_CRN}" -H 'Content-Type: application/json' | jq -r | grep storagePoolAffinity
  "storagePoolAffinity": true,
```

=> デフォルトの true が設定されています。

#### 実行

storagePoolAffinity の変更を実行

```
curl -sSfX PUT ${POWER_IAAS_URL}/${TOK_CLOUD_INSTANCE_ID}/pvm-instances/${PVM_INSTANCE_ID} -H "Authorization: Bearer ${ACCESS_TOKEN}" -H "CRN: ${TOK_CRN}" -H 'Content-Type: application/json' --data '{ "storagePoolAffinity ": false }'
```


確認

```
# curl -sSfX GET ${POWER_IAAS_URL}/${TOK_CLOUD_INSTANCE_ID}/pvm-instances/${PVM_INSTANCE_ID} -H "Authorization: Bearer ${ACCESS_TOKEN}" -H "CRN: ${TOK_CRN}" -H 'Content-Type: application/json' | jq -r | grep storagePoolAffinity
  "storagePoolAffinity": false,
```

=> false に変更されました。



この状態で異なるプールで作成したボリュームをAPI実行で接続します。


```
curl -sSfX POST ${POWER_IAAS_URL}/${TOK_CLOUD_INSTANCE_ID}/pvm-instances/${PVM_INSTANCE_ID}/volumes/${VOLUME_ID} -H "Authorization: Bearer ${ACCESS_TOKEN}" -H "CRN: ${TOK_CRN}" -H 'Content-Type: application/json'
```

確認


![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/c4db9862-4f5b-2417-0c16-8255662ee68e.png)


↑ 無事、別のプールのボリュームが接続できたことが確認できました。



---

参考：

PowerVS API : 

[Update a PCloud PVM Instance](https://cloud.ibm.com/apidocs/power-cloud#pcloud-pvminstances-put)

[Attach a volume to a PVMInstance](https://cloud.ibm.com/apidocs/power-cloud#pcloud-pvminstances-volumes-post)



以上です。