vpcs.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. package ecs
  2. import (
  3. "time"
  4. "github.com/denverdino/aliyungo/common"
  5. "github.com/denverdino/aliyungo/util"
  6. )
  7. type CreateVpcArgs struct {
  8. RegionId common.Region
  9. CidrBlock string //192.168.0.0/16 or 172.16.0.0/16 (default)
  10. VpcName string
  11. Description string
  12. ClientToken string
  13. }
  14. type CreateVpcResponse struct {
  15. common.Response
  16. VpcId string
  17. VRouterId string
  18. RouteTableId string
  19. }
  20. // CreateVpc creates Virtual Private Cloud
  21. //
  22. // You can read doc at http://docs.aliyun.com/#/pub/ecs/open-api/vpc&createvpc
  23. func (client *Client) CreateVpc(args *CreateVpcArgs) (resp *CreateVpcResponse, err error) {
  24. response := CreateVpcResponse{}
  25. err = client.Invoke("CreateVpc", args, &response)
  26. if err != nil {
  27. return nil, err
  28. }
  29. return &response, err
  30. }
  31. type DeleteVpcArgs struct {
  32. VpcId string
  33. }
  34. type DeleteVpcResponse struct {
  35. common.Response
  36. }
  37. // DeleteVpc deletes Virtual Private Cloud
  38. //
  39. // You can read doc at http://docs.aliyun.com/#/pub/ecs/open-api/vpc&deletevpc
  40. func (client *Client) DeleteVpc(vpcId string) error {
  41. args := DeleteVpcArgs{
  42. VpcId: vpcId,
  43. }
  44. response := DeleteVpcResponse{}
  45. return client.Invoke("DeleteVpc", &args, &response)
  46. }
  47. type VpcStatus string
  48. const (
  49. VpcStatusPending = VpcStatus("Pending")
  50. VpcStatusAvailable = VpcStatus("Available")
  51. )
  52. type DescribeVpcsArgs struct {
  53. VpcId string
  54. RegionId common.Region
  55. common.Pagination
  56. }
  57. //
  58. // You can read doc at http://docs.aliyun.com/#/pub/ecs/open-api/datatype&vpcsettype
  59. type VpcSetType struct {
  60. VpcId string
  61. RegionId common.Region
  62. Status VpcStatus // enum Pending | Available
  63. VpcName string
  64. VSwitchIds struct {
  65. VSwitchId []string
  66. }
  67. CidrBlock string
  68. VRouterId string
  69. Description string
  70. CreationTime util.ISO6801Time
  71. }
  72. type DescribeVpcsResponse struct {
  73. common.Response
  74. common.PaginationResult
  75. Vpcs struct {
  76. Vpc []VpcSetType
  77. }
  78. }
  79. // DescribeInstanceStatus describes instance status
  80. //
  81. // You can read doc at http://docs.aliyun.com/#/pub/ecs/open-api/vpc&describevpcs
  82. func (client *Client) DescribeVpcs(args *DescribeVpcsArgs) (vpcs []VpcSetType, pagination *common.PaginationResult, err error) {
  83. args.Validate()
  84. response := DescribeVpcsResponse{}
  85. err = client.Invoke("DescribeVpcs", args, &response)
  86. if err == nil {
  87. return response.Vpcs.Vpc, &response.PaginationResult, nil
  88. }
  89. return nil, nil, err
  90. }
  91. type ModifyVpcAttributeArgs struct {
  92. VpcId string
  93. VpcName string
  94. Description string
  95. }
  96. type ModifyVpcAttributeResponse struct {
  97. common.Response
  98. }
  99. // ModifyVpcAttribute modifies attribute of Virtual Private Cloud
  100. //
  101. // You can read doc at http://docs.aliyun.com/#/pub/ecs/open-api/vpc&modifyvpcattribute
  102. func (client *Client) ModifyVpcAttribute(args *ModifyVpcAttributeArgs) error {
  103. response := ModifyVpcAttributeResponse{}
  104. return client.Invoke("ModifyVpcAttribute", args, &response)
  105. }
  106. // WaitForInstance waits for instance to given status
  107. func (client *Client) WaitForVpcAvailable(regionId common.Region, vpcId string, timeout int) error {
  108. if timeout <= 0 {
  109. timeout = DefaultTimeout
  110. }
  111. args := DescribeVpcsArgs{
  112. RegionId: regionId,
  113. VpcId: vpcId,
  114. }
  115. for {
  116. vpcs, _, err := client.DescribeVpcs(&args)
  117. if err != nil {
  118. return err
  119. }
  120. if len(vpcs) > 0 && vpcs[0].Status == VpcStatusAvailable {
  121. break
  122. }
  123. timeout = timeout - DefaultWaitForInterval
  124. if timeout <= 0 {
  125. return common.GetClientErrorFromString("Timeout")
  126. }
  127. time.Sleep(DefaultWaitForInterval * time.Second)
  128. }
  129. return nil
  130. }