*

仮想デバイス設定の変更 ~vijava programming tips(4)

公開日: 最終更新日:2014/07/25  |  By  |  VMware, vSphereAPI

by kumagai(@kumagai19o) 2013/3/11

vijavaによるvSphereAPIプログラミングtips の第4回です。
前回(第三回 仮想マシンの作成)で仮想マシンを作成しましたので、
今回はその仮想マシンのデバイス設定を変更します。

■過去の記事一覧
第一回 vSphereAPI をJavaでプログラミングする
第二回 インベントリから操作対象のManadedEntityを取り出す

第三回 仮想マシンの作成


今回もvSphereClientでの操作と対比していきます。

vSphereClient上の画面では仮想マシンの設定の編集画面で操作します。

今回変更の対象とするのは下の表のような操作です。

[表] 今回の変更内容
項目 変更前 変更後
①CPUコア数  1  2
②メモリ  2048MB 1024MB
③NIC1 ネットワーク接続先の変更  VM Network VM Network2
④ディスクの容量  16GB 32GB

vSpereAPIではこれらの操作は
reconfigVM_Task(VirtualMachineConfigSpec spec)
というメソッドによって行います。
基本的には、このメソッドの引数となっているVirtualMachineConfigSpecに
それぞれの設定値を設定して呼び出せば設定完了となります。

ただし、①②の処理と③④ではVirtualMachineConfigSpecへの設定の方法が少し異なります。
①②といったCPU、メモリの割り当て処理ではその設定値変更のみとなりますが
③④のようなデバイスの変更では、VMに設定済みの仮想デバイスを一旦取得して、
その値を変更し反映するというような処理になります。

ごちゃごちゃと説明するよりもコードを見たほうが早いと思いますので、
これらの操作を行うソースを乗せます。

    try {
      ServiceInstance serviceInstance = new ServiceInstance(
          new URL("https://vcenter-host/sdk"), "blogUser", "password",
          true);

      try {
        Folder rootFolder = serviceInstance.getRootFolder();
        InventoryNavigator rootNavi = new InventoryNavigator(rootFolder);

        //対象の仮想マシンを取得する
        VirtualMachine targetVm = (VirtualMachine) rootNavi
            .searchManagedEntity("VirtualMachine", "newVM");

        VirtualMachineConfigSpec vmConfig = new VirtualMachineConfigSpec();

        //①CPU : 2 Core
        vmConfig.setNumCPUs(2);

        //②メモリ : 1024MB
        vmConfig.setMemoryMB(1024l);

        //仮想デバイスの取得
        VirtualDevice[] devices = targetVm.getConfig().getHardware()
            .getDevice();

        VirtualDeviceConfigSpec vDiscConfig = new VirtualDeviceConfigSpec();
        VirtualDeviceConfigSpec vEtherConfig = new VirtualDeviceConfigSpec();

        //仮想デバイスは全てデバイスの中から名称で対象を抽出します

        for (VirtualDevice device : devices) {
          //仮想デバイスの名称はLabelとして設定されています
          String deviceLabel = device.getDeviceInfo().getLabel();

          if ("ハード ディスク 1".equals(deviceLabel)) {

            //③ハード ディスクの容量を変更
            VirtualDisk vDisk = (VirtualDisk) device;
            vDisk.setCapacityInKB(1024 * 1024 * 32);
            vDiscConfig.setDevice(vDisk);
            vDiscConfig.setOperation(VirtualDeviceConfigSpecOperation.edit);
          } else if ("ネットワーク アダプタ 1".equals(deviceLabel)) {

            //④ハード ディスクの容量を変更
            VirtualEthernetCard vEtherCard = (VirtualEthernetCard) device;
            VirtualEthernetCardNetworkBackingInfo vEthCardNetBackInfo =
                new VirtualEthernetCardNetworkBackingInfo();
            vEthCardNetBackInfo.setDeviceName("VM Network2");

            vEtherCard.setBacking(vEthCardNetBackInfo);
            vEtherConfig.setDevice(vEtherCard);
            vEtherConfig.setOperation(VirtualDeviceConfigSpecOperation.edit);
          }

        }

        //変更済みの仮想デバイスをConfigに設定する
        vmConfig.setDeviceChange(
          new VirtualDeviceConfigSpec[] { vDiscConfig,vEtherConfig });


        //設定変更タスクの実行
        Task reconfigTask = targetVm.reconfigVM_Task(vmConfig);

        String result = reconfigTask.waitForTask();
        if ("success".equals(result)) {
          System.out.println(result);
        } else {
          System.err.println(
              result + ":"
                  + reconfigTask.getTaskInfo().getError().getLocalizedMessage()
              );
        }

      } catch (Exception e) {
        e.printStackTrace();
      }

    } catch (RemoteException e) {
      e.printStackTrace();
    } catch (MalformedURLException e) {
      e.printStackTrace();
    }

 

 

上記の処理を行った結果以下のように変更されます。

今回の処理は既に設定済みの仮想デバイスを抽出して、変更だけを行いましたが、
ハードディスク、ネットワークアダプタといった仮想デバイスはもちろん、変更だけでなく、
追加することも可能です。
この追加操作も、基本的には今回ご紹介した  reconfigVM_Taskで行うことができるのですが、
このときの仮想デバイスの扱いは少々分かりづらくなっています。

vijavaではこの処理を簡略化して実行できるクラスが用意されていますので、
次回はそのクラスを使用して仮想デバイスの追加処理を紹介したいと思います。

■対象バージョン
本ブログにおけるvSphereの対象バージョンは 5.0以上です。
vSphere , vijavaともにvSphere 5.0以上を使用してください。

vijavaのダウンロードページ : http://sourceforge.jp/projects/sfnet_vijava/

関連記事

no image

INDEX : vijava Programming

by kumagai@kumagai19ovijava programming tips 

記事を読む

img-000004

仮想マシンのパフォーマンスチャートの取得 ~vijava programming tips(10)

by kumagai(@kumagai19o) 2013/8/8 今回は仮想マシンのパフォーマ

記事を読む

WS000093

VMware vSphere PowerCLIを使った仮想マシンの基本操作

2015年1月18日 by ymaeda vSphereへのログイン 今回はPowerCLIを使

記事を読む

img-0000011

仮想マシンのクローン作成&カスタマイズ(Linux) ~vijava programming tips(7)

by kumagai(@kumagai19o) 2013/7/9 今回は仮想マシンをクローンし各設定

記事を読む

WS000093

VMware vSphere PowerCLIの導入

2014年10月27日 by ymaeda PowerCLIとは PowerCLIは、Wind

記事を読む

img-000002

仮想マシンへのISOイメージのマウント ~vijava programming tips(12)

by kumagai(@kumagai19o) 2013/8/30 今回は仮想マシンにデータス

記事を読む

DSC_0584

vForum 2012

by kumagai 2012/11/7初めまして。ビットアイル総研の熊谷です。今日は11月6日、7

記事を読む

img-000001

仮想スイッチの追加 ~vijava programming tips(6)

by kumagai(@kumagai19o) 2013/5/27前回までで仮想マシン側の作成、設定

記事を読む

img-000003

データストア操作 ~vijava programming tips(11)

by kumagai(@kumagai19o) 2013/8/26 今回はデータストアの操作を

記事を読む

img-000001

仮想デバイスの追加 ~vijava programming tips(5)

by kumagai(@kumagai19o) 2013/5/20 前回から2ヶ月も空いてしまい申し

記事を読む

no image

ビットアイル総合研究所は、クラウド技術に関する調査&研究を通して、社会と会社に寄与していくことを目的に、ビットアイル・エクイニクスの企業内研究所として2011年8月に設立されました。

openstack-figure1-2x
COHO DataStream のCinder連携

OpenStack Cinder のストレージバックエンドとしてはCe

blog-ocata
Jujuで Ocataを含む様々なバージョンのOpenStack をデプロイする方法

祝OpenStack Ocata リリース!! ということで、早速デプ

newton
Juju Manual Cloud で OpenStack 環境構築

本当にご無沙汰しております。 この投稿はOpenStack Adve

top
HACK! THE Juju/MAAS

6/8~6/10まで幕張メッセで開催されたInterop 2016。皆

dpdk
OpenStack OVS VXLAN ネットワークの高速化

少し前の話になりますが、3月2日に開催された 日本仮想化技術株式会社様

→もっと見る

PAGE TOP ↑