Moving Kubernetes Host registration to CC.
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/98244f78 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/98244f78 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/98244f78 Branch: refs/heads/master Commit: 98244f78717fb3502653f0ea5963beb75bbfdcff Parents: e20df6f Author: Nirmal Fernando <[email protected]> Authored: Tue Dec 2 19:35:31 2014 +0530 Committer: Nirmal Fernando <[email protected]> Committed: Tue Dec 2 19:39:19 2014 +0530 ---------------------------------------------------------------------- .../context/CloudControllerContext.java | 156 ++++ .../InvalidKubernetesGroupException.java | 49 ++ .../InvalidKubernetesHostException.java | 49 ++ .../InvalidKubernetesMasterException.java | 27 + .../KubernetesEndpointValidationException.java | 52 ++ .../NonExistingKubernetesGroupException.java | 49 ++ .../NonExistingKubernetesHostException.java | 48 ++ .../NonExistingKubernetesMasterException.java | 48 ++ .../services/CloudControllerService.java | 82 +- .../impl/CloudControllerServiceImpl.java | 218 +++++ .../util/CloudControllerConstants.java | 6 + .../controller/util/CloudControllerUtil.java | 112 +++ .../org/apache/stratos/common/Properties.java | 49 +- .../common/kubernetes/KubernetesGroup.java | 1 + .../common/kubernetes/KubernetesHost.java | 1 + .../common/kubernetes/KubernetesMaster.java | 2 + .../stratos/common/kubernetes/PortRange.java | 1 + .../client/CloudControllerServiceClient.java | 58 +- .../rest/endpoint/api/StratosApiV41Utils.java | 99 ++- .../bean/util/converter/PojoConverter.java | 79 +- .../pom.xml | 3 +- .../main/resources/CloudControllerService.wsdl | 860 +++++++++++++++++-- 22 files changed, 1887 insertions(+), 162 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java index eeee5d5..2a7dafb 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java @@ -20,10 +20,15 @@ package org.apache.stratos.cloud.controller.context; import org.apache.axis2.clustering.ClusteringAgent; import org.apache.axis2.engine.AxisConfiguration; +import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.stratos.common.clustering.DistributedObjectProvider; +import org.apache.stratos.common.kubernetes.KubernetesGroup; +import org.apache.stratos.common.kubernetes.KubernetesHost; +import org.apache.stratos.common.kubernetes.KubernetesMaster; import org.apache.stratos.cloud.controller.domain.*; +import org.apache.stratos.cloud.controller.exception.*; import org.apache.stratos.cloud.controller.internal.ServiceReferenceHolder; import org.apache.stratos.cloud.controller.registry.Deserializer; import org.apache.stratos.cloud.controller.registry.RegistryManager; @@ -31,8 +36,12 @@ import org.apache.stratos.cloud.controller.util.CloudControllerConstants; import org.wso2.carbon.databridge.agent.thrift.AsyncDataPublisher; import org.wso2.carbon.registry.core.exceptions.RegistryException; +import com.google.common.net.InetAddresses; + import java.io.Serializable; import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -49,6 +58,7 @@ public class CloudControllerContext implements Serializable { private static final long serialVersionUID = -2662307358852779897L; private static final Log log = LogFactory.getLog(CloudControllerContext.class); + public static final String KUB_GROUP_ID_TO_GROUP_MAP = "KUB_GROUP_ID_TO_GROUP_MAP"; public static final String CC_CLUSTER_ID_TO_MEMBER_CTX = "CC_CLUSTER_ID_TO_MEMBER_CTX"; public static final String CC_MEMBER_ID_TO_MEMBER_CTX = "CC_MEMBER_ID_TO_MEMBER_CTX"; public static final String CC_MEMBER_ID_TO_SCH_TASK = "CC_MEMBER_ID_TO_SCH_TASK"; @@ -63,6 +73,13 @@ public class CloudControllerContext implements Serializable { private final DistributedObjectProvider distributedObjectProvider; /* We keep following maps in order to make the look up time, small. */ + + /** + * KubernetesGroups against groupIds + * Key - Kubernetes group id + * Value - {@link KubernetesGroup} + */ + private Map<String, KubernetesGroup> kubernetesGroupsMap; /** * Key - cluster id @@ -134,6 +151,7 @@ public class CloudControllerContext implements Serializable { distributedObjectProvider = ServiceReferenceHolder.getInstance().getDistributedObjectProvider(); // Initialize objects + kubernetesGroupsMap = distributedObjectProvider.getMap(KUB_GROUP_ID_TO_GROUP_MAP); clusterIdToMemberContextListMap = distributedObjectProvider.getMap(CC_CLUSTER_ID_TO_MEMBER_CTX); memberIdToMemberContextMap = distributedObjectProvider.getMap(CC_MEMBER_ID_TO_MEMBER_CTX); memberIdToScheduledTaskMap = distributedObjectProvider.getMap(CC_MEMBER_ID_TO_SCH_TASK); @@ -364,6 +382,143 @@ public class CloudControllerContext implements Serializable { kubernetesClusterContext.getKubernetesClusterId(), kubernetesClusterContext); } + + /** + * Remove a registered Kubernetes group from registry + */ + public synchronized void removeKubernetesGroup(String kubernetesGroupId) { + // Remove entry from information model + distributedObjectProvider.removeFromMap(kubernetesGroupsMap, kubernetesGroupId); + } + + /** + * Remove a registered Kubernetes host from registry + */ + public synchronized boolean removeKubernetesHost(String kubernetesHostId) throws NonExistingKubernetesHostException { + if (kubernetesHostId == null) { + throw new NonExistingKubernetesHostException("Kubernetes host id can not be null"); + } + if (log.isInfoEnabled()) { + log.info("Removing Kubernetes Host: " + kubernetesHostId); + } + try { + KubernetesGroup kubernetesGroupStored = getKubernetesGroupContainingHost(kubernetesHostId); + + // Kubernetes master can not be removed + if (kubernetesGroupStored.getKubernetesMaster().getHostId().equals(kubernetesHostId)) { + throw new NonExistingKubernetesHostException("Kubernetes master is not allowed to be removed [id] " + kubernetesHostId); + } + + List<KubernetesHost> kubernetesHostList = new ArrayList<KubernetesHost>(); + for (KubernetesHost kubernetesHost : kubernetesGroupStored.getKubernetesHosts()) { + if (!kubernetesHost.getHostId().equals(kubernetesHostId)) { + kubernetesHostList.add(kubernetesHost); + } + } + // member count will be equal only when host object was not found + if (kubernetesHostList.size() == kubernetesGroupStored.getKubernetesHosts().length) { + throw new NonExistingKubernetesHostException("Kubernetes host not found for [id] " + kubernetesHostId); + } + KubernetesHost[] kubernetesHostsArray = new KubernetesHost[kubernetesHostList.size()]; + kubernetesHostList.toArray(kubernetesHostsArray); + + // Update information model + kubernetesGroupStored.setKubernetesHosts(kubernetesHostsArray); + + if (log.isInfoEnabled()) { + log.info(String.format("Kubernetes host removed successfully: [id] %s", kubernetesHostId)); + } + + return true; + } catch (Exception e) { + throw new NonExistingKubernetesHostException(e.getMessage(), e); + } + } + + public void addKubernetesGroupToInformationModel(KubernetesGroup kubernetesGroup) { + distributedObjectProvider.putToMap(kubernetesGroupsMap, kubernetesGroup.getGroupId(), kubernetesGroup); + } + + public boolean kubernetesGroupExists(KubernetesGroup kubernetesGroup) { + return kubernetesGroupsMap.containsKey(kubernetesGroup); + } + + public boolean kubernetesHostExists(String hostId) { + if (StringUtils.isEmpty(hostId)) { + return false; + } + for (KubernetesGroup kubernetesGroup : kubernetesGroupsMap.values()) { + if (kubernetesGroup.getKubernetesHosts() != null) { + for (KubernetesHost kubernetesHost : kubernetesGroup.getKubernetesHosts()) { + if (kubernetesHost.getHostId().equals(hostId)) { + return true; + } + } + } + if (hostId.equals(kubernetesGroup.getKubernetesMaster().getHostId())) { + return true; + } + } + return false; + } + + + public KubernetesHost[] getKubernetesHostsInGroup(String kubernetesGroupId) throws NonExistingKubernetesGroupException { + if (StringUtils.isEmpty(kubernetesGroupId)) { + throw new NonExistingKubernetesGroupException("Cannot find for empty group id"); + } + + KubernetesGroup kubernetesGroup = kubernetesGroupsMap.get(kubernetesGroupId); + if (kubernetesGroup != null) { + return kubernetesGroup.getKubernetesHosts(); + } + throw new NonExistingKubernetesGroupException("Kubernetes group not found for group id: " + kubernetesGroupId); + } + + public KubernetesMaster getKubernetesMasterInGroup(String kubernetesGroupId) throws NonExistingKubernetesGroupException { + if (StringUtils.isEmpty(kubernetesGroupId)) { + throw new NonExistingKubernetesGroupException("Cannot find for empty group id"); + } + KubernetesGroup kubernetesGroup = kubernetesGroupsMap.get(kubernetesGroupId); + if (kubernetesGroup != null) { + return kubernetesGroup.getKubernetesMaster(); + } + throw new NonExistingKubernetesGroupException("Kubernetes master not found for group id: " + kubernetesGroupId); + } + + public KubernetesGroup getKubernetesGroup(String groupId) throws NonExistingKubernetesGroupException { + if (StringUtils.isEmpty(groupId)) { + throw new NonExistingKubernetesGroupException("Cannot find for empty group id"); + } + KubernetesGroup kubernetesGroup = kubernetesGroupsMap.get(groupId); + if (kubernetesGroup != null) { + return kubernetesGroup; + } + throw new NonExistingKubernetesGroupException("Kubernetes group not found for id: " + groupId); + } + + public KubernetesGroup getKubernetesGroupContainingHost(String hostId) throws NonExistingKubernetesGroupException { + if (StringUtils.isEmpty(hostId)) { + return null; + } + for (KubernetesGroup kubernetesGroup : kubernetesGroupsMap.values()) { + if (hostId.equals(kubernetesGroup.getKubernetesMaster().getHostId())) { + return kubernetesGroup; + } + if (kubernetesGroup.getKubernetesHosts() != null) { + for (KubernetesHost kubernetesHost : kubernetesGroup.getKubernetesHosts()) { + if (kubernetesHost.getHostId().equals(hostId)) { + return kubernetesGroup; + } + } + } + } + throw new NonExistingKubernetesGroupException("Kubernetes group not found containing host id: " + hostId); + } + + public KubernetesGroup[] getKubernetesGroups() { + return kubernetesGroupsMap.values().toArray(new KubernetesGroup[kubernetesGroupsMap.size()]); + } public boolean isClustered() { return clustered; @@ -390,6 +545,7 @@ public class CloudControllerContext implements Serializable { if (dataObj instanceof CloudControllerContext) { CloudControllerContext serializedObj = (CloudControllerContext) dataObj; + copyMap(kubernetesGroupsMap, serializedObj.kubernetesGroupsMap); copyMap(clusterIdToMemberContextListMap, serializedObj.clusterIdToMemberContextListMap); copyMap(memberIdToMemberContextMap, serializedObj.memberIdToMemberContextMap); copyMap(memberIdToScheduledTaskMap, serializedObj.memberIdToScheduledTaskMap); http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesGroupException.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesGroupException.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesGroupException.java new file mode 100644 index 0000000..db5fb30 --- /dev/null +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesGroupException.java @@ -0,0 +1,49 @@ +/* + * + * 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 org.apache.stratos.cloud.controller.exception; + +/** + * Exception class for handling invalid Kubernetes Group + */ +public class InvalidKubernetesGroupException extends Exception { + + private String message; + + public InvalidKubernetesGroupException(String message, Exception exception){ + super(message, exception); + this.message = message; + } + + public InvalidKubernetesGroupException(Exception exception){ + super(exception); + } + + public InvalidKubernetesGroupException(String msg){ + super(msg); + this.message = msg; + } + + @Override + public String getMessage() { + return this.message; + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesHostException.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesHostException.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesHostException.java new file mode 100644 index 0000000..0aa789e --- /dev/null +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesHostException.java @@ -0,0 +1,49 @@ +/* + * + * 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 org.apache.stratos.cloud.controller.exception; + +/** + * Exception class for handling invalid Kubernetes Host + */ +public class InvalidKubernetesHostException extends Exception { + + private String message; + + public InvalidKubernetesHostException(String message, Exception exception){ + super(message, exception); + this.message = message; + } + + public InvalidKubernetesHostException(Exception exception){ + super(exception); + } + + public InvalidKubernetesHostException(String msg){ + super(msg); + this.message = msg; + } + + @Override + public String getMessage() { + return this.message; + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesMasterException.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesMasterException.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesMasterException.java new file mode 100644 index 0000000..da52e9a --- /dev/null +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesMasterException.java @@ -0,0 +1,27 @@ +package org.apache.stratos.cloud.controller.exception; + +/** + * Exception class for handling invalid Kubernetes Master + */ +public class InvalidKubernetesMasterException extends Exception { + private String message; + + public InvalidKubernetesMasterException(String message, Exception exception){ + super(message, exception); + this.message = message; + } + + public InvalidKubernetesMasterException(Exception exception){ + super(exception); + } + + public InvalidKubernetesMasterException(String msg){ + super(msg); + this.message = msg; + } + + @Override + public String getMessage() { + return this.message; + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/KubernetesEndpointValidationException.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/KubernetesEndpointValidationException.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/KubernetesEndpointValidationException.java new file mode 100644 index 0000000..8394a62 --- /dev/null +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/KubernetesEndpointValidationException.java @@ -0,0 +1,52 @@ +/* + * + * 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 org.apache.stratos.cloud.controller.exception; + +/** + * Exception class for handling Kubernetes endpoint validation + */ +public class KubernetesEndpointValidationException extends Exception { + private String message; + + public KubernetesEndpointValidationException(String message, Exception exception){ + super(message, exception); + this.setMessage(message); + } + + public KubernetesEndpointValidationException(String msg) { + super(msg); + this.message = msg; + } + public KubernetesEndpointValidationException(Exception exception){ + super(exception); + } + + + public String getMessage() { + return message; + } + + + public void setMessage(String message) { + this.message = message; + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesGroupException.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesGroupException.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesGroupException.java new file mode 100644 index 0000000..ba48fbe --- /dev/null +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesGroupException.java @@ -0,0 +1,49 @@ +/* + * + * 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 org.apache.stratos.cloud.controller.exception; + +/** + * Exception class for handling non-existing Kubernetes Group + */ +public class NonExistingKubernetesGroupException extends Exception { + + private String message; + + public NonExistingKubernetesGroupException(String message, Exception exception){ + super(message, exception); + this.message = message; + } + + public NonExistingKubernetesGroupException(Exception exception){ + super(exception); + } + + public NonExistingKubernetesGroupException(String msg){ + super(msg); + this.message = msg; + } + + @Override + public String getMessage() { + return this.message; + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesHostException.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesHostException.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesHostException.java new file mode 100644 index 0000000..afae051 --- /dev/null +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesHostException.java @@ -0,0 +1,48 @@ +/* + * + * 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 org.apache.stratos.cloud.controller.exception; + +/** + * Exception class for handling non-existing Kubernetes Host + */ +public class NonExistingKubernetesHostException extends Exception { + private String message; + + public NonExistingKubernetesHostException(String message, Exception exception){ + super(message, exception); + this.message = message; + } + + public NonExistingKubernetesHostException(Exception exception){ + super(exception); + } + + public NonExistingKubernetesHostException(String msg){ + super(msg); + this.message = msg; + } + + @Override + public String getMessage() { + return this.message; + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesMasterException.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesMasterException.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesMasterException.java new file mode 100644 index 0000000..8eb50c1 --- /dev/null +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesMasterException.java @@ -0,0 +1,48 @@ +/* + * + * 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 org.apache.stratos.cloud.controller.exception; + +/** + * Exception class for handling non-existing Kubernetes Master + */ +public class NonExistingKubernetesMasterException extends Exception { + private String message; + + public NonExistingKubernetesMasterException(String message, Exception exception){ + super(message, exception); + this.message = message; + } + + public NonExistingKubernetesMasterException(Exception exception){ + super(exception); + } + + public NonExistingKubernetesMasterException(String msg){ + super(msg); + this.message = msg; + } + + @Override + public String getMessage() { + return this.message; + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java index 487abfd..87e8913 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java @@ -19,8 +19,10 @@ package org.apache.stratos.cloud.controller.services; import org.apache.stratos.cloud.controller.domain.*; -import org.apache.stratos.cloud.controller.domain.Partition; import org.apache.stratos.cloud.controller.exception.*; +import org.apache.stratos.common.kubernetes.KubernetesGroup; +import org.apache.stratos.common.kubernetes.KubernetesHost; +import org.apache.stratos.common.kubernetes.KubernetesMaster; import org.apache.stratos.messaging.domain.topology.ClusterStatus; /** @@ -228,4 +230,82 @@ public interface CloudControllerService { */ public void createClusterInstance (String serviceType, String clusterId, String alias, String instanceId) throws ClusterInstanceCreationException; + + /** + * Retrieves registered Kubernetes Groups. + */ + public KubernetesGroup[] getAllKubernetesGroups(); + + /** + * Retrieves Kubernetes Group for given Kubernetes Group ID. + * + * @param kubernetesGroupId + */ + public KubernetesGroup getKubernetesGroup(String kubernetesGroupId) throws NonExistingKubernetesGroupException; + + /** + * Retrieves Kubernetes Master for given Kubernetes Group ID. + * + * @param kubernetesGroupId + */ + public KubernetesMaster getMasterForKubernetesGroup(String kubernetesGroupId) throws NonExistingKubernetesGroupException; + + /** + * Retrieves Kubernetes Hosts for given Kubernetes Group ID. + * + * @param kubernetesGroupId + */ + public KubernetesHost[] getHostsForKubernetesGroup(String kubernetesGroupId) throws NonExistingKubernetesGroupException; + + /** + * Register a Kubernetes cluster. + * + * @param kubernetesGroup + * @throws org.apache.stratos.autoscaler.exception.kubernetes.InvalidKubernetesGroupException + */ + public boolean addKubernetesGroup(KubernetesGroup kubernetesGroup) throws InvalidKubernetesGroupException; + + /** + * Add a Kubernetes host to a Kubernetes Group. + * + * @param groupId + * @param kubernetesHost + * @throws org.apache.stratos.autoscaler.exception.kubernetes.InvalidKubernetesHostException + */ + public boolean addKubernetesHost(String groupId, KubernetesHost kubernetesHost) throws + InvalidKubernetesHostException, NonExistingKubernetesGroupException; + + /** + * Update a Kubernetes host. + * + * @param kubernetesHost + * @throws InvalidKubernetesHostException + */ + public boolean updateKubernetesHost(KubernetesHost kubernetesHost) throws + InvalidKubernetesHostException, NonExistingKubernetesHostException; + + /** + * Remove a Kubernetes host. + * + * @param groupId + * @throws NonExistingKubernetesGroupException + */ + public boolean removeKubernetesGroup(String groupId) throws NonExistingKubernetesGroupException; + + /** + * Update a Kubernetes host. + * + * @param hostId + * @throws InvalidKubernetesHostException + */ + public boolean removeKubernetesHost(String hostId) throws NonExistingKubernetesHostException; + + /** + * Update a Kubernetes Master in a Kubernetes Group. + * + * @param kubernetesMaster + * @throws NonExistingKubernetesMasterException + */ + public boolean updateKubernetesMaster(KubernetesMaster kubernetesMaster) + throws InvalidKubernetesMasterException, NonExistingKubernetesMasterException; } http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java ---------------------------------------------------------------------- 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 f165a00..53f28fa 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 @@ -49,6 +49,9 @@ import org.apache.stratos.cloud.controller.iaases.Iaas; import org.apache.stratos.cloud.controller.iaases.validators.PartitionValidator; import org.apache.stratos.common.*; import org.apache.stratos.common.constants.StratosConstants; +import org.apache.stratos.common.kubernetes.KubernetesGroup; +import org.apache.stratos.common.kubernetes.KubernetesHost; +import org.apache.stratos.common.kubernetes.KubernetesMaster; import org.apache.stratos.kubernetes.client.KubernetesApiClient; import org.apache.stratos.kubernetes.client.exceptions.KubernetesClientException; import org.apache.stratos.kubernetes.client.model.Label; @@ -2049,6 +2052,221 @@ public class CloudControllerServiceImpl implements CloudControllerService { persist(); } + + @Override + public KubernetesGroup[] getAllKubernetesGroups() { + return cloudControllerContext.getKubernetesGroups(); + } + + @Override + public KubernetesGroup getKubernetesGroup(String kubernetesGroupId) throws NonExistingKubernetesGroupException { + return cloudControllerContext.getKubernetesGroup(kubernetesGroupId); + } + + @Override + public KubernetesMaster getMasterForKubernetesGroup(String kubernetesGroupId) throws NonExistingKubernetesGroupException { + return cloudControllerContext.getKubernetesMasterInGroup(kubernetesGroupId); + } + + @Override + public KubernetesHost[] getHostsForKubernetesGroup(String kubernetesGroupId) throws NonExistingKubernetesGroupException { + return cloudControllerContext.getKubernetesHostsInGroup(kubernetesGroupId); + } + + + @Override + public boolean addKubernetesGroup(KubernetesGroup kubernetesGroup) throws InvalidKubernetesGroupException { + if (kubernetesGroup == null) { + throw new InvalidKubernetesGroupException("Kubernetes Group can not be null"); + } + if (LOG.isInfoEnabled()) { + LOG.info("Deploying new Kubernetes group: " + kubernetesGroup); + } + CloudControllerUtil.validateKubernetesGroup(kubernetesGroup); + try { + // Add to information model + cloudControllerContext.addKubernetesGroupToInformationModel(kubernetesGroup); + + persist(); + + if (LOG.isInfoEnabled()) { + LOG.info(String.format("Kubernetes group deployed successfully: [id] %s, [description] %s", + kubernetesGroup.getGroupId(), kubernetesGroup.getDescription())); + } + + return true; + } catch (Exception e) { + throw new InvalidKubernetesGroupException(e.getMessage(), e); + } + } + + @Override + public boolean addKubernetesHost(String kubernetesGroupId, KubernetesHost kubernetesHost) throws + InvalidKubernetesHostException, NonExistingKubernetesGroupException { + if (kubernetesHost == null) { + throw new InvalidKubernetesHostException("Kubernetes host can not be null"); + } + if (StringUtils.isEmpty(kubernetesGroupId)) { + throw new NonExistingKubernetesGroupException("Kubernetes group id can not be null"); + } + if (LOG.isInfoEnabled()) { + LOG.info("Deploying new Kubernetes Host: " + kubernetesHost + " for Kubernetes group id: " + kubernetesGroupId); + } + CloudControllerUtil.validateKubernetesHost(kubernetesHost); + try { + KubernetesGroup kubernetesGroupStored = getKubernetesGroup(kubernetesGroupId); + ArrayList<KubernetesHost> kubernetesHostArrayList; + + if (kubernetesGroupStored.getKubernetesHosts() == null) { + kubernetesHostArrayList = new ArrayList<KubernetesHost>(); + } else { + if (cloudControllerContext.kubernetesHostExists(kubernetesHost.getHostId())) { + throw new InvalidKubernetesHostException("Kubernetes host already exists: [id] " + kubernetesHost.getHostId()); + } + kubernetesHostArrayList = new + ArrayList<KubernetesHost>(Arrays.asList(kubernetesGroupStored.getKubernetesHosts())); + } + kubernetesHostArrayList.add(kubernetesHost); + + // Update information model + kubernetesGroupStored.setKubernetesHosts(kubernetesHostArrayList.toArray(new KubernetesHost[kubernetesHostArrayList.size()])); + + persist(); + + if (LOG.isInfoEnabled()) { + LOG.info(String.format("Kubernetes host deployed successfully: [id] %s", kubernetesGroupStored.getGroupId())); + } + + return true; + } catch (Exception e) { + throw new InvalidKubernetesHostException(e.getMessage(), e); + } + } + + @Override + public boolean removeKubernetesGroup(String kubernetesGroupId) throws NonExistingKubernetesGroupException { + if (StringUtils.isEmpty(kubernetesGroupId)) { + throw new NonExistingKubernetesGroupException("Kubernetes group id can not be empty"); + } + if (LOG.isInfoEnabled()) { + LOG.info("Removing Kubernetes group: " + kubernetesGroupId); + } + try { + // Remove entry from information model + cloudControllerContext.removeKubernetesGroup(kubernetesGroupId); + + if (LOG.isInfoEnabled()) { + LOG.info(String.format("Kubernetes group removed successfully: [id] %s", kubernetesGroupId)); + } + + persist(); + + return true; + } catch (Exception e) { + throw new NonExistingKubernetesGroupException(e.getMessage(), e); + } + } + + @Override + public boolean removeKubernetesHost(String kubernetesHostId) throws NonExistingKubernetesHostException { + if (kubernetesHostId == null) { + throw new NonExistingKubernetesHostException("Kubernetes host id can not be null"); + } + if (LOG.isInfoEnabled()) { + LOG.info("Removing Kubernetes Host: " + kubernetesHostId); + } + try { + KubernetesGroup kubernetesGroupStored = cloudControllerContext.getKubernetesGroupContainingHost(kubernetesHostId); + + // Kubernetes master can not be removed + if (kubernetesGroupStored.getKubernetesMaster().getHostId().equals(kubernetesHostId)) { + throw new NonExistingKubernetesHostException("Kubernetes master is not allowed to be removed [id] " + kubernetesHostId); + } + + List<KubernetesHost> kubernetesHostList = new ArrayList<KubernetesHost>(); + for (KubernetesHost kubernetesHost : kubernetesGroupStored.getKubernetesHosts()) { + if (!kubernetesHost.getHostId().equals(kubernetesHostId)) { + kubernetesHostList.add(kubernetesHost); + } + } + // member count will be equal only when host object was not found + if (kubernetesHostList.size() == kubernetesGroupStored.getKubernetesHosts().length) { + throw new NonExistingKubernetesHostException("Kubernetes host not found for [id] " + kubernetesHostId); + } + KubernetesHost[] kubernetesHostsArray = new KubernetesHost[kubernetesHostList.size()]; + kubernetesHostList.toArray(kubernetesHostsArray); + + // Update information model + kubernetesGroupStored.setKubernetesHosts(kubernetesHostsArray); + + if (LOG.isInfoEnabled()) { + LOG.info(String.format("Kubernetes host removed successfully: [id] %s", kubernetesHostId)); + } + + persist(); + + return true; + } catch (Exception e) { + throw new NonExistingKubernetesHostException(e.getMessage(), e); + } + } + + @Override + public boolean updateKubernetesMaster(KubernetesMaster kubernetesMaster) + throws InvalidKubernetesMasterException, NonExistingKubernetesMasterException { + CloudControllerUtil.validateKubernetesMaster(kubernetesMaster); + if (LOG.isInfoEnabled()) { + LOG.info("Updating Kubernetes master: " + kubernetesMaster); + } + try { + KubernetesGroup kubernetesGroupStored = cloudControllerContext.getKubernetesGroupContainingHost(kubernetesMaster.getHostId()); + + // Update information model + kubernetesGroupStored.setKubernetesMaster(kubernetesMaster); + + persist(); + + if (LOG.isInfoEnabled()) { + LOG.info(String.format("Kubernetes master updated successfully: [id] %s", kubernetesMaster.getHostId())); + } + + return true; + } catch (Exception e) { + throw new InvalidKubernetesMasterException(e.getMessage(), e); + } + } + + @Override + public boolean updateKubernetesHost(KubernetesHost kubernetesHost) throws + InvalidKubernetesHostException, NonExistingKubernetesHostException { + CloudControllerUtil.validateKubernetesHost(kubernetesHost); + if (LOG.isInfoEnabled()) { + LOG.info("Updating Kubernetes Host: " + kubernetesHost); + } + + try { + KubernetesGroup kubernetesGroupStored = cloudControllerContext.getKubernetesGroupContainingHost(kubernetesHost.getHostId()); + + for (int i = 0; i < kubernetesGroupStored.getKubernetesHosts().length; i++) { + if (kubernetesGroupStored.getKubernetesHosts()[i].getHostId().equals(kubernetesHost.getHostId())) { + + // Update the information model + kubernetesGroupStored.getKubernetesHosts()[i] = kubernetesHost; + + if (LOG.isInfoEnabled()) { + LOG.info(String.format("Kubernetes host updated successfully: [id] %s", kubernetesHost.getHostId())); + } + + persist(); + + return true; + } + } + } catch (Exception e) { + throw new InvalidKubernetesHostException(e.getMessage(), e); + } + throw new NonExistingKubernetesHostException("Kubernetes host not found [id] " + kubernetesHost.getHostId()); + } // public void deployApplicationDefinition (ApplicationContext applicationContext) throws ApplicationDefinitionException { // http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java index ffebdf8..8e5e4d5 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java @@ -285,4 +285,10 @@ public final class CloudControllerConstants { public static final String NETWORK_IDS= "networkIds"; public static final String IS_LOAD_BALANCER = "load.balancer"; + + /** + * PortRange min max + */ + public static final int PORT_RANGE_MAX = 65535; + public static final int PORT_RANGE_MIN = 1; } http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java ---------------------------------------------------------------------- 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 89131e3..e6c8d6f 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,6 +18,7 @@ */ package org.apache.stratos.cloud.controller.util; +import org.apache.commons.lang.StringUtils; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -26,13 +27,21 @@ import org.apache.stratos.cloud.controller.context.CloudControllerContext; import org.apache.stratos.cloud.controller.domain.*; import org.apache.stratos.cloud.controller.exception.CloudControllerException; import org.apache.stratos.cloud.controller.exception.InvalidIaasProviderException; +import org.apache.stratos.cloud.controller.exception.InvalidKubernetesGroupException; +import org.apache.stratos.cloud.controller.exception.InvalidKubernetesHostException; +import org.apache.stratos.cloud.controller.exception.InvalidKubernetesMasterException; import org.apache.stratos.cloud.controller.iaases.Iaas; import org.apache.stratos.cloud.controller.registry.Deserializer; import org.apache.stratos.cloud.controller.registry.RegistryManager; import org.apache.stratos.common.Property; +import org.apache.stratos.common.kubernetes.KubernetesGroup; +import org.apache.stratos.common.kubernetes.KubernetesHost; +import org.apache.stratos.common.kubernetes.KubernetesMaster; import org.apache.stratos.messaging.domain.topology.Topology; import org.wso2.carbon.registry.core.exceptions.RegistryException; +import com.google.common.net.InetAddresses; + import java.lang.reflect.Constructor; import java.util.Arrays; import java.util.ArrayList; @@ -395,4 +404,107 @@ public class CloudControllerUtil { } return clusterId; } + + public static void validateKubernetesGroup(KubernetesGroup kubernetesGroup) throws InvalidKubernetesGroupException { + CloudControllerContext context = CloudControllerContext.getInstance(); + + if (kubernetesGroup == null) { + throw new InvalidKubernetesGroupException("Kubernetes group can not be null"); + } + if (StringUtils.isEmpty(kubernetesGroup.getGroupId())) { + throw new InvalidKubernetesGroupException("Kubernetes group groupId can not be empty"); + } + if (context.kubernetesGroupExists(kubernetesGroup)) { + throw new InvalidKubernetesGroupException(String.format("Kubernetes group already exists " + + "[id] %s", kubernetesGroup.getGroupId())); + } + if (kubernetesGroup.getKubernetesMaster() == null) { + throw new InvalidKubernetesGroupException("Mandatory field master has not been set " + + "for the Kubernetes group [id] " + kubernetesGroup.getGroupId()); + } + if (kubernetesGroup.getPortRange() == null) { + throw new InvalidKubernetesGroupException("Mandatory field portRange has not been set " + + "for the Kubernetes group [id] " + kubernetesGroup.getGroupId()); + } + + // Port range validation + if (kubernetesGroup.getPortRange().getUpper() > CloudControllerConstants.PORT_RANGE_MAX || + kubernetesGroup.getPortRange().getUpper() < CloudControllerConstants.PORT_RANGE_MIN || + kubernetesGroup.getPortRange().getLower() > CloudControllerConstants.PORT_RANGE_MAX || + kubernetesGroup.getPortRange().getLower() < CloudControllerConstants.PORT_RANGE_MIN || + kubernetesGroup.getPortRange().getUpper() < kubernetesGroup.getPortRange().getLower()) { + throw new InvalidKubernetesGroupException("Port range is invalid " + + "for the Kubernetes group [id]" + kubernetesGroup.getGroupId()); + } + try { + validateKubernetesMaster(kubernetesGroup.getKubernetesMaster()); + validateKubernetesHosts(kubernetesGroup.getKubernetesHosts()); + + // check whether master already exists + if (context.kubernetesHostExists(kubernetesGroup.getKubernetesMaster().getHostId())) { + throw new InvalidKubernetesGroupException("Kubernetes host already exists [id] " + + kubernetesGroup.getKubernetesMaster().getHostId()); + } + + // Check for duplicate hostIds + if (kubernetesGroup.getKubernetesHosts() != null) { + List<String> hostIds = new ArrayList<String>(); + hostIds.add(kubernetesGroup.getKubernetesMaster().getHostId()); + + for (KubernetesHost kubernetesHost : kubernetesGroup.getKubernetesHosts()) { + if (hostIds.contains(kubernetesHost.getHostId())) { + throw new InvalidKubernetesGroupException( + String.format("Kubernetes host [id] %s already defined in the request", kubernetesHost.getHostId())); + } + + // check whether host already exists + if (context.kubernetesHostExists(kubernetesHost.getHostId())) { + throw new InvalidKubernetesGroupException("Kubernetes host already exists [id] " + + kubernetesHost.getHostId()); + } + + hostIds.add(kubernetesHost.getHostId()); + } + } + + } catch (InvalidKubernetesHostException e) { + throw new InvalidKubernetesGroupException(e.getMessage()); + } catch (InvalidKubernetesMasterException e) { + throw new InvalidKubernetesGroupException(e.getMessage()); + } + } + + private static void validateKubernetesHosts(KubernetesHost[] kubernetesHosts) throws InvalidKubernetesHostException { + if (kubernetesHosts == null || kubernetesHosts.length == 0) { + return; + } + for (KubernetesHost kubernetesHost : kubernetesHosts) { + validateKubernetesHost(kubernetesHost); + } + } + + public static void validateKubernetesHost(KubernetesHost kubernetesHost) throws InvalidKubernetesHostException { + if (kubernetesHost == null) { + throw new InvalidKubernetesHostException("Kubernetes host can not be null"); + } + if (StringUtils.isEmpty(kubernetesHost.getHostId())) { + throw new InvalidKubernetesHostException("Kubernetes host id can not be empty"); + } + if (kubernetesHost.getHostIpAddress() == null) { + throw new InvalidKubernetesHostException("Mandatory field Kubernetes host IP address has not been set " + + "for [hostId] " + kubernetesHost.getHostId()); + } + if (!InetAddresses.isInetAddress(kubernetesHost.getHostIpAddress())) { + throw new InvalidKubernetesHostException("Kubernetes host ip address is invalid: " + kubernetesHost.getHostIpAddress()); + } + } + + public static void validateKubernetesMaster(KubernetesMaster kubernetesMaster) throws InvalidKubernetesMasterException { + try { + validateKubernetesHost(kubernetesMaster); + } catch (InvalidKubernetesHostException e) { + throw new InvalidKubernetesMasterException(e.getMessage()); + } + } + } http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/Properties.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/Properties.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/Properties.java index 1b8ef93..f842672 100644 --- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/Properties.java +++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/Properties.java @@ -65,21 +65,44 @@ public class Properties implements Serializable { } @Override - public boolean equals(Object object) { - if (object == null) { - return false; - } - - if (!(object instanceof Properties)) { - return false; - } - - Properties propertiesObject = (Properties) object; - return Arrays.equals(propertiesObject.getProperties(), this.getProperties()); + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((properties == null) ? 0 : properties.hashCode()); + return result; } @Override - public int hashCode() { - return this.hashCode(); + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Properties other = (Properties) obj; + if (properties == null) { + if (other.properties != null) + return false; + } else if (!Arrays.equals(other.getProperties(), this.getProperties())) + return false; + return true; } + +// @Override +// public boolean equals(Object object) { +// if (object == null) { +// return false; +// } +// +// if (!(object instanceof Properties)) { +// return false; +// } +// +// Properties propertiesObject = (Properties) object; +// return Arrays.equals(propertiesObject.getProperties(), this.getProperties()); +// } + + + } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesGroup.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesGroup.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesGroup.java index 1244ab4..d7f54be 100644 --- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesGroup.java +++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesGroup.java @@ -29,6 +29,7 @@ import java.util.Arrays; */ public class KubernetesGroup implements Serializable { + private static final long serialVersionUID = 3210149484906093132L; private String groupId; private KubernetesHost[] kubernetesHosts; private KubernetesMaster kubernetesMaster; http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesHost.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesHost.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesHost.java index 60baa12..49ed025 100644 --- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesHost.java +++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesHost.java @@ -31,6 +31,7 @@ import java.io.Serializable; * The model class for KubernetesHost beans. This represents a Kubernetes CoreOS host instance */ public class KubernetesHost implements Serializable { + private static final long serialVersionUID = 1798748592432690645L; private static final Log log = LogFactory.getLog(KubernetesHost.class); protected String hostId; protected String hostname; http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesMaster.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesMaster.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesMaster.java index a8cbf8f..25badf2 100644 --- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesMaster.java +++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesMaster.java @@ -30,6 +30,8 @@ import java.io.Serializable; * The model class for KubernetesMaster beans. This represents a Kubernetes CoreOS master host instance */ public class KubernetesMaster extends KubernetesHost implements Serializable { + private static final long serialVersionUID = -4369535909362724532L; + private static final Log log = LogFactory.getLog(KubernetesMaster.class); private String endpoint; http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/PortRange.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/PortRange.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/PortRange.java index 8225127..538c46a 100644 --- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/PortRange.java +++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/PortRange.java @@ -25,6 +25,7 @@ import java.io.Serializable; * The model class for PortRange definition. */ public class PortRange implements Serializable { + private static final long serialVersionUID = -8658155576745059779L; int upper; int lower; http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/CloudControllerServiceClient.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/CloudControllerServiceClient.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/CloudControllerServiceClient.java index 86c8d01..78e5307 100644 --- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/CloudControllerServiceClient.java +++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/CloudControllerServiceClient.java @@ -32,14 +32,15 @@ import org.apache.stratos.cloud.controller.stub.domain.CartridgeConfig; import org.apache.stratos.cloud.controller.stub.domain.Registrant; import org.apache.stratos.cloud.controller.stub.domain.ServiceGroup; import org.apache.stratos.cloud.controller.stub.domain.Dependencies; +import org.apache.stratos.cloud.controller.stub.kubernetes.KubernetesGroup; +import org.apache.stratos.cloud.controller.stub.kubernetes.KubernetesHost; +import org.apache.stratos.cloud.controller.stub.kubernetes.KubernetesMaster; import org.apache.stratos.common.Properties; -import org.apache.stratos.common.Property; import org.apache.stratos.manager.internal.DataHolder; import org.apache.stratos.manager.utils.ApplicationManagementUtil; import org.apache.stratos.manager.utils.CartridgeConstants; import java.rmi.RemoteException; -import java.util.Iterator; public class CloudControllerServiceClient { @@ -161,4 +162,57 @@ public class CloudControllerServiceClient { return stub.getClusterContext(clusterId); } + + public boolean deployKubernetesGroup(KubernetesGroup kubernetesGroup) throws RemoteException, + CloudControllerServiceInvalidKubernetesGroupExceptionException { + return stub.addKubernetesGroup(kubernetesGroup); + } + + public boolean deployKubernetesHost(String kubernetesGroupId, KubernetesHost kubernetesHost) + throws RemoteException, CloudControllerServiceInvalidKubernetesHostExceptionException, + CloudControllerServiceNonExistingKubernetesGroupExceptionException { + + return stub.addKubernetesHost(kubernetesGroupId, kubernetesHost); + } + + public boolean updateKubernetesMaster(KubernetesMaster kubernetesMaster) throws RemoteException, + CloudControllerServiceInvalidKubernetesMasterExceptionException, + CloudControllerServiceNonExistingKubernetesMasterExceptionException { + return stub.updateKubernetesMaster(kubernetesMaster); + } + + public KubernetesGroup[] getAvailableKubernetesGroups() throws RemoteException { + return stub.getAllKubernetesGroups(); + } + + public KubernetesGroup getKubernetesGroup(String kubernetesGroupId) throws RemoteException, + CloudControllerServiceNonExistingKubernetesGroupExceptionException { + return stub.getKubernetesGroup(kubernetesGroupId); + } + + public boolean undeployKubernetesGroup(String kubernetesGroupId) throws RemoteException, + CloudControllerServiceNonExistingKubernetesGroupExceptionException { + return stub.removeKubernetesGroup(kubernetesGroupId); + } + + public boolean undeployKubernetesHost(String kubernetesHostId) throws RemoteException, + CloudControllerServiceNonExistingKubernetesHostExceptionException { + return stub.removeKubernetesHost(kubernetesHostId); + } + + public KubernetesHost[] getKubernetesHosts(String kubernetesGroupId) throws RemoteException, + CloudControllerServiceNonExistingKubernetesGroupExceptionException { + return stub.getHostsForKubernetesGroup(kubernetesGroupId); + } + + public KubernetesMaster getKubernetesMaster(String kubernetesGroupId) throws RemoteException, + CloudControllerServiceNonExistingKubernetesGroupExceptionException { + return stub.getMasterForKubernetesGroup(kubernetesGroupId); + } + + public boolean updateKubernetesHost(KubernetesHost kubernetesHost) throws RemoteException, + CloudControllerServiceInvalidKubernetesHostExceptionException, + CloudControllerServiceNonExistingKubernetesHostExceptionException { + return stub.updateKubernetesHost(kubernetesHost); + } } http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java index 5e0c7bf..401d701 100644 --- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java +++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java @@ -26,9 +26,16 @@ import org.apache.commons.logging.LogFactory; import org.apache.stratos.autoscaler.stub.pojo.ApplicationContext; import org.apache.stratos.autoscaler.stub.*; import org.apache.stratos.autoscaler.stub.deployment.policy.DeploymentPolicy; +import org.apache.stratos.autoscaler.stub.exception.InvalidKubernetesGroupException; import org.apache.stratos.cloud.controller.stub.domain.CartridgeConfig; import org.apache.stratos.cloud.controller.stub.domain.CartridgeInfo; import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidCartridgeTypeExceptionException; +import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidKubernetesGroupExceptionException; +import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidKubernetesHostExceptionException; +import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidKubernetesMasterExceptionException; +import org.apache.stratos.cloud.controller.stub.CloudControllerServiceNonExistingKubernetesGroupExceptionException; +import org.apache.stratos.cloud.controller.stub.CloudControllerServiceNonExistingKubernetesHostExceptionException; +import org.apache.stratos.cloud.controller.stub.CloudControllerServiceNonExistingKubernetesMasterExceptionException; import org.apache.stratos.cloud.controller.stub.CloudControllerServiceUnregisteredCartridgeExceptionException; import org.apache.stratos.common.Property; import org.apache.stratos.manager.client.AutoscalerServiceClient; @@ -1618,17 +1625,17 @@ public class StratosApiV41Utils { public static boolean deployKubernetesGroup(KubernetesGroup kubernetesGroupBean) throws RestAPIException { - AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient(); - if (autoscalerServiceClient != null) { - org.apache.stratos.autoscaler.stub.kubernetes.KubernetesGroup kubernetesGroup = - PojoConverter.convertToASKubernetesGroupPojo(kubernetesGroupBean); + CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient(); + if (cloudControllerServiceClient != null) { + org.apache.stratos.cloud.controller.stub.kubernetes.KubernetesGroup kubernetesGroup = + PojoConverter.convertToCCKubernetesGroupPojo(kubernetesGroupBean); try { - return autoscalerServiceClient.deployKubernetesGroup(kubernetesGroup); + return cloudControllerServiceClient.deployKubernetesGroup(kubernetesGroup); } catch (RemoteException e) { log.error(e.getMessage(), e); throw new RestAPIException(e.getMessage(), e); - } catch (AutoScalerServiceInvalidKubernetesGroupExceptionException e) { + } catch (CloudControllerServiceInvalidKubernetesGroupExceptionException e) { String message = e.getFaultMessage().getInvalidKubernetesGroupException().getMessage(); log.error(message, e); throw new RestAPIException(message, e); @@ -1640,21 +1647,21 @@ public class StratosApiV41Utils { public static boolean deployKubernetesHost(String kubernetesGroupId, KubernetesHost kubernetesHostBean) throws RestAPIException { - AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient(); - if (autoscalerServiceClient != null) { - org.apache.stratos.autoscaler.stub.kubernetes.KubernetesHost kubernetesHost = - PojoConverter.convertToASKubernetesHostPojo(kubernetesHostBean); + CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient(); + if (cloudControllerServiceClient != null) { + org.apache.stratos.cloud.controller.stub.kubernetes.KubernetesHost kubernetesHost = + PojoConverter.convertToCCKubernetesHostPojo(kubernetesHostBean); try { - return autoscalerServiceClient.deployKubernetesHost(kubernetesGroupId, kubernetesHost); + return cloudControllerServiceClient.deployKubernetesHost(kubernetesGroupId, kubernetesHost); } catch (RemoteException e) { log.error(e.getMessage(), e); throw new RestAPIException(e.getMessage(), e); - } catch (AutoScalerServiceInvalidKubernetesHostExceptionException e) { + } catch (CloudControllerServiceInvalidKubernetesHostExceptionException e) { String message = e.getFaultMessage().getInvalidKubernetesHostException().getMessage(); log.error(message, e); throw new RestAPIException(message, e); - } catch (AutoScalerServiceNonExistingKubernetesGroupExceptionException e) { + } catch (CloudControllerServiceNonExistingKubernetesGroupExceptionException e) { String message = e.getFaultMessage().getNonExistingKubernetesGroupException().getMessage(); log.error(message, e); throw new RestAPIException(message, e); @@ -1665,21 +1672,21 @@ public class StratosApiV41Utils { public static boolean updateKubernetesMaster(KubernetesMaster kubernetesMasterBean) throws RestAPIException { - AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient(); - if (autoscalerServiceClient != null) { - org.apache.stratos.autoscaler.stub.kubernetes.KubernetesMaster kubernetesMaster = - PojoConverter.convertToASKubernetesMasterPojo(kubernetesMasterBean); + CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient(); + if (cloudControllerServiceClient != null) { + org.apache.stratos.cloud.controller.stub.kubernetes.KubernetesMaster kubernetesMaster = + PojoConverter.convertToCCKubernetesMasterPojo(kubernetesMasterBean); try { - return autoscalerServiceClient.updateKubernetesMaster(kubernetesMaster); + return cloudControllerServiceClient.updateKubernetesMaster(kubernetesMaster); } catch (RemoteException e) { log.error(e.getMessage(), e); throw new RestAPIException(e.getMessage(), e); - } catch (AutoScalerServiceInvalidKubernetesMasterExceptionException e) { + } catch (CloudControllerServiceInvalidKubernetesMasterExceptionException e) { String message = e.getFaultMessage().getInvalidKubernetesMasterException().getMessage(); log.error(message, e); throw new RestAPIException(message, e); - } catch (AutoScalerServiceNonExistingKubernetesMasterExceptionException e) { + } catch (CloudControllerServiceNonExistingKubernetesMasterExceptionException e) { String message = e.getFaultMessage().getNonExistingKubernetesMasterException().getMessage(); log.error(message, e); throw new RestAPIException(message, e); @@ -1690,11 +1697,11 @@ public class StratosApiV41Utils { public static KubernetesGroup[] getAvailableKubernetesGroups() throws RestAPIException { - AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient(); - if (autoscalerServiceClient != null) { + CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient(); + if (cloudControllerServiceClient != null) { try { - org.apache.stratos.autoscaler.stub.kubernetes.KubernetesGroup[] - kubernetesGroups = autoscalerServiceClient.getAvailableKubernetesGroups(); + org.apache.stratos.cloud.controller.stub.kubernetes.KubernetesGroup[] + kubernetesGroups = cloudControllerServiceClient.getAvailableKubernetesGroups(); return PojoConverter.populateKubernetesGroupsPojo(kubernetesGroups); } catch (RemoteException e) { @@ -1707,17 +1714,17 @@ public class StratosApiV41Utils { public static KubernetesGroup getKubernetesGroup(String kubernetesGroupId) throws RestAPIException { - AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient(); - if (autoscalerServiceClient != null) { + CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient(); + if (cloudControllerServiceClient != null) { try { - org.apache.stratos.autoscaler.stub.kubernetes.KubernetesGroup - kubernetesGroup = autoscalerServiceClient.getKubernetesGroup(kubernetesGroupId); + org.apache.stratos.cloud.controller.stub.kubernetes.KubernetesGroup + kubernetesGroup = cloudControllerServiceClient.getKubernetesGroup(kubernetesGroupId); return PojoConverter.populateKubernetesGroupPojo(kubernetesGroup); } catch (RemoteException e) { log.error(e.getMessage(), e); throw new RestAPIException(e.getMessage(), e); - } catch (AutoScalerServiceNonExistingKubernetesGroupExceptionException e) { + } catch (CloudControllerServiceNonExistingKubernetesGroupExceptionException e) { String message = e.getFaultMessage().getNonExistingKubernetesGroupException().getMessage(); log.error(message, e); throw new RestAPIException(message, e); @@ -1766,11 +1773,11 @@ public class StratosApiV41Utils { public static KubernetesHost[] getKubernetesHosts(String kubernetesGroupId) throws RestAPIException { - AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient(); - if (autoscalerServiceClient != null) { + CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient(); + if (cloudControllerServiceClient != null) { try { - org.apache.stratos.autoscaler.stub.kubernetes.KubernetesHost[] - kubernetesHosts = autoscalerServiceClient.getKubernetesHosts(kubernetesGroupId); + org.apache.stratos.cloud.controller.stub.kubernetes.KubernetesHost[] + kubernetesHosts = cloudControllerServiceClient.getKubernetesHosts(kubernetesGroupId); List<KubernetesHost> arrayList = PojoConverter.populateKubernetesHostsPojo(kubernetesHosts); KubernetesHost[] array = new KubernetesHost[arrayList.size()]; @@ -1779,7 +1786,7 @@ public class StratosApiV41Utils { } catch (RemoteException e) { log.error(e.getMessage(), e); throw new RestAPIException(e.getMessage(), e); - } catch (AutoScalerServiceNonExistingKubernetesGroupExceptionException e) { + } catch (CloudControllerServiceNonExistingKubernetesGroupExceptionException e) { String message = e.getFaultMessage().getNonExistingKubernetesGroupException().getMessage(); log.error(message, e); throw new RestAPIException(message, e); @@ -1789,17 +1796,17 @@ public class StratosApiV41Utils { } public static KubernetesMaster getKubernetesMaster(String kubernetesGroupId) throws RestAPIException { - AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient(); - if (autoscalerServiceClient != null) { + CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient(); + if (cloudControllerServiceClient != null) { try { - org.apache.stratos.autoscaler.stub.kubernetes.KubernetesMaster - kubernetesMaster = autoscalerServiceClient.getKubernetesMaster(kubernetesGroupId); + org.apache.stratos.cloud.controller.stub.kubernetes.KubernetesMaster + kubernetesMaster = cloudControllerServiceClient.getKubernetesMaster(kubernetesGroupId); return PojoConverter.populateKubernetesMasterPojo(kubernetesMaster); } catch (RemoteException e) { log.error(e.getMessage(), e); throw new RestAPIException(e.getMessage(), e); - } catch (AutoScalerServiceNonExistingKubernetesGroupExceptionException e) { + } catch (CloudControllerServiceNonExistingKubernetesGroupExceptionException e) { String message = e.getFaultMessage().getNonExistingKubernetesGroupException().getMessage(); log.error(message, e); throw new RestAPIException(message, e); @@ -1809,20 +1816,20 @@ public class StratosApiV41Utils { } public static boolean updateKubernetesHost(KubernetesHost kubernetesHostBean) throws RestAPIException { - AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient(); - if (autoscalerServiceClient != null) { - org.apache.stratos.autoscaler.stub.kubernetes.KubernetesHost kubernetesHost = - PojoConverter.convertToASKubernetesHostPojo(kubernetesHostBean); + CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient(); + if (cloudControllerServiceClient != null) { + org.apache.stratos.cloud.controller.stub.kubernetes.KubernetesHost kubernetesHost = + PojoConverter.convertToCCKubernetesHostPojo(kubernetesHostBean); try { - return autoscalerServiceClient.updateKubernetesHost(kubernetesHost); + return cloudControllerServiceClient.updateKubernetesHost(kubernetesHost); } catch (RemoteException e) { log.error(e.getMessage(), e); throw new RestAPIException(e.getMessage(), e); - } catch (AutoScalerServiceInvalidKubernetesHostExceptionException e) { + } catch (CloudControllerServiceInvalidKubernetesHostExceptionException e) { String message = e.getFaultMessage().getInvalidKubernetesHostException().getMessage(); log.error(message, e); throw new RestAPIException(message, e); - } catch (AutoScalerServiceNonExistingKubernetesHostExceptionException e) { + } catch (CloudControllerServiceNonExistingKubernetesHostExceptionException e) { String message = e.getFaultMessage().getNonExistingKubernetesHostException().getMessage(); log.error(message, e); throw new RestAPIException(message, e);
