package com.platform.kubernetes; import io.fabric8.kubernetes.api.model.Container; import io.fabric8.kubernetes.api.model.ContainerPort; import io.fabric8.kubernetes.api.model.Pod; import io.fabric8.kubernetes.api.model.ReplicationController; import io.fabric8.kubernetes.client.Client; import io.fabric8.kubernetes.client.Config; import io.fabric8.kubernetes.client.ConfigBuilder; import io.fabric8.kubernetes.client.DefaultKubernetesClient; import io.fabric8.kubernetes.client.KubernetesClient; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.platform.utils.Configs; import com.platform.utils.UtilsHelper; public class SimpleKubeClient { private KubernetesClient client; private final static String DEFAULT_NAMESPACE = "default"; public SimpleKubeClient() { this.client = new DefaultKubernetesClient(Configs.KUBE_MASTER_URL); } public SimpleKubeClient(String masterUrl) { this.client = new DefaultKubernetesClient(masterUrl); } public SimpleKubeClient(Config config) { Config cf = config; if (null == config) { cf = new ConfigBuilder().withMasterUrl(Configs.KUBE_MASTER_URL) .build(); } this.client = new DefaultKubernetesClient(cf); } // RollingUpdatercline public void updateOrAddReplicasLabelById(String namespace, String resourceId, String key, String value) { KubernetesClient kubeClient = client; if (checkClientNull()) kubeClient = new DefaultKubernetesClient(Configs.KUBE_MASTER_URL); kubeClient.replicationControllers().inNamespace(namespace) .withName(resourceId).rolling().edit().editMetadata() .addToLabels(key, value).endMetadata().done(); } public void updateOrAddReplicasLabelByEntity(String namespace, ReplicationController replicas, String key, String value) { updateOrAddReplicasLabelById(namespace, replicas.getMetadata() .getName(), key, value); } public void updateOrAddReplicasLabelById(String resourceId, String key, String value) { updateOrAddReplicasLabelById(DEFAULT_NAMESPACE, resourceId, key, value); } public void updateOrAddReplicasLabelByEntity( ReplicationController replicas, String key, String value) { updateOrAddReplicasLabelByEntity(DEFAULT_NAMESPACE, replicas, key, value); } @SuppressWarnings("resource") public ReplicationController getReplicationController(String namespace, String replicasName) { KubernetesClient kubeClient = client; if (checkClientNull()) kubeClient = new DefaultKubernetesClient(Configs.KUBE_MASTER_URL); return kubeClient.replicationControllers().inNamespace(namespace) .withName(replicasName).get(); } public ReplicationController getReplicationController(String replicasName) { return getReplicationController(DEFAULT_NAMESPACE, replicasName); } @SuppressWarnings("resource") public List getPodsForApplicaList(ReplicationController rc) { Map selector = rc.getSpec().getSelector(); KubernetesClient kubeClient = client; if (checkClientNull()) kubeClient = new DefaultKubernetesClient(Configs.KUBE_MASTER_URL); List podList = kubeClient.pods() .inNamespace(rc.getMetadata().getNamespace()).list().getItems(); return getPods(podList, selector); } private boolean checkClientNull() { return null == client; } public List getPods(List pods, Map selector) { List result = new ArrayList(); for (int i = 0; i < pods.size(); i++) if (UtilsHelper.isSubMap(getLabels(pods.get(i)), selector)) result.add(pods.get(i)); return result; } private Map getLabels(Pod pod) { return pod.getMetadata().getLabels(); } public KubernetesClient getClient() { // TODO Auto-generated method stub return client; } public int getPodContainerport(Pod pod) { int port = Configs.ORACLE_DEFAULT_PORT; List containers = pod.getSpec().getContainers(); if (null != containers && containers.size() > 0) { List ports = containers.get(0).getPorts(); if (null != ports && ports.size() > 0) port = ports.get(0).getHostPort(); } return port; } public String getPodHostIp(Pod pod) { return pod.getSpec().getNodeName(); } @SuppressWarnings("resource") public Map getReplicationControllerList( String namespace) { KubernetesClient kubeClient = client; Map rcMap = new HashMap(); if (checkClientNull()) kubeClient = new DefaultKubernetesClient(Configs.KUBE_MASTER_URL); List replicasList = kubeClient .replicationControllers().list().getItems(); if (replicasList != null) for (int i = 0; i < replicasList.size(); i++) { ReplicationController rController = replicasList.get(i); rcMap.put(rController.getMetadata().getName(), rController); } return rcMap; } public Map getReplicationControllerList() { return getReplicationControllerList(DEFAULT_NAMESPACE); } public void close() { if (!checkClientNull()) client.close(); } }