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

data-source/aws_ami: Prevent panics with AMIs in failed image state #5968

Merged
merged 1 commit into from
Sep 24, 2018

Conversation

bflad
Copy link
Contributor

@bflad bflad commented Sep 24, 2018

Fixes #5963

When an EBS BlockDeviceMapping AMI is in a failed image state, the API can omit volumeSize, which causes a panic. This switches the EBS BlockDeviceMapping handling to use the AWS SDK provided functions for dereferencing values instead of raw dereferences. To properly acceptance test this we would purposefully need to create a failed AMI, which seems like more effort than its worth compared to fixing the trivial issue.

This also fixes an odd scenario with TestAccAWSAmiDataSource_windowsInstance where Amazon published an AMI with a mismatched 2012 vs 2016 description.

            <imageId>ami-0d786d5cc800b2456</imageId>
            <imageLocation>amazon/Windows_Server-2012-R2_RTM-English-64Bit-HyperV-2018.09.15</imageLocation>
            <imageOwnerAlias>amazon</imageOwnerAlias>
            <name>Windows_Server-2012-R2_RTM-English-64Bit-HyperV-2018.09.15</name>
            <description>Microsoft Windows Server 2016 Locale English with Hyper-V AMI provided by Amazon</description>

Acceptance testing output:

make testacc TEST=./aws TESTARGS='-run=TestAccAWSAmiDataSource_'
==> Checking that code complies with gofmt requirements...
TF_ACC=1 go test ./aws -v -run=TestAccAWSAmiDataSource_ -timeout 120m
=== RUN   TestAccAWSAmiDataSource_natInstance
--- PASS: TestAccAWSAmiDataSource_natInstance (16.98s)
=== RUN   TestAccAWSAmiDataSource_windowsInstance
--- PASS: TestAccAWSAmiDataSource_windowsInstance (21.23s)
=== RUN   TestAccAWSAmiDataSource_instanceStore
--- PASS: TestAccAWSAmiDataSource_instanceStore (14.81s)
=== RUN   TestAccAWSAmiDataSource_owners
--- PASS: TestAccAWSAmiDataSource_owners (88.64s)
=== RUN   TestAccAWSAmiDataSource_ownersEmpty
--- PASS: TestAccAWSAmiDataSource_ownersEmpty (15.92s)
=== RUN   TestAccAWSAmiDataSource_localNameFilter
--- PASS: TestAccAWSAmiDataSource_localNameFilter (18.18s)
PASS
ok  	github.com/terraform-providers/terraform-provider-aws/aws	177.259s

When an EBS BlockDeviceMapping AMI is in a failed image state, the API can omit volumeSize, which causes a panic. This switches the EBS BlockDeviceMapping handling to use the AWS SDK provided functions for dereferencing values instead of raw dereferences. To properly acceptance test this we would purposefully need to create a failed AMI, which seems like more effort than fixing the trivial issue.

This also fixes an odd scenario with `TestAccAWSAmiDataSource_windowsInstance` where Amazon published an AMI with a mismatched 2012 vs 2016 description.

```
            <imageId>ami-0d786d5cc800b2456</imageId>
            <imageLocation>amazon/Windows_Server-2012-R2_RTM-English-64Bit-HyperV-2018.09.15</imageLocation>
            <imageOwnerAlias>amazon</imageOwnerAlias>
            <name>Windows_Server-2012-R2_RTM-English-64Bit-HyperV-2018.09.15</name>
            <description>Microsoft Windows Server 2016 Locale English with Hyper-V AMI provided by Amazon</description>
```

Acceptance testing output:

```
make testacc TEST=./aws TESTARGS='-run=TestAccAWSAmiDataSource_'
==> Checking that code complies with gofmt requirements...
TF_ACC=1 go test ./aws -v -run=TestAccAWSAmiDataSource_ -timeout 120m
=== RUN   TestAccAWSAmiDataSource_natInstance
--- PASS: TestAccAWSAmiDataSource_natInstance (16.98s)
=== RUN   TestAccAWSAmiDataSource_windowsInstance
--- PASS: TestAccAWSAmiDataSource_windowsInstance (21.23s)
=== RUN   TestAccAWSAmiDataSource_instanceStore
--- PASS: TestAccAWSAmiDataSource_instanceStore (14.81s)
=== RUN   TestAccAWSAmiDataSource_owners
--- PASS: TestAccAWSAmiDataSource_owners (88.64s)
=== RUN   TestAccAWSAmiDataSource_ownersEmpty
--- PASS: TestAccAWSAmiDataSource_ownersEmpty (15.92s)
=== RUN   TestAccAWSAmiDataSource_localNameFilter
--- PASS: TestAccAWSAmiDataSource_localNameFilter (18.18s)
PASS
ok  	github.com/terraform-providers/terraform-provider-aws/aws	177.259s
```
@bflad bflad added 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. labels Sep 24, 2018
@bflad bflad requested a review from a team September 24, 2018 16:25
@ghost ghost added size/S Managed by automation to categorize the size of a PR. tests PRs: expanded test coverage. Issues: expanded coverage, enhancements to test infrastructure. labels Sep 24, 2018
@bflad bflad added this to the v1.38.0 milestone Sep 24, 2018
@bflad bflad merged commit bc2ffe3 into master Sep 24, 2018
@bflad bflad deleted the b-aws_ami-failed-imagestate-panic branch September 24, 2018 19:36
bflad added a commit that referenced this pull request Sep 24, 2018
@bflad bflad mentioned this pull request Sep 25, 2018
@bflad
Copy link
Contributor Author

bflad commented Sep 26, 2018

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

@ghost
Copy link

ghost commented Apr 3, 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 Apr 3, 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/S Managed by automation to categorize the size of a PR. tests PRs: expanded test coverage. Issues: expanded coverage, enhancements to test infrastructure.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Crash report
2 participants