Пример #1
0
    def copy_envs(self, service_info, current_service):
        s = current_service
        baseService = BaseTenantService()
        envs = AppServiceEnv.objects.filter(service_key=service_info.service_key, app_version=service_info.version)
        outer_ports = AppServicePort.objects.filter(service_key=service_info.service_key,
                                                    app_version=service_info.version,
                                                    is_outer_service=True,
                                                    protocol='http')
        for env in envs:
            if env.attr_name == 'SITE_URL':
                if self.region_name in RegionInfo.valid_regions():
                    port = RegionInfo.region_port(self.region_name)
                    domain = RegionInfo.region_domain(self.region_name)
                    env.options="direct_copy"
                    if len(outer_ports)>0:
                        env.attr_value = 'http://{}.{}.{}{}:{}'.format(outer_ports[0].container_port, current_service.serviceAlias,self.tenant_name, domain, port)
                    logger.debug("SITE_URL = {} options = {}".format(env.attr_value, env.options))
            elif env.attr_name == "TRUSTED_DOMAIN":
                if self.region_name in RegionInfo.valid_regions():
                    port = RegionInfo.region_port(self.region_name)
                    domain = RegionInfo.region_domain(self.region_name)
                    env.options = 'direct_copy'
                    if len(outer_ports) > 0:
                        env.attr_value = '{}.{}.{}{}:{}'.format(outer_ports[0].container_port, current_service.serviceAlias, self.tenant_name, domain, port)
                    logger.debug("TRUSTED_DOMAIN = {} options = {}".format(env.attr_value, env.options))

            baseService.saveServiceEnvVar(s.tenant_id, s.service_id, env.container_port, env.name,
                                          env.attr_name, env.attr_value, env.is_change, env.scope)
Пример #2
0
 def downloadImage(self, base_info):
     try:
         download_task = {}
         if base_info.is_slug():
             download_task = {
                 "action": "download_and_deploy",
                 "app_key": base_info.service_key,
                 "app_version": base_info.version,
                 "namespace": base_info.namespace,
                 "dep_sids": json.dumps([])
             }
             for region in RegionInfo.valid_regions():
                 logger.info(region)
                 # TODO v2 api修改
                 regionClient.send_task(region, 'app_slug',
                                        json.dumps(download_task))
         else:
             download_task = {
                 "action": "download_and_deploy",
                 "image": base_info.image,
                 "namespace": base_info.namespace,
                 "dep_sids": json.dumps([])
             }
             for region in RegionInfo.valid_regions():
                 # TODO v2 api修改
                 regionClient.send_task(region, 'app_image',
                                        json.dumps(download_task))
     except Exception as e:
         logger.exception(e)
Пример #3
0
    def __init__(self, request, *args, **kwargs):
        self.tenantName = kwargs.get('tenantName', None)
        self.serviceAlias = kwargs.get('serviceAlias', None)

        if self.tenantName is not None:
            try:
                self.tenant = Tenants.objects.get(tenant_name=self.tenantName)
            except Tenants.DoesNotExist:
                logger.error("Tenant {0} is not exists".format(
                    self.tenantName))
                raise http.Http404

            if self.serviceAlias is not None:
                try:
                    self.service = TenantServiceInfo.objects.get(
                        tenant_id=self.tenant.tenant_id,
                        service_alias=self.serviceAlias)
                    if self.service.service_region not in RegionInfo.valid_regions(
                    ):
                        raise PermissionDenied
                except TenantServiceInfo.DoesNotExist:
                    logger.debug(
                        "Tenant {0} ServiceAlias {1} is not exists".format(
                            self.tenantName, self.serviceAlias))
                    raise http.Http404

        BaseView.__init__(self, request, *args, **kwargs)
 def set_tenant_default_env(self, envs, outer_ports):
     for env in envs:
         if env.attr_name == 'SITE_URL':
             if self.cookie_region in RegionInfo.valid_regions():
                 port = RegionInfo.region_port(self.cookie_region)
                 domain = RegionInfo.region_domain(self.cookie_region)
                 env.options = 'direct_copy'
                 if len(outer_ports) > 0:
                     env.attr_value = 'http://{}.{}.{}{}:{}'.format(outer_ports[0].container_port, self.serviceAlias, self.tenantName, domain, port)
                 logger.debug("SITE_URL = {} options = {}".format(env.attr_value, env.options))
         elif env.attr_name == 'TRUSTED_DOMAIN':
             if self.cookie_region in RegionInfo.valid_regions():
                 port = RegionInfo.region_port(self.cookie_region)
                 domain = RegionInfo.region_domain(self.cookie_region)
                 env.options = 'direct_copy'
                 if len(outer_ports) > 0:
                     env.attr_value = '{}.{}.{}{}:{}'.format(outer_ports[0].container_port, self.serviceAlias, self.tenantName, domain, port)
                 logger.debug("TRUSTED_DOMAIN = {} options = {}".format(env.attr_value, env.options))
Пример #5
0
 def calculate_real_used_resource(self, tenant):
     totalMemory = 0
     tenant_region_list = TenantRegionInfo.objects.filter(
         tenant_id=tenant.tenant_id, is_active=True, is_init=True)
     for tenant_region in tenant_region_list:
         logger.debug(tenant_region.region_name)
         if tenant_region.region_name in RegionInfo.valid_regions():
             res = region_api.get_tenant_resources(
                 tenant_region.region_name, tenant.tenant_name,
                 tenant.enterprise_id)
             bean = res["bean"]
             memory = int(bean["memory"])
             totalMemory += memory
     return totalMemory
Пример #6
0
 def set_direct_copy_options(self, envs, service_id, service_key, version):
     outer_ports = AppServicePort.objects.filter(service_key=service_key,
                                                 app_version=version,
                                                 is_outer_service=True,
                                                 protocol='http')
     service_alias = "gr" + service_id[-6:]
     for env in envs:
         if env.attr_name == 'SITE_URL' or env.attr_name == 'TRUSTED_DOMAIN':
             if self.cookie_region in RegionInfo.valid_regions():
                 env.options = 'direct_copy'
                 if len(outer_ports) > 0:
                     port = RegionInfo.region_port(self.response_region)
                     domain = RegionInfo.region_domain(self.response_region)
                     if env.attr_name == 'SITE_URL':
                         env.attr_value = 'http://{}.{}.{}{}:{}'.format(outer_ports[0].container_port, service_alias,
                                                                        self.tenantName, domain, port)
                     else:
                         env.attr_value = '{}.{}.{}{}:{}'.format(outer_ports[0].container_port, service_alias,
                                                                 self.tenantName, domain, port)
Пример #7
0
 def calculate_real_used_resource(self, tenant):
     totalMemory = 0
     totalDisk = 0
     tenant_region_list = TenantRegionInfo.objects.filter(
         tenant_id=tenant.tenant_id, is_active=True, is_init=True)
     for tenant_region in tenant_region_list:
         logger.debug(tenant_region.region_name)
         if tenant_region.region_name in RegionInfo.valid_regions():
             data = {"tenant_name": [tenant.tenant_name]}
             res = region_api.get_region_tenants_resources(
                 tenant_region.region_name, data, tenant.enterprise_id)
             d_list = res["list"]
             memory = 0
             disk = 0
             if d_list:
                 resource = d_list[0]
                 memory = int(resource["memory"])
                 disk = int(resource["disk"])
             totalMemory += memory
             totalDisk += disk
     return totalMemory, totalDisk