Exemple #1
0
 def __save_service_domain(self, service, service_domains):
     service_domain_list = []
     for domain in service_domains:
         domain.pop("ID")
         new_service_domain = ServiceDomain(**domain)
         new_service_domain.service_id = service.service_id
         service_domain_list.append(new_service_domain)
     if service_domain_list:
         ServiceDomain.objects.bulk_create(service_domain_list)
Exemple #2
0
    def _template_to_service_domain(self, component: TenantServiceInfo, ports: [TenantServicesPort]):
        new_ports = {port.container_port: port for port in ports}
        ingress_http_routes = self.app_template.list_ingress_http_routes_by_component_key(component.service_key)

        service_domains = []
        configs = []
        for ingress in ingress_http_routes:
            port = new_ports.get(ingress["port"])
            if not port:
                logger.warning("component id: {}; port not found for ingress".format(component.component_id))
                continue

            service_domain = ServiceDomain(
                http_rule_id=make_uuid(),
                region_id=self.region.region_id,
                tenant_id=self.tenant.tenant_id,
                service_id=component.component_id,
                service_name=component.service_alias,
                create_time=datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
                container_port=ingress["port"],
                protocol="http",
                domain_type=DomainType.WWW,
                service_alias=component.service_cname,
                domain_path=ingress["location"],
                domain_cookie=self._domain_cookie_or_header(ingress["cookies"]),
                domain_heander=self._domain_cookie_or_header(ingress["headers"]),
                type=0 if ingress["default_domain"] else 1,
                the_weight=100,
                is_outer_service=port.is_outer_service,
                auto_ssl=False,
                rule_extensions=self._ingress_load_balancing(ingress["load_balancing"]),
            )
            if service_domain.type == 0:
                service_domain.domain_name = self._create_default_domain(component.service_alias, port.container_port)
            else:
                service_domain.domain_name = make_uuid()[:6] + self._create_default_domain(
                    component.service_alias, port.container_port)
            service_domain.is_senior = len(service_domain.domain_cookie) > 0 or len(service_domain.domain_heander) > 0
            service_domains.append(service_domain)

            # config
            config = self._ingress_config(service_domain.http_rule_id, ingress)
            configs.append(config)

        self._ensure_default_http_rule(component, service_domains, ports)

        return service_domains, configs
Exemple #3
0
 def _create_default_gateway_rule(self, component: TenantServiceInfo, port: TenantServicesPort):
     domain_name = self._create_default_domain(component.service_alias, port.container_port)
     return ServiceDomain(
         service_id=component.service_id,
         service_name=component.service_name,
         domain_name=domain_name,
         create_time=datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
         container_port=port.container_port,
         protocol="http",
         http_rule_id=make_uuid(domain_name),
         tenant_id=self.tenant.tenant_id,
         service_alias=component.service_alias,
         region_id=self.region.region_id)
 def _create_default_gateway_rule(self, component: TenantServiceInfo, port: TenantServicesPort):
     # only create gateway rule for http port now
     if not port.is_outer_service or port.protocol != "http":
         return None
     domain_name = str(port.container_port) + "." + str(component.service_alias) + "." + str(
         self.tenant.tenant_name) + "." + str(self.region.httpdomain)
     return ServiceDomain(
         service_id=component.service_id,
         service_name=component.service_name,
         domain_name=domain_name,
         create_time=datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
         container_port=port.container_port,
         protocol="http",
         http_rule_id=make_uuid(domain_name),
         tenant_id=self.tenant.tenant_id,
         service_alias=component.service_alias,
         region_id=self.region.region_id)
Exemple #5
0
    def update_httpdomain(self,
                          tenant,
                          service,
                          http_rule_id,
                          update_data,
                          re_model=False):
        service_domain = domain_repo.get_service_domain_by_http_rule_id(
            http_rule_id)
        if not service_domain:
            raise ServiceHandleException(msg="no found", status_code=404)
        domain_info = service_domain.to_dict()
        domain_info.update(update_data)

        self.__check_domain_name(tenant.tenant_id,
                                 service_domain.region_id,
                                 domain_info["domain_name"],
                                 certificate_id=domain_info["certificate_id"])

        certificate_info = None
        if domain_info["certificate_id"]:
            certificate_info = domain_repo.get_certificate_by_pk(
                int(domain_info["certificate_id"]))

        data = dict()
        data["domain"] = domain_info["domain_name"]
        data["service_id"] = service.service_id
        data["tenant_id"] = tenant.tenant_id
        data["tenant_name"] = tenant.tenant_name
        data["container_port"] = int(domain_info["container_port"])
        data["enterprise_id"] = tenant.enterprise_id
        data["http_rule_id"] = http_rule_id
        data["path"] = domain_info["domain_path"] if domain_info[
            "domain_path"] else None
        data["cookie"] = domain_info["domain_cookie"] if domain_info[
            "domain_cookie"] else None
        data["header"] = domain_info["domain_heander"] if domain_info[
            "domain_heander"] else None
        data["weight"] = int(domain_info["the_weight"])
        if "rule_extensions" in list(update_data.keys()):
            if domain_info["rule_extensions"]:
                data["rule_extensions"] = domain_info["rule_extensions"]
        else:
            try:
                rule_extensions = eval(domain_info["rule_extensions"])
            except Exception:
                rule_extensions = []
            if rule_extensions:
                data["rule_extensions"] = rule_extensions

        # 证书信息
        data["certificate"] = ""
        data["private_key"] = ""
        data["certificate_name"] = ""
        data["certificate_id"] = ""
        if certificate_info:
            data["certificate"] = base64.b64decode(
                certificate_info.certificate).decode()
            data["private_key"] = certificate_info.private_key
            data["certificate_name"] = certificate_info.alias
            data["certificate_id"] = certificate_info.certificate_id
        try:
            # 给数据中心传送数据更新域名
            region_api.update_http_domain(service.service_region,
                                          tenant.tenant_name, data)
        except region_api.CallApiError as e:
            if e.status != 404:
                raise e
        if "rule_extensions" in list(update_data.keys()):
            rule_extensions_str = ""
            # 拼接字符串,存入数据库
            for rule in update_data["rule_extensions"]:
                last_index = len(update_data["rule_extensions"]) - 1
                if last_index == update_data["rule_extensions"].index(rule):
                    rule_extensions_str += rule["key"] + ":" + rule["value"]
                    continue
                rule_extensions_str += rule["key"] + ":" + rule["value"] + ","
        else:
            rule_extensions_str = domain_info["rule_extensions"]
        domain_info["rule_extensions"] = rule_extensions_str
        if domain_info["domain_path"] and domain_info["domain_path"] != "/" or \
                domain_info["domain_cookie"] or domain_info["domain_heander"]:
            domain_info["is_senior"] = True
        domain_info["protocol"] = "http"
        if domain_info["certificate_id"]:
            domain_info["protocol"] = "https"
        domain_info["certificate_id"] = domain_info[
            "certificate_id"] if domain_info["certificate_id"] else 0
        domain_info["domain_path"] = domain_info["domain_path"] if domain_info[
            "domain_path"] else '/'
        domain_info["domain_cookie"] = domain_info[
            "domain_cookie"] if domain_info["domain_cookie"] else ""
        domain_info["domain_heander"] = domain_info[
            "domain_heander"] if domain_info["domain_heander"] else ""
        domain_info["container_port"] = int(domain_info["container_port"])
        domain_info["service_id"] = service.service_id
        domain_info["service_name"] = service.service_alias
        model_data = ServiceDomain(**domain_info)
        model_data.save()
        if re_model:
            return model_data
        return domain_info
 def init(self):
     self.sources = [
         Tenants(),
         TenantRegionInfo(),
         TenantRegionResource(),
         ServiceInfo(),
         TenantServiceInfo(),
         TenantServiceInfoDelete(),
         TenantServiceLog(),
         TenantServiceRelation(),
         TenantServiceEnv(),
         TenantServiceAuth(),
         TenantServiceExtendMethod(),
         ServiceDomain(),
         ServiceDomainCertificate(),
         PermRelService(),
         PermRelTenant(),
         PhoneCode(),
         TenantServiceL7Info(),
         TenantServiceEnvVar(),
         TenantServicesPort(),
         TenantServiceMountRelation(),
         TenantServiceVolume(),
         TenantServiceConfigurationFile(),
         ServiceGroup(),
         ServiceGroupRelation(),
         ImageServiceRelation(),
         ComposeServiceRelation(),
         ServiceRule(),
         ServiceRuleHistory(),
         ServiceCreateStep(),
         ServiceProbe(),
         ConsoleConfig(),
         TenantEnterprise(),
         TenantEnterpriseToken(),
         TenantServiceGroup(),
         ServiceTcpDomain(),
         ThirdPartyServiceEndpoints(),
         ServiceWebhooks(),
         GatewayCustomConfiguration(),
         ConsoleSysConfig(),
         RainbondCenterApp(),
         RainbondCenterAppInherit(),
         RainbondCenterPlugin(),
         ServiceShareRecord(),
         EnterpriseUserPerm(),
         TenantUserRole(),
         TenantUserPermission(),
         TenantUserRolePermission(),
         PermGroup(),
         ServiceRelPerms(),
         AppExportRecord(),
         UserMessage(),
         AppImportRecord(),
         GroupAppBackupRecord(),
         GroupAppMigrateRecord(),
         GroupAppBackupImportRecord(),
         Applicants(),
         DeployRelation(),
         ServiceBuildSource(),
         TenantServiceBackup(),
         AppUpgradeRecord(),
         ServiceUpgradeRecord(),
         RegionConfig(),
         CloundBangImages(),
         Announcement(),
     ]