66 "github.com/databricks/databricks-sdk-go"
77 "github.com/databricks/databricks-sdk-go/service/compute"
88 "github.com/databricks/terraform-provider-databricks/common"
9+ "github.com/hashicorp/go-cty/cty"
910
1011 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1112)
@@ -24,37 +25,45 @@ func isBuiltinPolicyFamily(ctx context.Context, w *databricks.WorkspaceClient, f
2425 return false , nil
2526}
2627
27- // ResourceClusterPolicy ...
28- func ResourceClusterPolicy () common.Resource {
29- s := common .StructToSchema (
30- compute.CreatePolicy {},
31- func (m map [string ]* schema.Schema ) map [string ]* schema.Schema {
32- m ["policy_id" ] = & schema.Schema {
33- Type : schema .TypeString ,
34- Computed : true ,
35- }
36- m ["definition" ].ConflictsWith = []string {"policy_family_definition_overrides" , "policy_family_id" }
37- m ["definition" ].Computed = true
38- m ["definition" ].DiffSuppressFunc = common .SuppressDiffWhitespaceChange
28+ var rcpSchema = common .StructToSchema (
29+ compute.CreatePolicy {},
30+ func (m map [string ]* schema.Schema ) map [string ]* schema.Schema {
31+ m ["policy_id" ] = & schema.Schema {
32+ Type : schema .TypeString ,
33+ Computed : true ,
34+ }
35+ m ["definition" ].ConflictsWith = []string {"policy_family_definition_overrides" , "policy_family_id" }
36+ m ["definition" ].Computed = true
37+ m ["definition" ].DiffSuppressFunc = common .SuppressDiffWhitespaceChange
3938
40- m ["policy_family_definition_overrides" ].ConflictsWith = []string {"definition" }
41- m ["policy_family_definition_overrides" ].DiffSuppressFunc = common .SuppressDiffWhitespaceChange
42- m ["policy_family_id" ].ConflictsWith = []string {"definition" }
43- m ["policy_family_definition_overrides" ].RequiredWith = []string {"policy_family_id" }
39+ m ["policy_family_definition_overrides" ].ConflictsWith = []string {"definition" }
40+ m ["policy_family_definition_overrides" ].DiffSuppressFunc = common .SuppressDiffWhitespaceChange
41+ m ["policy_family_id" ].ConflictsWith = []string {"definition" }
42+ m ["policy_family_definition_overrides" ].RequiredWith = []string {"policy_family_id" }
4443
45- return m
46- })
44+ return m
45+ })
4746
47+ // ResourceClusterPolicy ...
48+ func ResourceClusterPolicy () common.Resource {
4849 return common.Resource {
49- Schema : s ,
50+ Schema : rcpSchema ,
51+ SchemaVersion : 1 ,
52+ StateUpgraders : []schema.StateUpgrader {
53+ {
54+ Type : rcpSchemaV0 (),
55+ Version : 0 ,
56+ Upgrade : removeZeroMaxClustersPerUser ,
57+ },
58+ },
5059 Create : func (ctx context.Context , d * schema.ResourceData , c * common.DatabricksClient ) error {
5160 w , err := c .WorkspaceClient ()
5261 if err != nil {
5362 return err
5463 }
5564
5665 var request compute.CreatePolicy
57- common .DataToStructPointer (d , s , & request )
66+ common .DataToStructPointer (d , rcpSchema , & request )
5867
5968 var clusterPolicy * compute.CreatePolicyResponse
6069 if request .PolicyFamilyId != "" {
@@ -69,7 +78,7 @@ func ResourceClusterPolicy() common.Resource {
6978 }
7079 clusterPolicy = & compute.CreatePolicyResponse {PolicyId : resp .PolicyId }
7180 var editRequest compute.EditPolicy
72- common .DataToStructPointer (d , s , & editRequest )
81+ common .DataToStructPointer (d , rcpSchema , & editRequest )
7382 editRequest .PolicyId = resp .PolicyId
7483 err = w .ClusterPolicies .Edit (ctx , editRequest )
7584 } else {
@@ -93,7 +102,7 @@ func ResourceClusterPolicy() common.Resource {
93102 if err != nil {
94103 return err
95104 }
96- return common .StructToData (resp , s , d )
105+ return common .StructToData (resp , rcpSchema , d )
97106 },
98107 Update : func (ctx context.Context , d * schema.ResourceData , c * common.DatabricksClient ) error {
99108 w , err := c .WorkspaceClient ()
@@ -102,7 +111,7 @@ func ResourceClusterPolicy() common.Resource {
102111 }
103112
104113 var request compute.EditPolicy
105- common .DataToStructPointer (d , s , & request )
114+ common .DataToStructPointer (d , rcpSchema , & request )
106115 request .PolicyId = d .Id ()
107116 if request .PolicyFamilyId != "" {
108117 request .Definition = ""
@@ -116,7 +125,7 @@ func ResourceClusterPolicy() common.Resource {
116125 return err
117126 }
118127 var request compute.EditPolicy
119- common .DataToStructPointer (d , s , & request )
128+ common .DataToStructPointer (d , rcpSchema , & request )
120129 if request .PolicyFamilyId != "" {
121130 isBuiltin , err := isBuiltinPolicyFamily (ctx , w , request .PolicyFamilyId , request .Name )
122131 if err != nil {
@@ -133,3 +142,8 @@ func ResourceClusterPolicy() common.Resource {
133142 },
134143 }
135144}
145+
146+ func rcpSchemaV0 () cty.Type {
147+ return (& schema.Resource {
148+ Schema : rcpSchema }).CoreConfigSchema ().ImpliedType ()
149+ }
0 commit comments