endpoints.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. // Copyright 2019 Yunion
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package cloudprovider
  15. import (
  16. "reflect"
  17. "strings"
  18. "yunion.io/x/pkg/utils"
  19. )
  20. // SHCSOEndpoints 华为私有云endpoints配置
  21. /*
  22. endpoint获取方式优先级:
  23. 通过参数明确指定使用指定endpoint。否则,程序根据华为云endpoint命名规则自动拼接endpoint
  24. */
  25. type SHCSOEndpoints struct {
  26. caches map[string]string
  27. // 华为私有云Endpoint域名
  28. // example: hcso.com.cn
  29. // required:true
  30. EndpointDomain string `default:"$HUAWEI_ENDPOINT_DOMAIN" metavar:"$HUAWEI_ENDPOINT_DOMAIN"`
  31. // 默认DNS
  32. // example: 10.125.0.26,10.125.0.27
  33. // required: false
  34. DefaultSubnetDns string `default:"$HUAWEI_DEFAULT_SUBNET_DNS" metavar:"$HUAWEI_DEFAULT_SUBNET_DNS"`
  35. // 弹性云服务
  36. Ecs string `default:"$HUAWEI_ECS_ENDPOINT"`
  37. // 云容器服务
  38. Cce string `default:"$HUAWEI_CCE_ENDPOINT"`
  39. // 弹性伸缩服务
  40. As string `default:"$HUAWEI_AS_ENDPOINT"`
  41. // 统一身份认证服务
  42. Iam string `default:"$HUAWEI_IAM_ENDPOINT"`
  43. // 镜像服务
  44. Ims string `default:"$HUAWEI_IMS_ENDPOINT"`
  45. // 云服务器备份服务
  46. Csbs string `default:"$HUAWEI_CSBS_ENDPOINT"`
  47. // 云容器实例 CCI
  48. Cci string `default:"$HUAWEI_CCI_ENDPOINT"`
  49. // 裸金属服务器
  50. Bms string `default:"$HUAWEI_BMS_ENDPOINT"`
  51. // 云硬盘 EVS
  52. Evs string `default:"$HUAWEI_EVS_ENDPOINT"`
  53. // 云硬盘备份 VBS
  54. Vbs string `default:"$HUAWEI_VBS_ENDPOINT"`
  55. // 对象存储服务 OBS
  56. Obs string `default:"$HUAWEI_OBS_ENDPOINT"`
  57. // 虚拟私有云 VPC
  58. Vpc string `default:"$HUAWEI_VPC_ENDPOINT"`
  59. // 弹性负载均衡 ELB
  60. Elb string `default:"$HUAWEI_ELB_ENDPOINT"`
  61. // 合作伙伴运营能力
  62. Bss string `default:"$HUAWEI_BSS_ENDPOINT"`
  63. // Nat网关 NAT
  64. Nat string `default:"$HUAWEI_NAT_ENDPOINT"`
  65. // 分布式缓存服务
  66. Dcs string `default:"$HUAWEI_DCS_ENDPOINT"`
  67. // 关系型数据库 RDS
  68. Rds string `default:"$HUAWEI_RDS_ENDPOINT"`
  69. // 云审计服务
  70. Cts string `default:"$HUAWEI_CTS_ENDPOINT"`
  71. // 监控服务 CloudEye
  72. Ces string `default:"$HUAWEI_CES_ENDPOINT"`
  73. // 企业项目
  74. Eps string `default:"$HUAWEI_EPS_ENDPOINT"`
  75. // 文件系统
  76. SfsTurbo string `default:"$HUAWEI_SFS_TURBO_ENDPOINT"`
  77. // Modelarts
  78. Modelarts string `default:"$HUAWEI_MODELARTS_ENDPOINT"`
  79. }
  80. func (endpoints *SHCSOEndpoints) GetEndpoint(defaultRegion, serviceName string, region string) string {
  81. sn := utils.Kebab2Camel(serviceName, "-")
  82. if endpoints.caches == nil {
  83. endpoints.caches = make(map[string]string, 0)
  84. }
  85. key := defaultRegion + "." + sn
  86. if len(region) > 0 {
  87. key = region + "." + sn
  88. }
  89. if endpoint, ok := endpoints.caches[key]; ok && len(endpoint) > 0 {
  90. return endpoint
  91. }
  92. var endpoint string
  93. fileds := reflect.Indirect(reflect.ValueOf(endpoints))
  94. f := fileds.FieldByNameFunc(func(c string) bool {
  95. return c == sn
  96. })
  97. if f.Kind() == reflect.String {
  98. endpoint = f.String()
  99. }
  100. if len(endpoint) == 0 {
  101. endpoint = strings.Join([]string{serviceName, defaultRegion, endpoints.EndpointDomain}, ".")
  102. }
  103. if len(region) > 0 {
  104. endpoint = strings.Replace(endpoint, defaultRegion, region, 1)
  105. }
  106. endpoints.caches[key] = endpoint
  107. return endpoint
  108. }