vpc.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. package cucloud
  2. import (
  3. "net/url"
  4. api "yunion.io/x/cloudmux/pkg/apis/compute"
  5. "yunion.io/x/cloudmux/pkg/cloudprovider"
  6. "yunion.io/x/cloudmux/pkg/multicloud"
  7. "yunion.io/x/jsonutils"
  8. )
  9. type SVpc struct {
  10. multicloud.SVpc
  11. multicloud.STagBase
  12. region *SRegion
  13. BandWidth string
  14. RouterUUID string
  15. VpcName string
  16. Flag string
  17. CloudRegionId string
  18. Description string
  19. RouterTableNum int
  20. InstanceId string
  21. RouterName string
  22. RouterID string
  23. VrouterType string
  24. VpcId string
  25. DnatId string
  26. VpcType string
  27. Cidr string
  28. ResourceGroupId string
  29. CloudRegionName string
  30. SubNetNum int
  31. ResourceGroupName string
  32. IsdefaultNetwork string
  33. SubNetworkNum int
  34. CreateTime string
  35. RouterNum int
  36. IsDefaultNetwork bool
  37. Status string
  38. }
  39. func (vpc *SVpc) GetId() string {
  40. return vpc.VpcId
  41. }
  42. func (vpc *SVpc) GetName() string {
  43. return vpc.VpcName
  44. }
  45. func (vpc *SVpc) GetGlobalId() string {
  46. return vpc.VpcId
  47. }
  48. func (vpc *SVpc) GetStatus() string {
  49. return api.VPC_STATUS_AVAILABLE
  50. }
  51. func (vpc *SVpc) Refresh() error {
  52. res, err := vpc.region.GetVpc(vpc.GetId())
  53. if err != nil {
  54. return err
  55. }
  56. return jsonutils.Update(vpc, res)
  57. }
  58. func (vpc *SVpc) GetRegion() cloudprovider.ICloudRegion {
  59. return vpc.region
  60. }
  61. func (vpc *SVpc) GetIsDefault() bool {
  62. return vpc.IsDefaultNetwork
  63. }
  64. func (vpc *SVpc) GetCidrBlock() string {
  65. return vpc.Cidr
  66. }
  67. func (vpc *SVpc) GetIWires() ([]cloudprovider.ICloudWire, error) {
  68. zones, err := vpc.region.GetZones()
  69. if err != nil {
  70. return nil, err
  71. }
  72. ret := []cloudprovider.ICloudWire{}
  73. for i := range zones {
  74. zones[i].region = vpc.region
  75. wire := &SWire{vpc: vpc, zone: &zones[i]}
  76. ret = append(ret, wire)
  77. }
  78. return ret, nil
  79. }
  80. func (vpc *SVpc) GetIWireById(id string) (cloudprovider.ICloudWire, error) {
  81. wires, err := vpc.GetIWires()
  82. if err != nil {
  83. return nil, err
  84. }
  85. for i := range wires {
  86. if wires[i].GetGlobalId() == id {
  87. return wires[i], nil
  88. }
  89. }
  90. return nil, cloudprovider.ErrNotFound
  91. }
  92. func (vpc *SVpc) GetISecurityGroups() ([]cloudprovider.ICloudSecurityGroup, error) {
  93. return nil, cloudprovider.ErrNotSupported
  94. }
  95. func (vpc *SVpc) GetIRouteTables() ([]cloudprovider.ICloudRouteTable, error) {
  96. return nil, cloudprovider.ErrNotImplemented
  97. }
  98. func (vpc *SVpc) GetIRouteTableById(routeTableId string) (cloudprovider.ICloudRouteTable, error) {
  99. return nil, cloudprovider.ErrNotImplemented
  100. }
  101. func (vpc *SVpc) Delete() error {
  102. return cloudprovider.ErrNotImplemented
  103. }
  104. func (region *SRegion) GetVpcs(id string) ([]SVpc, error) {
  105. params := url.Values{}
  106. params.Set("cloudRegionCode", region.CloudRegionCode)
  107. if len(id) > 0 {
  108. params.Set("vpcId", id)
  109. }
  110. resp, err := region.list("/instance/v1/product/vpcs", params)
  111. if err != nil {
  112. return nil, err
  113. }
  114. ret := []SVpc{}
  115. err = resp.Unmarshal(&ret)
  116. if err != nil {
  117. return nil, err
  118. }
  119. return ret, nil
  120. }
  121. func (region *SRegion) GetVpc(vpcId string) (*SVpc, error) {
  122. vpc, err := region.GetVpcs(vpcId)
  123. if err != nil {
  124. return nil, err
  125. }
  126. for i := range vpc {
  127. vpc[i].region = region
  128. if vpc[i].VpcId == vpcId {
  129. return &vpc[i], nil
  130. }
  131. }
  132. return nil, cloudprovider.ErrNotFound
  133. }