Skip to content

Commit 0b183af

Browse files
authored
Fix databricks_mws_private_access_settings creation (#3439)
* fix creation of `databricks_mws_private_access_settings` * more fix * doc * remove dup
1 parent 1bf97ef commit 0b183af

File tree

3 files changed

+49
-18
lines changed

3 files changed

+49
-18
lines changed

docs/resources/mws_private_access_settings.md

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ The `databricks_mws_private_access_settings.pas.private_access_settings_id` can
2929
```hcl
3030
resource "databricks_mws_workspaces" "this" {
3131
provider = databricks.mws
32-
account_id = var.databricks_account_id
3332
aws_region = var.region
3433
workspace_name = local.prefix
3534
credentials_id = databricks_mws_credentials.this.credentials_id
@@ -48,7 +47,6 @@ resource "databricks_mws_workspaces" "this" {
4847
```hcl
4948
resource "databricks_mws_workspaces" "this" {
5049
provider = databricks.mws
51-
account_id = var.databricks_account_id
5250
workspace_name = "gcp-workspace"
5351
location = var.subnet_region
5452
cloud_resource_container {
@@ -71,7 +69,6 @@ resource "databricks_mws_workspaces" "this" {
7169

7270
The following arguments are available:
7371

74-
* `account_id` - Account Id that could be found in the Accounts Console for [AWS](https://accounts.cloud.databricks.com/) or [GCP](https://accounts.gcp.databricks.com/)
7572
* `private_access_settings_name` - Name of Private Access Settings in Databricks Account
7673
* `public_access_enabled` (Boolean, Optional, `false` by default on AWS, `true` by default on GCP) - If `true`, the [databricks_mws_workspaces](mws_workspaces.md) can be accessed over the [databricks_mws_vpc_endpoint](mws_vpc_endpoint.md) as well as over the public network. In such a case, you could also configure an [databricks_ip_access_list](ip_access_list.md) for the workspace, to restrict the source networks that could be used to access it over the public network. If `false`, the workspace can be accessed only over VPC endpoints, and not over the public network. Once explicitly set, this field becomes mandatory.
7774
* `region` - Region of AWS VPC or the Google Cloud VPC network

mws/resource_mws_private_access_settings.go

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,36 +12,37 @@ import (
1212
)
1313

1414
func ResourceMwsPrivateAccessSettings() common.Resource {
15-
s := common.StructToSchema(provisioning.PrivateAccessSettings{}, func(s map[string]*schema.Schema) map[string]*schema.Schema {
16-
// nolint
17-
s["private_access_settings_name"].ValidateFunc = validation.StringLenBetween(4, 256)
18-
common.SetRequired(s["private_access_settings_name"])
19-
common.SetRequired(s["region"])
15+
pasSchema := common.StructToSchema(provisioning.PrivateAccessSettings{}, func(m map[string]*schema.Schema) map[string]*schema.Schema {
16+
common.CustomizeSchemaPath(m, "private_access_settings_name").SetValidateFunc(validation.StringLenBetween(4, 256))
17+
common.CustomizeSchemaPath(m, "private_access_settings_name").SetRequired()
2018

21-
s["private_access_level"].ValidateFunc = validation.StringInSlice([]string{"ACCOUNT", "ENDPOINT"}, true)
22-
common.SetDefault(s["private_access_level"], "ACCOUNT")
19+
common.CustomizeSchemaPath(m, "region").SetRequired()
2320

24-
s["private_access_settings_id"].Computed = true
21+
common.CustomizeSchemaPath(m, "private_access_settings_id").SetComputed()
2522

26-
common.AddAccountIdField(s)
27-
return s
23+
common.CustomizeSchemaPath(m, "private_access_level").SetValidateFunc(validation.StringInSlice([]string{"ACCOUNT", "ENDPOINT"}, true))
24+
common.CustomizeSchemaPath(m, "private_access_level").SetDefault("ACCOUNT")
25+
26+
common.AddAccountIdField(m)
27+
return m
2828
})
2929
p := common.NewPairSeparatedID("account_id", "private_access_settings_id", "/")
3030
return common.Resource{
31-
Schema: s,
31+
Schema: pasSchema,
3232
Create: func(ctx context.Context, d *schema.ResourceData, c *common.DatabricksClient) error {
3333
a, err := c.AccountClientWithAccountIdFromConfig(d)
3434
if err != nil {
3535
return err
3636
}
3737
var pas provisioning.UpsertPrivateAccessSettingsRequest
38-
common.DataToStructPointer(d, s, &pas)
38+
common.DataToStructPointer(d, pasSchema, &pas)
3939
common.SetForceSendFields(&pas, d, []string{"public_access_enabled"})
4040
res, err := a.PrivateAccess.Create(ctx, pas)
4141
if err != nil {
4242
return err
4343
}
4444
d.Set("private_access_settings_id", res.PrivateAccessSettingsId)
45+
d.Set("account_id", res.AccountId)
4546
p.Pack(d)
4647
return nil
4748
},
@@ -54,15 +55,15 @@ func ResourceMwsPrivateAccessSettings() common.Resource {
5455
if err != nil {
5556
return err
5657
}
57-
return common.StructToData(pas, s, d)
58+
return common.StructToData(pas, pasSchema, d)
5859
},
5960
Update: func(ctx context.Context, d *schema.ResourceData, c *common.DatabricksClient) error {
6061
a, pasID, err := c.AccountClientWithAccountIdFromPair(d, p)
6162
if err != nil {
6263
return err
6364
}
6465
var pas provisioning.UpsertPrivateAccessSettingsRequest
65-
common.DataToStructPointer(d, s, &pas)
66+
common.DataToStructPointer(d, pasSchema, &pas)
6667
common.SetForceSendFields(&pas, d, []string{"public_access_enabled"})
6768
pas.PrivateAccessSettingsId = pasID
6869
return a.PrivateAccess.Replace(ctx, pas)

mws/resource_mws_private_access_settings_test.go

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ func TestResourcePASCreate(t *testing.T) {
2424
PrivateAccessLevel: "ACCOUNT",
2525
}).Return(&provisioning.PrivateAccessSettings{
2626
PrivateAccessSettingsId: "pas_id",
27+
AccountId: "abc",
2728
}, nil)
2829
e.GetByPrivateAccessSettingsId(mock.Anything, "pas_id").Return(&provisioning.PrivateAccessSettings{
2930
PrivateAccessSettingsId: "pas_id",
@@ -43,6 +44,36 @@ func TestResourcePASCreate(t *testing.T) {
4344
assert.Equal(t, "abc/pas_id", d.Id())
4445
}
4546

47+
func TestResourcePASCreateWithoutAccountId(t *testing.T) {
48+
d, err := qa.ResourceFixture{
49+
MockAccountClientFunc: func(a *mocks.MockAccountClient) {
50+
e := a.GetMockPrivateAccessAPI().EXPECT()
51+
e.Create(mock.Anything, provisioning.UpsertPrivateAccessSettingsRequest{
52+
Region: "ar",
53+
PrivateAccessSettingsName: "pas_name",
54+
PrivateAccessLevel: "ACCOUNT",
55+
}).Return(&provisioning.PrivateAccessSettings{
56+
PrivateAccessSettingsId: "pas_id",
57+
AccountId: "abc",
58+
}, nil)
59+
e.GetByPrivateAccessSettingsId(mock.Anything, "pas_id").Return(&provisioning.PrivateAccessSettings{
60+
PrivateAccessSettingsId: "pas_id",
61+
Region: "ar",
62+
PrivateAccessSettingsName: "pas_name",
63+
}, nil)
64+
},
65+
Resource: ResourceMwsPrivateAccessSettings(),
66+
AccountID: "abc",
67+
HCL: `
68+
private_access_settings_name = "pas_name"
69+
region = "ar"
70+
`,
71+
Create: true,
72+
}.Apply(t)
73+
assert.NoError(t, err)
74+
assert.Equal(t, "abc/pas_id", d.Id())
75+
}
76+
4677
func TestResourcePASCreate_PublicAccessDisabled(t *testing.T) {
4778
d, err := qa.ResourceFixture{
4879
MockAccountClientFunc: func(a *mocks.MockAccountClient) {
@@ -55,6 +86,7 @@ func TestResourcePASCreate_PublicAccessDisabled(t *testing.T) {
5586
ForceSendFields: []string{"PublicAccessEnabled"},
5687
}).Return(&provisioning.PrivateAccessSettings{
5788
PrivateAccessSettingsId: "pas_id",
89+
AccountId: "abc",
5890
}, nil)
5991
e.GetByPrivateAccessSettingsId(mock.Anything, "pas_id").Return(&provisioning.PrivateAccessSettings{
6092
PrivateAccessSettingsId: "pas_id",
@@ -63,7 +95,8 @@ func TestResourcePASCreate_PublicAccessDisabled(t *testing.T) {
6395
ForceSendFields: []string{"PublicAccessEnabled"},
6496
}, nil)
6597
},
66-
Resource: ResourceMwsPrivateAccessSettings(),
98+
Resource: ResourceMwsPrivateAccessSettings(),
99+
AccountID: "abc",
67100
HCL: `
68101
account_id = "abc"
69102
private_access_settings_name = "pas_name"

0 commit comments

Comments
 (0)