Skip to content

Commit ebb2bcb

Browse files
authored
chore: optimize (#187)
1 parent 59bb26d commit ebb2bcb

11 files changed

Lines changed: 37 additions & 0 deletions

client/client.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,9 @@ func NewClient(url, email, password string) (api.Client, error) {
108108
return nil, errors.Wrapf(err, "failed to get actuator info")
109109
}
110110
c.workspaceName = actuatorResp.Msg.GetWorkspace()
111+
if c.workspaceName == "" {
112+
return nil, errors.New("actuator returned empty workspace name; cannot initialize provider")
113+
}
111114

112115
return &c, nil
113116
}

provider/data_source_database_list.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ func dataSourceDatabaseList() *schema.Resource {
2525
Optional: true,
2626
Computed: true,
2727
ValidateDiagFunc: internal.ResourceNameValidation(
28+
// allow empty to default to workspace
29+
"^$",
2830
fmt.Sprintf("^%s%s$", internal.WorkspaceNamePrefix, internal.ResourceIDPattern),
2931
fmt.Sprintf("^%s%s$", internal.InstanceNamePrefix, internal.ResourceIDPattern),
3032
fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern),

provider/data_source_iam_policy.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ func dataSourceIAMPolicy() *schema.Resource {
2424
Optional: true,
2525
Computed: true,
2626
ValidateDiagFunc: internal.ResourceNameValidation(
27+
// allow empty to default to workspace
28+
"^$",
2729
// workspace policy
2830
fmt.Sprintf("^%s%s$", internal.WorkspaceNamePrefix, internal.ResourceIDPattern),
2931
// project policy

provider/data_source_policy.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ func dataSourcePolicy() *schema.Resource {
2626
Optional: true,
2727
Computed: true,
2828
ValidateDiagFunc: internal.ResourceNameValidation(
29+
// allow empty to default to workspace
30+
"^$",
2931
// workspace policy
3032
fmt.Sprintf("^%s%s$", internal.WorkspaceNamePrefix, internal.ResourceIDPattern),
3133
// environment policy

provider/data_source_policy_list.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ func dataSourcePolicyList() *schema.Resource {
2525
Optional: true,
2626
Computed: true,
2727
ValidateDiagFunc: internal.ResourceNameValidation(
28+
// allow empty to default to workspace
29+
"^$",
2830
// workspace policy
2931
fmt.Sprintf("^%s%s$", internal.WorkspaceNamePrefix, internal.ResourceIDPattern),
3032
// environment policy

provider/data_source_service_account_list.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ func dataSourceServiceAccountList() *schema.Resource {
2424
Computed: true,
2525
Description: "The parent resource. Format: projects/{project} for project-level, workspaces/{workspace id} for workspace-level. Defaults to the workspace if not specified.",
2626
ValidateDiagFunc: internal.ResourceNameValidation(
27+
// allow empty to default to workspace
28+
"^$",
2729
fmt.Sprintf("^%s%s$", internal.WorkspaceNamePrefix, internal.ResourceIDPattern),
2830
fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern),
2931
),

provider/data_source_workload_identity_list.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ func dataSourceWorkloadIdentityList() *schema.Resource {
2424
Computed: true,
2525
Description: "The parent resource. Format: projects/{project} for project-level, workspaces/{workspace id} for workspace-level. Defaults to the workspace if not specified.",
2626
ValidateDiagFunc: internal.ResourceNameValidation(
27+
// allow empty to default to workspace
28+
"^$",
2729
fmt.Sprintf("^%s%s$", internal.WorkspaceNamePrefix, internal.ResourceIDPattern),
2830
fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern),
2931
),

provider/resource_iam_policy.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ func resourceIAMPolicy() *schema.Resource {
3939
Optional: true,
4040
Computed: true,
4141
ValidateDiagFunc: internal.ResourceNameValidation(
42+
// allow empty to default to workspace
43+
"^$",
4244
// workspace policy
4345
fmt.Sprintf("^%s%s$", internal.WorkspaceNamePrefix, internal.ResourceIDPattern),
4446
// project policy

provider/resource_policy.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ func resourcePolicy() *schema.Resource {
4747
Optional: true,
4848
Computed: true,
4949
ValidateDiagFunc: internal.ResourceNameValidation(
50+
// allow empty to default to workspace
51+
"^$",
5052
// workspace policy
5153
fmt.Sprintf("^%s%s$", internal.WorkspaceNamePrefix, internal.ResourceIDPattern),
5254
// environment policy
@@ -100,6 +102,17 @@ func resourcePolicyRead(ctx context.Context, d *schema.ResourceData, m interface
100102
c := m.(api.Client)
101103
policyName := d.Id()
102104

105+
// Self-heal legacy dirty state where the id was written with an empty parent
106+
// (e.g. "/policies/MASKING_RULE") because c.GetWorkspaceName() was empty at create time.
107+
if strings.HasPrefix(policyName, "/"+internal.PolicyNamePrefix) {
108+
ws := c.GetWorkspaceName()
109+
if ws == "" {
110+
return diag.Errorf("policy id %q has empty parent and workspace name is unavailable; re-import the resource", policyName)
111+
}
112+
policyName = ws + policyName
113+
d.SetId(policyName)
114+
}
115+
103116
policy, err := c.GetPolicy(ctx, policyName)
104117
if err != nil {
105118
// Check if the resource was deleted outside of Terraform

provider/resource_service_account.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ func resourceServiceAccount() *schema.Resource {
3232
ForceNew: true,
3333
Description: "The parent resource. Format: projects/{project} for project-level, workspaces/{workspace id} for workspace-level. Defaults to the workspace if not specified.",
3434
ValidateDiagFunc: internal.ResourceNameValidation(
35+
// allow empty to default to workspace
36+
"^$",
3537
fmt.Sprintf("^%s%s$", internal.WorkspaceNamePrefix, internal.ResourceIDPattern),
3638
fmt.Sprintf("^%s%s$", internal.ProjectNamePrefix, internal.ResourceIDPattern),
3739
),

0 commit comments

Comments
 (0)