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