Revision: 347
Author: dkavanagh
Date: Wed Jun 22 06:03:24 2011
Log: support for resource tagging and request filtering. Also, import
keypair
http://code.google.com/p/typica/source/detail?r=347
Added:
/trunk/java/com/xerox/amazonws/ec2/TagInfo.java
Modified:
/trunk/java/com/xerox/amazonws/ec2/ImageDescription.java
/trunk/java/com/xerox/amazonws/ec2/Jec2.java
/trunk/java/com/xerox/amazonws/ec2/ProductDescription.java
/trunk/java/com/xerox/amazonws/ec2/ReservationDescription.java
/trunk/java/com/xerox/amazonws/ec2/ReservedInstances.java
/trunk/java/com/xerox/amazonws/ec2/SnapshotInfo.java
/trunk/java/com/xerox/amazonws/ec2/SpotInstanceRequest.java
/trunk/java/com/xerox/amazonws/ec2/VolumeInfo.java
/trunk/xsd/ec2.xsd
=======================================
--- /dev/null
+++ /trunk/java/com/xerox/amazonws/ec2/TagInfo.java Wed Jun 22 06:03:24 2011
@@ -0,0 +1,58 @@
+//
+// typica - A client library for Amazon Web Services
+// Copyright (C) 2007,2008 Xerox Corporation
+//
+// 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 com.xerox.amazonws.ec2;
+
+/**
+ * An instance of this class represents an EC2 Tag.
+ */
+public class TagInfo {
+ private String resourceId;
+ private String resourceType;
+ private String tagKey;
+ private String tagValue;
+
+ public TagInfo(String resourceId, String resourceType, String tagKey,
String tagValue) {
+ this.resourceId = resourceId;
+ this.resourceType = resourceType;
+ this.tagKey = tagKey;
+ this.tagValue = tagValue;
+ }
+
+ public String getResourceId() {
+ return resourceId;
+ }
+
+ public String getResourceType() {
+ return resourceType;
+ }
+
+ public String getTagKey() {
+ return tagKey;
+ }
+
+ public String getTagValue() {
+ return tagValue;
+ }
+
+ public String toString() {
+ return "Tag[resource=" + this.resourceId + ", type="
+ + this.resourceType + ", key=" + this.tagKey
+ + ", value=" + this.tagValue + "]";
+ }
+}
+
=======================================
--- /trunk/java/com/xerox/amazonws/ec2/ImageDescription.java Wed Jul 14
10:15:41 2010
+++ /trunk/java/com/xerox/amazonws/ec2/ImageDescription.java Wed Jun 22
06:03:24 2011
@@ -18,6 +18,7 @@
package com.xerox.amazonws.ec2;
import java.util.List;
+import java.util.Map;
/**
* An instance of this class represents an AMI description.
@@ -46,13 +47,16 @@
private String rootDeviceName;
private List<BlockDeviceMapping> blockDeviceMapping;
private String virtualizationType;
+ private Map<String, String> tagSet;
+ private String hypervisor;
public ImageDescription(String id, String loc, String owner,
String state, Boolean isPublic, List<String> productCodes,
String architecture, String imageType, String kernelId, String
ramdiskId,
String platform, String reason, String imageOwnerAlias, String name,
String description, String rootDeviceType, String rootDeviceName,
- List<BlockDeviceMapping> blockDeviceMapping, String virtualizationType)
{
+ List<BlockDeviceMapping> blockDeviceMapping, String virtualizationType,
+ Map<String, String> tagSet, String hypervisor) {
this.imageId = id;
this.imageLocation = loc;
this.imageOwnerId = owner;
@@ -72,6 +76,8 @@
this.rootDeviceName = rootDeviceName;
this.blockDeviceMapping = blockDeviceMapping;
this.virtualizationType = virtualizationType;
+ this.tagSet = tagSet;
+ this.hypervisor = hypervisor;
}
public String getImageId() {
@@ -149,6 +155,14 @@
public String getVirtualizationType() {
return virtualizationType;
}
+
+ public Map<String, String> getTagSet() {
+ return tagSet;
+ }
+
+ public String getHypervisor() {
+ return hypervisor;
+ }
public String toString() {
return "Image[ID=" + imageId + ", Loc=" + imageLocation + ", own="
@@ -158,7 +172,8 @@
+ ramdiskId + ", platform=" + platform + ", reason="
+ reason + ", imgOwnrAlias=" + imageOwnerAlias + ", name="
+ name + ", descrip=" + description + ", rootDevType="
- + rootDeviceType + ", rootDevName=" + rootDeviceName + "]";
+ + rootDeviceType + ", rootDevName=" + rootDeviceName
+ + " hypervisor=" + hypervisor + "]";
}
}
=======================================
--- /trunk/java/com/xerox/amazonws/ec2/Jec2.java Wed Jul 14 10:15:41 2010
+++ /trunk/java/com/xerox/amazonws/ec2/Jec2.java Wed Jun 22 06:03:24 2011
@@ -61,6 +61,7 @@
import com.xerox.amazonws.typica.jaxb.CreateKeyPairResponse;
import com.xerox.amazonws.typica.jaxb.CreateSnapshotResponse;
import
com.xerox.amazonws.typica.jaxb.CreateSpotDatafeedSubscriptionResponse;
+import com.xerox.amazonws.typica.jaxb.CreateTagsResponse;
import com.xerox.amazonws.typica.jaxb.CreateVolumeResponse;
import com.xerox.amazonws.typica.jaxb.CreateVolumePermissionItemType;
import com.xerox.amazonws.typica.jaxb.ConfirmProductInstanceResponse;
@@ -70,6 +71,7 @@
import com.xerox.amazonws.typica.jaxb.DeleteSecurityGroupResponse;
import com.xerox.amazonws.typica.jaxb.DeleteSnapshotResponse;
import
com.xerox.amazonws.typica.jaxb.DeleteSpotDatafeedSubscriptionResponse;
+import com.xerox.amazonws.typica.jaxb.DeleteTagsResponse;
import com.xerox.amazonws.typica.jaxb.DeleteVolumeResponse;
import com.xerox.amazonws.typica.jaxb.DeregisterImageResponse;
import com.xerox.amazonws.typica.jaxb.DescribeAddressesResponse;
@@ -94,6 +96,7 @@
import com.xerox.amazonws.typica.jaxb.DescribeSnapshotsSetItemResponseType;
import
com.xerox.amazonws.typica.jaxb.DescribeSpotDatafeedSubscriptionResponse;
import com.xerox.amazonws.typica.jaxb.DescribeSpotInstanceRequestsResponse;
+import com.xerox.amazonws.typica.jaxb.DescribeTagsResponse;
import com.xerox.amazonws.typica.jaxb.DescribeVolumesResponse;
import com.xerox.amazonws.typica.jaxb.DescribeVolumesSetResponseType;
import com.xerox.amazonws.typica.jaxb.DescribeVolumesSetItemResponseType;
@@ -110,6 +113,7 @@
import com.xerox.amazonws.typica.jaxb.GetPasswordDataResponse;
import com.xerox.amazonws.typica.jaxb.GroupItemType;
import com.xerox.amazonws.typica.jaxb.GroupSetType;
+import com.xerox.amazonws.typica.jaxb.ImportKeyPairResponse;
import com.xerox.amazonws.typica.jaxb.InstanceStateChangeSetType;
import com.xerox.amazonws.typica.jaxb.InstanceStateChangeType;
import com.xerox.amazonws.typica.jaxb.IpPermissionSetType;
@@ -143,6 +147,8 @@
import com.xerox.amazonws.typica.jaxb.ResetImageAttributeResponse;
import com.xerox.amazonws.typica.jaxb.ResetInstanceAttributeResponse;
import com.xerox.amazonws.typica.jaxb.ResetSnapshotAttributeResponse;
+import com.xerox.amazonws.typica.jaxb.ResourceTagSetItemType;
+import com.xerox.amazonws.typica.jaxb.ResourceTagSetType;
import com.xerox.amazonws.typica.jaxb.RunningInstancesItemType;
import com.xerox.amazonws.typica.jaxb.RunningInstancesSetType;
import com.xerox.amazonws.typica.jaxb.RunInstancesResponse;
@@ -152,6 +158,8 @@
import com.xerox.amazonws.typica.jaxb.SpotInstanceRequestSetItemType;
import com.xerox.amazonws.typica.jaxb.StartInstancesResponse;
import com.xerox.amazonws.typica.jaxb.StopInstancesResponse;
+import com.xerox.amazonws.typica.jaxb.TagSetItemType;
+import com.xerox.amazonws.typica.jaxb.TagSetType;
import com.xerox.amazonws.typica.jaxb.TerminateInstancesResponse;
import com.xerox.amazonws.typica.jaxb.UserIdGroupPairType;
import com.xerox.amazonws.typica.jaxb.UserIdGroupPairSetType;
@@ -213,7 +221,7 @@
{
super(awsAccessId, awsSecretKey, isSecure, server, port);
ArrayList<String> vals = new ArrayList<String>();
- vals.add("2010-06-15");
+ vals.add("2010-11-15");
super.headers.put("Version", vals);
}
@@ -365,11 +373,23 @@
* @throws EC2Exception wraps checked exceptions
*/
public List<ImageDescription> describeImages(List<String> imageIds)
throws EC2Exception {
+ return describeImages(imageIds, null);
+ }
+
+ /**
+ * Describe the given AMIs.
+ *
+ * @param imageIds A list of AMI IDs as returned by {@link
#registerImage(String)}.
+ * @param filters map of filters to apply to this request.
+ * @return A list of {@link ImageDescription} instances describing each
AMI ID.
+ * @throws EC2Exception wraps checked exceptions
+ */
+ public List<ImageDescription> describeImages(List<String> imageIds,
Map<String, List<String>> filters) throws EC2Exception {
Map<String, String> params = new HashMap<String, String>();
for (int i=0 ; i<imageIds.size(); i++) {
params.put("ImageId."+(i+1), imageIds.get(i));
}
- return describeImages(params);
+ return describeImages(params, filters);
}
/**
@@ -380,11 +400,23 @@
* @throws EC2Exception wraps checked exceptions
*/
public List<ImageDescription> describeImagesByOwner(List<String> owners)
throws EC2Exception {
+ return describeImagesByOwner(owners, null);
+ }
+
+ /**
+ * Describe the AMIs belonging to the supplied owners.
+ *
+ * @param owners A list of owners.
+ * @param filters map of filters to apply to this request.
+ * @return A list of {@link ImageDescription} instances describing each
AMI ID.
+ * @throws EC2Exception wraps checked exceptions
+ */
+ public List<ImageDescription> describeImagesByOwner(List<String> owners,
Map<String, List<String>> filters) throws EC2Exception {
Map<String, String> params = new HashMap<String, String>();
for (int i=0 ; i<owners.size(); i++) {
params.put("Owner."+(i+1), owners.get(i));
}
- return describeImages(params);
+ return describeImages(params, filters);
}
/**
@@ -395,11 +427,23 @@
* @throws EC2Exception wraps checked exceptions
*/
public List<ImageDescription> describeImagesByExecutability(List<String>
users) throws EC2Exception {
+ return describeImagesByExecutability(users, null);
+ }
+
+ /**
+ * Describe the AMIs executable by supplied users.
+ *
+ * @param users A list of users.
+ * @param filters map of filters to apply to this request.
+ * @return A list of {@link ImageDescription} instances describing each
AMI ID.
+ * @throws EC2Exception wraps checked exceptions
+ */
+ public List<ImageDescription> describeImagesByExecutability(List<String>
users, Map<String, List<String>> filters) throws EC2Exception {
Map<String, String> params = new HashMap<String, String>();
for (int i=0 ; i<users.size(); i++) {
params.put("ExecutableBy."+(i+1), users.get(i));
}
- return describeImages(params);
+ return describeImages(params, filters);
}
/**
@@ -413,6 +457,20 @@
*/
public List<ImageDescription> describeImages(List<String> imageIds,
List<String> owners,
List<String> users) throws EC2Exception {
+ return describeImages(imageIds, owners, users, null);
+ }
+
+ /**
+ * Describe the AMIs that match the intersection of the criteria supplied
+ *
+ * @param imageIds A list of AMI IDs as returned by {@link
#registerImage(String)}.
+ * @param owners A list of owners.
+ * @param users A list of users.
+ * @return A list of {@link ImageDescription} instances describing each
AMI ID.
+ * @throws EC2Exception wraps checked exceptions
+ */
+ public List<ImageDescription> describeImages(List<String> imageIds,
List<String> owners,
+ List<String> users, Map<String, List<String>> filters) throws
EC2Exception {
Map<String, String> params = new HashMap<String, String>();
for (int i=0 ; i<imageIds.size(); i++) {
params.put("ImageId."+(i+1), imageIds.get(i));
@@ -423,14 +481,16 @@
for (int i=0 ; i<users.size(); i++) {
params.put("ExecutableBy."+(i+1), users.get(i));
}
- return describeImages(params);
+ return describeImages(params, filters);
}
- protected List<ImageDescription> describeImages(Map<String, String>
params) throws EC2Exception {
- HttpGet method = new HttpGet();
+ protected List<ImageDescription> describeImages(Map<String, String>
params, Map<String, List<String>> filters) throws EC2Exception {
+ //HttpGet method = new HttpGet();
+ HttpPost method = new HttpPost();
DescribeImagesResponse response =
makeRequestInt(method, "DescribeImages", params,
DescribeImagesResponse.class);
+ createFilterParams(params, filters);
List<ImageDescription> result = new ArrayList<ImageDescription>();
DescribeImagesResponseInfoType set = response.getImagesSet();
Iterator set_iter = set.getItems().iterator();
@@ -472,7 +532,8 @@
item.getKernelId(), item.getRamdiskId(), item.getPlatform(),
reason, item.getImageOwnerAlias(),
item.getName(), item.getDescription(), item.getRootDeviceType(),
- item.getRootDeviceName(), bdm, item.getVirtualizationType()));
+ item.getRootDeviceName(), bdm, item.getVirtualizationType(),
+ getTagSet(item.getTagSet()), item.getHypervisor()));
}
return result;
}
@@ -818,10 +879,28 @@
* @throws EC2Exception wraps checked exceptions
*/
public List<ReservationDescription> describeInstances(List<String>
instanceIds) throws EC2Exception {
+ return describeInstances(instanceIds, null);
+ }
+
+ /**
+ * Gets a list of running instances.
+ * <p>
+ * If the list of instance IDs is empty then a list of all instances owned
+ * by the caller will be returned. Otherwise the list will contain
+ * information for the requested instances only.
+ *
+ * @param instanceIds A list of instances ({@link
com.xerox.amazonws.ec2.ReservationDescription.Instance#instanceId}.
+ * @param filters map of filters to apply to this request. (fingerprint
or key-name currently)
+ * @return A list of {@link
com.xerox.amazonws.ec2.ReservationDescription} instances.
+ * @throws EC2Exception wraps checked exceptions
+ */
+ public List<ReservationDescription> describeInstances(List<String>
instanceIds, Map<String, List<String>> filters) throws EC2Exception {
Map<String, String> params = new HashMap<String, String>();
for (int i=0 ; i<instanceIds.size(); i++) {
params.put("InstanceId."+(i+1), instanceIds.get(i));
}
+ createFilterParams(params, filters);
+
HttpGet method = new HttpGet();
DescribeInstancesResponse response =
makeRequestInt(method, "DescribeInstances", params,
DescribeInstancesResponse.class);
@@ -1018,11 +1097,26 @@
* @throws EC2Exception wraps checked exceptions
*/
public List<GroupDescription> describeSecurityGroups(List<String>
groupNames)
+ throws EC2Exception {
+ return describeSecurityGroups(groupNames, null);
+ }
+
+ /**
+ * Gets a list of security groups and their associated permissions.
+ *
+ * @param groupNames A list of groups to describe.
+ * @param filters map of filters to apply to this request.
+ * @return A list of groups ({@link GroupDescription}.
+ * @throws EC2Exception wraps checked exceptions
+ */
+ public List<GroupDescription> describeSecurityGroups(List<String>
groupNames, Map<String, List<String>> filters)
throws EC2Exception {
Map<String, String> params = new HashMap<String, String>();
for (int i=0 ; i<groupNames.size(); i++) {
params.put("GroupName."+(i+1), groupNames.get(i));
}
+ createFilterParams(params, filters);
+
HttpGet method = new HttpGet();
DescribeSecurityGroupsResponse response =
makeRequestInt(method, "DescribeSecurityGroups", params,
DescribeSecurityGroupsResponse.class);
@@ -1198,11 +1292,28 @@
* TODO: need to return request id
*/
public List<KeyPairInfo> describeKeyPairs(List<String> keyIds)
+ throws EC2Exception {
+ return describeKeyPairs(keyIds, null);
+ }
+
+ /**
+ * Lists public/private keypairs. NOTE: the KeyPairInfo.getMaterial()
method will return null
+ * because this API call doesn't return the keypair material.
+ *
+ * @param keyIds A list of keypairs.
+ * @param filters map of filters to apply to this request. (fingerprint
or key-name currently)
+ * @return A list of keypair descriptions ({@link KeyPairInfo}).
+ * @throws EC2Exception wraps checked exceptions
+ * TODO: need to return request id
+ */
+ public List<KeyPairInfo> describeKeyPairs(List<String> keyIds,
Map<String, List<String>> filters)
throws EC2Exception {
Map<String, String> params = new HashMap<String, String>();
for (int i=0 ; i<keyIds.size(); i++) {
params.put("KeyName."+(i+1), keyIds.get(i));
}
+ createFilterParams(params, filters);
+
HttpGet method = new HttpGet();
DescribeKeyPairsResponse response =
makeRequestInt(method, "DescribeKeyPairs", params,
DescribeKeyPairsResponse.class);
@@ -1233,6 +1344,28 @@
throw new EC2Exception("Could not delete keypair : "+keyName+". No
reason given.");
}
}
+
+ /**
+ * This method imports a pubic key from an RSA key pair that you created.
+ *
+ * @param keyName the name you are assigning to this key pair
+ * @param keyMaterial the public key material
+ * @return information about the keypair
+ * @throws EC2Exception wraps checked exceptions
+ */
+ public KeyPairInfo importKeyPair(String keyName, String keyMaterial)
throws EC2Exception {
+ Map<String, String> params = new HashMap<String, String>();
+
+ params.put("KeyName", keyName);
+ params.put("PublicKeyMaterial", new
String(Base64.encodeBase64(keyMaterial.getBytes())));
+
+ HttpGet method = new HttpGet();
+ ImportKeyPairResponse response =
+ makeRequestInt(method, "ImportKeyPair", params,
ImportKeyPairResponse.class);
+
+
+ return new KeyPairInfo(keyName, response.getKeyFingerprint(),
keyMaterial);
+ }
/**
* Enumerates image list attribute operation types.
@@ -1411,12 +1544,26 @@
* @throws EC2Exception wraps checked exceptions
*/
public List<AvailabilityZone> describeAvailabilityZones(List<String>
zones) throws EC2Exception {
+ return describeAvailabilityZones(zones, null);
+ }
+
+ /**
+ * Returns a list of availability zones and their status.
+ *
+ * @param zones a list of zones to limit the results, or null
+ * @param filters map of filters to apply to this request. (fingerprint
or key-name currently)
+ * @return a list of zones and their availability
+ * @throws EC2Exception wraps checked exceptions
+ */
+ public List<AvailabilityZone> describeAvailabilityZones(List<String>
zones, Map<String, List<String>> filters) throws EC2Exception {
Map<String, String> params = new HashMap<String, String>();
if (zones != null && zones.size() > 0) {
for (int i=0 ; i<zones.size(); i++) {
params.put("ZoneName."+(i+1), zones.get(i));
}
}
+ createFilterParams(params, filters);
+
HttpGet method = new HttpGet();
DescribeAvailabilityZonesResponse response =
makeRequestInt(method, "DescribeAvailabilityZones", params,
DescribeAvailabilityZonesResponse.class);
@@ -1442,12 +1589,26 @@
* @throws EC2Exception wraps checked exceptions
*/
public List<AddressInfo> describeAddresses(List<String> addresses) throws
EC2Exception {
+ return describeAddresses(addresses, null);
+ }
+
+ /**
+ * Returns a list of addresses associated with this account.
+ *
+ * @param addresses a list of zones to limit the results, or null
+ * @param filters map of filters to apply to this request. (fingerprint
or key-name currently)
+ * @return a list of addresses and their associated instance
+ * @throws EC2Exception wraps checked exceptions
+ */
+ public List<AddressInfo> describeAddresses(List<String> addresses,
Map<String, List<String>> filters) throws EC2Exception {
Map<String, String> params = new HashMap<String, String>();
if (addresses != null && addresses.size() > 0) {
for (int i=0 ; i<addresses.size(); i++) {
params.put("PublicIp."+(i+1), addresses.get(i));
}
}
+ createFilterParams(params, filters);
+
HttpGet method = new HttpGet();
DescribeAddressesResponse response =
makeRequestInt(method, "DescribeAddresses", params,
DescribeAddressesResponse.class);
@@ -1552,7 +1713,7 @@
makeRequestInt(method, "CreateVolume", params,
CreateVolumeResponse.class);
return new VolumeInfo(response.getVolumeId(), response.getSize(),
response.getSnapshotId(), response.getAvailabilityZone(),
response.getStatus(),
- response.getCreateTime().toGregorianCalendar());
+ response.getCreateTime().toGregorianCalendar(), null);
}
/**
@@ -1599,10 +1760,27 @@
* @throws EC2Exception wraps checked exceptions
*/
public List<VolumeInfo> describeVolumes(List<String> volumeIds) throws
EC2Exception {
+ return describeVolumes(volumeIds, null);
+ }
+
+ /**
+ * Gets a list of EBS volumes for this account.
+ * <p>
+ * If the list of volume IDs is empty then a list of all volumes owned
+ * by the caller will be returned. Otherwise the list will contain
+ * information for the requested volumes only.
+ *
+ * @param volumeIds A list of volumes ({@link
com.xerox.amazonws.ec2.VolumeInfo}.
+ * @param filters map of filters to apply to this request. (fingerprint
or key-name currently)
+ * @return A list of {@link com.xerox.amazonws.ec2.VolumeInfo} volumes.
+ * @throws EC2Exception wraps checked exceptions
+ */
+ public List<VolumeInfo> describeVolumes(List<String> volumeIds,
Map<String, List<String>> filters) throws EC2Exception {
Map<String, String> params = new HashMap<String, String>();
for (int i=0 ; i<volumeIds.size(); i++) {
params.put("VolumeId."+(i+1), volumeIds.get(i));
}
+ createFilterParams(params, filters);
HttpGet method = new HttpGet();
DescribeVolumesResponse response =
makeRequestInt(method, "DescribeVolumes", params,
DescribeVolumesResponse.class);
@@ -1613,7 +1791,7 @@
DescribeVolumesSetItemResponseType item =
(DescribeVolumesSetItemResponseType) reservations_iter.next();
VolumeInfo vol = new VolumeInfo(item.getVolumeId(), item.getSize(),
item.getSnapshotId(), item.getAvailabilityZone(), item.getStatus(),
- item.getCreateTime().toGregorianCalendar());
+ item.getCreateTime().toGregorianCalendar(),
getTagSet(item.getTagSet()));
AttachmentSetResponseType set = item.getAttachmentSet();
Iterator attachments_iter = set.getItems().iterator();
while (attachments_iter.hasNext()) {
@@ -1698,7 +1876,7 @@
response.getStartTime().toGregorianCalendar(),
response.getProgress(), response.getOwnerId(),
response.getVolumeSize(), response.getDescription(),
- null);
+ null, null);
}
/**
@@ -1763,6 +1941,25 @@
*/
public List<SnapshotInfo> describeSnapshots(List<String> snapshotIds,
String owner, String restorableBy) throws EC2Exception {
+ return describeSnapshots(snapshotIds, owner, restorableBy, null);
+ }
+
+ /**
+ * Gets a list of EBS snapshots for this account.
+ * <p>
+ * If the list of snapshot IDs is empty then a list of all snapshots owned
+ * by the caller will be returned. Otherwise the list will contain
+ * information for the requested snapshots only.
+ *
+ * @param snapshotIds A list of snapshots ({@link
com.xerox.amazonws.ec2.SnapshotInfo}.
+ * @param owner limits results to snapshots owned by this user
+ * @param restorableBy limits results to account that can create volumes
from this snapshot
+ * @param filters map of filters to apply to this request. (fingerprint
or key-name currently)
+ * @return A list of {@link com.xerox.amazonws.ec2.VolumeInfo} volumes.
+ * @throws EC2Exception wraps checked exceptions
+ */
+ public List<SnapshotInfo> describeSnapshots(List<String> snapshotIds,
+ String owner, String restorableBy, Map<String, List<String>>
filters) throws EC2Exception {
Map<String, String> params = new HashMap<String, String>();
for (int i=0 ; i<snapshotIds.size(); i++) {
params.put("SnapshotId."+(i+1), snapshotIds.get(i));
@@ -1773,6 +1970,7 @@
if (restorableBy != null) {
params.put("RestorableBy", owner);
}
+ createFilterParams(params, filters);
HttpGet method = new HttpGet();
DescribeSnapshotsResponse response =
makeRequestInt(method, "DescribeSnapshots", params,
DescribeSnapshotsResponse.class);
@@ -1786,7 +1984,7 @@
item.getStartTime().toGregorianCalendar(),
item.getProgress(), item.getOwnerId(),
item.getVolumeSize(), item.getDescription(),
- item.getOwnerAlias());
+ item.getOwnerAlias(), getTagSet(item.getTagSet()));
result.add(vol);
}
return result;
@@ -1878,12 +2076,25 @@
* @throws EC2Exception wraps checked exceptions
*/
public List<RegionInfo> describeRegions(List<String> regions) throws
EC2Exception {
+ return describeRegions(regions, null);
+ }
+
+ /**
+ * Returns a list of regions
+ *
+ * @param regions a list of regions to limit the results, or null
+ * @param filters map of filters to apply to this request. (fingerprint
or key-name currently)
+ * @return a list of regions and endpoints
+ * @throws EC2Exception wraps checked exceptions
+ */
+ public List<RegionInfo> describeRegions(List<String> regions, Map<String,
List<String>> filters) throws EC2Exception {
Map<String, String> params = new HashMap<String, String>();
if (regions != null && regions.size() > 0) {
for (int i=0 ; i<regions.size(); i++) {
params.put("Region."+(i+1), regions.get(i));
}
}
+ createFilterParams(params, filters);
HttpGet method = new HttpGet();
DescribeRegionsResponse response =
makeRequestInt(method, "DescribeRegions", params,
DescribeRegionsResponse.class);
@@ -1984,10 +2195,23 @@
* @throws EC2Exception wraps checked exceptions
*/
public List<BundleInstanceInfo> describeBundleTasks(List<String>
bundleIds) throws EC2Exception {
+ return describeBundleTasks(bundleIds, null);
+ }
+
+ /**
+ * Returns a list of current bundling tasks. An empty list causes all
tasks to be returned.
+ *
+ * @param bundleIds the Ids of the bundle task to describe
+ * @param filters map of filters to apply to this request. (fingerprint
or key-name currently)
+ * @return information about the cancelled task
+ * @throws EC2Exception wraps checked exceptions
+ */
+ public List<BundleInstanceInfo> describeBundleTasks(List<String>
bundleIds, Map<String, List<String>> filters) throws EC2Exception {
Map<String, String> params = new HashMap<String, String>();
for (int i=0 ; i<bundleIds.size(); i++) {
params.put("BundleId."+(i+1), bundleIds.get(i));
}
+ createFilterParams(params, filters);
HttpGet method = new HttpGet();
DescribeBundleTasksResponse response =
makeRequestInt(method, "DescribeBundleTasks", params,
DescribeBundleTasksResponse.class);
@@ -2004,18 +2228,30 @@
}
/**
- * Returns a list of Reserved Instance offerings that are available for
purchase.
+ * Returns a list of Reserved Instance that are available for purchase.
*
* @param instanceIds specific reserved instance offering ids to return
* @throws EC2Exception wraps checked exceptions
*/
public List<ReservedInstances> describeReservedInstances(List<String>
instanceIds) throws EC2Exception {
+ return describeReservedInstances(instanceIds, null);
+ }
+
+ /**
+ * Returns a list of Reserved Instance that are available for purchase.
+ *
+ * @param instanceIds specific reserved instance offering ids to return
+ * @param filters map of filters to apply to this request. (fingerprint
or key-name currently)
+ * @throws EC2Exception wraps checked exceptions
+ */
+ public List<ReservedInstances> describeReservedInstances(List<String>
instanceIds, Map<String, List<String>> filters) throws EC2Exception {
Map<String, String> params = new HashMap<String, String>();
if (instanceIds != null) {
for (int i=0 ; i<instanceIds.size(); i++) {
params.put("ReservedInstanceId."+(i+1), instanceIds.get(i));
}
}
+ createFilterParams(params, filters);
HttpGet method = new HttpGet();
DescribeReservedInstancesResponse response =
makeRequestInt(method, "DescribeReservedInstances", params,
DescribeReservedInstancesResponse.class);
@@ -2029,7 +2265,8 @@
type.getAvailabilityZone(), type.getStart().toGregorianCalendar(),
type.getDuration(), type.getFixedPrice(), type.getUsagePrice(),
type.getProductDescription(),
- type.getInstanceCount().intValue(), type.getState()));
+ type.getInstanceCount().intValue(), type.getState(),
+ getTagSet(type.getTagSet())));
}
return ret;
}
@@ -2047,6 +2284,24 @@
public List<ProductDescription>
describeReservedInstancesOfferings(List<String> offeringIds,
InstanceType instanceType, String availabilityZone,
String productDescription) throws EC2Exception {
+ return describeReservedInstancesOfferings(offeringIds, instanceType,
availabilityZone,
+ productDescription, null);
+ }
+
+ /**
+ * Returns a list of Reserved Instance offerings that are available for
purchase.
+ *
+ * @param offeringIds specific reserved instance offering ids to return
+ * @param instanceType the type of instance offering to be returned
+ * @param availabilityZone the availability zone to get offerings for
+ * @param productDescription limit results to those with a matching
product description
+ * @param filters map of filters to apply to this request. (fingerprint
or key-name currently)
+ * @return a list of product descriptions
+ * @throws EC2Exception wraps checked exceptions
+ */
+ public List<ProductDescription>
describeReservedInstancesOfferings(List<String> offeringIds,
+ InstanceType instanceType, String availabilityZone,
+ String productDescription, Map<String, List<String>> filters)
throws EC2Exception {
Map<String, String> params = new HashMap<String, String>();
if (offeringIds != null) {
for (int i=0 ; i<offeringIds.size(); i++) {
@@ -2062,6 +2317,7 @@
if (productDescription != null) {
params.put("ProductDescription", productDescription);
}
+ createFilterParams(params, filters);
HttpGet method = new HttpGet();
DescribeReservedInstancesOfferingsResponse response =
makeRequestInt(method, "DescribeReservedInstancesOfferings", params,
DescribeReservedInstancesOfferingsResponse.class);
@@ -2074,7 +2330,7 @@
InstanceType.getTypeFromString(type.getInstanceType()),
type.getAvailabilityZone(),
type.getDuration(), type.getFixedPrice(), type.getUsagePrice(),
- type.getProductDescription()));
+ type.getProductDescription(), null));
}
return ret;
}
@@ -2146,6 +2402,14 @@
}
public List<SpotPriceHistoryItem> describeSpotPriceHistory(Calendar
start, Calendar end, String productDescription, InstanceType...
instanceTypes) throws EC2Exception {
+ List<InstanceType> types = new ArrayList<InstanceType>();
+ for (int i = 0; i < instanceTypes.length; i++) {
+ types.add(instanceTypes[i]);
+ }
+ return describeSpotPriceHistory(start, end, productDescription, types,
null);
+ }
+
+ public List<SpotPriceHistoryItem> describeSpotPriceHistory(Calendar
start, Calendar end, String productDescription, List<InstanceType>
instanceTypes, Map<String, List<String>> filters) throws EC2Exception {
Map<String, String> params = new HashMap<String, String>();
if (start != null) {
params.put("StartTime", httpDate(start));
@@ -2156,11 +2420,14 @@
if (productDescription != null) {
params.put("ProductDescription", productDescription);
}
- for (int i = 0; i < instanceTypes.length; i++) {
- InstanceType instanceType = instanceTypes[i];
- params.put("InstanceType." + (i + 1), instanceType.getTypeId());
- }
-
+ if (instanceTypes != null) {
+ int i=0;
+ for (InstanceType type: instanceTypes) {
+ params.put("InstanceType." + (i + 1), type.getTypeId());
+ i++;
+ }
+ }
+ createFilterParams(params, filters);
HttpGet method = new HttpGet();
List<SpotPriceHistoryItem> ret = new ArrayList<SpotPriceHistoryItem>();
DescribeSpotPriceHistoryResponse response =
@@ -2177,6 +2444,17 @@
}
public List<SpotInstanceRequest> describeSpotInstanceRequests() throws
EC2Exception {
+ return describeSpotInstanceRequests(null, null);
+ }
+
+ public List<SpotInstanceRequest>
describeSpotInstanceRequests(List<String> requestIds, Map<String,
List<String>> filters) throws EC2Exception {
+ Map<String, String> params = new HashMap<String, String>();
+ if (requestIds != null) {
+ for (int i=0 ; i<requestIds.size(); i++) {
+ params.put("SpotInstanceRequestId."+(i+1), requestIds.get(i));
+ }
+ }
+ createFilterParams(params, filters);
HttpGet method = new HttpGet();
List<SpotInstanceRequest> ret = new ArrayList<SpotInstanceRequest>();
DescribeSpotInstanceRequestsResponse response =
@@ -2185,7 +2463,7 @@
List<SpotInstanceRequestSetItemType> items =
response.getSpotInstanceRequestSet().getItems();
if (items != null) {
for (SpotInstanceRequestSetItemType item : items) {
- ret.add(new SpotInstanceRequest(item));
+ ret.add(new SpotInstanceRequest(item, getTagSet(item.getTagSet())));
}
}
return ret;
@@ -2204,7 +2482,7 @@
List<SpotInstanceRequestSetItemType> items =
response.getSpotInstanceRequestSet().getItems();
if (items != null) {
for (SpotInstanceRequestSetItemType item : items) {
- ret.add(new SpotInstanceRequest(item));
+ ret.add(new SpotInstanceRequest(item, null));
}
}
@@ -2332,10 +2610,23 @@
* @throws EC2Exception wraps checked exceptions
*/
public List<PlacementGroupInfo> describePlacementGroups(List<String>
groupNames) throws EC2Exception {
+ return describePlacementGroups(groupNames, null);
+ }
+
+ /**
+ * This method describes the placement groups.
+ *
+ * @param groupNames names of 1 or more groups to get information about,
null for all groups
+ * @param filters map of filters to apply to this request. (fingerprint
or key-name currently)
+ * @return information about the groups
+ * @throws EC2Exception wraps checked exceptions
+ */
+ public List<PlacementGroupInfo> describePlacementGroups(List<String>
groupNames, Map<String, List<String>> filters) throws EC2Exception {
Map<String, String> params = new HashMap<String, String>();
for (int i=0 ; i<groupNames.size(); i++) {
params.put("GroupName."+(i+1), groupNames.get(i));
}
+ createFilterParams(params, filters);
HttpGet method = new HttpGet();
DescribePlacementGroupsResponse response =
makeRequestInt(method, "DescribePlacementGroups", params,
DescribePlacementGroupsResponse.class);
@@ -2350,6 +2641,124 @@
}
return ret;
}
+
+ /**
+ * Adds or overwites one or more tags for the specified resource or
resources. 10 tags max
+ * per resource.
+ *
+ * @param resourceIds 1 or more resource ids
+ * @param tagSet set of tags to assign to the resource(s)
+ * @throws EC2Exception wraps checked exceptions
+ */
+ public void createTags(List<String> resourceIds, Map<String, String>
tagSet) throws EC2Exception {
+ Map<String, String> params = new HashMap<String, String>();
+ for (int i=0 ; i<resourceIds.size(); i++) {
+ params.put("ResourceId."+(i+1), resourceIds.get(i));
+ }
+ int i=1;
+ for (String key : tagSet.keySet()) {
+ String val = tagSet.get(key);
+ if (val != null && val.length() > 0) {
+ params.put("Tag."+i+".Key", key);
+ params.put("Tag."+i+".Value", val);
+ i++;
+ }
+ }
+ HttpGet method = new HttpGet();
+ CreateTagsResponse response =
+ makeRequestInt(method, "CreateTags", params, CreateTagsResponse.class);
+ if (!response.isReturn()) {
+ throw new EC2Exception("Could not create tags (no reason given).");
+ }
+ }
+
+ /**
+ * Deletes the specified tag(s) from the specified resource(s)
+ *
+ * @param resourceIds 1 or more resource ids
+ * @param tagSet set of tags to assign to the resource(s)
+ * @throws EC2Exception wraps checked exceptions
+ */
+ public void deleteTags(List<String> resourceIds, Map<String, String>
tagSet) throws EC2Exception {
+ Map<String, String> params = new HashMap<String, String>();
+ for (int i=0 ; i<resourceIds.size(); i++) {
+ params.put("ResourceId."+(i+1), resourceIds.get(i));
+ }
+ int i=1;
+ for (String key : tagSet.keySet()) {
+ String val = tagSet.get(key);
+ if (val != null && val.length() > 0) {
+ params.put("Tag."+i+".Key", key);
+ params.put("Tag."+i+".Value", val);
+ i++;
+ }
+ }
+ HttpGet method = new HttpGet();
+ DeleteTagsResponse response =
+ makeRequestInt(method, "DeleteTags", params, DeleteTagsResponse.class);
+ if (!response.isReturn()) {
+ throw new EC2Exception("Could not delete tags (no reason given).");
+ }
+ }
+
+ /**
+ * Gets a list of your tags with optional filtering to limit the results.
+ *
+ * @param filters map of filters to apply to this request. (fingerprint
or key-name currently)
+ * @return A map of tag values
+ * @throws EC2Exception wraps checked exceptions
+ */
+ public List<TagInfo> describeTags(Map<String, List<String>> filters)
throws EC2Exception {
+ Map<String, String> params = new HashMap<String, String>();
+ createFilterParams(params, filters);
+ HttpGet method = new HttpGet();
+ DescribeTagsResponse response =
+ makeRequestInt(method, "DescribeTags", params,
DescribeTagsResponse.class);
+ List<TagInfo> ret = new ArrayList<TagInfo>();
+ TagSetType res_set = response.getTagSet();
+ Iterator tags_iter = res_set.getItems().iterator();
+ while (tags_iter.hasNext()) {
+ TagSetItemType item = (TagSetItemType) tags_iter.next();
+ ret.add(new TagInfo(item.getResourceId(), item.getResourceType(),
+ item.getKey(), item.getValue()));
+ }
+ return ret;
+ }
+
+ // helper method to create common filter parameters
+ protected void createFilterParams(Map<String, String> params, Map<String,
List<String>> filters) {
+ if (params == null) throw new IllegalArgumentException("params must
always be non-null");
+ if (filters == null) return;
+ int i=1;
+ for (String key : filters.keySet()) {
+ List<String> vals = filters.get(key);
+ if (vals != null && vals.size() > 0) {
+ params.put("Filter."+i+".Name", key);
+ Iterator<String> iter = vals.iterator();
+ int j=1;
+ while (iter.hasNext()) {
+ String val = iter.next();
+ params.put("Filter."+i+".Value."+j, val);
+ j++;
+ }
+ i++;
+ }
+ }
+ }
+
+ // helper method to construct tag set objects from results
+ protected Map<String, String> getTagSet(ResourceTagSetType setType) {
+ Map<String, String> ret = new HashMap<String, String>();
+ if (setType == null) return ret;
+
+ List<ResourceTagSetItemType> tagList = setType.getItems();
+ if (tagList != null) {
+ for (ResourceTagSetItemType tag : tagList) {
+ ret.put(tag.getKey(), tag.getValue());
+ }
+ }
+ return ret;
+ }
protected <T> T makeRequestInt(HttpRequestBase method, String action,
Map<String, String> params, Class<T> respType)
throws EC2Exception {
=======================================
--- /trunk/java/com/xerox/amazonws/ec2/ProductDescription.java Wed Mar 18
15:11:17 2009
+++ /trunk/java/com/xerox/amazonws/ec2/ProductDescription.java Wed Jun 22
06:03:24 2011
@@ -17,6 +17,8 @@
package com.xerox.amazonws.ec2;
+import java.util.Map;
+
public class ProductDescription {
private String id;
private InstanceType instanceType;
@@ -25,9 +27,11 @@
private double fixedPrice;
private double usagePrice;
private String productDescription;
+ private Map<String, String> tagSet;
public ProductDescription(String reservedInstanceOfferingId, InstanceType
instanceType, String availabilityZone,
- long duration, double fixedPrice, double usagePrice, String
productDescription) {
+ long duration, double fixedPrice, double usagePrice, String
productDescription,
+ Map<String, String> tagSet) {
this.id = reservedInstanceOfferingId;
this.instanceType = instanceType;
this.availabilityZone = availabilityZone;
@@ -35,6 +39,7 @@
this.fixedPrice = fixedPrice;
this.usagePrice = usagePrice;
this.productDescription = productDescription;
+ this.tagSet = tagSet;
}
public String getId() {
@@ -64,6 +69,10 @@
public String getProductDescription() {
return productDescription;
}
+
+ public Map<String, String> getTagSet() {
+ return tagSet;
+ }
public String toString() {
return "ProductDescription[id=" + this.id + ", type=" +
instanceType.getTypeId() +
=======================================
--- /trunk/java/com/xerox/amazonws/ec2/ReservationDescription.java Wed Jul
14 10:15:41 2010
+++ /trunk/java/com/xerox/amazonws/ec2/ReservationDescription.java Wed Jun
22 06:03:24 2011
@@ -19,8 +19,10 @@
import java.util.ArrayList;
import java.util.Calendar;
+import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import
com.xerox.amazonws.typica.jaxb.EbsInstanceBlockDeviceMappingResponseType;
import com.xerox.amazonws.typica.jaxb.GroupItemType;
@@ -31,6 +33,8 @@
import com.xerox.amazonws.typica.jaxb.InstanceStateType;
import com.xerox.amazonws.typica.jaxb.ProductCodesSetItemType;
import com.xerox.amazonws.typica.jaxb.ProductCodeType;
+import com.xerox.amazonws.typica.jaxb.ResourceTagSetItemType;
+import com.xerox.amazonws.typica.jaxb.ResourceTagSetType;
import com.xerox.amazonws.typica.jaxb.RunningInstancesItemType;
import com.xerox.amazonws.typica.jaxb.RunningInstancesSetType;
@@ -168,6 +172,9 @@
private String instanceLifecycle;
private String spotInstanceRequestId;
private String virtualizationType;
+ private String clientToken;
+ private Map<String, String> tagSet;
+ private String hypervisor;
public Instance(String imageId, String instanceId, String privateDnsName,
String dnsName, String stateName, String stateCode, String reason,
@@ -258,6 +265,18 @@
this.instanceLifecycle = rsp_item.getInstanceLifecycle();
this.spotInstanceRequestId = rsp_item.getSpotInstanceRequestId();
this.virtualizationType = rsp_item.getVirtualizationType();
+ this.clientToken = rsp_item.getClientToken();
+ this.tagSet = new HashMap<String, String>();
+ ResourceTagSetType tagsettype = rsp_item.getTagSet();
+ if (tagsettype != null ) {
+ List<ResourceTagSetItemType> tagList = tagsettype.getItems();
+ if (tagList != null) {
+ for (ResourceTagSetItemType tag : tagList) {
+ tagSet.put(tag.getKey(), tag.getValue());
+ }
+ }
+ }
+ this.hypervisor = rsp_item.getHypervisor();
}
public String getImageId() {
=======================================
--- /trunk/java/com/xerox/amazonws/ec2/ReservedInstances.java Tue Oct 13
16:26:34 2009
+++ /trunk/java/com/xerox/amazonws/ec2/ReservedInstances.java Wed Jun 22
06:03:24 2011
@@ -18,6 +18,7 @@
package com.xerox.amazonws.ec2;
import java.util.Calendar;
+import java.util.Map;
public class ReservedInstances extends ProductDescription {
private Calendar start;
@@ -28,9 +29,9 @@
String availabilityZone, Calendar start, long duration,
double fixedPrice, double usagePrice,
String productDescription, int instanceCount,
- String state) {
+ String state, Map<String, String> tagSet) {
super(reservedInstancesId, instanceType, availabilityZone,
- duration, fixedPrice, usagePrice, productDescription);
+ duration, fixedPrice, usagePrice, productDescription, tagSet);
this.start = start;
this.instanceCount = instanceCount;
this.state = state;
=======================================
--- /trunk/java/com/xerox/amazonws/ec2/SnapshotInfo.java Sun Mar 21
15:06:07 2010
+++ /trunk/java/com/xerox/amazonws/ec2/SnapshotInfo.java Wed Jun 22
06:03:24 2011
@@ -20,6 +20,7 @@
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
+import java.util.Map;
/**
* An instance of this class represents an EC2 Snapshot.
@@ -39,10 +40,12 @@
private String volumeSize;
private String description;
private String ownerAlias;
+ private Map<String, String> tagSet;
public SnapshotInfo(String snapshotId, String volumeId,
String status, Calendar startTime, String progress,
- String ownerId, String volumeSize, String description, String
ownerAlias) {
+ String ownerId, String volumeSize, String description, String
ownerAlias,
+ Map<String, String> tagSet) {
this.snapshotId = snapshotId;
this.volumeId = volumeId;
this.status = status;
@@ -52,6 +55,7 @@
this.volumeSize = volumeSize;
this.description = description;
this.ownerAlias = ownerAlias;
+ this.tagSet = tagSet;
}
public String getSnapshotId() {
@@ -89,6 +93,10 @@
public String getOwnerAlias() {
return ownerAlias;
}
+
+ public Map<String, String> getTagSet() {
+ return tagSet;
+ }
public String toString() {
return "Snapshot[id=" + this.snapshotId
=======================================
--- /trunk/java/com/xerox/amazonws/ec2/SpotInstanceRequest.java Mon Feb 22
16:30:34 2010
+++ /trunk/java/com/xerox/amazonws/ec2/SpotInstanceRequest.java Wed Jun 22
06:03:24 2011
@@ -3,6 +3,7 @@
import com.xerox.amazonws.typica.jaxb.SpotInstanceRequestSetItemType;
import java.util.Calendar;
+import java.util.Map;
public class SpotInstanceRequest {
protected String spotInstanceRequestId;
@@ -18,11 +19,12 @@
protected String instanceId;
protected Calendar createTime;
protected String productDescription;
+ protected Map<String, String> tagSet;
public SpotInstanceRequest() {
}
- SpotInstanceRequest(SpotInstanceRequestSetItemType item) {
+ SpotInstanceRequest(SpotInstanceRequestSetItemType item, Map<String,
String> tagSet) {
this.spotInstanceRequestId = item.getSpotInstanceRequestId();
this.spotPrice = Double.parseDouble(item.getSpotPrice());
this.type = SpotInstanceType.getTypeFromString(item.getType());
@@ -32,6 +34,7 @@
this.instanceId = item.getInstanceId();
this.createTime = item.getCreateTime().toGregorianCalendar();
this.productDescription = item.getProductDescription();
+ this.tagSet = tagSet;
}
public String getSpotInstanceRequestId() {
@@ -69,6 +72,10 @@
public String getProductDescription() {
return productDescription;
}
+
+ public Map<String, String> getTagSet() {
+ return tagSet;
+ }
@Override
public String toString() {
=======================================
--- /trunk/java/com/xerox/amazonws/ec2/VolumeInfo.java Thu Aug 21 04:20:27
2008
+++ /trunk/java/com/xerox/amazonws/ec2/VolumeInfo.java Wed Jun 22 06:03:24
2011
@@ -20,6 +20,7 @@
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
+import java.util.Map;
/**
* An instance of this class represents an EC2 Volume.
@@ -37,15 +38,17 @@
private String status;
private Calendar createTime;
private List<AttachmentInfo> attachmentSets = new
ArrayList<AttachmentInfo>();
+ private Map<String, String> tagSet;
public VolumeInfo(String volumeId, String size, String snapshotId, String
zone,
- String status, Calendar createTime) {
+ String status, Calendar createTime, Map<String, String> tagSet) {
this.volumeId = volumeId;
this.size = size;
this.snapshotId = snapshotId;
this.zone = zone;
this.status = status;
this.createTime = createTime;
+ this.tagSet = tagSet;
}
public String getVolumeId() {
@@ -83,6 +86,10 @@
public List<AttachmentInfo> getAttachmentInfo() {
return attachmentSets;
}
+
+ public Map<String, String> getTagSet() {
+ return tagSet;
+ }
public String toString() {
return "Volume[id=" + this.volumeId + ", size="
=======================================
--- /trunk/xsd/ec2.xsd Wed Jul 14 10:15:41 2010
+++ /trunk/xsd/ec2.xsd Wed Jun 22 06:03:24 2011
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
- xmlns:tns="http://ec2.amazonaws.com/doc/2010-06-15/"
- targetNamespace="http://ec2.amazonaws.com/doc/2010-06-15/"
+ xmlns:tns="http://ec2.amazonaws.com/doc/2010-11-15/"
+ targetNamespace="http://ec2.amazonaws.com/doc/2010-11-15/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
@@ -92,6 +92,21 @@
<xs:element name="keyFingerprint" type="xs:string"/>
<xs:element name="keyMaterial" type="xs:string"/>
</xs:sequence>
+ </xs:complexType>
+ <xs:element name="ImportKeyPair" type="tns:ImportKeyPairType"/>
+ <xs:element name="ImportKeyPairResponse"
type="tns:ImportKeyPairResponseType"/>
+ <xs:complexType name="ImportKeyPairType">
+ <xs:sequence>
+ <xs:element name="keyName" type="xs:string"/>
+ <xs:element name="publicKeyMaterial" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ImportKeyPairResponseType">
+ <xs:sequence>
+ <xs:element name="requestId" type="xs:string"/>
+ <xs:element name="keyName" type="xs:string"/>
+ <xs:element name="keyFingerprint" type="xs:string"/>
+ </xs:sequence>
</xs:complexType>
<xs:element name="DeleteKeyPair" type="tns:DeleteKeyPairType"/>
<xs:complexType name="DeleteKeyPairType">
@@ -110,6 +125,7 @@
<xs:complexType name="DescribeKeyPairsType">
<xs:sequence>
<xs:element name="keySet" type="tns:DescribeKeyPairsInfoType"/>
+ <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="DescribeKeyPairsInfoType">
@@ -149,19 +165,20 @@
<xs:element name="keyName" type="xs:string" minOccurs="0"/>
<xs:element name="groupSet" type="tns:GroupSetType"/>
<xs:element name="additionalInfo" type="xs:string" minOccurs="0"/>
- <xs:element name="userData" type="tns:UserDataType" minOccurs="0"
maxOccurs="1"/>
- <xs:element name="addressingType" type="xs:string" minOccurs="0"
maxOccurs="1"/>
+ <xs:element name="userData" type="tns:UserDataType" minOccurs="0"/>
+ <xs:element name="addressingType" type="xs:string" minOccurs="0"/>
<xs:element name="instanceType" type="xs:string"/>
- <xs:element name="placement" type="tns:PlacementRequestType"
minOccurs="0" maxOccurs="1"/>
- <xs:element name="kernelId" type="xs:string" minOccurs="0"
maxOccurs="1"/>
- <xs:element name="ramdiskId" type="xs:string" minOccurs="0"
maxOccurs="1"/>
- <xs:element name="blockDeviceMapping" type="tns:BlockDeviceMappingType"
minOccurs="0" maxOccurs="1"/>
- <xs:element name="monitoring" type="tns:MonitoringInstanceType"
minOccurs="0" maxOccurs="1"/>
- <xs:element name="subnetId" type="xs:string" minOccurs="0"
maxOccurs="1"/>
- <xs:element name="disableApiTermination" type="xs:boolean"
minOccurs="0" maxOccurs="1"/>
- <xs:element name="instanceInitiatedShutdownBehavior" type="xs:string"
minOccurs="0" maxOccurs="1"/>
- <xs:element name="license" type="tns:InstanceLicenseRequestType"
minOccurs="0" maxOccurs="1"/>
- <xs:element name="privateIpAddress" type="xs:string" minOccurs="0"
maxOccurs="1"/>
+ <xs:element name="placement" type="tns:PlacementRequestType"
minOccurs="0"/>
+ <xs:element name="kernelId" type="xs:string" minOccurs="0"/>
+ <xs:element name="ramdiskId" type="xs:string" minOccurs="0"/>
+ <xs:element name="blockDeviceMapping" type="tns:BlockDeviceMappingType"
minOccurs="0"/>
+ <xs:element name="monitoring" type="tns:MonitoringInstanceType"
minOccurs="0"/>
+ <xs:element name="subnetId" type="xs:string" minOccurs="0"/>
+ <xs:element name="disableApiTermination" type="xs:boolean"
minOccurs="0"/>
+ <xs:element name="instanceInitiatedShutdownBehavior" type="xs:string"
minOccurs="0"/>
+ <xs:element name="license" type="tns:InstanceLicenseRequestType"
minOccurs="0"/>
+ <xs:element name="privateIpAddress" type="xs:string" minOccurs="0"/>
+ <xs:element name="clientToken" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="GroupSetType">
@@ -205,18 +222,24 @@
</xs:complexType>
<xs:complexType name="PlacementRequestType">
<xs:sequence>
+ <xs:element name="availabilityZone" type="xs:string" minOccurs="0"/>
+ <xs:element name="groupName" type="xs:string" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="InstancePlacementType">
+ <xs:sequence>
<xs:element name="availabilityZone" type="xs:string" minOccurs="0"
maxOccurs="1"/>
<xs:element name="groupName" type="xs:string" minOccurs="0"
maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="MonitoringInstanceType">
<xs:sequence>
- <xs:element name="enabled" type="xs:boolean" minOccurs="0"
maxOccurs="1"/>
+ <xs:element name="enabled" type="xs:boolean" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="InstanceLicenseRequestType">
<xs:sequence>
- <xs:element name="pool" type="xs:string" minOccurs="1" maxOccurs="1"/>
+ <xs:element name="pool" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="RunInstancesResponse"
type="tns:RunInstancesResponseType"/>
@@ -241,7 +264,7 @@
</xs:complexType>
<xs:complexType name="RunningInstancesSetType">
<xs:sequence>
- <xs:element name="item" type="tns:RunningInstancesItemType"
minOccurs="1" maxOccurs="unbounded"/>
+ <xs:element name="item" type="tns:RunningInstancesItemType"
maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="RunningInstancesItemType">
@@ -253,19 +276,19 @@
<xs:element name="dnsName" type="xs:string" minOccurs="0"/>
<xs:element name="reason" type="xs:string" minOccurs="0"/>
<xs:element name="keyName" type="xs:string" minOccurs="0"/>
- <xs:element name="amiLaunchIndex" type="xs:string" minOccurs="0"
maxOccurs="1"/>
- <xs:element name="productCodes" type="tns:ProductCodesSetType"
minOccurs="0" maxOccurs="1"/>
+ <xs:element name="amiLaunchIndex" type="xs:string" minOccurs="0"/>
+ <xs:element name="productCodes" type="tns:ProductCodesSetType"
minOccurs="0"/>
<xs:element name="instanceType" type="xs:string"/>
<xs:element name="launchTime" type="xs:dateTime"/>
<xs:element name="placement" type="tns:PlacementResponseType"
minOccurs="0"/>
<xs:element name="kernelId" type="xs:string" minOccurs="0"/>
<xs:element name="ramdiskId" type="xs:string" minOccurs="0"/>
<xs:element name="platform" type="xs:string" minOccurs="0"/>
- <xs:element name="monitoring" type="tns:InstanceMonitoringStateType"
minOccurs="0" maxOccurs="1"/>
+ <xs:element name="monitoring" type="tns:InstanceMonitoringStateType"
minOccurs="0"/>
<xs:element name="subnetId" type="xs:string" minOccurs="0"/>
<xs:element name="vpcId" type="xs:string" minOccurs="0"/>
- <xs:element name="privateIpAddress" type="xs:string" minOccurs="0"
maxOccurs="1"/>
- <xs:element name="ipAddress" type="xs:string" minOccurs="0"
maxOccurs="1"/>
+ <xs:element name="privateIpAddress" type="xs:string" minOccurs="0"/>
+ <xs:element name="ipAddress" type="xs:string" minOccurs="0"/>
<xs:element name="stateReason" type="tns:StateReasonType"
minOccurs="0"/>
<xs:element name="architecture" type="xs:string" minOccurs="0"/>
<xs:element name="rootDeviceType" type="xs:string" minOccurs="0"/>
@@ -273,14 +296,17 @@
<xs:element name="blockDeviceMapping"
type="tns:InstanceBlockDeviceMappingResponseType" minOccurs="0"/>
<xs:element name="instanceLifecycle" type="xs:string" minOccurs="0"/>
<xs:element name="spotInstanceRequestId" type="xs:string"
minOccurs="0"/>
- <xs:element name="license" type="tns:InstanceLicenseResponseType"
minOccurs="0" maxOccurs="1"/>
+ <xs:element name="license" type="tns:InstanceLicenseResponseType"
minOccurs="0"/>
<xs:element name="virtualizationType" type="xs:string" minOccurs="0"/>
+ <xs:element name="clientToken" type="xs:string" minOccurs="0"/>
+ <xs:element name="tagSet" type="tns:ResourceTagSetType" minOccurs="0"/>
+ <xs:element name="hypervisor" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="PlacementResponseType">
<xs:sequence>
<xs:element name="availabilityZone" type="xs:string"/>
- <xs:element name="groupName" type="xs:string" minOccurs="0"
maxOccurs="1"/>
+ <xs:element name="groupName" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="StateReasonType">
@@ -312,7 +338,7 @@
</xs:complexType>
<xs:complexType name="InstanceLicenseResponseType">
<xs:sequence>
- <xs:element name="pool" type="xs:string" minOccurs="1" maxOccurs="1"/>
+ <xs:element name="pool" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:element name="GetConsoleOutput" type="tns:GetConsoleOutputType"/>
@@ -455,6 +481,7 @@
<xs:complexType name="DescribeInstancesType">
<xs:sequence>
<xs:element name="instancesSet" type="tns:DescribeInstancesInfoType"/>
+ <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="DescribeInstancesInfoType">
@@ -485,6 +512,7 @@
<xs:element name="executableBySet"
type="tns:DescribeImagesExecutableBySetType" minOccurs="0"/>
<xs:element name="imagesSet" type="tns:DescribeImagesInfoType"/>
<xs:element name="ownersSet" type="tns:DescribeImagesOwnersType"
minOccurs="0"/>
+ <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="DescribeImagesInfoType">
@@ -550,6 +578,8 @@
<xs:element name="rootDeviceName" type="xs:string" minOccurs="0"/>
<xs:element name="blockDeviceMapping" type="tns:BlockDeviceMappingType"
minOccurs="0"/>
<xs:element name="virtualizationType" type="xs:string" minOccurs="0"/>
+ <xs:element name="tagSet" type="tns:ResourceTagSetType" minOccurs="0"/>
+ <xs:element name="hypervisor" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:element name="CreateSecurityGroup"
type="tns:CreateSecurityGroupType"/>
@@ -583,6 +613,7 @@
<xs:complexType name="DescribeSecurityGroupsType">
<xs:sequence>
<xs:element name="securityGroupSet"
type="tns:DescribeSecurityGroupsSetType"/>
+ <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="DescribeSecurityGroupsSetType">
@@ -910,6 +941,7 @@
<xs:complexType name="DescribeAvailabilityZonesType">
<xs:sequence>
<xs:element name="availabilityZoneSet"
type="tns:DescribeAvailabilityZonesSetType"/>
+ <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="DescribeAvailabilityZonesSetType">
@@ -978,6 +1010,7 @@
<xs:complexType name="DescribeAddressesType">
<xs:sequence>
<xs:element name="publicIpsSet" type="tns:DescribeAddressesInfoType"/>
+ <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="DescribeAddressesInfoType">
@@ -1072,6 +1105,7 @@
<xs:complexType name="DescribeVolumesType">
<xs:sequence>
<xs:element name="volumeSet" type="tns:DescribeVolumesSetType"/>
+ <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="DescribeVolumesSetType">
@@ -1105,6 +1139,7 @@
<xs:element name="status" type="xs:string"/>
<xs:element name="createTime" type="xs:dateTime"/>
<xs:element name="attachmentSet" type="tns:AttachmentSetResponseType"/>
+ <xs:element name="tagSet" type="tns:ResourceTagSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="AttachmentSetResponseType">
@@ -1145,9 +1180,9 @@
<xs:complexType name="DetachVolumeType">
<xs:sequence>
<xs:element name="volumeId" type="xs:string"/>
- <xs:element name="instanceId" type="xs:string" minOccurs="0"
maxOccurs="1"/>
- <xs:element name="device" type="xs:string" minOccurs="0" maxOccurs="1"/>
- <xs:element name="force" type="xs:boolean" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="instanceId" type="xs:string" minOccurs="0"/>
+ <xs:element name="device" type="xs:string" minOccurs="0"/>
+ <xs:element name="force" type="xs:boolean" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:element name="DetachVolumeResponse"
type="tns:DetachVolumeResponseType"/>
@@ -1201,6 +1236,7 @@
<xs:element name="snapshotSet" type="tns:DescribeSnapshotsSetType"/>
<xs:element name="ownersSet" type="tns:DescribeSnapshotsOwnersType"
minOccurs="0"/>
<xs:element name="restorableBySet"
type="tns:DescribeSnapshotsRestorableBySetType" minOccurs="0"/>
+ <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="DescribeSnapshotsSetType">
@@ -1256,6 +1292,7 @@
<xs:element name="volumeSize" type="xs:string"/>
<xs:element name="description" type="xs:string" minOccurs="0"/>
<xs:element name="ownerAlias" type="xs:string" minOccurs="0"/>
+ <xs:element name="tagSet" type="tns:ResourceTagSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:element name="ModifySnapshotAttribute"
type="tns:ModifySnapshotAttributeType"/>
@@ -1378,6 +1415,7 @@
<xs:complexType name="DescribeBundleTasksType">
<xs:sequence>
<xs:element name="bundlesSet" type="tns:DescribeBundleTasksInfoType"/>
+ <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="DescribeBundleTasksInfoType">
@@ -1419,6 +1457,7 @@
<xs:complexType name="DescribeRegionsType">
<xs:sequence>
<xs:element name="regionSet" type="tns:DescribeRegionsSetType"/>
+ <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="DescribeRegionsSetType">
@@ -1456,6 +1495,7 @@
<xs:element name="instanceType" type="xs:string" minOccurs="0"/>
<xs:element name="availabilityZone" type="xs:string" minOccurs="0"/>
<xs:element name="productDescription" type="xs:string" minOccurs="0"/>
+ <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="DescribeReservedInstancesOfferingsSetType">
@@ -1509,6 +1549,7 @@
<xs:complexType name="DescribeReservedInstancesType">
<xs:sequence>
<xs:element name="reservedInstancesSet"
type="tns:DescribeReservedInstancesSetType" minOccurs="0"/>
+ <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="DescribeReservedInstancesSetType">
@@ -1545,6 +1586,7 @@
<xs:element name="instanceCount" type="xs:integer"/>
<xs:element name="productDescription" type="xs:string"/>
<xs:element name="state" type="xs:string"/>
+ <xs:element name="tagSet" type="tns:ResourceTagSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:element name="MonitorInstances" type="tns:MonitorInstancesType"/>
@@ -1606,6 +1648,7 @@
<xs:element name="type" type="xs:string"/>
<xs:element name="availabilityZone" type="xs:string"/>
<xs:element name="attachments" type="tns:AttachmentSetType"/>
+ <xs:element name="tagSet" type="tns:ResourceTagSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CustomerGatewayType">
@@ -1615,6 +1658,7 @@
<xs:element name="type" type="xs:string"/>
<xs:element name="ipAddress" type="xs:string"/>
<xs:element name="bgpAsn" type="xs:int"/>
+ <xs:element name="tagSet" type="tns:ResourceTagSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="VpnConnectionType">
@@ -1625,6 +1669,7 @@
<xs:element name="type" type="xs:string" minOccurs="0"/>
<xs:element name="customerGatewayId" type="xs:string"/>
<xs:element name="vpnGatewayId" type="xs:string"/>
+ <xs:element name="tagSet" type="tns:ResourceTagSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="VpcType">
@@ -1633,6 +1678,7 @@
<xs:element name="state" type="xs:string" minOccurs="0"/>
<xs:element name="cidrBlock" type="xs:string" minOccurs="0"/>
<xs:element name="dhcpOptionsId" type="xs:string" minOccurs="0"/>
+ <xs:element name="tagSet" type="tns:ResourceTagSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="SubnetType">
@@ -1643,6 +1689,7 @@
<xs:element name="cidrBlock" type="xs:string" minOccurs="0"/>
<xs:element name="availableIpAddressCount" type="xs:int" minOccurs="0"/>
<xs:element name="availabilityZone" type="xs:string" minOccurs="0"/>
+ <xs:element name="tagSet" type="tns:ResourceTagSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CustomerGatewaySetType">
@@ -1750,6 +1797,7 @@
<xs:sequence>
<xs:element name="dhcpOptionsId" type="xs:string"/>
<xs:element name="dhcpConfigurationSet"
type="tns:DhcpConfigurationItemSetType"/>
+ <xs:element name="tagSet" type="tns:ResourceTagSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="DhcpValueType">
@@ -2040,6 +2088,7 @@
<xs:complexType name="DescribeDhcpOptionsType">
<xs:sequence>
<xs:element name="dhcpOptionsSet" type="tns:DhcpOptionsIdSetType"
minOccurs="0"/>
+ <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="DescribeDhcpOptionsResponseType">
@@ -2102,15 +2151,15 @@
<xs:element name="imageId" type="xs:string"/>
<xs:element name="keyName" type="xs:string" minOccurs="0"/>
<xs:element name="groupSet" type="tns:GroupSetType"/>
- <xs:element name="userData" type="tns:UserDataType" minOccurs="0"
maxOccurs="1"/>
- <xs:element name="addressingType" type="xs:string" minOccurs="0"
maxOccurs="1"/>
+ <xs:element name="userData" type="tns:UserDataType" minOccurs="0"/>
+ <xs:element name="addressingType" type="xs:string" minOccurs="0"/>
<xs:element name="instanceType" type="xs:string"/>
- <xs:element name="placement" type="tns:PlacementRequestType"
minOccurs="0" maxOccurs="1"/>
- <xs:element name="kernelId" type="xs:string" minOccurs="0"
maxOccurs="1"/>
- <xs:element name="ramdiskId" type="xs:string" minOccurs="0"
maxOccurs="1"/>
- <xs:element name="blockDeviceMapping" type="tns:BlockDeviceMappingType"
minOccurs="0" maxOccurs="1"/>
- <xs:element name="monitoring" type="tns:MonitoringInstanceType"
minOccurs="0" maxOccurs="1"/>
- <xs:element name="subnetId" type="xs:string" minOccurs="0"
maxOccurs="1"/>
+ <xs:element name="placement" type="tns:PlacementRequestType"
minOccurs="0"/>
+ <xs:element name="kernelId" type="xs:string" minOccurs="0"/>
+ <xs:element name="ramdiskId" type="xs:string" minOccurs="0"/>
+ <xs:element name="blockDeviceMapping" type="tns:BlockDeviceMappingType"
minOccurs="0"/>
+ <xs:element name="monitoring" type="tns:MonitoringInstanceType"
minOccurs="0"/>
+ <xs:element name="subnetId" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="LaunchSpecificationResponseType">
@@ -2118,14 +2167,14 @@
<xs:element name="imageId" type="xs:string"/>
<xs:element name="keyName" type="xs:string" minOccurs="0"/>
<xs:element name="groupSet" type="tns:GroupSetType"/>
- <xs:element name="addressingType" type="xs:string" minOccurs="0"
maxOccurs="1"/>
+ <xs:element name="addressingType" type="xs:string" minOccurs="0"/>
<xs:element name="instanceType" type="xs:string"/>
- <xs:element name="placement" type="tns:PlacementRequestType"
minOccurs="0" maxOccurs="1"/>
- <xs:element name="kernelId" type="xs:string" minOccurs="0"
maxOccurs="1"/>
- <xs:element name="ramdiskId" type="xs:string" minOccurs="0"
maxOccurs="1"/>
- <xs:element name="blockDeviceMapping" type="tns:BlockDeviceMappingType"
minOccurs="0" maxOccurs="1"/>
- <xs:element name="monitoring" type="tns:MonitoringInstanceType"
minOccurs="0" maxOccurs="1"/>
- <xs:element name="subnetId" type="xs:string" minOccurs="0"
maxOccurs="1"/>
+ <xs:element name="placement" type="tns:PlacementRequestType"
minOccurs="0"/>
+ <xs:element name="kernelId" type="xs:string" minOccurs="0"/>
+ <xs:element name="ramdiskId" type="xs:string" minOccurs="0"/>
+ <xs:element name="blockDeviceMapping" type="tns:BlockDeviceMappingType"
minOccurs="0"/>
+ <xs:element name="monitoring" type="tns:MonitoringInstanceType"
minOccurs="0"/>
+ <xs:element name="subnetId" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="SpotInstanceRequestSetItemType">
@@ -2143,6 +2192,7 @@
<xs:element name="instanceId" type="xs:string" minOccurs="0"/>
<xs:element name="createTime" type="xs:dateTime" minOccurs="0"/>
<xs:element name="productDescription" type="xs:string" minOccurs="0"/>
+ <xs:element name="tagSet" type="tns:ResourceTagSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="SpotInstanceStateFaultType">
@@ -2159,12 +2209,13 @@
<xs:complexType name="RequestSpotInstancesResponseType">
<xs:sequence>
<xs:element name="requestId" type="xs:string"/>
- <xs:element name="spotInstanceRequestSet"
type="tns:SpotInstanceRequestSetType" minOccurs="1" maxOccurs="1"/>
+ <xs:element name="spotInstanceRequestSet"
type="tns:SpotInstanceRequestSetType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="DescribeSpotInstanceRequestsType">
<xs:sequence>
<xs:element name="spotInstanceRequestIdSet"
type="tns:SpotInstanceRequestIdSetType"/>
+ <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="SpotInstanceRequestIdSetType">
@@ -2209,8 +2260,9 @@
<xs:sequence>
<xs:element name="startTime" type="xs:dateTime" minOccurs="0"/>
<xs:element name="endTime" type="xs:dateTime" minOccurs="0"/>
- <xs:element name="instanceTypeSet" type="tns:InstanceTypeSetType"
minOccurs="0" maxOccurs="1"/>
- <xs:element name="productDescriptionSet"
type="tns:ProductDescriptionSetType" minOccurs="0" maxOccurs="1"/>
+ <xs:element name="instanceTypeSet" type="tns:InstanceTypeSetType"
minOccurs="0"/>
+ <xs:element name="productDescriptionSet"
type="tns:ProductDescriptionSetType" minOccurs="0"/>
+ <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="InstanceTypeSetType">
@@ -2295,7 +2347,8 @@
<xs:element name="DeactivateLicenseResponse"
type="tns:DeactivateLicenseResponseType"/>
<xs:complexType name="DescribeLicensesType">
<xs:sequence>
- <xs:element name="licenseIdSet" type="tns:LicenseIdSetType"
minOccurs="0" maxOccurs="1"/>
+ <xs:element name="licenseIdSet" type="tns:LicenseIdSetType"
minOccurs="0"/>
+ <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="LicenseIdSetType">
@@ -2325,6 +2378,7 @@
<xs:element name="type" type="xs:string"/>
<xs:element name="pool" type="xs:string"/>
<xs:element name="capacitySet" type="tns:LicenseCapacitySetType"/>
+ <xs:element name="tagSet" type="tns:ResourceTagSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="LicenseCapacitySetType">
@@ -2337,7 +2391,7 @@
<xs:element name="capacity" type="xs:int"/>
<xs:element name="instanceCapacity" type="xs:int"/>
<xs:element name="state" type="xs:string"/>
- <xs:element name="earliestAllowedDeactivationTime" type="xs:dateTime"
minOccurs="0" maxOccurs="1"/>
+ <xs:element name="earliestAllowedDeactivationTime" type="xs:dateTime"
minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ActivateLicenseType">
@@ -2406,6 +2460,7 @@
<xs:complexType name="DescribePlacementGroupsType">
<xs:sequence>
<xs:element name="placementGroupSet"
type="tns:DescribePlacementGroupsInfoType"/>
+ <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="PlacementGroupInfoType">
@@ -2425,5 +2480,257 @@
<xs:element name="requestId" type="xs:string"/>
<xs:element name="placementGroupSet" type="tns:PlacementGroupSetType"/>
</xs:sequence>
+ </xs:complexType>
+ <xs:element name="CreateTags" type="tns:CreateTagsType"/>
+ <xs:element name="CreateTagsResponse" type="tns:CreateTagsResponseType"/>
+ <xs:element name="DescribeTags" type="tns:DescribeTagsType"/>
+ <xs:element name="DescribeTagsResponse"
type="tns:DescribeTagsResponseType"/>
+ <xs:element name="DeleteTags" type="tns:DeleteTagsType"/>
+ <xs:element name="DeleteTagsResponse" type="tns:DeleteTagsResponseType"/>
+ <xs:complexType name="ResourceIdSetType">
+ <xs:sequence>
+ <xs:element name="item" type="tns:ResourceIdSetItemType" minOccurs="0"
maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ResourceIdSetItemType">
+ <xs:sequence>
+ <xs:element name="resourceId" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ResourceTagSetItemType">
+ <xs:sequence>
+ <xs:element name="key" type="xs:string"/>
+ <xs:element name="value" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ResourceTagSetType">
+ <xs:sequence>
+ <xs:element name="item" type="tns:ResourceTagSetItemType" minOccurs="0"
maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CreateTagsType">
+ <xs:sequence>
+ <xs:element name="resourcesSet" type="tns:ResourceIdSetType"/>
+ <xs:element name="tagSet" type="tns:ResourceTagSetType"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CreateTagsResponseType">
+ <xs:sequence>
+ <xs:element name="requestId" type="xs:string"/>
+ <xs:element name="return" type="xs:boolean"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TagSetItemType">
+ <xs:sequence>
+ <xs:element name="resourceId" type="xs:string" minOccurs="0"/>
+ <xs:element name="resourceType" type="xs:string" minOccurs="0"/>
+ <xs:element name="key" type="xs:string" minOccurs="0"/>
+ <xs:element name="value" type="xs:string" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="TagSetType">
+ <xs:sequence>
+ <xs:element name="item" type="tns:TagSetItemType" minOccurs="0"
maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DescribeTagsType">
+ <xs:sequence>
+ <xs:element name="filterSet" type="tns:FilterSetType" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DescribeTagsResponseType">
+ <xs:sequence>
+ <xs:element name="requestId" type="xs:string"/>
+ <xs:element name="tagSet" type="tns:TagSetType"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DeleteTagsSetItemType">
+ <xs:sequence>
+ <xs:element name="key" type="xs:string" minOccurs="0"/>
+ <xs:element name="value" type="xs:string" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DeleteTagsSetType">
+ <xs:sequence>
+ <xs:element name="item" type="tns:DeleteTagsSetItemType" minOccurs="0"
maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DeleteTagsType">
+ <xs:sequence>
+ <xs:element name="resourcesSet" type="tns:ResourceIdSetType"/>
+ <xs:element name="tagSet" type="tns:DeleteTagsSetType"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DeleteTagsResponseType">
+ <xs:sequence>
+ <xs:element name="requestId" type="xs:string"/>
+ <xs:element name="return" type="xs:boolean"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ImportInstance" type="tns:ImportInstanceType"/>
+ <xs:element name="ImportInstanceResponse"
type="tns:ImportInstanceResponseType"/>
+ <xs:complexType name="ImportInstanceType">
+ <xs:sequence>
+ <xs:element name="description" type="xs:string" minOccurs="0"
maxOccurs="1"/>
+ <xs:element name="launchSpecification"
type="tns:ImportInstanceLaunchSpecificationType" minOccurs="1"
maxOccurs="1"/>
+ <xs:element name="diskImageSet" type="tns:DiskImageSetType"
minOccurs="1" maxOccurs="1"/>
+ <xs:element name="platform" type="xs:string" minOccurs="1"
maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ImportInstanceResponseType">
+ <xs:sequence>
+ <xs:element name="conversionTask" type="tns:ConversionTaskType"
minOccurs="1" maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ImportInstanceLaunchSpecificationType">
+ <xs:sequence>
+ <xs:element name="architecture" type="xs:string" minOccurs="1"
maxOccurs="1"/>
+ <xs:element name="groupSet" type="tns:GroupSetType" minOccurs="0"
maxOccurs="1"/>
+ <xs:element name="userData" type="tns:UserDataType" minOccurs="0"
maxOccurs="1"/>
+ <xs:element name="instanceType" type="xs:string"/>
+ <xs:element name="placement" type="tns:InstancePlacementType"
minOccurs="0" maxOccurs="1"/>
+ <xs:element name="monitoring" type="tns:MonitoringInstanceType"
minOccurs="0" maxOccurs="1"/>
+ <xs:element name="subnetId" type="xs:string" minOccurs="0"
maxOccurs="1"/>
+ <xs:element name="instanceInitiatedShutdownBehavior" type="xs:string"
minOccurs="0" maxOccurs="1"/>
+ <xs:element name="privateIpAddress" type="xs:string" minOccurs="0"
maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DiskImageSetType">
+ <xs:sequence>
+ <xs:element name="item" type="tns:DiskImageType" minOccurs="0"
maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DiskImageType">
+ <xs:sequence>
+ <xs:element name="image" type="tns:DiskImageDetailType" minOccurs="1"
maxOccurs="1"/>
+ <xs:element name="description" type="xs:string" minOccurs="0"
maxOccurs="1"/>
+ <xs:element name="volume" type="tns:DiskImageVolumeType" minOccurs="1"
maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DiskImageDetailType">
+ <xs:sequence>
+ <xs:element name="format" type="xs:string" minOccurs="1" maxOccurs="1"/>
+ <xs:element name="bytes" type="xs:long" minOccurs="1" maxOccurs="1"/>
+ <xs:element name="importManifestUrl" type="xs:string" minOccurs="1"
maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DiskImageVolumeType">
+ <xs:sequence>
+ <xs:element name="size" type="xs:integer"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ConversionTaskType">
+ <xs:sequence>
+ <xs:element name="conversionTaskId" type="xs:string" minOccurs="1"
maxOccurs="1"/>
+ <xs:element name="expirationTime" type="xs:string" minOccurs="0"
maxOccurs="1"/>
+ <xs:choice>
+ <xs:element name="importVolume" type="tns:ImportVolumeTaskDetailsType"
minOccurs="0" maxOccurs="1"/>
+ <xs:element name="importInstance"
type="tns:ImportInstanceTaskDetailsType" minOccurs="0" maxOccurs="1"/>
+ </xs:choice>
+ <xs:element name="state" type="xs:string" minOccurs="1" maxOccurs="1"/>
+ <xs:element name="statusMessage" type="xs:string" minOccurs="0"
maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ImportInstanceTaskDetailsType">
+ <xs:sequence>
+ <xs:element name="volumes" type="tns:ImportInstanceVolumeDetailSetType"
minOccurs="1" maxOccurs="1"/>
+ <xs:element name="instanceId" type="xs:string" minOccurs="0"
maxOccurs="1"/>
+ <xs:element name="platform" type="xs:string" minOccurs="0"
maxOccurs="1"/>
+ <xs:element name="description" type="xs:string" minOccurs="0"
maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ImportVolumeTaskDetailsType">
+ <xs:sequence>
+ <xs:element name="bytesConverted" type="xs:long" minOccurs="1"
maxOccurs="1"/>
+ <xs:element name="availabilityZone" type="xs:string" minOccurs="1"
maxOccurs="1"/>
+ <xs:element name="description" type="xs:string" minOccurs="0"
maxOccurs="1"/>
+ <xs:element name="image" type="tns:DiskImageDescriptionType"
minOccurs="1" maxOccurs="1"/>
+ <xs:element name="volume" type="tns:DiskImageVolumeDescriptionType"
minOccurs="1" maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ImportInstanceVolumeDetailSetType">
+ <xs:sequence>
+ <xs:element name="item" type="tns:ImportInstanceVolumeDetailItemType"
minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ImportInstanceVolumeDetailItemType">
+ <xs:sequence>
+ <xs:element name="bytesConverted" type="xs:long" minOccurs="1"
maxOccurs="1"/>
+ <xs:element name="availabilityZone" type="xs:string" minOccurs="1"
maxOccurs="1"/>
+ <xs:element name="image" type="tns:DiskImageDescriptionType"
minOccurs="1" maxOccurs="1"/>
+ <xs:element name="description" type="xs:string" minOccurs="0"
maxOccurs="1"/>
+ <xs:element name="volume" type="tns:DiskImageVolumeDescriptionType"
minOccurs="1" maxOccurs="1"/>
+ <xs:element name="status" type="xs:string" minOccurs="1" maxOccurs="1"/>
+ <xs:element name="statusMessage" type="xs:string" minOccurs="0"
maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DiskImageVolumeDescriptionType">
+ <xs:sequence>
+ <xs:element name="size" type="xs:integer"/>
+ <xs:element name="id" type="xs:string" minOccurs="1" maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DiskImageDescriptionType">
+ <xs:sequence>
+ <xs:element name="format" type="xs:string" minOccurs="1" maxOccurs="1"/>
+ <xs:element name="size" type="xs:long" minOccurs="1" maxOccurs="1"/>
+ <xs:element name="importManifestUrl" type="xs:string" minOccurs="1"
maxOccurs="1"/>
+ <xs:element name="checksum" type="xs:string" minOccurs="0"
maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="ImportVolume" type="tns:ImportVolumeType"/>
+ <xs:element name="ImportVolumeResponse"
type="tns:ImportVolumeResponseType"/>
+ <xs:complexType name="ImportVolumeType">
+ <xs:sequence>
+ <xs:element name="availabilityZone" type="xs:string"/>
+ <xs:element name="image" type="tns:DiskImageDetailType"/>
+ <xs:element name="description" type="xs:string" minOccurs="0"
maxOccurs="1"/>
+ <xs:element name="volume" type="tns:DiskImageVolumeType" minOccurs="1"
maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ImportVolumeResponseType">
+ <xs:sequence>
+ <xs:element name="conversionTask" type="tns:ConversionTaskType"
minOccurs="1" maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="DescribeConversionTasks"
type="tns:DescribeConversionTasksType"/>
+ <xs:element name="DescribeConversionTasksResponse"
type="tns:DescribeConversionTasksResponseType"/>
+ <xs:complexType name="DescribeConversionTasksType">
+ <xs:sequence>
+ <xs:element name="conversionTaskIdSet"
type="tns:ConversionTaskIdSetType" minOccurs="1" maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="DescribeConversionTasksResponseType">
+ <xs:sequence>
+ <xs:element name="conversionTasks" type="tns:ConversionTaskSetType"
minOccurs="1" maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ConversionTaskIdSetType">
+ <xs:sequence>
+ <xs:element name="item" type="tns:ConversionTaskIdItemType"
minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ConversionTaskIdItemType">
+ <xs:sequence>
+ <xs:element name="conversionTaskId" type="xs:string" minOccurs="0"
maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="ConversionTaskSetType">
+ <xs:sequence>
+ <xs:element name="item" type="tns:ConversionTaskType" minOccurs="0"
maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="CancelConversionTask"
type="tns:CancelConversionTaskType"/>
+ <xs:element name="CancelConversionTaskResponse"
type="tns:CancelConversionTaskResponseType"/>
+ <xs:complexType name="CancelConversionTaskType">
+ <xs:sequence>
+ <xs:element name="conversionTaskId" type="xs:string" minOccurs="1"
maxOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="CancelConversionTaskResponseType">
+ <xs:sequence>
+ <xs:element name="requestId" type="xs:string"/>
+ <xs:element name="return" type="xs:boolean"/>
+ </xs:sequence>
</xs:complexType>
</xs:schema>