Skip to content

Commit

Permalink
r/aws_kinesis_analytics_application: Return 'NotFoundError' instead o…
Browse files Browse the repository at this point in the history
…f 'nil' when no application found (hashicorp#15945).

r/aws_kinesis_analytics_application: Implement 'd.IsNewResource()' checks in 'resourceAwsKinesisAnalyticsApplicationRead' (hashicorp#16796).

Acceptance test output:

$ make testacc TEST=./aws/ TESTARGS='-run=TestAccAWSKinesisAnalyticsApplication_basic\|TestAccAWSKinesisAnalyticsApplication_disappears'
==> Checking that code complies with gofmt requirements...
TF_ACC=1 go test ./aws -v -count 1 -parallel 20 -run=TestAccAWSKinesisAnalyticsApplication_basic\|TestAccAWSKinesisAnalyticsApplication_disappears -timeout 120m
=== RUN   TestAccAWSKinesisAnalyticsApplication_basic
=== PAUSE TestAccAWSKinesisAnalyticsApplication_basic
=== RUN   TestAccAWSKinesisAnalyticsApplication_disappears
=== PAUSE TestAccAWSKinesisAnalyticsApplication_disappears
=== CONT  TestAccAWSKinesisAnalyticsApplication_basic
=== CONT  TestAccAWSKinesisAnalyticsApplication_disappears
--- PASS: TestAccAWSKinesisAnalyticsApplication_basic (15.29s)
--- PASS: TestAccAWSKinesisAnalyticsApplication_disappears (18.26s)
PASS
ok  	github.com/terraform-providers/terraform-provider-aws/aws	18.344s
  • Loading branch information
ewbankkit committed Feb 23, 2021
1 parent bc9dff2 commit 1be6d0e
Show file tree
Hide file tree
Showing 5 changed files with 48 additions and 17 deletions.
29 changes: 27 additions & 2 deletions aws/internal/service/kinesisanalytics/finder/finder.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,43 @@ package finder
import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/kinesisanalytics"
"github.com/hashicorp/aws-sdk-go-base/tfawserr"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
)

// ApplicationByName returns the application corresponding to the specified name.
func ApplicationByName(conn *kinesisanalytics.KinesisAnalytics, name string) (*kinesisanalytics.ApplicationDetail, error) {
// ApplicationDetailByName returns the application corresponding to the specified name.
// Returns NotFoundError if no application is found.
func ApplicationDetailByName(conn *kinesisanalytics.KinesisAnalytics, name string) (*kinesisanalytics.ApplicationDetail, error) {
input := &kinesisanalytics.DescribeApplicationInput{
ApplicationName: aws.String(name),
}

return ApplicationDetail(conn, input)
}

// ApplicationDetail returns the application details corresponding to the specified name.
// Returns NotFoundError if no application is found.
func ApplicationDetail(conn *kinesisanalytics.KinesisAnalytics, input *kinesisanalytics.DescribeApplicationInput) (*kinesisanalytics.ApplicationDetail, error) {
output, err := conn.DescribeApplication(input)

if tfawserr.ErrCodeEquals(err, kinesisanalytics.ErrCodeResourceNotFoundException) {
return nil, &resource.NotFoundError{
LastError: err,
LastRequest: input,
}
}

if err != nil {
return nil, err
}

if output == nil || output.ApplicationDetail == nil {
return nil, &resource.NotFoundError{
Message: "Empty result",
LastRequest: input,
LastResponse: output,
}
}

return output.ApplicationDetail, nil
}
10 changes: 5 additions & 5 deletions aws/internal/service/kinesisanalytics/waiter/status.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,29 +3,29 @@ package waiter
import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/kinesisanalytics"
"github.com/hashicorp/aws-sdk-go-base/tfawserr"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/terraform-providers/terraform-provider-aws/aws/internal/service/kinesisanalytics/finder"
"github.com/terraform-providers/terraform-provider-aws/aws/internal/tfresource"
)

const (
applicationStatusNotFound = "NotFound"
applicationStatusUnknown = "Unknown"
)

// ApplicationStatus fetches the Application and its Status
// ApplicationStatus fetches the ApplicationDetail and its Status
func ApplicationStatus(conn *kinesisanalytics.KinesisAnalytics, name string) resource.StateRefreshFunc {
return func() (interface{}, string, error) {
application, err := finder.ApplicationByName(conn, name)
applicationDetail, err := finder.ApplicationDetailByName(conn, name)

if tfawserr.ErrCodeEquals(err, kinesisanalytics.ErrCodeResourceNotFoundException) {
if tfresource.NotFound(err) {
return nil, applicationStatusNotFound, nil
}

if err != nil {
return nil, applicationStatusUnknown, err
}

return application, aws.StringValue(application.ApplicationStatus), nil
return applicationDetail, aws.StringValue(applicationDetail.ApplicationStatus), nil
}
}
9 changes: 6 additions & 3 deletions aws/internal/service/kinesisanalytics/waiter/waiter.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,17 +11,20 @@ import (
)

// ApplicationDeleted waits for an Application to return Deleted
func ApplicationDeleted(conn *kinesisanalytics.KinesisAnalytics, name string, timeout time.Duration) (*kinesisanalytics.ApplicationSummary, error) {
func ApplicationDeleted(conn *kinesisanalytics.KinesisAnalytics, name string, timeout time.Duration) (*kinesisanalytics.ApplicationDetail, error) {
stateConf := &resource.StateChangeConf{
Pending: []string{kinesisanalytics.ApplicationStatusRunning, kinesisanalytics.ApplicationStatusDeleting},
Pending: []string{
kinesisanalytics.ApplicationStatusRunning,
kinesisanalytics.ApplicationStatusDeleting,
},
Target: []string{},
Refresh: ApplicationStatus(conn, name),
Timeout: timeout,
}

outputRaw, err := stateConf.WaitForState()

if v, ok := outputRaw.(*kinesisanalytics.ApplicationSummary); ok {
if v, ok := outputRaw.(*kinesisanalytics.ApplicationDetail); ok {
return v, err
}

Expand Down
8 changes: 5 additions & 3 deletions aws/resource_aws_kinesis_analytics_application.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,14 @@ import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/arn"
"github.com/aws/aws-sdk-go/service/kinesisanalytics"
"github.com/hashicorp/aws-sdk-go-base/tfawserr"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
"github.com/terraform-providers/terraform-provider-aws/aws/internal/keyvaluetags"
"github.com/terraform-providers/terraform-provider-aws/aws/internal/service/kinesisanalytics/finder"
"github.com/terraform-providers/terraform-provider-aws/aws/internal/service/kinesisanalytics/waiter"
"github.com/terraform-providers/terraform-provider-aws/aws/internal/tfresource"
)

func resourceAwsKinesisAnalyticsApplication() *schema.Resource {
Expand Down Expand Up @@ -657,9 +659,9 @@ func resourceAwsKinesisAnalyticsApplicationRead(d *schema.ResourceData, meta int
conn := meta.(*AWSClient).kinesisanalyticsconn
ignoreTagsConfig := meta.(*AWSClient).IgnoreTagsConfig

application, err := finder.ApplicationByName(conn, d.Get("name").(string))
application, err := finder.ApplicationDetailByName(conn, d.Get("name").(string))

if isAWSErr(err, kinesisanalytics.ErrCodeResourceNotFoundException, "") {
if !d.IsNewResource() && tfresource.NotFound(err) {
log.Printf("[WARN] Kinesis Analytics Application (%s) not found, removing from state", d.Id())
d.SetId("")
return nil
Expand Down Expand Up @@ -1041,7 +1043,7 @@ func resourceAwsKinesisAnalyticsApplicationDelete(d *schema.ResourceData, meta i
CreateTimestamp: aws.Time(createTimestamp),
})

if isAWSErr(err, kinesisanalytics.ErrCodeResourceNotFoundException, "") {
if tfawserr.ErrCodeEquals(err, kinesisanalytics.ErrCodeResourceNotFoundException) {
return nil
}

Expand Down
9 changes: 5 additions & 4 deletions aws/resource_aws_kinesis_analytics_application_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
"github.com/terraform-providers/terraform-provider-aws/aws/internal/service/kinesisanalytics/finder"
"github.com/terraform-providers/terraform-provider-aws/aws/internal/service/kinesisanalytics/lister"
"github.com/terraform-providers/terraform-provider-aws/aws/internal/tfresource"
)

func init() {
Expand Down Expand Up @@ -42,7 +43,7 @@ func testSweepKinesisAnalyticsApplications(region string) error {
arn := aws.StringValue(applicationSummary.ApplicationARN)
name := aws.StringValue(applicationSummary.ApplicationName)

application, err := finder.ApplicationByName(conn, name)
application, err := finder.ApplicationDetailByName(conn, name)

if tfawserr.ErrMessageContains(err, kinesisanalytics.ErrCodeUnsupportedOperationException, "was created/updated by kinesisanalyticsv2 SDK") {
continue
Expand Down Expand Up @@ -1489,8 +1490,8 @@ func testAccCheckKinesisAnalyticsApplicationDestroy(s *terraform.State) error {
continue
}

_, err := finder.ApplicationByName(conn, rs.Primary.Attributes["name"])
if isAWSErr(err, kinesisanalytics.ErrCodeResourceNotFoundException, "") {
_, err := finder.ApplicationDetailByName(conn, rs.Primary.Attributes["name"])
if tfresource.NotFound(err) {
continue
}
if err != nil {
Expand All @@ -1515,7 +1516,7 @@ func testAccCheckKinesisAnalyticsApplicationExists(n string, v *kinesisanalytics

conn := testAccProvider.Meta().(*AWSClient).kinesisanalyticsconn

application, err := finder.ApplicationByName(conn, rs.Primary.Attributes["name"])
application, err := finder.ApplicationDetailByName(conn, rs.Primary.Attributes["name"])
if err != nil {
return err
}
Expand Down

0 comments on commit 1be6d0e

Please sign in to comment.