alibabacloudstack/connectivity/endpoint.go (311 lines of code) (raw):

package connectivity import ( "bytes" "text/template" ) // ServiceCode Load endpoints from endpoints.xml or environment variables to meet specified application scenario, like private cloud. type ServiceCode string const ( DcdnCode = ServiceCode("DCDN") MseCode = ServiceCode("MSE") ActiontrailCode = ServiceCode("ACTIONTRAIL") OosCode = ServiceCode("OOS") EcsCode = ServiceCode("ECS") ASCMCode = ServiceCode("ASCM") NasCode = ServiceCode("NAS") EciCode = ServiceCode("ECI") DdoscooCode = ServiceCode("DDOSCOO") AlidnsCode = ServiceCode("ALIDNS") ResourcemanagerCode = ServiceCode("RESOURCEMANAGER") WafOpenapiCode = ServiceCode("WAFOPENAPI") DmsEnterpriseCode = ServiceCode("DMSENTERPRISE") DnsCode = ServiceCode("ALIDNS") KmsCode = ServiceCode("KMS") CbnCode = ServiceCode("CBN") ESSCode = ServiceCode("ESS") RAMCode = ServiceCode("RAM") VPCCode = ServiceCode("VPC") SLBCode = ServiceCode("SLB") RDSCode = ServiceCode("RDS") OSSCode = ServiceCode("OSS") ONSCode = ServiceCode("ONS") CONTAINCode = ServiceCode("CS") CRCode = ServiceCode("CR") CREECode = ServiceCode("CR_EE") CDNCode = ServiceCode("CDN") CMSCode = ServiceCode("CMS") OTSCode = ServiceCode("OTS") DNSCode = ServiceCode("CLOUDDNS") PVTZCode = ServiceCode("PVTZ") LOGCode = ServiceCode("LOG") FCCode = ServiceCode("FC") DDSCode = ServiceCode("DDS") GPDBCode = ServiceCode("GPDB") CENCode = ServiceCode("CEN") KVSTORECode = ServiceCode("R_KVSTORE") // 不允许出现-,schema不接受,以_代替 POLARDBCode = ServiceCode("POLARDB") MNSCode = ServiceCode("MNS") CLOUDAPICode = ServiceCode("CLOUDAPI") DRDSCode = ServiceCode("DRDS") LOCATIONCode = ServiceCode("LOCATION") ELASTICSEARCHCode = ServiceCode("ELASTICSEARCH") DDOSCOOCode = ServiceCode("DDOSCOO") DDOSBGPCode = ServiceCode("DDOSBGP") SAGCode = ServiceCode("SAG") EMRCode = ServiceCode("EMR") CasCode = ServiceCode("CAS") YUNDUNDBAUDITCode = ServiceCode("YUNDUNDBAUDIT") MARKETCode = ServiceCode("MARKET") HBASECode = ServiceCode("HBASE") ADBCode = ServiceCode("ADB") EDASCode = ServiceCode("EDAS") CassandraCode = ServiceCode("CASSANDRA") OtsCode = ServiceCode("OTS") DatahubCode = ServiceCode("DATAHUB") STSCode = ServiceCode("STS") //undefined code 先添加 GDBCode = ServiceCode("GDB") ARMSCode = ServiceCode("ARMS") CSBCode = ServiceCode("CSB") DBSCode = ServiceCode("DBS") DTSCode = ServiceCode("DTS") SLSCode = ServiceCode("SLS") HitsdbCode = ServiceCode("HITSDB") RosCode = ServiceCode("ROS") QuickbiCode = ServiceCode("QUICKBI") DataworkspublicCode = ServiceCode("DATAWORKSPUBLIC") OneRouterCode = ServiceCode("ONEROUTER") //自建网关虚假Code OssDataCode = ServiceCode("OSSDATA") SlSDataCode = ServiceCode("SLSDATA") ALIKAFKACode = ServiceCode("ALIKAFKADATA") BssDataCode = ServiceCode("BSSDATA") // ASAPI ASAPICode = ServiceCode("ASAPI") ) type Endpoints struct { Endpoint []Endpoint `xml:"Endpoint"` } type RegionIds struct { RegionId string `xml:"RegionId"` } type Products struct { Product []Product `xml:"Product"` } type Product struct { ProductName string `xml:"ProductName"` DomainName string `xml:"DomainName"` } type Endpoint struct { Name string `xml:"name,attr"` RegionIds RegionIds `xml:"RegionIds"` Products Products `xml:"Products"` } var serviceCodeMapping = map[string]string{ "cloudapi": "apigateway", } type PopEndpoint struct { CenterEndpoint string RegionEndpoint string } var PopEndpoints = map[ServiceCode]PopEndpoint{ //vpc endpoint VPCCode: PopEndpoint{ "vpc-internal.{{.domain}}", "vpc-internal.{{.region}}.{{.domain}}", }, //slb endpoint SLBCode: PopEndpoint{ "slb-vpc.{{.domain}}", "slb-vpc.{{.region}}.{{.domain}}", }, //gdb endpoint GDBCode: PopEndpoint{ "gdb.{{.domain}}", "gdb.{{.region}}.{{.domain}}", }, //gpdb endpoint GPDBCode: PopEndpoint{ "gpdb.{{.domain}}", "gpdb.{{.region}}.{{.domain}}", }, //adb endpoint ADBCode: PopEndpoint{ "adb.{{.domain}}", "adb.{{.region}}.{{.domain}}", }, //apigateway endpoint //中心化部署 CLOUDAPICode: PopEndpoint{ "apigateway.{{.region}}.{{.domain}}", "apigateway.{{.region}}.{{.domain}}", }, //arms endpoint ARMSCode: PopEndpoint{ "arms-api.console.{{.region}}.{{.domain}}", "arms-api.console.{{.region}}.{{.domain}}", }, //ascm endpoint ASCMCode: PopEndpoint{ "ascm.{{.domain}}", "ascm.{{.region}}.{{.domain}}", }, //cloudfw endpoint WafOpenapiCode: PopEndpoint{ "cloudfw.{{.domain}}", "cloudfw.{{.region}}.{{.domain}}", }, //cr endpoint CRCode: PopEndpoint{ "cr-biz.{{.region}}.{{.domain}}", "cr-biz.{{.region}}.{{.domain}}", }, //cr endpoint CREECode: PopEndpoint{ "cr-ee-biz.{{.region}}.{{.domain}}", "cr-ee-biz.{{.region}}.{{.domain}}", }, //csb endpoint CSBCode: PopEndpoint{ "csb.{{.domain}}", "csb.{{.region}}.{{.domain}}", }, //datahub endpoint DatahubCode: PopEndpoint{ "datahub.{{.region}}.api-pop.{{.domain}}", "datahub.{{.region}}.api-pop.{{.domain}}", }, //dbs endpoint DBSCode: PopEndpoint{ "dbs.{{.domain}}", "dbs.{{.region}}.{{.domain}}", }, //dns endpoint DNSCode: PopEndpoint{ "dns-control.pop.{{.domain}}", "dns-control.pop.{{.region}}.{{.domain}}", }, //drds endpoint DRDSCode: PopEndpoint{ "drds.{{.domain}}", "drds.{{.region}}.{{.domain}}", }, //dts endpoint DTSCode: PopEndpoint{ "dts.{{.domain}}", "dts.{{.region}}.{{.domain}}", }, //edas-api.console endpoint EDASCode: PopEndpoint{ "edas-api.console.{{.region}}.{{.domain}}", "edas-api.console.{{.region}}.{{.domain}}", }, //ELASTICSEARCHCode endpoint ELASTICSEARCHCode: PopEndpoint{ "elasticsearch.k8s.{{.region}}.{{.domain}}", "elasticsearch.k8s.{{.region}}.{{.domain}}", }, //Ess endpoint ESSCode: PopEndpoint{ "ess.{{.domain}}", "ess.{{.region}}.{{.domain}}", }, //Ecs endpoint EcsCode: PopEndpoint{ "ecs-internal.{{.domain}}", "ecs-internal.{{.region}}.{{.domain}}", }, //Sts endpoint STSCode: PopEndpoint{ "sts.{{.domain}}", "sts.{{.region}}.{{.domain}}", }, POLARDBCode: PopEndpoint{ "polardb-vpc.{{.domain}}", "polardb-vpc.{{.region}}.{{.domain}}", }, SlSDataCode: PopEndpoint{ "data.{{.region}}.sls-pub.{{.domain}}", "data.{{.region}}.sls-pub.{{.domain}}", }, DmsEnterpriseCode: PopEndpoint{"", ""}, OSSCode: PopEndpoint{ "occ.{{.domain}}", "occ.{{.region}}.{{.domain}}", }, DataworkspublicCode: PopEndpoint{ "dataworks-public.{{.domain}}", "dataworks-public.{{.region}}.{{.domain}}", }, DDSCode: PopEndpoint{ "mongodb.{{.domain}}", "mongodb.{{.region}}.{{.domain}}", }, RAMCode: PopEndpoint{ "ram.{{.domain}}", "ram.{{.domain}}", }, CMSCode: PopEndpoint{ "metrics.open.{{.domain}}", "metrics.open.{{.region}}.{{.domain}}", }, HitsdbCode: PopEndpoint{ "hitsdb.{{.domain}}", "hitsdb.{{.region}}.{{.domain}}", }, ALIKAFKACode: PopEndpoint{ "kafka.openapi.{{.domain}}", "kafka.openapi.{{.region}}.{{.domain}}", }, NasCode: PopEndpoint{ "nas.{{.region}}.{{.domain}}", "nas.{{.region}}.{{.domain}}", }, RosCode: PopEndpoint{ "ros.{{.region}}.{{.domain}}", "ros.{{.region}}.{{.domain}}", }, RDSCode: PopEndpoint{ "rds.{{.domain}}", "rds.{{.region}}.{{.domain}}", }, KVSTORECode: PopEndpoint{ "kvstore-vpc.{{.domain}}", "kvstore-vpc.{{.region}}.{{.domain}}", }, OosCode: PopEndpoint{ "oos-public-inner.{{.domain}}", "oos-public-inner.{{.region}}.{{.domain}}", }, CONTAINCode: PopEndpoint{ "cs-intranet.{{.domain}}", "cs-intranet.{{.region}}.{{.domain}}", }, HBASECode: PopEndpoint{ "hbase.{{.domain}}", "hbase.{{.region}}.{{.domain}}", }, ONSCode: PopEndpoint{ "ons-biz.{{.region}}.{{.domain}}", "ons-biz.{{.region}}.{{.domain}}", }, CDNCode: PopEndpoint{"", ""}, QuickbiCode: PopEndpoint{"", ""}, OssDataCode: PopEndpoint{ "oss-{{.region}}-a.{{.domain}}", "oss-{{.region}}-a.{{.domain}}", }, BssDataCode: PopEndpoint{"", ""}, OTSCode: PopEndpoint{"", ""}, // 3.18.3新局点将不会开放 OneRouterCode: PopEndpoint{ "public.asapi.{{.region}}.{{.domain}}", "public.asapi.{{.region}}.{{.domain}}", }, ASAPICode: PopEndpoint{ "public.asapi.{{.region}}.{{.domain}}", "public.asapi.{{.region}}.{{.domain}}", }, KmsCode: PopEndpoint{ "public.asapi.{{.region}}.{{.domain}}", "public.asapi.{{.region}}.{{.domain}}", }, SLSCode: PopEndpoint{ "public.asapi.{{.region}}.{{.domain}}", "public.asapi.{{.region}}.{{.domain}}", }, } func GeneratorEndpoint(serviceCode ServiceCode, region string, domain string, isCenter bool) string { endpoints := PopEndpoints[serviceCode] var err error var tmp *template.Template if !isCenter { tmp, err = template.New(string(serviceCode)).Parse(endpoints.RegionEndpoint) } else { tmp, err = template.New(string(serviceCode)).Parse(endpoints.CenterEndpoint) } if err != nil { panic(err) } param := map[string]string{ "domain": domain, "region": region, } var buffer bytes.Buffer if err = tmp.Execute(&buffer, param); err != nil { panic(err) } return buffer.String() }