Ejemplo n.º 1
0
 def get(self, request, *args, **kwargs):
     """
     查询构建源信息
     ---
     """
     try:
         service_source = service_source_repo.get_service_source(team_id=self.service.tenant_id,
                                                                 service_id=self.service.service_id)
         bean = {
             "user_name": "",
             "password": ""
         }                                         
         if service_source:
             bean["user"] = service_source.user_name
             bean["password"] = service_source.password
         
         if self.service.service_source == 'market':
             if service_source:
                 # 获取内部市场对象
                 rain_app = rainbond_app_repo.get_rainbond_app_by_key_and_version(service_source.group_key,
                                                                                  service_source.version)
                 if rain_app:
                     bean["rain_app_name"] = rain_app.group_name
                     bean["details"] = rain_app.details
                     logger.debug("app_version: {}".format(rain_app.version))
                     bean["app_version"] = rain_app.version
                     bean["group_key"] = rain_app.group_key
         bean["service_source"] = self.service.service_source
         bean["image"] = self.service.image
         bean["cmd"] = self.service.cmd
         bean["code_from"] = self.service.code_from
         bean["version"] = self.service.version
         bean["docker_cmd"] = self.service.docker_cmd
         bean["create_time"] = self.service.create_time
         bean["git_url"] = self.service.git_url
         bean["code_version"] = self.service.code_version
         bean["server_type"] = self.service.server_type
         bean["language"] = self.service.language
         if self.service.service_source == 'market':
             if service_source:
                 # 获取内部市场对象
                 rain_app = rainbond_app_repo.get_rainbond_app_by_key_and_version(service_source.group_key,
                                                                                  service_source.version)
                 if rain_app:
                     bean["rain_app_name"] = rain_app.group_name
                     bean["details"] = rain_app.details
                     logger.debug("version: {}".format(rain_app.version))
                     bean["version"] = rain_app.version
                     bean["group_key"] = rain_app.group_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"])
Ejemplo n.º 2
0
 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":
             service_source = service_source_repo.get_service_source(self.tenant.tenant_id, self.service.service_id)
             if not service_source:
                 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(service_source.group_key,
                                                                              service_source.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"])
Ejemplo n.º 3
0
    def __save_import_info(self, tenant_name, scope, metadata):
        rainbond_apps = []
        metadata = json.loads(metadata)
        for app_template in metadata:
            app = rainbond_app_repo.get_rainbond_app_by_key_and_version(app_template["group_key"],
                                                                        app_template["group_version"])
            if app:
                continue
            image_base64_string = app_template.pop("image_base64_string", "")
            pic_url = ""
            if image_base64_string:
                pic_url = self.decode_image(image_base64_string, app_template.pop("suffix", "jpg"))

            rainbond_app = RainbondCenterApp(
                group_key=app_template["group_key"],
                group_name=app_template["group_name"],
                version=app_template['group_version'],
                share_user=0,
                record_id=0,
                share_team=tenant_name,
                source="import",
                scope=scope,
                describe=app_template.pop("describe", ""),
                pic=pic_url,
                app_template=json.dumps(app_template),
                is_complete=True,
                template_version=app_template.get("template_version", "")
            )
            rainbond_apps.append(rainbond_app)
        rainbond_app_repo.bulk_create_rainbond_apps(rainbond_apps)
Ejemplo n.º 4
0
 def down_market_group_list(self, tenant):
     app_group_list = market_api.get_service_group_list(tenant.tenant_id)
     rainbond_apps = []
     for app_group in app_group_list:
         rbc = rainbond_app_repo.get_rainbond_app_by_key_and_version(
             app_group["group_key"], app_group["group_version"])
         if rbc:
             rbc.describe = app_group["info"] if app_group[
                 "info"] else rbc.describe
             rbc.pic = app_group["pic"] if app_group["pic"] else rbc.pic
             rbc.update_time = current_time_str("%Y-%m-%d %H:%M:%S")
             rbc.template_version = app_group.get("template_version",
                                                  rbc.template_version)
             rbc.save()
         else:
             rainbond_app = RainbondCenterApp(
                 group_key=app_group["group_key"],
                 group_name=app_group["group_name"],
                 version=app_group['group_version'],
                 share_user=0,
                 record_id=0,
                 share_team="",
                 source="market",
                 scope="goodrain",
                 describe=app_group["info"],
                 pic=app_group["pic"],
                 app_template="",
                 template_version=app_group.get("template_version", ""))
             rainbond_apps.append(rainbond_app)
     rainbond_app_repo.bulk_create_rainbond_apps(rainbond_apps)
Ejemplo n.º 5
0
 def get(self, request, *args, **kwargs):
     """
     查询构建源信息
     ---
     """
     try:
         service_source = service_source_repo.get_service_source(
             team_id=self.service.tenant_id,
             service_id=self.service.service_id)
         bean = {
             "user_name": "",
             "password": "",
             "service_source": self.service.service_source,
             "image": self.service.image,
             "cmd": self.service.cmd,
             "code_from": self.service.code_from,
             "version": self.service.version,
             "docker_cmd": self.service.docker_cmd,
             "create_time": self.service.create_time,
             "git_url": self.service.git_url,
             "code_version": self.service.code_version,
             "server_type": self.service.server_type,
             "language": self.service.language,
         }
         if service_source:
             bean["user"] = service_source.user_name
             bean["password"] = service_source.password
         if self.service.service_source == 'market':
             if service_source:
                 # get from cloud
                 rain_app = None
                 if service_source.extend_info:
                     extend_info = json.loads(service_source.extend_info)
                     if extend_info and extend_info.get(
                             "install_from_cloud", False):
                         rain_app = market_app_service.get_app_from_cloud(
                             self.tenant, service_source.group_key,
                             service_source.version)
                         bean["install_from_cloud"] = True
                         bean["app_detail_url"] = rain_app.describe
                 if not rain_app:
                     rain_app = rainbond_app_repo.get_rainbond_app_by_key_and_version(
                         service_source.group_key, service_source.version)
                 if rain_app:
                     bean["rain_app_name"] = rain_app.group_name
                     bean["details"] = rain_app.details
                     logger.debug("app_version: {}".format(
                         rain_app.version))
                     bean["app_version"] = rain_app.version
                     bean["version"] = rain_app.version
                     bean["group_key"] = rain_app.group_key
         result = general_message(200, "success", "查询成功", bean=bean)
     except ServiceHandleException as e:
         raise e
     except Exception as e:
         logger.exception(e)
         result = error_message(e.message)
     return Response(result, status=result["code"])
Ejemplo n.º 6
0
 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"])
Ejemplo n.º 7
0
 def save_market_app_template(self, app_templates):
     v2_template = template_transform_service.v1_to_v2(app_templates)
     rainbond_app = rainbond_app_repo.get_rainbond_app_by_key_and_version(
         v2_template["group_key"], v2_template["group_version"])
     if rainbond_app:
         rainbond_app.share_user = v2_template["share_user"]
         rainbond_app.share_team = v2_template["share_team"]
         rainbond_app.pic = v2_template["pic"]
         rainbond_app.describe = v2_template["describe"]
         rainbond_app.app_template = json.dumps(v2_template)
         rainbond_app.is_complete = True
         rainbond_app.update_time = current_time_str("%Y-%m-%d %H:%M:%S")
         rainbond_app.save()
Ejemplo n.º 8
0
 def download_app_service_group_from_market(self, user, tenant, group_key,
                                            group_version):
     rainbond_app = rainbond_app_repo.get_rainbond_app_by_key_and_version(
         group_key, group_version)
     if rainbond_app and rainbond_app.is_complete:
         return rainbond_app
     try:
         rainbond_app = self.down_market_group_app_detail(
             user, tenant, group_key, group_version, "v2")
         return rainbond_app
     except Exception as e:
         logger.exception(e)
         logger.error(
             'download app_group[{0}-{1}] from market failed!'.format(
                 group_key, group_version))
         return None
Ejemplo n.º 9
0
    def __save_import_info(self, tenant_name, scope, metadata):
        rainbond_apps = []
        metadata = json.loads(metadata)
        key_and_version_list = []
        for app_template in metadata:
            app = rainbond_app_repo.get_rainbond_app_by_key_and_version(
                app_template["group_key"], app_template["group_version"])
            if app:
                # 覆盖原有应用数据
                app.share_team = tenant_name  # 分享团队名暂时为那个团队将应用导入进来的
                app.scope = scope
                app.describe = app_template.pop("describe", "")
                app.app_template = json.dumps(app_template)
                app.template_version = app_template.get("template_version", "")
                app.is_complete = True
                app.save()
                continue
            image_base64_string = app_template.pop("image_base64_string", "")
            pic_url = ""
            if image_base64_string:
                pic_url = self.decode_image(image_base64_string,
                                            app_template.pop("suffix", "jpg"))

            key_and_version = "{0}:{1}".format(app_template["group_key"],
                                               app_template['group_version'])
            if key_and_version in key_and_version_list:
                continue
            key_and_version_list.append(key_and_version)
            rainbond_app = RainbondCenterApp(
                group_key=app_template["group_key"],
                group_name=app_template["group_name"],
                version=app_template['group_version'],
                share_user=0,
                record_id=0,
                share_team=tenant_name,
                source="import",
                scope=scope,
                describe=app_template.pop("describe", ""),
                pic=pic_url,
                app_template=json.dumps(app_template),
                is_complete=True,
                template_version=app_template.get("template_version", ""))
            rainbond_apps.append(rainbond_app)
        rainbond_app_repo.bulk_create_rainbond_apps(rainbond_apps)
Ejemplo n.º 10
0
 def save_market_app_template(self, app_templates):
     template_version = app_templates["template_version"]
     is_v1 = bool(template_version == "v1")
     if is_v1:
         v2_template = template_transform_service.v1_to_v2(app_templates)
     else:
         v2_template = app_templates
     rainbond_app = rainbond_app_repo.get_rainbond_app_by_key_and_version(
         v2_template["group_key"], v2_template["group_version"])
     logger.debug("=========> {0}".format(json.dumps(v2_template)))
     if rainbond_app:
         if is_v1:
             rainbond_app.share_user = v2_template["share_user"]
             rainbond_app.share_team = v2_template["share_team"]
             rainbond_app.pic = v2_template["pic"]
             rainbond_app.describe = v2_template["describe"]
             rainbond_app.app_template = json.dumps(v2_template)
             rainbond_app.is_complete = True
             rainbond_app.update_time = current_time_str(
                 "%Y-%m-%d %H:%M:%S")
             rainbond_app.save()
         else:
             user_name = v2_template.get("publish_user", None)
             user_id = 0
             if user_name:
                 try:
                     user = user_repo.get_user_by_username(user_name)
                     user_id = user.user_id
                 except Exception as e:
                     logger.exception(e)
             rainbond_app.share_user = user_id
             rainbond_app.share_team = v2_template.get("publish_team", "")
             rainbond_app.pic = v2_template.get("pic", rainbond_app.pic)
             rainbond_app.describe = v2_template.get(
                 "update_note", rainbond_app.describe)
             rainbond_app.app_template = v2_template["template_content"]
             rainbond_app.is_complete = True
             rainbond_app.update_time = current_time_str(
                 "%Y-%m-%d %H:%M:%S")
             rainbond_app.save()
Ejemplo n.º 11
0
    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":
                service_source = service_source_repo.get_service_source(
                    self.tenant.tenant_id, self.service.service_id)
                if not service_source:
                    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(
                    service_source.group_key, service_source.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 self.service.deploy_version and int(
                                    app["deploy_version"]) > int(
                                        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:
                                    if "service_share_uuid" in app:
                                        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 "service_share_uuid" not in app and "service_key" in app:
                                        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)

                        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"])
Ejemplo n.º 12
0
    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"])
Ejemplo n.º 13
0
    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
Ejemplo n.º 14
0
 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"])
Ejemplo n.º 15
0
 def get_rain_bond_app_by_key_and_version(self, group_key, group_version):
     app = rainbond_app_repo.get_rainbond_app_by_key_and_version(
         group_key, group_version)
     if not app:
         return 404, None
     return 200, app
Ejemplo n.º 16
0
 def is_group_exist(self, group_key, group_version):
     if rainbond_app_repo.get_rainbond_app_by_key_and_version(
             group_key, group_version):
         return True
     return False