vCloud Director1.5管理下の仮想マシンをvCloud APIを使用してストレージ移行する手順


***vCloud Director1.5環境下での動作のみ確認***

vCloud Director1.5の管理コンソールでは仮想マシンのストレージvMotionの機能が用意されていないため、ストレージの移行にはvCloud APIを利用する必要があります。

vCloud Directorでは、仮想マシンはvAppもしくはvAppテンプレートの一部として構成されていますが、どちらの場合も、仮想マシンが保存されているデータストアの情報は、vCloud Directorが独自で持つデータベース内にもメタデータとして情報が記録されており、vSphere上から直接ストレージvMotionを実行してしまうと、メタデータに不整合が発生してしまいます。

vCloud Directorでは、仮想マシンの作成方法に応じて、初期配置されるデータストアが自動的に決定されます。vCloud APIを利用することにより、仮想マシンのディスクファイルを別のデータストアに移動することができます。
また、高速プロビジョニングの機能を使って仮想マシンを作成した場合、リンククローン機能を利用した親子関係のツリー構造を持ったディスクが作成されますが、APIを利用したデータストアの再配置をおこなった場合でも、このツリー構造とトータルのストレージ使用量はそのまま保持されます。

## 手順

#### 手順1: vCloud APIにログイン
curlLコマンド等を利用し、vCloud APIにアクセスします。まずはじめに、ログイン処理を行い、以後の手順に必要なアクセス用トークンを取得します。administratorのパスワードが`password`で接続先のvCloudホストが`your_vcloud_host`とした場合、以下のような記述例になります。接続先ホスト名は、正確にはvCloud DirectorのWebコンソールにシステム管理者でログインし、`システム`>`管理`>`公開アドレス`のページに`VCD公開 REST APIベース URL:`という項目で設定された値になります。

```
# curl -i -k -H "Accept:application/*+xml;version=1.5" -u administrator@system:password -X POST https://your_vcloud_host/api/sessions
```

成功すると、下記のようなトークンを含んだレスポンスが返ってくるので、そのトークンをメモしておきます。`x-vcloud-authorization:`の後に続く文字列がトークンです。

```
HTTP/1.1 200 OK
Date: Fri, 26 Aug 2016 05:20:50 GMT
x-vcloud-authorization: u0+daukop+PlVs4yQ5/eceLe3EVM6lIbUaB6LyhOCqU=
Set-Cookie: vcloud-token=u0+daukop+PlVs4yQ5/eceLe3EVM6lIbUaB6LyhOCqU=; Secure; Path=/
Content-Type: application/vnd.vmware.vcloud.session+xml;version=1.5
Date: Fri, 26 Aug 2016 05:20:50 GMT
Content-Length: 963
```

#### 手順2: 移行対象の仮想マシンを取得

仮想マシンとその仮想マシンが格納されているデータストアを一覧で取得します。

```
# curl -i -k -H "Accept:application/*+xml;version=1.5" -H "x-vcloud-authorization: u0+daukop+PlVs4yQ5/eceLe3EVM6lIbUaB6LyhOCqU=" -X GET 'https://your_vcloud_host/api/query?type=adminVM&fields=name,datastoreName'
```

成功すると、以下のような結果が表示されます。vMotionしたい仮想マシンを探し、該当する行の`href=`の後に続く値をメモします。

```
<?xml version="1.0" encoding="UTF-8"?>
<QueryResultRecords xmlns="http://www.vmware.com/vcloud/v1.5" total="86" pageSize="25" page="1" name="adminVM" type="application/vnd.vmware.vcloud.query.records+xml" href="https://your_vcloud_host/api/query?type=adminVM&amp;page=4&amp;pageSize=25&amp;format=records&amp;fields=name,datastoreName" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.vmware.com/vcloud/v1.5 http://your_vcloud_host/api/v1.5/schema/master.xsd">
...
<AdminVMRecord name="my-vApp-TEST" datastoreName="VCD-Development-1" href="https://your_vcloud_host/api/vApp/vm-03405f54-a370-4c6c-8d4d-3df0b4db36c9"/>
<AdminVMRecord name="testsv1" datastoreName="VCD-Development-1" href="https://your_vcloud_host/api/vApp/vm-0c136fd8-e55d-4638-a59c-4fc76281343d"/>
...
```

vCloud Directorに多くの仮想マシンが登録されている場合、1回のクエリで1ページ分（デフォルトで25台分）までしか表示されません。上記の例では、86台のマシンが登録されており(`total="86"`)そのうち1ページ目(`page="1"`)の25台分(`pageSize="25"`)が表示されます。2ページ目以降を見たい場合は、下の例のようにクエリにページ指定(`page=xx`)を追加するか、ページサイズを変更(`pageSize=xx`)してください。

```
# # curl -i -k -H "Accept:application/*+xml;version=1.5" -H "x-vcloud-authorization: u0+daukop+PlVs4yQ5/eceLe3EVM6lIbUaB6LyhOCqU=" -X GET 'https://your_vcloud_host/api/query?type=adminVM&fields=name,datastoreName&pageSize=30&page=3'
```

#### 手順3: vCloud上のデータストア一覧を表示
vCloud上に登録されているデータストアを表示し、その中から移行先のデータストアを探します。

```
# curl -i -k -H "Accept:application/*+xml;version=1.5" -H "x-vcloud-authorization: u0+daukop+PlVs4yQ5/eceLe3EVM6lIbUaB6LyhOCqU=" -X GET 'https://your_vcloud_host/api/query?type=datastore&fields=name'
```

一覧の取得に成功すると、以下のようにデータストアの一覧が表示されます。移行先のデータストアを見つけ、`href=`に続く値をメモします。

```
...
<DatastoreRecord name="Production-1" href="https://your_vcloud_host/api/admin/extension/datastore/1047c4b4-8696-4e0a-9652-8f0876cc2231"/>
<DatastoreRecord name="Development-1" href="https://your_vcloud_host/api/admin/extension/datastore/9a0f7971-702f-459d-a711-f4c1e4ace6ec"/>
<DatastoreRecord name="Production-2" href="https://your_vcloud_host/api/admin/extension/datastore/bbdf7bf0-e2be-40aa-b922-736e5adb58af"/>
...
```

#### 手順4: ストレージvMotionの実行
取得した仮想マシンおよびデータストアの情報をもとに、vMotionを実行します。

```
curl -i -k -H "Accept:application/*+xml;version=1.5" -H "x-vcloud-authorization: u0+daukop+PlVs4yQ5/eceLe3EVM6lIbUaB6LyhOCqU=" -H "Content-Type:application/vnd.vmware.vcloud.relocateVmParams+xml" -X POST https://your_vcloud_host/api/vApp/vm-0332975f-394f-49d2-baf9-b222d126b942/action/relocate -d '<RelocateParams xmlns="http://www.vmware.com/vcloud/v1.5"><Datastore href="https://your_vcloud_host/api/admin/extension/datastore/a5d6bf25-7916-45cb-a65a-5dfa14d2ba38"/></RelocateParams>'
```

#### 手順5: ログオフ
最後に、vCloud Directorからログオフします。

```
curl -i -k -H "Accept:application/*+xml;version=1.5" -H "x-vcloud-authorization: u0+daukop+PlVs4yQ5/eceLe3EVM6lIbUaB6LyhOCqU=" -X DELETE 'https://your_vcloud_host/api/session'
```