def get(self, request, *args, **kwargs): """ 应用详情信息 --- parameters: - name: tenantName description: 租户名 required: true type: string paramType: path - name: serviceAlias description: 服务别名 required: true type: string paramType: path """ try: if self.service.service_source == "market": group_obj = tenant_service_group_repo.get_group_by_service_group_id(self.service.tenant_service_group_id) if not group_obj: result = general_message(200, "success", "当前云市应用已删除", bean=self.service.to_dict()) return Response(result, status=result["code"]) rain_app = rainbond_app_repo.get_rainbond_app_by_key_and_version(group_obj.group_key, group_obj.group_version) if not rain_app: result = general_message(200, "success", "当前云市应用已删除", bean=self.service.to_dict()) return Response(result, status=result["code"]) result = general_message(200, "success", "查询成功", bean=self.service.to_dict()) except Exception as e: logger.exception(e) result = error_message(e.message) return Response(result, status=result["code"])
def get(self, request, *args, **kwargs): """ 查询构建源信息 --- """ service_alias = self.service.service_alias try: service_source = team_services.get_service_source( service_alias=service_alias) service_source_user = service_source_repo.get_service_source( team_id=self.service.tenant_id, service_id=self.service.service_id) user = "" password = "" bean = {} if service_source_user: user = service_source_user.user_name password = service_source_user.password bean["user_name"] = user bean["password"] = password if not service_source: return Response(general_message(404, "no found source", "没有这个应用的构建源"), status=404) if service_source.service_source == 'market': # 获取组对象 group_obj = tenant_service_group_repo.get_group_by_service_group_id( service_source.tenant_service_group_id) if group_obj: # 获取内部市场对象 rain_app = rainbond_app_repo.get_rainbond_app_by_key_and_version( group_obj.group_key, group_obj.group_version) if rain_app: bean["rain_app_name"] = rain_app.group_name bean["details"] = rain_app.details bean["app_version"] = rain_app.version bean["group_key"] = rain_app.group_key bean["service_source"] = service_source.service_source bean["image"] = service_source.image bean["cmd"] = service_source.cmd bean["code_from"] = service_source.code_from bean["version"] = service_source.version bean["docker_cmd"] = service_source.docker_cmd bean["create_time"] = service_source.create_time bean["git_url"] = service_source.git_url bean["code_version"] = service_source.code_version bean["server_type"] = service_source.server_type bean["language"] = service_source.language result = general_message(200, "success", "查询成功", bean=bean) except Exception as e: logger.exception(e) result = error_message(e.message) return Response(result, status=result["code"])
def get(self, request, *args, **kwargs): try: bean = dict() upgrate_version_list = [] # 判断服务状态,未部署的服务不提供升级数据 try: body = region_api.check_service_status( self.service.service_region, self.tenant.tenant_name, self.service.service_alias, self.tenant.enterprise_id) bean = body["bean"] status = bean["cur_status"] except Exception as e: logger.exception(e) status = "unKnow" if status == "undeploy": result = general_message(200, "success", "查询成功", bean=bean, list=upgrate_version_list) return Response(result, status=result["code"]) if self.service.service_source != "market": return Response(general_message( 400, "non-cloud installed applications require no judgment", "非云市安装的应用无需判断"), status=400) # 获取组对象 group_obj = tenant_service_group_repo.get_group_by_service_group_id( self.service.tenant_service_group_id) if group_obj: # 获取内部市场对象 rain_app = rainbond_app_repo.get_rainbond_app_by_key_and_version( group_obj.group_key, group_obj.group_version) if not rain_app: result = general_message(200, "success", "当前云市应用已删除") return Response(result, status=result["code"]) else: apps_template = json.loads(rain_app.app_template) apps_list = apps_template.get("apps") for app in apps_list: if app["service_key"] == self.service.service_key: if app["deploy_version"] > self.service.deploy_version: self.service.is_upgrate = True self.service.save() try: apps_template = json.loads(rain_app.app_template) apps_list = apps_template.get("apps") service_source = service_source_repo.get_service_source( self.service.tenant_id, self.service.service_id) if service_source and service_source.extend_info: extend_info = json.loads( service_source.extend_info) if extend_info: for app in apps_list: logger.debug( '---------====app===============>{0}'. format(json.dumps(app))) logger.debug( '---------=====extend_info==============>{0}' .format(json.dumps(extend_info))) if app.has_key("service_share_uuid"): if app["service_share_uuid"] == extend_info[ "source_service_share_uuid"]: new_version = int( app["deploy_version"]) old_version = int(extend_info[ "source_deploy_version"]) if new_version > old_version: self.service.is_upgrate = True self.service.save() elif not app.has_key("service_share_uuid" ) and app.has_key( "service_key"): if app["service_key"] == extend_info[ "source_service_share_uuid"]: new_version = int( app["deploy_version"]) old_version = int(extend_info[ "source_deploy_version"]) if new_version > old_version: self.service.is_upgrate = True self.service.save() bean["is_upgrate"] = self.service.is_upgrate except Exception as e: logger.exception(e) result = error_message(e.message) return Response(result, status=result["code"]) # 通过group_key获取不同版本的应用市场对象 rain_apps = rainbond_app_repo.get_rainbond_app_by_key( group_obj.group_key) if rain_apps: for r_app in rain_apps: if r_app.version > group_obj.group_version and r_app.version not in upgrate_version_list: upgrate_version_list.append(r_app.version) elif r_app.version == group_obj.group_version and self.service.is_upgrate: upgrate_version_list.append(r_app.version) upgrate_version_list.sort() result = general_message(200, "success", "查询成功", bean=bean, list=upgrate_version_list) except Exception as e: logger.exception(e) result = error_message(e.message) return Response(result, status=result["code"])
def deploy(self, tenant, service, user, is_upgrade, committer_name=None): code, msg, event = event_service.create_event(tenant, service, user, self.DEPLOY, committer_name) if code != 200: return code, msg, event body = dict() # 默认更新升级 body["action"] = "deploy" service.build_upgrade = False if is_upgrade: body["action"] = "upgrade" service.build_upgrade = True service.deploy_version = datetime.datetime.now().strftime('%Y%m%d%H%M%S') service.save() event.deploy_version = service.deploy_version event.save() clone_url = service.git_url body["deploy_version"] = service.deploy_version body["operator"] = str(user.nick_name) body["event_id"] = event.event_id body["service_id"] = service.service_id envs = env_var_repo.get_build_envs(tenant.tenant_id, service.service_id) body["envs"] = envs kind = self.__get_service_kind(service) service_source = service_source_repo.get_service_source(service.tenant_id, service.service_id) if kind == "build_from_source_code" or kind == "source": body["repo_url"] = clone_url body["branch"] = service.code_version body["server_type"] = service.server_type if service.service_source == "market": try: # 获取组对象 group_obj = tenant_service_group_repo.get_group_by_service_group_id(service.tenant_service_group_id) if group_obj: # 获取内部市场对象 rain_app = rainbond_app_repo.get_rainbond_app_by_key_and_version(group_obj.group_key, group_obj.group_version) if rain_app: # 解析app_template的json数据 apps_template = json.loads(rain_app.app_template) apps_list = apps_template.get("apps") if service_source and service_source.extend_info: extend_info = json.loads(service_source.extend_info) for app in apps_list: if app["service_share_uuid"] == extend_info["source_service_share_uuid"]: # 如果是slug包,获取内部市场最新的数据保存(如果是最新,就获取最新,不是最新就获取之前的) share_image = app.get("share_image", None) share_slug_path = app.get("share_slug_path", None) new_extend_info = {} if share_image: if app.get("service_image", None): body["image_url"] = share_image body["user"] = app.get("service_image").get("hub_user") body["password"] = app.get("service_image").get("hub_password") new_extend_info = app["service_image"] if share_slug_path: slug_info = app.get("service_slug") slug_info["slug_path"] = share_slug_path new_extend_info = slug_info body["slug_info"] = new_extend_info # 如果是image,获取内部市场最新镜像版本保存(如果是最新,就获取最新,不是最新就获取之前的, 不会报错) service.cmd = app.get("cmd", "") service.version = app["version"] service.is_upgrate = False service.save() new_extend_info["source_deploy_version"] = app.get("deploy_version") new_extend_info["source_service_share_uuid"] = app.get("service_share_uuid") \ if app.get("service_share_uuid", None)\ else app.get("service_key", "") service_source.extend_info = json.dumps(new_extend_info) service_source.save() except Exception as e: logger.exception('===========000============>'.format(e)) body["image_url"] = service.image if service_source: extend_info = json.loads(service_source.extend_info) if service.is_slug(): body["slug_info"] = extend_info else: body["image_url"] = service.image body["kind"] = kind body["service_alias"] = service.service_alias body["service_name"] = service.service_name body["tenant_name"] = tenant.tenant_name body["enterprise_id"] = tenant.enterprise_id body["lang"] = service.language body["cmd"] = service.cmd if service_source: if service_source.user_name or service_source.password: body["user"] = service_source.user_name body["password"] = service_source.password if service_source.extend_info: extend_info = json.loads(service_source.extend_info) if not service.is_slug(): hub_user = extend_info.get("hub_user", None) hub_password = extend_info.get("hub_password", None) if hub_user or hub_password: body["user"] = hub_user body["password"] = hub_password logger.debug('-------------deploy-----body-------------------->{0}'.format(body)) try: region_api.build_service(service.service_region, tenant.tenant_name, service.service_alias, body) 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, "构建异常", event return 200, "操作成功", event
def get(self, request, *args, **kwargs): """ 应用详情信息 --- parameters: - name: tenantName description: 租户名 required: true type: string paramType: path - name: serviceAlias description: 服务别名 required: true type: string paramType: path """ bean = dict() try: # status_map = app_service.get_service_status(self.tenant, self.service) # used_resource = app_service.get_service_resource_with_plugin(self.tenant, self.service, # status_map["status"]) # service_abled_plugins = app_plugin_service.get_service_abled_plugin(self.service) # plugin_list = [p.to_dict() for p in service_abled_plugins] # bean.update(status_map) # bean.update(used_resource) # bean.update({"plugin_list": plugin_list}) service_model = self.service.to_dict() group_map = group_service.get_services_group_name( [self.service.service_id]) group_name = group_map.get(self.service.service_id)["group_name"] group_id = group_map.get(self.service.service_id)["group_id"] service_model["group_name"] = group_name service_model["group_id"] = group_id bean.update({"service": service_model}) tenant_actions = self.user.actions.tenant_actions bean.update({"tenant_actions": tenant_actions}) service_actions = self.user.actions.service_actions bean.update({"service_actions": service_actions}) event_websocket_url = ws_service.get_event_log_ws( self.request, self.service.service_region) bean.update({"event_websocket_url": event_websocket_url}) if self.service.service_source == "market": group_obj = tenant_service_group_repo.get_group_by_service_group_id( self.service.tenant_service_group_id) if not group_obj: result = general_message(200, "success", "查询成功", bean=bean) return Response(result, status=result["code"]) rain_app = rainbond_app_repo.get_rainbond_app_by_key_and_version( group_obj.group_key, group_obj.group_version) if not rain_app: result = general_message(200, "success", "当前云市应用已删除", bean=bean) return Response(result, status=result["code"]) else: apps_template = json.loads(rain_app.app_template) apps_list = apps_template.get("apps") for app in apps_list: if app["service_key"] == self.service.service_key: if app["deploy_version"] > self.service.deploy_version: self.service.is_upgrate = True self.service.save() bean.update({"service": service_model}) if self.service.service_source == AppConstants.DOCKER_COMPOSE: if self.service.create_status != "complete": compose_service_relation = compose_service.get_service_compose_id( self.service) if compose_service_relation: service_model[ "compose_id"] = compose_service_relation.compose_id bean.update({"service": service_model}) result = general_message(200, "success", "查询成功", bean=bean) except Exception as e: logger.exception(e) result = error_message(e.message) return Response(result, status=result["code"])
def get(self, request, *args, **kwargs): """ 应用详情信息 --- parameters: - name: tenantName description: 租户名 required: true type: string paramType: path - name: serviceAlias description: 服务别名 required: true type: string paramType: path """ bean = dict() try: # status_map = app_service.get_service_status(self.tenant, self.service) # used_resource = app_service.get_service_resource_with_plugin(self.tenant, self.service, # status_map["status"]) # service_abled_plugins = app_plugin_service.get_service_abled_plugin(self.service) # plugin_list = [p.to_dict() for p in service_abled_plugins] # bean.update(status_map) # bean.update(used_resource) # bean.update({"plugin_list": plugin_list}) service_model = self.service.to_dict() group_map = group_service.get_services_group_name([self.service.service_id]) group_name = group_map.get(self.service.service_id)["group_name"] group_id = group_map.get(self.service.service_id)["group_id"] service_model["group_name"] = group_name service_model["group_id"] = group_id bean.update({"service": service_model}) tenant_actions = self.user.actions.tenant_actions bean.update({"tenant_actions": tenant_actions}) service_actions = self.user.actions.service_actions bean.update({"service_actions": service_actions}) event_websocket_url = ws_service.get_event_log_ws(self.request, self.service.service_region) bean.update({"event_websocket_url": event_websocket_url}) if self.service.service_source == "market": group_obj = tenant_service_group_repo.get_group_by_service_group_id(self.service.tenant_service_group_id) if not group_obj: result = general_message(200, "success", "查询成功", bean=bean) return Response(result, status=result["code"]) rain_app = rainbond_app_repo.get_rainbond_app_by_key_and_version(group_obj.group_key, group_obj.group_version) if not rain_app: result = general_message(200, "success", "当前云市应用已删除", bean=bean) return Response(result, status=result["code"]) else: bean.update({"rain_app_name": rain_app.group_name}) apps_template = json.loads(rain_app.app_template) apps_list = apps_template.get("apps") for app in apps_list: if app["service_key"] == self.service.service_key: if app["deploy_version"] > self.service.deploy_version: self.service.is_upgrate = True self.service.save() bean.update({"service": service_model}) try: apps_template = json.loads(rain_app.app_template) apps_list = apps_template.get("apps") service_source = service_source_repo.get_service_source(self.service.tenant_id, self.service.service_id) if service_source and service_source.extend_info: extend_info = json.loads(service_source.extend_info) if extend_info: for app in apps_list: logger.debug('---------====app===============>{0}'.format(app)) logger.debug('---------=====extend_info==============>{0}'.format(extend_info)) if app.has_key("service_share_uuid"): if app["service_share_uuid"] == extend_info["source_service_share_uuid"]: new_version = int(app["deploy_version"]) old_version = int(extend_info["source_deploy_version"]) if new_version > old_version: self.service.is_upgrate = True self.service.save() service_model["is_upgrade"] = True bean.update({"service": service_model}) elif not app.has_key("service_share_uuid") and app.has_key("service_key"): if app["service_key"] == extend_info["source_service_share_uuid"]: new_version = int(app["deploy_version"]) old_version = int(extend_info["source_deploy_version"]) if new_version > old_version: self.service.is_upgrate = True self.service.save() service_model["is_upgrade"] = True bean.update({"service": service_model}) except Exception as e: logger.exception(e) if self.service.service_source == AppConstants.DOCKER_COMPOSE: if self.service.create_status != "complete": compose_service_relation = compose_service.get_service_compose_id(self.service) if compose_service_relation: service_model["compose_id"] = compose_service_relation.compose_id bean.update({"service": service_model}) bean["is_third"] = False if self.service.service_source == "third_party": bean["is_third"] = True service_endpoints = service_endpoints_repo.get_service_endpoints_by_service_id(self.service.service_id) if service_endpoints: bean["register_way"] = service_endpoints.endpoints_type if service_endpoints.endpoints_type == "api": # 从环境变量中获取域名,没有在从请求中获取 host = os.environ.get('DEFAULT_DOMAIN', request.get_host()) bean["api_url"] = "http://" + host + "/console/" + "third_party/{0}".format(self.service.service_id) key_repo = deploy_repo.get_service_key_by_service_id(service_id=self.service.service_id) if key_repo: bean["api_service_key"] = pickle.loads(base64.b64decode(key_repo.secret_key)).get("secret_key") if service_endpoints.endpoints_type == "discovery": # 返回类型和key endpoints_info_dict = json.loads(service_endpoints.endpoints_info) logger.debug('--------endpoints_info---------->{0}'.format(endpoints_info_dict)) bean["discovery_type"] = endpoints_info_dict["type"] bean["discovery_key"] = endpoints_info_dict["key"] result = general_message(200, "success", "查询成功", bean=bean) except Exception as e: logger.exception(e) result = error_message(e.message) return Response(result, status=result["code"])