Issue 112: added getVApp support for terremark

git-svn-id: http://jclouds.googlecode.com/svn/trunk@2257 3d8758e0-26b5-11de-8745-db77d3ebf521
This commit is contained in:
adrian.f.cole 2009-11-12 01:29:05 +00:00
parent 2a914127ec
commit f8377f3adc
20 changed files with 1888 additions and 145 deletions

View File

@ -46,6 +46,8 @@ import org.jclouds.vcloud.domain.Task;
import org.jclouds.vcloud.domain.TasksList;
import org.jclouds.vcloud.domain.VDC;
import org.jclouds.vcloud.filters.SetVCloudTokenCookie;
import org.jclouds.vcloud.terremark.domain.VApp;
import org.jclouds.vcloud.terremark.xml.TerremarkVAppHandler;
import org.jclouds.vcloud.xml.CatalogHandler;
import org.jclouds.vcloud.xml.TaskHandler;
import org.jclouds.vcloud.xml.TasksListHandler;
@ -148,13 +150,7 @@ public interface VCloudClient {
@GET
@Consumes(VAPP_XML)
// TODO parse
String getVApp(@Endpoint URI vApp);
//
// @GET
// @Endpoint(vDC.class)
// public Set<String> getvDCs();
//
@XMLResponseParser(TerremarkVAppHandler.class)
Future<? extends VApp> getVApp(@Endpoint URI vApp);
}

View File

@ -0,0 +1,59 @@
package org.jclouds.vcloud.domain;
import static com.google.common.base.Preconditions.checkNotNull;
import org.jclouds.vcloud.VCloudClient;
/**
*
* VirtualResource such as disks or CPU
*
* @author Adrian Cole
* @see VCloudClient#getVApp
*
*
*/
public enum ResourceType {
VIRTUAL_CPU,
MEMORY,
SCSI_CONTROLLER,
VIRTUAL_DISK;
public String value() {
switch (this) {
case VIRTUAL_CPU:
return "3";
case MEMORY:
return "4";
case SCSI_CONTROLLER:
return "6";
case VIRTUAL_DISK:
return "17";
default:
throw new IllegalArgumentException("invalid type:" + this);
}
}
public static ResourceType fromValue(String type) {
return fromValue(Integer.parseInt(checkNotNull(type, "type")));
}
public static ResourceType fromValue(int v) {
switch (v) {
case 3:
return VIRTUAL_CPU;
case 4:
return MEMORY;
case 6:
return SCSI_CONTROLLER;
case 17:
return VIRTUAL_DISK;
default:
throw new IllegalArgumentException("invalid type:" + v);
}
}
}

View File

@ -0,0 +1,64 @@
/**
*
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF 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.vcloud.domain;
import static com.google.common.base.Preconditions.checkNotNull;
/**
* @author Adrian Cole
*/
public enum VAppStatus {
CREATING, OFF, ON;
public String value() {
switch (this) {
case CREATING:
return "0";
case OFF:
return "2";
case ON:
return "4";
default:
throw new IllegalArgumentException("invalid status:" + this);
}
}
public static VAppStatus fromValue(String status) {
return fromValue(Integer.parseInt(checkNotNull(status, "status")));
}
public static VAppStatus fromValue(int v) {
switch (v) {
case 0:
return CREATING;
case 2:
return OFF;
case 4:
return ON;
default:
throw new IllegalArgumentException("invalid status:" + v);
}
}
}

View File

@ -0,0 +1,348 @@
/**
*
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF 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.vcloud.terremark.domain;
import static com.google.common.base.Preconditions.checkNotNull;
/**
* @author Adrian Cole
*/
public class ResourceAllocation implements Comparable<ResourceAllocation> {
private final Integer address;
private final Integer addressOnParent;
private final String allocationUnits;
private final String automaticAllocation;
private final String automaticDeallocation;
private final String caption;
private final String consumerVisibility;
private final String description;
private final String elementName;
private final String hostResource;
private final int instanceID;
private final String limit;
private final String mappingBehavior;
private final String otherResourceType;
private final Integer parent;
private final String poolID;
private final String reservation;
private final String resourceSubType;
private final ResourceType resourceType;
private final long virtualQuantity;
private final String virtualQuantityUnits;
private final String weight;
public ResourceAllocation(Integer address, Integer addressOnParent, String allocationUnits,
String automaticAllocation, String automaticDeallocation, String caption,
String consumerVisibility, String description, String elementName, String hostResource,
int instanceID, String limit, String mappingBehavior, String otherResourceType,
Integer parent, String poolID, String reservation, String resourceSubType,
ResourceType resourceType, long virtualQuantity, String virtualQuantityUnits,
String weight) {
this.address = address;
this.addressOnParent = addressOnParent;
this.allocationUnits = allocationUnits;
this.automaticAllocation = automaticAllocation;
this.automaticDeallocation = automaticDeallocation;
this.caption = caption;
this.consumerVisibility = consumerVisibility;
this.description = description;
this.elementName = elementName;
this.hostResource = hostResource;
this.instanceID = checkNotNull(instanceID, "instanceID");
this.limit = limit;
this.mappingBehavior = mappingBehavior;
this.otherResourceType = otherResourceType;
this.parent = parent;
this.poolID = poolID;
this.reservation = reservation;
this.resourceSubType = resourceSubType;
this.resourceType = checkNotNull(resourceType, "resourceType");
this.virtualQuantity = virtualQuantity;
this.virtualQuantityUnits = virtualQuantityUnits;
this.weight = weight;
}
public Integer getAddress() {
return address;
}
public Integer getAddressOnParent() {
return addressOnParent;
}
public String getAllocationUnits() {
return allocationUnits;
}
public String getAutomaticAllocation() {
return automaticAllocation;
}
public String getAutomaticDeallocation() {
return automaticDeallocation;
}
public String getCaption() {
return caption;
}
public String getConsumerVisibility() {
return consumerVisibility;
}
public String getDescription() {
return description;
}
public String getElementName() {
return elementName;
}
public int getInstanceID() {
return instanceID;
}
public String getLimit() {
return limit;
}
public String getMappingBehavior() {
return mappingBehavior;
}
public String getOtherResourceType() {
return otherResourceType;
}
public Integer getParent() {
return parent;
}
public String getPoolID() {
return poolID;
}
public String getReservation() {
return reservation;
}
public String getResourceSubType() {
return resourceSubType;
}
public ResourceType getResourceType() {
return resourceType;
}
public long getVirtualQuantity() {
return virtualQuantity;
}
public String getVirtualQuantityUnits() {
return virtualQuantityUnits;
}
public String getWeight() {
return weight;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((address == null) ? 0 : address.hashCode());
result = prime * result + ((addressOnParent == null) ? 0 : addressOnParent.hashCode());
result = prime * result + ((allocationUnits == null) ? 0 : allocationUnits.hashCode());
result = prime * result
+ ((automaticAllocation == null) ? 0 : automaticAllocation.hashCode());
result = prime * result
+ ((automaticDeallocation == null) ? 0 : automaticDeallocation.hashCode());
result = prime * result + ((caption == null) ? 0 : caption.hashCode());
result = prime * result + ((consumerVisibility == null) ? 0 : consumerVisibility.hashCode());
result = prime * result + ((description == null) ? 0 : description.hashCode());
result = prime * result + ((elementName == null) ? 0 : elementName.hashCode());
result = prime * result + instanceID;
result = prime * result + ((limit == null) ? 0 : limit.hashCode());
result = prime * result + ((mappingBehavior == null) ? 0 : mappingBehavior.hashCode());
result = prime * result + ((otherResourceType == null) ? 0 : otherResourceType.hashCode());
result = prime * result + ((parent == null) ? 0 : parent.hashCode());
result = prime * result + ((poolID == null) ? 0 : poolID.hashCode());
result = prime * result + ((reservation == null) ? 0 : reservation.hashCode());
result = prime * result + ((resourceSubType == null) ? 0 : resourceSubType.hashCode());
result = prime * result + ((resourceType == null) ? 0 : resourceType.hashCode());
result = prime * result + (int) (virtualQuantity ^ (virtualQuantity >>> 32));
result = prime * result
+ ((virtualQuantityUnits == null) ? 0 : virtualQuantityUnits.hashCode());
result = prime * result + ((weight == null) ? 0 : weight.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ResourceAllocation other = (ResourceAllocation) obj;
if (address == null) {
if (other.address != null)
return false;
} else if (!address.equals(other.address))
return false;
if (addressOnParent == null) {
if (other.addressOnParent != null)
return false;
} else if (!addressOnParent.equals(other.addressOnParent))
return false;
if (allocationUnits == null) {
if (other.allocationUnits != null)
return false;
} else if (!allocationUnits.equals(other.allocationUnits))
return false;
if (automaticAllocation == null) {
if (other.automaticAllocation != null)
return false;
} else if (!automaticAllocation.equals(other.automaticAllocation))
return false;
if (automaticDeallocation == null) {
if (other.automaticDeallocation != null)
return false;
} else if (!automaticDeallocation.equals(other.automaticDeallocation))
return false;
if (caption == null) {
if (other.caption != null)
return false;
} else if (!caption.equals(other.caption))
return false;
if (consumerVisibility == null) {
if (other.consumerVisibility != null)
return false;
} else if (!consumerVisibility.equals(other.consumerVisibility))
return false;
if (description == null) {
if (other.description != null)
return false;
} else if (!description.equals(other.description))
return false;
if (elementName == null) {
if (other.elementName != null)
return false;
} else if (!elementName.equals(other.elementName))
return false;
if (instanceID != other.instanceID)
return false;
if (limit == null) {
if (other.limit != null)
return false;
} else if (!limit.equals(other.limit))
return false;
if (mappingBehavior == null) {
if (other.mappingBehavior != null)
return false;
} else if (!mappingBehavior.equals(other.mappingBehavior))
return false;
if (otherResourceType == null) {
if (other.otherResourceType != null)
return false;
} else if (!otherResourceType.equals(other.otherResourceType))
return false;
if (parent == null) {
if (other.parent != null)
return false;
} else if (!parent.equals(other.parent))
return false;
if (poolID == null) {
if (other.poolID != null)
return false;
} else if (!poolID.equals(other.poolID))
return false;
if (reservation == null) {
if (other.reservation != null)
return false;
} else if (!reservation.equals(other.reservation))
return false;
if (resourceSubType == null) {
if (other.resourceSubType != null)
return false;
} else if (!resourceSubType.equals(other.resourceSubType))
return false;
if (resourceType == null) {
if (other.resourceType != null)
return false;
} else if (!resourceType.equals(other.resourceType))
return false;
if (virtualQuantity != other.virtualQuantity)
return false;
if (virtualQuantityUnits == null) {
if (other.virtualQuantityUnits != null)
return false;
} else if (!virtualQuantityUnits.equals(other.virtualQuantityUnits))
return false;
if (weight == null) {
if (other.weight != null)
return false;
} else if (!weight.equals(other.weight))
return false;
return true;
}
@Override
public String toString() {
return "ResourceAllocation [address=" + address + ", addressOnParent=" + addressOnParent
+ ", allocationUnits=" + allocationUnits + ", automaticAllocation="
+ automaticAllocation + ", automaticDeallocation=" + automaticDeallocation
+ ", caption=" + caption + ", consumerVisibility=" + consumerVisibility
+ ", description=" + description + ", elementName=" + elementName + ", instanceID="
+ instanceID + ", limit=" + limit + ", mappingBehavior=" + mappingBehavior
+ ", otherResourceType=" + otherResourceType + ", parent=" + parent + ", poolID="
+ poolID + ", reservation=" + reservation + ", resourceSubType=" + resourceSubType
+ ", resourceType=" + resourceType + ", virtualQuantity=" + virtualQuantity
+ ", virtualQuantityUnits=" + virtualQuantityUnits + ", weight=" + weight + "]";
}
public int compareTo(ResourceAllocation that) {
final int BEFORE = -1;
final int EQUAL = 0;
final int AFTER = 1;
if (this == that)
return EQUAL;
int comparison = this.resourceType.compareTo(that.resourceType);
if (comparison != EQUAL)
return comparison;
if (this.instanceID < that.instanceID)
return BEFORE;
if (this.instanceID > that.instanceID)
return AFTER;
return EQUAL;
}
public String getHostResource() {
return hostResource;
}
}

View File

@ -0,0 +1,59 @@
package org.jclouds.vcloud.terremark.domain;
import static com.google.common.base.Preconditions.checkNotNull;
import org.jclouds.vcloud.VCloudClient;
/**
*
* VirtualResource such as disks or CPU
*
* @author Adrian Cole
* @see VCloudClient#getVApp
*
*
*/
public enum ResourceType {
VIRTUAL_CPU,
MEMORY,
SCSI_CONTROLLER,
VIRTUAL_DISK;
public String value() {
switch (this) {
case VIRTUAL_CPU:
return "3";
case MEMORY:
return "4";
case SCSI_CONTROLLER:
return "6";
case VIRTUAL_DISK:
return "17";
default:
throw new IllegalArgumentException("invalid type:" + this);
}
}
public static ResourceType fromValue(String type) {
return fromValue(Integer.parseInt(checkNotNull(type, "type")));
}
public static ResourceType fromValue(int v) {
switch (v) {
case 3:
return VIRTUAL_CPU;
case 4:
return MEMORY;
case 6:
return SCSI_CONTROLLER;
case 17:
return VIRTUAL_DISK;
default:
throw new IllegalArgumentException("invalid type:" + v);
}
}
}

View File

@ -23,10 +23,16 @@
*/
package org.jclouds.vcloud.terremark.domain;
import java.net.InetAddress;
import java.util.Map;
import java.util.SortedSet;
import org.jclouds.rest.domain.Link;
import org.jclouds.rest.domain.NamedLink;
import org.jclouds.vcloud.domain.VAppStatus;
import org.jclouds.vcloud.terremark.domain.internal.VAppImpl;
import com.google.common.collect.ListMultimap;
import com.google.inject.ImplementedBy;
/**
@ -35,10 +41,24 @@ import com.google.inject.ImplementedBy;
@ImplementedBy(VAppImpl.class)
public interface VApp extends NamedLink {
int getStatus();
VAppStatus getStatus();
int getSize();
long getSize();
Link getVDC();
Link getComputeOptions();
Link getCustomizationOptions();
ListMultimap<String, InetAddress> getNetworkToAddresses();
String getOperatingSystemDescription();
VirtualSystem getSystem();
SortedSet<ResourceAllocation> getResourceAllocations();
Map<ResourceType, ResourceAllocation> getResourceAllocationByType();
}

View File

@ -0,0 +1,330 @@
/**
*
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF 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.vcloud.terremark.domain;
import org.joda.time.DateTime;
/**
* @author Adrian Cole
*/
public class VirtualSystem {
private final String automaticRecoveryAction;
private final String automaticShutdownAction;
private final String automaticStartupAction;
private final String automaticStartupActionDelay;
private final String automaticStartupActionSequenceNumber;
private final String caption;
private final String configurationDataRoot;
private final String configurationFile;
private final String configurationID;
private final DateTime creationTime;
private final String description;
private final String elementName;
private final int instanceID;
private final String logDataRoot;
private final String recoveryFile;
private final String snapshotDataRoot;
private final String suspendDataRoot;
private final String swapFileDataRoot;
private final String virtualSystemIdentifier;
private final String virtualSystemType;
public VirtualSystem(String automaticRecoveryAction, String automaticShutdownAction,
String automaticStartupAction, String automaticStartupActionDelay,
String automaticStartupActionSequenceNumber, String caption,
String configurationDataRoot, String configurationFile, String configurationID,
DateTime creationTime, String description, String elementName, int instanceID,
String logDataRoot, String recoveryFile, String snapshotDataRoot,
String suspendDataRoot, String swapFileDataRoot, String virtualSystemIdentifier,
String virtualSystemType) {
this.automaticRecoveryAction = automaticRecoveryAction;
this.automaticShutdownAction = automaticShutdownAction;
this.automaticStartupAction = automaticStartupAction;
this.automaticStartupActionDelay = automaticStartupActionDelay;
this.automaticStartupActionSequenceNumber = automaticStartupActionSequenceNumber;
this.caption = caption;
this.configurationDataRoot = configurationDataRoot;
this.configurationFile = configurationFile;
this.configurationID = configurationID;
this.creationTime = creationTime;
this.description = description;
this.elementName = elementName;
this.instanceID = instanceID;
this.logDataRoot = logDataRoot;
this.recoveryFile = recoveryFile;
this.snapshotDataRoot = snapshotDataRoot;
this.suspendDataRoot = suspendDataRoot;
this.swapFileDataRoot = swapFileDataRoot;
this.virtualSystemIdentifier = virtualSystemIdentifier;
this.virtualSystemType = virtualSystemType;
}
public String getAutomaticRecoveryAction() {
return automaticRecoveryAction;
}
public String getAutomaticShutdownAction() {
return automaticShutdownAction;
}
public String getAutomaticStartupAction() {
return automaticStartupAction;
}
public String getAutomaticStartupActionDelay() {
return automaticStartupActionDelay;
}
public String getAutomaticStartupActionSequenceNumber() {
return automaticStartupActionSequenceNumber;
}
public String getCaption() {
return caption;
}
public String getConfigurationDataRoot() {
return configurationDataRoot;
}
public String getConfigurationFile() {
return configurationFile;
}
public String getConfigurationID() {
return configurationID;
}
public DateTime getCreationTime() {
return creationTime;
}
public String getDescription() {
return description;
}
public String getElementName() {
return elementName;
}
public int getInstanceID() {
return instanceID;
}
public String getLogDataRoot() {
return logDataRoot;
}
public String getRecoveryFile() {
return recoveryFile;
}
public String getSnapshotDataRoot() {
return snapshotDataRoot;
}
public String getSuspendDataRoot() {
return suspendDataRoot;
}
public String getSwapFileDataRoot() {
return swapFileDataRoot;
}
public String getVirtualSystemIdentifier() {
return virtualSystemIdentifier;
}
public String getVirtualSystemType() {
return virtualSystemType;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((automaticRecoveryAction == null) ? 0 : automaticRecoveryAction.hashCode());
result = prime * result
+ ((automaticShutdownAction == null) ? 0 : automaticShutdownAction.hashCode());
result = prime * result
+ ((automaticStartupAction == null) ? 0 : automaticStartupAction.hashCode());
result = prime
* result
+ ((automaticStartupActionDelay == null) ? 0 : automaticStartupActionDelay
.hashCode());
result = prime
* result
+ ((automaticStartupActionSequenceNumber == null) ? 0
: automaticStartupActionSequenceNumber.hashCode());
result = prime * result + ((caption == null) ? 0 : caption.hashCode());
result = prime * result
+ ((configurationDataRoot == null) ? 0 : configurationDataRoot.hashCode());
result = prime * result + ((configurationFile == null) ? 0 : configurationFile.hashCode());
result = prime * result + ((configurationID == null) ? 0 : configurationID.hashCode());
result = prime * result + ((creationTime == null) ? 0 : creationTime.hashCode());
result = prime * result + ((description == null) ? 0 : description.hashCode());
result = prime * result + ((elementName == null) ? 0 : elementName.hashCode());
result = prime * result + instanceID;
result = prime * result + ((logDataRoot == null) ? 0 : logDataRoot.hashCode());
result = prime * result + ((recoveryFile == null) ? 0 : recoveryFile.hashCode());
result = prime * result + ((snapshotDataRoot == null) ? 0 : snapshotDataRoot.hashCode());
result = prime * result + ((suspendDataRoot == null) ? 0 : suspendDataRoot.hashCode());
result = prime * result + ((swapFileDataRoot == null) ? 0 : swapFileDataRoot.hashCode());
result = prime * result
+ ((virtualSystemIdentifier == null) ? 0 : virtualSystemIdentifier.hashCode());
result = prime * result + ((virtualSystemType == null) ? 0 : virtualSystemType.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
VirtualSystem other = (VirtualSystem) obj;
if (automaticRecoveryAction == null) {
if (other.automaticRecoveryAction != null)
return false;
} else if (!automaticRecoveryAction.equals(other.automaticRecoveryAction))
return false;
if (automaticShutdownAction == null) {
if (other.automaticShutdownAction != null)
return false;
} else if (!automaticShutdownAction.equals(other.automaticShutdownAction))
return false;
if (automaticStartupAction == null) {
if (other.automaticStartupAction != null)
return false;
} else if (!automaticStartupAction.equals(other.automaticStartupAction))
return false;
if (automaticStartupActionDelay == null) {
if (other.automaticStartupActionDelay != null)
return false;
} else if (!automaticStartupActionDelay.equals(other.automaticStartupActionDelay))
return false;
if (automaticStartupActionSequenceNumber == null) {
if (other.automaticStartupActionSequenceNumber != null)
return false;
} else if (!automaticStartupActionSequenceNumber
.equals(other.automaticStartupActionSequenceNumber))
return false;
if (caption == null) {
if (other.caption != null)
return false;
} else if (!caption.equals(other.caption))
return false;
if (configurationDataRoot == null) {
if (other.configurationDataRoot != null)
return false;
} else if (!configurationDataRoot.equals(other.configurationDataRoot))
return false;
if (configurationFile == null) {
if (other.configurationFile != null)
return false;
} else if (!configurationFile.equals(other.configurationFile))
return false;
if (configurationID == null) {
if (other.configurationID != null)
return false;
} else if (!configurationID.equals(other.configurationID))
return false;
if (creationTime == null) {
if (other.creationTime != null)
return false;
} else if (!creationTime.equals(other.creationTime))
return false;
if (description == null) {
if (other.description != null)
return false;
} else if (!description.equals(other.description))
return false;
if (elementName == null) {
if (other.elementName != null)
return false;
} else if (!elementName.equals(other.elementName))
return false;
if (instanceID != other.instanceID)
return false;
if (logDataRoot == null) {
if (other.logDataRoot != null)
return false;
} else if (!logDataRoot.equals(other.logDataRoot))
return false;
if (recoveryFile == null) {
if (other.recoveryFile != null)
return false;
} else if (!recoveryFile.equals(other.recoveryFile))
return false;
if (snapshotDataRoot == null) {
if (other.snapshotDataRoot != null)
return false;
} else if (!snapshotDataRoot.equals(other.snapshotDataRoot))
return false;
if (suspendDataRoot == null) {
if (other.suspendDataRoot != null)
return false;
} else if (!suspendDataRoot.equals(other.suspendDataRoot))
return false;
if (swapFileDataRoot == null) {
if (other.swapFileDataRoot != null)
return false;
} else if (!swapFileDataRoot.equals(other.swapFileDataRoot))
return false;
if (virtualSystemIdentifier == null) {
if (other.virtualSystemIdentifier != null)
return false;
} else if (!virtualSystemIdentifier.equals(other.virtualSystemIdentifier))
return false;
if (virtualSystemType == null) {
if (other.virtualSystemType != null)
return false;
} else if (!virtualSystemType.equals(other.virtualSystemType))
return false;
return true;
}
@Override
public String toString() {
return "VirtualSystem [automaticRecoveryAction=" + automaticRecoveryAction
+ ", automaticShutdownAction=" + automaticShutdownAction
+ ", automaticStartupAction=" + automaticStartupAction
+ ", automaticStartupActionDelay=" + automaticStartupActionDelay
+ ", automaticStartupActionSequenceNumber=" + automaticStartupActionSequenceNumber
+ ", caption=" + caption + ", configurationDataRoot=" + configurationDataRoot
+ ", configurationFile=" + configurationFile + ", configurationID="
+ configurationID + ", creationTime=" + creationTime + ", description="
+ description + ", elementName=" + elementName + ", instanceID=" + instanceID
+ ", logDataRoot=" + logDataRoot + ", recoveryFile=" + recoveryFile
+ ", snapshotDataRoot=" + snapshotDataRoot + ", suspendDataRoot=" + suspendDataRoot
+ ", swapFileDataRoot=" + swapFileDataRoot + ", virtualSystemIdentifier="
+ virtualSystemIdentifier + ", virtualSystemType=" + virtualSystemType + "]";
}
}

View File

@ -23,13 +23,22 @@
*/
package org.jclouds.vcloud.terremark.domain.internal;
import static com.google.common.base.Preconditions.checkNotNull;
import java.net.InetAddress;
import java.net.URI;
import java.util.Map;
import java.util.SortedSet;
import org.jclouds.rest.domain.Link;
import org.jclouds.rest.domain.internal.NamedLinkImpl;
import org.jclouds.vcloud.domain.VAppStatus;
import org.jclouds.vcloud.terremark.domain.ResourceAllocation;
import org.jclouds.vcloud.terremark.domain.ResourceType;
import org.jclouds.vcloud.terremark.domain.VApp;
import org.jclouds.vcloud.terremark.domain.VirtualSystem;
import com.google.common.base.Function;
import com.google.common.collect.ListMultimap;
import com.google.common.collect.Maps;
/**
* Locations of resources in vCloud
@ -39,25 +48,49 @@ import org.jclouds.vcloud.terremark.domain.VApp;
*/
public class VAppImpl extends NamedLinkImpl implements VApp {
private final int status;
private final int size;
private final VAppStatus status;
private final long size;
private final Link vDC;
private final Link computeOptions;
private final Link customizationOptions;
private final ListMultimap<String, InetAddress> networkToAddresses;
private final String operatingSystemDescription;
private final VirtualSystem system;
private final SortedSet<ResourceAllocation> resourceAllocations;
private final Map<ResourceType, ResourceAllocation> resourceAllocationByType;
/** The serialVersionUID */
private static final long serialVersionUID = 8464716396538298809L;
public VAppImpl(String name, String type, URI location, int status, int size, Link vDC) {
public VAppImpl(String name, String type, URI location, VAppStatus status, long size, Link vDC,
Link computeOptions, Link customizationOptions,
ListMultimap<String, InetAddress> networkToAddresses,
String operatingSystemDescription, VirtualSystem system,
SortedSet<ResourceAllocation> resourceAllocations) {
super(name, type, location);
this.status = status;
this.size = size;
this.vDC = checkNotNull(vDC, "vDC");
this.vDC = vDC;
this.computeOptions = computeOptions;
this.customizationOptions = customizationOptions;
this.networkToAddresses = networkToAddresses;
this.operatingSystemDescription = operatingSystemDescription;
this.system = system;
this.resourceAllocations = resourceAllocations;
resourceAllocationByType = Maps.uniqueIndex(resourceAllocations,
new Function<ResourceAllocation, ResourceType>() {
@Override
public ResourceType apply(ResourceAllocation from) {
return from.getResourceType();
}
});
}
public int getStatus() {
public VAppStatus getStatus() {
return status;
}
public int getSize() {
public long getSize() {
return size;
}
@ -65,4 +98,112 @@ public class VAppImpl extends NamedLinkImpl implements VApp {
return vDC;
}
public Link getComputeOptions() {
return computeOptions;
}
public Link getCustomizationOptions() {
return customizationOptions;
}
public ListMultimap<String, InetAddress> getNetworkToAddresses() {
return networkToAddresses;
}
public String getOperatingSystemDescription() {
return operatingSystemDescription;
}
public VirtualSystem getSystem() {
return system;
}
public SortedSet<ResourceAllocation> getResourceAllocations() {
return resourceAllocations;
}
@Override
public int hashCode() {
final int prime = 31;
int result = super.hashCode();
result = prime * result + ((computeOptions == null) ? 0 : computeOptions.hashCode());
result = prime * result
+ ((customizationOptions == null) ? 0 : customizationOptions.hashCode());
result = prime * result + ((networkToAddresses == null) ? 0 : networkToAddresses.hashCode());
result = prime * result
+ ((operatingSystemDescription == null) ? 0 : operatingSystemDescription.hashCode());
result = prime * result
+ ((resourceAllocationByType == null) ? 0 : resourceAllocationByType.hashCode());
result = prime * result
+ ((resourceAllocations == null) ? 0 : resourceAllocations.hashCode());
result = prime * result + (int) (size ^ (size >>> 32));
result = prime * result + ((status == null) ? 0 : status.hashCode());
result = prime * result + ((system == null) ? 0 : system.hashCode());
result = prime * result + ((vDC == null) ? 0 : vDC.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (!super.equals(obj))
return false;
if (getClass() != obj.getClass())
return false;
VAppImpl other = (VAppImpl) obj;
if (computeOptions == null) {
if (other.computeOptions != null)
return false;
} else if (!computeOptions.equals(other.computeOptions))
return false;
if (customizationOptions == null) {
if (other.customizationOptions != null)
return false;
} else if (!customizationOptions.equals(other.customizationOptions))
return false;
if (networkToAddresses == null) {
if (other.networkToAddresses != null)
return false;
} else if (!networkToAddresses.equals(other.networkToAddresses))
return false;
if (operatingSystemDescription == null) {
if (other.operatingSystemDescription != null)
return false;
} else if (!operatingSystemDescription.equals(other.operatingSystemDescription))
return false;
if (resourceAllocationByType == null) {
if (other.resourceAllocationByType != null)
return false;
} else if (!resourceAllocationByType.equals(other.resourceAllocationByType))
return false;
if (resourceAllocations == null) {
if (other.resourceAllocations != null)
return false;
} else if (!resourceAllocations.equals(other.resourceAllocations))
return false;
if (size != other.size)
return false;
if (status == null) {
if (other.status != null)
return false;
} else if (!status.equals(other.status))
return false;
if (system == null) {
if (other.system != null)
return false;
} else if (!system.equals(other.system))
return false;
if (vDC == null) {
if (other.vDC != null)
return false;
} else if (!vDC.equals(other.vDC))
return false;
return true;
}
public Map<ResourceType, ResourceAllocation> getResourceAllocationByType() {
return resourceAllocationByType;
}
}

View File

@ -0,0 +1,177 @@
/**
*
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF 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.vcloud.terremark.xml;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.vcloud.terremark.domain.ResourceAllocation;
import org.jclouds.vcloud.terremark.domain.ResourceType;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
/**
* @author Adrian Cole
*/
public class ResourceAllocationHandler extends ParseSax.HandlerWithResult<ResourceAllocation> {
private StringBuilder currentText = new StringBuilder();
private Integer address;
private Integer addressOnParent;
private String allocationUnits;
private String automaticAllocation;
private String automaticDeallocation;
private String caption;
private String consumerVisibility;
private String description;
private String elementName;
private String hostResource;
private int instanceID;
private String limit;
private String mappingBehavior;
private String otherResourceType;
private Integer parent;
private String poolID;
private String reservation;
private String resourceSubType;
private ResourceType resourceType;
private long virtualQuantity = 1;
private String virtualQuantityUnits;
private String weight;
private ResourceAllocation item;
private boolean skip;
public ResourceAllocation getResult() {
return item;
}
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
if (attributes.getIndex("xsi:nil") != -1 || attributes.getIndex("xmlns") == -1) {
String ns = attributes.getValue(attributes.getIndex("xmlns"));
if ("http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData"
.equals(ns)) {
skip = false;
} else {
skip = true;
return;
}
} else {
skip = false;
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if (!skip) {
if (qName.equals("Address")) {
String address = currentText.toString().trim();
if (address != null && !address.equals(""))
this.address = Integer.parseInt(address);
} else if (qName.equals("AddressOnParent")) {
String addressOnParent = currentText.toString().trim();
if (addressOnParent != null && !addressOnParent.equals(""))
this.addressOnParent = Integer.parseInt(addressOnParent);
} else if (qName.equals("AllocationUnits")) {
this.allocationUnits = currentText.toString().trim();
} else if (qName.equals("AutomaticAllocation")) {
this.automaticAllocation = currentText.toString().trim();
} else if (qName.equals("AutomaticDeallocation")) {
this.automaticDeallocation = currentText.toString().trim();
} else if (qName.equals("Caption")) {
this.caption = currentText.toString().trim();
} else if (qName.equals("ConsumerVisibility")) {
this.consumerVisibility = currentText.toString().trim();
} else if (qName.equals("Description")) {
this.description = currentText.toString().trim();
} else if (qName.equals("ElementName")) {
this.elementName = currentText.toString().trim();
} else if (qName.equals("HostResource")) {
this.hostResource = currentText.toString().trim();
} else if (qName.equals("InstanceID")) {
this.instanceID = Integer.parseInt(currentText.toString().trim());
} else if (qName.equals("Limit")) {
this.limit = currentText.toString().trim();
} else if (qName.equals("MappingBehavior")) {
this.mappingBehavior = currentText.toString().trim();
} else if (qName.equals("OtherResourceType")) {
this.otherResourceType = currentText.toString().trim();
} else if (qName.equals("Parent")) {
String parent = currentText.toString().trim();
if (parent != null && !parent.equals(""))
this.parent = Integer.parseInt(parent);
} else if (qName.equals("PoolID")) {
this.poolID = currentText.toString().trim();
} else if (qName.equals("Reservation")) {
this.reservation = currentText.toString().trim();
} else if (qName.equals("ResourceSubType")) {
this.resourceSubType = currentText.toString().trim();
} else if (qName.equals("ResourceType")) {
this.resourceType = ResourceType.fromValue(currentText.toString().trim());
} else if (qName.equals("VirtualQuantity")) {
String quantity = currentText.toString().trim();
if (quantity != null && !quantity.equals(""))
this.virtualQuantity = Long.parseLong(quantity);
} else if (qName.equals("VirtualQuantityUnits")) {
this.virtualQuantityUnits = currentText.toString().trim();
} else if (qName.equals("Weight")) {
this.weight = currentText.toString().trim();
} else if (qName.equals("q2:Item")) {
this.item = new ResourceAllocation(address, addressOnParent, allocationUnits,
automaticAllocation, automaticDeallocation, caption, consumerVisibility,
description, elementName, hostResource, instanceID, limit, mappingBehavior,
otherResourceType, parent, poolID, reservation, resourceSubType, resourceType,
virtualQuantity, virtualQuantityUnits, weight);
this.address = null;
this.addressOnParent = null;
this.allocationUnits = null;
this.automaticAllocation = null;
this.automaticDeallocation = null;
this.caption = null;
this.consumerVisibility = null;
this.description = null;
this.elementName = null;
this.hostResource = null;
this.instanceID = -1;
this.limit = null;
this.mappingBehavior = null;
this.otherResourceType = null;
this.parent = null;
this.poolID = null;
this.reservation = null;
this.resourceSubType = null;
this.resourceType = null;
this.virtualQuantity = 1;
this.virtualQuantityUnits = null;
this.weight = null;
}
}
currentText = new StringBuilder();
}
public void characters(char ch[], int start, int length) {
currentText.append(ch, start, length);
}
}

View File

@ -23,39 +23,140 @@
*/
package org.jclouds.vcloud.terremark.xml;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.SortedSet;
import javax.annotation.Resource;
import javax.inject.Inject;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.logging.Logger;
import org.jclouds.rest.domain.Link;
import org.jclouds.rest.domain.NamedLink;
import org.jclouds.rest.util.Utils;
import org.jclouds.vcloud.VCloudMediaType;
import org.jclouds.vcloud.domain.VAppStatus;
import org.jclouds.vcloud.terremark.domain.ResourceAllocation;
import org.jclouds.vcloud.terremark.domain.VApp;
import org.jclouds.vcloud.terremark.domain.VirtualSystem;
import org.jclouds.vcloud.terremark.domain.internal.VAppImpl;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ListMultimap;
import com.google.common.collect.Sets;
/**
* @author Adrian Cole
*/
public class TerremarkVAppHandler extends ParseSax.HandlerWithResult<VApp> {
private final VirtualSystemHandler systemHandler;
private final ResourceAllocationHandler allocationHandler;
@Resource
protected Logger logger = Logger.NULL;
@Inject
public TerremarkVAppHandler(VirtualSystemHandler systemHandler,
ResourceAllocationHandler allocationHandler) {
this.systemHandler = systemHandler;
this.allocationHandler = allocationHandler;
}
private VirtualSystem system;
private SortedSet<ResourceAllocation> allocations = Sets.newTreeSet();
private NamedLink vApp;
private Link vDC;
private int status;
private VAppStatus status;
private int size;
private boolean skip;
private Link computeOptions;
private Link customizationOptions;
private final ListMultimap<String, InetAddress> networkToAddresses = ArrayListMultimap.create();
private StringBuilder currentText = new StringBuilder();
private String operatingSystemDescription;
private boolean inOs;
private String networkName;
public VApp getResult() {
return new VAppImpl(vApp.getName(), vApp.getType(), vApp.getLocation(), status, size, vDC);
return new VAppImpl(vApp.getName(), vApp.getType(), vApp.getLocation(), status, size, vDC,
computeOptions, customizationOptions, networkToAddresses,
operatingSystemDescription, system, allocations);
}
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
if (attributes.getIndex("xsi:nil") != -1) {
skip = true;
return;
} else {
skip = false;
}
if (qName.equals("Link")) {
vDC = Utils.newLink(attributes);
if (attributes.getValue(attributes.getIndex("type")).equals(VCloudMediaType.VDC_XML)) {
vDC = Utils.newLink(attributes);
} else if (attributes.getValue(attributes.getIndex("name")).equals("Compute Options")) {
this.computeOptions = Utils.newLink(attributes);
} else if (attributes.getValue(attributes.getIndex("name"))
.equals("Customization Options")) {
this.customizationOptions = Utils.newLink(attributes);
}
} else if (qName.equals("VApp")) {
vApp = Utils.newNamedLink(attributes);
status = Integer.parseInt(attributes.getValue(attributes.getIndex("status")));
status = VAppStatus.fromValue(attributes.getValue(attributes.getIndex("status")));
size = Integer.parseInt(attributes.getValue(attributes.getIndex("size")));
} else if (qName.equals("OperatingSystemSection")) {
inOs = true;
} else if (qName.equals("q1:NetworkConnection")) {
networkName = attributes.getValue(attributes.getIndex("Network"));
} else {
systemHandler.startElement(uri, localName, qName, attributes);
allocationHandler.startElement(uri, localName, qName, attributes);
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if (qName.equals("OperatingSystemSection")) {
inOs = false;
} else if (inOs && qName.equals("Description")) {
operatingSystemDescription = currentText.toString().trim();
} else if (qName.equals("q1:IpAddress")) {
networkToAddresses.put(networkName, parseInetAddress(currentText.toString().trim()));
} else if (qName.equals("q2:System")) {
systemHandler.endElement(uri, localName, qName);
system = systemHandler.getResult();
} else if (qName.equals("q2:Item")) {
allocationHandler.endElement(uri, localName, qName);
allocations.add(allocationHandler.getResult());
} else if (!skip) {
systemHandler.endElement(uri, localName, qName);
allocationHandler.endElement(uri, localName, qName);
}
currentText = new StringBuilder();
}
@Override
public void characters(char ch[], int start, int length) {
currentText.append(ch, start, length);
systemHandler.characters(ch, start, length);
allocationHandler.characters(ch, start, length);
}
private InetAddress parseInetAddress(String string) {
String[] byteStrings = string.split("\\.");
byte[] bytes = new byte[4];
for (int i = 0; i < 4; i++) {
bytes[i] = (byte) Integer.parseInt(byteStrings[i]);
}
try {
return InetAddress.getByAddress(bytes);
} catch (UnknownHostException e) {
logger.warn(e, "error parsing ipAddress", currentText);
}
return null;
}
}

View File

@ -0,0 +1,169 @@
/**
*
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF 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.vcloud.terremark.xml;
import javax.inject.Inject;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.util.DateService;
import org.joda.time.DateTime;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
/**
* @author Adrian Cole
*/
public class VirtualSystemHandler extends
ParseSax.HandlerWithResult<org.jclouds.vcloud.terremark.domain.VirtualSystem> {
private StringBuilder currentText = new StringBuilder();
protected DateService dateService;
private String automaticRecoveryAction;
private String automaticShutdownAction;
private String automaticStartupAction;
private String automaticStartupActionDelay;
private String automaticStartupActionSequenceNumber;
private String caption;
private String configurationDataRoot;
private String configurationFile;
private String configurationID;
private DateTime creationTime;
private String description;
private String elementName;
private int instanceID;
private String logDataRoot;
private String recoveryFile;
private String snapshotDataRoot;
private String suspendDataRoot;
private String swapFileDataRoot;
private String virtualSystemIdentifier;
private String virtualSystemType;
private org.jclouds.vcloud.terremark.domain.VirtualSystem system;
private boolean skip;
@Inject
public VirtualSystemHandler(DateService dateService) {
this.dateService = dateService;
}
public org.jclouds.vcloud.terremark.domain.VirtualSystem getResult() {
return system;
}
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
if (attributes.getIndex("xsi:nil") != -1
|| attributes.getIndex("xmlns") == -1 || !"http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData"
.equals(attributes.getValue("xmlns"))) {
skip = true;
return;
} else {
skip = false;
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if (!skip) {
if (qName.equals("AutomaticRecoveryAction")) {
this.automaticRecoveryAction = currentText.toString().trim();
} else if (qName.equals("AutomaticShutdownAction")) {
this.automaticShutdownAction = currentText.toString().trim();
} else if (qName.equals("AutomaticStartupAction")) {
this.automaticStartupAction = currentText.toString().trim();
} else if (qName.equals("AutomaticStartupActionDelay")) {
this.automaticStartupActionDelay = currentText.toString().trim();
} else if (qName.equals("AutomaticStartupActionSequenceNumber")) {
this.automaticStartupActionSequenceNumber = currentText.toString().trim();
} else if (qName.equals("Caption")) {
this.caption = currentText.toString().trim();
} else if (qName.equals("ConfigurationDataRoot")) {
this.configurationDataRoot = currentText.toString().trim();
} else if (qName.equals("ConfigurationDataRoot")) {
this.configurationDataRoot = currentText.toString().trim();
} else if (qName.equals("ConfigurationFile")) {
this.configurationFile = currentText.toString().trim();
} else if (qName.equals("ConfigurationID")) {
this.configurationID = currentText.toString().trim();
} else if (qName.equals("CreationTime")) {
this.creationTime = dateService.iso8601DateParse(currentText.toString().trim());
} else if (qName.equals("Description")) {
this.description = currentText.toString().trim();
} else if (qName.equals("ElementName")) {
this.elementName = currentText.toString().trim();
} else if (qName.equals("InstanceID")) {
this.instanceID = Integer.parseInt(currentText.toString().trim());
} else if (qName.equals("LogDataRoot")) {
this.logDataRoot = currentText.toString().trim();
} else if (qName.equals("RecoveryFile")) {
this.recoveryFile = currentText.toString().trim();
} else if (qName.equals("SnapshotDataRoot")) {
this.snapshotDataRoot = currentText.toString().trim();
} else if (qName.equals("SuspendDataRoot")) {
this.suspendDataRoot = currentText.toString().trim();
} else if (qName.equals("SwapFileDataRoot")) {
this.swapFileDataRoot = currentText.toString().trim();
} else if (qName.equals("VirtualSystemIdentifier")) {
this.virtualSystemIdentifier = currentText.toString().trim();
} else if (qName.equals("VirtualSystemType")) {
this.virtualSystemType = currentText.toString().trim();
} else if (qName.equals("q2:System")) {
this.system = new org.jclouds.vcloud.terremark.domain.VirtualSystem(automaticRecoveryAction,
automaticShutdownAction, automaticStartupAction, automaticStartupActionDelay,
automaticStartupActionSequenceNumber, caption, configurationDataRoot,
configurationFile, configurationID, creationTime, description, elementName,
instanceID, logDataRoot, recoveryFile, snapshotDataRoot, suspendDataRoot,
swapFileDataRoot, virtualSystemIdentifier, virtualSystemType);
this.automaticRecoveryAction = null;
this.automaticShutdownAction = null;
this.automaticStartupAction = null;
this.automaticStartupActionDelay = null;
this.automaticStartupActionSequenceNumber = null;
this.caption = null;
this.configurationDataRoot = null;
this.configurationFile = null;
this.configurationID = null;
this.creationTime = null;
this.description = null;
this.elementName = null;
this.instanceID = -1;
this.logDataRoot = null;
this.recoveryFile = null;
this.snapshotDataRoot = null;
this.suspendDataRoot = null;
this.swapFileDataRoot = null;
this.virtualSystemIdentifier = null;
this.virtualSystemType = null;
}
}
currentText = new StringBuilder();
}
public void characters(char ch[], int start, int length) {
currentText.append(ch, start, length);
}
}

View File

@ -1,96 +0,0 @@
/**
*
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF 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.vcloud.xml;
import java.text.ParseException;
import javax.inject.Inject;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.rest.domain.Link;
import org.jclouds.rest.domain.NamedLink;
import org.jclouds.rest.util.Utils;
import org.jclouds.util.DateService;
import org.jclouds.vcloud.domain.Task;
import org.jclouds.vcloud.domain.TaskStatus;
import org.jclouds.vcloud.domain.internal.TaskImpl;
import org.joda.time.DateTime;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
/**
* @author Adrian Cole
*/
public abstract class BaseTaskHandler<T> extends ParseSax.HandlerWithResult<T> {
protected final DateService dateService;
private Link taskLink;
private NamedLink owner;
private NamedLink result;
private TaskStatus status;
private DateTime startTime;
private DateTime endTime;
@Inject
public BaseTaskHandler(DateService dateService) {
this.dateService = dateService;
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
if (qName.equals("Task")) {
taskLink = Utils.newLink(attributes);
status = TaskStatus.fromValue(attributes.getValue(attributes.getIndex("status")));
startTime = dateService.iso8601DateParse(attributes.getValue(attributes
.getIndex("startTime")));
if (attributes.getIndex("endTime") != -1) {
try {
endTime = dateService.iso8601DateParse(attributes.getValue(attributes
.getIndex("endTime")));
} catch (RuntimeException e) {
if (!(e.getCause() instanceof ParseException)) // TODO.. format doesn't parse
// endTime="2009-11-11T02:27:25Z"
throw e;
}
}
} else if (qName.equals("Owner")) {
owner = Utils.newNamedLink(attributes);
} else if (qName.equals("Result")) {
result = Utils.newNamedLink(attributes);
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if (qName.equals("Task")) {
newTask(new TaskImpl(taskLink.getType(), taskLink.getLocation(), status, startTime,
endTime, owner, result));
}
}
protected abstract void newTask(Task task);
}

View File

@ -23,30 +23,82 @@
*/
package org.jclouds.vcloud.xml;
import java.text.ParseException;
import javax.inject.Inject;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.rest.domain.Link;
import org.jclouds.rest.domain.NamedLink;
import org.jclouds.rest.util.Utils;
import org.jclouds.util.DateService;
import org.jclouds.vcloud.domain.Task;
import org.jclouds.vcloud.domain.TaskStatus;
import org.jclouds.vcloud.domain.internal.TaskImpl;
import org.joda.time.DateTime;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
/**
* @author Adrian Cole
*/
public class TaskHandler extends BaseTaskHandler<Task> {
public class TaskHandler extends ParseSax.HandlerWithResult<Task> {
protected final DateService dateService;
private Link taskLink;
private NamedLink owner;
private NamedLink result;
private TaskStatus status;
private DateTime startTime;
private DateTime endTime;
private Task task;
@Inject
public TaskHandler(DateService dateService) {
super(dateService);
this.dateService = dateService;
}
private Task task;
public Task getResult() {
return task;
}
@Override
protected void newTask(Task task) {
this.task = task;
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
if (qName.equals("Task")) {
taskLink = Utils.newLink(attributes);
status = TaskStatus.fromValue(attributes.getValue(attributes.getIndex("status")));
startTime = dateService.iso8601DateParse(attributes.getValue(attributes
.getIndex("startTime")));
if (attributes.getIndex("endTime") != -1) {
try {
endTime = dateService.iso8601DateParse(attributes.getValue(attributes
.getIndex("endTime")));
} catch (RuntimeException e) {
if (!(e.getCause() instanceof ParseException)) // TODO.. format doesn't parse
// endTime="2009-11-11T02:27:25Z"
throw e;
}
}
} else if (qName.equals("Owner")) {
owner = Utils.newNamedLink(attributes);
} else if (qName.equals("Result")) {
result = Utils.newNamedLink(attributes);
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if (qName.equals("Task")) {
this.task = new TaskImpl(taskLink.getType(), taskLink.getLocation(), status, startTime,
endTime, owner, result);
taskLink = null;
status = null;
startTime = null;
endTime = null;
owner = null;
result = null;
}
}
}

View File

@ -28,8 +28,8 @@ import java.util.SortedSet;
import javax.inject.Inject;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.rest.util.Utils;
import org.jclouds.util.DateService;
import org.jclouds.vcloud.domain.Task;
import org.jclouds.vcloud.domain.TasksList;
import org.jclouds.vcloud.domain.internal.TasksListImpl;
@ -41,31 +41,36 @@ import com.google.common.collect.Sets;
/**
* @author Adrian Cole
*/
public class TasksListHandler extends BaseTaskHandler<TasksList> {
public class TasksListHandler extends ParseSax.HandlerWithResult<TasksList> {
private SortedSet<Task> tasks = Sets.newTreeSet();
private final TaskHandler taskHandler;
private URI location;
@Inject
public TasksListHandler(DateService dateService) {
super(dateService);
public TasksListHandler(TaskHandler taskHandler) {
this.taskHandler = taskHandler;
}
public TasksList getResult() {
return new TasksListImpl(location, tasks);
}
protected void newTask(Task task) {
this.tasks.add(task);
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
if (qName.equals("TasksList")) {
location = Utils.newLink(attributes).getLocation();
} else {
super.startElement(uri, localName, qName, attributes);
taskHandler.startElement(uri, localName, qName, attributes);
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
taskHandler.endElement(uri, localName, qName);
if (qName.equals("Task")) {
this.tasks.add(taskHandler.getResult());
}
}

View File

@ -37,6 +37,8 @@ import org.jclouds.logging.log4j.config.Log4JLoggingModule;
import org.jclouds.vcloud.VCloudClientLiveTest;
import org.jclouds.vcloud.domain.Task;
import org.jclouds.vcloud.domain.TaskStatus;
import org.jclouds.vcloud.domain.VAppStatus;
import org.jclouds.vcloud.terremark.domain.ResourceType;
import org.jclouds.vcloud.terremark.domain.TerremarkVDC;
import org.jclouds.vcloud.terremark.domain.VApp;
import org.testng.annotations.BeforeGroups;
@ -66,18 +68,24 @@ public class TerremarkVCloudClientLiveTest extends VCloudClientLiveTest {
}
@Test
// disabled until stop functionality is added
public void testInstantiate() throws InterruptedException, ExecutionException, TimeoutException {
URI template = tmClient.getCatalog().get(45, TimeUnit.SECONDS).get(
"Ubuntu Server 9.04 (32-bit)").getLocation();
String serverName = "adriantest4";
int processorCount = 1;
int memory = 512;
String catalogOs = "Ubuntu Server 9.04 (32-bit)";
String expectedOs = "Ubuntu Linux (32-bit)";
URI template = tmClient.getCatalog().get(45, TimeUnit.SECONDS).get(catalogOs).getLocation();
URI network = tmClient.getDefaultVDC().get(45, TimeUnit.SECONDS).getAvailableNetworks()
.values().iterator().next().getLocation();
VApp vApp = tmClient.instantiateVAppTemplate("adriantest1", template, 1, 512, network).get(
45, TimeUnit.SECONDS);
VApp vApp = tmClient.instantiateVAppTemplate(serverName, template, processorCount, memory,
network).get(45, TimeUnit.SECONDS);
assertEquals(vApp.getStatus(), VAppStatus.CREATING);
Task instantiateTask = getLastTaskFor(vApp.getVDC().getLocation());
assertEquals(instantiateTask.getStatus(), TaskStatus.QUEUED);
// in terremark, this should be a no-op, as it should simply return the above task, which is
// already deploying
@ -88,6 +96,9 @@ public class TerremarkVCloudClientLiveTest extends VCloudClientLiveTest {
deployTask = tmClient.deploy(vApp.getLocation()).get(45, TimeUnit.SECONDS);
assertEquals(deployTask.getLocation(), instantiateTask.getLocation());
vApp = tmClient.getVApp(vApp.getLocation()).get(45, TimeUnit.SECONDS);
assertEquals(vApp.getStatus(), VAppStatus.CREATING);
try {// per docs, this is not supported
tmClient.cancelTask(deployTask.getLocation()).get(45, TimeUnit.SECONDS);
} catch (ExecutionException e) {
@ -96,7 +107,11 @@ public class TerremarkVCloudClientLiveTest extends VCloudClientLiveTest {
}
deployTask = blockUntilSuccess(deployTask);
// TODO verify from vapp status
vApp = tmClient.getVApp(vApp.getLocation()).get(45, TimeUnit.SECONDS);
verifyConfigurationOfVApp(vApp, serverName, expectedOs, processorCount, memory);
assertEquals(vApp.getStatus(), VAppStatus.OFF);
try {// per docs, this is not supported
tmClient.undeploy(deployTask.getResult().getLocation()).get(45, TimeUnit.SECONDS);
} catch (ExecutionException e) {
@ -106,7 +121,8 @@ public class TerremarkVCloudClientLiveTest extends VCloudClientLiveTest {
deployTask = blockUntilSuccess(tmClient.powerOn(deployTask.getResult().getLocation()).get(45,
TimeUnit.SECONDS));
// TODO verify from vapp status
vApp = tmClient.getVApp(vApp.getLocation()).get(45, TimeUnit.SECONDS);
assertEquals(vApp.getStatus(), VAppStatus.ON);
try {// per docs, this is not supported
tmClient.suspend(deployTask.getResult().getLocation()).get(45, TimeUnit.SECONDS);
@ -117,18 +133,37 @@ public class TerremarkVCloudClientLiveTest extends VCloudClientLiveTest {
deployTask = blockUntilSuccess(tmClient.reset(deployTask.getResult().getLocation()).get(45,
TimeUnit.SECONDS));
// TODO verify from vapp status
vApp = tmClient.getVApp(vApp.getLocation()).get(45, TimeUnit.SECONDS);
assertEquals(vApp.getStatus(), VAppStatus.ON);
tmClient.shutdown(deployTask.getResult().getLocation()).get(45, TimeUnit.SECONDS);
// TODO verify from vapp status
vApp = tmClient.getVApp(vApp.getLocation()).get(45, TimeUnit.SECONDS);
assertEquals(vApp.getStatus(), VAppStatus.ON);
deployTask = blockUntilSuccess(tmClient.powerOff(deployTask.getResult().getLocation()).get(
45, TimeUnit.SECONDS));
// TODO verify from vapp status
vApp = tmClient.getVApp(vApp.getLocation()).get(45, TimeUnit.SECONDS);
assertEquals(vApp.getStatus(), VAppStatus.OFF);
tmClient.delete(deployTask.getResult().getLocation()).get(45, TimeUnit.SECONDS);
// TODO verify from vapp status
//TODO verify not present anymore
}
private void verifyConfigurationOfVApp(VApp vApp, String serverName, String expectedOs,
int processorCount, int memory) {
assertEquals(vApp.getName(), serverName);
assertEquals(vApp.getOperatingSystemDescription(), expectedOs);
assertEquals(vApp.getResourceAllocationByType().get(ResourceType.VIRTUAL_CPU)
.getVirtualQuantity(), processorCount);
assertEquals(vApp.getResourceAllocationByType().get(ResourceType.SCSI_CONTROLLER)
.getVirtualQuantity(), 1);
assertEquals(
vApp.getResourceAllocationByType().get(ResourceType.MEMORY).getVirtualQuantity(),
memory);
assertEquals(vApp.getResourceAllocationByType().get(ResourceType.VIRTUAL_DISK)
.getVirtualQuantity(), memory * 8192);
assertEquals(vApp.getSize(), vApp.getResourceAllocationByType()
.get(ResourceType.VIRTUAL_DISK).getVirtualQuantity());
}
private Task blockUntilSuccess(Task task) throws InterruptedException, ExecutionException,

View File

@ -0,0 +1,64 @@
/**
*
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF 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.vcloud.terremark.xml;
import static org.testng.Assert.assertEquals;
import java.io.InputStream;
import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.vcloud.terremark.domain.ResourceAllocation;
import org.jclouds.vcloud.terremark.domain.ResourceType;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
/**
* Tests behavior of {@code ResourceAllocationHandler}
*
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "vcloud.ResourceAllocationHandlerTest")
public class ResourceAllocationHandlerTest extends BaseHandlerTest {
@BeforeTest
@Override
protected void setUpInjector() {
super.setUpInjector();
}
public void testApplyInputStream() {
InputStream is = getClass().getResourceAsStream("/terremark/item.xml");
ResourceAllocation result = (ResourceAllocation) factory.create(
injector.getInstance(ResourceAllocationHandler.class)).parse(is);
assertEquals(result.getAddress(), new Integer(0));
assertEquals(result.getDescription(), "SCSI Controller");
assertEquals(result.getElementName(), "SCSI Controller 0");
assertEquals(result.getInstanceID(), 3);
assertEquals(result.getResourceSubType(), "lsilogic");
assertEquals(result.getResourceType(), ResourceType.SCSI_CONTROLLER);
assertEquals(result.getVirtualQuantity(), 1);
}
}

View File

@ -26,14 +26,26 @@ package org.jclouds.vcloud.terremark.xml;
import static org.testng.Assert.assertEquals;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.URI;
import java.net.UnknownHostException;
import javax.ws.rs.core.MediaType;
import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.rest.domain.internal.LinkImpl;
import org.jclouds.vcloud.VCloudMediaType;
import org.jclouds.vcloud.domain.VAppStatus;
import org.jclouds.vcloud.terremark.domain.ResourceAllocation;
import org.jclouds.vcloud.terremark.domain.ResourceType;
import org.jclouds.vcloud.terremark.domain.VApp;
import org.jclouds.vcloud.terremark.domain.VirtualSystem;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSortedSet;
/**
* Tests behavior of {@code TerremarkVAppHandler}
*
@ -54,7 +66,7 @@ public class TerremarkVAppHandlerTest extends BaseHandlerTest {
VApp result = (VApp) factory.create(injector.getInstance(TerremarkVAppHandler.class)).parse(
is);
assertEquals(result.getName(), "adriantest");
assertEquals(result.getStatus(), 0);
assertEquals(result.getStatus(), VAppStatus.CREATING);
assertEquals(result.getSize(), 4);
@ -65,4 +77,64 @@ public class TerremarkVAppHandlerTest extends BaseHandlerTest {
.create("https://services.vcloudexpress.terremark.com/api/v0.8/vdc/32")));
}
public void testGetVApp() throws UnknownHostException {
InputStream is = getClass().getResourceAsStream("/terremark/get_vapp.xml");
VApp result = (VApp) factory.create(injector.getInstance(TerremarkVAppHandler.class)).parse(
is);
assertEquals(result.getName(), "adriantest1");
assertEquals(result.getStatus(), VAppStatus.OFF);
assertEquals(result.getSize(), 4194304);
assertEquals(result.getOperatingSystemDescription(), "Ubuntu Linux (32-bit)");
assertEquals(result.getLocation(), URI
.create("https://services.vcloudexpress.terremark.com/api/v0.8/vapp/13850"));
assertEquals(result.getType(), "application/vnd.vmware.vcloud.vApp+xml");
assertEquals(result.getVDC(), new LinkImpl(VCloudMediaType.VDC_XML, URI
.create("https://services.vcloudexpress.terremark.com/api/v0.8/vdc/32")));
assertEquals(
result.getComputeOptions(),
new LinkImpl(
MediaType.APPLICATION_XML,
URI
.create("https://services.vcloudexpress.terremark.com/api/v0.8/vapp/13850/options/compute")));
assertEquals(
result.getCustomizationOptions(),
new LinkImpl(
MediaType.APPLICATION_XML,
URI
.create("https://services.vcloudexpress.terremark.com/api/v0.8/vapp/13850/options/customization")));
assertEquals(result.getSystem(), new VirtualSystem(null, null, null, null, null, null, null,
null, null, null, null, "Virtual Hardware Family", 0, null, null, null, null, null,
"adriantest1", "vmx-07"));
assertEquals(result.getNetworkToAddresses().get("Internal"), ImmutableList.of(InetAddress
.getByName("10.114.34.132")));
ResourceAllocation cpu = new ResourceAllocation(null, null, "hertz * 10^6", null, null, null,
null, "Number of Virtual CPUs", "1 virtual CPU(s)", null, 1, null, null, null, null,
null, null, null, ResourceType.VIRTUAL_CPU, 1, "count", null);
ResourceAllocation controller = new ResourceAllocation(0, null, null, null, null, null, null,
"SCSI Controller", "SCSI Controller 0", null, 3, null, null, null, null, null, null,
"lsilogic", ResourceType.SCSI_CONTROLLER, 1, null, null);
ResourceAllocation memory = new ResourceAllocation(null, null, "byte * 2^20", null, null,
null, null, "Memory Size", "512MB of memory", null, 2, null, null, null, null, null,
null, null, ResourceType.MEMORY, 512, "byte * 2^20", null);
ResourceAllocation disk = new ResourceAllocation(null, 0, null, null, null, null, null, null,
"Hard Disk 1", "4194304", 9, null, null, null, 3, null, null, null,
ResourceType.VIRTUAL_DISK, 4194304, null, null);
assertEquals(result.getResourceAllocations(), ImmutableSortedSet.of(cpu, controller, memory,
disk));
assertEquals(result.getResourceAllocationByType().get(ResourceType.VIRTUAL_CPU)
.getVirtualQuantity(), 1);
assertEquals(result.getResourceAllocationByType().get(ResourceType.SCSI_CONTROLLER)
.getVirtualQuantity(), 1);
assertEquals(result.getResourceAllocationByType().get(ResourceType.MEMORY)
.getVirtualQuantity(), 512);
assertEquals(result.getResourceAllocationByType().get(ResourceType.VIRTUAL_DISK)
.getVirtualQuantity(), 4194304);
assertEquals(result.getSize(), result.getResourceAllocationByType().get(
ResourceType.VIRTUAL_DISK).getVirtualQuantity());
}
}

View File

@ -0,0 +1,59 @@
/**
*
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF 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.vcloud.terremark.xml;
import static org.testng.Assert.assertEquals;
import java.io.InputStream;
import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.vcloud.terremark.domain.VirtualSystem;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
/**
* Tests behavior of {@code VirtualSystemHandler}
*
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "vcloud.VirtualSystemHandlerTest")
public class VirtualSystemHandlerTest extends BaseHandlerTest {
@BeforeTest
@Override
protected void setUpInjector() {
super.setUpInjector();
}
public void testApplyInputStream() {
InputStream is = getClass().getResourceAsStream("/terremark/system.xml");
VirtualSystem result = (VirtualSystem) factory.create(
injector.getInstance(VirtualSystemHandler.class)).parse(is);
assertEquals(result.getElementName(), "Virtual Hardware Family");
assertEquals(result.getInstanceID(), 0);
assertEquals(result.getVirtualSystemIdentifier(), "adriantest1");
assertEquals(result.getVirtualSystemType(), "vmx-07");
}
}

View File

@ -0,0 +1,45 @@
<q2:Item>
<Address
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">0</Address>
<AddressOnParent xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" />
<AllocationUnits xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" />
<AutomaticAllocation xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" />
<AutomaticDeallocation xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" />
<Caption xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" />
<ConsumerVisibility xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" />
<Description
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">SCSI Controller</Description>
<ElementName
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">SCSI Controller 0</ElementName>
<InstanceID
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">3</InstanceID>
<Limit xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" />
<MappingBehavior xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" />
<OtherResourceType xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" />
<Parent xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" />
<PoolID xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" />
<Reservation xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" />
<ResourceSubType
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">lsilogic</ResourceSubType>
<ResourceType
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData">6</ResourceType>
<VirtualQuantity xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" />
<VirtualQuantityUnits xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" />
<Weight xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_ResourceAllocationSettingData" />
</q2:Item>

View File

@ -0,0 +1,43 @@
<q2:System>
<AutomaticRecoveryAction xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" />
<AutomaticShutdownAction xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" />
<AutomaticStartupAction xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" />
<AutomaticStartupActionDelay xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" />
<AutomaticStartupActionSequenceNumber
xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" />
<Caption xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" />
<ConfigurationDataRoot xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" />
<ConfigurationFile xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" />
<ConfigurationID xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" />
<CreationTime xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" />
<Description xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" />
<ElementName
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData">Virtual Hardware Family</ElementName>
<InstanceID
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData">0</InstanceID>
<LogDataRoot xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" />
<RecoveryFile xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" />
<SnapshotDataRoot xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" />
<SuspendDataRoot xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" />
<SwapFileDataRoot xsi:nil="true"
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData" />
<VirtualSystemIdentifier
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData">adriantest1</VirtualSystemIdentifier>
<VirtualSystemType
xmlns="http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_VirtualSystemSettingData">vmx-07</VirtualSystemType>
</q2:System>