Skip to content

Commit 8a55c41

Browse files
authored
migrate: Ensure idempotency when ran multiple times (#364)
Reference: #362 To reproduce, copied an existing test case and ensured the test script included multiple `exec tfplugindocs migrate` invocations. This generated a test failure matching the bug report: ``` --- FAIL: Test_SchemaJson_MigrateAcceptanceTests (0.00s) --- FAIL: Test_SchemaJson_MigrateAcceptanceTests/time_provider_multiple_runs (0.32s) testscript.go:558: # Copyright (c) HashiCorp, Inc. # SPDX-License-Identifier: MPL-2.0 # Multiple runs of tfplugindocs -migrate to verify idempotency (0.000s) # Run migrate command (0.301s) # Check template files (0.000s) > cmpenv templates/index.md.tmpl exp-templates/index.md.tmpl diff templates/index.md.tmpl exp-templates/index.md.tmpl --- templates/index.md.tmpl +++ exp-templates/index.md.tmpl @@ -31,36 +31,3 @@ `triggers` are *not* treated as sensitive attributes; a value used for `triggers` will be displayed in Terraform UI output as plaintext. To force a these actions to reoccur without updating `triggers`, the [`terraform taint` command](https://www.terraform.io/docs/commands/taint.html) can be used to produce the action on the next run. ---- -page_title: "Provider: Time" -description: |- - The time provider is used to interact with time-based resources. ---- - -{{/* This template serves as a starting point for documentation generation, and can be customized with hardcoded values and/or doc gen templates. - -For example, the {{ .SchemaMarkdown }} template can be used to replace manual schema documentation if descriptions of schema attributes are added in the provider source code. */ -}} - -# Time Provider - -The time provider is used to interact with time-based resources. The provider itself has no configuration options. - -Use the navigation to the left to read about the available resources. - -## Resource "Triggers" - -Certain time resources, only perform actions during specific lifecycle actions: - -- `time_offset`: Saves base timestamp into Terraform state only when created. -- `time_sleep`: Sleeps when created and/or destroyed. -- `time_static`: Saves base timestamp into Terraform state only when created. - -These resources provide an optional map argument called `triggers` that can be populated with arbitrary key/value pairs. When the keys or values of this argument are updated, Terraform will re-perform the desired action, such as updating the base timestamp or sleeping again. - -For example: - -{{tffile "examples/example_1.tf"}} - -`triggers` are *not* treated as sensitive attributes; a value used for `triggers` will be displayed in Terraform UI output as plaintext. - -To force a these actions to reoccur without updating `triggers`, the [`terraform taint` command](https://www.terraform.io/docs/commands/taint.html) can be used to produce the action on the next run. FAIL: testdata/scripts/schema-json/migrate/time_provider_multiple_runs.txtar:13: templates/index.md.tmpl and exp-templates/index.md.tmpl differ ``` To fix this, changed the internal logic from opening the template file multiple times with `os.O_APPEND` to opening the template file once with only `os.O_WRONLY|os.O_CREATE` and passing the file handle around instead.
1 parent 0d49b43 commit 8a55c41

File tree

3 files changed

+1001
-38
lines changed

3 files changed

+1001
-38
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
kind: BUG FIXES
2+
body: 'migrate: Ensured idempotency of template files when command is ran multiple
3+
times'
4+
time: 2024-04-26T09:50:42.75277-04:00
5+
custom:
6+
Issue: "364"

0 commit comments

Comments
 (0)