-
Notifications
You must be signed in to change notification settings - Fork 9.2k
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
resource/aws_batch_job_definition: Properly set container_properties and name into Terraform state and fix basic test #11488
Conversation
…tion_basic ContainerProperties comparison to match updated API response Previously: ``` --- FAIL: TestAccAWSBatchJobDefinition_basic (5.36s) testing.go:640: Step 0 error: Check failed: Check 2/2 error: Bad Job Definition Container Properties expected: { Command: ["ls","-la"], Environment: [{ Name: "VARNAME", Value: "VARVAL" }], Image: "busybox", Memory: 512, MountPoints: [{ ContainerPath: "/tmp", ReadOnly: false, SourceVolume: "tmp" }], Ulimits: [{ HardLimit: 1024, Name: "nofile", SoftLimit: 1024 }], Vcpus: 1, Volumes: [{ Host: { SourcePath: "/tmp" }, Name: "tmp" }] } got: { Command: ["ls","-la"], Environment: [{ Name: "VARNAME", Value: "VARVAL" }], Image: "busybox", Memory: 512, MountPoints: [{ ContainerPath: "/tmp", ReadOnly: false, SourceVolume: "tmp" }], ResourceRequirements: [], Ulimits: [{ HardLimit: 1024, Name: "nofile", SoftLimit: 1024 }], Vcpus: 1, Volumes: [{ Host: { SourcePath: "/tmp" }, Name: "tmp" }] } ``` Output from acceptance testing: ``` --- PASS: TestAccAWSBatchJobDefinition_basic (15.23s) --- PASS: TestAccAWSBatchJobDefinition_updateForcesNewResource (26.75s) ```
…into Terraform state and perform drift detection Reference: #9954 Reference: #11038 Previously, we were silently ignoring the `d.Set()` error for the `container_properties` attribute. This error can be seen with adding error checking on the call or with `tfproviderlint -R004`: ``` /Users/bflad/src/github.com/terraform-providers/terraform-provider-aws/aws/resource_aws_batch_job_definition.go:146:32: R004: ResourceData.Set() incompatible value type: *github.com/aws/aws-sdk-go/service/batch.ContainerProperties ``` Here we introduce the conversion the Batch `ContainerProperties` object into a JSON string, similar to the handling of ECS `ContainerDefinitions`. With the new attribute properly setting into the Terraform state, existing tests were failing with differences now being discovered: ``` --- FAIL: TestAccAWSBatchJobDefinition_basic (12.38s) testing.go:640: Step 0 error: After applying this step, the plan was not empty: DIFF: DESTROY/CREATE: aws_batch_job_definition.test ... omitted for clarity ... container_properties: "{\"command\":[\"ls\",\"-la\"],\"environment\":[{\"name\":\"VARNAME\",\"value\":\"VARVAL\"}],\"image\":\"busybox\",\"memory\":512,\"mountPoints\":[{\"containerPath\":\"/tmp\",\"readOnly\":false,\"sourceVolume\":\"tmp\"}],\"resourceRequirements\":[],\"ulimits\":[{\"hardLimit\":1024,\"name\":\"nofile\",\"softLimit\":1024}],\"vcpus\":1,\"volumes\":[{\"host\":{\"sourcePath\":\"/tmp\"},\"name\":\"tmp\"}]}" => "{\"command\":[\"ls\",\"-la\"],\"environment\":[{\"name\":\"VARNAME\",\"value\":\"VARVAL\"}],\"image\":\"busybox\",\"memory\":512,\"mountPoints\":[{\"containerPath\":\"/tmp\",\"readOnly\":false,\"sourceVolume\":\"tmp\"}],\"ulimits\":[{\"hardLimit\":1024,\"name\":\"nofile\",\"softLimit\":1024}],\"vcpus\":1,\"volumes\":[{\"host\":{\"sourcePath\":\"/tmp\"},\"name\":\"tmp\"}]}" (forces new resource) ... omitted for clarity ... ``` Similar to some fields in ECS `ContainerDefinitions`, the API will inject an empty JSON array at least in the `RequiredResources` field. Instead of burdening operators with exactly matching the canonical API JSON, we insert difference suppression for this case. We also suppress reordered `Environment` objects (by `Name`; similar to ECS), since it is likely feature request as well. Output from acceptance testing: ``` --- PASS: TestAccAWSBatchJobDefinition_basic (14.45s) --- PASS: TestAccAWSBatchJobDefinition_updateForcesNewResource (24.61s) ```
…state Reference: #11407 (review) To prevent future issues with resource import, when implemented. Output from acceptance testing: ``` --- PASS: TestAccAWSBatchJobDefinition_basic (14.00s) --- PASS: TestAccAWSBatchJobDefinition_updateForcesNewResource (27.64s) ```
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM 🚀
--- PASS: TestAccAWSBatchJobDefinition_basic (7.16s)
--- PASS: TestAccAWSBatchJobDefinition_updateForcesNewResource (12.17s)
This has been released in version 2.48.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! |
…h container properties missing environment, mount point, ulimits, and volumes configuration Reference: #11998 Reference: #11488 Now that this resource is properly refreshing the `container_properties` attribute into the Terraform state, additional cases have been reported where the API canonicalizes the response with empty arrays. Here we account for `environment`, `mountPoints`, `ulimits`, and `volumes`. Previous output from unit testing (before code update): ``` 2020/02/11 12:37:58 [DEBUG] Canonical Batch Container Properties JSON are not equal. First: {"command":["start.py","Ref::S3bucket","Ref::S3key"],"image":"example:image","jobRoleArn":"arn:aws:iam::123456789012:role/example","memory":2048,"vcpus":8} Second: {"command":["start.py","Ref::S3bucket","Ref::S3key"],"environment":[],"image":"example:image","jobRoleArn":"arn:aws:iam::123456789012:role/example","memory":2048,"mountPoints":[],"ulimits":[],"vcpus":8,"volumes":[]} --- FAIL: TestEquivalentBatchContainerPropertiesJSON (0.00s) --- FAIL: TestEquivalentBatchContainerPropertiesJSON/empty_environment,_mountPoints,_ulimits,_and_volumes (0.00s) container_properties_test.go:226: got false, expected true ``` Previous output from acceptance testing (before code update): ``` --- FAIL: TestAccAWSBatchJobDefinition_basic (13.16s) testing.go:640: Step 0 error: After applying this step, the plan was not empty: DIFF: DESTROY/CREATE: aws_batch_job_definition.test arn: "arn:aws:batch:us-west-2:--OMITTED--:job-definition/tf-acc-test-118932874341187373:1" => "<computed>" container_properties: "{\"command\":[\"echo\",\"test\"],\"environment\":[],\"image\":\"busybox\",\"memory\":128,\"mountPoints\":[],\"resourceRequirements\":[],\"ulimits\":[],\"vcpus\":1,\"volumes\":[]}" => "{\"command\":[\"echo\",\"test\"],\"image\":\"busybox\",\"memory\":128,\"vcpus\":1}" (forces new resource) id: "arn:aws:batch:us-west-2:--OMITTED--:job-definition/tf-acc-test-118932874341187373:1" => "<computed>" name: "tf-acc-test-118932874341187373" => "tf-acc-test-118932874341187373" retry_strategy.#: "0" => "0" revision: "1" => "<computed>" timeout.#: "0" => "0" type: "container" => "container" ``` Output from acceptance testing: ``` --- PASS: TestAccAWSBatchJobDefinition_basic (16.80s) --- PASS: TestAccAWSBatchJobDefinition_ContainerProperties_Advanced (16.84s) --- PASS: TestAccAWSBatchJobDefinition_updateForcesNewResource (27.13s) ```
…h container properties missing environment, mount point, ulimits, and volumes configuration (#12000) * resource/aws_batch_job_definition: Prevent extraneous differences with container properties missing environment, mount point, ulimits, and volumes configuration Reference: #11998 Reference: #11488 Now that this resource is properly refreshing the `container_properties` attribute into the Terraform state, additional cases have been reported where the API canonicalizes the response with empty arrays. Here we account for `environment`, `mountPoints`, `ulimits`, and `volumes`. Previous output from unit testing (before code update): ``` 2020/02/11 12:37:58 [DEBUG] Canonical Batch Container Properties JSON are not equal. First: {"command":["start.py","Ref::S3bucket","Ref::S3key"],"image":"example:image","jobRoleArn":"arn:aws:iam::123456789012:role/example","memory":2048,"vcpus":8} Second: {"command":["start.py","Ref::S3bucket","Ref::S3key"],"environment":[],"image":"example:image","jobRoleArn":"arn:aws:iam::123456789012:role/example","memory":2048,"mountPoints":[],"ulimits":[],"vcpus":8,"volumes":[]} --- FAIL: TestEquivalentBatchContainerPropertiesJSON (0.00s) --- FAIL: TestEquivalentBatchContainerPropertiesJSON/empty_environment,_mountPoints,_ulimits,_and_volumes (0.00s) container_properties_test.go:226: got false, expected true ``` Previous output from acceptance testing (before code update): ``` --- FAIL: TestAccAWSBatchJobDefinition_basic (13.16s) testing.go:640: Step 0 error: After applying this step, the plan was not empty: DIFF: DESTROY/CREATE: aws_batch_job_definition.test arn: "arn:aws:batch:us-west-2:--OMITTED--:job-definition/tf-acc-test-118932874341187373:1" => "<computed>" container_properties: "{\"command\":[\"echo\",\"test\"],\"environment\":[],\"image\":\"busybox\",\"memory\":128,\"mountPoints\":[],\"resourceRequirements\":[],\"ulimits\":[],\"vcpus\":1,\"volumes\":[]}" => "{\"command\":[\"echo\",\"test\"],\"image\":\"busybox\",\"memory\":128,\"vcpus\":1}" (forces new resource) id: "arn:aws:batch:us-west-2:--OMITTED--:job-definition/tf-acc-test-118932874341187373:1" => "<computed>" name: "tf-acc-test-118932874341187373" => "tf-acc-test-118932874341187373" retry_strategy.#: "0" => "0" revision: "1" => "<computed>" timeout.#: "0" => "0" type: "container" => "container" ``` Output from acceptance testing: ``` --- PASS: TestAccAWSBatchJobDefinition_basic (16.80s) --- PASS: TestAccAWSBatchJobDefinition_ContainerProperties_Advanced (16.84s) --- PASS: TestAccAWSBatchJobDefinition_updateForcesNewResource (27.13s) ``` * internal/service/batch/equivalency: Include comments in Reduce() why we nil out certain fields Reference: #12000 (comment)
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
Reference: #9954
Closes #11038
Release note for CHANGELOG:
Regarding the previous
_basic
test failure of:The API added a new
ResourceRequirements
field which was not accounted for in the comparison object yet.Regarding the
container_properties
changes, previously we were silently ignoring thed.Set()
error for thecontainer_properties
attribute. This error can be seen with adding error checking on the call or withtfproviderlint -R004
:Here we introduce the conversion of the Batch
ContainerProperties
object into a JSON string, similar to the handling of ECSContainerDefinitions
. With the new attribute properly setting into the Terraform state, existing tests were failing with differences now being discovered due to how the API canonicalizes the field:Similar to some fields in ECS
ContainerDefinitions
, the API will inject an empty JSON array at least in theResourceRequirements
field. Instead of burdening operators with exactly matching the canonical API JSON, we insert difference suppression for this case. We also suppress reorderedEnvironment
objects (byName
; similar to ECS), since it is likely feature request as well.Output from acceptance testing: