こんにちは。IDCフロンティア UX開発部の進藤です。
5/19にIDCFクラウドにおきまして、ボリュームアップロード機能をリリース致しました。
IDCFクラウド以外の環境(他社クラウドサービス等)で作成されたボリュームを、より簡単にIDCFクラウドでご利用頂けるようになりました。
ボリュームアップロード機能は、クラウドコンソール画面からはもちろん、APIもご利用頂けます。
この記事では、ボリュームアップロード機能の具体的なご利用方法を紹介します。
準備
ご準備頂くのは、OVA形式のボリューム だけです!
APIから実施される場合は、CloudStackのAPIを実行できる環境もご用意ください。
以降では例として、IDCFクラウドで作成したボリュームを、別アカウントのIDCFクラウドにアップロードする方法をご紹介します。
なお 例で使用するアカウントは下記の通りとします。
- アップロード 元 アカウント:アカウントA
- アップロード 先 アカウント:アカウントB
アカウントAのボリューム(OVAファイル)

今回はこちらのURLのボリュームを使用します。
IDCFクラウドコンソールでアップロードする
まずは、IDCFクラウドのコンソールにてアップロードする方法を紹介します。
1. アップロード先のアカウントでログインします。
例では、アップロード先のアカウントを"アカウントB"としています。

2. 「コンピューティング」>「ボリューム」へ遷移し、「ボリューム作成」をクリックします。

3. 「アップロード」をクリックし、必要事項を入力します。
《入力事項》
お持ちのOVAファイルのURLが"https://・・・.ova"の場合、"s"を削除してご入力ください。
入力が完了したら「作成する」をクリックします。
確認画面が表示されたら、「はい」をクリックしてください。
4. アップロードが完了するまで待ちます。

アップロードが完了すると、ステータスが「Uploaded」に変わります。
図はアップロードしたボリュームの詳細画面です。
アカウントBにOVAファイルがアップロードできました。

仮想マシンにアタッチしてみる
アップロードしたボリュームはそのまま仮想マシンへアタッチできます。
1. アカウントBでアップロードしたボリュームの詳細画面で、「アタッチ」をクリックします。

2. アタッチ先の仮想マシンを選択して、「アタッチする」をクリックします。

アタッチが完了すると、アタッチ先仮想マシン名が表示され、ステータスもReadyに変わります。
アタッチ完了後ボリューム詳細画面
これでアカウントBの仮想マシンでボリュームが使えるようになりました。

CloudStack APIを実行してアップロードする
次にCloudStackのAPI:uploadVolumeでのアップロード方法を紹介します。
1. 利用可能なゾーンを確認する
listZones やlistVolumesを実行し、IDCFクラウドのアップロード先のアカウントBで有効化されているゾーンを確認します。
今回はuploadVolume実行後との比較のためlistVolumesを実行しました。
エンドポイントは西日本リージョンを指定しています。
$ cs listVolumes
{
"count": 2, //作成済ボリュームは2台ある
"volume": [
{
"account": "*************",
"attached": "2016-05-24T15:39:48+0900",
"created": "2016-05-24T15:35:31+0900",
(中略)
"name": "UpLoad_Test001", //先程IDCFクラウドコンソールからアップロードしたUpLoad_Test001
"pcidevicepath": "*************",
"provisioningtype": "thin",
"quiescevm": false,
"size": 16106127360,
"state": "Ready",
"storagetype": "shared",
"tags": [],
"type": "DATADISK",
"virtualmachineid": "*************",
"vmdisplayname": "testS1-w",
"vmname": "testS1-w",
"vmstate": "Running",
"zoneid": "{augusta_zoneid}", //augustaゾーンのID(ボリュームアップロード時に使用します)
"zonename": "augusta"
},
{
"account": "*************",
"chaininfo": "{\"diskDeviceBusName\":\"scsi0:0\",\"diskChain\":[\"[jw01v-str03-p01b-DS23] i-1953-20809-W1VM/ROOT-20809.vmdk\"]}",
"created": "2016-05-17T14:30:33+0900",
(中略)
"name": "ROOT-20809",
"provisioningtype": "thin",
"quiescevm": false,
"serviceofferingdisplaytext": "1 CPU x 0.8 GHz / 1 GB RAM",
"serviceofferingid": "*************",
"serviceofferingname": "light.S1",
"size": 16106127360,
"state": "Ready",
"storagetype": "shared",
"tags": [],
"templatedisplaytext": "Root Disk: 15GB,(v2)",
"templateid": "*************",
"templatename": "CentOS 7.1 64-bit",
"type": "ROOT",
"virtualmachineid": "*************",
"vmdisplayname": "testS1-w",
"vmname": "testS1-w",
"vmstate": "Running",
"zoneid": "{augusta_zoneid}",
"zonename": "augusta"
}
]
}
2. uploadVolumeを実行する
必要なパラメータを指定してuploadVolumeを実行します。
- パラメータ
- zoneid:アップロード先ゾーンのid(listZones等で取得)
- format:OVAを指定
- name:任意のボリューム名(例ではUplLoad_Test002)
- url:ボリュームのURL
※uploadVolumeでは、"http://・・・.ova" 形式のファイルのみご利用頂けます。
例では準備にて記載している アカウントAで作成したボリュームを指定しています。
uploadVolume実行例
$ cs uploadVolume zoneid={augusta_zoneid} format=OVA name=UpLoad_Test002 url=http://X-X-X-X.systemip.idcfcloud.com/userdata/2e94a824-89fb-43cc-b177-31583d57a774.ova
Polling result... ^C to abort
{
"accountid": "*************",
"cmd": "org.apache.cloudstack.api.command.user.volume.UploadVolumeCmd",
"created": "2016-05-24T15:45:40+0900",
"jobid": "*************",
"jobprocstatus": 0,
"jobresult": {
"volume": {
"account": "*************",
"created": "2016-05-24T15:45:40+0900",
"destroyed": false,
"diskofferingdisplaytext": "Custom Disk",
"diskofferingid": "*************",
"diskofferingname": "Custom",
"domain": "*************",
"domainid": "*************",
"id": "*************",
"isextractable": true,
"name": "UpLoad_Test002",
"provisioningtype": "thin",
"quiescevm": false,
"size": 0,
"state": "UploadNotStarted",
"status": "",
"storagetype": "shared",
"tags": [],
"type": "DATADISK",
"zoneid": "{augusta_zoneid}",
"zonename": "augusta"
}
},
"jobresultcode": 0,
"jobresulttype": "object",
"jobstatus": 1,
"userid": "*************"
}
ステータスが"UploadNotStarted"となっていますが、listVolumesを実行すると、アカウントBの指定のゾーンに正常にアップロードされていることが確認できます。
$cs listVolumes
{
"count": 3, //1台アップロードしたため、作成済ボリューム台数が3になった
"volume": [
{
"account": "*************",
"created": "2016-05-24T15:45:40+0900",
(中略)
"name": "UpLoad_Test002", //APIからアップロードしたボリューム
"provisioningtype": "thin",
"quiescevm": false,
"size": 16106127360,
"state": "Uploaded", //ステータスがUploadedになっている
"storagetype": "shared",
"tags": [],
"type": "DATADISK",
"zoneid": "{augusta_zoneid}",
"zonename": "augusta"
},
{
"account": "*************",
"attached": "2016-05-24T15:39:48+0900",
"created": "2016-05-24T15:35:31+0900",
(中略)
"name": "UpLoad_Test001", //IDCFクラウドコンソールからアップロードしたUpLoad_Test001
"pcidevicepath": "*************",
"provisioningtype": "thin",
"quiescevm": false,
"size": 16106127360,
"state": "Ready",
"storagetype": "shared",
"tags": [],
"type": "DATADISK",
"virtualmachineid": "*************",
"vmdisplayname": "testS1-w",
"vmname": "testS1-w",
"vmstate": "Running",
"zoneid": "{augusta_zoneid}",
"zonename": "augusta"
},
{
"account": "*************",
"chaininfo": "{\"diskDeviceBusName\":\"scsi0:0\",\"diskChain\":[\"[jw01v-str03-p01b-DS23] i-1953-20809-W1VM/ROOT-20809.vmdk\"]}",
"created": "2016-05-17T14:30:33+0900",
(中略)
"name": "ROOT-20809",
"provisioningtype": "thin",
"quiescevm": false,
"serviceofferingdisplaytext": "1 CPU x 0.8 GHz / 1 GB RAM",
"serviceofferingid": "*************",
"serviceofferingname": "light.S1",
"size": 16106127360,
"state": "Ready",
"storagetype": "shared",
"tags": [],
"templatedisplaytext": "Root Disk: 15GB,(v2)",
"templateid": "*************",
"templatename": "CentOS 7.1 64-bit",
"type": "ROOT",
"virtualmachineid": "*************",
"vmdisplayname": "testS1-w",
"vmname": "testS1-w",
"vmstate": "Running",
"zoneid": "{augusta_zoneid}",
"zonename": "augusta"
}
]
}
IDCFクラウドコンソールでも確認できます。

(補足)CloudStack API実行環境について
CloudStackAPI実行環境の構築方法はいくつかありますが、今回は以下の記事(Qiita)を参考にcsライブラリを使用しました。
シンプルなCloudStack CLI/ライブラリ cs
こちらも当社エンジニアが執筆しております♪
詳細はQiitaの記事をご覧いただければと思いますが、環境構築方法を簡単にまとめますと次の様になります。
- 使用環境
- Mac OSX Yosemite10.10.5
①csライブラリインストール
$which pip //pipがインストールされているか確認 $easy_install pip //pipインストール $pip install cs //csライブラリインストール
※pipはPythonを使用しているため 事前にPythonがインストールされているかご確認ください。
②.cloudstack.iniファイルの作成
.cloudstack.iniファイルを新規に作成します。
.cloudstack.iniファイルに、次の様にIDCFクラウドアカウントのエンドポイント、APIキー、シークレットキーを記述して保存します。
エンドポイント等は、IDCFクラウドコンソールの「コンピューティング」または「アカウント設定」> 「API」で確認することができます。
$ vi .cloudstack.ini [cloudstack] endpoint = END_POINT //IDCFクラウドAPIエンドポイント key = API_KEY //IDCFクラウドアカウントのAPIキー secret = SECRET_KEY //IDCFクラウドアカウントのシークレットキー
③動作確認
APIを正常に実行できるかどうか listZonesを実行して確認してみます。
以下は、.cloudstack.iniでエンドポイントを西日本リージョンに指定した場合の実行例です。
正常に完了すると augustaゾーンの情報が取得できます。
$cs listZones
{
"count": 1,
"zone": [
{
"allocationstate": "Enabled",
"dhcpprovider": "VirtualRouter",
"id": "{augusta_zoneid}",
"localstorageenabled": true,
"name": "augusta",
"networktype": "Advanced",
"securitygroupsenabled": false,
"tags": [],
"zonetoken": "********"
}
]
}
もし、下記の様なエラーがでたら、エラー内容に記載されている場所に.cloudstack.iniを移動させて再度実行してみてください。
$ cs listZones
Config file not found. Tried /{Path to .cloudstack.ini}/.cloudstack.ini, /{Path to cloudstack.ini}/cloudstack.ini
おわりに
IDCFクラウドコンソール、CloudStack APIを用いた外部でボリュームアップロード方法をご紹介しました。
IDCFクラウドへの移行等の際に是非ご活用ください。