namespace_opt.py 5.6 KB
Newer Older
qunfeng qiu's avatar
qunfeng qiu committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
'''
@Descripttion: 命名空间底层操作
@Author: guohb65
@Email: guohb65@chinaunicom.cn
@Date: 2019-12-11 09:39:22
@LastEditors: guohb65
@LastEditTime: 2019-12-12 16:11:52
'''

from cucc_common_pkg.util_pkg.common_func import CommonFunc
from cucc_common_pkg.util_pkg.const import ConstGen, K8SRestUrl, RequestMethod, K8SObjStr, NamespaceStatus, \
    K8SRestStr
from cucc_common_pkg.util_pkg.resource_obj_opt import ResourceObjOpt

NS_NAME_STR = "ns_name"
NS_STATUS_STR = "ns_status"
CREATE_TIME_STR = "create_time"
NS_DESC_STR = "ns_desc"
API_VERSION_VAL = "v1"
KIND_STR = "kind"
NAMESPACE_STR = "Namespace"
HEADERS = "headers"
DATA_STR = "data"


class NamespaceOPT(object):

    def namespace_is_exist(self, api_server, namespace, token=None):
        """
        查询namespace是否已经在集群中存在
        :param api_server:
        :param namespace:
        :param token:
        :return:
        """
        if namespace is not None:
            ret = self.namespace_list(api_server, token)
            if ret[ConstGen.RET_CODE] is ConstGen.SUCCESS_CODE:
                namespaces_list = ret[ConstGen.DATA_ROWS_STR]
                i = 0
                namespaces_name_list = []
                while i < len(namespaces_list):
                    ns_obj = namespaces_list[i]
                    namespaces_name_list.append(ns_obj[NS_NAME_STR])
                    i += 1
                if namespace in namespaces_name_list:
                    return True
                else:
                    return False
            else:
                print(ret[ConstGen.RET_VAL])
                return None
        else:
            print("[namespace]参数缺失")
            return None

    def namespace_list(self, api_server, token=None):
        """
        查询namespace列表
        :param api_server:
        :param token:
        :return:
        """
        if api_server is not None:
            ret = ResourceObjOpt().object_list(api_server, K8SRestUrl.NAMESPACES_REST_URL, None, K8SRestStr.NAMESPACES,
                                               token, None)
            if ConstGen.RET_CODE in ret and ret[ConstGen.RET_CODE] is ConstGen.SUCCESS_CODE:
                ret_dict = ret[ConstGen.DATA_ROWS_STR]
                namespaces_list = []
                if K8SObjStr.ITEM_KEY in ret_dict:
                    i = 0
                    while i < len(ret_dict[K8SObjStr.ITEM_KEY]):
                        meta_data = ret_dict[K8SObjStr.ITEM_KEY][i][
                            K8SObjStr.METADATA_KEY]
                        namespace = {NS_NAME_STR: meta_data[K8SObjStr.NAME_KEY]}
                        ns_status = ret_dict[K8SObjStr.ITEM_KEY][i][
                            K8SObjStr.STATUS_KEY][K8SObjStr.PHASE_KEY]
                        namespace[NS_STATUS_STR] = NamespaceStatus[ns_status].value
                        namespace[CREATE_TIME_STR] = CommonFunc().create_time_format(
                            meta_data[K8SObjStr.CREATE_TIME_KEY])
                        if K8SObjStr.ANNOTATIONS_KEY in meta_data:
                            annotations_data = meta_data[K8SObjStr.ANNOTATIONS_KEY]
                            if K8SObjStr.NS_DESC_KEY in annotations_data:
                                namespace[NS_DESC_STR] = annotations_data[K8SObjStr.NS_DESC_KEY]
                        namespaces_list.append(namespace)
                        i += 1
                return CommonFunc().gen_inner_resp_data(ConstGen.SUCCESS_CODE, ConstGen.SUCCESS_STR, namespaces_list)
            else:
                return CommonFunc().gen_inner_resp_data(ret[ConstGen.RET_CODE], ret[ConstGen.RET_VAL])
        else:
            return CommonFunc().gen_inner_resp_data(ConstGen.FAIL_CODE, "[api_server]缺失")

    def namespace_add(self, api_server, ns_name, ns_desc, token=None):
        """
        新增namespace
        :param api_server:
        :param ns_name:
        :param ns_desc:
        :param token:
        :param ca_crt_data:
        :param client_crt_data:
        :param client_key_data:
        :return:
        """
        if api_server is not None:
            is_exist = self.namespace_is_exist(api_server, ns_name, token)
            if is_exist is True:
                ret = CommonFunc.gen_inner_resp_data(ConstGen.FAIL_CODE, "命名空间已存在")
            else:
                body_data = {}
                meta_data = {}
                annotations = {K8SObjStr.NS_DESC_KEY: ns_desc}
                meta_data[K8SObjStr.NAME_KEY] = ns_name
                meta_data[K8SObjStr.ANNOTATIONS_KEY] = annotations
                body_data[K8SObjStr.API_VERSION_STR] = API_VERSION_VAL
                body_data[KIND_STR] = NAMESPACE_STR
                body_data[K8SObjStr.METADATA_KEY] = meta_data
                ret = ResourceObjOpt().object_create(api_server, K8SRestUrl.NAMESPACES_REST_URL, None,
                                                     K8SRestStr.NAMESPACES, body_data, token)

        else:
            ret = CommonFunc.gen_inner_resp_data(ConstGen.FAIL_CODE, "[api_server]缺失")
        return ret

    @staticmethod
    def namespace_delete(api_server, namespace, token=None):
        """
        删除namespace
        :param api_server:
        :param namespace:
        :param token:
        :return:
        """
        if api_server is not None and namespace is not None:
            ret = ResourceObjOpt().object_opt(api_server, K8SRestUrl.NAMESPACES_REST_URL, RequestMethod.DELETE.value,
                                              None, K8SRestStr.NAMESPACES, namespace, None, token)
        else:
            ret = CommonFunc.gen_inner_resp_data(ConstGen.FAIL_CODE, "[api_server或namespace]缺失")
        return ret