def update_cluster_status(log): if log.oper_type == models.ClusterOperType.ClusterRemove: if log.status == models.CommonStatus.Normal: status = models.CommonStatus.Removed else: status = log.status else: status = log.status for i in range(2): token_dict = ssm.get_client_access_token() resp = paas_cc.update_cluster(token_dict["access_token"], log.project_id, log.cluster_id, {"status": status}) if resp.get("code") != ErrorCode.NoError: logger.error("Update cluster[%s] status failed, detail: %s" % (log.cluster_id, resp.get("message"))) else: logger.info("Update cluster[%s] success" % log.cluster_id) break if log.oper_type in [models.ClusterOperType.ClusterInstall, models.NodeOperType.NodeInstall]: return if log.status not in [models.CommonStatus.Normal]: return for i in range(2): # 删除集群及master token_dict = ssm.get_client_access_token() resp = paas_cc.delete_cluster(token_dict["access_token"], log.project_id, log.cluster_id) if resp.get("code") != ErrorCode.NoError: logger.error("Delete cluster[%s] failed, detail: %s" % (log.cluster_id, resp.get("message"))) else: logger.info("Delete cluster[%s] success" % log.cluster_id) break # 删除iam集群 delete_iam_cluster_resource(log)
def update_node_status(log): params = json.loads(log.params) ip_list = list(params.get("node_info", {}).keys()) if log.oper_type == models.NodeOperType.NodeRemove: if log.status == models.CommonStatus.Normal: status = models.CommonStatus.Removed else: status = log.status else: status = log.status for i in range(2): token_dict = ssm.get_client_access_token() resp = paas_cc.update_node_list( token_dict["access_token"], log.project_id, log.cluster_id, [{ "inner_ip": ip, "status": status } for ip in ip_list], ) if resp.get("code") != ErrorCode.NoError: logger.error("Update node[%s] status failed, detail: %s" % (json.dumps(ip_list), resp.get("message"))) else: logger.info("Update node[%s] status success" % json.dumps(ip_list)) break
def initial(self, request, *args, **kwargs): request.user.token = FancyDict(access_token=get_client_access_token().get("access_token")) if self.project_field_name in kwargs: return super().initial(request, *args, **kwargs) for field_name in self.available_project_field_names: self.refine_project_field(request.user.token.access_token, field_name, kwargs) return super().initial(request, *args, **kwargs)
def list_instance(self, filter, page, **options): access_token = ssm.get_client_access_token()["access_token"] projects = filter_projects(access_token) count = len(projects) projects = projects[page.slice_from:page.slice_to] # noqa results = [{ "id": p["project_id"], "display_name": p["project_name"] } for p in projects] return ListResult(results=results, count=count)
def fetch_instance_info(self, filter, **options): access_token = ssm.get_client_access_token()["access_token"] query_params = None if filter.ids: query_params = {"project_ids": ",".join(filter.ids)} projects = filter_projects(access_token, query_params) results = [{ "id": p["project_id"], "display_name": p["project_name"] } for p in projects] return ListResult(results=results, count=len(results))
def _polling_once(model, log): token_dict = ssm.get_client_access_token() params = json.loads(log.params) resp = ops.get_task_result( token_dict["access_token"], log.project_id, log.task_id, params.get("cc_app_id"), params.get("username") ) if resp.get("code") != ErrorCode.NoError: logger.error("query task failed, detail: %s" % resp.get("message")) data = resp.get("data") or {} status = data.get("status", "UNKNOWN") step_logs = data.get("steps") or [] logs = [] running_logs = [] failure_logs = [] for index, val in enumerate(step_logs, 1): local_status = val.get("status") local_name = "- %s" % (val.get("name", "").capitalize()) local_name_status = {"state": local_status, "name": local_name} if local_status in TASK_SUCCESS_STATUS: logs.append(local_name_status) elif local_status in TASK_FAILED_STATUS: failure_logs.append(local_name_status) else: running_logs.append(local_name_status) logs.extend(running_logs) logs.extend(failure_logs) if status in TASK_FAILE_SUCCESS_STATUS: if status in TASK_FAILED_STATUS: log.status = log_status(log) else: log.status = models.CommonStatus.Normal log.is_finished = True log.is_polling = False if logs: log.log = json.dumps({"state": status, "node_tasks": logs}) log.save() return log
def initial(self, request, *args, **kwargs): request.user.token = FancyDict( access_token=get_client_access_token().get("access_token")) super().initial(request, *args, **kwargs)
def get_access_token(): return get_client_access_token()
def get_system_token(): """获取非用户 access_token""" return ssm.get_client_access_token()["access_token"]