VMware Global Community
sasama1997
Contributor
Contributor

既存仮想マシンのディスク容量の変更(SDK for java)

こんにちは。

今私はVMware Infrastructure SDK 2.5 for javaを使用して既存仮想マシンのディスク容量を変更しようとしています。

SDK内にあるVMReconfig.javaソースファイルを編集しようと考えているのですが、ReconfigVM_Taskメソッドの引数specに渡す

VirtualMachineConfigSpec(DataObject)の設定項目および設定値が分からず困っています。

どなたか、お分かりになる方いらっしゃいませんか?

Java初心者なのでVMReconfig.javaに記述する内容を直接教えていただけると助かります。

※ExtendVirtualDisk_Taskメソッドを使用しようかと思ったのですが、V2.5からの新規メソッド?であるためサンプルソース上では使い方が不明でした。

宜しくお願いします。

/**********************************************************************/

/下記の処理の前にVirtualMachineConfigSpec(vmConfigSpec)オブジェクトに何を設定するのでしょうか?/

ManagedObjectReference tmor

= cb.getConnection().getService().reconfigVM_Task(

_virtualMachine, vmConfigSpec);

/*********************************************************************/

Reply
0 Kudos
3 Replies
seacret
Contributor
Contributor

こんにちは。

C#での経験しかなく、ExtendVirtualDisk_Taskの使用経験はないのですが

ReconfigVM_Taskからお答えします。

#ReconfigVM_TaskではCPU、メモリサイズ、ディスクの追加はしたことがあります。

ReconfigVM_TaskのパラメータVirtualMachineConfigSpecは

かなり膨大なプロパティを持っていますが、ほとんどが必須ではないものです。

仮想ディスクなどの仮想デバイスを変更する場合は、VirtualMachineConfigSpec.deviceChangesに

変更したいデバイスのVirurtualDeviceConfigSpecを代入してReconfigVM_Taskに渡すことで仮想マシンの変更が可能です。

仮想ディスクのVirtualDeviceConfigSpec.deviceに格納されるべき

クラス VirtualDiskのプロパティcapacityInKBを操作するだけでよいかと思います。

1. ログイン

2. 対象の仮想マシンのMoRefを取得

3. 2. で取得した仮想マシンの変更したい仮想ディスクのVirtualDeviceを取得

4. 3. で取得したVirtualDevice(Disk) のサイズを変更しVirtualMachineConfigSpec.deviceChangesに

代入。fileOperationとoperationの変更を行っておくこと

5. ReconfigVM_Taskを実行

といった流れになるかと思います。

ただし、わざわざExtendVirtualDisk_TaskがExperimentalとはいえ用意されているところを見るに

ReconfigVM_Taskではできないかもしれませんね。ExtendVIrtualDisk_Taskの_this引数の

VirtualDiskManagerはログイン時に使用するServiceContentから取得できるようです。

Reply
0 Kudos
sasama1997
Contributor
Contributor

ご返信ありがとうございます。

VMClone時のDatastoreの変更と同様ですが、MoRefの取得方法

が分かりません。

ManagedObjectReferenceはどういう扱いとなっているのでしょうか?

お手数ですが、宜しくお願い致します。

Reply
0 Kudos
sasama1997
Contributor
Contributor

Thank you.

It was possible to do.

The revision part is the following.

//********************************************************

VirtualDeviceConfigSpec diskSpec = new VirtualDeviceConfigSpec();

VirtualDisk disk = null;

VirtualMachineConfigInfo vmConfigInfo =

(VirtualMachineConfigInfo)cb.getServiceUtil().getDynamicProperty(_virtualMachine, "config");

VirtualDiskFlatVer2BackingInfo diskfileBacking

= new VirtualDiskFlatVer2BackingInfo();

VirtualDevice [] test = vmConfigInfo.getHardware().getDevice();

for(int k=0;k

if(test[k].getDeviceInfo().getLabel().equalsIgnoreCase(

cb.get_option("value"))){

disk = (VirtualDisk)test[k];

}

}

if(disk != null) {

int size = 1024 * 1024 * 26;

disk.setCapacityInKB(size);

diskSpec.setOperation(VirtualDeviceConfigSpecOperation.edit);

//diskSpec.setFileOperation(VirtualDeviceConfigSpecFileOperation.replace);

diskSpec.setDevice(disk);

}

if (diskSpec != null){

VirtualDeviceConfigSpec [] vdiskSpecArray = {diskSpec};

vmConfigSpec.setDeviceChange(vdiskSpecArray);

}

//**********************************************************

Reply
0 Kudos