mirror of https://github.com/apache/jclouds.git
Merge pull request #288 from andreaturli/imachinetovmspec
issue 384: IMachineToVmSpec + Test
This commit is contained in:
commit
5f37331a4b
|
@ -0,0 +1,104 @@
|
||||||
|
/**
|
||||||
|
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. jclouds licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jclouds.virtualbox.functions;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import javax.inject.Named;
|
||||||
|
|
||||||
|
import org.jclouds.compute.reference.ComputeServiceConstants;
|
||||||
|
import org.jclouds.logging.Logger;
|
||||||
|
import org.jclouds.virtualbox.domain.HardDisk;
|
||||||
|
import org.jclouds.virtualbox.domain.StorageController;
|
||||||
|
import org.jclouds.virtualbox.domain.StorageController.Builder;
|
||||||
|
import org.jclouds.virtualbox.domain.VmSpec;
|
||||||
|
import org.virtualbox_4_1.CleanupMode;
|
||||||
|
import org.virtualbox_4_1.DeviceType;
|
||||||
|
import org.virtualbox_4_1.IMachine;
|
||||||
|
import org.virtualbox_4_1.IMedium;
|
||||||
|
import org.virtualbox_4_1.IMediumAttachment;
|
||||||
|
import org.virtualbox_4_1.IStorageController;
|
||||||
|
|
||||||
|
import com.google.common.base.Function;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a VmSpec from an IMachine
|
||||||
|
*
|
||||||
|
* @author Andrea Turli
|
||||||
|
*/
|
||||||
|
public class IMachineToVmSpec implements Function<IMachine, VmSpec> {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
@Named(ComputeServiceConstants.COMPUTE_LOGGER)
|
||||||
|
protected Logger logger = Logger.NULL;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public VmSpec apply(@Nullable IMachine machine) {
|
||||||
|
List<StorageController> controllers = buildControllers(machine);
|
||||||
|
|
||||||
|
// TODO some parameters are predefined cause the IMachine doesn't have the
|
||||||
|
// concept i.e.: cleanUpMode
|
||||||
|
org.jclouds.virtualbox.domain.VmSpec.Builder vmSpecBuilder = VmSpec
|
||||||
|
.builder();
|
||||||
|
|
||||||
|
vmSpecBuilder.id(machine.getId()).name(machine.getName())
|
||||||
|
.memoryMB(machine.getMemorySize().intValue())
|
||||||
|
.osTypeId(machine.getOSTypeId()).forceOverwrite(true)
|
||||||
|
.cleanUpMode(CleanupMode.Full);
|
||||||
|
|
||||||
|
for (StorageController storageController : controllers) {
|
||||||
|
vmSpecBuilder.controller(storageController);
|
||||||
|
}
|
||||||
|
|
||||||
|
return vmSpecBuilder.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<StorageController> buildControllers(IMachine machine) {
|
||||||
|
|
||||||
|
List<StorageController> controllers = Lists.newArrayList();
|
||||||
|
for (IStorageController iStorageController : machine
|
||||||
|
.getStorageControllers()) {
|
||||||
|
|
||||||
|
Builder storageControlleBuiler = StorageController.builder();
|
||||||
|
for (IMediumAttachment iMediumAttachment : machine
|
||||||
|
.getMediumAttachmentsOfController(iStorageController.getName())) {
|
||||||
|
IMedium iMedium = iMediumAttachment.getMedium();
|
||||||
|
if (iMedium.getDeviceType().equals(DeviceType.HardDisk)) {
|
||||||
|
storageControlleBuiler.attachHardDisk(HardDisk.builder()
|
||||||
|
.diskpath(iMedium.getLocation()).autoDelete(true)
|
||||||
|
.controllerPort(iMediumAttachment.getPort())
|
||||||
|
.deviceSlot(iMediumAttachment.getDevice().intValue())
|
||||||
|
.build());
|
||||||
|
} else if (iMedium.getDeviceType().equals(DeviceType.DVD)) {
|
||||||
|
storageControlleBuiler.attachISO(iMediumAttachment.getPort(),
|
||||||
|
iMediumAttachment.getDevice().intValue(),
|
||||||
|
iMedium.getLocation());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
controllers.add(storageControlleBuiler
|
||||||
|
.name(iStorageController.getName())
|
||||||
|
.bus(iStorageController.getBus()).build());
|
||||||
|
}
|
||||||
|
return controllers;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,102 @@
|
||||||
|
/**
|
||||||
|
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. jclouds licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jclouds.virtualbox.functions;
|
||||||
|
|
||||||
|
import static org.easymock.EasyMock.expect;
|
||||||
|
import static org.easymock.classextension.EasyMock.createNiceMock;
|
||||||
|
import static org.easymock.classextension.EasyMock.replay;
|
||||||
|
import static org.testng.Assert.assertEquals;
|
||||||
|
|
||||||
|
import org.jclouds.virtualbox.domain.HardDisk;
|
||||||
|
import org.jclouds.virtualbox.domain.IsoImage;
|
||||||
|
import org.jclouds.virtualbox.domain.StorageController;
|
||||||
|
import org.jclouds.virtualbox.domain.VmSpec;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
import org.virtualbox_4_1.DeviceType;
|
||||||
|
import org.virtualbox_4_1.IMachine;
|
||||||
|
import org.virtualbox_4_1.IMedium;
|
||||||
|
import org.virtualbox_4_1.IMediumAttachment;
|
||||||
|
import org.virtualbox_4_1.IStorageController;
|
||||||
|
import org.virtualbox_4_1.StorageBus;
|
||||||
|
import org.virtualbox_4_1.VirtualBoxManager;
|
||||||
|
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
|
@Test(groups = "unit")
|
||||||
|
public class IMachineToVmSpecTest {
|
||||||
|
|
||||||
|
private static final String PATH_TO_DVD = "/path/to/dvd";
|
||||||
|
private static final String PATH_TO_HD = "/path/to/hd";
|
||||||
|
private static final StorageBus CONTROLLER_BUS = StorageBus.IDE;
|
||||||
|
private static final long MEMORY_SIZE = 512L;
|
||||||
|
private static final String VM_NAME = "test";
|
||||||
|
private static final String CONTROLLER_NAME = "IDE Controller";
|
||||||
|
private static final String VM_ID = "test";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testConvert() throws Exception {
|
||||||
|
|
||||||
|
VirtualBoxManager vbm = createNiceMock(VirtualBoxManager.class);
|
||||||
|
IStorageController iStorageController = createNiceMock(IStorageController.class);
|
||||||
|
|
||||||
|
IMediumAttachment iMediumAttachment = createNiceMock(IMediumAttachment.class);
|
||||||
|
IMedium hd = createNiceMock(IMedium.class);
|
||||||
|
IMedium dvd = createNiceMock(IMedium.class);
|
||||||
|
|
||||||
|
IMachine vm = createNiceMock(IMachine.class);
|
||||||
|
|
||||||
|
expect(vm.getStorageControllers()).andReturn(Lists.newArrayList(iStorageController)).anyTimes();
|
||||||
|
expect(iStorageController.getName()).andReturn(CONTROLLER_NAME).anyTimes();
|
||||||
|
expect(iStorageController.getBus()).andReturn(CONTROLLER_BUS).anyTimes();
|
||||||
|
expect(vm.getMediumAttachmentsOfController(CONTROLLER_NAME)).andReturn(Lists.newArrayList(iMediumAttachment)).anyTimes();
|
||||||
|
expect(iMediumAttachment.getPort()).andReturn(0).once();
|
||||||
|
expect(iMediumAttachment.getDevice()).andReturn(0).once();
|
||||||
|
|
||||||
|
expect(iMediumAttachment.getMedium()).andReturn(hd);
|
||||||
|
expect(hd.getDeviceType()).andReturn(DeviceType.HardDisk).once();
|
||||||
|
expect(hd.getLocation()).andReturn(PATH_TO_HD).once();
|
||||||
|
|
||||||
|
expect(iMediumAttachment.getMedium()).andReturn(dvd);
|
||||||
|
expect(dvd.getDeviceType()).andReturn(DeviceType.DVD).once();
|
||||||
|
expect(dvd.getLocation()).andReturn(PATH_TO_DVD).once();
|
||||||
|
|
||||||
|
expect(vm.getName()).andReturn(VM_NAME).anyTimes();
|
||||||
|
expect(vm.getId()).andReturn(VM_ID).anyTimes();
|
||||||
|
expect(vm.getMemorySize()).andReturn(MEMORY_SIZE).anyTimes();
|
||||||
|
|
||||||
|
replay(vbm, iStorageController, iMediumAttachment, hd, dvd, vm);
|
||||||
|
|
||||||
|
VmSpec vmSpec = new IMachineToVmSpec().apply(vm);
|
||||||
|
|
||||||
|
assertEquals(vmSpec.getVmName(), VM_NAME);
|
||||||
|
assertEquals(vmSpec.getVmId(), VM_ID);
|
||||||
|
assertEquals(vmSpec.getMemory(), MEMORY_SIZE);
|
||||||
|
for(StorageController controller : vmSpec.getControllers()) {
|
||||||
|
assertEquals(controller.getName(), CONTROLLER_NAME);
|
||||||
|
assertEquals(controller.getBus(), CONTROLLER_BUS);
|
||||||
|
for (HardDisk hardDisk : controller.getHardDisks()) {
|
||||||
|
assertEquals(hardDisk.getDiskPath(), PATH_TO_HD);
|
||||||
|
}
|
||||||
|
for (IsoImage iso : controller.getIsoImages()) {
|
||||||
|
assertEquals(iso.getSourcePath(), PATH_TO_DVD);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue