Fixing kub cluster update issue and hostname issue, fixing STRATOS-1653
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/KubernetesClusterContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/KubernetesClusterContext.java
index d22f977..27d019e 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/KubernetesClusterContext.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/KubernetesClusterContext.java
@@ -18,16 +18,16 @@
  */
 package org.apache.stratos.cloud.controller.domain.kubernetes;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.kubernetes.client.KubernetesApiClient;
-
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicLong;
 
+import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
+import org.apache.stratos.common.constants.StratosConstants;
+import org.apache.stratos.kubernetes.client.KubernetesApiClient;
+
 /**
  * Holds information about a Kubernetes Cluster.
  */
@@ -35,8 +35,6 @@
 
     private static final long serialVersionUID = -802025758806195791L;
 
-    private static final Log log = LogFactory.getLog(KubernetesClusterContext.class);
-
     private String kubernetesClusterId;
     private int upperPort;
     private int lowerPort;
@@ -66,7 +64,11 @@
     }
 
     private String getEndpoint(String ip, String port) {
-        return "http://" + ip + ":" + port + "/api/v1beta1/";
+    	StringBuffer endPoint = new StringBuffer().append("http://").append(ip);
+    	if(port != null) {
+    		endPoint.append(":").append(port);	
+    	} 
+        return endPoint.toString();
     }
 
     public String getKubernetesClusterId() {
@@ -171,6 +173,16 @@
         }
         return podSeqNo.incrementAndGet();
     }
+    
+
+    public void updateKubClusterContextParams(KubernetesCluster kubernetesCluster) {
+    	this.masterIp = kubernetesCluster.getKubernetesMaster().getPrivateIPAddress();
+    	this.masterPort = CloudControllerUtil
+                .getProperty(kubernetesCluster.getKubernetesMaster().getProperties(),
+                        StratosConstants.KUBERNETES_MASTER_PORT);
+    	this.kubApi = new KubernetesApiClient(getEndpoint(masterIp, masterPort));
+    }
+    
 
     @Override
     public int hashCode() {
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java
index 66e76a0..261980d 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java
@@ -199,7 +199,7 @@
             PortRange kubernetesPortRange = kubernetesCluster.getPortRange();
             String kubernetesMasterPort = CloudControllerUtil
                     .getProperty(kubernetesCluster.getKubernetesMaster().getProperties(),
-                            StratosConstants.KUBERNETES_MASTER_PORT, StratosConstants.KUBERNETES_MASTER_DEFAULT_PORT);
+                            StratosConstants.KUBERNETES_MASTER_PORT);
 
             // Add kubernetes cluster payload parameters to payload
             if ((kubernetesCluster.getProperties() != null) && (kubernetesCluster.getProperties().getProperties()
@@ -929,14 +929,6 @@
         return kubernetesClusterContext;
     }
 
-    private String readProperty(String property, org.apache.stratos.common.Properties properties, String object) {
-        String propVal = CloudControllerUtil.getProperty(properties, property);
-        handleNullObject(propVal,
-                "Property validation failed. Could not find property: '" + property + " in " + object);
-        return propVal;
-
-    }
-
     private void handleNullObject(Object obj, String errorMsg) {
         if (obj == null) {
             log.error(errorMsg);
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
index 9352220..22f3232 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
@@ -25,6 +25,7 @@
 import org.apache.stratos.cloud.controller.context.CloudControllerContext;
 import org.apache.stratos.cloud.controller.domain.*;
 import org.apache.stratos.cloud.controller.domain.kubernetes.KubernetesCluster;
+import org.apache.stratos.cloud.controller.domain.kubernetes.KubernetesClusterContext;
 import org.apache.stratos.cloud.controller.domain.kubernetes.KubernetesHost;
 import org.apache.stratos.cloud.controller.domain.kubernetes.KubernetesMaster;
 import org.apache.stratos.cloud.controller.exception.*;
@@ -1280,6 +1281,7 @@
             }
             return true;
         } catch (Exception e) {
+        	log.error("Error occurred when adding kubernetes cluster. " + e.getMessage(), e);
             throw new InvalidKubernetesClusterException(e.getMessage(), e);
         } finally {
             if (lock != null) {
@@ -1306,6 +1308,12 @@
 
             // Updating the information model
             CloudControllerContext.getInstance().updateKubernetesCluster(kubernetesCluster);
+            KubernetesClusterContext kubClusterContext = CloudControllerContext.getInstance().
+            		getKubernetesClusterContext(kubernetesCluster.getClusterId());
+            
+            // Update necessary parameters of kubClusterContext using the updated kubCluster
+            kubClusterContext.updateKubClusterContextParams(kubernetesCluster);            
+            CloudControllerContext.getInstance().updateKubernetesClusterContext(kubClusterContext);
             CloudControllerContext.getInstance().persist();
 
             if (log.isInfoEnabled()) {
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java
index 54cde0b..81b0a24 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java
@@ -18,13 +18,24 @@
  */
 package org.apache.stratos.cloud.controller.util;
 
-import com.google.common.net.InetAddresses;
+import java.lang.reflect.Constructor;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Properties;
+
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.config.CloudControllerConfig;
 import org.apache.stratos.cloud.controller.context.CloudControllerContext;
-import org.apache.stratos.cloud.controller.domain.*;
+import org.apache.stratos.cloud.controller.domain.Cartridge;
+import org.apache.stratos.cloud.controller.domain.IaasConfig;
+import org.apache.stratos.cloud.controller.domain.IaasProvider;
+import org.apache.stratos.cloud.controller.domain.NetworkInterface;
+import org.apache.stratos.cloud.controller.domain.NetworkInterfaces;
+import org.apache.stratos.cloud.controller.domain.Partition;
 import org.apache.stratos.cloud.controller.domain.kubernetes.KubernetesCluster;
 import org.apache.stratos.cloud.controller.domain.kubernetes.KubernetesHost;
 import org.apache.stratos.cloud.controller.domain.kubernetes.KubernetesMaster;
@@ -38,13 +49,6 @@
 import org.apache.stratos.common.domain.LoadBalancingIPType;
 import org.apache.stratos.messaging.domain.topology.Topology;
 
-import java.lang.reflect.Constructor;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Properties;
-
 public class CloudControllerUtil {
     private static final Log log = LogFactory.getLog(CloudControllerUtil.class);
 
@@ -258,16 +262,6 @@
             throw new InvalidKubernetesHostException("Kubernetes host private IP address has not been set: " +
                     "[host-id] " + kubernetesHost.getHostId());
         }
-        if (!InetAddresses.isInetAddress(kubernetesHost.getPrivateIPAddress())) {
-            throw new InvalidKubernetesHostException(
-                    "Kubernetes host private IP address is invalid: " + kubernetesHost.getPrivateIPAddress());
-        }
-        if (StringUtils.isNotBlank(kubernetesHost.getPublicIPAddress())) {
-            if (!InetAddresses.isInetAddress(kubernetesHost.getPublicIPAddress())) {
-                throw new InvalidKubernetesHostException(
-                        "Kubernetes host public IP address is invalid: " + kubernetesHost.getPrivateIPAddress());
-            }
-        }
     }
 
     public static void validateKubernetesMaster(KubernetesMaster kubernetesMaster)