From 6d435742e107947c5de3bd4714e6fe683162b85d Mon Sep 17 00:00:00 2001 From: Mattias Holmqvist Date: Thu, 15 Dec 2011 23:15:29 +0100 Subject: [PATCH] Added support for memory to VmSpec. --- .../org/jclouds/virtualbox/domain/VmSpec.java | 28 +++++++++++++++---- .../functions/CreateAndInstallVm.java | 16 +++++------ .../jclouds/virtualbox/domain/VmSpecTest.java | 1 + ...rMachineFromIsoIfNotAlreadyExistsTest.java | 8 +++--- 4 files changed, 35 insertions(+), 18 deletions(-) diff --git a/sandbox-apis/virtualbox/src/main/java/org/jclouds/virtualbox/domain/VmSpec.java b/sandbox-apis/virtualbox/src/main/java/org/jclouds/virtualbox/domain/VmSpec.java index f68d784761..7ae269598d 100644 --- a/sandbox-apis/virtualbox/src/main/java/org/jclouds/virtualbox/domain/VmSpec.java +++ b/sandbox-apis/virtualbox/src/main/java/org/jclouds/virtualbox/domain/VmSpec.java @@ -23,6 +23,7 @@ import com.google.common.base.Objects; import java.util.*; +import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; /** @@ -33,14 +34,16 @@ public class VmSpec { private final String vmName; private final String osTypeId; private final String vmId; + private final long memory; private final boolean forceOverwrite; private final Map natNetworkAdapters; private final Set controllers; - public VmSpec(String vmId, String vmName, String osTypeId, boolean forceOverwrite, Set controllers, Map natNetworkAdapters) { + public VmSpec(String vmId, String vmName, String osTypeId, long memory, boolean forceOverwrite, Set controllers, Map natNetworkAdapters) { this.vmId = vmId; this.vmName = vmName; this.osTypeId = osTypeId; + this.memory = memory; this.controllers = controllers; this.forceOverwrite = forceOverwrite; this.natNetworkAdapters = natNetworkAdapters; @@ -53,12 +56,13 @@ public class VmSpec { public static class Builder { private Set controllers = new HashSet(); + private String name; private String id; private String osTypeId = ""; private boolean forceOverwrite; private Map natNetworkAdapters = new HashMap(); - + private long memory; public Builder controller(StorageController controller) { controllers.add(controller); return this; @@ -89,12 +93,22 @@ public class VmSpec { return this; } + public Builder memoryMB(int memorySize) { + this.memory = (long) memorySize; + return this; + } public VmSpec build() { checkNotNull(name, "name"); checkNotNull(id, "id"); - return new VmSpec(id, name, osTypeId, forceOverwrite, controllers, natNetworkAdapters); + checkArgument(memory > 0, "Memory must be set"); + return new VmSpec(id, name, osTypeId, memory, forceOverwrite, controllers, natNetworkAdapters); } + + + } + public String getVmId() { + return vmId; } public String getVmName() { @@ -105,8 +119,8 @@ public class VmSpec { return osTypeId; } - public String getVmId() { - return vmId; + public long getMemory() { + return memory; } public boolean isForceOverwrite() { @@ -129,6 +143,7 @@ public class VmSpec { return Objects.equal(vmId, other.vmId) && Objects.equal(vmName, other.vmName) && Objects.equal(osTypeId, other.osTypeId) && + Objects.equal(memory, other.memory) && Objects.equal(forceOverwrite, other.forceOverwrite) && Objects.equal(natNetworkAdapters, other.natNetworkAdapters) && Objects.equal(controllers, other.controllers); @@ -138,7 +153,7 @@ public class VmSpec { @Override public int hashCode() { - return Objects.hashCode(vmId, vmName, osTypeId, forceOverwrite, natNetworkAdapters, controllers); + return Objects.hashCode(vmId, vmName, osTypeId, memory, forceOverwrite, natNetworkAdapters, controllers); } @Override @@ -146,6 +161,7 @@ public class VmSpec { return "VmSpecification{" + "vmName='" + vmName + '\'' + ", osTypeId='" + osTypeId + '\'' + + ", memory='" + memory + '\'' + ", vmId='" + vmId + '\'' + ", forceOverwrite=" + forceOverwrite + ", natNetworkAdapters=" + natNetworkAdapters + diff --git a/sandbox-apis/virtualbox/src/main/java/org/jclouds/virtualbox/functions/CreateAndInstallVm.java b/sandbox-apis/virtualbox/src/main/java/org/jclouds/virtualbox/functions/CreateAndInstallVm.java index 8c17214aa1..3ce8b334cc 100644 --- a/sandbox-apis/virtualbox/src/main/java/org/jclouds/virtualbox/functions/CreateAndInstallVm.java +++ b/sandbox-apis/virtualbox/src/main/java/org/jclouds/virtualbox/functions/CreateAndInstallVm.java @@ -77,28 +77,28 @@ public class CreateAndInstallVm implements Function { } @Override - public IMachine apply(VmSpec vmSpecification) { + public IMachine apply(VmSpec vmSpec) { ensureWebServerIsRunning(); - final IMachine vm = new CreateAndRegisterMachineFromIsoIfNotAlreadyExists(manager).apply(vmSpecification); + final IMachine vm = new CreateAndRegisterMachineFromIsoIfNotAlreadyExists(manager).apply(vmSpec); - String vmName = vmSpecification.getVmName(); + String vmName = vmSpec.getVmName(); // Change RAM - ensureMachineHasMemory(vmName, 1024l); + ensureMachineHasMemory(vmName, vmSpec.getMemory()); - Set controllers = vmSpecification.getControllers(); + Set controllers = vmSpec.getControllers(); if (controllers.isEmpty()) { - throw new IllegalStateException(missingIDEControllersMessage(vmSpecification)); + throw new IllegalStateException(missingIDEControllersMessage(vmSpec)); } StorageController controller = controllers.iterator().next(); ensureMachineHasIDEControllerNamed(vmName, controller); setupHardDisksForController(vmName, controller); - setupDvdsForController(vmSpecification, vmName, controller); + setupDvdsForController(vmSpec, vmName, controller); // NAT - Map natNetworkAdapters = vmSpecification.getNatNetworkAdapters(); + Map natNetworkAdapters = vmSpec.getNatNetworkAdapters(); for (Map.Entry natAdapterAndSlot : natNetworkAdapters.entrySet()) { long slotId = natAdapterAndSlot.getKey(); NatAdapter natAdapter = natAdapterAndSlot.getValue(); diff --git a/sandbox-apis/virtualbox/src/test/java/org/jclouds/virtualbox/domain/VmSpecTest.java b/sandbox-apis/virtualbox/src/test/java/org/jclouds/virtualbox/domain/VmSpecTest.java index d129802f63..8bdc04a56c 100644 --- a/sandbox-apis/virtualbox/src/test/java/org/jclouds/virtualbox/domain/VmSpecTest.java +++ b/sandbox-apis/virtualbox/src/test/java/org/jclouds/virtualbox/domain/VmSpecTest.java @@ -67,6 +67,7 @@ public class VmSpecTest { .id("MyVmId") .name("My VM") .osTypeId("Ubuntu") + .memoryMB(1024) .natNetworkAdapter( 0, NatAdapter.builder().tcpRedirectRule("localhost", 2222, "", 22).build()) diff --git a/sandbox-apis/virtualbox/src/test/java/org/jclouds/virtualbox/functions/CreateAndRegisterMachineFromIsoIfNotAlreadyExistsTest.java b/sandbox-apis/virtualbox/src/test/java/org/jclouds/virtualbox/functions/CreateAndRegisterMachineFromIsoIfNotAlreadyExistsTest.java index 0cf406cb9a..0e3940886e 100644 --- a/sandbox-apis/virtualbox/src/test/java/org/jclouds/virtualbox/functions/CreateAndRegisterMachineFromIsoIfNotAlreadyExistsTest.java +++ b/sandbox-apis/virtualbox/src/test/java/org/jclouds/virtualbox/functions/CreateAndRegisterMachineFromIsoIfNotAlreadyExistsTest.java @@ -1,4 +1,4 @@ -/** +/* * Licensed to jclouds, Inc. (jclouds) under one or more * contributor license agreements. See the NOTICE file * distributed with this work for additional information @@ -49,7 +49,7 @@ public class CreateAndRegisterMachineFromIsoIfNotAlreadyExistsTest { IVirtualBox vBox = createMock(IVirtualBox.class); String vmName = "jclouds-image-my-ubuntu-image"; - VmSpec launchSpecification = VmSpec.builder().id(vmName).name(vmName).osTypeId("").build(); + VmSpec launchSpecification = VmSpec.builder().id(vmName).name(vmName).osTypeId("").memoryMB(1024).build(); IMachine createdMachine = createMock(IMachine.class); @@ -90,7 +90,7 @@ public class CreateAndRegisterMachineFromIsoIfNotAlreadyExistsTest { replay(manager, vBox); - VmSpec launchSpecification = VmSpec.builder().id("").name(vmName).osTypeId("").build(); + VmSpec launchSpecification = VmSpec.builder().id("").name(vmName).osTypeId("").memoryMB(1024).build(); new CreateAndRegisterMachineFromIsoIfNotAlreadyExists(manager).apply(launchSpecification); } @@ -111,7 +111,7 @@ public class CreateAndRegisterMachineFromIsoIfNotAlreadyExistsTest { replay(manager, vBox); - VmSpec launchSpecification = VmSpec.builder().id("").name(vmName).osTypeId("").build(); + VmSpec launchSpecification = VmSpec.builder().id("").name(vmName).osTypeId("").memoryMB(1024).build(); new CreateAndRegisterMachineFromIsoIfNotAlreadyExists(manager).apply(launchSpecification); }