You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by pr...@apache.org on 2013/02/13 00:10:28 UTC

[3/8] git commit: refs/heads/4.1 - CLOUDSTACK-1128: [EC2 Query API] DescribeAvailabilityZones, support for message filter

CLOUDSTACK-1128: [EC2 Query API] DescribeAvailabilityZones, support for message filter

Add message in the response element of EC2DesrcibeAvailibilityZones. Add support for filter 'message'.
The value of 'message' should be set to the allocation_state of the zone
Code cleanup


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/ee90ebfc
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/ee90ebfc
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/ee90ebfc

Branch: refs/heads/4.1
Commit: ee90ebfc00dff37a2eb5be372d8aa955176f7025
Parents: 961c8ee
Author: Prachi Damle <pr...@cloud.com>
Authored: Tue Feb 12 13:34:49 2013 -0800
Committer: Prachi Damle <pr...@cloud.com>
Committed: Tue Feb 12 13:45:29 2013 -0800

----------------------------------------------------------------------
 .../cloud/bridge/service/EC2SoapServiceImpl.java   |   15 +++--
 .../service/core/ec2/EC2AvailabilityZone.java      |   55 +++++++++++++++
 .../core/ec2/EC2AvailabilityZonesFilterSet.java    |   21 ++++--
 .../ec2/EC2DescribeAvailabilityZonesResponse.java  |   36 +++-------
 .../cloud/bridge/service/core/ec2/EC2Engine.java   |   43 ++++++-----
 5 files changed, 113 insertions(+), 57 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ee90ebfc/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java b/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java
index bf3c13e..442b460 100644
--- a/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java
+++ b/awsapi/src/com/cloud/bridge/service/EC2SoapServiceImpl.java
@@ -41,6 +41,7 @@ import com.cloud.bridge.service.core.ec2.EC2DescribeAvailabilityZones;
 import com.cloud.bridge.service.core.ec2.EC2DescribeAvailabilityZonesResponse;
 import com.cloud.bridge.service.core.ec2.EC2DescribeImageAttribute;
 
+import com.cloud.bridge.service.core.ec2.EC2AvailabilityZone;
 import com.cloud.bridge.service.core.ec2.EC2DescribeImages;
 import com.cloud.bridge.service.core.ec2.EC2DescribeImagesResponse;
 import com.cloud.bridge.service.core.ec2.EC2DescribeInstances;
@@ -1775,14 +1776,18 @@ public class EC2SoapServiceImpl implements AmazonEC2SkeletonInterface  {
 		DescribeAvailabilityZonesResponse response = new DescribeAvailabilityZonesResponse();
 		DescribeAvailabilityZonesResponseType param1 = new DescribeAvailabilityZonesResponseType();
         AvailabilityZoneSetType param2 = new AvailabilityZoneSetType();
-        
-		String[] zones = engineResponse.getZoneSet();
-		for (String zone : zones) {
+
+        EC2AvailabilityZone[] zones = engineResponse.getAvailabilityZoneSet();
+        for (EC2AvailabilityZone zone : zones) {
             AvailabilityZoneItemType param3 = new AvailabilityZoneItemType(); 
-            AvailabilityZoneMessageSetType param4 = new AvailabilityZoneMessageSetType();
-            param3.setZoneName( zone );
+            param3.setZoneName( zone.getName() );
             param3.setZoneState( "available" );
             param3.setRegionName( "" );
+
+            AvailabilityZoneMessageSetType param4 = new AvailabilityZoneMessageSetType();
+            AvailabilityZoneMessageType param5 = new AvailabilityZoneMessageType();
+            param5.setMessage(zone.getMessage());
+            param4.addItem(param5);
             param3.setMessageSet( param4 );
             param2.addItem( param3 );
 		}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ee90ebfc/awsapi/src/com/cloud/bridge/service/core/ec2/EC2AvailabilityZone.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2AvailabilityZone.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2AvailabilityZone.java
new file mode 100644
index 0000000..457c6ef
--- /dev/null
+++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2AvailabilityZone.java
@@ -0,0 +1,55 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.bridge.service.core.ec2;
+
+public class EC2AvailabilityZone {
+
+    private String   id;
+    private String   name;
+    private String   message;
+
+    public EC2AvailabilityZone() {
+        id      = null;
+        name    = null;
+        message = null;
+	}
+
+    public void setId( String id ) {
+        this.id = id;
+    }
+
+    public String getId() {
+        return this.id;
+    }
+
+    public void setName( String name ) {
+        this.name = name;
+    }
+
+    public String getName() {
+        return this.name;
+    }
+
+    public void setMessage( String message ) {
+        this.message = message;
+    }
+
+    public String getMessage() {
+        return this.message;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ee90ebfc/awsapi/src/com/cloud/bridge/service/core/ec2/EC2AvailabilityZonesFilterSet.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2AvailabilityZonesFilterSet.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2AvailabilityZonesFilterSet.java
index 994b721..aa3897a 100644
--- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2AvailabilityZonesFilterSet.java
+++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2AvailabilityZonesFilterSet.java
@@ -36,6 +36,7 @@ public class EC2AvailabilityZonesFilterSet {
     public EC2AvailabilityZonesFilterSet() {
         // -> use these values to check that the proper filter is passed to this type of filter set
         filterTypes.put( "zone-name", "String" );
+        filterTypes.put( "message", "String");
     }
 
     public void addFilter( EC2Filter param ) {	
@@ -55,13 +56,14 @@ public class EC2AvailabilityZonesFilterSet {
         return filterSet.toArray(new EC2Filter[0]);
     }
 
-    public List<String> evaluate( EC2DescribeAvailabilityZonesResponse availabilityZones) throws ParseException	{
-        List<String> resultList = new ArrayList<String>();
+    public EC2DescribeAvailabilityZonesResponse evaluate( EC2DescribeAvailabilityZonesResponse availabilityZones)
+            throws ParseException    {
+        EC2DescribeAvailabilityZonesResponse resultList = new EC2DescribeAvailabilityZonesResponse();
 
         boolean matched;
 
         EC2Filter[] filterSet = getFilterSet();
-        for ( String availableZone : availabilityZones.getZoneSet() ) {
+        for ( EC2AvailabilityZone availableZone : availabilityZones.getAvailabilityZoneSet() ) {
             matched = true;
             if (filterSet != null) {
                 for (EC2Filter filter : filterSet) {
@@ -71,19 +73,22 @@ public class EC2AvailabilityZonesFilterSet {
                     }
                 }
             }
-            if (matched == true)
-                resultList.add(availableZone);
+            if (matched)
+                resultList.addAvailabilityZone(availableZone);
         }
         return resultList;
     }
 
-    private boolean filterMatched( String availableZone, EC2Filter filter ) throws ParseException {
+    private boolean filterMatched( EC2AvailabilityZone availableZone, EC2Filter filter ) throws ParseException {
         String filterName = filter.getName();
         String[] valueSet = filter.getValueSet();
 
         if ( filterName.equalsIgnoreCase("zone-name")) {
-            return containsString(availableZone, valueSet);
-        } 
+            return containsString(availableZone.getName(), valueSet);
+        }
+        else if (filterName.equalsIgnoreCase("message")) {
+            return containsString(availableZone.getMessage(), valueSet);
+        }
         return false;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ee90ebfc/awsapi/src/com/cloud/bridge/service/core/ec2/EC2DescribeAvailabilityZonesResponse.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2DescribeAvailabilityZonesResponse.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2DescribeAvailabilityZonesResponse.java
index ae0c233..f9bc6b6 100644
--- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2DescribeAvailabilityZonesResponse.java
+++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2DescribeAvailabilityZonesResponse.java
@@ -20,31 +20,17 @@ import java.util.ArrayList;
 import java.util.List;
 
 public class EC2DescribeAvailabilityZonesResponse {
+    private List<EC2AvailabilityZone> availabilityZoneSet = new ArrayList<EC2AvailabilityZone>();
 
-	private List<String> zoneIds   = new ArrayList<String>();    
-	private List<String> zoneNames = new ArrayList<String>();    
+    public EC2DescribeAvailabilityZonesResponse() {
+    }
+
+    public void addAvailabilityZone( EC2AvailabilityZone param ) {
+        availabilityZoneSet.add( param );
+    }
+
+    public EC2AvailabilityZone[] getAvailabilityZoneSet() {
+        return availabilityZoneSet.toArray(new EC2AvailabilityZone[0]);
+    }
 
-	public EC2DescribeAvailabilityZonesResponse() {
-	}
-	
-    public void addZone(String id, String name) {
-        zoneIds.add(id);
-        zoneNames.add(name);
-	}
-	
-	/**
-	 * The Amazon API only cares about the names of zones not their ID value.
-	 * 
-	 * @return an array containing a set of zone names
-	 */
-	public String[] getZoneSet() {
-		return zoneNames.toArray(new String[0]);
-	}
-	
-    public String getZoneIdAt(int index) {
-        if (zoneIds.isEmpty() || index >= zoneIds.size()) {
-            return null;
-        }
-        return zoneIds.get(index);
-	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ee90ebfc/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java
----------------------------------------------------------------------
diff --git a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java
index b729f77..1d278a2 100644
--- a/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java
+++ b/awsapi/src/com/cloud/bridge/service/core/ec2/EC2Engine.java
@@ -1060,12 +1060,8 @@ public class EC2Engine extends ManagerBase {
             EC2AvailabilityZonesFilterSet azfs = request.getFilterSet();
             if ( null == azfs )
                 return availableZones;
-            else {
-                List<String> matchedAvailableZones = azfs.evaluate(availableZones);
-                if (matchedAvailableZones.isEmpty())
-                    return new EC2DescribeAvailabilityZonesResponse();
-                return listZones(matchedAvailableZones.toArray(new String[0]), null);
-            }
+            else
+                return azfs.evaluate(availableZones);
         } catch( EC2ServiceException error ) {
             logger.error( "EC2 DescribeAvailabilityZones - ", error);
             throw error;
@@ -1691,9 +1687,11 @@ public class EC2Engine extends ManagerBase {
 
         zones = listZones(interestedZones, domainId);
 
-        if (zones == null || zones.getZoneIdAt( 0 ) == null) 
+        if (zones == null || zones.getAvailabilityZoneSet().length == 0)
             throw new EC2ServiceException(ClientError.InvalidParameterValue, "Unknown zoneName value - " + zoneName);
-        return zones.getZoneIdAt(0);
+
+        EC2AvailabilityZone[] zoneSet = zones.getAvailabilityZoneSet();
+        return zoneSet[0].getId();
     }
 
 
@@ -1768,24 +1766,31 @@ public class EC2Engine extends ManagerBase {
      * 
      * @return EC2DescribeAvailabilityZonesResponse
      */
-    private EC2DescribeAvailabilityZonesResponse listZones(String[] interestedZones, String domainId) throws Exception 
-    {    
+    private EC2DescribeAvailabilityZonesResponse listZones(String[] interestedZones, String domainId)
+            throws Exception  {
         EC2DescribeAvailabilityZonesResponse zones = new EC2DescribeAvailabilityZonesResponse();
 
         List<CloudStackZone> cloudZones = getApi().listZones(true, domainId, null, null);
-
-        if(cloudZones != null) {
+        if(cloudZones != null && cloudZones.size() > 0) {
             for(CloudStackZone cloudZone : cloudZones) {
-                if ( null != interestedZones && 0 < interestedZones.length ) {
-                    for( int j=0; j < interestedZones.length; j++ ) {
-                        if (interestedZones[j].equalsIgnoreCase( cloudZone.getName())) {
-                            zones.addZone(cloudZone.getId().toString(), cloudZone.getName());
+                boolean matched = false;
+                if (interestedZones.length > 0) {
+                    for (String zoneName : interestedZones){
+                        if (zoneName.equalsIgnoreCase( cloudZone.getName())) {
+                            matched = true;
                             break;
                         }
                     }
-                } else { 
-                    zones.addZone(cloudZone.getId().toString(), cloudZone.getName());
+                } else {
+                    matched = true;
                 }
+                if (!matched) continue;
+                EC2AvailabilityZone ec2Zone = new EC2AvailabilityZone();
+                ec2Zone.setId(cloudZone.getId().toString());
+                ec2Zone.setMessage(cloudZone.getAllocationState());
+                ec2Zone.setName(cloudZone.getName());
+
+                zones.addAvailabilityZone(ec2Zone);
             }
         }
         return zones;
@@ -1952,7 +1957,7 @@ public class EC2Engine extends ManagerBase {
      * @throws ParserConfigurationException
      * @throws ParseException
      */
-    public EC2DescribeSecurityGroupsResponse listSecurityGroups( String[] interestedGroups ) throws Exception {
+    private EC2DescribeSecurityGroupsResponse listSecurityGroups( String[] interestedGroups ) throws Exception {
         try {
             EC2DescribeSecurityGroupsResponse groupSet = new EC2DescribeSecurityGroupsResponse();