region.go 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  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 cucloud
  15. import (
  16. "fmt"
  17. "net/url"
  18. api "yunion.io/x/cloudmux/pkg/apis/compute"
  19. "yunion.io/x/cloudmux/pkg/cloudprovider"
  20. "yunion.io/x/cloudmux/pkg/multicloud"
  21. "yunion.io/x/jsonutils"
  22. "yunion.io/x/pkg/errors"
  23. )
  24. type SRegion struct {
  25. multicloud.SRegion
  26. multicloud.SNoObjectStorageRegion
  27. multicloud.SNoLbRegion
  28. client *SChinaUnionClient
  29. Id string
  30. CloudRegionId string
  31. CloudRegionName string
  32. CloudRegionCode string
  33. Status string
  34. ProvinceName string
  35. Area string
  36. }
  37. func (self *SRegion) GetId() string {
  38. return self.CloudRegionCode
  39. }
  40. func (self *SRegion) GetGlobalId() string {
  41. return fmt.Sprintf("%s/%s", api.CLOUD_PROVIDER_CUCLOUD, self.CloudRegionCode)
  42. }
  43. func (self *SRegion) GetProvider() string {
  44. return api.CLOUD_PROVIDER_CUCLOUD
  45. }
  46. func (self *SRegion) GetCloudEnv() string {
  47. return api.CLOUD_PROVIDER_CUCLOUD
  48. }
  49. func (self *SRegion) GetGeographicInfo() cloudprovider.SGeographicInfo {
  50. geo, ok := map[string]cloudprovider.SGeographicInfo{
  51. "cn-chongqing-1": api.RegionChongqing,
  52. "cn-wuhan-2": api.RegionWuhan,
  53. "cn-guangzhou-1": api.RegionGuangzhou,
  54. "cn-beijing-1": api.RegionBeijing,
  55. }[self.CloudRegionCode]
  56. if ok {
  57. return geo
  58. }
  59. return cloudprovider.SGeographicInfo{}
  60. }
  61. func (self *SRegion) GetName() string {
  62. return self.CloudRegionName
  63. }
  64. func (self *SRegion) GetI18n() cloudprovider.SModelI18nTable {
  65. table := cloudprovider.SModelI18nTable{}
  66. return table
  67. }
  68. func (self *SRegion) GetStatus() string {
  69. return api.CLOUD_REGION_STATUS_INSERVER
  70. }
  71. func (self *SRegion) GetClient() *SChinaUnionClient {
  72. return self.client
  73. }
  74. func (self *SRegion) CreateEIP(opts *cloudprovider.SEip) (cloudprovider.ICloudEIP, error) {
  75. return nil, cloudprovider.ErrNotImplemented
  76. }
  77. func (region *SRegion) CreateISecurityGroup(conf *cloudprovider.SecurityGroupCreateInput) (cloudprovider.ICloudSecurityGroup, error) {
  78. return nil, cloudprovider.ErrNotImplemented
  79. }
  80. func (region *SRegion) GetISecurityGroupById(id string) (cloudprovider.ICloudSecurityGroup, error) {
  81. group, err := region.GetSecurityGroup(id)
  82. if err != nil {
  83. return nil, err
  84. }
  85. group.region = region
  86. return group, nil
  87. }
  88. func (region *SRegion) GetISecurityGroups() ([]cloudprovider.ICloudSecurityGroup, error) {
  89. secgroups, err := region.GetSecurityGroups("")
  90. if err != nil {
  91. return nil, err
  92. }
  93. ret := []cloudprovider.ICloudSecurityGroup{}
  94. for i := range secgroups {
  95. secgroups[i].region = region
  96. ret = append(ret, &secgroups[i])
  97. }
  98. return ret, nil
  99. }
  100. func (self *SRegion) CreateIVpc(opts *cloudprovider.VpcCreateOptions) (cloudprovider.ICloudVpc, error) {
  101. return nil, cloudprovider.ErrNotImplemented
  102. }
  103. func (self *SRegion) GetIVpcs() ([]cloudprovider.ICloudVpc, error) {
  104. vpc, err := self.GetVpcs("")
  105. if err != nil {
  106. return nil, err
  107. }
  108. ret := []cloudprovider.ICloudVpc{}
  109. for i := range vpc {
  110. vpc[i].region = self
  111. ret = append(ret, &vpc[i])
  112. }
  113. return ret, nil
  114. }
  115. func (self *SRegion) GetIVpcById(id string) (cloudprovider.ICloudVpc, error) {
  116. vpc, err := self.GetVpc(id)
  117. if err != nil {
  118. return nil, err
  119. }
  120. return vpc, nil
  121. }
  122. func (region *SRegion) GetCapabilities() []string {
  123. return region.client.GetCapabilities()
  124. }
  125. func (self *SRegion) GetIEipById(eipId string) (cloudprovider.ICloudEIP, error) {
  126. return nil, cloudprovider.ErrNotImplemented
  127. }
  128. func (self *SRegion) GetIEips() ([]cloudprovider.ICloudEIP, error) {
  129. return nil, cloudprovider.ErrNotImplemented
  130. }
  131. func (self *SRegion) GetIZones() ([]cloudprovider.ICloudZone, error) {
  132. zones, err := self.GetZones()
  133. if err != nil {
  134. return nil, err
  135. }
  136. ret := []cloudprovider.ICloudZone{}
  137. for i := range zones {
  138. zones[i].region = self
  139. ret = append(ret, &zones[i])
  140. }
  141. return ret, nil
  142. }
  143. func (self *SRegion) GetIZoneById(id string) (cloudprovider.ICloudZone, error) {
  144. zones, err := self.GetIZones()
  145. if err != nil {
  146. return nil, err
  147. }
  148. for i := range zones {
  149. if zones[i].GetGlobalId() == id {
  150. return zones[i], nil
  151. }
  152. }
  153. return nil, errors.Wrapf(cloudprovider.ErrNotFound, "%s", id)
  154. }
  155. func (region *SRegion) GetIHostById(id string) (cloudprovider.ICloudHost, error) {
  156. zones, err := region.GetIZones()
  157. if err != nil {
  158. return nil, err
  159. }
  160. for i := range zones {
  161. hosts, err := zones[i].GetIHosts()
  162. if err != nil {
  163. return nil, err
  164. }
  165. for j := range hosts {
  166. if hosts[j].GetGlobalId() == id {
  167. return hosts[j], nil
  168. }
  169. }
  170. }
  171. return nil, errors.Wrapf(cloudprovider.ErrNotFound, "%s", id)
  172. }
  173. func (region *SRegion) GetIHosts() ([]cloudprovider.ICloudHost, error) {
  174. ret := []cloudprovider.ICloudHost{}
  175. zones, err := region.GetIZones()
  176. if err != nil {
  177. return nil, err
  178. }
  179. for i := range zones {
  180. hosts, err := zones[i].GetIHosts()
  181. if err != nil {
  182. return nil, err
  183. }
  184. ret = append(ret, hosts...)
  185. }
  186. return ret, nil
  187. }
  188. func (region *SRegion) list(resource string, params url.Values) (jsonutils.JSONObject, error) {
  189. return region.client.list(resource, params)
  190. }
  191. func (region *SRegion) get(resource string) (jsonutils.JSONObject, error) {
  192. return region.client.get(resource)
  193. }
  194. func (region *SRegion) post(resource string, params map[string]interface{}) (jsonutils.JSONObject, error) {
  195. return region.client.post(resource, params)
  196. }