*

仮想マシンの作成 ~vijava programming tips(3)

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

by kumagai(@kumagai19o) 2013/2/21

vijavaによるvSphereAPIプログラミングtips の第3回です。

前回までは
第一回 vSphereAPI をJavaでプログラミングする
第二回 インベントリから操作対象のManadedEntityを取り出す

今日は仮想マシンを作成していきます。

この操作も基本的にはvSphereClientで作成ウィザードで設定するのと
同じように捉えてプログラムを作成してみましょう。

今回の作成例では下記と同じパラメータを指定して作成していきます。

[表] 仮想マシン作成ウィザードでの設定項目
項目  作成名称
 ①名前  newVM
 ②フォルダ  blogFolder
 ③ホスト/クラスタ  DEV-CLUSTER1
 ④リソースプール  blogPool
 ⑤データストア  testStrage193
 ⑥ゲストOS  CentOS 4/5/6(64ビット)
 ⑦CPU  1vCPU
 ⑧メモリ  2048MB
 ⑨NIC1 ネットワーク  VM Network
 ⑩NIC1 タイプ  VMXNET 3
 ⑪SCSIコントローラ  LSILogic パラレル
 ⑫ディスクの作成  新規作成
 ⑬ディスクの容量  16GB
 ⑭ディスク プロビジョニング  Thin Provision
 ⑮データストア  testStrage193
 ⑯仮想デバイス ノード  SCSI(0:0)
 ⑰ディスク モード  通常

 

これら上記のパラメータと同じ値を指定して仮想マシンを作成するには
以下のようなプログラムを書きます。

丸数字のコメントの下に太字で設定値を指定しています。

 try{
    Folder rootFolder = serviceInstance.getRootFolder();
    InventoryNavigator rootNavi = new InventoryNavigator(rootFolder);
    VirtualMachineConfigSpec vmConfig = new VirtualMachineConfigSpec();
    
    //① 名前     : newVM
    vmConfig.setName("newVM");

    //② フォルダ :  blogFolder
    Folder tgtFolder = (Folder)rootNavi.searchManagedEntity("Folder","blogFolder");

    //③ ホスト/クラスタ : DEV-CLUSTER1※使用されません
    ClusterComputeResource tgtCluster= 
      (ClusterComputeResource)rootNavi
        .searchManagedEntity("ClusterComputeResource","DEV-CLUSTER1");
    
    //④ リソースプール : testStrage193
    ResourcePool tgtPool=
      (ResourcePool)rootNavi.searchManagedEntity("ResourcePool","blogPool");

    VirtualMachineFileInfo vmfi = new VirtualMachineFileInfo();

    //⑤データストア : testStrage193
    vmfi.setVmPathName("[testStrage193]");
    vmConfig.setFiles(vmfi);

    //⑥ゲストOS :  CentOS 4/5/6(64ビット)
    vmConfig.setGuestId(VirtualMachineGuestOsIdentifier.centos64Guest.toString());
    
    //⑦CPU : 1vCPU
    vmConfig.setNumCPUs(1);
    
    //⑧メモリ : 2048MB
    vmConfig.setMemoryMB(2048l); //long値のため値の末尾に小文字のLが付いています。

    
    //⑨ NIC1 ネットワーク : VM Network
    VirtualEthernetCardNetworkBackingInfo vEthCardNetBackInfo 
      = new VirtualEthernetCardNetworkBackingInfo();
    vEthCardNetBackInfo.setDeviceName("VM Network");

    //⑩ NIC1 タイプ: VMXNET 3
    //NICタイプは VirtualE1000, VirtualE1000e, VirtualPCNet32, VirtualVmxnet があります
    VirtualEthernetCard vEthCard =  new VirtualVmxnet();  

    //MAC アドレスのタイプには "generated"(自動)を設定します。※その他の設定値
    vEthCard.setAddressType("generated");
    vEthCard.setBacking(vEthCardNetBackInfo);
    vEthCard.setKey(0); 
    
    VirtualDeviceConfigSpec vNicConfigSpec = new VirtualDeviceConfigSpec();
    vNicConfigSpec.setOperation(VirtualDeviceConfigSpecOperation.add);
    vNicConfigSpec.setDevice(vEthCard);
    

    //⑪ SCSIコントローラ : LSILogic パラレル
    VirtualSCSIController vScsiCtrl = new VirtualLsiLogicController();

    VirtualDeviceConfigSpec vDiskConfigSpec = new VirtualDeviceConfigSpec();
    
    //⑫ ディスクの作成 : 新規作成
    vDiskConfigSpec.setOperation(VirtualDeviceConfigSpecOperation.add);
    vDiskConfigSpec.setFileOperation(VirtualDeviceConfigSpecFileOperation.create);

    VirtualDisk vDisk = new VirtualDisk();

    //⑬ ディスクの容量 : 16GB 
    vDisk.setCapacityInKB(1024 * 1024 * 16);
    vDisk.setKey(0);

    int ctrlKey = 0;
    //VirtualScsiControllerのkeyと一致している必要があります
    vDisk.setControllerKey(ctrlKey);
    vDiskConfigSpec.setDevice(vDisk);

    VirtualDiskFlatVer2BackingInfo vDiskFileBackInfo
      = new VirtualDiskFlatVer2BackingInfo();

    //⑭ ディスク プロビジョニング : Thin Provision
    vDiskFileBackInfo.setThinProvisioned(true);

    //⑮ データストア : testStrage193
    vDiskFileBackInfo.setFileName("[testStrage193]");


    //⑯ 仮想デバイス ノード : SCSI(0:0)
    vScsiCtrl.setBusNumber(0); vDisk.setUnitNumber(0);
    
    vScsiCtrl.setKey(ctrlKey); //VirtualDiskのControllerKeyと一致している必要があります。 
    vScsiCtrl.setSharedBus(VirtualSCSISharing.noSharing); //他の仮想マシンと共有不可


    //⑰ ディスク モード : 通常
    vDiskFileBackInfo.setDiskMode(VirtualDiskMode.persistent.toString());
    vDisk.setBacking(vDiskFileBackInfo);

    VirtualDeviceConfigSpec vScsiConfigSpec = new VirtualDeviceConfigSpec();
    vScsiConfigSpec.setOperation(VirtualDeviceConfigSpecOperation.add);
    vScsiConfigSpec.setDevice(vScsiCtrl);
    
    VirtualDeviceConfigSpec[] vDeviceConfigSpecs = 
        new VirtualDeviceConfigSpec[]{ vNicConfigSpec,vDiskConfigSpec ,vScsiConfigSpec};

    vmConfig.setDeviceChange(vDeviceConfigSpecs);

    //VM作成タスクの実施(ホスト指定をしない場合は第三引数はnullです)
    Task createTask = tgtFolder.createVM_Task(vmConfig, tgtPool, null);

    //非同期実行の場合はTask結果は終了まで待たなくては取得できません    
    String result = createTask.waitForTask();
    if ("success".equals(result)){
      System.out.println(result);
    } else {
      //エラーの場合はメッセージを表示します。
      System.err.println(
        result +":" + createTask.getTaskInfo().getError().getLocalizedMessage()
      );
    }

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

一度に書くと仮想デバイスの設定がネスト構造になっているため少し複雑になりますが、
基本的には当初のパラメータを順次設定していき、最後にcreateVM_Taskを呼び出せば、
仮想マシンが作成されます。

これにより作成された仮想マシンの設定をvSphereClientから確認すると以下のようになります。

表示->インベントリ->仮想マシンおよびテンプレート
表示->インベントリ->ホストおよびクラスタ
仮想マシンのプロパティ
オプションタブ
仮想マシンのプロパティ
ハードウェアタブ
仮想マシンのプロパティ
ハードウェアタブ
ネットワークアダプタ
仮想マシンのプロパティ
ハードウェアタブ
仮想ディスク

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

当たり前ですが、仮想マシンの作成ウィザードで作成したのと同じように作成されています。

仮想デバイスの設定に関して、もう少し説明が必要と思いますので、
次回は仮想サーバのデバイス変更を例に、この辺りを紹介していきます。

関連記事

WS000093

VMware vSphere PowerCLIの導入

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

記事を読む

img-000001

仮想マシンのクローン作成(Windows) ~vijava programming tips(8)

by kumagai(@kumagai19o) 2013/7/18 今回はWindow

記事を読む

img-0000011

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

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

記事を読む

img-000004

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

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

記事を読む

file001

vSphereAPI をJavaでプログラミングする ~vijava programming tips

by kumagai 2013/02/01 VMwareの提供する仮想化プラットフォーム、vS

記事を読む

img-000001

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

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

記事を読む

no image

INDEX : vijava Programming

by kumagai@kumagai19ovijava programming tips 

記事を読む

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

記事を読む

blog-000007

インベントリから操作対象のManagedEntityを取り出す ~vijava programming tips(2)

by kumagai 2013/2/8 vijavaによるvSphereAPIプログラミングt

記事を読む

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 ↑