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)
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
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)
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(), ]