Skip to content

Conversation

@EspenAlbert
Copy link
Collaborator

Description

Uses delete_on_create_timeout with default=true support across TPF resources

Link to any related issue(s): CLOUDP-343190

Type of change:

  • Bug fix (non-breaking change which fixes an issue). Please, add the "bug" label to the PR.
  • New feature (non-breaking change which adds functionality). Please, add the "enhancement" label to the PR. A migration guide must be created or updated if the new feature will go in a major version.
  • Breaking change (fix or feature that would cause existing functionality to not work as expected). Please, add the "breaking change" label to the PR. A migration guide must be created or updated.
  • This change requires a documentation update
  • Documentation fix/enhancement

Required Checklist:

  • I have signed the MongoDB CLA
  • I have read the contributing guides
  • I have checked that this change does not generate any credentials and that they are NOT accidentally logged anywhere.
  • I have added tests that prove my fix is effective or that my feature works per HashiCorp requirements
  • I have added any necessary documentation (if appropriate)
  • I have run make fmt and formatted my code
  • If changes include deprecations or removals I have added appropriate changelog entries.
  • If changes include removal or addition of 3rd party GitHub actions, I updated our internal document. Reach out to the APIx Integration slack channel to get access to the internal document.

Further comments

Config: updateStepNoWait,
Check: updateStep.Check,
},
// Changes: skip_wait_on_update true -> null
Copy link
Collaborator Author

@EspenAlbert EspenAlbert Oct 23, 2025

Choose a reason for hiding this comment

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

This summarizes the change in behavior well.
The old way allowed updating to null while the new way keeps the state value if removed (UseStateForUnknown behavior).

This is why we need the ImportStateVerifyIgnore: []string{"delete_on_create_timeout"} in import as it will not be present in the state after import.
Because once the value has been used in create it remains unchanged.

Note: A fresh import and setting delete_on_create_timeout in the config will raise an update error saying it cannot be updated.

Config: configWithTimeout(timeoutsStrLongFalse),
Check: resource.TestCheckResourceAttr(resourceID, "delete_on_create_timeout", "false"),
Config: configWithTimeout(timeoutsStrLongFalse),
ExpectError: regexp.MustCompile("delete_on_create_timeout cannot be updated or set after import .*"),
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Example of error message when trying to update

@EspenAlbert EspenAlbert marked this pull request as ready for review October 24, 2025 08:45
@EspenAlbert EspenAlbert requested a review from a team as a code owner October 24, 2025 08:45
Copilot AI review requested due to automatic review settings October 24, 2025 08:45
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR refactors the delete_on_create_timeout attribute across multiple TPF (Terraform Plugin Framework) resources to use a new plan modifier CreateOnlyBoolWithDefault(true) that provides a default value of true, making the attribute computed. This standardizes the behavior across resources including stream processors, search deployments, push-based log exports, encryption-at-rest private endpoints, and advanced clusters.

Key Changes:

  • Replaced customplanmodifier.CreateOnly() with customplanmodifier.CreateOnlyBoolWithDefault(true) for the delete_on_create_timeout attribute
  • Added Computed: true to the delete_on_create_timeout schema attribute
  • Removed the ResolveDeleteOnCreateTimeout helper function, directly using ValueBool() instead

Reviewed Changes

Copilot reviewed 15 out of 15 changed files in this pull request and generated no comments.

Show a summary per file
File Description
internal/service/streamprocessor/resource_schema.go Updated schema to make delete_on_create_timeout computed with default true
internal/service/streamprocessor/resource.go Changed to use ValueBool() directly instead of ResolveDeleteOnCreateTimeout
internal/service/streamprocessor/resource_test.go Added delete_on_create_timeout to import verify ignore list and refactored import steps
internal/service/searchdeployment/resource_schema.go Updated schema to make delete_on_create_timeout computed with default true
internal/service/searchdeployment/resource.go Changed to use ValueBool() directly instead of ResolveDeleteOnCreateTimeout
internal/service/searchdeployment/resource_test.go Updated tests to handle delete_on_create_timeout as computed attribute
internal/service/pushbasedlogexport/resource_schema.go Updated schema to make delete_on_create_timeout computed with default true
internal/service/pushbasedlogexport/resource.go Changed to use ValueBool() directly instead of ResolveDeleteOnCreateTimeout
internal/service/pushbasedlogexport/resource_test.go Added delete_on_create_timeout to import verify ignore list
internal/service/encryptionatrestprivateendpoint/resource_schema.go Updated schema to make delete_on_create_timeout computed with default true
internal/service/encryptionatrestprivateendpoint/resource.go Changed to use ValueBool() directly instead of ResolveDeleteOnCreateTimeout
internal/service/encryptionatrestprivateendpoint/resource_test.go Added delete_on_create_timeout to import verify ignore list and refactored import steps
internal/service/advancedcluster/schema.go Updated schema to make delete_on_create_timeout computed with default true
internal/service/advancedcluster/resource.go Changed to use ValueBool() directly instead of ResolveDeleteOnCreateTimeout
internal/common/cleanup/handle_timeout.go Removed ResolveDeleteOnCreateTimeout helper function

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

projectID, clusterName := waitParams.ProjectID, waitParams.ClusterName
clusterDetailStr := fmt.Sprintf("Cluster name %s (project_id=%s).", clusterName, projectID)
if cleanup.ResolveDeleteOnCreateTimeout(plan.DeleteOnCreateTimeout) {
if plan.DeleteOnCreateTimeout.ValueBool() {
Copy link
Collaborator

Choose a reason for hiding this comment

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

can plan.DeleteOnCreateTimeout be null?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

No, it has a default value of true

},
"delete_on_create_timeout": schema.BoolAttribute{
Optional: true,
Computed: true,
Copy link
Collaborator

Choose a reason for hiding this comment

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

I see we're adding computed but we're also adding the plan modifier. I would like certainty that we're not adding one more field to the output plan that says known after apply. We're getting a few GH issues lately talking about the plan verbosity

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Actually this PR improves that behavior by showing the planned true value (see doc)

testLogDestConfig = connectionConfig{connectionType: connTypeTestLog, pipelineStepIsSource: false}
)

func importStep() resource.TestStep {
Copy link
Collaborator

Choose a reason for hiding this comment

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

Can be a var as well. Same as in resource_database_user_test.go

Copy link
Member

@lantoli lantoli Oct 27, 2025

Choose a reason for hiding this comment

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

i normally prefer functions to global vars, which is safer in case the var is modified later and might affect other tests. (some exceptions apply, e.g. for an array of strings, if we're sure they're not modified)

@EspenAlbert EspenAlbert merged commit 6839dd0 into master Oct 27, 2025
50 checks passed
@EspenAlbert EspenAlbert deleted the CLOUDP-343190_tpf_delete_on_create_with_default branch October 27, 2025 08:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants