mirror of https://github.com/apache/jclouds.git
Merge branch 'master' of git@github.com:jclouds/jclouds
* 'master' of git@github.com:jclouds/jclouds: added AWS Elastic IP Address clojure wrapper additional region-related fixes for clojure wrappers changed AvailabilityZone to String (from enum)
This commit is contained in:
commit
453148e56f
|
@ -24,7 +24,7 @@
|
||||||
(:use (clojure.contrib def core))
|
(:use (clojure.contrib def core))
|
||||||
(:import org.jclouds.aws.domain.Region
|
(:import org.jclouds.aws.domain.Region
|
||||||
org.jclouds.compute.domain.NodeMetadata
|
org.jclouds.compute.domain.NodeMetadata
|
||||||
(org.jclouds.aws.ec2.domain Volume Snapshot AvailabilityZone)
|
(org.jclouds.aws.ec2.domain Volume Volume$Status Snapshot Snapshot$Status AvailabilityZone)
|
||||||
(org.jclouds.aws.ec2.options DescribeSnapshotsOptions DetachVolumeOptions CreateSnapshotOptions)))
|
(org.jclouds.aws.ec2.options DescribeSnapshotsOptions DetachVolumeOptions CreateSnapshotOptions)))
|
||||||
|
|
||||||
(defn snapshot?
|
(defn snapshot?
|
||||||
|
@ -46,16 +46,16 @@
|
||||||
.getContext .getProviderSpecificContext .getApi .getElasticBlockStoreServices))
|
.getContext .getProviderSpecificContext .getApi .getElasticBlockStoreServices))
|
||||||
|
|
||||||
(defn get-region
|
(defn get-region
|
||||||
"Returns the first argument as the corresponding Region if it is a
|
"Coerces the first parameter into a Region string; strings, keywords, and
|
||||||
keyword or already a Region instance. An optional second argument
|
NodeMetadata instances are acceptable arguments. An optional second argument
|
||||||
is returned if the first cannot be coerced into a Region.
|
is returned if the first cannot be coerced into a region string.
|
||||||
Returns nil otherwise."
|
Returns nil otherwise."
|
||||||
([v] (get-region v nil))
|
([v] (get-region v nil))
|
||||||
([v default-region]
|
([v default-region]
|
||||||
(cond
|
(cond
|
||||||
|
(string? v) v
|
||||||
(keyword? v) (name v)
|
(keyword? v) (name v)
|
||||||
(instance? Region v) v
|
(instance? NodeMetadata v) (let [zone (compute/location v)]
|
||||||
(instance? NodeMetadata v) (let [zone (.getLocationId v)]
|
|
||||||
; no easier way to go from zone -> region?
|
; no easier way to go from zone -> region?
|
||||||
(if (> (.indexOf zone "-") -1)
|
(if (> (.indexOf zone "-") -1)
|
||||||
(subs zone 0 (-> zone count dec))
|
(subs zone 0 (-> zone count dec))
|
||||||
|
@ -119,7 +119,7 @@
|
||||||
"Returns a set of org.jclouds.aws.ec2.domain.Snapshot instances that match
|
"Returns a set of org.jclouds.aws.ec2.domain.Snapshot instances that match
|
||||||
the criteria provided. Options include:
|
the criteria provided. Options include:
|
||||||
|
|
||||||
:region - region string or keyword
|
:region - region string, keyword, or NodeMetadata
|
||||||
:owner - AWS account id (or \"amazon\" or \"self\")
|
:owner - AWS account id (or \"amazon\" or \"self\")
|
||||||
:restorable-by - AWS account id
|
:restorable-by - AWS account id
|
||||||
|
|
||||||
|
@ -172,9 +172,9 @@
|
||||||
[v]
|
[v]
|
||||||
(cond
|
(cond
|
||||||
(instance? AvailabilityZone v) v
|
(instance? AvailabilityZone v) v
|
||||||
(instance? NodeMetadata v) (AvailabilityZone/fromValue (.getLocationId #^NodeMetadata v))
|
(instance? NodeMetadata v) (compute/location #^NodeMetadata v)
|
||||||
(string? v) (AvailabilityZone/fromValue v)
|
(string? v) v
|
||||||
(keyword? v) (AvailabilityZone/fromValue (name v))
|
(keyword? v) (name v)
|
||||||
:else (throw (IllegalArgumentException.
|
:else (throw (IllegalArgumentException.
|
||||||
(str "Can't obtain zone from argument of type " (class v))))))
|
(str "Can't obtain zone from argument of type " (class v))))))
|
||||||
|
|
||||||
|
@ -283,3 +283,36 @@
|
||||||
(.deleteVolumeInRegion (ebs-service)
|
(.deleteVolumeInRegion (ebs-service)
|
||||||
(get-region region)
|
(get-region region)
|
||||||
(as-string volume-id))))
|
(as-string volume-id))))
|
||||||
|
|
||||||
|
(defn status
|
||||||
|
"Returns the status of the given entity; works for Volumes and Snapshots."
|
||||||
|
[k]
|
||||||
|
(.getStatus k))
|
||||||
|
|
||||||
|
(defn status-available?
|
||||||
|
[#^Volume v]
|
||||||
|
(= Volume$Status/AVAILABLE (status v)))
|
||||||
|
|
||||||
|
(defn status-creating?
|
||||||
|
[#^Volume v]
|
||||||
|
(= Volume$Status/CREATING (status v)))
|
||||||
|
|
||||||
|
(defn status-deleting?
|
||||||
|
[#^Volume v]
|
||||||
|
(= Volume$Status/DELETING (status v)))
|
||||||
|
|
||||||
|
(defn status-in-use?
|
||||||
|
[#^Volume v]
|
||||||
|
(= Volume$Status/IN_USE (status v)))
|
||||||
|
|
||||||
|
(defn status-completed?
|
||||||
|
[#^Snapshot s]
|
||||||
|
(= Snapshot$Status/COMPLETED (status s)))
|
||||||
|
|
||||||
|
(defn status-error?
|
||||||
|
[#^Snapshot s]
|
||||||
|
(= Snapshot$Status/ERROR (status s)))
|
||||||
|
|
||||||
|
(defn status-pending?
|
||||||
|
[#^Snapshot s]
|
||||||
|
(= Snapshot$Status/PENDING (status s)))
|
|
@ -0,0 +1,91 @@
|
||||||
|
;;
|
||||||
|
;; Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
;;
|
||||||
|
;; ====================================================================
|
||||||
|
;; 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.
|
||||||
|
;; ====================================================================
|
||||||
|
;;
|
||||||
|
|
||||||
|
(ns
|
||||||
|
#^{:author "Chas Emerick, cemerick@snowtide.com"
|
||||||
|
:doc "A clojure binding for the jclouds AWS elastic IP address interface."}
|
||||||
|
org.jclouds.aws.elastic-ip
|
||||||
|
(:require (org.jclouds [compute :as compute])
|
||||||
|
[org.jclouds.aws.ebs :as ebs])
|
||||||
|
(:use (clojure.contrib def core))
|
||||||
|
(:import org.jclouds.compute.domain.NodeMetadata
|
||||||
|
(org.jclouds.aws.ec2.domain PublicIpInstanceIdPair)
|
||||||
|
java.net.InetAddress))
|
||||||
|
|
||||||
|
(defn #^org.jclouds.aws.ec2.services.ElasticIPAddressClient
|
||||||
|
eip-service
|
||||||
|
"Returns the synchronous ElasticIPAddressClient associated with
|
||||||
|
the specified compute service, or compute/*compute* as bound by with-compute-service."
|
||||||
|
[& [compute]]
|
||||||
|
(-> (or compute compute/*compute*)
|
||||||
|
.getContext .getProviderSpecificContext .getApi .getElasticIPAddressServices))
|
||||||
|
|
||||||
|
(defn- as-ip
|
||||||
|
"Coerces v to an InetAddress; accepts InetAddresses and strings."
|
||||||
|
[v]
|
||||||
|
(if (string? v)
|
||||||
|
(InetAddress/getByName v)
|
||||||
|
v))
|
||||||
|
|
||||||
|
(defn allocate
|
||||||
|
"Claims a new elastic IP address within the (optionally) specified region for your account.
|
||||||
|
Region may be a string, keyword, or a node from which the region
|
||||||
|
is inferred. Returns a corresponding InetAddress instance."
|
||||||
|
([] (allocate nil))
|
||||||
|
([region]
|
||||||
|
(.allocateAddressInRegion (eip-service) (ebs/get-region region))))
|
||||||
|
|
||||||
|
(defn associate
|
||||||
|
"Associates an elastic IP address with a node."
|
||||||
|
([#^NodeMetadata node public-ip]
|
||||||
|
(associate node public-ip (.getId node)))
|
||||||
|
([region public-ip instance-id]
|
||||||
|
(.associateAddressInRegion (eip-service)
|
||||||
|
(ebs/get-region region)
|
||||||
|
(as-ip public-ip)
|
||||||
|
instance-id)))
|
||||||
|
|
||||||
|
(defn addresses
|
||||||
|
"Returns a map of elastic IP addresses to maps with slots:
|
||||||
|
|
||||||
|
:region - the region (string/keyword/NodeMetadata) the IP address is allocated within
|
||||||
|
:node-id - the ID of the instance with which the IP address is associated (optional)
|
||||||
|
|
||||||
|
You may optionally specify which IP addresses you would like to query."
|
||||||
|
([] (addresses nil))
|
||||||
|
([region & public-ips]
|
||||||
|
(into {} (for [#^PublicIpInstanceIdPair pair (.describeAddressesInRegion (eip-service)
|
||||||
|
(ebs/get-region region)
|
||||||
|
(into-array InetAddress (map as-ip public-ips)))]
|
||||||
|
[(.getPublicIp pair) (merge {:region (.getRegion pair)}
|
||||||
|
(when (.getInstanceId pair) {:node-id (.getInstanceId pair)}))]))))
|
||||||
|
|
||||||
|
(defn dissociate
|
||||||
|
"Dissociates an elastic IP address from the node with which it is currently associated."
|
||||||
|
[region public-ip]
|
||||||
|
(.disassociateAddressInRegion (eip-service)
|
||||||
|
(ebs/get-region region)
|
||||||
|
(as-ip public-ip)))
|
||||||
|
|
||||||
|
(defn release
|
||||||
|
"Disclaims an elastic IP address from your account."
|
||||||
|
([public-ip] (release nil public-ip))
|
||||||
|
([region public-ip]
|
||||||
|
(.releaseAddressInRegion (eip-service)
|
||||||
|
(ebs/get-region region)
|
||||||
|
(as-ip public-ip))))
|
|
@ -23,7 +23,6 @@ import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
|
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
import org.jclouds.aws.ec2.domain.AvailabilityZone;
|
|
||||||
import org.jclouds.http.HttpRequest;
|
import org.jclouds.http.HttpRequest;
|
||||||
import org.jclouds.rest.Binder;
|
import org.jclouds.rest.Binder;
|
||||||
import org.jclouds.rest.internal.GeneratedHttpRequest;
|
import org.jclouds.rest.internal.GeneratedHttpRequest;
|
||||||
|
@ -41,10 +40,10 @@ public class IfNotNullBindAvailabilityZoneToFormParam implements Binder {
|
||||||
if (input != null) {
|
if (input != null) {
|
||||||
checkArgument(checkNotNull(request, "request") instanceof GeneratedHttpRequest,
|
checkArgument(checkNotNull(request, "request") instanceof GeneratedHttpRequest,
|
||||||
"this binder is only valid for GeneratedHttpRequests!");
|
"this binder is only valid for GeneratedHttpRequests!");
|
||||||
checkArgument(input instanceof AvailabilityZone,
|
checkArgument(input instanceof String,
|
||||||
"this binder is only valid for AvailabilityZone!");
|
"this binder is only valid for AvailabilityZone!");
|
||||||
((GeneratedHttpRequest<?>) request).addFormParam("Placement.AvailabilityZone",
|
((GeneratedHttpRequest<?>) request).addFormParam("Placement.AvailabilityZone",
|
||||||
((AvailabilityZone) input).value());
|
(String) input);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,6 @@ import org.jclouds.aws.ec2.compute.functions.RunningInstanceToNodeMetadata;
|
||||||
import org.jclouds.aws.ec2.compute.strategy.EC2DestroyNodeStrategy;
|
import org.jclouds.aws.ec2.compute.strategy.EC2DestroyNodeStrategy;
|
||||||
import org.jclouds.aws.ec2.compute.strategy.EC2RunNodesAndAddToSetStrategy;
|
import org.jclouds.aws.ec2.compute.strategy.EC2RunNodesAndAddToSetStrategy;
|
||||||
import org.jclouds.aws.ec2.config.EC2ContextModule;
|
import org.jclouds.aws.ec2.config.EC2ContextModule;
|
||||||
import org.jclouds.aws.ec2.domain.AvailabilityZone;
|
|
||||||
import org.jclouds.aws.ec2.domain.KeyPair;
|
import org.jclouds.aws.ec2.domain.KeyPair;
|
||||||
import org.jclouds.aws.ec2.domain.RunningInstance;
|
import org.jclouds.aws.ec2.domain.RunningInstance;
|
||||||
import org.jclouds.aws.ec2.functions.RunningInstanceToStorageMappingUnix;
|
import org.jclouds.aws.ec2.functions.RunningInstanceToStorageMappingUnix;
|
||||||
|
@ -257,11 +256,11 @@ public class EC2ComputeServiceContextModule extends EC2ContextModule {
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
Map<String, ? extends Location> provideLocations(Map<AvailabilityZone, String> availabilityZoneToRegionMap) {
|
Map<String, ? extends Location> provideLocations(Map<String, String> availabilityZoneToRegionMap) {
|
||||||
Map<String, Location> locations = Maps.newLinkedHashMap();
|
Map<String, Location> locations = Maps.newLinkedHashMap();
|
||||||
for (AvailabilityZone zone : availabilityZoneToRegionMap.keySet()) {
|
for (String zone : availabilityZoneToRegionMap.keySet()) {
|
||||||
locations.put(zone.toString(), new LocationImpl(LocationScope.ZONE, zone.toString(), zone
|
locations.put(zone, new LocationImpl(LocationScope.ZONE, zone, zone,
|
||||||
.toString(), availabilityZoneToRegionMap.get(zone)));
|
availabilityZoneToRegionMap.get(zone)));
|
||||||
}
|
}
|
||||||
for (String region : availabilityZoneToRegionMap.values()) {
|
for (String region : availabilityZoneToRegionMap.values()) {
|
||||||
locations.put(region, new LocationImpl(LocationScope.REGION, region,
|
locations.put(region, new LocationImpl(LocationScope.REGION, region,
|
||||||
|
|
|
@ -102,7 +102,7 @@ public class RunningInstanceToNodeMetadata implements Function<RunningInstance,
|
||||||
Set<InetAddress> publicAddresses = nullSafeSet(instance.getIpAddress());
|
Set<InetAddress> publicAddresses = nullSafeSet(instance.getIpAddress());
|
||||||
Set<InetAddress> privateAddresses = nullSafeSet(instance.getPrivateIpAddress());
|
Set<InetAddress> privateAddresses = nullSafeSet(instance.getPrivateIpAddress());
|
||||||
|
|
||||||
String locationId = instance.getAvailabilityZone().toString();
|
String locationId = instance.getAvailabilityZone();
|
||||||
|
|
||||||
Map<String, String> extra = getExtra(instance);
|
Map<String, String> extra = getExtra(instance);
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,6 @@ import javax.inject.Named;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
import org.jclouds.Constants;
|
import org.jclouds.Constants;
|
||||||
import org.jclouds.aws.domain.Region;
|
|
||||||
import org.jclouds.aws.ec2.EC2Client;
|
import org.jclouds.aws.ec2.EC2Client;
|
||||||
import org.jclouds.aws.ec2.compute.domain.EC2Size;
|
import org.jclouds.aws.ec2.compute.domain.EC2Size;
|
||||||
import org.jclouds.aws.ec2.compute.domain.PortsRegionTag;
|
import org.jclouds.aws.ec2.compute.domain.PortsRegionTag;
|
||||||
|
@ -42,7 +41,6 @@ import org.jclouds.aws.ec2.compute.domain.RegionTag;
|
||||||
import org.jclouds.aws.ec2.compute.functions.CreateNewKeyPair;
|
import org.jclouds.aws.ec2.compute.functions.CreateNewKeyPair;
|
||||||
import org.jclouds.aws.ec2.compute.functions.CreateSecurityGroupIfNeeded;
|
import org.jclouds.aws.ec2.compute.functions.CreateSecurityGroupIfNeeded;
|
||||||
import org.jclouds.aws.ec2.compute.functions.RunningInstanceToNodeMetadata;
|
import org.jclouds.aws.ec2.compute.functions.RunningInstanceToNodeMetadata;
|
||||||
import org.jclouds.aws.ec2.domain.AvailabilityZone;
|
|
||||||
import org.jclouds.aws.ec2.domain.KeyPair;
|
import org.jclouds.aws.ec2.domain.KeyPair;
|
||||||
import org.jclouds.aws.ec2.domain.Reservation;
|
import org.jclouds.aws.ec2.domain.Reservation;
|
||||||
import org.jclouds.aws.ec2.domain.RunningInstance;
|
import org.jclouds.aws.ec2.domain.RunningInstance;
|
||||||
|
@ -122,8 +120,7 @@ public class EC2RunNodesAndAddToSetStrategy implements RunNodesAndAddToSetStrate
|
||||||
EC2Size ec2Size = EC2Size.class.cast(template.getSize());
|
EC2Size ec2Size = EC2Size.class.cast(template.getSize());
|
||||||
|
|
||||||
// parse the availability zone of the request
|
// parse the availability zone of the request
|
||||||
AvailabilityZone zone = template.getLocation().getScope() == LocationScope.ZONE ? AvailabilityZone
|
String zone = template.getLocation().getScope() == LocationScope.ZONE ? template.getLocation().getId()
|
||||||
.fromValue(template.getLocation().getId())
|
|
||||||
: null;
|
: null;
|
||||||
|
|
||||||
// if the location has a parent, it must be an availability zone.
|
// if the location has a parent, it must be an availability zone.
|
||||||
|
|
|
@ -27,9 +27,7 @@ import java.util.concurrent.TimeUnit;
|
||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
import org.jclouds.aws.domain.Region;
|
|
||||||
import org.jclouds.aws.ec2.EC2;
|
import org.jclouds.aws.ec2.EC2;
|
||||||
import org.jclouds.aws.ec2.domain.AvailabilityZone;
|
|
||||||
import org.jclouds.aws.ec2.domain.AvailabilityZoneInfo;
|
import org.jclouds.aws.ec2.domain.AvailabilityZoneInfo;
|
||||||
import org.jclouds.aws.ec2.domain.RunningInstance;
|
import org.jclouds.aws.ec2.domain.RunningInstance;
|
||||||
import org.jclouds.aws.ec2.predicates.InstanceStateRunning;
|
import org.jclouds.aws.ec2.predicates.InstanceStateRunning;
|
||||||
|
@ -132,9 +130,9 @@ public class EC2RestClientModule extends AbstractModule {
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
Map<AvailabilityZone, String> provideAvailabilityZoneToRegions(
|
Map<String, String> provideAvailabilityZoneToRegions(
|
||||||
AvailabilityZoneAndRegionClient client, @EC2 Map<String, URI> regions) {
|
AvailabilityZoneAndRegionClient client, @EC2 Map<String, URI> regions) {
|
||||||
Map<AvailabilityZone, String> map = Maps.newHashMap();
|
Map<String, String> map = Maps.newHashMap();
|
||||||
for (String region : regions.keySet()) {
|
for (String region : regions.keySet()) {
|
||||||
for (AvailabilityZoneInfo zoneInfo : client.describeAvailabilityZonesInRegion(region)) {
|
for (AvailabilityZoneInfo zoneInfo : client.describeAvailabilityZonesInRegion(region)) {
|
||||||
map.put(zoneInfo.getZone(), region);
|
map.put(zoneInfo.getZone(), region);
|
||||||
|
|
|
@ -18,9 +18,9 @@
|
||||||
*/
|
*/
|
||||||
package org.jclouds.aws.ec2.domain;
|
package org.jclouds.aws.ec2.domain;
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
import com.google.inject.internal.ImmutableSet;
|
||||||
|
|
||||||
import com.google.common.base.CaseFormat;
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -28,21 +28,21 @@ import com.google.common.base.CaseFormat;
|
||||||
*
|
*
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
*/
|
*/
|
||||||
public enum AvailabilityZone {
|
public class AvailabilityZone {
|
||||||
|
|
||||||
UNKNOWN, EU_WEST_1A, EU_WEST_1B, US_EAST_1A, US_EAST_1B, US_EAST_1C, US_EAST_1D, US_WEST_1A, US_WEST_1B, AP_SOUTHEAST_1A, AP_SOUTHEAST_1B;
|
public static final String EU_WEST_1A = "eu-west-1a";
|
||||||
|
public static final String EU_WEST_1B = "eu-west-1b";
|
||||||
|
public static final String US_EAST_1A = "us-east-1a";
|
||||||
|
public static final String US_EAST_1B = "us-east-1b";
|
||||||
|
public static final String US_EAST_1C = "us-east-1c";
|
||||||
|
public static final String US_EAST_1D = "us-east-1d";
|
||||||
|
public static final String US_WEST_1A = "us-west-1a";
|
||||||
|
public static final String US_WEST_1B = "us-west-1b";
|
||||||
|
public static final String AP_SOUTHEAST_1A = "ap-southeast-1a";
|
||||||
|
public static final String AP_SOUTHEAST_1B = "ap-southeast-1b";
|
||||||
|
|
||||||
public String value() {
|
public static final Set<String> zones = ImmutableSet.of(EU_WEST_1A, EU_WEST_1B,
|
||||||
return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_HYPHEN, name());
|
US_EAST_1A, US_EAST_1B, US_EAST_1C, US_EAST_1D,
|
||||||
}
|
US_WEST_1A, US_WEST_1B, AP_SOUTHEAST_1A, AP_SOUTHEAST_1B);
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return value();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static AvailabilityZone fromValue(String availablilityZone) {
|
|
||||||
return valueOf(CaseFormat.LOWER_HYPHEN.to(CaseFormat.UPPER_UNDERSCORE, checkNotNull(
|
|
||||||
availablilityZone, "availablilityZone")));
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -51,32 +51,23 @@ public class AvailabilityZoneInfo implements Comparable<AvailabilityZoneInfo>{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private final String zoneName;
|
private final String zone;
|
||||||
private final AvailabilityZone zone;
|
|
||||||
private final State state;
|
private final State state;
|
||||||
private final String region;
|
private final String region;
|
||||||
private final Set<String> messages = Sets.newHashSet();
|
private final Set<String> messages = Sets.newHashSet();
|
||||||
|
|
||||||
public AvailabilityZoneInfo(String zoneName, AvailabilityZone zone, State zoneState,
|
public AvailabilityZoneInfo(String zone, State zoneState,
|
||||||
String region, Iterable<String> messages) {
|
String region, Iterable<String> messages) {
|
||||||
this.zoneName = checkNotNull(zoneName, "zoneName");
|
|
||||||
this.zone = checkNotNull(zone, "zone");
|
this.zone = checkNotNull(zone, "zone");
|
||||||
this.state = checkNotNull(zoneState, "zoneState");
|
this.state = checkNotNull(zoneState, "zoneState");
|
||||||
this.region = checkNotNull(region, "region");
|
this.region = checkNotNull(region, "region");
|
||||||
Iterables.addAll(this.messages, checkNotNull(messages, "messages"));
|
Iterables.addAll(this.messages, checkNotNull(messages, "messages"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Name of the Availability Zone.
|
|
||||||
*/
|
|
||||||
public String getZoneName() {
|
|
||||||
return zoneName;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* the Availability Zone.
|
* the Availability Zone.
|
||||||
*/
|
*/
|
||||||
public AvailabilityZone getZone() {
|
public String getZone() {
|
||||||
return zone;
|
return zone;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,7 +100,6 @@ public class AvailabilityZoneInfo implements Comparable<AvailabilityZoneInfo>{
|
||||||
result = prime * result + ((region == null) ? 0 : region.hashCode());
|
result = prime * result + ((region == null) ? 0 : region.hashCode());
|
||||||
result = prime * result + ((state == null) ? 0 : state.hashCode());
|
result = prime * result + ((state == null) ? 0 : state.hashCode());
|
||||||
result = prime * result + ((zone == null) ? 0 : zone.hashCode());
|
result = prime * result + ((zone == null) ? 0 : zone.hashCode());
|
||||||
result = prime * result + ((zoneName == null) ? 0 : zoneName.hashCode());
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -142,23 +132,18 @@ public class AvailabilityZoneInfo implements Comparable<AvailabilityZoneInfo>{
|
||||||
return false;
|
return false;
|
||||||
} else if (!zone.equals(other.zone))
|
} else if (!zone.equals(other.zone))
|
||||||
return false;
|
return false;
|
||||||
if (zoneName == null) {
|
|
||||||
if (other.zoneName != null)
|
|
||||||
return false;
|
|
||||||
} else if (!zoneName.equals(other.zoneName))
|
|
||||||
return false;
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "AvailabilityZoneInfo [messages=" + messages + ", region=" + region + ", state="
|
return "AvailabilityZoneInfo [messages=" + messages + ", region=" + region + ", state="
|
||||||
+ state + ", zone=" + zone + ", zoneName=" + zoneName + "]";
|
+ state + ", zone=" + zone + "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int compareTo(AvailabilityZoneInfo that) {
|
public int compareTo(AvailabilityZoneInfo that) {
|
||||||
return zoneName.compareTo(that.zoneName);
|
return zone.compareTo(that.zone);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -132,7 +132,7 @@ public class RunningInstance implements Comparable<RunningInstance> {
|
||||||
private final String keyName;
|
private final String keyName;
|
||||||
private final Date launchTime;
|
private final Date launchTime;
|
||||||
private final boolean monitoring;
|
private final boolean monitoring;
|
||||||
private final AvailabilityZone availabilityZone;
|
private final String availabilityZone;
|
||||||
@Nullable
|
@Nullable
|
||||||
private final String platform;
|
private final String platform;
|
||||||
@Nullable
|
@Nullable
|
||||||
|
@ -161,7 +161,7 @@ public class RunningInstance implements Comparable<RunningInstance> {
|
||||||
String imageId, String instanceId, InstanceState instanceState,
|
String imageId, String instanceId, InstanceState instanceState,
|
||||||
String instanceType, @Nullable InetAddress ipAddress, @Nullable String kernelId,
|
String instanceType, @Nullable InetAddress ipAddress, @Nullable String kernelId,
|
||||||
@Nullable String keyName, Date launchTime, boolean monitoring,
|
@Nullable String keyName, Date launchTime, boolean monitoring,
|
||||||
AvailabilityZone availabilityZone, @Nullable String platform,
|
String availabilityZone, @Nullable String platform,
|
||||||
@Nullable String privateDnsName, @Nullable InetAddress privateIpAddress,
|
@Nullable String privateDnsName, @Nullable InetAddress privateIpAddress,
|
||||||
Set<String> productCodes, @Nullable String ramdiskId, @Nullable String reason,
|
Set<String> productCodes, @Nullable String ramdiskId, @Nullable String reason,
|
||||||
@Nullable String subnetId, @Nullable String vpcId, RootDeviceType rootDeviceType,
|
@Nullable String subnetId, @Nullable String vpcId, RootDeviceType rootDeviceType,
|
||||||
|
@ -284,7 +284,7 @@ public class RunningInstance implements Comparable<RunningInstance> {
|
||||||
/**
|
/**
|
||||||
* The location where the instance launched.
|
* The location where the instance launched.
|
||||||
*/
|
*/
|
||||||
public AvailabilityZone getAvailabilityZone() {
|
public String getAvailabilityZone() {
|
||||||
return availabilityZone;
|
return availabilityZone;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -84,13 +84,13 @@ public class Volume implements Comparable<Volume> {
|
||||||
private final int size;
|
private final int size;
|
||||||
@Nullable
|
@Nullable
|
||||||
private final String snapshotId;
|
private final String snapshotId;
|
||||||
private final AvailabilityZone availabilityZone;
|
private final String availabilityZone;
|
||||||
private final Status status;
|
private final Status status;
|
||||||
private final Date createTime;
|
private final Date createTime;
|
||||||
private final Set<Attachment> attachments = Sets.newLinkedHashSet();
|
private final Set<Attachment> attachments = Sets.newLinkedHashSet();
|
||||||
|
|
||||||
public Volume(String region, String id, int size, String snapshotId,
|
public Volume(String region, String id, int size, String snapshotId,
|
||||||
AvailabilityZone availabilityZone, Volume.Status status, Date createTime,
|
String availabilityZone, Volume.Status status, Date createTime,
|
||||||
Iterable<Attachment> attachments) {
|
Iterable<Attachment> attachments) {
|
||||||
this.region = checkNotNull(region, "region");
|
this.region = checkNotNull(region, "region");
|
||||||
this.id = id;
|
this.id = id;
|
||||||
|
@ -122,7 +122,7 @@ public class Volume implements Comparable<Volume> {
|
||||||
return snapshotId;
|
return snapshotId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AvailabilityZone getAvailabilityZone() {
|
public String getAvailabilityZone() {
|
||||||
return availabilityZone;
|
return availabilityZone;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,9 +24,7 @@ import java.util.Map;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
import org.jclouds.aws.domain.Region;
|
|
||||||
import org.jclouds.aws.ec2.EC2;
|
import org.jclouds.aws.ec2.EC2;
|
||||||
import org.jclouds.aws.ec2.domain.AvailabilityZone;
|
|
||||||
|
|
||||||
import com.google.common.base.Function;
|
import com.google.common.base.Function;
|
||||||
|
|
||||||
|
@ -36,12 +34,12 @@ import com.google.common.base.Function;
|
||||||
*/
|
*/
|
||||||
@Singleton
|
@Singleton
|
||||||
public class AvailabilityZoneToEndpoint implements Function<Object, URI> {
|
public class AvailabilityZoneToEndpoint implements Function<Object, URI> {
|
||||||
private final Map<AvailabilityZone, String> availabilityZoneToRegion;
|
private final Map<String, String> availabilityZoneToRegion;
|
||||||
private final Map<String, URI> regionToEndpoint;
|
private final Map<String, URI> regionToEndpoint;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public AvailabilityZoneToEndpoint(@EC2 Map<String, URI> regionToEndpoint,
|
public AvailabilityZoneToEndpoint(@EC2 Map<String, URI> regionToEndpoint,
|
||||||
Map<AvailabilityZone, String> availabilityZoneToRegion) {
|
Map<String, String> availabilityZoneToRegion) {
|
||||||
this.regionToEndpoint = regionToEndpoint;
|
this.regionToEndpoint = regionToEndpoint;
|
||||||
this.availabilityZoneToRegion = availabilityZoneToRegion;
|
this.availabilityZoneToRegion = availabilityZoneToRegion;
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,9 +18,9 @@
|
||||||
*/
|
*/
|
||||||
package org.jclouds.aws.ec2.options;
|
package org.jclouds.aws.ec2.options;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.jclouds.aws.ec2.domain.AvailabilityZone;
|
|
||||||
import org.jclouds.aws.ec2.options.internal.BaseEC2RequestOptions;
|
import org.jclouds.aws.ec2.options.internal.BaseEC2RequestOptions;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -46,10 +46,8 @@ public class DescribeAvailabilityZonesOptions extends BaseEC2RequestOptions {
|
||||||
/**
|
/**
|
||||||
* Availability Zone name.
|
* Availability Zone name.
|
||||||
*/
|
*/
|
||||||
public DescribeAvailabilityZonesOptions zones(AvailabilityZone... zones) {
|
public DescribeAvailabilityZonesOptions zones(String... zones) {
|
||||||
String[] zoneStrings = new String[zones.length];
|
String[] zoneStrings = Arrays.copyOf(zones, zones.length, String[].class);
|
||||||
for (int i = 0; i < zoneStrings.length; i++)
|
|
||||||
zoneStrings[i] = zones[i].value();
|
|
||||||
indexFormValuesWithPrefix("ZoneName", zoneStrings);
|
indexFormValuesWithPrefix("ZoneName", zoneStrings);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
@ -61,9 +59,9 @@ public class DescribeAvailabilityZonesOptions extends BaseEC2RequestOptions {
|
||||||
public static class Builder {
|
public static class Builder {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see DescribeAvailabilityZonesOptions#zones(AvailabilityZone[] )
|
* @see DescribeAvailabilityZonesOptions#zones(String...)
|
||||||
*/
|
*/
|
||||||
public static DescribeAvailabilityZonesOptions availabilityZones(AvailabilityZone... zones) {
|
public static DescribeAvailabilityZonesOptions availabilityZones(String... zones) {
|
||||||
DescribeAvailabilityZonesOptions options = new DescribeAvailabilityZonesOptions();
|
DescribeAvailabilityZonesOptions options = new DescribeAvailabilityZonesOptions();
|
||||||
return options.zones(zones);
|
return options.zones(zones);
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,12 +28,10 @@ import javax.ws.rs.FormParam;
|
||||||
import javax.ws.rs.POST;
|
import javax.ws.rs.POST;
|
||||||
import javax.ws.rs.Path;
|
import javax.ws.rs.Path;
|
||||||
|
|
||||||
import org.jclouds.aws.domain.Region;
|
|
||||||
import org.jclouds.aws.ec2.binders.BindUserGroupsToIndexedFormParams;
|
import org.jclouds.aws.ec2.binders.BindUserGroupsToIndexedFormParams;
|
||||||
import org.jclouds.aws.ec2.binders.BindUserIdsToIndexedFormParams;
|
import org.jclouds.aws.ec2.binders.BindUserIdsToIndexedFormParams;
|
||||||
import org.jclouds.aws.ec2.binders.BindVolumeIdsToIndexedFormParams;
|
import org.jclouds.aws.ec2.binders.BindVolumeIdsToIndexedFormParams;
|
||||||
import org.jclouds.aws.ec2.domain.Attachment;
|
import org.jclouds.aws.ec2.domain.Attachment;
|
||||||
import org.jclouds.aws.ec2.domain.AvailabilityZone;
|
|
||||||
import org.jclouds.aws.ec2.domain.Permission;
|
import org.jclouds.aws.ec2.domain.Permission;
|
||||||
import org.jclouds.aws.ec2.domain.Snapshot;
|
import org.jclouds.aws.ec2.domain.Snapshot;
|
||||||
import org.jclouds.aws.ec2.domain.Volume;
|
import org.jclouds.aws.ec2.domain.Volume;
|
||||||
|
@ -79,7 +77,7 @@ public interface ElasticBlockStoreAsyncClient {
|
||||||
@FormParams(keys = ACTION, values = "CreateVolume")
|
@FormParams(keys = ACTION, values = "CreateVolume")
|
||||||
@XMLResponseParser(CreateVolumeResponseHandler.class)
|
@XMLResponseParser(CreateVolumeResponseHandler.class)
|
||||||
ListenableFuture<Volume> createVolumeFromSnapshotInAvailabilityZone(
|
ListenableFuture<Volume> createVolumeFromSnapshotInAvailabilityZone(
|
||||||
@EndpointParam(parser = AvailabilityZoneToEndpoint.class) @FormParam("AvailabilityZone") AvailabilityZone availabilityZone,
|
@EndpointParam(parser = AvailabilityZoneToEndpoint.class) @FormParam("AvailabilityZone") String availabilityZone,
|
||||||
@FormParam("SnapshotId") String snapshotId);
|
@FormParam("SnapshotId") String snapshotId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -90,7 +88,7 @@ public interface ElasticBlockStoreAsyncClient {
|
||||||
@FormParams(keys = ACTION, values = "CreateVolume")
|
@FormParams(keys = ACTION, values = "CreateVolume")
|
||||||
@XMLResponseParser(CreateVolumeResponseHandler.class)
|
@XMLResponseParser(CreateVolumeResponseHandler.class)
|
||||||
ListenableFuture<Volume> createVolumeFromSnapshotInAvailabilityZone(
|
ListenableFuture<Volume> createVolumeFromSnapshotInAvailabilityZone(
|
||||||
@EndpointParam(parser = AvailabilityZoneToEndpoint.class) @FormParam("AvailabilityZone") AvailabilityZone availabilityZone,
|
@EndpointParam(parser = AvailabilityZoneToEndpoint.class) @FormParam("AvailabilityZone") String availabilityZone,
|
||||||
@FormParam("Size") int size, @FormParam("SnapshotId") String snapshotId);
|
@FormParam("Size") int size, @FormParam("SnapshotId") String snapshotId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -101,7 +99,7 @@ public interface ElasticBlockStoreAsyncClient {
|
||||||
@FormParams(keys = ACTION, values = "CreateVolume")
|
@FormParams(keys = ACTION, values = "CreateVolume")
|
||||||
@XMLResponseParser(CreateVolumeResponseHandler.class)
|
@XMLResponseParser(CreateVolumeResponseHandler.class)
|
||||||
ListenableFuture<Volume> createVolumeInAvailabilityZone(
|
ListenableFuture<Volume> createVolumeInAvailabilityZone(
|
||||||
@EndpointParam(parser = AvailabilityZoneToEndpoint.class) @FormParam("AvailabilityZone") AvailabilityZone availabilityZone,
|
@EndpointParam(parser = AvailabilityZoneToEndpoint.class) @FormParam("AvailabilityZone") String availabilityZone,
|
||||||
@FormParam("Size") int size);
|
@FormParam("Size") int size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -23,9 +23,7 @@ import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import org.jclouds.aws.domain.Region;
|
|
||||||
import org.jclouds.aws.ec2.domain.Attachment;
|
import org.jclouds.aws.ec2.domain.Attachment;
|
||||||
import org.jclouds.aws.ec2.domain.AvailabilityZone;
|
|
||||||
import org.jclouds.aws.ec2.domain.Permission;
|
import org.jclouds.aws.ec2.domain.Permission;
|
||||||
import org.jclouds.aws.ec2.domain.Snapshot;
|
import org.jclouds.aws.ec2.domain.Snapshot;
|
||||||
import org.jclouds.aws.ec2.domain.Volume;
|
import org.jclouds.aws.ec2.domain.Volume;
|
||||||
|
@ -65,7 +63,7 @@ public interface ElasticBlockStoreClient {
|
||||||
* "http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateVolume.html"
|
* "http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateVolume.html"
|
||||||
* />
|
* />
|
||||||
*/
|
*/
|
||||||
Volume createVolumeFromSnapshotInAvailabilityZone(AvailabilityZone availabilityZone,
|
Volume createVolumeFromSnapshotInAvailabilityZone(String availabilityZone,
|
||||||
String snapshotId);
|
String snapshotId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -95,7 +93,7 @@ public interface ElasticBlockStoreClient {
|
||||||
* "http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateVolume.html"
|
* "http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateVolume.html"
|
||||||
* />
|
* />
|
||||||
*/
|
*/
|
||||||
Volume createVolumeFromSnapshotInAvailabilityZone(AvailabilityZone availabilityZone,
|
Volume createVolumeFromSnapshotInAvailabilityZone(String availabilityZone,
|
||||||
int size, String snapshotId);
|
int size, String snapshotId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -120,7 +118,7 @@ public interface ElasticBlockStoreClient {
|
||||||
* "http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateVolume.html"
|
* "http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/ApiReference-query-CreateVolume.html"
|
||||||
* />
|
* />
|
||||||
*/
|
*/
|
||||||
Volume createVolumeInAvailabilityZone(AvailabilityZone availabilityZone, int size);
|
Volume createVolumeInAvailabilityZone(String availabilityZone, int size);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Describes the specified Amazon EBS volumes that you own. If you do not specify one or more
|
* Describes the specified Amazon EBS volumes that you own. If you do not specify one or more
|
||||||
|
|
|
@ -88,7 +88,7 @@ public interface InstanceAsyncClient {
|
||||||
@XMLResponseParser(RunInstancesResponseHandler.class)
|
@XMLResponseParser(RunInstancesResponseHandler.class)
|
||||||
ListenableFuture<Reservation> runInstancesInRegion(
|
ListenableFuture<Reservation> runInstancesInRegion(
|
||||||
@EndpointParam(parser = RegionToEndpoint.class) @Nullable String region,
|
@EndpointParam(parser = RegionToEndpoint.class) @Nullable String region,
|
||||||
@Nullable @BinderParam(IfNotNullBindAvailabilityZoneToFormParam.class) AvailabilityZone nullableAvailabilityZone,
|
@Nullable @BinderParam(IfNotNullBindAvailabilityZoneToFormParam.class) String nullableAvailabilityZone,
|
||||||
@FormParam("ImageId") String imageId, @FormParam("MinCount") int minCount,
|
@FormParam("ImageId") String imageId, @FormParam("MinCount") int minCount,
|
||||||
@FormParam("MaxCount") int maxCount, RunInstancesOptions... options);
|
@FormParam("MaxCount") int maxCount, RunInstancesOptions... options);
|
||||||
|
|
||||||
|
|
|
@ -134,7 +134,7 @@ public interface InstanceClient {
|
||||||
* @see RunInstancesOptions
|
* @see RunInstancesOptions
|
||||||
*/
|
*/
|
||||||
Reservation runInstancesInRegion(@Nullable String region,
|
Reservation runInstancesInRegion(@Nullable String region,
|
||||||
@Nullable AvailabilityZone nullableAvailabilityZone, String imageId, int minCount,
|
@Nullable String nullableAvailabilityZone, String imageId, int minCount,
|
||||||
int maxCount, RunInstancesOptions... options);
|
int maxCount, RunInstancesOptions... options);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -70,10 +70,11 @@ public class EC2Utils {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static AvailabilityZone findAvailabilityZoneInArgsOrNull(GeneratedHttpRequest<?> gRequest) {
|
public static String findAvailabilityZoneInArgsOrNull(GeneratedHttpRequest<?> gRequest) {
|
||||||
for (Object arg : gRequest.getArgs()) {
|
for (Object arg : gRequest.getArgs()) {
|
||||||
if (arg instanceof AvailabilityZone) {
|
if (arg instanceof String) {
|
||||||
return (AvailabilityZone) arg;
|
String zone = (String) arg;
|
||||||
|
if(AvailabilityZone.zones.contains(zone)) return zone;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -28,12 +28,9 @@ import java.util.SortedSet;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
import org.jclouds.aws.domain.Region;
|
|
||||||
import org.jclouds.aws.ec2.EC2;
|
import org.jclouds.aws.ec2.EC2;
|
||||||
import org.jclouds.aws.ec2.domain.Attachment;
|
import org.jclouds.aws.ec2.domain.Attachment;
|
||||||
import org.jclouds.aws.ec2.domain.AvailabilityZone;
|
|
||||||
import org.jclouds.aws.ec2.domain.InstanceState;
|
import org.jclouds.aws.ec2.domain.InstanceState;
|
||||||
import org.jclouds.aws.ec2.domain.InstanceType;
|
|
||||||
import org.jclouds.aws.ec2.domain.Reservation;
|
import org.jclouds.aws.ec2.domain.Reservation;
|
||||||
import org.jclouds.aws.ec2.domain.RootDeviceType;
|
import org.jclouds.aws.ec2.domain.RootDeviceType;
|
||||||
import org.jclouds.aws.ec2.domain.RunningInstance;
|
import org.jclouds.aws.ec2.domain.RunningInstance;
|
||||||
|
@ -81,7 +78,7 @@ public abstract class BaseReservationHandler<T> extends HandlerWithResult<T> {
|
||||||
private String keyName;
|
private String keyName;
|
||||||
private Date launchTime;
|
private Date launchTime;
|
||||||
private boolean monitoring;
|
private boolean monitoring;
|
||||||
private AvailabilityZone availabilityZone;
|
private String availabilityZone;
|
||||||
private String platform;
|
private String platform;
|
||||||
private String privateDnsName;
|
private String privateDnsName;
|
||||||
private InetAddress privateIpAddress;
|
private InetAddress privateIpAddress;
|
||||||
|
@ -153,7 +150,7 @@ public abstract class BaseReservationHandler<T> extends HandlerWithResult<T> {
|
||||||
} else if (qName.equals("enabled")) {
|
} else if (qName.equals("enabled")) {
|
||||||
monitoring = Boolean.parseBoolean(currentOrNull());
|
monitoring = Boolean.parseBoolean(currentOrNull());
|
||||||
} else if (qName.equals("availabilityZone")) {
|
} else if (qName.equals("availabilityZone")) {
|
||||||
availabilityZone = AvailabilityZone.fromValue(currentOrNull());
|
availabilityZone = currentOrNull();
|
||||||
} else if (qName.equals("platform")) {
|
} else if (qName.equals("platform")) {
|
||||||
platform = currentOrNull();
|
platform = currentOrNull();
|
||||||
} else if (qName.equals("privateDnsName")) {
|
} else if (qName.equals("privateDnsName")) {
|
||||||
|
|
|
@ -27,10 +27,8 @@ import java.util.Set;
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
import org.jclouds.aws.domain.Region;
|
|
||||||
import org.jclouds.aws.ec2.EC2;
|
import org.jclouds.aws.ec2.EC2;
|
||||||
import org.jclouds.aws.ec2.domain.Attachment;
|
import org.jclouds.aws.ec2.domain.Attachment;
|
||||||
import org.jclouds.aws.ec2.domain.AvailabilityZone;
|
|
||||||
import org.jclouds.aws.ec2.domain.Volume;
|
import org.jclouds.aws.ec2.domain.Volume;
|
||||||
import org.jclouds.aws.ec2.util.EC2Utils;
|
import org.jclouds.aws.ec2.util.EC2Utils;
|
||||||
import org.jclouds.date.DateService;
|
import org.jclouds.date.DateService;
|
||||||
|
@ -56,12 +54,12 @@ public class CreateVolumeResponseHandler extends ParseSax.HandlerWithResult<Volu
|
||||||
@EC2
|
@EC2
|
||||||
String defaultRegion;
|
String defaultRegion;
|
||||||
@Inject
|
@Inject
|
||||||
protected Map<AvailabilityZone, String> availabilityZoneToRegion;
|
protected Map<String, String> availabilityZoneToRegion;
|
||||||
|
|
||||||
private String id;
|
private String id;
|
||||||
private int size;
|
private int size;
|
||||||
private String snapshotId;
|
private String snapshotId;
|
||||||
private AvailabilityZone availabilityZone;
|
private String availabilityZone;
|
||||||
private Volume.Status volumeStatus;
|
private Volume.Status volumeStatus;
|
||||||
private Date createTime;
|
private Date createTime;
|
||||||
private Set<Attachment> attachments = Sets.newLinkedHashSet();
|
private Set<Attachment> attachments = Sets.newLinkedHashSet();
|
||||||
|
@ -96,13 +94,7 @@ public class CreateVolumeResponseHandler extends ParseSax.HandlerWithResult<Volu
|
||||||
} else if (qName.equals("size")) {
|
} else if (qName.equals("size")) {
|
||||||
size = Integer.parseInt(currentText.toString().trim());
|
size = Integer.parseInt(currentText.toString().trim());
|
||||||
} else if (qName.equals("availabilityZone")) {
|
} else if (qName.equals("availabilityZone")) {
|
||||||
String availabilityZoneName = currentText.toString().trim();
|
availabilityZone = currentText.toString().trim();
|
||||||
try {
|
|
||||||
availabilityZone = AvailabilityZone.fromValue(availabilityZoneName);
|
|
||||||
} catch (IllegalArgumentException e) {
|
|
||||||
logger.warn(e, "unsupported availability zone: %s", availabilityZoneName);
|
|
||||||
availabilityZone = AvailabilityZone.UNKNOWN;
|
|
||||||
}
|
|
||||||
} else if (qName.equals("volumeId")) {
|
} else if (qName.equals("volumeId")) {
|
||||||
if (inAttachmentSet) {
|
if (inAttachmentSet) {
|
||||||
volumeId = currentText.toString().trim();
|
volumeId = currentText.toString().trim();
|
||||||
|
@ -166,7 +158,7 @@ public class CreateVolumeResponseHandler extends ParseSax.HandlerWithResult<Volu
|
||||||
super.setContext(request);
|
super.setContext(request);
|
||||||
region = EC2Utils.findRegionInArgsOrNull(request);
|
region = EC2Utils.findRegionInArgsOrNull(request);
|
||||||
if (region == null) {
|
if (region == null) {
|
||||||
AvailabilityZone zone = EC2Utils.findAvailabilityZoneInArgsOrNull(request);
|
String zone = EC2Utils.findAvailabilityZoneInArgsOrNull(request);
|
||||||
if (zone != null) {
|
if (zone != null) {
|
||||||
region = checkNotNull(availabilityZoneToRegion.get(zone), String.format(
|
region = checkNotNull(availabilityZoneToRegion.get(zone), String.format(
|
||||||
"zone %s not in %s", zone, availabilityZoneToRegion));
|
"zone %s not in %s", zone, availabilityZoneToRegion));
|
||||||
|
|
|
@ -22,8 +22,6 @@ import java.util.Set;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
import org.jclouds.aws.domain.Region;
|
|
||||||
import org.jclouds.aws.ec2.domain.AvailabilityZone;
|
|
||||||
import org.jclouds.aws.ec2.domain.AvailabilityZoneInfo;
|
import org.jclouds.aws.ec2.domain.AvailabilityZoneInfo;
|
||||||
import org.jclouds.aws.ec2.domain.AvailabilityZoneInfo.State;
|
import org.jclouds.aws.ec2.domain.AvailabilityZoneInfo.State;
|
||||||
import org.jclouds.http.functions.ParseSax;
|
import org.jclouds.http.functions.ParseSax;
|
||||||
|
@ -41,11 +39,10 @@ public class DescribeAvailabilityZonesResponseHandler extends
|
||||||
private StringBuilder currentText = new StringBuilder();
|
private StringBuilder currentText = new StringBuilder();
|
||||||
|
|
||||||
private Set<AvailabilityZoneInfo> availablilityZones = Sets.newLinkedHashSet();
|
private Set<AvailabilityZoneInfo> availablilityZones = Sets.newLinkedHashSet();
|
||||||
private AvailabilityZone zone;
|
private String zone;
|
||||||
@Resource
|
@Resource
|
||||||
protected Logger logger = Logger.NULL;
|
protected Logger logger = Logger.NULL;
|
||||||
private String region;
|
private String region;
|
||||||
private String zoneName;
|
|
||||||
private State zoneState;
|
private State zoneState;
|
||||||
private boolean inMessageSet;
|
private boolean inMessageSet;
|
||||||
private Set<String> messages = Sets.newHashSet();
|
private Set<String> messages = Sets.newHashSet();
|
||||||
|
@ -62,13 +59,7 @@ public class DescribeAvailabilityZonesResponseHandler extends
|
||||||
|
|
||||||
public void endElement(String uri, String name, String qName) {
|
public void endElement(String uri, String name, String qName) {
|
||||||
if (qName.equals("zoneName")) {
|
if (qName.equals("zoneName")) {
|
||||||
zoneName = currentText.toString().trim();
|
zone = currentText.toString().trim();
|
||||||
try {
|
|
||||||
zone = AvailabilityZone.fromValue(zoneName);
|
|
||||||
} catch (IllegalArgumentException e) {
|
|
||||||
logger.warn(e, "unsupported region: %s", zoneName);
|
|
||||||
zone = AvailabilityZone.UNKNOWN;
|
|
||||||
}
|
|
||||||
} else if (qName.equals("regionName")) {
|
} else if (qName.equals("regionName")) {
|
||||||
try {
|
try {
|
||||||
region = currentText.toString().trim();
|
region = currentText.toString().trim();
|
||||||
|
@ -88,10 +79,9 @@ public class DescribeAvailabilityZonesResponseHandler extends
|
||||||
} else if (qName.equals("messageSet")) {
|
} else if (qName.equals("messageSet")) {
|
||||||
inMessageSet = false;
|
inMessageSet = false;
|
||||||
} else if (qName.equals("item") && !inMessageSet) {
|
} else if (qName.equals("item") && !inMessageSet) {
|
||||||
availablilityZones.add(new AvailabilityZoneInfo(zoneName, zone, zoneState, region,
|
availablilityZones.add(new AvailabilityZoneInfo(zone, zoneState, region,
|
||||||
messages));
|
messages));
|
||||||
this.zone = null;
|
this.zone = null;
|
||||||
this.zoneName = null;
|
|
||||||
this.region = null;
|
this.region = null;
|
||||||
this.zoneState = null;
|
this.zoneState = null;
|
||||||
this.messages = Sets.newHashSet();
|
this.messages = Sets.newHashSet();
|
||||||
|
|
|
@ -34,7 +34,6 @@ import org.jclouds.aws.domain.Region;
|
||||||
import org.jclouds.aws.ec2.EC2AsyncClient;
|
import org.jclouds.aws.ec2.EC2AsyncClient;
|
||||||
import org.jclouds.aws.ec2.EC2Client;
|
import org.jclouds.aws.ec2.EC2Client;
|
||||||
import org.jclouds.aws.ec2.EC2ContextFactory;
|
import org.jclouds.aws.ec2.EC2ContextFactory;
|
||||||
import org.jclouds.aws.ec2.domain.AvailabilityZone;
|
|
||||||
import org.jclouds.aws.ec2.domain.AvailabilityZoneInfo;
|
import org.jclouds.aws.ec2.domain.AvailabilityZoneInfo;
|
||||||
import org.jclouds.logging.log4j.config.Log4JLoggingModule;
|
import org.jclouds.logging.log4j.config.Log4JLoggingModule;
|
||||||
import org.jclouds.rest.RestContext;
|
import org.jclouds.rest.RestContext;
|
||||||
|
@ -75,8 +74,8 @@ public class AvailabilityZoneAndRegionClientLiveTest {
|
||||||
assertNotNull(allResults);
|
assertNotNull(allResults);
|
||||||
assert allResults.size() >= 2 : allResults.size();
|
assert allResults.size() >= 2 : allResults.size();
|
||||||
Iterator<AvailabilityZoneInfo> iterator = allResults.iterator();
|
Iterator<AvailabilityZoneInfo> iterator = allResults.iterator();
|
||||||
AvailabilityZone id1 = iterator.next().getZone();
|
String id1 = iterator.next().getZone();
|
||||||
AvailabilityZone id2 = iterator.next().getZone();
|
String id2 = iterator.next().getZone();
|
||||||
SortedSet<AvailabilityZoneInfo> twoResults = Sets.newTreeSet(client
|
SortedSet<AvailabilityZoneInfo> twoResults = Sets.newTreeSet(client
|
||||||
.describeAvailabilityZonesInRegion(region, availabilityZones(id1, id2)));
|
.describeAvailabilityZonesInRegion(region, availabilityZones(id1, id2)));
|
||||||
assertNotNull(twoResults);
|
assertNotNull(twoResults);
|
||||||
|
|
|
@ -108,8 +108,8 @@ public abstract class BaseEC2AsyncClientTest<T> extends RestClientTest<T> {
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
@Singleton
|
@Singleton
|
||||||
@Provides
|
@Provides
|
||||||
Map<AvailabilityZone, String> provideAvailabilityZoneRegionMap() {
|
Map<String, String> provideAvailabilityZoneRegionMap() {
|
||||||
return ImmutableMap.<AvailabilityZone, String> of(AvailabilityZone.US_EAST_1A,
|
return ImmutableMap.<String, String> of(AvailabilityZone.US_EAST_1A,
|
||||||
Region.US_EAST_1);
|
Region.US_EAST_1);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -25,7 +25,6 @@ import java.io.IOException;
|
||||||
import java.lang.reflect.Array;
|
import java.lang.reflect.Array;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
import org.jclouds.aws.domain.Region;
|
|
||||||
import org.jclouds.aws.ec2.domain.AvailabilityZone;
|
import org.jclouds.aws.ec2.domain.AvailabilityZone;
|
||||||
import org.jclouds.aws.ec2.functions.ReturnVoidOnVolumeAvailable;
|
import org.jclouds.aws.ec2.functions.ReturnVoidOnVolumeAvailable;
|
||||||
import org.jclouds.aws.ec2.options.CreateSnapshotOptions;
|
import org.jclouds.aws.ec2.options.CreateSnapshotOptions;
|
||||||
|
@ -57,7 +56,7 @@ public class ElasticBlockStoreAsyncClientTest extends
|
||||||
|
|
||||||
public void testCreateVolume() throws SecurityException, NoSuchMethodException, IOException {
|
public void testCreateVolume() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
Method method = ElasticBlockStoreAsyncClient.class.getMethod(
|
Method method = ElasticBlockStoreAsyncClient.class.getMethod(
|
||||||
"createVolumeInAvailabilityZone", AvailabilityZone.class, int.class);
|
"createVolumeInAvailabilityZone", String.class, int.class);
|
||||||
GeneratedHttpRequest<ElasticBlockStoreAsyncClient> httpMethod = processor.createRequest(
|
GeneratedHttpRequest<ElasticBlockStoreAsyncClient> httpMethod = processor.createRequest(
|
||||||
method, AvailabilityZone.US_EAST_1A, 20);
|
method, AvailabilityZone.US_EAST_1A, 20);
|
||||||
|
|
||||||
|
@ -77,7 +76,7 @@ public class ElasticBlockStoreAsyncClientTest extends
|
||||||
public void testCreateVolumeFromSnapShot() throws SecurityException, NoSuchMethodException,
|
public void testCreateVolumeFromSnapShot() throws SecurityException, NoSuchMethodException,
|
||||||
IOException {
|
IOException {
|
||||||
Method method = ElasticBlockStoreAsyncClient.class.getMethod(
|
Method method = ElasticBlockStoreAsyncClient.class.getMethod(
|
||||||
"createVolumeFromSnapshotInAvailabilityZone", AvailabilityZone.class, String.class);
|
"createVolumeFromSnapshotInAvailabilityZone", String.class, String.class);
|
||||||
GeneratedHttpRequest<ElasticBlockStoreAsyncClient> httpMethod = processor.createRequest(
|
GeneratedHttpRequest<ElasticBlockStoreAsyncClient> httpMethod = processor.createRequest(
|
||||||
method, AvailabilityZone.US_EAST_1A, "snapshotId");
|
method, AvailabilityZone.US_EAST_1A, "snapshotId");
|
||||||
|
|
||||||
|
@ -97,7 +96,7 @@ public class ElasticBlockStoreAsyncClientTest extends
|
||||||
public void testCreateVolumeFromSnapShotWithSize() throws SecurityException,
|
public void testCreateVolumeFromSnapShotWithSize() throws SecurityException,
|
||||||
NoSuchMethodException, IOException {
|
NoSuchMethodException, IOException {
|
||||||
Method method = ElasticBlockStoreAsyncClient.class.getMethod(
|
Method method = ElasticBlockStoreAsyncClient.class.getMethod(
|
||||||
"createVolumeFromSnapshotInAvailabilityZone", AvailabilityZone.class, int.class,
|
"createVolumeFromSnapshotInAvailabilityZone", String.class, int.class,
|
||||||
String.class);
|
String.class);
|
||||||
GeneratedHttpRequest<ElasticBlockStoreAsyncClient> httpMethod = processor.createRequest(
|
GeneratedHttpRequest<ElasticBlockStoreAsyncClient> httpMethod = processor.createRequest(
|
||||||
method, AvailabilityZone.US_EAST_1A, 15, "snapshotId");
|
method, AvailabilityZone.US_EAST_1A, 15, "snapshotId");
|
||||||
|
|
|
@ -113,7 +113,7 @@ public class InstanceAsyncClientTest extends BaseEC2AsyncClientTest<InstanceAsyn
|
||||||
|
|
||||||
public void testRunInstances() throws SecurityException, NoSuchMethodException, IOException {
|
public void testRunInstances() throws SecurityException, NoSuchMethodException, IOException {
|
||||||
Method method = InstanceAsyncClient.class.getMethod("runInstancesInRegion", String.class,
|
Method method = InstanceAsyncClient.class.getMethod("runInstancesInRegion", String.class,
|
||||||
AvailabilityZone.class, String.class, int.class, int.class, Array.newInstance(
|
String.class, String.class, int.class, int.class, Array.newInstance(
|
||||||
RunInstancesOptions.class, 0).getClass());
|
RunInstancesOptions.class, 0).getClass());
|
||||||
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method, null,
|
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method, null,
|
||||||
null, "ami-voo", 1, 1);
|
null, "ami-voo", 1, 1);
|
||||||
|
@ -134,7 +134,7 @@ public class InstanceAsyncClientTest extends BaseEC2AsyncClientTest<InstanceAsyn
|
||||||
public void testRunInstancesOptions() throws SecurityException, NoSuchMethodException,
|
public void testRunInstancesOptions() throws SecurityException, NoSuchMethodException,
|
||||||
IOException {
|
IOException {
|
||||||
Method method = InstanceAsyncClient.class.getMethod("runInstancesInRegion", String.class,
|
Method method = InstanceAsyncClient.class.getMethod("runInstancesInRegion", String.class,
|
||||||
AvailabilityZone.class, String.class, int.class, int.class, Array.newInstance(
|
String.class, String.class, int.class, int.class, Array.newInstance(
|
||||||
RunInstancesOptions.class, 0).getClass());
|
RunInstancesOptions.class, 0).getClass());
|
||||||
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method,
|
GeneratedHttpRequest<InstanceAsyncClient> httpMethod = processor.createRequest(method,
|
||||||
Region.EU_WEST_1, AvailabilityZone.EU_WEST_1A, "ami-voo", 1, 5,
|
Region.EU_WEST_1, AvailabilityZone.EU_WEST_1A, "ami-voo", 1, 5,
|
||||||
|
|
|
@ -67,8 +67,8 @@ public class BaseEC2HandlerTest extends BaseHandlerTest {
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
@Singleton
|
@Singleton
|
||||||
@Provides
|
@Provides
|
||||||
Map<AvailabilityZone, String> provideAvailabilityZoneRegionMap() {
|
Map<String, String> provideAvailabilityZoneRegionMap() {
|
||||||
return ImmutableMap.<AvailabilityZone, String> of(AvailabilityZone.US_EAST_1A,
|
return ImmutableMap.<String, String> of(AvailabilityZone.US_EAST_1A,
|
||||||
Region.US_EAST_1);
|
Region.US_EAST_1);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -44,15 +44,19 @@ public class DescribeAvailabilityZonesResponseHandlerTest extends BaseHandlerTes
|
||||||
InputStream is = getClass().getResourceAsStream("/ec2/availabilityZones.xml");
|
InputStream is = getClass().getResourceAsStream("/ec2/availabilityZones.xml");
|
||||||
|
|
||||||
Set<AvailabilityZoneInfo> expected = ImmutableSet.<AvailabilityZoneInfo> of(
|
Set<AvailabilityZoneInfo> expected = ImmutableSet.<AvailabilityZoneInfo> of(
|
||||||
new AvailabilityZoneInfo("us-east-1a", AvailabilityZone.US_EAST_1A,
|
|
||||||
|
new AvailabilityZoneInfo(AvailabilityZone.US_EAST_1A,
|
||||||
AvailabilityZoneInfo.State.AVAILABLE, Region.US_EAST_1, ImmutableSet
|
AvailabilityZoneInfo.State.AVAILABLE, Region.US_EAST_1, ImmutableSet
|
||||||
.<String> of()), new AvailabilityZoneInfo("us-east-1b",
|
.<String> of()),
|
||||||
AvailabilityZone.US_EAST_1B, AvailabilityZoneInfo.State.AVAILABLE,
|
new AvailabilityZoneInfo(AvailabilityZone.US_EAST_1B,
|
||||||
Region.US_EAST_1, ImmutableSet.<String> of()), new AvailabilityZoneInfo(
|
AvailabilityZoneInfo.State.AVAILABLE,
|
||||||
"us-east-1c", AvailabilityZone.US_EAST_1C,
|
Region.US_EAST_1, ImmutableSet.<String> of()),
|
||||||
|
|
||||||
|
new AvailabilityZoneInfo(AvailabilityZone.US_EAST_1C,
|
||||||
AvailabilityZoneInfo.State.AVAILABLE, Region.US_EAST_1, ImmutableSet
|
AvailabilityZoneInfo.State.AVAILABLE, Region.US_EAST_1, ImmutableSet
|
||||||
.<String> of("our service is awesome")), new AvailabilityZoneInfo(
|
.<String> of("our service is awesome")),
|
||||||
"us-east-1d", AvailabilityZone.US_EAST_1D,
|
|
||||||
|
new AvailabilityZoneInfo(AvailabilityZone.US_EAST_1D,
|
||||||
AvailabilityZoneInfo.State.UNKNOWN, Region.US_EAST_1, ImmutableSet
|
AvailabilityZoneInfo.State.UNKNOWN, Region.US_EAST_1, ImmutableSet
|
||||||
.<String> of()));
|
.<String> of()));
|
||||||
Set<AvailabilityZoneInfo> result = factory.create(
|
Set<AvailabilityZoneInfo> result = factory.create(
|
||||||
|
|
|
@ -51,7 +51,7 @@ Here's an example of creating and running a small linux node with the tag webser
|
||||||
|
|
||||||
See http://code.google.com/p/jclouds for details."
|
See http://code.google.com/p/jclouds for details."
|
||||||
(:use org.jclouds.core
|
(:use org.jclouds.core
|
||||||
clojure.contrib.logging)
|
(clojure.contrib logging core))
|
||||||
(:import java.io.File
|
(:import java.io.File
|
||||||
java.util.Properties
|
java.util.Properties
|
||||||
[org.jclouds.domain Location]
|
[org.jclouds.domain Location]
|
||||||
|
@ -304,7 +304,7 @@ See http://code.google.com/p/jclouds for details."
|
||||||
(defn location
|
(defn location
|
||||||
"Returns the compute node's location id"
|
"Returns the compute node's location id"
|
||||||
[#^ComputeMetadata node]
|
[#^ComputeMetadata node]
|
||||||
(.getLocationId node))
|
(-?> node .getLocation .getId))
|
||||||
|
|
||||||
(define-accessors Template image size location options)
|
(define-accessors Template image size location options)
|
||||||
(define-accessors Image version os-family os-description architecture)
|
(define-accessors Image version os-family os-description architecture)
|
||||||
|
|
Loading…
Reference in New Issue