alicloud/service_alicloud_havip.go (104 lines of code) (raw):

package alicloud import ( "fmt" "strings" "time" "github.com/hashicorp/terraform-plugin-sdk/helper/schema" "github.com/aliyun/alibaba-cloud-sdk-go/services/vpc" "github.com/aliyun/terraform-provider-alicloud/alicloud/connectivity" ) type HaVipService struct { client *connectivity.AliyunClient } func (s *HaVipService) DescribeHaVip(haVipId string) (v vpc.HaVip, err error) { request := vpc.CreateDescribeHaVipsRequest() request.RegionId = s.client.RegionId values := []string{haVipId} filter := []vpc.DescribeHaVipsFilter{{ Key: "HaVipId", Value: &values, }, } request.Filter = &filter invoker := NewInvoker() err = invoker.Run(func() error { raw, err := s.client.WithVpcClient(func(vpcClient *vpc.Client) (interface{}, error) { return vpcClient.DescribeHaVips(request) }) if err != nil { return err } addDebug(request.GetActionName(), raw, request.RpcRequest, request) resp, _ := raw.(*vpc.DescribeHaVipsResponse) if resp == nil || len(resp.HaVips.HaVip) <= 0 || resp.HaVips.HaVip[0].HaVipId != haVipId { return GetNotFoundErrorFromString(GetNotFoundMessage("HaVip", haVipId)) } v = resp.HaVips.HaVip[0] return nil }) return } func (s *HaVipService) WaitForHaVip(haVipId string, status Status, timeout int) error { if timeout <= 0 { timeout = DefaultTimeout } for { //wait the order effective havip, err := s.DescribeHaVip(haVipId) if err != nil { return err } if strings.ToLower(havip.Status) == strings.ToLower(string(status)) { break } timeout = timeout - DefaultIntervalShort if timeout <= 0 { return GetTimeErrorFromString(GetTimeoutMessage("HaVip", string(status))) } time.Sleep(DefaultIntervalShort * time.Second) } return nil } func (s *HaVipService) DescribeHaVipAttachment(haVipId string, instanceId string) (err error) { invoker := NewInvoker() return invoker.Run(func() error { haVip, err := s.DescribeHaVip(haVipId) if err != nil { return err } for _, id := range haVip.AssociatedInstances.AssociatedInstance { if id == instanceId { return nil } } return GetNotFoundErrorFromString(GetNotFoundMessage("HaVipAttachment", haVipId+COLON_SEPARATED+instanceId)) }) } func (s *HaVipService) WaitForHaVipAttachment(haVipId string, instanceId string, timeout int) error { if timeout <= 0 { timeout = DefaultTimeout } for { err := s.DescribeHaVipAttachment(haVipId, instanceId) if err != nil { if !NotFoundError(err) { return err } } else { break } timeout = timeout - DefaultIntervalShort if timeout <= 0 { return GetTimeErrorFromString(GetTimeoutMessage("HaVip Attachment", string("Unavailable"))) } time.Sleep(DefaultIntervalShort * time.Second) } return nil } func getHaVipIdAndInstanceId(d *schema.ResourceData, meta interface{}) (string, string, error) { parts := strings.Split(d.Id(), COLON_SEPARATED) if len(parts) != 2 { return "", "", fmt.Errorf("invalid resource id") } return parts[0], parts[1], nil }