Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

r/aws_spot_fleet_request: Fix import crash on missing 'availability_zone' #13577

Conversation

ewbankkit
Copy link
Contributor

Community Note

  • Please vote on this pull request by adding a 👍 reaction to the original pull request comment to help the community and maintainers prioritize this request
  • Please do not leave "+1" or other comments that do not add relevant new information or questions, they generate extra noise for pull request followers and do not help prioritize the request

Closes #13567.

Release note for CHANGELOG:

resource/aws_spot_fleet_request: Prevent crash on import when `availability_zone` has not been specified

Output from acceptance testing:

$ make testacc TEST=./aws/ TESTARGS='-run=TestAccAWSSpotFleetRequest_'
==> Checking that code complies with gofmt requirements...
TF_ACC=1 go test ./aws/ -v -count 1 -parallel 5 -run=TestAccAWSSpotFleetRequest_ -timeout 120m
=== RUN   TestAccAWSSpotFleetRequest_basic
=== PAUSE TestAccAWSSpotFleetRequest_basic
=== RUN   TestAccAWSSpotFleetRequest_tags
=== PAUSE TestAccAWSSpotFleetRequest_tags
=== RUN   TestAccAWSSpotFleetRequest_associatePublicIpAddress
=== PAUSE TestAccAWSSpotFleetRequest_associatePublicIpAddress
=== RUN   TestAccAWSSpotFleetRequest_launchTemplate
=== PAUSE TestAccAWSSpotFleetRequest_launchTemplate
=== RUN   TestAccAWSSpotFleetRequest_launchTemplate_multiple
=== PAUSE TestAccAWSSpotFleetRequest_launchTemplate_multiple
=== RUN   TestAccAWSSpotFleetRequest_launchTemplateWithOverrides
=== PAUSE TestAccAWSSpotFleetRequest_launchTemplateWithOverrides
=== RUN   TestAccAWSSpotFleetRequest_launchTemplateToLaunchSpec
--- PASS: TestAccAWSSpotFleetRequest_launchTemplateToLaunchSpec (516.75s)
=== RUN   TestAccAWSSpotFleetRequest_launchSpecToLaunchTemplate
--- PASS: TestAccAWSSpotFleetRequest_launchSpecToLaunchTemplate (495.60s)
=== RUN   TestAccAWSSpotFleetRequest_instanceInterruptionBehavior
=== PAUSE TestAccAWSSpotFleetRequest_instanceInterruptionBehavior
=== RUN   TestAccAWSSpotFleetRequest_fleetType
=== PAUSE TestAccAWSSpotFleetRequest_fleetType
=== RUN   TestAccAWSSpotFleetRequest_iamInstanceProfileArn
=== PAUSE TestAccAWSSpotFleetRequest_iamInstanceProfileArn
=== RUN   TestAccAWSSpotFleetRequest_changePriceForcesNewRequest
=== PAUSE TestAccAWSSpotFleetRequest_changePriceForcesNewRequest
=== RUN   TestAccAWSSpotFleetRequest_updateTargetCapacity
=== PAUSE TestAccAWSSpotFleetRequest_updateTargetCapacity
=== RUN   TestAccAWSSpotFleetRequest_updateExcessCapacityTerminationPolicy
=== PAUSE TestAccAWSSpotFleetRequest_updateExcessCapacityTerminationPolicy
=== RUN   TestAccAWSSpotFleetRequest_lowestPriceAzOrSubnetInRegion
=== PAUSE TestAccAWSSpotFleetRequest_lowestPriceAzOrSubnetInRegion
=== RUN   TestAccAWSSpotFleetRequest_lowestPriceAzInGivenList
=== PAUSE TestAccAWSSpotFleetRequest_lowestPriceAzInGivenList
=== RUN   TestAccAWSSpotFleetRequest_lowestPriceSubnetInGivenList
=== PAUSE TestAccAWSSpotFleetRequest_lowestPriceSubnetInGivenList
=== RUN   TestAccAWSSpotFleetRequest_multipleInstanceTypesInSameAz
=== PAUSE TestAccAWSSpotFleetRequest_multipleInstanceTypesInSameAz
=== RUN   TestAccAWSSpotFleetRequest_multipleInstanceTypesInSameSubnet
=== PAUSE TestAccAWSSpotFleetRequest_multipleInstanceTypesInSameSubnet
=== RUN   TestAccAWSSpotFleetRequest_overriddingSpotPrice
=== PAUSE TestAccAWSSpotFleetRequest_overriddingSpotPrice
=== RUN   TestAccAWSSpotFleetRequest_withoutSpotPrice
=== PAUSE TestAccAWSSpotFleetRequest_withoutSpotPrice
=== RUN   TestAccAWSSpotFleetRequest_diversifiedAllocation
=== PAUSE TestAccAWSSpotFleetRequest_diversifiedAllocation
=== RUN   TestAccAWSSpotFleetRequest_multipleInstancePools
=== PAUSE TestAccAWSSpotFleetRequest_multipleInstancePools
=== RUN   TestAccAWSSpotFleetRequest_withWeightedCapacity
=== PAUSE TestAccAWSSpotFleetRequest_withWeightedCapacity
=== RUN   TestAccAWSSpotFleetRequest_withEBSDisk
=== PAUSE TestAccAWSSpotFleetRequest_withEBSDisk
=== RUN   TestAccAWSSpotFleetRequest_LaunchSpecification_EbsBlockDevice_KmsKeyId
=== PAUSE TestAccAWSSpotFleetRequest_LaunchSpecification_EbsBlockDevice_KmsKeyId
=== RUN   TestAccAWSSpotFleetRequest_LaunchSpecification_RootBlockDevice_KmsKeyId
=== PAUSE TestAccAWSSpotFleetRequest_LaunchSpecification_RootBlockDevice_KmsKeyId
=== RUN   TestAccAWSSpotFleetRequest_withTags
=== PAUSE TestAccAWSSpotFleetRequest_withTags
=== RUN   TestAccAWSSpotFleetRequest_placementTenancyAndGroup
=== PAUSE TestAccAWSSpotFleetRequest_placementTenancyAndGroup
=== RUN   TestAccAWSSpotFleetRequest_WithELBs
=== PAUSE TestAccAWSSpotFleetRequest_WithELBs
=== RUN   TestAccAWSSpotFleetRequest_WithTargetGroups
=== PAUSE TestAccAWSSpotFleetRequest_WithTargetGroups
=== RUN   TestAccAWSSpotFleetRequest_WithInstanceStoreAmi
--- SKIP: TestAccAWSSpotFleetRequest_WithInstanceStoreAmi (0.00s)
    resource_aws_spot_fleet_request_test.go:1115: Test fails due to test harness constraints
=== RUN   TestAccAWSSpotFleetRequest_disappears
=== PAUSE TestAccAWSSpotFleetRequest_disappears
=== CONT  TestAccAWSSpotFleetRequest_basic
=== CONT  TestAccAWSSpotFleetRequest_overriddingSpotPrice
=== CONT  TestAccAWSSpotFleetRequest_multipleInstanceTypesInSameSubnet
=== CONT  TestAccAWSSpotFleetRequest_multipleInstanceTypesInSameAz
=== CONT  TestAccAWSSpotFleetRequest_lowestPriceSubnetInGivenList
--- PASS: TestAccAWSSpotFleetRequest_lowestPriceSubnetInGivenList (235.57s)
=== CONT  TestAccAWSSpotFleetRequest_lowestPriceAzInGivenList
--- PASS: TestAccAWSSpotFleetRequest_basic (277.38s)
=== CONT  TestAccAWSSpotFleetRequest_lowestPriceAzOrSubnetInRegion
--- PASS: TestAccAWSSpotFleetRequest_overriddingSpotPrice (300.05s)
=== CONT  TestAccAWSSpotFleetRequest_updateExcessCapacityTerminationPolicy
--- PASS: TestAccAWSSpotFleetRequest_multipleInstanceTypesInSameAz (308.82s)
=== CONT  TestAccAWSSpotFleetRequest_updateTargetCapacity
--- PASS: TestAccAWSSpotFleetRequest_multipleInstanceTypesInSameSubnet (309.57s)
=== CONT  TestAccAWSSpotFleetRequest_changePriceForcesNewRequest
--- PASS: TestAccAWSSpotFleetRequest_lowestPriceAzInGivenList (288.42s)
=== CONT  TestAccAWSSpotFleetRequest_iamInstanceProfileArn
--- PASS: TestAccAWSSpotFleetRequest_lowestPriceAzOrSubnetInRegion (339.86s)
=== CONT  TestAccAWSSpotFleetRequest_fleetType
--- PASS: TestAccAWSSpotFleetRequest_iamInstanceProfileArn (298.09s)
=== CONT  TestAccAWSSpotFleetRequest_launchTemplateWithOverrides
--- PASS: TestAccAWSSpotFleetRequest_fleetType (278.14s)
=== CONT  TestAccAWSSpotFleetRequest_launchTemplate_multiple
--- PASS: TestAccAWSSpotFleetRequest_changePriceForcesNewRequest (596.60s)
=== CONT  TestAccAWSSpotFleetRequest_launchTemplate
=== CONT  TestAccAWSSpotFleetRequest_associatePublicIpAddress
--- PASS: TestAccAWSSpotFleetRequest_updateExcessCapacityTerminationPolicy (606.98s)
--- PASS: TestAccAWSSpotFleetRequest_launchTemplateWithOverrides (226.76s)
=== CONT  TestAccAWSSpotFleetRequest_tags
--- PASS: TestAccAWSSpotFleetRequest_launchTemplate_multiple (218.75s)
=== CONT  TestAccAWSSpotFleetRequest_withTags
--- PASS: TestAccAWSSpotFleetRequest_associatePublicIpAddress (264.16s)
=== CONT  TestAccAWSSpotFleetRequest_instanceInterruptionBehavior
--- PASS: TestAccAWSSpotFleetRequest_launchTemplate (267.96s)
=== CONT  TestAccAWSSpotFleetRequest_disappears
--- PASS: TestAccAWSSpotFleetRequest_updateTargetCapacity (873.56s)
=== CONT  TestAccAWSSpotFleetRequest_WithTargetGroups
--- PASS: TestAccAWSSpotFleetRequest_tags (337.92s)
=== CONT  TestAccAWSSpotFleetRequest_WithELBs
--- PASS: TestAccAWSSpotFleetRequest_withTags (337.47s)
=== CONT  TestAccAWSSpotFleetRequest_placementTenancyAndGroup
--- PASS: TestAccAWSSpotFleetRequest_instanceInterruptionBehavior (287.70s)
=== CONT  TestAccAWSSpotFleetRequest_withWeightedCapacity
--- PASS: TestAccAWSSpotFleetRequest_disappears (297.20s)
=== CONT  TestAccAWSSpotFleetRequest_LaunchSpecification_RootBlockDevice_KmsKeyId
--- PASS: TestAccAWSSpotFleetRequest_placementTenancyAndGroup (73.33s)
=== CONT  TestAccAWSSpotFleetRequest_LaunchSpecification_EbsBlockDevice_KmsKeyId
--- PASS: TestAccAWSSpotFleetRequest_LaunchSpecification_RootBlockDevice_KmsKeyId (128.37s)
=== CONT  TestAccAWSSpotFleetRequest_withEBSDisk
--- PASS: TestAccAWSSpotFleetRequest_WithTargetGroups (473.59s)
=== CONT  TestAccAWSSpotFleetRequest_diversifiedAllocation
--- PASS: TestAccAWSSpotFleetRequest_LaunchSpecification_EbsBlockDevice_KmsKeyId (133.03s)
=== CONT  TestAccAWSSpotFleetRequest_multipleInstancePools
--- PASS: TestAccAWSSpotFleetRequest_WithELBs (279.72s)
=== CONT  TestAccAWSSpotFleetRequest_withoutSpotPrice
--- PASS: TestAccAWSSpotFleetRequest_withWeightedCapacity (337.55s)
--- PASS: TestAccAWSSpotFleetRequest_withEBSDisk (277.37s)
--- PASS: TestAccAWSSpotFleetRequest_withoutSpotPrice (321.30s)
--- PASS: TestAccAWSSpotFleetRequest_diversifiedAllocation (335.04s)
--- PASS: TestAccAWSSpotFleetRequest_multipleInstancePools (414.98s)
PASS
ok  	github.com/terraform-providers/terraform-provider-aws/aws	3085.374s

@ewbankkit ewbankkit requested a review from a team June 1, 2020 23:39
@ghost ghost added size/XS Managed by automation to categorize the size of a PR. service/ec2 Issues and PRs that pertain to the ec2 service. labels Jun 1, 2020
@ewbankkit
Copy link
Contributor Author

Without the fix and if nil is passed as Placement when the request is created, import crashes:

$ make testacc TEST=./aws/ TESTARGS='-run=TestAccAWSSpotFleetRequest_basic'
==> Checking that code complies with gofmt requirements...
TF_ACC=1 go test ./aws/ -v -count 1 -parallel 20 -run=TestAccAWSSpotFleetRequest_basic -timeout 120m
=== RUN   TestAccAWSSpotFleetRequest_basic
=== PAUSE TestAccAWSSpotFleetRequest_basic
=== CONT  TestAccAWSSpotFleetRequest_basic
panic: interface conversion: interface {} is nil, not string

goroutine 569 [running]:
github.com/terraform-providers/terraform-provider-aws/aws.hashLaunchSpecification(0x5aa0400, 0xc00180a5d0, 0xc000000001)
	/home/kit/wrk/src/github.com/terraform-providers/terraform-provider-aws/aws/resource_aws_spot_fleet_request.go:1608 +0x6d9
github.com/hashicorp/terraform-plugin-sdk/helper/schema.(*Set).hash(0xc0009e3b60, 0x5aa0400, 0xc00180a5d0, 0x43ea22c, 0x5aa0400)
	/home/kit/wrk/pkg/mod/github.com/hashicorp/[email protected]/helper/schema/set.go:254 +0x3d
github.com/hashicorp/terraform-plugin-sdk/helper/schema.(*Set).add(0xc0009e3b60, 0x5aa0400, 0xc00180a5d0, 0xc0000d8400, 0x0, 0x0)
	/home/kit/wrk/pkg/mod/github.com/hashicorp/[email protected]/helper/schema/set.go:231 +0x83
github.com/hashicorp/terraform-plugin-sdk/helper/schema.(*Set).Add(...)
	/home/kit/wrk/pkg/mod/github.com/hashicorp/[email protected]/helper/schema/set.go:75
github.com/terraform-providers/terraform-provider-aws/aws.launchSpecsToSet(0xc0011be138, 0x1, 0x1, 0xc000e3f780, 0xc000a66220, 0x0, 0x0)
	/home/kit/wrk/src/github.com/terraform-providers/terraform-provider-aws/aws/resource_aws_spot_fleet_request.go:1274 +0x7b
github.com/terraform-providers/terraform-provider-aws/aws.resourceAwsSpotFleetRequestRead(0xc0000da620, 0x5ca0a20, 0xc00028cf00, 0x0, 0x0)
	/home/kit/wrk/src/github.com/terraform-providers/terraform-provider-aws/aws/resource_aws_spot_fleet_request.go:1191 +0x43f
github.com/terraform-providers/terraform-provider-aws/aws.resourceAwsSpotFleetRequestCreate(0xc0000da620, 0x5ca0a20, 0xc00028cf00, 0x2, 0xb2fe540)
	/home/kit/wrk/src/github.com/terraform-providers/terraform-provider-aws/aws/resource_aws_spot_fleet_request.go:1016 +0x1089
github.com/hashicorp/terraform-plugin-sdk/helper/schema.(*Resource).Apply(0xc00081cc60, 0xc000e58730, 0xc000a412e0, 0x5ca0a20, 0xc00028cf00, 0xc000e3ba01, 0xc0014e8570, 0xc000e3bb48)
	/home/kit/wrk/pkg/mod/github.com/hashicorp/[email protected]/helper/schema/resource.go:310 +0x365
github.com/hashicorp/terraform-plugin-sdk/helper/schema.(*Provider).Apply(0xc00012a000, 0xc000cef9c8, 0xc000e58730, 0xc000a412e0, 0xc000e354c8, 0xc0000d7138, 0x5aa0400)
	/home/kit/wrk/pkg/mod/github.com/hashicorp/[email protected]/helper/schema/provider.go:294 +0x99
github.com/hashicorp/terraform-plugin-sdk/internal/helper/plugin.(*GRPCProviderServer).ApplyResourceChange(0xc00174d6f8, 0x76e0e80, 0xc0017da780, 0xc00004fb20, 0xc00174d6f8, 0xc0017da780, 0xc000086b30)
	/home/kit/wrk/pkg/mod/github.com/hashicorp/[email protected]/internal/helper/plugin/grpc_provider.go:885 +0x8b4
github.com/hashicorp/terraform-plugin-sdk/internal/tfplugin5._Provider_ApplyResourceChange_Handler(0x66b03e0, 0xc00174d6f8, 0x76e0e80, 0xc0017da780, 0xc0016cf740, 0x0, 0x76e0e80, 0xc0017da780, 0xc000e2e000, 0x78c)
	/home/kit/wrk/pkg/mod/github.com/hashicorp/[email protected]/internal/tfplugin5/tfplugin5.pb.go:3305 +0x217
google.golang.org/grpc.(*Server).processUnaryRPC(0xc000c81e00, 0x770e2c0, 0xc00113e000, 0xc00020f600, 0xc0011187b0, 0xb2b8ba0, 0x0, 0x0, 0x0)
	/home/kit/wrk/pkg/mod/google.golang.org/[email protected]/server.go:1024 +0x4f4
google.golang.org/grpc.(*Server).handleStream(0xc000c81e00, 0x770e2c0, 0xc00113e000, 0xc00020f600, 0x0)
	/home/kit/wrk/pkg/mod/google.golang.org/[email protected]/server.go:1313 +0xd97
google.golang.org/grpc.(*Server).serveStreams.func1.1(0xc000fce780, 0xc000c81e00, 0x770e2c0, 0xc00113e000, 0xc00020f600)
	/home/kit/wrk/pkg/mod/google.golang.org/[email protected]/server.go:722 +0xbb
created by google.golang.org/grpc.(*Server).serveStreams.func1
	/home/kit/wrk/pkg/mod/google.golang.org/[email protected]/server.go:720 +0xa1
FAIL	github.com/terraform-providers/terraform-provider-aws/aws	104.193s
FAIL
GNUmakefile:26: recipe for target 'testacc' failed
make: *** [testacc] Error 1

@bflad bflad added bug Addresses a defect in current functionality. crash Results from or addresses a Terraform crash or kernel panic. labels Jun 24, 2020
@bflad bflad added this to the v2.68.0 milestone Jun 24, 2020
@bflad bflad self-assigned this Jun 24, 2020
Copy link
Contributor

@bflad bflad left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 🚀

(Aside: I'm having a bear of a time with the acceptance testing and #13065 across multiple testing accounts, so will followup with extending that timeout)

@bflad bflad merged commit c050103 into hashicorp:master Jun 24, 2020
bflad added a commit that referenced this pull request Jun 24, 2020
@ewbankkit ewbankkit deleted the b-aws_spot_fleet_request-import-crash-no-availability_zone branch June 24, 2020 15:09
@ghost
Copy link

ghost commented Jun 26, 2020

This has been released in version 2.68.0 of the Terraform AWS provider. Please see the Terraform documentation on provider versioning or reach out if you need any assistance upgrading.

For further feature requests or bug reports with this functionality, please create a new GitHub issue following the template for triage. Thanks!

@ghost
Copy link

ghost commented Jul 24, 2020

I'm going to lock this issue because it has been closed for 30 days ⏳. This helps our maintainers find and focus on the active issues.

If you feel this issue should be reopened, we encourage creating a new issue linking back to this one for added context. Thanks!

@ghost ghost locked and limited conversation to collaborators Jul 24, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
bug Addresses a defect in current functionality. crash Results from or addresses a Terraform crash or kernel panic. service/ec2 Issues and PRs that pertain to the ec2 service. size/XS Managed by automation to categorize the size of a PR.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Crash when importing aws_spot_fleet_request
2 participants