func (c *EC2) WaitUntilInstanceTerminated(input *DescribeInstancesInput) error { waiterCfg := waiter.Config{ Operation: "DescribeInstances", Delay: 15, MaxAttempts: 40, Acceptors: []waiter.WaitAcceptor{ { State: "success", Matcher: "pathAll", Argument: "Reservations[].Instances[].State.Name", Expected: "terminated", }, { State: "failure", Matcher: "pathAny", Argument: "Reservations[].Instances[].State.Name", Expected: "pending", }, { State: "failure", Matcher: "pathAny", Argument: "Reservations[].Instances[].State.Name", Expected: "stopping", }, }, } w := waiter.Waiter{ Client: c, Input: input, Config: waiterCfg, } return w.Wait() }
func (c *S3) WaitUntilBucketExists(input *HeadBucketInput) error { waiterCfg := waiter.Config{ Operation: "HeadBucket", Delay: 5, MaxAttempts: 20, Acceptors: []waiter.WaitAcceptor{ { State: "success", Matcher: "status", Argument: "", Expected: 200, }, { State: "success", Matcher: "status", Argument: "", Expected: 403, }, { State: "retry", Matcher: "status", Argument: "", Expected: 404, }, }, } w := waiter.Waiter{ Client: c, Input: input, Config: waiterCfg, } return w.Wait() }
func (c *OpsWorks) WaitUntilDeploymentSuccessful(input *DescribeDeploymentsInput) error { waiterCfg := waiter.Config{ Operation: "DescribeDeployments", Delay: 15, MaxAttempts: 40, Acceptors: []waiter.WaitAcceptor{ { State: "success", Matcher: "pathAll", Argument: "Deployments[].Status", Expected: "successful", }, { State: "failure", Matcher: "pathAny", Argument: "Deployments[].Status", Expected: "failed", }, }, } w := waiter.Waiter{ Client: c, Input: input, Config: waiterCfg, } return w.Wait() }
func (c *EC2) WaitUntilBundleTaskComplete(input *DescribeBundleTasksInput) error { waiterCfg := waiter.Config{ Operation: "DescribeBundleTasks", Delay: 15, MaxAttempts: 40, Acceptors: []waiter.WaitAcceptor{ { State: "success", Matcher: "pathAll", Argument: "BundleTasks[].State", Expected: "complete", }, { State: "failure", Matcher: "pathAny", Argument: "BundleTasks[].State", Expected: "failed", }, }, } w := waiter.Waiter{ Client: c, Input: input, Config: waiterCfg, } return w.Wait() }
func (c *OpsWorks) WaitUntilAppExists(input *DescribeAppsInput) error { waiterCfg := waiter.Config{ Operation: "DescribeApps", Delay: 1, MaxAttempts: 40, Acceptors: []waiter.WaitAcceptor{ { State: "success", Matcher: "status", Argument: "", Expected: 200, }, { State: "failure", Matcher: "status", Argument: "", Expected: 400, }, }, } w := waiter.Waiter{ Client: c, Input: input, Config: waiterCfg, } return w.Wait() }
func (c *EC2) WaitUntilKeyPairExists(input *DescribeKeyPairsInput) error { waiterCfg := waiter.Config{ Operation: "DescribeKeyPairs", Delay: 5, MaxAttempts: 6, Acceptors: []waiter.WaitAcceptor{ { State: "success", Matcher: "pathAll", Argument: "length(KeyPairs[].KeyName) > `0`", Expected: true, }, { State: "retry", Matcher: "error", Argument: "", Expected: "InvalidKeyPairNotFound", }, }, } w := waiter.Waiter{ Client: c, Input: input, Config: waiterCfg, } return w.Wait() }
func (c *EC2) WaitUntilInstanceExists(input *DescribeInstancesInput) error { waiterCfg := waiter.Config{ Operation: "DescribeInstances", Delay: 5, MaxAttempts: 40, Acceptors: []waiter.WaitAcceptor{ { State: "success", Matcher: "status", Argument: "", Expected: 200, }, { State: "retry", Matcher: "error", Argument: "", Expected: "InvalidInstanceIDNotFound", }, }, } w := waiter.Waiter{ Client: c, Input: input, Config: waiterCfg, } return w.Wait() }
func (c *EC2) WaitUntilVpnConnectionDeleted(input *DescribeVpnConnectionsInput) error { waiterCfg := waiter.Config{ Operation: "DescribeVpnConnections", Delay: 15, MaxAttempts: 40, Acceptors: []waiter.WaitAcceptor{ { State: "success", Matcher: "pathAll", Argument: "VpnConnections[].State", Expected: "deleted", }, { State: "failure", Matcher: "pathAny", Argument: "VpnConnections[].State", Expected: "pending", }, }, } w := waiter.Waiter{ Client: c, Input: input, Config: waiterCfg, } return w.Wait() }
func (c *EC2) WaitUntilVolumeDeleted(input *DescribeVolumesInput) error { waiterCfg := waiter.Config{ Operation: "DescribeVolumes", Delay: 15, MaxAttempts: 40, Acceptors: []waiter.WaitAcceptor{ { State: "success", Matcher: "pathAll", Argument: "Volumes[].State", Expected: "deleted", }, { State: "success", Matcher: "error", Argument: "", Expected: "InvalidVolumeNotFound", }, }, } w := waiter.Waiter{ Client: c, Input: input, Config: waiterCfg, } return w.Wait() }
func (c *EC2) WaitUntilNetworkInterfaceAvailable(input *DescribeNetworkInterfacesInput) error { waiterCfg := waiter.Config{ Operation: "DescribeNetworkInterfaces", Delay: 20, MaxAttempts: 10, Acceptors: []waiter.WaitAcceptor{ { State: "success", Matcher: "pathAll", Argument: "NetworkInterfaces[].Status", Expected: "available", }, { State: "failure", Matcher: "error", Argument: "", Expected: "InvalidNetworkInterfaceIDNotFound", }, }, } w := waiter.Waiter{ Client: c, Input: input, Config: waiterCfg, } return w.Wait() }
func (c *EC2) WaitUntilCustomerGatewayAvailable(input *DescribeCustomerGatewaysInput) error { waiterCfg := waiter.Config{ Operation: "DescribeCustomerGateways", Delay: 15, MaxAttempts: 40, Acceptors: []waiter.WaitAcceptor{ { State: "success", Matcher: "pathAll", Argument: "CustomerGateways[].State", Expected: "available", }, { State: "failure", Matcher: "pathAny", Argument: "CustomerGateways[].State", Expected: "deleted", }, { State: "failure", Matcher: "pathAny", Argument: "CustomerGateways[].State", Expected: "deleting", }, }, } w := waiter.Waiter{ Client: c, Input: input, Config: waiterCfg, } return w.Wait() }
func (c *RDS) WaitUntilDBInstanceAvailable(input *DescribeDBInstancesInput) error { waiterCfg := waiter.Config{ Operation: "DescribeDBInstances", Delay: 30, MaxAttempts: 60, Acceptors: []waiter.WaitAcceptor{ { State: "success", Matcher: "pathAll", Argument: "DBInstances[].DBInstanceStatus", Expected: "available", }, { State: "failure", Matcher: "pathAny", Argument: "DBInstances[].DBInstanceStatus", Expected: "deleted", }, { State: "failure", Matcher: "pathAny", Argument: "DBInstances[].DBInstanceStatus", Expected: "deleting", }, { State: "failure", Matcher: "pathAny", Argument: "DBInstances[].DBInstanceStatus", Expected: "failed", }, { State: "failure", Matcher: "pathAny", Argument: "DBInstances[].DBInstanceStatus", Expected: "incompatible-restore", }, { State: "failure", Matcher: "pathAny", Argument: "DBInstances[].DBInstanceStatus", Expected: "incompatible-parameters", }, { State: "failure", Matcher: "pathAny", Argument: "DBInstances[].DBInstanceStatus", Expected: "incompatible-restore", }, }, } w := waiter.Waiter{ Client: c, Input: input, Config: waiterCfg, } return w.Wait() }
func (c *RDS) WaitUntilDBInstanceDeleted(input *DescribeDBInstancesInput) error { waiterCfg := waiter.Config{ Operation: "DescribeDBInstances", Delay: 30, MaxAttempts: 60, Acceptors: []waiter.WaitAcceptor{ { State: "success", Matcher: "pathAll", Argument: "DBInstances[].DBInstanceStatus", Expected: "deleted", }, { State: "success", Matcher: "error", Argument: "", Expected: "DBInstanceNotFound", }, { State: "failure", Matcher: "pathAny", Argument: "DBInstances[].DBInstanceStatus", Expected: "creating", }, { State: "failure", Matcher: "pathAny", Argument: "DBInstances[].DBInstanceStatus", Expected: "modifying", }, { State: "failure", Matcher: "pathAny", Argument: "DBInstances[].DBInstanceStatus", Expected: "rebooting", }, { State: "failure", Matcher: "pathAny", Argument: "DBInstances[].DBInstanceStatus", Expected: "resetting-master-credentials", }, }, } w := waiter.Waiter{ Client: c, Input: input, Config: waiterCfg, } return w.Wait() }
func TestWaiterStatus(t *testing.T) { svc := &mockClient{Client: awstesting.NewClient(&aws.Config{ Region: aws.String("mock-region"), })} svc.Handlers.Send.Clear() // mock sending svc.Handlers.Unmarshal.Clear() svc.Handlers.UnmarshalMeta.Clear() svc.Handlers.ValidateResponse.Clear() reqNum := 0 svc.Handlers.Build.PushBack(func(r *request.Request) { reqNum++ }) svc.Handlers.Send.PushBack(func(r *request.Request) { code := 200 if reqNum == 3 { code = 404 r.Error = awserr.New("NotFound", "Not Found", nil) } r.HTTPResponse = &http.Response{ StatusCode: code, Status: http.StatusText(code), Body: ioutil.NopCloser(bytes.NewReader([]byte{})), } }) waiterCfg := waiter.Config{ Operation: "Mock", Delay: 0, MaxAttempts: 10, Acceptors: []waiter.WaitAcceptor{ { State: "success", Matcher: "status", Argument: "", Expected: 404, }, }, } w := waiter.Waiter{ Client: svc, Input: &MockInput{}, Config: waiterCfg, } err := w.Wait() assert.NoError(t, err) assert.Equal(t, 3, reqNum) }
func (c *EC2) WaitUntilSpotInstanceRequestFulfilled(input *DescribeSpotInstanceRequestsInput) error { waiterCfg := waiter.Config{ Operation: "DescribeSpotInstanceRequests", Delay: 15, MaxAttempts: 40, Acceptors: []waiter.WaitAcceptor{ { State: "success", Matcher: "pathAll", Argument: "SpotInstanceRequests[].Status.Code", Expected: "fulfilled", }, { State: "failure", Matcher: "pathAny", Argument: "SpotInstanceRequests[].Status.Code", Expected: "schedule-expired", }, { State: "failure", Matcher: "pathAny", Argument: "SpotInstanceRequests[].Status.Code", Expected: "canceled-before-fulfillment", }, { State: "failure", Matcher: "pathAny", Argument: "SpotInstanceRequests[].Status.Code", Expected: "bad-parameters", }, { State: "failure", Matcher: "pathAny", Argument: "SpotInstanceRequests[].Status.Code", Expected: "system-error", }, }, } w := waiter.Waiter{ Client: c, Input: input, Config: waiterCfg, } return w.Wait() }
func (c *SES) WaitUntilIdentityExists(input *GetIdentityVerificationAttributesInput) error { waiterCfg := waiter.Config{ Operation: "GetIdentityVerificationAttributes", Delay: 3, MaxAttempts: 20, Acceptors: []waiter.WaitAcceptor{ { State: "success", Matcher: "pathAll", Argument: "VerificationAttributes.*.VerificationStatus", Expected: "Success", }, }, } w := waiter.Waiter{ Client: c, Input: input, Config: waiterCfg, } return w.Wait() }
func (c *EC2) WaitUntilVpcAvailable(input *DescribeVpcsInput) error { waiterCfg := waiter.Config{ Operation: "DescribeVpcs", Delay: 15, MaxAttempts: 40, Acceptors: []waiter.WaitAcceptor{ { State: "success", Matcher: "pathAll", Argument: "Vpcs[].State", Expected: "available", }, }, } w := waiter.Waiter{ Client: c, Input: input, Config: waiterCfg, } return w.Wait() }
func (c *EC2) WaitUntilSystemStatusOk(input *DescribeInstanceStatusInput) error { waiterCfg := waiter.Config{ Operation: "DescribeInstanceStatus", Delay: 15, MaxAttempts: 40, Acceptors: []waiter.WaitAcceptor{ { State: "success", Matcher: "pathAll", Argument: "InstanceStatuses[].SystemStatus.Status", Expected: "ok", }, }, } w := waiter.Waiter{ Client: c, Input: input, Config: waiterCfg, } return w.Wait() }
func (c *EC2) WaitUntilPasswordDataAvailable(input *GetPasswordDataInput) error { waiterCfg := waiter.Config{ Operation: "GetPasswordData", Delay: 15, MaxAttempts: 40, Acceptors: []waiter.WaitAcceptor{ { State: "success", Matcher: "path", Argument: "length(PasswordData) > `0`", Expected: true, }, }, } w := waiter.Waiter{ Client: c, Input: input, Config: waiterCfg, } return w.Wait() }
func (c *EC2) WaitUntilConversionTaskDeleted(input *DescribeConversionTasksInput) error { waiterCfg := waiter.Config{ Operation: "DescribeConversionTasks", Delay: 15, MaxAttempts: 40, Acceptors: []waiter.WaitAcceptor{ { State: "success", Matcher: "pathAll", Argument: "ConversionTasks[].State", Expected: "deleted", }, }, } w := waiter.Waiter{ Client: c, Input: input, Config: waiterCfg, } return w.Wait() }
func TestWaiterPathAll(t *testing.T) { svc := &mockClient{Client: awstesting.NewClient(&aws.Config{ Region: aws.String("mock-region"), })} svc.Handlers.Send.Clear() // mock sending svc.Handlers.Unmarshal.Clear() svc.Handlers.UnmarshalMeta.Clear() svc.Handlers.ValidateResponse.Clear() reqNum := 0 resps := []*MockOutput{ { // Request 1 States: []*MockState{ {State: aws.String("pending")}, {State: aws.String("pending")}, }, }, { // Request 2 States: []*MockState{ {State: aws.String("running")}, {State: aws.String("pending")}, }, }, { // Request 3 States: []*MockState{ {State: aws.String("running")}, {State: aws.String("running")}, }, }, } numBuiltReq := 0 svc.Handlers.Build.PushBack(func(r *request.Request) { numBuiltReq++ }) svc.Handlers.Unmarshal.PushBack(func(r *request.Request) { if reqNum >= len(resps) { assert.Fail(t, "too many polling requests made") return } r.Data = resps[reqNum] reqNum++ }) waiterCfg := waiter.Config{ Operation: "Mock", Delay: 0, MaxAttempts: 10, Acceptors: []waiter.WaitAcceptor{ { State: "success", Matcher: "pathAll", Argument: "States[].State", Expected: "running", }, }, } w := waiter.Waiter{ Client: svc, Input: &MockInput{}, Config: waiterCfg, } err := w.Wait() assert.NoError(t, err) assert.Equal(t, 3, numBuiltReq) assert.Equal(t, 3, reqNum) }
func TestWaiterError(t *testing.T) { svc := &mockClient{Client: awstesting.NewClient(&aws.Config{ Region: aws.String("mock-region"), })} svc.Handlers.Send.Clear() // mock sending svc.Handlers.Unmarshal.Clear() svc.Handlers.UnmarshalMeta.Clear() svc.Handlers.UnmarshalError.Clear() svc.Handlers.ValidateResponse.Clear() reqNum := 0 resps := []*MockOutput{ { // Request 1 States: []*MockState{ {State: aws.String("pending")}, {State: aws.String("pending")}, }, }, { // Request 2, error case }, { // Request 3 States: []*MockState{ {State: aws.String("running")}, {State: aws.String("running")}, }, }, } numBuiltReq := 0 svc.Handlers.Build.PushBack(func(r *request.Request) { numBuiltReq++ }) svc.Handlers.Send.PushBack(func(r *request.Request) { code := 200 if reqNum == 1 { code = 400 } r.HTTPResponse = &http.Response{ StatusCode: code, Status: http.StatusText(code), Body: ioutil.NopCloser(bytes.NewReader([]byte{})), } }) svc.Handlers.Unmarshal.PushBack(func(r *request.Request) { if reqNum >= len(resps) { assert.Fail(t, "too many polling requests made") return } r.Data = resps[reqNum] reqNum++ }) svc.Handlers.UnmarshalMeta.PushBack(func(r *request.Request) { if reqNum == 1 { r.Error = awserr.New("MockException", "mock exception message", nil) // If there was an error unmarshal error will be called instead of unmarshal // need to increment count here also reqNum++ } }) waiterCfg := waiter.Config{ Operation: "Mock", Delay: 0, MaxAttempts: 10, Acceptors: []waiter.WaitAcceptor{ { State: "success", Matcher: "pathAll", Argument: "States[].State", Expected: "running", }, { State: "retry", Matcher: "error", Argument: "", Expected: "MockException", }, }, } w := waiter.Waiter{ Client: svc, Input: &MockInput{}, Config: waiterCfg, } err := w.Wait() assert.NoError(t, err) assert.Equal(t, 3, numBuiltReq) assert.Equal(t, 3, reqNum) }
func (c *OpsWorks) WaitUntilInstanceTerminated(input *DescribeInstancesInput) error { waiterCfg := waiter.Config{ Operation: "DescribeInstances", Delay: 15, MaxAttempts: 40, Acceptors: []waiter.WaitAcceptor{ { State: "success", Matcher: "pathAll", Argument: "Instances[].Status", Expected: "terminated", }, { State: "success", Matcher: "error", Argument: "", Expected: "ResourceNotFoundException", }, { State: "failure", Matcher: "pathAny", Argument: "Instances[].Status", Expected: "booting", }, { State: "failure", Matcher: "pathAny", Argument: "Instances[].Status", Expected: "online", }, { State: "failure", Matcher: "pathAny", Argument: "Instances[].Status", Expected: "pending", }, { State: "failure", Matcher: "pathAny", Argument: "Instances[].Status", Expected: "rebooting", }, { State: "failure", Matcher: "pathAny", Argument: "Instances[].Status", Expected: "requested", }, { State: "failure", Matcher: "pathAny", Argument: "Instances[].Status", Expected: "running_setup", }, { State: "failure", Matcher: "pathAny", Argument: "Instances[].Status", Expected: "setup_failed", }, { State: "failure", Matcher: "pathAny", Argument: "Instances[].Status", Expected: "start_failed", }, }, } w := waiter.Waiter{ Client: c, Input: input, Config: waiterCfg, } return w.Wait() }
func (c *OpsWorks) WaitUntilInstanceOnline(input *DescribeInstancesInput) error { waiterCfg := waiter.Config{ Operation: "DescribeInstances", Delay: 15, MaxAttempts: 40, Acceptors: []waiter.WaitAcceptor{ { State: "success", Matcher: "pathAll", Argument: "Instances[].Status", Expected: "online", }, { State: "failure", Matcher: "pathAny", Argument: "Instances[].Status", Expected: "setup_failed", }, { State: "failure", Matcher: "pathAny", Argument: "Instances[].Status", Expected: "shutting_down", }, { State: "failure", Matcher: "pathAny", Argument: "Instances[].Status", Expected: "start_failed", }, { State: "failure", Matcher: "pathAny", Argument: "Instances[].Status", Expected: "stopped", }, { State: "failure", Matcher: "pathAny", Argument: "Instances[].Status", Expected: "stopping", }, { State: "failure", Matcher: "pathAny", Argument: "Instances[].Status", Expected: "terminating", }, { State: "failure", Matcher: "pathAny", Argument: "Instances[].Status", Expected: "terminated", }, { State: "failure", Matcher: "pathAny", Argument: "Instances[].Status", Expected: "stop_failed", }, }, } w := waiter.Waiter{ Client: c, Input: input, Config: waiterCfg, } return w.Wait() }