Repository: stratos
Updated Branches:
  refs/heads/container-autoscaling 7162325f3 -> 30e08c831


Implement new API - getSelectedPods - running a label query on Kubernetes Pods


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

Branch: refs/heads/container-autoscaling
Commit: a1108949bed4ebb013a221f03cdf799cb041887b
Parents: f5491ff
Author: Nirmal Fernando <[email protected]>
Authored: Mon Oct 6 16:04:12 2014 +0530
Committer: Nirmal Fernando <[email protected]>
Committed: Wed Oct 8 22:21:28 2014 +0530

----------------------------------------------------------------------
 .../kubernetes/client/KubernetesApiClient.java  | 97 +++++++++++++++++---
 .../KubernetesAPIClientInterface.java           |  8 ++
 2 files changed, 90 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/a1108949/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
 
b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
index 5622967..b20dc9b 100644
--- 
a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
+++ 
b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
@@ -24,13 +24,16 @@ import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.net.SocketException;
+import java.net.URI;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.http.HttpResponse;
 import org.apache.http.HttpStatus;
+import org.apache.http.client.utils.URIBuilder;
 import 
org.apache.stratos.kubernetes.client.exceptions.KubernetesClientException;
 import 
org.apache.stratos.kubernetes.client.interfaces.KubernetesAPIClientInterface;
+import org.apache.stratos.kubernetes.client.model.Label;
 import org.apache.stratos.kubernetes.client.model.Pod;
 import org.apache.stratos.kubernetes.client.model.PodList;
 import org.apache.stratos.kubernetes.client.model.ReplicationController;
@@ -46,15 +49,18 @@ public class KubernetesApiClient implements 
KubernetesAPIClientInterface {
        
        private static final Log log = 
LogFactory.getLog(KubernetesApiClient.class);
        private RestClient restClient;
+       private String baseURL;
        
        public KubernetesApiClient(String endpointUrl) {
-               restClient = new RestClient(endpointUrl);
+               restClient = new RestClient();
+               baseURL = endpointUrl;
        }
 
        @Override
        public Pod getPod(String podId) throws KubernetesClientException{
                try {
-            HttpResponse res = restClient.doGet("pods/"+podId);
+                   URI uri = new URIBuilder(baseURL+"pods/"+podId).build();
+            HttpResponse res = restClient.doGet(uri);
             
             handleNullResponse("Pod ["+podId+"] retrieval failed.", res);
             
@@ -84,7 +90,8 @@ public class KubernetesApiClient implements 
KubernetesAPIClientInterface {
        public Pod[] getAllPods() throws KubernetesClientException {
                
                try {
-                       HttpResponse res = restClient.doGet("pods");
+                   URI uri = new URIBuilder(baseURL+"pods").build();
+                       HttpResponse res = restClient.doGet(uri);
             
                        handleNullResponse("Pod retrieval failed.", res);
                        
@@ -116,7 +123,8 @@ public class KubernetesApiClient implements 
KubernetesAPIClientInterface {
                        if (log.isDebugEnabled()) {
                                log.debug("CreatePod Request Body : "+content);
                        }
-                       HttpResponse res = restClient.doPost("pods", content);
+                       URI uri = new URIBuilder(baseURL+"pods").build();
+                       HttpResponse res = restClient.doPost(uri, content);
                        
                        handleNullResponse("Pod "+pod+" creation failed.", res);
                        
@@ -145,7 +153,8 @@ public class KubernetesApiClient implements 
KubernetesAPIClientInterface {
        public void deletePod(String podId) throws KubernetesClientException {
 
                try {
-                       HttpResponse res = restClient.doDelete("pods/"+podId);
+                   URI uri = new URIBuilder(baseURL+"pods/"+podId).build();
+                       HttpResponse res = restClient.doDelete(uri);
             
                        handleNullResponse("Pod ["+podId+"] deletion failed.", 
res);
                        
@@ -176,7 +185,8 @@ public class KubernetesApiClient implements 
KubernetesAPIClientInterface {
                        throws KubernetesClientException {
 
                try {
-                       HttpResponse res = 
restClient.doGet("replicationControllers/"+controllerId);
+                   URI uri = new 
URIBuilder(baseURL+"replicationControllers/"+controllerId).build();
+                       HttpResponse res = restClient.doGet(uri);
                        
                        handleNullResponse("Replication Controller 
["+controllerId+"] retrieval failed.", res);
             
@@ -206,7 +216,8 @@ public class KubernetesApiClient implements 
KubernetesAPIClientInterface {
                        throws KubernetesClientException {
                
                try {
-                       HttpResponse res = 
restClient.doGet("replicationControllers");
+                   URI uri = new 
URIBuilder(baseURL+"replicationControllers").build();
+                       HttpResponse res = restClient.doGet(uri);
             
                        handleNullResponse("Replication Controller retrieval 
failed.", res);
                        
@@ -240,7 +251,9 @@ public class KubernetesApiClient implements 
KubernetesAPIClientInterface {
                        if (log.isDebugEnabled()) {
                                log.debug("CreateReplicationController Request 
Body : "+content);
                        }
-                       HttpResponse res = 
restClient.doPost("replicationControllers", content);
+                       
+                       URI uri = new 
URIBuilder(baseURL+"replicationControllers").build();
+                       HttpResponse res = restClient.doPost(uri, content);
                        
                        handleNullResponse("Replication Controller 
"+controller+" creation failed.", res);
             
@@ -284,8 +297,9 @@ public class KubernetesApiClient implements 
KubernetesAPIClientInterface {
                                log.debug("UpdateReplicationController Request 
Body : "
                                                + content);
                        }
-                       HttpResponse res = 
restClient.doPut("replicationControllers/"+controller.getId(),
-                                       content);
+                       
+                       URI uri = new 
URIBuilder(baseURL+"replicationControllers/"+controllerId).build();
+                       HttpResponse res = restClient.doPut(uri, content);
                        
                        handleNullResponse("Replication Controller 
["+controllerId+"] update failed.", res);
 
@@ -314,7 +328,8 @@ public class KubernetesApiClient implements 
KubernetesAPIClientInterface {
                        throws KubernetesClientException {
                
                try {
-                       HttpResponse res = 
restClient.doDelete("replicationControllers/"+controllerId);
+                   URI uri = new 
URIBuilder(baseURL+"replicationControllers/"+controllerId).build();
+                       HttpResponse res = restClient.doDelete(uri);
             
                        handleNullResponse("Replication Controller 
["+controllerId+"] deletion failed.", res);
                        
@@ -344,7 +359,8 @@ public class KubernetesApiClient implements 
KubernetesAPIClientInterface {
        public Service getService(String serviceId)
                        throws KubernetesClientException {
                try {
-                       HttpResponse res = 
restClient.doGet("services/"+serviceId);
+                   URI uri = new 
URIBuilder(baseURL+"services/"+serviceId).build();
+                       HttpResponse res = restClient.doGet(uri);
                        
                        handleNullResponse("Service ["+serviceId+"] retrieval 
failed.", res);
             
@@ -371,7 +387,9 @@ public class KubernetesApiClient implements 
KubernetesAPIClientInterface {
        @Override
        public Service[] getAllServices() throws KubernetesClientException {
                try {
-                       HttpResponse res = restClient.doGet("services");
+                   
+                   URI uri = new URIBuilder(baseURL+"services").build();
+                       HttpResponse res = restClient.doGet(uri);
             
                        handleNullResponse("Service retrieval failed.", res);
                        
@@ -403,7 +421,8 @@ public class KubernetesApiClient implements 
KubernetesAPIClientInterface {
                                log.debug("CreateService Request Body : 
"+content);
                        }
                        
-                       HttpResponse res = restClient.doPost("services", 
content);
+                       URI uri = new URIBuilder(baseURL+"services").build();
+                       HttpResponse res = restClient.doPost(uri, content);
                        
                        handleNullResponse("Service "+service+" creation 
failed.", res);
                        
@@ -429,7 +448,8 @@ public class KubernetesApiClient implements 
KubernetesAPIClientInterface {
                        throws KubernetesClientException {
 
                try {
-                       HttpResponse res = 
restClient.doDelete("services/"+serviceId);
+                   URI uri = new 
URIBuilder(baseURL+"services/"+serviceId).build();
+                       HttpResponse res = restClient.doDelete(uri);
                        
                        handleNullResponse("Service ["+serviceId+"] deletion 
failed.", res);
             
@@ -456,6 +476,45 @@ public class KubernetesApiClient implements 
KubernetesAPIClientInterface {
                }
        }
 
+    @Override
+    public Pod[] getSelectedPods(Label[] label) throws 
KubernetesClientException {
+        
+        try {
+            String labelQuery = getLabelQuery(label);
+            URI uri = new URIBuilder(baseURL + "pods").addParameter("labels", 
labelQuery).build();
+            HttpResponse res = restClient.doGet(uri);
+            
+            handleNullResponse("Pod retrieval failed.", res);
+            
+            if (res.getStatusLine().getStatusCode() == 
HttpStatus.SC_NOT_FOUND) {
+                return new Pod[0];
+            }
+            
+            String content = getHttpResponseString(res);
+            
+            GsonBuilder gsonBuilder = new GsonBuilder();
+            Gson gson = gsonBuilder.create();
+            PodList podList = gson.fromJson(content, PodList.class);
+            if (podList == null || podList.getItems() == null) {
+                return new Pod[0];
+            }
+            return podList.getItems();
+            
+        } catch (Exception e) {
+            String msg = "Error while retrieving Pods.";
+            log.error(msg, e);
+            throw new KubernetesClientException(msg, e);
+        }
+    }
+
+    private String getLabelQuery(Label[] label) {
+        String query = "";
+        for (Label l : label) {
+            query = query.concat("name="+l.getName()+",");
+        }
+        return query.endsWith(",") ? query.substring(0, query.length()) : 
query;
+    }
+
     private void handleNullResponse(String message, HttpResponse res)
             throws KubernetesClientException {
         if (res == null) {
@@ -490,4 +549,12 @@ public class KubernetesApiClient implements 
KubernetesAPIClientInterface {
                }
        }
 
+    public String getBaseURL() {
+        return baseURL;
+    }
+
+    public void setBaseURL(String baseURL) {
+        this.baseURL = baseURL;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/a1108949/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java
 
b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java
index 51570de..e67c256 100644
--- 
a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java
+++ 
b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java
@@ -44,6 +44,14 @@ public interface KubernetesAPIClientInterface {
        public Pod[] getAllPods() throws KubernetesClientException;
        
        /**
+        * Run a label query and retrieve a sub set of Pods.
+        * @param array of labels for the label query
+        * @return Pods selected Pods by executing the label query.
+        * @throws KubernetesClientException
+        */
+       public Pod[] getSelectedPods(Label[] label) throws 
KubernetesClientException;
+       
+       /**
         * Create a new Pod
         * @param pod Pod to be created
         * @throws KubernetesClientException

Reply via email to