#!/usr/bin/env python # -*- coding: utf-8 -*- ''' @Descripttion: 资源对象操作 @Author: guohb65 @Email: guohb65@chinaunicom.cn @Date: 2019/12/13 9:18 @LastEditors : guohb65 @LastEditTime : 2019-12-20 14:51:26 ''' import json from cucc_common_pkg.util_pkg.common_func import CommonFunc from cucc_common_pkg.util_pkg.const import ConstGen, RequestMethod, K8SRestStr class ResourceObjOpt(object): @staticmethod def object_create(api_server, api_url, namespace, obj_type, body_data, token=None, ca_crt_data=None, client_crt_data=None, client_key_data=None): """ 对象创建 :param api_server: :param api_url: :param namespace: :param obj_type: :param body_data: :param token: :param ca_crt_data: :param client_crt_data: :param client_key_data: :return: """ request_url = api_server + api_url + K8SRestStr.NAMESPACES if namespace is None and obj_type is K8SRestStr.NAMESPACES and body_data is not None: pass elif namespace is not None and obj_type is not None and body_data is not None: request_url += ConstGen.BACKSLASH + namespace + ConstGen.BACKSLASH + obj_type else: return CommonFunc.gen_inner_resp_data(ConstGen.FAIL_CODE, "缺少参数") headers = {K8SRestStr.CONTENT_TYPE: K8SRestStr.APPLICATION_JSON} params = {ConstGen.DATA_STR: json.dumps( body_data), K8SRestStr.HEADERS: headers} return CommonFunc().pre_exec_rest_api(RequestMethod.POST.value, request_url, params, token, ca_crt_data, client_crt_data, client_key_data) @staticmethod def object_create_dryrun(api_server, api_url, namespace, obj_type, body_data, token=None, ca_crt_data=None, client_crt_data=None, client_key_data=None): """ 对象创建 :param api_server: :param api_url: :param namespace: :param obj_type: :param body_data: :param token: :param ca_crt_data: :param client_crt_data: :param client_key_data: :return: """ request_url = api_server + api_url + K8SRestStr.NAMESPACES if namespace is None and obj_type is K8SRestStr.NAMESPACES and body_data is not None: pass elif namespace is not None and obj_type is not None and body_data is not None: request_url += ConstGen.BACKSLASH + namespace + ConstGen.BACKSLASH + obj_type else: return CommonFunc.gen_inner_resp_data(ConstGen.FAIL_CODE, "缺少参数") headers = {K8SRestStr.CONTENT_TYPE: K8SRestStr.APPLICATION_JSON} param_dict = {"dryRun": "All"} params = {ConstGen.DATA_STR: json.dumps(body_data), K8SRestStr.HEADERS: headers, ConstGen.PARAMS_STR: param_dict} return CommonFunc().pre_exec_rest_api(RequestMethod.POST.value, request_url, params, token, ca_crt_data, client_crt_data, client_key_data) @staticmethod def object_patch_dryrun(api_server, api_url, namespace, obj_name, obj_type, body_data, token=None, ca_crt_data=None, client_crt_data=None, client_key_data=None): """ 对象创建 :param obj_name: :param api_server: :param api_url: :param namespace: :param obj_type: :param body_data: :param token: :param ca_crt_data: :param client_crt_data: :param client_key_data: :return: """ request_url = api_server + api_url + K8SRestStr.NAMESPACES if namespace is None and obj_type is K8SRestStr.NAMESPACES and body_data is not None: pass elif namespace is not None and obj_type is not None and body_data is not None: request_url += ConstGen.BACKSLASH + namespace + ConstGen.BACKSLASH + obj_type + ConstGen.BACKSLASH + obj_name else: return CommonFunc.gen_inner_resp_data(ConstGen.FAIL_CODE, "缺少参数") headers = {K8SRestStr.CONTENT_TYPE: K8SRestStr.MERGE_PATCH_JSON} param_dict = {"dryRun": "All"} params = {ConstGen.DATA_STR: json.dumps(body_data), K8SRestStr.HEADERS: headers, ConstGen.PARAMS_STR: param_dict} return CommonFunc().pre_exec_rest_api(RequestMethod.PATCH.value, request_url, params, token, ca_crt_data, client_crt_data, client_key_data) @staticmethod def object_alter(api_server, api_url, namespace, obj_type, obj_name, body_data, token=None, ca_crt_data=None, client_crt_data=None, client_key_data=None): """ 对象更新 :param api_server: :param api_url: :param namespace: :param obj_type: :param body_data: :param token: :param ca_crt_data: :param client_crt_data: :param client_key_data: :return: """ request_url = api_server + api_url + K8SRestStr.NAMESPACES if namespace is None and obj_type is K8SRestStr.NAMESPACES and body_data is not None: pass elif namespace is not None and obj_type is not None and body_data is not None: request_url += ConstGen.BACKSLASH + namespace + ConstGen.BACKSLASH + obj_type + ConstGen.BACKSLASH + obj_name else: return CommonFunc.gen_inner_resp_data(ConstGen.FAIL_CODE, "缺少参数") if obj_type is K8SRestStr.DEPLOYMENTS: headers = {K8SRestStr.CONTENT_TYPE: K8SRestStr.STRATEGIC_MERGE_PATCH_JSON} else: headers = {K8SRestStr.CONTENT_TYPE: K8SRestStr.MERGE_PATCH_JSON} params = {ConstGen.DATA_STR: json.dumps(body_data), K8SRestStr.HEADERS: headers} return CommonFunc().pre_exec_rest_api(RequestMethod.PATCH.value, request_url, params, token, ca_crt_data, client_crt_data, client_key_data) @staticmethod def object_opt(api_server, api_url, opt_type, namespace, obj_type, obj_name, body_data, token=None, ca_crt_data=None, client_crt_data=None, client_key_data=None): """ 对象操作(包含查询、更新和删除) :param api_server: :param api_url: :param opt_type: :param namespace: :param obj_type: :param obj_name: :param body_data: :param token: :param ca_crt_data: :param client_crt_data: :param client_key_data: :return: """ request_url = api_server + api_url if opt_type is not None and obj_name is not None: if opt_type is RequestMethod.PUT.value and body_data is not None: params = {ConstGen.DATA_STR: json.dumps(body_data)} elif opt_type is RequestMethod.PATCH.value and body_data is not None: headers = { K8SRestStr.CONTENT_TYPE: K8SRestStr.PATCH_CONTENT_TYPE_STR} params = {ConstGen.DATA_STR: json.dumps( body_data), K8SRestStr.HEADERS: headers} elif opt_type is RequestMethod.DELETE.value or opt_type is RequestMethod.GET.value: params = None else: return CommonFunc.gen_inner_resp_data(ConstGen.FAIL_CODE, "方法不支持") if namespace is None: request_url += obj_type + ConstGen.BACKSLASH + obj_name elif namespace is not None and obj_type is not None: request_url += K8SRestStr.NAMESPACES + ConstGen.BACKSLASH + namespace + ConstGen.BACKSLASH + obj_type \ + ConstGen.BACKSLASH + obj_name return CommonFunc().pre_exec_rest_api(opt_type, request_url, params, token, ca_crt_data, client_crt_data, client_key_data) else: return CommonFunc.gen_inner_resp_data(ConstGen.FAIL_CODE, "缺少参数") @staticmethod def object_merge_patch(api_server, api_url, namespace, obj_type, obj_name, body_data, token=None, ca_crt_data=None, client_crt_data=None, client_key_data=None): """ 对象操作(包含查询、更新和删除) :param api_server: :param api_url: :param opt_type: :param namespace: :param obj_type: :param obj_name: :param body_data: :param token: :param ca_crt_data: :param client_crt_data: :param client_key_data: :return: """ request_url = api_server + api_url if obj_name is not None: headers = {K8SRestStr.CONTENT_TYPE: K8SRestStr.MERGE_PATCH_JSON} params = {ConstGen.DATA_STR: json.dumps(body_data), K8SRestStr.HEADERS: headers} if namespace is None: request_url += obj_type + ConstGen.BACKSLASH + obj_name elif namespace is not None and obj_type is not None: request_url += K8SRestStr.NAMESPACES + ConstGen.BACKSLASH + namespace + ConstGen.BACKSLASH + obj_type \ + ConstGen.BACKSLASH + obj_name return CommonFunc().pre_exec_rest_api(RequestMethod.PATCH.value, request_url, params, token, ca_crt_data, client_crt_data, client_key_data) else: return CommonFunc.gen_inner_resp_data(ConstGen.FAIL_CODE, "缺少参数") @staticmethod def object_list(api_server, api_url, namespace, obj_type, token=None, params=None, ca_crt_data=None, client_crt_data=None, client_key_data=None): request_url = api_server + api_url if namespace is None and obj_type is not None: request_url += obj_type elif namespace is not None and obj_type is not None: request_url += K8SRestStr.NAMESPACES + ConstGen.BACKSLASH + \ namespace + ConstGen.BACKSLASH + obj_type else: return CommonFunc.gen_inner_resp_data(ConstGen.FAIL_CODE, "缺少参数") return CommonFunc().pre_exec_rest_api(RequestMethod.GET.value, request_url, params, token, ca_crt_data, client_crt_data, client_key_data)