-
Notifications
You must be signed in to change notification settings - Fork 367
/
data_cluster_policy.go
64 lines (60 loc) · 2.25 KB
/
data_cluster_policy.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package policies
import (
"context"
"log"
"github.com/databricks/databricks-sdk-go"
"github.com/databricks/terraform-provider-databricks/common"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)
// DataSourceClusterPolicy returns information about cluster policy specified by name
func DataSourceClusterPolicy() common.Resource {
resource := common.WorkspaceData(func(ctx context.Context, data *struct {
Id string `json:"id,omitempty" tf:"computed"`
Name string `json:"name,omitempty" tf:"computed"`
Definition string `json:"definition,omitempty" tf:"computed"`
Description string `json:"description,omitempty" tf:"computed"`
PolicyFamilyId string `json:"policy_family_id,omitempty" tf:"computed"`
PolicyFamilyDefinitionOverrides string `json:"policy_family_definition_overrides,omitempty" tf:"computed"`
IsDefault bool `json:"is_default,omitempty" tf:"computed"`
MaxClustersPerUser int `json:"max_clusters_per_user,omitempty" tf:"computed"`
}, w *databricks.WorkspaceClient) error {
policy, err := w.ClusterPolicies.GetByName(ctx, data.Name)
if err != nil {
return err
}
data.Id = policy.PolicyId
data.Definition = policy.Definition
data.Description = policy.Description
data.PolicyFamilyId = policy.PolicyFamilyId
data.PolicyFamilyDefinitionOverrides = policy.PolicyFamilyDefinitionOverrides
data.IsDefault = policy.IsDefault
data.MaxClustersPerUser = int(policy.MaxClustersPerUser)
return nil
})
resource.SchemaVersion = 1
resource.StateUpgraders = []schema.StateUpgrader{
{
Type: resource.ToResource().CoreConfigSchema().ImpliedType(),
Version: 0,
Upgrade: removeZeroMaxClustersPerUser,
},
}
return resource
}
func removeZeroMaxClustersPerUser(ctx context.Context, rawState map[string]interface{}, meta interface{}) (map[string]interface{}, error) {
newState := map[string]any{}
for k, v := range rawState {
switch k {
case "max_clusters_per_user":
vv, ok := v.(int)
if !ok || vv == 0 {
log.Printf("[INFO] remove zero max_clusters_per_user")
continue
}
newState[k] = v
default:
newState[k] = v
}
}
return newState, nil
}