Skip to content

Commit b39c839

Browse files
authored
Suppress diff for databricks_group.external_id (#1100)
Fixes #1099
1 parent 7ec5a01 commit b39c839

File tree

3 files changed

+59
-25
lines changed

3 files changed

+59
-25
lines changed

CHANGELOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
## 0.4.9
44

55
* Prevent creation of `databricks_group` with `users` and `admins` reserved names ([#1089](https://github.com/databrickslabs/terraform-provider-databricks/issues/1089)).
6-
* Shared job cluster functionality added. ([#1082](https://github.com/databrickslabs/terraform-provider-databricks/issues/1082))
6+
* Added support for shared clusters in multi-task `databricks_job` ([#1082](https://github.com/databrickslabs/terraform-provider-databricks/issues/1082)).
7+
* Added diff suppression for `external_id` in `databricks_group` ([#1099](https://github.com/databrickslabs/terraform-provider-databricks/issues/1099)).
8+
* Various documentation improvements.
79

810
## 0.4.8
911

scim/acceptance/group_test.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,56 @@
11
package acceptance
22

33
import (
4+
"context"
45
"fmt"
56
"os"
67

8+
"github.com/databrickslabs/terraform-provider-databricks/common"
79
"github.com/databrickslabs/terraform-provider-databricks/internal/acceptance"
10+
"github.com/databrickslabs/terraform-provider-databricks/qa"
11+
"github.com/databrickslabs/terraform-provider-databricks/scim"
812

913
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
1014
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1115

1216
"testing"
1317
)
1418

19+
// https://github.com/databrickslabs/terraform-provider-databricks/issues/1099
20+
func TestAccGroupsExternalIdAndScimProvisioning(t *testing.T) {
21+
if _, ok := os.LookupEnv("CLOUD_ENV"); !ok {
22+
t.Skip("Acceptance tests skipped unless env 'CLOUD_ENV' is set")
23+
}
24+
name := qa.RandomName("tfgroup")
25+
acceptance.AccTest(t, resource.TestCase{
26+
Steps: []resource.TestStep{
27+
{
28+
Config: `resource "databricks_group" "this" {
29+
display_name = "` + name + `"
30+
allow_cluster_create = true
31+
}`,
32+
Check: acceptance.ResourceCheck("databricks_group.this",
33+
func(ctx context.Context, client *common.DatabricksClient, id string) error {
34+
groupsAPI := scim.NewGroupsAPI(ctx, client)
35+
group, err := groupsAPI.Read(id)
36+
if err != nil {
37+
return err
38+
}
39+
// external SCIM change
40+
return groupsAPI.UpdateNameAndEntitlements(
41+
id, group.DisplayName, qa.RandomName("ext-id"), group.Entitlements)
42+
}),
43+
},
44+
{
45+
Config: `resource "databricks_group" "this" {
46+
display_name = "` + name + `"
47+
allow_cluster_create = true
48+
}`,
49+
},
50+
},
51+
})
52+
}
53+
1554
func TestAccGroupResource(t *testing.T) {
1655
if _, ok := os.LookupEnv("CLOUD_ENV"); !ok {
1756
t.Skip("Acceptance tests skipped unless env 'CLOUD_ENV' is set")

scim/resource_group.go

Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -12,35 +12,28 @@ import (
1212

1313
// ResourceGroup manages user groups
1414
func ResourceGroup() *schema.Resource {
15-
groupSchema := map[string]*schema.Schema{
16-
"display_name": {
17-
Type: schema.TypeString,
18-
ValidateDiagFunc: validation.ToDiagFunc(
19-
validation.StringNotInSlice(
20-
[]string{"users", "admins"}, false)),
21-
Required: true,
22-
ForceNew: true,
23-
},
24-
"url": {
25-
Type: schema.TypeString,
26-
Computed: true,
27-
},
28-
"external_id": {
29-
Type: schema.TypeString,
30-
Optional: true,
31-
ForceNew: true,
32-
},
33-
"force": {
34-
Type: schema.TypeBool,
35-
Optional: true,
36-
},
15+
type entity struct {
16+
DisplayName string `json:"display_name" tf:"force_new"`
17+
ExternalID string `json:"external_id,omitempty" tf:"force_new,suppress_diff"`
18+
URL string `json:"url,omitempty" tf:"computed"`
3719
}
20+
groupSchema := common.StructToSchema(entity{},
21+
func(m map[string]*schema.Schema) map[string]*schema.Schema {
22+
addEntitlementsToSchema(&m)
23+
// https://github.com/databrickslabs/terraform-provider-databricks/issues/1089
24+
m["display_name"].ValidateDiagFunc = validation.ToDiagFunc(
25+
validation.StringNotInSlice([]string{"users", "admins"}, false))
26+
m["force"] = &schema.Schema{
27+
Type: schema.TypeBool,
28+
Optional: true,
29+
}
30+
return m
31+
})
3832
addEntitlementsToSchema(&groupSchema)
3933
return common.Resource{
4034
Create: func(ctx context.Context, d *schema.ResourceData, c *common.DatabricksClient) error {
41-
groupName := d.Get("display_name").(string)
4235
g := Group{
43-
DisplayName: groupName,
36+
DisplayName: d.Get("display_name").(string),
4437
Entitlements: readEntitlementsFromData(d),
4538
ExternalID: d.Get("external_id").(string),
4639
}

0 commit comments

Comments
 (0)