こんにちは。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クラウドへの移行等の際に是非ご活用ください。