diff --git a/providers/savvis-symphonyvpdc/pom.xml b/providers/savvis-symphonyvpdc/pom.xml
index b6b25baa52..0c19c904d2 100644
--- a/providers/savvis-symphonyvpdc/pom.xml
+++ b/providers/savvis-symphonyvpdc/pom.xml
@@ -53,11 +53,11 @@
node-924
- https://api.symphonyvpdc.savvis.net/rest/api
- 0.8
+ https://api.symphonyvpdc.savvis.net/vpdc
+ 1.0
FIXME
FIXME
- FIXME
+ FIXME
FIXME
FIXME
@@ -144,7 +144,7 @@
${test.savvis-symphonyvpdc.credential}
- savvis-symphonyvpdc.vpdc-email
+ test.savvis-symphonyvpdc.vdc-email
${test.savvis-symphonyvpdc.vdc-email}
diff --git a/providers/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/binders/BaseBindVMSpecToXmlPayload.java b/providers/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/binders/BaseBindVMSpecToXmlPayload.java
new file mode 100644
index 0000000000..7737be725a
--- /dev/null
+++ b/providers/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/binders/BaseBindVMSpecToXmlPayload.java
@@ -0,0 +1,210 @@
+/**
+ *
+ * Copyright (C) 2011 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * Licensed 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.savvis.vpdc.binders;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+
+import java.util.Map;
+import java.util.Properties;
+import java.util.Map.Entry;
+
+import javax.ws.rs.core.MediaType;
+import javax.xml.parsers.FactoryConfigurationError;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.jclouds.cim.ResourceAllocationSettingData.ResourceType;
+import org.jclouds.compute.domain.CIMOperatingSystem;
+import org.jclouds.http.HttpRequest;
+import org.jclouds.rest.MapBinder;
+import org.jclouds.rest.binders.BindToStringPayload;
+import org.jclouds.rest.internal.GeneratedHttpRequest;
+import org.jclouds.savvis.vpdc.domain.VMSpec;
+
+import com.google.common.base.Throwables;
+import com.jamesmurty.utils.XMLBuilder;
+
+/**
+ *
+ * @author Adrian Cole
+ *
+ */
+public abstract class BaseBindVMSpecToXmlPayload extends BindToStringPayload implements MapBinder {
+ @Override
+ public R bindToRequest(R request, Object toBind) {
+ throw new IllegalStateException("BindVMSpecToXmlPayload needs parameters");
+ }
+
+ protected abstract T findSpecInArgsOrNull(GeneratedHttpRequest> gRequest);
+
+ @Override
+ public R bindToRequest(R request, Map postParams) {
+ checkArgument(checkNotNull(request, "request") instanceof GeneratedHttpRequest>,
+ "this binder is only valid for GeneratedHttpRequests!");
+ GeneratedHttpRequest> gRequest = (GeneratedHttpRequest>) request;
+ checkState(gRequest.getArgs() != null, "args should be initialized at this point");
+
+ request = super.bindToRequest(request, generateXml(findSpecInArgsOrNull(gRequest)));
+ request.getPayload().getContentMetadata().setContentType(MediaType.APPLICATION_XML);
+ return request;
+ }
+
+ public String generateXml(T spec) {
+ try {
+ XMLBuilder rootBuilder = buildRoot();
+ bindSpec(spec, rootBuilder);
+ Properties outputProperties = new Properties();
+ outputProperties.put(javax.xml.transform.OutputKeys.OMIT_XML_DECLARATION, "yes");
+ return rootBuilder.asString(outputProperties);
+ } catch (Exception e) {
+ Throwables.propagate(e);
+ return null;
+ }
+ }
+
+ protected abstract void bindSpec(T spec, XMLBuilder rootBuilder) throws ParserConfigurationException,
+ FactoryConfigurationError;
+
+ protected void checkSpec(VMSpec spec) {
+ checkNotNull(spec, "VMSpec");
+ checkNotNull(spec.getName(), "name");
+ checkNotNull(spec.getNetworkTierName(), "networkTierName");
+ }
+
+ protected void addOperatingSystemAndVirtualHardware(VMSpec spec, XMLBuilder vAppBuilder) {
+ addOperatingSystemSection(vAppBuilder, spec.getOperatingSystem());
+ // TODO: Savvis returns network names with a - instead of space on getNetworkInVDC
+ // call,
+ // fix this once savvis api starts returning correctly
+ addVirtualHardwareSection(vAppBuilder, spec.getName(), spec.getNetworkTierName().replace("-", " "), spec);
+ }
+
+ void addVirtualHardwareSection(XMLBuilder rootBuilder, String name, String networkName, VMSpec spec) {
+ XMLBuilder virtualHardwareSectionBuilder = rootBuilder.e("ovf:VirtualHardwareSection");
+ virtualHardwareSectionBuilder.e("ovf:Info").t("Virtual Hardware");
+ addSystem(virtualHardwareSectionBuilder, name);
+ addItems(virtualHardwareSectionBuilder, spec, networkName);
+ }
+
+ void addItems(XMLBuilder virtualHardwareSectionBuilder, VMSpec spec, String networkName) {
+ // todo make this work with fractional, which I think means setting speed to half
+ addCPU(virtualHardwareSectionBuilder, (int) spec.getProcessorCount());
+ addMemory(virtualHardwareSectionBuilder, spec.getMemoryInGig());
+ addNetwork(virtualHardwareSectionBuilder, networkName);
+ addDisks(virtualHardwareSectionBuilder, spec);
+ }
+
+ private void addSystem(XMLBuilder virtualHardwareSectionBuilder, String name) {
+ XMLBuilder systemBuilder = virtualHardwareSectionBuilder.e("ovf:System");
+ systemBuilder.e("vssd:Description").t("Virtual Hardware Family");
+ systemBuilder.e("vssd:ElementName").t(name);
+ systemBuilder.e("vssd:InstanceID").t("1");
+ systemBuilder.e("vssd:VirtualSystemIdentifier").t(name);
+ }
+
+ private void addOperatingSystemSection(XMLBuilder rootBuilder, CIMOperatingSystem operatingSystem) {
+ XMLBuilder sectionBuilder = rootBuilder.e("ovf:OperatingSystemSection").a("ovf:id",
+ operatingSystem.getOsType().getCode() + "");
+ sectionBuilder.e("ovf:Info").t("Specifies the operating system installed");
+ sectionBuilder.e("ovf:Description").t(operatingSystem.getDescription());
+ }
+
+ private void addCPU(XMLBuilder sectionBuilder, int processorCount) {
+ XMLBuilder cpuBuilder = sectionBuilder.e("ovf:Item");
+ cpuBuilder.e("rasd:AllocationUnits").t("3 GHz");
+ cpuBuilder.e("rasd:Description").t("Number of Virtual CPUs");
+ cpuBuilder.e("rasd:ElementName").t(processorCount + " CPU");
+ cpuBuilder.e("rasd:InstanceID").t("1");
+ cpuBuilder.e("rasd:ResourceType").t(ResourceType.PROCESSOR.value());
+ cpuBuilder.e("rasd:VirtualQuantity").t(processorCount + "");
+ }
+
+ private void addMemory(XMLBuilder sectionBuilder, int memoryInGig) {
+ XMLBuilder memoryBuilder = sectionBuilder.e("ovf:Item");
+ memoryBuilder.e("rasd:AllocationUnits").t("Gigabytes");
+ memoryBuilder.e("rasd:Description").t("Memory Size");
+ memoryBuilder.e("rasd:ElementName").t("Memory");
+ memoryBuilder.e("rasd:InstanceID").t("2");
+ memoryBuilder.e("rasd:ResourceType").t(ResourceType.MEMORY.value());
+ memoryBuilder.e("rasd:VirtualQuantity").t(memoryInGig + "");
+ }
+
+ private void addNetwork(XMLBuilder sectionBuilder, String networkName) {
+ XMLBuilder networkBuilder = sectionBuilder.e("ovf:Item");
+ networkBuilder.e("rasd:Caption").t("false");
+ networkBuilder.e("rasd:Connection").t(networkName);
+ networkBuilder.e("rasd:ElementName").t("Network");
+ networkBuilder.e("rasd:InstanceID").t("3");
+ networkBuilder.e("rasd:ResourceType").t(ResourceType.ETHERNET_ADAPTER.value());
+ networkBuilder.e("rasd:VirtualQuantity").t("1");
+ }
+
+ private void addDisks(XMLBuilder sectionBuilder, VMSpec spec) {
+ XMLBuilder bootDiskBuilder = sectionBuilder.e("ovf:Item");
+ bootDiskBuilder.e("rasd:AllocationUnits").t("Gigabytes");
+ bootDiskBuilder.e("rasd:Caption").t("");
+ bootDiskBuilder.e("rasd:Description").t("Hard Disk");
+ bootDiskBuilder.e("rasd:ElementName").t(spec.getBootDeviceName());
+ bootDiskBuilder.e("rasd:HostResource").t("boot");
+ bootDiskBuilder.e("rasd:InstanceID").t("4");
+ bootDiskBuilder.e("rasd:ResourceType").t(ResourceType.BASE_PARTITIONABLE_UNIT.value());
+ bootDiskBuilder.e("rasd:VirtualQuantity").t(spec.getBootDiskSize() + "");
+
+ int instanceId = 5;
+ for (Entry dataDisk : spec.getDataDiskDeviceNameToSizeInGig().entrySet()) {
+ XMLBuilder dataDiskBuilder = sectionBuilder.e("ovf:Item");
+ dataDiskBuilder.e("rasd:AllocationUnits").t("Gigabytes");
+ dataDiskBuilder.e("rasd:Caption").t("");
+ dataDiskBuilder.e("rasd:Description").t("Hard Disk");
+ dataDiskBuilder.e("rasd:ElementName").t(dataDisk.getKey());
+ dataDiskBuilder.e("rasd:HostResource").t("data");
+ dataDiskBuilder.e("rasd:InstanceID").t("" + instanceId++);
+ dataDiskBuilder.e("rasd:ResourceType").t(ResourceType.PARTITIONABLE_UNIT.value());
+ dataDiskBuilder.e("rasd:VirtualQuantity").t(dataDisk.getValue() + "");
+ }
+ }
+
+ protected XMLBuilder buildRoot() throws ParserConfigurationException, FactoryConfigurationError {
+ XMLBuilder rootBuilder = XMLBuilder.create("vApp:VApp").a("xmlns:vApp", "http://www.vmware.com/vcloud/v0.8").a(
+ "xmlns:ovf", "http://schemas.dmtf.org/ovf/envelope/1").a("xmlns:vssd",
+ "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData").a("xmlns:common",
+ "http://schemas.dmtf.org/wbem/wscim/1/common").a("xmlns:rasd",
+ "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData");
+ return rootBuilder;
+ }
+
+ protected XMLBuilder buildChildren(XMLBuilder rootBuilder) throws ParserConfigurationException,
+ FactoryConfigurationError {
+ XMLBuilder vAppChildrenBuilder = rootBuilder.e("vApp:Children");
+ return vAppChildrenBuilder;
+ }
+
+ protected XMLBuilder buildRootForName(XMLBuilder rootBuilder, String name) throws ParserConfigurationException,
+ FactoryConfigurationError {
+ XMLBuilder vAppBuilder = rootBuilder.e("vApp:VApp").a("name", name).a("type",
+ "application/vnd.vmware.vcloud.vApp+xml");
+ return vAppBuilder;
+ }
+
+ protected String ifNullDefaultTo(String value, String defaultValue) {
+ return value != null ? value : checkNotNull(defaultValue, "defaultValue");
+ }
+
+}
diff --git a/providers/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/binders/BindVMSpecToXmlPayload.java b/providers/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/binders/BindVMSpecToXmlPayload.java
index c80178d6b9..a3e8a4f18e 100644
--- a/providers/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/binders/BindVMSpecToXmlPayload.java
+++ b/providers/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/binders/BindVMSpecToXmlPayload.java
@@ -18,26 +18,10 @@
*/
package org.jclouds.savvis.vpdc.binders;
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Preconditions.checkState;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Properties;
-
import javax.inject.Singleton;
-import javax.ws.rs.core.MediaType;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
-import org.jclouds.cim.ResourceAllocationSettingData.ResourceType;
-import org.jclouds.compute.domain.CIMOperatingSystem;
-import org.jclouds.http.HttpRequest;
-import org.jclouds.rest.MapBinder;
-import org.jclouds.rest.binders.BindToStringPayload;
import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.jclouds.savvis.vpdc.domain.VMSpec;
@@ -49,173 +33,23 @@ import com.jamesmurty.utils.XMLBuilder;
*
*/
@Singleton
-public class BindVMSpecToXmlPayload extends BindToStringPayload implements MapBinder {
- @Override
- public R bindToRequest(R request, Object toBind) {
- throw new IllegalStateException("BindVMSpecToXmlPayload needs parameters");
+public class BindVMSpecToXmlPayload extends BaseBindVMSpecToXmlPayload {
- }
-
- protected List findSpecInArgsOrNull(GeneratedHttpRequest> gRequest) {
+ protected VMSpec findSpecInArgsOrNull(GeneratedHttpRequest> gRequest) {
for (Object arg : gRequest.getArgs()) {
if (arg instanceof VMSpec) {
- List vmSpecs = new ArrayList();
- vmSpecs.add((VMSpec) arg);
- return vmSpecs;
- } else if (arg instanceof ArrayList) {
- List configurations = (List) arg;
- return (configurations.size() > 0) ? configurations : null;
+ return VMSpec.class.cast(arg);
}
}
- return null;
+ throw new IllegalArgumentException("Iterbable must be included in the argument list");
}
@Override
- public R bindToRequest(R request, Map postParams) {
- checkArgument(checkNotNull(request, "request") instanceof GeneratedHttpRequest>,
- "this binder is only valid for GeneratedHttpRequests!");
- GeneratedHttpRequest> gRequest = (GeneratedHttpRequest>) request;
- checkState(gRequest.getArgs() != null, "args should be initialized at this point");
-
- request = super.bindToRequest(request,
- generateXml(findSpecInArgsOrNull(gRequest)));
- request.getPayload().getContentMetadata().setContentType(MediaType.APPLICATION_XML);
- return request;
- }
-
- public String generateXml(List specs) {
- try {
- XMLBuilder rootBuilder = buildRoot();
- XMLBuilder vAppChildrenBuilder = buildChildren(rootBuilder);
- for (VMSpec spec : specs) {
- checkNotNull(spec, "VMSpec");
- checkNotNull(spec.getName(), "name");
- checkNotNull(spec.getNetwork(), "network");
- checkNotNull(spec.getNetwork().getName(), "networkName");
- XMLBuilder vAppBuilder = buildRootForName(vAppChildrenBuilder, spec.getName());
- addOperatingSystemSection(vAppBuilder, spec.getOperatingSystem());
- // TODO: Savvis returns network names with a - instead of space on getNetworkInVDC call,
- // fix this once savvis api starts returning correctly
- addVirtualHardwareSection(vAppBuilder, spec.getName(), spec.getNetwork().getName().replace("-", " "), spec);
- }
- Properties outputProperties = new Properties();
- outputProperties.put(javax.xml.transform.OutputKeys.OMIT_XML_DECLARATION, "yes");
- return rootBuilder.asString(outputProperties);
- } catch (Exception e) {
- return null;
- }
- }
-
- void addVirtualHardwareSection(XMLBuilder rootBuilder, String name, String networkName, VMSpec spec) {
- XMLBuilder virtualHardwareSectionBuilder = rootBuilder.e("ovf:VirtualHardwareSection");
- virtualHardwareSectionBuilder.e("ovf:Info").t("Virtual Hardware");
- addSystem(virtualHardwareSectionBuilder, name);
- addItems(virtualHardwareSectionBuilder, spec, networkName);
- }
-
- void addItems(XMLBuilder virtualHardwareSectionBuilder, VMSpec spec, String networkName) {
- //todo make this work with fractional, which I think means setting speed to half
- addCPU(virtualHardwareSectionBuilder, (int)spec.getProcessorCount());
- addMemory(virtualHardwareSectionBuilder, spec.getMemoryInGig());
- addNetwork(virtualHardwareSectionBuilder, networkName);
- addDisks(virtualHardwareSectionBuilder, spec);
- }
-
- private void addSystem(XMLBuilder virtualHardwareSectionBuilder, String name) {
- XMLBuilder systemBuilder = virtualHardwareSectionBuilder.e("ovf:System");
- systemBuilder.e("vssd:Description").t("Virtual Hardware Family");
- systemBuilder.e("vssd:ElementName").t(name);
- systemBuilder.e("vssd:InstanceID").t("1");
- systemBuilder.e("vssd:VirtualSystemIdentifier").t(name);
- }
-
- private void addOperatingSystemSection(XMLBuilder rootBuilder, CIMOperatingSystem operatingSystem) {
- XMLBuilder sectionBuilder = rootBuilder.e("ovf:OperatingSystemSection").a("ovf:id",
- operatingSystem.getOsType().getCode() + "");
- sectionBuilder.e("ovf:Info").t("Specifies the operating system installed");
- sectionBuilder.e("ovf:Description").t(operatingSystem.getDescription());
- }
-
- private void addCPU(XMLBuilder sectionBuilder, int processorCount) {
- XMLBuilder cpuBuilder = sectionBuilder.e("ovf:Item");
- cpuBuilder.e("rasd:AllocationUnits").t("3 GHz");
- cpuBuilder.e("rasd:Description").t("Number of Virtual CPUs");
- cpuBuilder.e("rasd:ElementName").t(processorCount + " CPU");
- cpuBuilder.e("rasd:InstanceID").t("1");
- cpuBuilder.e("rasd:ResourceType").t(ResourceType.PROCESSOR.value());
- cpuBuilder.e("rasd:VirtualQuantity").t(processorCount + "");
- }
-
- private void addMemory(XMLBuilder sectionBuilder, int memoryInGig) {
- XMLBuilder memoryBuilder = sectionBuilder.e("ovf:Item");
- memoryBuilder.e("rasd:AllocationUnits").t("Gigabytes");
- memoryBuilder.e("rasd:Description").t("Memory Size");
- memoryBuilder.e("rasd:ElementName").t("Memory");
- memoryBuilder.e("rasd:InstanceID").t("2");
- memoryBuilder.e("rasd:ResourceType").t(ResourceType.MEMORY.value());
- memoryBuilder.e("rasd:VirtualQuantity").t(memoryInGig + "");
- }
-
- private void addNetwork(XMLBuilder sectionBuilder, String networkName) {
- XMLBuilder networkBuilder = sectionBuilder.e("ovf:Item");
- networkBuilder.e("rasd:Caption").t("false");
- networkBuilder.e("rasd:Connection").t(networkName);
- networkBuilder.e("rasd:ElementName").t("Network");
- networkBuilder.e("rasd:InstanceID").t("3");
- networkBuilder.e("rasd:ResourceType").t(ResourceType.ETHERNET_ADAPTER.value());
- networkBuilder.e("rasd:VirtualQuantity").t("1");
- }
-
- private void addDisks(XMLBuilder sectionBuilder, VMSpec spec) {
- XMLBuilder bootDiskBuilder = sectionBuilder.e("ovf:Item");
- bootDiskBuilder.e("rasd:AllocationUnits").t("Gigabytes");
- bootDiskBuilder.e("rasd:Caption").t("");
- bootDiskBuilder.e("rasd:Description").t("Hard Disk");
- bootDiskBuilder.e("rasd:ElementName").t(spec.getBootDeviceName());
- bootDiskBuilder.e("rasd:HostResource").t("boot");
- bootDiskBuilder.e("rasd:InstanceID").t("4");
- bootDiskBuilder.e("rasd:ResourceType").t(ResourceType.BASE_PARTITIONABLE_UNIT.value());
- bootDiskBuilder.e("rasd:VirtualQuantity").t(spec.getBootDiskSize() + "");
-
- int instanceId = 5;
- for (Entry dataDisk : spec.getDataDiskDeviceNameToSizeInGig().entrySet()) {
- XMLBuilder dataDiskBuilder = sectionBuilder.e("ovf:Item");
- dataDiskBuilder.e("rasd:AllocationUnits").t("Gigabytes");
- dataDiskBuilder.e("rasd:Caption").t("");
- dataDiskBuilder.e("rasd:Description").t("Hard Disk");
- dataDiskBuilder.e("rasd:ElementName").t(dataDisk.getKey());
- dataDiskBuilder.e("rasd:HostResource").t("data");
- dataDiskBuilder.e("rasd:InstanceID").t("" + instanceId++);
- dataDiskBuilder.e("rasd:ResourceType").t(ResourceType.PARTITIONABLE_UNIT.value());
- dataDiskBuilder.e("rasd:VirtualQuantity").t(dataDisk.getValue() + "");
- }
- }
-
- protected XMLBuilder buildRoot() throws ParserConfigurationException, FactoryConfigurationError {
- XMLBuilder rootBuilder = XMLBuilder.create("vApp:VApp")
- .a("xmlns:vApp", "http://www.vmware.com/vcloud/v0.8")
- .a("xmlns:ovf", "http://schemas.dmtf.org/ovf/envelope/1")
- .a("xmlns:vssd", "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData")
- .a("xmlns:common", "http://schemas.dmtf.org/wbem/wscim/1/common")
- .a("xmlns:rasd", "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData")
- .a("name", "");
- return rootBuilder;
- }
-
- protected XMLBuilder buildChildren(XMLBuilder rootBuilder) throws ParserConfigurationException, FactoryConfigurationError {
- XMLBuilder vAppChildrenBuilder = rootBuilder.e("vApp:Children");
- return vAppChildrenBuilder;
- }
-
- protected XMLBuilder buildRootForName(XMLBuilder rootBuilder, String name) throws ParserConfigurationException, FactoryConfigurationError {
- XMLBuilder vAppBuilder = rootBuilder.e("vApp:VApp")
- .a("name", name)
- .a("type", "application/vnd.vmware.vcloud.vApp+xml");
- return vAppBuilder;
- }
-
- protected String ifNullDefaultTo(String value, String defaultValue) {
- return value != null ? value : checkNotNull(defaultValue, "defaultValue");
+ protected void bindSpec(VMSpec spec, XMLBuilder rootBuilder) throws ParserConfigurationException,
+ FactoryConfigurationError {
+ checkSpec(spec);
+ rootBuilder.a("name", spec.getName()).a("type", "application/vnd.vmware.vcloud.vApp+xml").a("href", "");
+ addOperatingSystemAndVirtualHardware(spec, rootBuilder);
}
}
diff --git a/providers/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/binders/BindVMSpecsToXmlPayload.java b/providers/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/binders/BindVMSpecsToXmlPayload.java
new file mode 100644
index 0000000000..583dc63716
--- /dev/null
+++ b/providers/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/binders/BindVMSpecsToXmlPayload.java
@@ -0,0 +1,64 @@
+/**
+ *
+ * Copyright (C) 2011 Cloud Conscious, LLC.
+ *
+ * ====================================================================
+ * Licensed 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.savvis.vpdc.binders;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+import javax.inject.Singleton;
+import javax.xml.parsers.FactoryConfigurationError;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.jclouds.rest.internal.GeneratedHttpRequest;
+import org.jclouds.savvis.vpdc.domain.VMSpec;
+
+import com.google.common.collect.Iterables;
+import com.jamesmurty.utils.XMLBuilder;
+
+/**
+ *
+ * @author Adrian Cole
+ *
+ */
+@Singleton
+public class BindVMSpecsToXmlPayload extends BaseBindVMSpecToXmlPayload> {
+
+ @SuppressWarnings("unchecked")
+ protected Iterable findSpecInArgsOrNull(GeneratedHttpRequest> gRequest) {
+ for (Object arg : gRequest.getArgs()) {
+ if (arg instanceof Iterable>) {
+ Iterable specs = (Iterable) arg;
+ checkArgument(Iterables.size(specs) > 0,
+ "At least one VMSpec must be included in the argument list");
+ return specs;
+ }
+ }
+ throw new IllegalArgumentException("Iterbable must be included in the argument list");
+ }
+
+ @Override
+ protected void bindSpec(Iterable specs, XMLBuilder rootBuilder) throws ParserConfigurationException, FactoryConfigurationError {
+ rootBuilder.a("name", "");
+ XMLBuilder specBuilder = buildChildren(rootBuilder);
+ for (VMSpec spec : specs) {
+ checkSpec(spec);
+ XMLBuilder vAppBuilder = buildRootForName(specBuilder, spec.getName());
+ addOperatingSystemAndVirtualHardware(spec, vAppBuilder);
+ }
+ }
+}
diff --git a/providers/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/compute/strategy/VPDCComputeServiceAdapter.java b/providers/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/compute/strategy/VPDCComputeServiceAdapter.java
index 37a133747f..e8f6e1bbee 100644
--- a/providers/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/compute/strategy/VPDCComputeServiceAdapter.java
+++ b/providers/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/compute/strategy/VPDCComputeServiceAdapter.java
@@ -85,6 +85,8 @@ public class VPDCComputeServiceAdapter implements ComputeServiceAdapter dataDriveDeviceNameToSizeInGig = Maps.newLinkedHashMap();
public Builder name(String name) {
- this.name = checkNotNull(name, "name");
- return this;
- }
-
- public Builder network(Network network) {
- this.network = checkNotNull(network, "network");
- return this;
+ this.name = checkNotNull(name, "name");
+ return this;
}
-
+
+ public Builder networkTierName(String networkTierName) {
+ this.networkTierName = checkNotNull(networkTierName, "networkTierName");
+ return this;
+ }
+
public Builder operatingSystem(CIMOperatingSystem operatingSystem) {
this.operatingSystem = checkNotNull(operatingSystem, "operatingSystem");
return this;
@@ -96,19 +96,19 @@ public class VMSpec {
public Builder addDataDrives(Map dataDriveDeviceNameToSizeInGig) {
this.dataDriveDeviceNameToSizeInGig = ImmutableMap.copyOf(checkNotNull(dataDriveDeviceNameToSizeInGig,
- "dataDriveDeviceNameToSizeInGig"));
+ "dataDriveDeviceNameToSizeInGig"));
return this;
}
public VMSpec build() {
- return new VMSpec(name, network, operatingSystem, processorCount, memoryInGig, bootDeviceName, bootDriveSize,
- dataDriveDeviceNameToSizeInGig);
+ return new VMSpec(name, networkTierName, operatingSystem, processorCount, memoryInGig, bootDeviceName,
+ bootDriveSize, dataDriveDeviceNameToSizeInGig);
}
public static Builder fromVMSpec(VMSpec in) {
- return new Builder().operatingSystem(in.getOperatingSystem()).memoryInGig(in.getMemoryInGig())
- .bootDeviceName(in.getBootDeviceName()).bootDiskSize(in.getBootDiskSize())
- .addDataDrives(in.getDataDiskDeviceNameToSizeInGig()).processorCount(in.getProcessorCount());
+ return new Builder().operatingSystem(in.getOperatingSystem()).memoryInGig(in.getMemoryInGig()).bootDeviceName(
+ in.getBootDeviceName()).bootDiskSize(in.getBootDiskSize()).addDataDrives(
+ in.getDataDiskDeviceNameToSizeInGig()).processorCount(in.getProcessorCount());
}
}
@@ -119,7 +119,7 @@ public class VMSpec {
}
private final String name;
- private final Network network;
+ private final String networkTierName;
private final CIMOperatingSystem operatingSystem;
private final int processorCount;
private final int memoryInGig;
@@ -127,10 +127,11 @@ public class VMSpec {
private final int bootDriveSize;
private final Map dataDriveDeviceNameToSizeInGig;
- protected VMSpec(String name, Network network, CIMOperatingSystem operatingSystem, int processorCount, int memoryInGig, String bootDeviceName,
- int bootDriveSize, Map dataDriveDeviceNameToSizeInGig) {
- this.name = name;
- this.network = network;
+ protected VMSpec(String name, String networkTierName, CIMOperatingSystem operatingSystem, int processorCount,
+ int memoryInGig, String bootDeviceName, int bootDriveSize,
+ Map dataDriveDeviceNameToSizeInGig) {
+ this.name = name;
+ this.networkTierName = networkTierName;
this.operatingSystem = checkNotNull(operatingSystem, "operatingSystem not specified");
checkProcessorCount(processorCount);
this.processorCount = processorCount;
@@ -140,16 +141,16 @@ public class VMSpec {
checkArgument(bootDriveSize > 0, "bootDriveSize must be positive");
this.bootDriveSize = bootDriveSize;
this.dataDriveDeviceNameToSizeInGig = ImmutableMap.copyOf(checkNotNull(dataDriveDeviceNameToSizeInGig,
- "dataDriveDeviceNameToSizeInGig"));
+ "dataDriveDeviceNameToSizeInGig"));
}
public String getName() {
- return name;
- }
+ return name;
+ }
- public Network getNetwork() {
- return network;
- }
+ public String getNetworkTierName() {
+ return networkTierName;
+ }
public CIMOperatingSystem getOperatingSystem() {
return operatingSystem;
@@ -228,9 +229,10 @@ public class VMSpec {
@Override
public String toString() {
- return "[name= " + name + ", operatingSystem=" + operatingSystem + ", processorCount=" + processorCount + ", memoryInGig="
- + memoryInGig + ", network=" + network.getName() + ", bootDeviceName=" + bootDeviceName + ", bootDriveSize=" + bootDriveSize
- + ", dataDriveDeviceNameToSizeInGig=" + dataDriveDeviceNameToSizeInGig + "]";
+ return "[name= " + name + ", operatingSystem=" + operatingSystem + ", processorCount=" + processorCount
+ + ", memoryInGig=" + memoryInGig + ", networkTierName=" + networkTierName + ", bootDeviceName="
+ + bootDeviceName + ", bootDriveSize=" + bootDriveSize + ", dataDriveDeviceNameToSizeInGig="
+ + dataDriveDeviceNameToSizeInGig + "]";
}
}
\ No newline at end of file
diff --git a/providers/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/features/VMAsyncClient.java b/providers/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/features/VMAsyncClient.java
index a1175f4420..02d71715bb 100644
--- a/providers/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/features/VMAsyncClient.java
+++ b/providers/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/features/VMAsyncClient.java
@@ -19,7 +19,6 @@
package org.jclouds.savvis.vpdc.features;
import java.net.URI;
-import java.util.List;
import java.util.Set;
import javax.annotation.Nullable;
@@ -40,6 +39,7 @@ import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
import org.jclouds.savvis.vpdc.binders.BindCaptureVAppTemplateToXmlPayload;
import org.jclouds.savvis.vpdc.binders.BindCloneVMToXmlPayload;
import org.jclouds.savvis.vpdc.binders.BindVMSpecToXmlPayload;
+import org.jclouds.savvis.vpdc.binders.BindVMSpecsToXmlPayload;
import org.jclouds.savvis.vpdc.domain.Task;
import org.jclouds.savvis.vpdc.domain.VMSpec;
import org.jclouds.savvis.vpdc.filters.SetVCloudTokenCookie;
@@ -68,8 +68,7 @@ public interface VMAsyncClient {
@MapBinder(BindVMSpecToXmlPayload.class)
ListenableFuture addVMIntoVDC(
@PathParam("billingSiteId") @Nullable @ParamParser(DefaultOrgIfNull.class) String billingSiteId,
- @PathParam("vpdcId") String vpdcId, @PayloadParam("networkName") String networkTierName,
- @PayloadParam("name") String vAppName, VMSpec spec);
+ @PathParam("vpdcId") String vpdcId, VMSpec spec);
/**
* @see VMClient#addVMIntoVDC
@@ -78,8 +77,18 @@ public interface VMAsyncClient {
@XMLResponseParser(TaskHandler.class)
@Path("vApp/")
@MapBinder(BindVMSpecToXmlPayload.class)
- ListenableFuture addVMIntoVDC(@EndpointParam URI vpdc, @PayloadParam("networkName") String networkTierName,
- @PayloadParam("name") String vAppName, VMSpec spec);
+ ListenableFuture addVMIntoVDC(@EndpointParam URI vpdc, VMSpec spec);
+
+ /**
+ * @see VMClient#addMultipleVMsIntoVDC
+ */
+ @GET
+ @XMLResponseParser(TasksListHandler.class)
+ @Path("v{jclouds.api-version}/org/{billingSiteId}/vdc/{vpdcId}/vApp/")
+ @MapBinder(BindVMSpecsToXmlPayload.class)
+ ListenableFuture> addMultipleVMsIntoVDC(
+ @PathParam("billingSiteId") @Nullable @ParamParser(DefaultOrgIfNull.class) String billingSiteId,
+ @PathParam("vpdcId") String vpdcId, Iterable vmSpecs);
/**
* @see VMClient#addMultipleVMsIntoVDC
@@ -87,8 +96,8 @@ public interface VMAsyncClient {
@GET
@XMLResponseParser(TasksListHandler.class)
@Path("vApp/")
- @MapBinder(BindVMSpecToXmlPayload.class)
- ListenableFuture> addMultipleVMsIntoVDC(@EndpointParam URI vpdc, List vmSpecs);
+ @MapBinder(BindVMSpecsToXmlPayload.class)
+ ListenableFuture> addMultipleVMsIntoVDC(@EndpointParam URI vpdc, Iterable vmSpecs);
/**
* @see VMClient#captureVApp
@@ -97,9 +106,10 @@ public interface VMAsyncClient {
@XMLResponseParser(TaskHandler.class)
@Path("v{jclouds.api-version}/org/{billingSiteId}/vdc/{vpdcId}/action/captureVApp")
@MapBinder(BindCaptureVAppTemplateToXmlPayload.class)
- ListenableFuture captureVApp(@PathParam("billingSiteId") @Nullable @ParamParser(DefaultOrgIfNull.class) String billingSiteId,
- @PathParam("vpdcId") String vpdcId, URI vAppUri);
-
+ ListenableFuture captureVApp(
+ @PathParam("billingSiteId") @Nullable @ParamParser(DefaultOrgIfNull.class) String billingSiteId,
+ @PathParam("vpdcId") String vpdcId, URI vAppUri);
+
/**
* @see VMClient#cloneVApp
*/
@@ -107,9 +117,9 @@ public interface VMAsyncClient {
@XMLResponseParser(TaskHandler.class)
@Path("action/cloneVApp")
@MapBinder(BindCloneVMToXmlPayload.class)
- ListenableFuture cloneVApp(@EndpointParam URI vAppUri, @PayloadParam("name") String newVAppName,
- @PayloadParam("networkTierName") String networkTierName);
-
+ ListenableFuture cloneVApp(@EndpointParam URI vAppUri, @PayloadParam("name") String newVAppName,
+ @PayloadParam("networkTierName") String networkTierName);
+
/**
* @see VMClient#removeVMFromVDC
*/
@@ -128,7 +138,7 @@ public interface VMAsyncClient {
@XMLResponseParser(TaskHandler.class)
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
ListenableFuture removeVM(@EndpointParam URI vm);
-
+
/**
* @see VMClient#powerOffVM
*/
@@ -137,7 +147,7 @@ public interface VMAsyncClient {
@Path("action/powerOff")
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
ListenableFuture powerOffVM(@EndpointParam URI vm);
-
+
/**
* @see VMClient#powerOnVM
*/
diff --git a/providers/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/features/VMClient.java b/providers/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/features/VMClient.java
index 086d4120b7..c94038d527 100644
--- a/providers/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/features/VMClient.java
+++ b/providers/savvis-symphonyvpdc/src/main/java/org/jclouds/savvis/vpdc/features/VMClient.java
@@ -19,7 +19,6 @@
package org.jclouds.savvis.vpdc.features;
import java.net.URI;
-import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@@ -44,14 +43,12 @@ public interface VMClient {
* billing site Id, or null for default
* @param vpdcId
* vpdc Id
- * @param networkTierName
- * network tier name
* @param spec
* how to
*
* @return VM in progress
*/
- Task addVMIntoVDC(String billingSiteId, String vpdcId, String networkTierName, String name, VMSpec spec);
+ Task addVMIntoVDC(String billingSiteId, String vpdcId, VMSpec spec);
/**
*
@@ -59,43 +56,56 @@ public interface VMClient {
* href of the vpdc
* @see #addVMIntoVDC
*/
- Task addVMIntoVDC(URI vpdc, String networkTierName, String name, VMSpec spec);
-
+ Task addVMIntoVDC(URI vpdc, VMSpec spec);
+
/**
+ * Add/Deploy new VMs into VDC
+ *
+ * @param billingSiteId
+ * billing site Id, or null for default
+ * @param vpdcId
+ * vpdc Id
+ * @param vmSpecs
+ * vm configurations
+ * @return VM's in progress
+ */
+ Set addMultipleVMsIntoVDC(String billingSiteId, String vpdcId, Iterable vmSpecs);
+
+ /**
+ * Add/Deploy new VMs into VDC
*
* @param vpdc
* href of the vpdc
* @param vmSpecs
- * vm configurations
+ * vm configurations
* @return VM's in progress
*/
- Set addMultipleVMsIntoVDC(URI vpdc, List vmSpecs);
+ Set addMultipleVMsIntoVDC(URI vpdc, Iterable vmSpecs);
/**
*
- * @param billingSiteId
+ * @param billingSiteId
* billing site Id, or null for default
* @param vpdcId
* vpdc Id
* @param vAppUri
- * href of the vApp
- * @return
- * Task with vAppTemplate href
+ * href of the vApp
+ * @return Task with vAppTemplate href
*/
Task captureVApp(String billingSiteId, String vpdcId, URI vAppUri);
-
+
/**
*
* @param vAppUri
- * href of the vApp
+ * href of the vApp
* @param newVAppName
- * name for the new vApp
+ * name for the new vApp
* @param networkTierName
- * network tier name for vApp
+ * network tier name for vApp
* @return
*/
Task cloneVApp(URI vAppUri, String newVAppName, String networkTierName);
-
+
/**
* Remove a VM
*
@@ -126,21 +136,21 @@ public interface VMClient {
* @see #removeVMFromVDC
*/
Task removeVM(URI vm);
-
+
/**
* Power off a VM
*
* @param vm
- * href of the vm
+ * href of the vm
* @return
*/
Task powerOffVM(URI vm);
-
+
/**
* Power on a VM
*
* @param vm
- * href of the vm
+ * href of the vm
* @return
*/
Task powerOnVM(URI vm);
diff --git a/providers/savvis-symphonyvpdc/src/test/java/org/jclouds/savvis/vpdc/binders/BindVMSpecToXmlPayloadTest.java b/providers/savvis-symphonyvpdc/src/test/java/org/jclouds/savvis/vpdc/binders/BindVMSpecsToXmlPayloadTest.java
similarity index 70%
rename from providers/savvis-symphonyvpdc/src/test/java/org/jclouds/savvis/vpdc/binders/BindVMSpecToXmlPayloadTest.java
rename to providers/savvis-symphonyvpdc/src/test/java/org/jclouds/savvis/vpdc/binders/BindVMSpecsToXmlPayloadTest.java
index ad60d2bd90..6d3c49eeb9 100644
--- a/providers/savvis-symphonyvpdc/src/test/java/org/jclouds/savvis/vpdc/binders/BindVMSpecToXmlPayloadTest.java
+++ b/providers/savvis-symphonyvpdc/src/test/java/org/jclouds/savvis/vpdc/binders/BindVMSpecsToXmlPayloadTest.java
@@ -21,36 +21,34 @@ package org.jclouds.savvis.vpdc.binders;
import static org.testng.Assert.assertEquals;
import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
import java.util.Set;
import org.jclouds.cim.OSType;
import org.jclouds.compute.domain.CIMOperatingSystem;
-import org.jclouds.savvis.vpdc.domain.Network;
import org.jclouds.savvis.vpdc.domain.VMSpec;
import org.jclouds.util.Strings2;
import org.testng.annotations.Test;
import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.gson.Gson;
import com.google.inject.TypeLiteral;
/**
- * Tests behavior of {@code BindVMSpecToXmlPayload}
+ * Tests behavior of {@code BindVMSpecsToXmlPayload}
*
* @author Adrian Cole
*/
@Test(groups = "unit")
-public class BindVMSpecToXmlPayloadTest {
+public class BindVMSpecsToXmlPayloadTest {
public void test() throws IOException {
- CIMOperatingSystem os = Iterables.find(new Gson().> fromJson(
- Strings2.toStringAndClose(getClass().getResourceAsStream(
- "/savvis-symphonyvpdc/predefined_operatingsystems.json")),
- new TypeLiteral>() {
- }.getType()), new Predicate() {
+ CIMOperatingSystem os = Iterables.find(new Gson().> fromJson(Strings2
+ .toStringAndClose(getClass()
+ .getResourceAsStream("/savvis-symphonyvpdc/predefined_operatingsystems.json")),
+ new TypeLiteral>() {
+ }.getType()), new Predicate() {
@Override
public boolean apply(CIMOperatingSystem arg0) {
@@ -59,14 +57,10 @@ public class BindVMSpecToXmlPayloadTest {
});
- Network network = Network.builder().name("VM Tier01").build();
-
String expected = Strings2.toStringAndClose(getClass().getResourceAsStream("/vm-multiple-default.xml"));
- VMSpec spec = VMSpec.builder().name("Test VM").operatingSystem(os).network(network).build();
- List specs = new ArrayList();
- specs.add(spec);
-
- assertEquals(new BindVMSpecToXmlPayload().generateXml(specs), expected);
+ VMSpec spec = VMSpec.builder().name("Test VM").operatingSystem(os).networkTierName("VM Tier01").build();
+
+ assertEquals(new BindVMSpecsToXmlPayload().generateXml(ImmutableSet.of(spec)), expected);
}
}
diff --git a/providers/savvis-symphonyvpdc/src/test/java/org/jclouds/savvis/vpdc/features/BrowsingAsyncClientTest.java b/providers/savvis-symphonyvpdc/src/test/java/org/jclouds/savvis/vpdc/features/BrowsingAsyncClientTest.java
index 4fd1ffa750..a18477b625 100644
--- a/providers/savvis-symphonyvpdc/src/test/java/org/jclouds/savvis/vpdc/features/BrowsingAsyncClientTest.java
+++ b/providers/savvis-symphonyvpdc/src/test/java/org/jclouds/savvis/vpdc/features/BrowsingAsyncClientTest.java
@@ -49,7 +49,7 @@ public class BrowsingAsyncClientTest extends BaseVPDCAsyncClientTest {
- public void testAddFirewallRule() throws NoSuchMethodException, IOException{
- Method method = FirewallAsyncClient.class.getMethod("addFirewallRule", String.class, String.class, FirewallRule.class);
- HttpRequest request = processor.createRequest(method, "11", "22", FirewallRule.builder().firewallType("SERVER_TIER_FIREWALL").isEnabled(true).source("internet")
- .destination("VM Tier01").port("22").protocol("Tcp").policy("allow").description("Server Tier Firewall Rule").isLogged(false).build());
+ public void testAddFirewallRule() throws NoSuchMethodException, IOException {
+ Method method = FirewallAsyncClient.class.getMethod("addFirewallRule", String.class, String.class,
+ FirewallRule.class);
+ HttpRequest request = processor.createRequest(method, "11", "22", FirewallRule.builder().firewallType(
+ "SERVER_TIER_FIREWALL").isEnabled(true).source("internet").destination("VM Tier01").port("22").protocol(
+ "Tcp").policy("allow").description("Server Tier Firewall Rule").isLogged(false).build());
- assertRequestLineEquals(request, "PUT https://api.symphonyvpdc.savvis.net/rest/api/v0.8/org/11/vdc/22/FirewallService/ HTTP/1.1");
- assertNonPayloadHeadersEqual(request, "");
- assertPayloadEquals(request, Strings2.toStringAndClose(getClass().getResourceAsStream("/firewallService-default.xml")),
- "application/xml", false);
+ assertRequestLineEquals(request,
+ "PUT https://api.symphonyvpdc.savvis.net/vpdc/v1.0/org/11/vdc/22/FirewallService/ HTTP/1.1");
+ assertNonPayloadHeadersEqual(request, "");
+ assertPayloadEquals(request, Strings2.toStringAndClose(getClass().getResourceAsStream(
+ "/firewallService-default.xml")), "application/xml", false);
- assertResponseParserClassEquals(method, request, ParseSax.class);
- assertSaxResponseParserClassEquals(method, TaskHandler.class);
+ assertResponseParserClassEquals(method, request, ParseSax.class);
+ assertSaxResponseParserClassEquals(method, TaskHandler.class);
- checkFilters(request);
- }
-
- public void testDeleteFirewallRule() throws NoSuchMethodException, IOException{
- Method method = FirewallAsyncClient.class.getMethod("deleteFirewallRule", String.class, String.class, FirewallRule.class);
- HttpRequest request = processor.createRequest(method, "11", "22", FirewallRule.builder().firewallType("SERVER_TIER_FIREWALL").isEnabled(true).source("internet")
- .destination("VM Tier01").port("22").protocol("Tcp").policy("allow").description("Server Tier Firewall Rule").isLogged(false).build());
+ checkFilters(request);
+ }
- assertRequestLineEquals(request, "DELETE https://api.symphonyvpdc.savvis.net/rest/api/v0.8/org/11/vdc/22/FirewallService/ HTTP/1.1");
- assertNonPayloadHeadersEqual(request, "");
- assertPayloadEquals(request, Strings2.toStringAndClose(getClass().getResourceAsStream("/firewallService-default.xml")),
- "application/xml", false);
+ public void testDeleteFirewallRule() throws NoSuchMethodException, IOException {
+ Method method = FirewallAsyncClient.class.getMethod("deleteFirewallRule", String.class, String.class,
+ FirewallRule.class);
+ HttpRequest request = processor.createRequest(method, "11", "22", FirewallRule.builder().firewallType(
+ "SERVER_TIER_FIREWALL").isEnabled(true).source("internet").destination("VM Tier01").port("22").protocol(
+ "Tcp").policy("allow").description("Server Tier Firewall Rule").isLogged(false).build());
- assertResponseParserClassEquals(method, request, ParseSax.class);
- assertSaxResponseParserClassEquals(method, TaskHandler.class);
- assertExceptionParserClassEquals(method, ReturnNullOnNotFoundOr404.class);
+ assertRequestLineEquals(request,
+ "DELETE https://api.symphonyvpdc.savvis.net/vpdc/v1.0/org/11/vdc/22/FirewallService/ HTTP/1.1");
+ assertNonPayloadHeadersEqual(request, "");
+ assertPayloadEquals(request, Strings2.toStringAndClose(getClass().getResourceAsStream(
+ "/firewallService-default.xml")), "application/xml", false);
- checkFilters(request);
- }
+ assertResponseParserClassEquals(method, request, ParseSax.class);
+ assertSaxResponseParserClassEquals(method, TaskHandler.class);
+ assertExceptionParserClassEquals(method, ReturnNullOnNotFoundOr404.class);
+
+ checkFilters(request);
+ }
@Override
protected TypeLiteral> createTypeLiteral() {
diff --git a/providers/savvis-symphonyvpdc/src/test/java/org/jclouds/savvis/vpdc/features/ServiceManagementAsyncClientTest.java b/providers/savvis-symphonyvpdc/src/test/java/org/jclouds/savvis/vpdc/features/ServiceManagementAsyncClientTest.java
index b9bbe955e3..f4316579bb 100644
--- a/providers/savvis-symphonyvpdc/src/test/java/org/jclouds/savvis/vpdc/features/ServiceManagementAsyncClientTest.java
+++ b/providers/savvis-symphonyvpdc/src/test/java/org/jclouds/savvis/vpdc/features/ServiceManagementAsyncClientTest.java
@@ -51,7 +51,7 @@ public class ServiceManagementAsyncClientTest extends BaseVPDCAsyncClientTest {
public void testAddVMIntoVDCURI() throws SecurityException, NoSuchMethodException, IOException {
- Method method = VMAsyncClient.class
- .getMethod("addVMIntoVDC", URI.class, String.class, String.class, VMSpec.class);
+ Method method = VMAsyncClient.class.getMethod("addVMIntoVDC", URI.class, VMSpec.class);
CIMOperatingSystem os = Iterables.find(injector.getInstance(Key.get(new TypeLiteral>() {
})), new Predicate() {
@@ -63,8 +64,8 @@ public class VMAsyncClientTest extends BaseVPDCAsyncClientTest {
});
HttpRequest request = processor.createRequest(method, URI
- .create("https://api.symphonyvpdc.savvis.net/rest/api/v0.8/org/11/vdc/22"), "VM Tier01", "DemoHost-1",
- VMSpec.builder().operatingSystem(os).build());
+ .create("https://api.symphonyvpdc.savvis.net/rest/api/v0.8/org/11/vdc/22"), VMSpec.builder().name(
+ "DemoHost-1").networkTierName("VM Tier01").operatingSystem(os).build());
assertRequestLineEquals(request,
"GET https://api.symphonyvpdc.savvis.net/rest/api/v0.8/org/11/vdc/22/vApp/ HTTP/1.1");
@@ -80,8 +81,7 @@ public class VMAsyncClientTest extends BaseVPDCAsyncClientTest {
}
public void testAddVMIntoVDC() throws SecurityException, NoSuchMethodException, IOException {
- Method method = VMAsyncClient.class.getMethod("addVMIntoVDC", String.class, String.class, String.class,
- String.class, VMSpec.class);
+ Method method = VMAsyncClient.class.getMethod("addVMIntoVDC", String.class, String.class, VMSpec.class);
CIMOperatingSystem os = Iterables.find(injector.getInstance(Key.get(new TypeLiteral>() {
})), new Predicate() {
@@ -93,11 +93,10 @@ public class VMAsyncClientTest extends BaseVPDCAsyncClientTest {
});
- HttpRequest request = processor.createRequest(method, "11", "22", "VM Tier01", "DemoHost-1", VMSpec.builder()
- .operatingSystem(os).build());
+ HttpRequest request = processor.createRequest(method, "11", "22", VMSpec.builder().operatingSystem(os).name(
+ "DemoHost-1").networkTierName("VM Tier01").build());
- assertRequestLineEquals(request,
- "GET https://api.symphonyvpdc.savvis.net/rest/api/v0.8/org/11/vdc/22/vApp/ HTTP/1.1");
+ assertRequestLineEquals(request, "GET https://api.symphonyvpdc.savvis.net/vpdc/v1.0/org/11/vdc/22/vApp/ HTTP/1.1");
assertNonPayloadHeadersEqual(request, "");
assertPayloadEquals(request, Strings2.toStringAndClose(getClass().getResourceAsStream("/vm-default.xml")),
"application/xml", false);
@@ -109,12 +108,71 @@ public class VMAsyncClientTest extends BaseVPDCAsyncClientTest {
checkFilters(request);
}
+ public void testAddMultipleVMsIntoVDCURI() throws SecurityException, NoSuchMethodException, IOException {
+ Method method = VMAsyncClient.class.getMethod("addMultipleVMsIntoVDC", URI.class, Iterable.class);
+
+ CIMOperatingSystem os = Iterables.find(injector.getInstance(Key.get(new TypeLiteral>() {
+ })), new Predicate() {
+
+ @Override
+ public boolean apply(CIMOperatingSystem arg0) {
+ return arg0.getOsType() == OSType.RHEL_64;
+ }
+
+ });
+
+ HttpRequest request = processor.createRequest(method, URI
+ .create("https://api.symphonyvpdc.savvis.net/rest/api/v0.8/org/11/vdc/22"), ImmutableSet.of(VMSpec
+ .builder().name("Test VM").networkTierName("VM Tier01").operatingSystem(os).build()));
+
+ assertRequestLineEquals(request,
+ "GET https://api.symphonyvpdc.savvis.net/rest/api/v0.8/org/11/vdc/22/vApp/ HTTP/1.1");
+ assertNonPayloadHeadersEqual(request, "");
+ assertPayloadEquals(request, Strings2.toStringAndClose(getClass().getResourceAsStream("/vm-multiple-default.xml")),
+ "application/xml", false);
+
+ assertResponseParserClassEquals(method, request, ParseSax.class);
+ assertSaxResponseParserClassEquals(method, TasksListHandler.class);
+ assertExceptionParserClassEquals(method, MapHttp4xxCodesToExceptions.class);
+
+ checkFilters(request);
+ }
+
+ public void testAddMultipleVMsIntoVDC() throws SecurityException, NoSuchMethodException, IOException {
+ Method method = VMAsyncClient.class
+ .getMethod("addMultipleVMsIntoVDC", String.class, String.class, Iterable.class);
+
+ CIMOperatingSystem os = Iterables.find(injector.getInstance(Key.get(new TypeLiteral>() {
+ })), new Predicate() {
+
+ @Override
+ public boolean apply(CIMOperatingSystem arg0) {
+ return arg0.getOsType() == OSType.RHEL_64;
+ }
+
+ });
+
+ HttpRequest request = processor.createRequest(method, "11", "22", ImmutableSet.of(VMSpec.builder()
+ .operatingSystem(os).name("Test VM").networkTierName("VM Tier01").build()));
+
+ assertRequestLineEquals(request, "GET https://api.symphonyvpdc.savvis.net/vpdc/v1.0/org/11/vdc/22/vApp/ HTTP/1.1");
+ assertNonPayloadHeadersEqual(request, "");
+ assertPayloadEquals(request, Strings2.toStringAndClose(getClass().getResourceAsStream("/vm-multiple-default.xml")),
+ "application/xml", false);
+
+ assertResponseParserClassEquals(method, request, ParseSax.class);
+ assertSaxResponseParserClassEquals(method, TasksListHandler.class);
+ assertExceptionParserClassEquals(method, MapHttp4xxCodesToExceptions.class);
+
+ checkFilters(request);
+ }
+
public void testRemoveVMFromVDC() throws SecurityException, NoSuchMethodException, IOException {
Method method = VMAsyncClient.class.getMethod("removeVMFromVDC", String.class, String.class, String.class);
HttpRequest request = processor.createRequest(method, "11", "22", "33");
assertRequestLineEquals(request,
- "DELETE https://api.symphonyvpdc.savvis.net/rest/api/v0.8/org/11/vdc/22/vApp/33 HTTP/1.1");
+ "DELETE https://api.symphonyvpdc.savvis.net/vpdc/v1.0/org/11/vdc/22/vApp/33 HTTP/1.1");
assertNonPayloadHeadersEqual(request, "");
assertPayloadEquals(request, null, null, false);
@@ -141,7 +199,7 @@ public class VMAsyncClientTest extends BaseVPDCAsyncClientTest {
checkFilters(request);
}
-
+
public void testPowerOffVM() throws SecurityException, NoSuchMethodException, IOException {
Method method = VMAsyncClient.class.getMethod("powerOffVM", URI.class);
HttpRequest request = processor.createRequest(method, URI
@@ -158,23 +216,23 @@ public class VMAsyncClientTest extends BaseVPDCAsyncClientTest {
checkFilters(request);
}
-
+
public void testPowerOnVM() throws SecurityException, NoSuchMethodException, IOException {
- Method method = VMAsyncClient.class.getMethod("powerOnVM", URI.class);
- HttpRequest request = processor.createRequest(method, URI
- .create("https://api.symphonyvpdc.savvis.net/rest/api/v0.8/org/11/vdc/22/vApp/33"));
+ Method method = VMAsyncClient.class.getMethod("powerOnVM", URI.class);
+ HttpRequest request = processor.createRequest(method, URI
+ .create("https://api.symphonyvpdc.savvis.net/rest/api/v0.8/org/11/vdc/22/vApp/33"));
- assertRequestLineEquals(request,
- "POST https://api.symphonyvpdc.savvis.net/rest/api/v0.8/org/11/vdc/22/vApp/33/action/powerOn HTTP/1.1");
- assertNonPayloadHeadersEqual(request, "");
- assertPayloadEquals(request, null, null, false);
+ assertRequestLineEquals(request,
+ "POST https://api.symphonyvpdc.savvis.net/rest/api/v0.8/org/11/vdc/22/vApp/33/action/powerOn HTTP/1.1");
+ assertNonPayloadHeadersEqual(request, "");
+ assertPayloadEquals(request, null, null, false);
- assertResponseParserClassEquals(method, request, ParseSax.class);
- assertSaxResponseParserClassEquals(method, TaskHandler.class);
- assertExceptionParserClassEquals(method, ReturnNullOnNotFoundOr404.class);
+ assertResponseParserClassEquals(method, request, ParseSax.class);
+ assertSaxResponseParserClassEquals(method, TaskHandler.class);
+ assertExceptionParserClassEquals(method, ReturnNullOnNotFoundOr404.class);
- checkFilters(request);
- }
+ checkFilters(request);
+ }
@Override
protected TypeLiteral> createTypeLiteral() {
diff --git a/providers/savvis-symphonyvpdc/src/test/java/org/jclouds/savvis/vpdc/features/VMClientLiveTest.java b/providers/savvis-symphonyvpdc/src/test/java/org/jclouds/savvis/vpdc/features/VMClientLiveTest.java
index 78a5747e06..1a6bc1eb18 100644
--- a/providers/savvis-symphonyvpdc/src/test/java/org/jclouds/savvis/vpdc/features/VMClientLiveTest.java
+++ b/providers/savvis-symphonyvpdc/src/test/java/org/jclouds/savvis/vpdc/features/VMClientLiveTest.java
@@ -22,8 +22,6 @@ import static com.google.common.base.Preconditions.checkNotNull;
import static org.testng.Assert.assertEquals;
import java.net.URI;
-import java.util.ArrayList;
-import java.util.List;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@@ -39,8 +37,8 @@ import org.jclouds.savvis.vpdc.domain.Resource;
import org.jclouds.savvis.vpdc.domain.Task;
import org.jclouds.savvis.vpdc.domain.VDC;
import org.jclouds.savvis.vpdc.domain.VM;
-import org.jclouds.savvis.vpdc.domain.VM.Status;
import org.jclouds.savvis.vpdc.domain.VMSpec;
+import org.jclouds.savvis.vpdc.domain.VM.Status;
import org.jclouds.savvis.vpdc.options.GetVMOptions;
import org.jclouds.savvis.vpdc.reference.VCloudMediaType;
import org.jclouds.ssh.SshClient;
@@ -50,7 +48,9 @@ import org.testng.annotations.BeforeGroups;
import org.testng.annotations.Test;
import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
+import com.google.common.collect.ImmutableSet.Builder;
import com.google.common.net.HostSpecifier;
@Test(groups = "live")
@@ -59,7 +59,7 @@ public class VMClientLiveTest extends BaseVPDCClientLiveTest {
private VMClient client;
private VM vm;
private RetryablePredicate socketTester;
-
+
private String username = checkNotNull(System.getProperty("test." + provider + ".loginUser"), "test." + provider
+ ".loginUser");
private String password = checkNotNull(System.getProperty("test." + provider + ".loginPassword"), "test." + provider
@@ -118,8 +118,8 @@ public class VMClientLiveTest extends BaseVPDCClientLiveTest {
// TODO: determine the sizes available in the VDC, for example there's
// a minimum size of boot disk, and also a preset combination of cpu count vs ram
- Task task = client.addVMIntoVDC(billingSiteId, vpdcId, networkTierName, name, VMSpec.builder()
- .operatingSystem(os).memoryInGig(2).addDataDrive("/data01", 25).build());
+ Task task = client.addVMIntoVDC(billingSiteId, vpdcId, VMSpec.builder().name(name).networkTierName(
+ networkTierName).operatingSystem(os).memoryInGig(2).addDataDrive("/data01", 25).build());
// make sure there's no error
assert task.getId() != null && task.getError() == null : task;
@@ -139,9 +139,9 @@ public class VMClientLiveTest extends BaseVPDCClientLiveTest {
// the jclouds-wire.log
@Override
public boolean apply(Resource arg0) {
- String description = restContext.getApi().getBrowsingClient().getVDCInOrg(billingSiteId,
- arg0.getId()).getDescription();
- return description.indexOf(email) != -1;
+ String description = restContext.getApi().getBrowsingClient().getVDCInOrg(billingSiteId,
+ arg0.getId()).getDescription();
+ return description.indexOf(email) != -1;
}
}).getId();
@@ -149,8 +149,9 @@ public class VMClientLiveTest extends BaseVPDCClientLiveTest {
String networkTierName = Iterables.get(
restContext.getApi().getBrowsingClient().getVDCInOrg(billingSiteId, vpdcId).getAvailableNetworks(), 0)
.getId();
- Network networkTier = restContext.getApi().getBrowsingClient().getNetworkInVDC(billingSiteId, vpdcId, networkTierName);
-
+ Network networkTier = restContext.getApi().getBrowsingClient().getNetworkInVDC(billingSiteId, vpdcId,
+ networkTierName);
+
String name = prefix;
// delete any old VM
@@ -164,32 +165,34 @@ public class VMClientLiveTest extends BaseVPDCClientLiveTest {
}
});
-
- // TODO: Savvis returns network names with a - instead of space on getNetworkInVDC call,
- // fix this once savvis api starts returning correctly
- System.out.printf("vpdcId %s, vpdcName %s, networkName %s, name %s, os %s%n", vpdcId, vpdc.getName(), networkTier.getName().replace("-", " "), name, os);
- List vmSpecs = new ArrayList();
+ // TODO: Savvis returns network names with a - instead of space on getNetworkInVDC call,
+ // fix this once savvis api starts returning correctly
+ System.out.printf("vpdcId %s, vpdcName %s, networkName %s, name %s, os %s%n", vpdcId, vpdc.getName(), networkTier
+ .getName().replace("-", " "), name, os);
+
+ Builder vmSpecs = ImmutableSet. builder();
int noOfVms = 2;
for (int i = 0; i < noOfVms; i++) {
- // TODO: determine the sizes available in the VDC, for example there's
- // a minimum size of boot disk, and also a preset combination of cpu count vs ram
- VMSpec vmSpec = VMSpec.builder().name(name + i).operatingSystem(os).memoryInGig(2).network(networkTier).addDataDrive("/data01", 25).build();
- vmSpecs.add(vmSpec);
+ // TODO: determine the sizes available in the VDC, for example there's
+ // a minimum size of boot disk, and also a preset combination of cpu count vs ram
+ VMSpec vmSpec = VMSpec.builder().name(name + i).operatingSystem(os).memoryInGig(2).networkTierName(
+ networkTierName).addDataDrive("/data01", 25).build();
+ vmSpecs.add(vmSpec);
}
-
- Set tasks = client.addMultipleVMsIntoVDC(vpdc.getHref(), vmSpecs);
-
+
+ Set tasks = client.addMultipleVMsIntoVDC(vpdc.getHref(), vmSpecs.build());
+
for (Task task : tasks) {
- // make sure there's no error
- assert task.getId() != null && task.getError() == null : task;
-
- assert this.taskTester.apply(task.getId());
+ // make sure there's no error
+ assert task.getId() != null && task.getError() == null : task;
+
+ assert this.taskTester.apply(task.getId());
}
}
-
+
public void testCaptureVAppTemplate() throws Exception {
- billingSiteId = restContext.getApi().getBrowsingClient().getOrg(null).getId();// default
+ billingSiteId = restContext.getApi().getBrowsingClient().getOrg(null).getId();// default
vpdcId = Iterables.find(restContext.getApi().getBrowsingClient().getOrg(billingSiteId).getVDCs(),
new Predicate() {
@@ -198,36 +201,36 @@ public class VMClientLiveTest extends BaseVPDCClientLiveTest {
// the jclouds-wire.log
@Override
public boolean apply(Resource arg0) {
- String description = restContext.getApi().getBrowsingClient().getVDCInOrg(billingSiteId,
- arg0.getId()).getDescription();
- return description.indexOf(email) != -1;
+ String description = restContext.getApi().getBrowsingClient().getVDCInOrg(billingSiteId,
+ arg0.getId()).getDescription();
+ return description.indexOf(email) != -1;
}
}).getId();
- VDC vpdc = restContext.getApi().getBrowsingClient().getVDCInOrg(billingSiteId, vpdcId);
-
- for (Resource vApp : Iterables.filter(vpdc.getResourceEntities(), new Predicate() {
+ VDC vpdc = restContext.getApi().getBrowsingClient().getVDCInOrg(billingSiteId, vpdcId);
- @Override
- public boolean apply(Resource arg0) {
- return VCloudMediaType.VAPP_XML.equals(arg0.getType());
- }
+ for (Resource vApp : Iterables.filter(vpdc.getResourceEntities(), new Predicate() {
- })) {
-
- System.out.printf("Capturing VAppTemplate for vApp - %s%n", vApp.getName());
- Task task = client.captureVApp(billingSiteId, vpdcId, vApp.getHref());
-
- // make sure there's no error
- assert task.getId() != null && task.getError() == null : task;
+ @Override
+ public boolean apply(Resource arg0) {
+ return VCloudMediaType.VAPP_XML.equals(arg0.getType());
+ }
- assert this.taskTester.apply(task.getId());
- }
+ })) {
+
+ System.out.printf("Capturing VAppTemplate for vApp - %s%n", vApp.getName());
+ Task task = client.captureVApp(billingSiteId, vpdcId, vApp.getHref());
+
+ // make sure there's no error
+ assert task.getId() != null && task.getError() == null : task;
+
+ assert this.taskTester.apply(task.getId());
+ }
}
-
+
public void testCloneVApp() throws Exception {
- billingSiteId = restContext.getApi().getBrowsingClient().getOrg(null).getId();// default
+ billingSiteId = restContext.getApi().getBrowsingClient().getOrg(null).getId();// default
vpdcId = Iterables.find(restContext.getApi().getBrowsingClient().getOrg(billingSiteId).getVDCs(),
new Predicate() {
@@ -236,37 +239,37 @@ public class VMClientLiveTest extends BaseVPDCClientLiveTest {
// the jclouds-wire.log
@Override
public boolean apply(Resource arg0) {
- String description = restContext.getApi().getBrowsingClient().getVDCInOrg(billingSiteId,
- arg0.getId()).getDescription();
- return description.indexOf(email) != -1;
+ String description = restContext.getApi().getBrowsingClient().getVDCInOrg(billingSiteId,
+ arg0.getId()).getDescription();
+ return description.indexOf(email) != -1;
}
}).getId();
- VDC vpdc = restContext.getApi().getBrowsingClient().getVDCInOrg(billingSiteId, vpdcId);
-
- String networkTierName = Iterables.get(vpdc.getAvailableNetworks(), 0).getId();
-
- for (Resource vApp : Iterables.filter(vpdc.getResourceEntities(), new Predicate() {
+ VDC vpdc = restContext.getApi().getBrowsingClient().getVDCInOrg(billingSiteId, vpdcId);
- @Override
- public boolean apply(Resource arg0) {
- return VCloudMediaType.VAPP_XML.equals(arg0.getType());
- }
+ String networkTierName = Iterables.get(vpdc.getAvailableNetworks(), 0).getId();
- })) {
-
- System.out.printf("Cloning VApp - %s%n", vApp.getName());
-
- Task task = client.cloneVApp(vApp.getHref(), "clonedvm", networkTierName);
-
- // make sure there's no error
- assert task.getId() != null && task.getError() == null : task;
+ for (Resource vApp : Iterables.filter(vpdc.getResourceEntities(), new Predicate() {
- assert this.taskTester.apply(task.getId());
- }
+ @Override
+ public boolean apply(Resource arg0) {
+ return VCloudMediaType.VAPP_XML.equals(arg0.getType());
+ }
+
+ })) {
+
+ System.out.printf("Cloning VApp - %s%n", vApp.getName());
+
+ Task task = client.cloneVApp(vApp.getHref(), "clonedvm", networkTierName);
+
+ // make sure there's no error
+ assert task.getId() != null && task.getError() == null : task;
+
+ assert this.taskTester.apply(task.getId());
+ }
}
-
+
private void conditionallyCheckSSH() {
String ip = Iterables.get(vm.getNetworkConnectionSections(), 0).getIpAddress();
assert HostSpecifier.isValid(ip);
@@ -296,88 +299,88 @@ public class VMClientLiveTest extends BaseVPDCClientLiveTest {
@Test(enabled = false)
public void testPowerOffVM() throws Exception {
- billingSiteId = restContext.getApi().getBrowsingClient().getOrg(null).getId();// default
- vpdcId = Iterables.find(restContext.getApi().getBrowsingClient().getOrg(billingSiteId).getVDCs(),
- new Predicate() {
-
- // try to find the first VDC owned by the current user
- // check here for what the email property might be, or in
- // the jclouds-wire.log
- @Override
- public boolean apply(Resource arg0) {
- String description = restContext.getApi().getBrowsingClient().getVDCInOrg(billingSiteId,
- arg0.getId()).getDescription();
- return description.indexOf(email) != -1;
- }
-
- }).getId();
+ billingSiteId = restContext.getApi().getBrowsingClient().getOrg(null).getId();// default
+ vpdcId = Iterables.find(restContext.getApi().getBrowsingClient().getOrg(billingSiteId).getVDCs(),
+ new Predicate() {
+
+ // try to find the first VDC owned by the current user
+ // check here for what the email property might be, or in
+ // the jclouds-wire.log
+ @Override
+ public boolean apply(Resource arg0) {
+ String description = restContext.getApi().getBrowsingClient().getVDCInOrg(billingSiteId,
+ arg0.getId()).getDescription();
+ return description.indexOf(email) != -1;
+ }
+
+ }).getId();
VDC vpdc = restContext.getApi().getBrowsingClient().getVDCInOrg(billingSiteId, vpdcId);
URI vmURI = Iterables.find(vpdc.getResourceEntities(), new Predicate() {
- @Override
- public boolean apply(Resource arg0) {
- if(VCloudMediaType.VAPP_XML.equals(arg0.getType())){
- VM response1 = restContext.getApi().getBrowsingClient().getVM(arg0.getHref(), (GetVMOptions[]) null);
- System.out.printf("powering off vm - %s%n", response1.getName());
- if(response1.getStatus().equals(Status.ON)){
- return true;
- }
- }
- return false;
- }
-
- }).getHref();
-
+ @Override
+ public boolean apply(Resource arg0) {
+ if (VCloudMediaType.VAPP_XML.equals(arg0.getType())) {
+ VM response1 = restContext.getApi().getBrowsingClient().getVM(arg0.getHref(), (GetVMOptions[]) null);
+ System.out.printf("powering off vm - %s%n", response1.getName());
+ if (response1.getStatus().equals(Status.ON)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ }).getHref();
+
Task task = client.powerOffVM(vmURI);
-
+
// make sure there's no error
assert task.getId() != null && task.getError() == null : task;
assert this.taskTester.apply(task.getId());
}
-
+
@Test(enabled = false)
public void testPowerOnVM() throws Exception {
- billingSiteId = restContext.getApi().getBrowsingClient().getOrg(null).getId();// default
- vpdcId = Iterables.find(restContext.getApi().getBrowsingClient().getOrg(billingSiteId).getVDCs(),
- new Predicate() {
-
- // try to find the first VDC owned by the current user
- // check here for what the email property might be, or in
- // the jclouds-wire.log
- @Override
- public boolean apply(Resource arg0) {
- String description = restContext.getApi().getBrowsingClient().getVDCInOrg(billingSiteId,
- arg0.getId()).getDescription();
- return description.indexOf(email) != -1;
- }
-
- }).getId();
+ billingSiteId = restContext.getApi().getBrowsingClient().getOrg(null).getId();// default
+ vpdcId = Iterables.find(restContext.getApi().getBrowsingClient().getOrg(billingSiteId).getVDCs(),
+ new Predicate() {
+
+ // try to find the first VDC owned by the current user
+ // check here for what the email property might be, or in
+ // the jclouds-wire.log
+ @Override
+ public boolean apply(Resource arg0) {
+ String description = restContext.getApi().getBrowsingClient().getVDCInOrg(billingSiteId,
+ arg0.getId()).getDescription();
+ return description.indexOf(email) != -1;
+ }
+
+ }).getId();
VDC vpdc = restContext.getApi().getBrowsingClient().getVDCInOrg(billingSiteId, vpdcId);
URI vmURI = Iterables.find(vpdc.getResourceEntities(), new Predicate() {
- @Override
- public boolean apply(Resource arg0) {
- if(VCloudMediaType.VAPP_XML.equals(arg0.getType())){
- VM response1 = restContext.getApi().getBrowsingClient().getVM(arg0.getHref(), (GetVMOptions[]) null);
- System.out.printf("powering on vm - %s%n", response1.getName());
- if(response1.getStatus().equals(Status.OFF)){
- return true;
- }
- }
- return false;
- }
-
- }).getHref();
-
+ @Override
+ public boolean apply(Resource arg0) {
+ if (VCloudMediaType.VAPP_XML.equals(arg0.getType())) {
+ VM response1 = restContext.getApi().getBrowsingClient().getVM(arg0.getHref(), (GetVMOptions[]) null);
+ System.out.printf("powering on vm - %s%n", response1.getName());
+ if (response1.getStatus().equals(Status.OFF)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ }).getHref();
+
Task task = client.powerOnVM(vmURI);
-
+
// make sure there's no error
assert task.getId() != null && task.getError() == null : task;
assert this.taskTester.apply(task.getId());
}
-
+
@AfterGroups(groups = "live")
protected void tearDown() {
if (vm != null) {