def get(self, request, *args, **kwargs): """ 添加特性获取可用标签 :param request: :param args: :param kwargs: :return: """ # 节点添加的标签和数据中心查询回来的标签才可被组件使用 node_labels = node_label_repo.get_all_labels() labels_list = list() labels_name_list = list() if node_labels: node_labels_id_list = [label.label_id for label in node_labels] label_obj_list = label_repo.get_labels_by_label_ids( node_labels_id_list) for label_obj in label_obj_list: labels_name_list.append(label_obj.label_name) # 查询数据中心可使用的标签 try: code, msg, data_list = label_service.get_region_labels( self.tenant, self.service) if code == 200 and data_list: label_name_list = [] labels = label_repo.get_all_labels() if labels: for label in labels: label_name_list.append(label.label_name) for label_name in data_list: if label_name not in label_name_list: label_repo.create_label(label_name, label_name) labels_name_list.append(label_name) except Exception as e: logger.exception(e) # 去除该组件已绑定的标签 service_labels = service_label_repo.get_service_labels( self.service.service_id) if service_labels: service_labels_id_list = [ label.label_id for label in service_labels ] label_obj_list = label_repo.get_labels_by_label_ids( service_labels_id_list) service_labels_name_list = [ label.label_name for label in label_obj_list ] for service_labels_name in service_labels_name_list: if service_labels_name in labels_name_list: labels_name_list.remove(service_labels_name) for labels_name in labels_name_list: label_dict = dict() label_oj = label_repo.get_labels_by_label_name(labels_name) label_dict["label_id"] = label_oj.label_id label_dict["label_alias"] = label_oj.label_alias labels_list.append(label_dict) result = general_message(200, "success", "查询成功", list=labels_list) return Response(result, status=result["code"])
def add_service_labels(self, tenant, service, label_ids): labels = label_repo.get_labels_by_label_ids(label_ids) labels_list = list() body = dict() label_map = [l.label_name for l in labels] service_labels = list() for label_id in label_ids: service_label = ServiceLabels(tenant_id=tenant.tenant_id, service_id=service.service_id, label_id=label_id, region=service.service_region) service_labels.append(service_label) if service.create_status == "complete": for label_name in label_map: label_dict = dict() label_dict["label_key"] = "node-selector" label_dict["label_value"] = label_name labels_list.append(label_dict) body["labels"] = labels_list try: region_api.addServiceNodeLabel(service.service_region, tenant.tenant_name, service.service_alias, body) ServiceLabels.objects.bulk_create(service_labels) except region_api.CallApiError as e: logger.exception(e) return 507, u"组件异常", None return 200, u"操作成功", None
def add_service_labels(self, tenant, service, label_ids): labels = label_repo.get_labels_by_label_ids(label_ids) label_map = {l.label_id: l.label_name for l in labels} service_labels = [] for label_id in label_ids: service_label = ServiceLabels( tenant_id=tenant.tenant_id, service_id=service.service_id, label_id=label_id, region=service.service_region ) service_labels.append(service_label) label_name_list = [] for label_id in label_ids: label_name = label_map.get(label_id, None) if label_name: label_name_list.append(label_name) if service.create_status == "complete": body = dict() body["label_values"] = label_name_list body["enterprise_id"] = tenant.enterprise_id try: region_api.addServiceNodeLabel(service.service_region, tenant.tenant_name, service.service_alias, body) ServiceLabels.objects.bulk_create(service_labels) except region_api.CallApiError as e: logger.exception(e) return 507, u"服务异常", None return 200, u"操作成功", None
def get_service_labels(self, service): service_label_ids = service_label_repo.get_service_labels(service.service_id).values_list("label_id", flat=True) region_config = region_repo.get_region_by_region_name(service.service_region) node_label_ids = [] # 判断标签是否被节点使用 if region_config: node_label_ids = node_label_repo.get_node_label_by_region(region_config.region_id).exclude( label_id__in=service_label_ids).values_list("label_id", flat=True) used_labels = label_repo.get_labels_by_label_ids(service_label_ids) unused_labels = [] if node_label_ids: unused_labels = label_repo.get_labels_by_label_ids(node_label_ids) result = { "used_labels": [label.to_dict() for label in used_labels], "unused_labels": [label.to_dict() for label in unused_labels], } return result
def add_service_labels(self, tenant, service, user, label_ids): labels = label_repo.get_labels_by_label_ids(label_ids) label_map = {l.label_id: l.label_name for l in labels} service_labels = [] for label_id in label_ids: service_label = ServiceLabels( tenant_id=tenant.tenant_id, service_id=service.service_id, label_id=label_id, region=service.service_region ) service_labels.append(service_label) label_name_list = [] for label_id in label_ids: label_name = label_map.get(label_id, None) if label_name: label_name_list.append(label_name) code, msg, event = event_service.create_event(tenant, service, user, "add_label") if code != 200: return code, msg, event if service.create_status == "complete": body = dict() body["event_id"] = event.event_id body["label_values"] = label_name_list body["enterprise_id"] = tenant.enterprise_id try: region_api.addServiceNodeLabel(service.service_region, tenant.tenant_name, service.service_alias, body) ServiceLabels.objects.bulk_create(service_labels) except region_api.CallApiError as e: logger.exception(e) if event: event.message = u"添加标签失败".format(e.message) event.final_status = "complete" event.status = "failure" event.save() return 507, u"服务异常", event return 200, u"操作成功", event
def get(self, request, *args, **kwargs): """ 添加特性获取可用标签 :param request: :param args: :param kwargs: :return: """ try: # 节点添加的标签和数据中心查询回来的标签才可被组件使用 node_labels = node_label_repo.get_all_labels() labels_list = list() labels_name_list = list() if node_labels: node_labels_id_list = [label.label_id for label in node_labels] label_obj_list = label_repo.get_labels_by_label_ids( node_labels_id_list) for label_obj in label_obj_list: labels_name_list.append(label_obj.label_name) # 查询数据中心可使用的标签 try: code, msg, data_list = label_service.get_region_labels( self.tenant, self.service) if code == 200: if data_list: label_name_list = [] labels = label_repo.get_all_labels() if labels: for label in labels: label_name_list.append(label.label_name) for label_name in data_list: if label_name not in label_name_list: label_id = make_uuid("labels") create_time = datetime.datetime.now().strftime( '%Y-%m-%d %H:%M:%S') label = Labels(label_id=label_id, label_name=label_name, label_alias=label_name, create_time=create_time) label.save() labels_name_list.append(label_name) except Exception as e: logger.exception(e) pass # 去除该组件已绑定的标签 service_labels = service_label_repo.get_service_labels( self.service.service_id) if service_labels: service_labels_id_list = [l.label_id for l in service_labels] label_obj_list = label_repo.get_labels_by_label_ids( service_labels_id_list) service_labels_name_list = [ l.label_name for l in label_obj_list ] for service_labels_name in service_labels_name_list: if service_labels_name in labels_name_list: labels_name_list.remove(service_labels_name) for labels_name in labels_name_list: label_dict = dict() label_oj = label_repo.get_labels_by_label_name(labels_name) label_dict["label_id"] = label_oj.label_id label_dict["label_alias"] = label_oj.label_alias labels_list.append(label_dict) result = general_message(200, "success", "查询成功", list=labels_list) except Exception as e: logger.exception(e) result = error_message(e.message) return Response(result, status=result["code"])
def get(self, request, *args, **kwargs): """ 添加特性获取可用标签 :param request: :param args: :param kwargs: :return: """ try: # 判断表中是否有windows标签 labels = label_repo.get_all_labels() if labels: labels_name_list = [label.label_name for label in labels] if "windows" not in labels_name_list: label_id = make_uuid("windows") create_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') label = Labels(label_id=label_id, label_name="windows", label_alias="windows", create_time=create_time) label.save() else: label_id = make_uuid("windows") create_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') label = Labels(label_id=label_id, label_name="windows", label_alias="windows", create_time=create_time) label.save() # 节点添加的标签和windows标签才可被服务使用 node_labels = node_label_repo.get_all_labels() labels_list = list() if node_labels: node_labels_id_list = [label.label_id for label in node_labels] label_obj_list = label_repo.get_labels_by_label_ids(node_labels_id_list) labels_name_list = [label.label_name for label in label_obj_list] # 如果节点添加的标签中没有windows标签,就添加进去 if "windows" not in labels_name_list: labels_name_list.append("windows") # 去除该服务已绑定的标签 service_labels = service_label_repo.get_service_labels(self.service.service_id) if service_labels: service_labels_id_list = [label.label_id for label in service_labels] label_obj_list = label_repo.get_labels_by_label_ids(service_labels_id_list) service_labels_name_list = [label.label_name for label in label_obj_list] for service_labels_name in service_labels_name_list: if service_labels_name in labels_name_list: labels_name_list.remove(service_labels_name) for labels_name in labels_name_list: label_dict = dict() label_oj = label_repo.get_labels_by_label_name(labels_name) label_dict["label_id"] = label_oj.label_id label_dict["label_alias"] = label_oj.label_alias labels_list.append(label_dict) # 暂时只支持除节点标签外的windows标签 else: label_name = "windows" label_dict = dict() win_label = label_repo.get_labels_by_label_name(label_name) label_dict["label_id"] = win_label.label_id label_dict["label_alias"] = win_label.label_alias labels_list.append(label_dict) result = general_message(200, "success", "查询成功", list=labels_list) except Exception as e: logger.exception(e) result = error_message(e.message) return Response(result, status=result["code"])