def bind_domain(self, tenant, user, service, domain_name, container_port, protocol, certificate_id, domain_type, rule_extensions): code, msg = self.__check_domain_name(tenant.tenant_name, domain_name, domain_type, certificate_id) if code != 200: return code, msg certificate_info = None http_rule_id = make_uuid(domain_name) if certificate_id: certificate_info = domain_repo.get_certificate_by_pk( int(certificate_id)) data = dict() data["domain"] = domain_name data["service_id"] = service.service_id data["tenant_id"] = tenant.tenant_id data["container_port"] = int(container_port) data["protocol"] = protocol data["http_rule_id"] = http_rule_id # 证书信息 data["certificate"] = "" data["private_key"] = "" data["certificate_name"] = "" if rule_extensions: data["rule_extensions"] = rule_extensions if certificate_info: data["certificate"] = base64.b64decode( certificate_info.certificate) data["private_key"] = certificate_info.private_key data["certificate_name"] = certificate_info.alias data["certificate_id"] = certificate_info.certificate_id region_api.bind_http_domain(service.service_region, tenant.tenant_name, data) domain_info = dict() region = region_repo.get_region_by_region_name(service.service_region) domain_info["service_id"] = service.service_id domain_info["service_name"] = service.service_alias domain_info["domain_name"] = domain_name domain_info["domain_type"] = domain_type domain_info["service_alias"] = service.service_cname domain_info["create_time"] = datetime.datetime.now().strftime( '%Y-%m-%d %H:%M:%S') domain_info["container_port"] = int(container_port) domain_info["protocol"] = "http" if certificate_id: domain_info["protocol"] = "https" if rule_extensions: domain_info["rule_extensions"] = rule_extensions domain_info[ "certificate_id"] = certificate_info.ID if certificate_info else 0 domain_info["http_rule_id"] = http_rule_id domain_info["type"] = 1 domain_info["service_alias"] = service.service_cname domain_info["tenant_id"] = tenant.tenant_id domain_info["region_id"] = region.region_id domain_repo.add_service_domain(**domain_info) return 200, u"success"
def bind_domain(self, tenant, user, service, domain_name, container_port, protocol, certificate_id, domain_type): code, msg = self.__check_domain_name(tenant.tenant_name, domain_name, domain_type) if code != 200: return code, msg certificate_info = None if protocol != self.HTTP: if not certificate_id: return 400, u"证书不能为空" certificate_info = domain_repo.get_certificate_by_pk(int(certificate_id)) data = {} data["uuid"] = make_uuid(domain_name) data["domain_name"] = domain_name data["service_alias"] = service.service_alias data["tenant_id"] = tenant.tenant_id data["tenant_name"] = tenant.tenant_name data["service_port"] = int(container_port) data["protocol"] = protocol data["add_time"] = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') data["add_user"] = user.nick_name data["enterprise_id"] = tenant.enterprise_id # 证书信息 data["certificate"] = "" data["private_key"] = "" data["certificate_name"] = "" if certificate_info: data["certificate"] = certificate_info.certificate data["private_key"] = certificate_info.private_key data["certificate_name"] = certificate_info.alias region_api.bindDomain(service.service_region, tenant.tenant_name, service.service_alias, data) domain_info = dict() domain_info["service_id"] = service.service_id domain_info["service_name"] = service.service_alias domain_info["domain_name"] = domain_name domain_info["domain_type"] = domain_type domain_info["create_time"] = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') domain_info["container_port"] = int(container_port) domain_info["protocol"] = protocol domain_info["certificate_id"] = certificate_info.ID if certificate_info else 0 domain_repo.add_service_domain(**domain_info) return 200, u"success"
def bind_httpdomain(self, tenant, user, service, httpdomain, return_model=False): domain_name = httpdomain["domain_name"] certificate_id = httpdomain["certificate_id"] rule_extensions = httpdomain.get("rule_extensions", []) domain_path = httpdomain.get("domain_path", None) domain_cookie = httpdomain.get("domain_cookie", None) domain_heander = httpdomain.get("domain_heander", None) protocol = httpdomain.get("protocol", None) domain_type = httpdomain["domain_type"] auto_ssl = httpdomain["auto_ssl"] auto_ssl_config = httpdomain["auto_ssl_config"] region = region_repo.get_region_by_region_name(service.service_region) # 校验域名格式 self.__check_domain_name(tenant.tenant_id, region.region_id, domain_name, certificate_id) http_rule_id = make_uuid(domain_name) domain_info = dict() certificate_info = None if certificate_id: certificate_info = domain_repo.get_certificate_by_pk( int(certificate_id)) data = dict() data["uuid"] = make_uuid(domain_name) data["domain"] = domain_name data["service_id"] = service.service_id data["tenant_id"] = tenant.tenant_id data["tenant_name"] = tenant.tenant_name data["protocol"] = protocol data["container_port"] = int(httpdomain["container_port"]) data["add_time"] = self.get_time_now() data["add_user"] = user.nick_name if user else "" data["enterprise_id"] = tenant.enterprise_id data["http_rule_id"] = http_rule_id data["path"] = domain_path data["cookie"] = domain_cookie data["header"] = domain_heander data["weight"] = int(httpdomain.get("the_weight", 100)) 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.bind_http_domain(service.service_region, tenant.tenant_name, data) except region_api.CallApiError as e: if e.status != 404: raise e if domain_path and domain_path != "/" or domain_cookie or domain_heander: domain_info["is_senior"] = True if protocol: domain_info["protocol"] = protocol else: domain_info["protocol"] = "http" if certificate_id: domain_info["protocol"] = "https" domain_info["http_rule_id"] = http_rule_id domain_info["service_id"] = service.service_id domain_info["service_name"] = service.service_alias domain_info["domain_name"] = domain_name domain_info["domain_type"] = domain_type domain_info["service_alias"] = service.service_cname domain_info["create_time"] = self.get_time_now() domain_info["container_port"] = int(httpdomain["container_port"]) domain_info[ "certificate_id"] = certificate_info.ID if certificate_info else 0 domain_info["domain_path"] = domain_path if domain_path else '/' domain_info["domain_cookie"] = domain_cookie if domain_cookie else "" domain_info[ "domain_heander"] = domain_heander if domain_heander else "" domain_info["the_weight"] = int(httpdomain.get("the_weight", 100)) domain_info["tenant_id"] = tenant.tenant_id domain_info["auto_ssl"] = auto_ssl domain_info["auto_ssl_config"] = auto_ssl_config rule_extensions_str = "" if rule_extensions: # 拼接字符串,存入数据库 for rule in rule_extensions: last_index = len(rule_extensions) - 1 if last_index == rule_extensions.index(rule): rule_extensions_str += rule["key"] + ":" + rule["value"] continue rule_extensions_str += rule["key"] + ":" + rule["value"] + "," domain_info["rule_extensions"] = rule_extensions_str domain_info["region_id"] = region.region_id region = region_repo.get_region_by_region_name(service.service_region) # 判断类型(默认or自定义) if domain_name != "{0}.{1}.{2}.{3}".format( httpdomain["container_port"], service.service_alias, tenant.tenant_name, region.httpdomain): domain_info["type"] = 1 # 高级路由 model = domain_repo.add_service_domain(**domain_info) if return_model: return model domain_info.update({"rule_extensions": rule_extensions}) if certificate_info: domain_info.update({"certificate_name": certificate_info.alias}) return domain_info
def update_httpdomain(self, tenant, user, service, domain_name, container_port, certificate_id, domain_type, domain_path, domain_cookie, domain_heander, http_rule_id, the_weight, rule_extensions): # 校验域名格式 code, msg = self.__check_domain_name(tenant.tenant_name, domain_name, domain_type, certificate_id) domain_info = dict() if code != 200: return code, msg, domain_info certificate_info = None if certificate_id: certificate_info = domain_repo.get_certificate_by_pk( int(certificate_id)) data = dict() data["domain"] = domain_name data["service_id"] = service.service_id data["tenant_id"] = tenant.tenant_id data["tenant_name"] = tenant.tenant_name data["container_port"] = int(container_port) data["enterprise_id"] = tenant.enterprise_id data["http_rule_id"] = http_rule_id data["path"] = domain_path if domain_path else None data["cookie"] = domain_cookie if domain_cookie else None data["header"] = domain_heander if domain_heander else None data["weight"] = int(the_weight) 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) 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 service_domain = domain_repo.get_service_domain_by_http_rule_id( http_rule_id) service_domain.delete() region = region_repo.get_region_by_region_name(service.service_region) # 高级路由 if domain_path and domain_path != "/" or domain_cookie or domain_heander: domain_info["is_senior"] = True domain_info["protocol"] = "http" if certificate_id: domain_info["protocol"] = "https" domain_info["http_rule_id"] = http_rule_id domain_info["service_id"] = service.service_id domain_info["service_name"] = service.service_alias domain_info["domain_name"] = domain_name domain_info["domain_type"] = domain_type domain_info["service_alias"] = service.service_cname domain_info["create_time"] = datetime.datetime.now().strftime( '%Y-%m-%d %H:%M:%S') domain_info["container_port"] = int(container_port) domain_info[ "certificate_id"] = certificate_info.ID if certificate_info else 0 domain_info["domain_path"] = domain_path if domain_path else '/' domain_info["domain_cookie"] = domain_cookie if domain_cookie else "" domain_info[ "domain_heander"] = domain_heander if domain_heander else "" domain_info["the_weight"] = the_weight domain_info["tenant_id"] = tenant.tenant_id rule_extensions_str = "" if rule_extensions: # 拼接字符串,存入数据库 for rule in rule_extensions: last_index = len(rule_extensions) - 1 if last_index == rule_extensions.index(rule): rule_extensions_str += rule["key"] + ":" + rule["value"] continue rule_extensions_str += rule["key"] + ":" + rule["value"] + "," domain_info["rule_extensions"] = rule_extensions_str domain_info["region_id"] = region.region_id region = region_repo.get_region_by_region_name(service.service_region) # 判断类型(默认or自定义) if domain_name != str(container_port) + "." + str( service.service_alias) + "." + str( tenant.tenant_name) + "." + str(region.httpdomain): domain_info["type"] = 1 domain_repo.add_service_domain(**domain_info) domain_info.update({"rule_extensions": rule_extensions}) if certificate_info: domain_info.update({"certificate_name": certificate_info.alias}) return 200, u"success", domain_info