diff --git a/NEXT_CHANGELOG.md b/NEXT_CHANGELOG.md index 8dda24d61d..035a43823d 100644 --- a/NEXT_CHANGELOG.md +++ b/NEXT_CHANGELOG.md @@ -11,6 +11,8 @@ ### Bug Fixes +* Fix `databricks_catalog` name update using NewName field ([#5205](https://github.com/databricks/terraform-provider-databricks/pull/5205)) + ### Documentation ### Exporter diff --git a/catalog/resource_catalog.go b/catalog/resource_catalog.go index eaf705fa8e..722c3dacb8 100644 --- a/catalog/resource_catalog.go +++ b/catalog/resource_catalog.go @@ -136,10 +136,15 @@ func ResourceCatalog() common.Resource { common.DataToStructPointer(d, catalogSchema, &updateCatalogRequest) updateCatalogRequest.Name = d.Id() + if d.HasChange("name") { + updateCatalogRequest.NewName = d.Get("name").(string) + } + if d.HasChange("owner") { _, err = w.Catalogs.Update(ctx, catalog.UpdateCatalog{ - Name: updateCatalogRequest.Name, - Owner: updateCatalogRequest.Owner, + Name: updateCatalogRequest.Name, + NewName: updateCatalogRequest.NewName, + Owner: updateCatalogRequest.Owner, }) if err != nil { return err @@ -164,7 +169,6 @@ func ResourceCatalog() common.Resource { } } ci, err := w.Catalogs.Update(ctx, updateCatalogRequest) - if err != nil { if d.HasChange("owner") { // Rollback diff --git a/catalog/resource_catalog_test.go b/catalog/resource_catalog_test.go index b82f394465..808a7c2ee8 100644 --- a/catalog/resource_catalog_test.go +++ b/catalog/resource_catalog_test.go @@ -842,3 +842,41 @@ func TestCatalogSuppressCaseSensitivity(t *testing.T) { `, }.ApplyNoError(t) } + +func TestUpdateCatalogName(t *testing.T) { + qa.ResourceFixture{ + MockWorkspaceClientFunc: func(w *mocks.MockWorkspaceClient) { + w.GetMockMetastoresAPI().EXPECT().Current(mock.Anything).Return(&catalog.MetastoreAssignment{ + MetastoreId: "d", + }, nil) + e := w.GetMockCatalogsAPI().EXPECT() + e.Update(mock.Anything, catalog.UpdateCatalog{ + Name: "old_catalog_name", + NewName: "new_catalog_name", + Comment: "c", + }).Return(&catalog.CatalogInfo{ + Name: "new_catalog_name", + Comment: "c", + }, nil) + e.GetByName(mock.Anything, "new_catalog_name").Return(&catalog.CatalogInfo{ + Name: "new_catalog_name", + Comment: "c", + }, nil) + }, + Resource: ResourceCatalog(), + Update: true, + ID: "old_catalog_name", + InstanceState: map[string]string{ + "metastore_id": "d", + "name": "old_catalog_name", + "comment": "c", + }, + HCL: ` + name = "new_catalog_name" + comment = "c" + `, + }.ApplyAndExpectData(t, map[string]any{ + "name": "new_catalog_name", + "comment": "c", + }) +}