IDCF テックブログ

IDCF テックブログ

クラウド・データセンターを提供するIDCフロンティアの公式テックブログ

ボリュームアップロード機能の紹介

こんにちは。IDCフロンティア UX開発部の進藤です。

5/19にIDCFクラウドにおきまして、ボリュームアップロード機能をリリース致しました。
IDCFクラウド以外の環境(他社クラウドサービス等)で作成されたボリュームを、より簡単にIDCFクラウドでご利用頂けるようになりました。
ボリュームアップロード機能は、クラウドコンソール画面からはもちろん、APIもご利用頂けます。

この記事では、ボリュームアップロード機能の具体的なご利用方法を紹介します。

準備

ご準備頂くのは、OVA形式のボリューム だけです!

APIから実施される場合は、CloudStackのAPIを実行できる環境もご用意ください。

以降では例として、IDCFクラウドで作成したボリュームを、別アカウントのIDCFクラウドにアップロードする方法をご紹介します。

なお 例で使用するアカウントは下記の通りとします。
 - アップロード アカウント:アカウントA
 - アップロード アカウント:アカウントB

アカウントAのボリューム(OVAファイル) f:id:cshintoidcf:20160524174143p:plain

今回はこちらのURLのボリュームを使用します。


IDCFクラウドコンソールでアップロードする

まずは、IDCFクラウドのコンソールにてアップロードする方法を紹介します。

1. アップロード先のアカウントでログインします。

例では、アップロード先のアカウントを"アカウントB"としています。 f:id:cshintoidcf:20160524172609p:plain

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

f:id:cshintoidcf:20160524171614p:plain

3. 「アップロード」をクリックし、必要事項を入力します。

《入力事項》

  • ボリューム名:任意の名前をご入力ください
  • ゾーン :アップロードするゾーンをご選択ください
  • URL :OVAファイルのURLをご入力ください
  • ※"http://*****.ova"形式のファイルのみアップロード可能です。
    お持ちのOVAファイルのURLが"https://・・・.ova"の場合、"s"を削除してご入力ください。

    f:id:cshintoidcf:20160524171902p:plain
    入力が完了したら「作成する」をクリックします。
    確認画面が表示されたら、「はい」をクリックしてください。

    4. アップロードが完了するまで待ちます。

    f:id:cshintoidcf:20160524171936p:plain

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

    仮想マシンにアタッチしてみる

    アップロードしたボリュームはそのまま仮想マシンへアタッチできます。

    1. アカウントBでアップロードしたボリュームの詳細画面で、「アタッチ」をクリックします。

    f:id:cshintoidcf:20160524172716p:plain

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

    f:id:cshintoidcf:20160524172741p:plain

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

    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クラウドコンソールでも確認できます。 f:id:cshintoidcf:20160524172852p:plain

    (補足)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クラウドへの移行等の際に是非ご活用ください。

    Copyright © IDC Frontier Inc.