diff --git a/NEXT_CHANGELOG.md b/NEXT_CHANGELOG.md index 004eb2efe5..6c8c134be1 100644 --- a/NEXT_CHANGELOG.md +++ b/NEXT_CHANGELOG.md @@ -8,6 +8,8 @@ ### Bug Fixes +* Fix `databricks_pipeline` so that `photon`, `serverless`, `continuous` and `development` set to `false` are sent in the create/update request if specified ([#5806](https://github.com/databricks/terraform-provider-databricks/pull/5806)). + ### Documentation ### Exporter diff --git a/pipelines/resource_pipeline.go b/pipelines/resource_pipeline.go index 65ff9ae879..c5ccbb8d7f 100644 --- a/pipelines/resource_pipeline.go +++ b/pipelines/resource_pipeline.go @@ -21,6 +21,12 @@ import ( // DefaultTimeout is the default amount of time that Terraform will wait when creating, updating and deleting pipelines. const DefaultTimeout = 20 * time.Minute +// booleanForceSendFields are optional boolean fields whose zero value (false) +// is meaningful and must be sent to the platform. Without ForceSendFields the +// Go SDK omits them, so an explicit `photon = false` (etc.) would be dropped +// and the platform would apply its own default instead. +var booleanForceSendFields = []string{"photon", "serverless", "continuous", "development"} + func adjustForceSendFields(clusterList *[]pipelines.PipelineCluster) { for i := range *clusterList { cluster := &((*clusterList)[i]) @@ -39,6 +45,7 @@ func Create(w *databricks.WorkspaceClient, ctx context.Context, d *schema.Resour var createPipelineRequest createPipelineRequestStruct common.DataToStructPointer(d, pipelineSchema, &createPipelineRequest) adjustForceSendFields(&createPipelineRequest.Clusters) + common.SetForceSendFields(&createPipelineRequest.CreatePipeline, d, booleanForceSendFields) createdPipeline, err := w.Pipelines.Create(ctx, createPipelineRequest.CreatePipeline) if err != nil { @@ -71,6 +78,7 @@ func Update(w *databricks.WorkspaceClient, ctx context.Context, d *schema.Resour common.DataToStructPointer(d, pipelineSchema, &updatePipelineRequest) updatePipelineRequest.EditPipeline.PipelineId = d.Id() adjustForceSendFields(&updatePipelineRequest.Clusters) + common.SetForceSendFields(&updatePipelineRequest.EditPipeline, d, booleanForceSendFields) err := w.Pipelines.Update(ctx, updatePipelineRequest.EditPipeline) if err != nil { return err diff --git a/pipelines/resource_pipeline_test.go b/pipelines/resource_pipeline_test.go index 7cd5c79cbc..57db98df3d 100644 --- a/pipelines/resource_pipeline_test.go +++ b/pipelines/resource_pipeline_test.go @@ -47,6 +47,8 @@ var createRequest = pipelines.CreatePipeline{ }, Edition: "ADVANCED", Channel: "CURRENT", + // TestResourcePipelineCreate sets continuous = false in its HCL, so it is force-sent. + ForceSendFields: []string{"Continuous"}, } var updateRequest = pipelines.EditPipeline{