@@ -8,39 +8,37 @@ import (
88
99 "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1010 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
11+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
1112)
1213
1314const (
1415 // GKEPoliciesResourceName is the name of the resource
1516 GKEPoliciesResourceName = "policy"
16- // GKELoadBalancersNetworkEndpointGroupPoliciesResourceName is the name of the resource
17- GKELoadBalancersNetworkEndpointGroupPoliciesResourceName = "castai_gke_load_balancers_network_endpoint_group_policies"
18- // GKELoadBalancersTargetBackendPoolsPoliciesResourceName is the name of the resource
19- GKELoadBalancersTargetBackendPoolsPoliciesResourceName = "castai_gke_load_balancers_target_backend_pools_policies"
20- // GKELoadBalancersUnmanagedInstanceGroupsPoliciesResourceName is the name of the resource
21- GKELoadBalancersUnmanagedInstanceGroupsPoliciesResourceName = "castai_gke_load_balancers_unmanaged_instance_groups_policies"
17+ // GKEFeaturesResourceName is the name of the policies per feature
18+ GKEFeaturesResourceName = "features"
19+ GKELoadBalancersNetworkEndpointGroupFeature = "load_balancers_network_endpoint_group"
20+ GKELoadBalancersTargetBackendPoolsFeature = "load_balancers_target_backend_pools"
21+ GKELoadBalancersUnmanagedInstanceGroupsFeature = "load_balancers_unmanaged_instance_groups"
2222)
2323
2424func dataSourceGKEPolicies () * schema.Resource {
2525 return & schema.Resource {
2626 ReadContext : dataSourceGKEPoliciesRead ,
2727 Schema : map [string ]* schema.Schema {
28- GKEPoliciesResourceName : {
29- Type : schema .TypeList ,
30- Computed : true ,
31- Elem : & schema.Schema {Type : schema .TypeString },
32- },
33- GKELoadBalancersNetworkEndpointGroupPoliciesResourceName : {
34- Type : schema .TypeList ,
35- Computed : true ,
36- Elem : & schema.Schema {Type : schema .TypeString },
37- },
38- GKELoadBalancersTargetBackendPoolsPoliciesResourceName : {
28+ GKEFeaturesResourceName : {
3929 Type : schema .TypeList ,
4030 Computed : true ,
41- Elem : & schema.Schema {Type : schema .TypeString },
31+ Default : []string {},
32+ Elem : & schema.Schema {
33+ Type : schema .TypeString ,
34+ ValidateFunc : validation .StringInSlice ([]string {
35+ GKELoadBalancersNetworkEndpointGroupFeature ,
36+ GKELoadBalancersTargetBackendPoolsFeature ,
37+ GKELoadBalancersUnmanagedInstanceGroupsFeature ,
38+ }, false ),
39+ },
4240 },
43- GKELoadBalancersUnmanagedInstanceGroupsPoliciesResourceName : {
41+ GKEPoliciesResourceName : {
4442 Type : schema .TypeList ,
4543 Computed : true ,
4644 Elem : & schema.Schema {Type : schema .TypeString },
@@ -49,52 +47,56 @@ func dataSourceGKEPolicies() *schema.Resource {
4947 }
5048}
5149
52- func dataSourceGKEPoliciesRead (ctx context.Context , data * schema.ResourceData , meta interface {}) diag.Diagnostics {
53- var diags diag.Diagnostics
54- diags = append (diags , dataSourceGKEUserPoliciesRead (ctx , data , meta )... )
55- diags = append (diags , dataSourceGKELoadBalancersNetworkEndpointGroupPoliciesRead (ctx , data , meta )... )
56- diags = append (diags , dataSourceGKELoadBalancersTargetBackendPoolsPoliciesRead (ctx , data , meta )... )
57- diags = append (diags , dataSourceGKELoadBalancersUnmanagedInstanceGroupsPoliciesRead (ctx , data , meta )... )
50+ func dataSourceGKEPoliciesRead (_ context.Context , data * schema.ResourceData , _ interface {}) diag.Diagnostics {
51+ // add policies per specified features
52+ features := data .Get (GKEFeaturesResourceName ).([]interface {})
53+ policySet := make (map [string ]struct {})
5854
59- return diags
60- }
55+ for _ , feature := range features {
56+ var err error
57+ var policies []string
6158
62- func dataSourceGKEUserPoliciesRead (ctx context.Context , data * schema.ResourceData , meta interface {}) diag.Diagnostics {
63- policies , _ := gke .GetUserPolicy ()
64- data .SetId ("gke" )
65- if err := data .Set (GKEPoliciesResourceName , policies ); err != nil {
66- return diag .FromErr (fmt .Errorf ("setting gke policy: %w" , err ))
67- }
59+ switch feature {
60+ case GKELoadBalancersNetworkEndpointGroupFeature :
61+ policies , err = gke .GetLoadBalancersNetworkEndpointGroupPolicy ()
62+ case GKELoadBalancersTargetBackendPoolsFeature :
63+ policies , err = gke .GetLoadBalancersTargetBackendPoolsPolicy ()
64+ case GKELoadBalancersUnmanagedInstanceGroupsFeature :
65+ policies , err = gke .GetLoadBalancersUnmanagedInstanceGroupsPolicy ()
66+ }
6867
69- return nil
70- }
68+ if err != nil {
69+ return diag .FromErr (fmt .Errorf ("getting %s policy: %w" , feature , err ))
70+ }
7171
72- func dataSourceGKELoadBalancersNetworkEndpointGroupPoliciesRead (ctx context.Context , data * schema.ResourceData , meta interface {}) diag.Diagnostics {
73- policies , _ := gke .GetLoadBalancersNetworkEndpointGroupPolicy ()
74- data .SetId ("gke" )
75- if err := data .Set (GKELoadBalancersNetworkEndpointGroupPoliciesResourceName , policies ); err != nil {
76- return diag .FromErr (fmt .Errorf ("setting gke policy: %w" , err ))
72+ policySet = appendArrayToMap (policies , policySet )
7773 }
7874
79- return nil
80- }
75+ // add base user policies
76+ userPolicy , err := gke .GetUserPolicy ()
77+ if err != nil {
78+ return diag .FromErr (fmt .Errorf ("getting user policy: %w" , err ))
79+ }
80+ policySet = appendArrayToMap (userPolicy , policySet )
8181
82- func dataSourceGKELoadBalancersTargetBackendPoolsPoliciesRead (ctx context.Context , data * schema.ResourceData , meta interface {}) diag.Diagnostics {
83- policies , _ := gke .GetLoadBalancersTargetBackendPoolsPolicy ()
84- data .SetId ("gke" )
85- if err := data .Set (GKELoadBalancersTargetBackendPoolsPoliciesResourceName , policies ); err != nil {
86- return diag .FromErr (fmt .Errorf ("setting gke policy: %w" , err ))
82+ var allPolicies []string
83+ for policy := range policySet {
84+ allPolicies = append (allPolicies , policy )
85+ }
86+
87+ if err := data .Set (GKEPoliciesResourceName , allPolicies ); err != nil {
88+ return diag .FromErr (fmt .Errorf ("setting %s policy: %w" , GKEPoliciesResourceName , err ))
8789 }
8890
8991 return nil
9092}
9193
92- func dataSourceGKELoadBalancersUnmanagedInstanceGroupsPoliciesRead (ctx context.Context , data * schema.ResourceData , meta interface {}) diag.Diagnostics {
93- policies , _ := gke .GetLoadBalancersUnmanagedInstanceGroupsPolicy ()
94- data .SetId ("gke" )
95- if err := data .Set (GKELoadBalancersUnmanagedInstanceGroupsPoliciesResourceName , policies ); err != nil {
96- return diag .FromErr (fmt .Errorf ("setting gke policy: %w" , err ))
94+ func appendArrayToMap (arr []string , m map [string ]struct {}) map [string ]struct {} {
95+ if m == nil {
96+ m = make (map [string ]struct {})
9797 }
98-
99- return nil
98+ for _ , v := range arr {
99+ m [v ] = struct {}{}
100+ }
101+ return m
100102}
0 commit comments