-
Notifications
You must be signed in to change notification settings - Fork 9.3k
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
aws_storagegateway_upload_buffer produces inconsistent result after apply when created on an Outpost #17809
Comments
This type of Terraform error occurs when the resource is intended for creation, the API returns back a "not found" type error or the lookup value changes, and the resource returns back to Terraform that the resource does not exist without error (generally used to trigger resource recreation automatically). The handling of this situation is certainly a bug in the resource implementation, which is being more globally tracked with #16796 so that resources will at least return a more helpful error than the generic Terraform CLI error seen here. That being said, it appears the Storage Gateway Here are the relevant snippets from the debug logging:
It might be worth checking with the Storage Gateway service team why this value returned as the disk path in the |
I will submit the fix for the
The underlying issue with getting the proper disk identifier before it reaches the |
Got some information on this. There is different behavior in the ListLocalDisks DiskId response depending on whether the disk has been added as a cache or upload buffer yet. This is only true for CACHED and VTL type gateways. There are some legacy reasons as to why it works this way. See below:
Is this sufficient to solve the problem? I tried to work around the issue by setting a manual dependency on the disk attachment (as below), but it didn't seem to change anything. I'm guessing that it didn't work because this state change is related to storage gateway registering the disk after it's attached rather than the disk being attached to the EC2 instance.
|
Reference: #17809 The referenced issue contains the context, but the gist of this issue is that the Storage Gateway API canonicalizes the Cached and VTL disk identifiers only after first cache or upload buffer use, which means that this resource must accept the path first, then perform its own lookup after creation. This also fixes the `aws_storagegateway_local_disk` data source, which was missing `Computed` on the `disk_node` and `disk_path` attributes, which prevented it for being used to lookup one for the value of the other. Previously: ``` === CONT TestAccAWSStorageGatewayUploadBuffer_DiskPath resource_aws_storagegateway_upload_buffer_test.go:107: Step 1/2 error: Error running apply: exit status 1 Error: error reading Storage Gateway Upload Buffer (arn:aws:storagegateway:us-west-2:187416307283:gateway/sgw-D0A941B9:/dev/nvme1n1): not found on terraform_plugin_test.tf line 129, in resource "aws_storagegateway_upload_buffer" "test": 129: resource "aws_storagegateway_upload_buffer" "test" { --- FAIL: TestAccAWSStorageGatewayUploadBuffer_DiskPath (418.35s) ``` Output from acceptance testing: ``` --- PASS: TestAccAWSStorageGatewayLocalDiskDataSource_DiskNode (288.52s) --- PASS: TestAccAWSStorageGatewayLocalDiskDataSource_DiskPath (300.60s) --- PASS: TestAccAWSStorageGatewayUploadBuffer_basic (418.26s) --- PASS: TestAccAWSStorageGatewayUploadBuffer_DiskPath (444.33s) ```
Hi @adam-imeson 👋 Thank you for the additional details. This unfortunately means that we must implement additional changes in the Terraform resource logic to support the mismatched behavior between gateway types. To that end, I have added After this change, cached gateway upload buffers can be implemented with: data "aws_storagegateway_local_disk" "test" {
disk_node = aws_volume_attachment.test.device_name
gateway_arn = aws_storagegateway_gateway.test.arn
}
resource "aws_storagegateway_upload_buffer" "test" {
disk_path = data.aws_storagegateway_local_disk.test.disk_path
gateway_arn = aws_storagegateway_gateway.test.arn
} Under the hood, this adds the UploadBuffer by DiskPath then reads the ListLocalDisks API to find the (now correct) DiskId. 👍 |
…#18313) * service/storagegateway: Support Cached and VTL gateway upload buffers Reference: #17809 The referenced issue contains the context, but the gist of this issue is that the Storage Gateway API canonicalizes the Cached and VTL disk identifiers only after first cache or upload buffer use, which means that this resource must accept the path first, then perform its own lookup after creation. This also fixes the `aws_storagegateway_local_disk` data source, which was missing `Computed` on the `disk_node` and `disk_path` attributes, which prevented it for being used to lookup one for the value of the other. Previously: ``` === CONT TestAccAWSStorageGatewayUploadBuffer_DiskPath resource_aws_storagegateway_upload_buffer_test.go:107: Step 1/2 error: Error running apply: exit status 1 Error: error reading Storage Gateway Upload Buffer (arn:aws:storagegateway:us-west-2:187416307283:gateway/sgw-D0A941B9:/dev/nvme1n1): not found on terraform_plugin_test.tf line 129, in resource "aws_storagegateway_upload_buffer" "test": 129: resource "aws_storagegateway_upload_buffer" "test" { --- FAIL: TestAccAWSStorageGatewayUploadBuffer_DiskPath (418.35s) ``` Output from acceptance testing: ``` --- PASS: TestAccAWSStorageGatewayLocalDiskDataSource_DiskNode (288.52s) --- PASS: TestAccAWSStorageGatewayLocalDiskDataSource_DiskPath (300.60s) --- PASS: TestAccAWSStorageGatewayUploadBuffer_basic (418.26s) --- PASS: TestAccAWSStorageGatewayUploadBuffer_DiskPath (444.33s) ``` * Update CHANGELOG for #18313
This has been released in version 3.34.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! |
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! |
Community Note
Terraform CLI and Terraform AWS Provider Version
Affected Resource(s)
Terraform Configuration Files
This is part of a larger config, but this is the relevant section. You need an Outpost to use it.
Debug Output
Last ~500 lines of the trace debug are here: https://gist.github.com/adam-imeson/71757299e95cc2a46be180804e4ea71b
This debug output begins right before Terraform attempts to create the offending aws_storagegateway_upload_buffer resource. I would include more, but the total trace output for my entire stack is over six megabytes. If we need to log dive all of it then I can find a way to host it somewhere convenient.
Expected Behavior
A storage gateway (volume gateway, in this case) stands up on my Outpost.
Actual Behavior
This error appears toward the end of the deployment and terraform halts:
Steps to Reproduce
terraform apply
Important Factoids
This storage gateway is being launched on an Outpost.
References
The text was updated successfully, but these errors were encountered: