Skip to content

Commit e39ae9b

Browse files
Add labels field to the GKEHub Membership Binding resource (#8880) (#15753)
* Adding Terraform resources for Tenancy APIs in GKEHub * Segregating MembershipBinding and MembershipRBACRoleBinding to keep things simpler in the review * Fixing the docu URIs * Adding TF support for Tenancy API for Membership Binding * Adding dependent membership binding to the same commit chain * Making Scope un-updatable and replacing hard coded project number with the one from test env * Making Scope RRBAC updatable * Making Namespace immutable * Adding update test cases * Removing all memberships field from Scope since it is no longer supported * Removing all_memberships field for Scope from all test cases * Add labels field to the Membership Binding resource Signed-off-by: Modular Magician <[email protected]>
1 parent 3cc2bba commit e39ae9b

5 files changed

+67
-0
lines changed

.changelog/8880.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
GKEHUB: added `labels` fields to `google_gke_hub_membership_binding` resource
3+
```

google/services/gkehub2/resource_gke_hub_membership_binding.go

+40
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,12 @@ func ResourceGKEHub2MembershipBinding() *schema.Resource {
7373
Description: `A Workspace resource name in the format
7474
'projects/*/locations/*/scopes/*'.`,
7575
},
76+
"labels": {
77+
Type: schema.TypeMap,
78+
Optional: true,
79+
Description: `Labels for this Membership binding.`,
80+
Elem: &schema.Schema{Type: schema.TypeString},
81+
},
7682
"create_time": {
7783
Type: schema.TypeString,
7884
Computed: true,
@@ -137,6 +143,12 @@ func resourceGKEHub2MembershipBindingCreate(d *schema.ResourceData, meta interfa
137143
} else if v, ok := d.GetOkExists("scope"); !tpgresource.IsEmptyValue(reflect.ValueOf(scopeProp)) && (ok || !reflect.DeepEqual(v, scopeProp)) {
138144
obj["scope"] = scopeProp
139145
}
146+
labelsProp, err := expandGKEHub2MembershipBindingLabels(d.Get("labels"), d, config)
147+
if err != nil {
148+
return err
149+
} else if v, ok := d.GetOkExists("labels"); !tpgresource.IsEmptyValue(reflect.ValueOf(labelsProp)) && (ok || !reflect.DeepEqual(v, labelsProp)) {
150+
obj["labels"] = labelsProp
151+
}
140152

141153
url, err := tpgresource.ReplaceVars(d, config, "{{GKEHub2BasePath}}projects/{{project}}/locations/{{location}}/memberships/{{membership_id}}/bindings/?membership_binding_id={{membership_binding_id}}")
142154
if err != nil {
@@ -267,6 +279,9 @@ func resourceGKEHub2MembershipBindingRead(d *schema.ResourceData, meta interface
267279
if err := d.Set("state", flattenGKEHub2MembershipBindingState(res["state"], d, config)); err != nil {
268280
return fmt.Errorf("Error reading MembershipBinding: %s", err)
269281
}
282+
if err := d.Set("labels", flattenGKEHub2MembershipBindingLabels(res["labels"], d, config)); err != nil {
283+
return fmt.Errorf("Error reading MembershipBinding: %s", err)
284+
}
270285

271286
return nil
272287
}
@@ -293,6 +308,12 @@ func resourceGKEHub2MembershipBindingUpdate(d *schema.ResourceData, meta interfa
293308
} else if v, ok := d.GetOkExists("scope"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, scopeProp)) {
294309
obj["scope"] = scopeProp
295310
}
311+
labelsProp, err := expandGKEHub2MembershipBindingLabels(d.Get("labels"), d, config)
312+
if err != nil {
313+
return err
314+
} else if v, ok := d.GetOkExists("labels"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, labelsProp)) {
315+
obj["labels"] = labelsProp
316+
}
296317

297318
url, err := tpgresource.ReplaceVars(d, config, "{{GKEHub2BasePath}}projects/{{project}}/locations/{{location}}/memberships/{{membership_id}}/bindings/{{membership_binding_id}}")
298319
if err != nil {
@@ -305,6 +326,10 @@ func resourceGKEHub2MembershipBindingUpdate(d *schema.ResourceData, meta interfa
305326
if d.HasChange("scope") {
306327
updateMask = append(updateMask, "scope")
307328
}
329+
330+
if d.HasChange("labels") {
331+
updateMask = append(updateMask, "labels")
332+
}
308333
// updateMask is a URL parameter but not present in the schema, so ReplaceVars
309334
// won't set it
310335
url, err = transport_tpg.AddQueryParams(url, map[string]string{"updateMask": strings.Join(updateMask, ",")})
@@ -461,6 +486,21 @@ func flattenGKEHub2MembershipBindingStateCode(v interface{}, d *schema.ResourceD
461486
return v
462487
}
463488

489+
func flattenGKEHub2MembershipBindingLabels(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
490+
return v
491+
}
492+
464493
func expandGKEHub2MembershipBindingScope(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
465494
return v, nil
466495
}
496+
497+
func expandGKEHub2MembershipBindingLabels(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (map[string]string, error) {
498+
if v == nil {
499+
return map[string]string{}, nil
500+
}
501+
m := make(map[string]string)
502+
for k, val := range v.(map[string]interface{}) {
503+
m[k] = val.(string)
504+
}
505+
return m, nil
506+
}

google/services/gkehub2/resource_gke_hub_membership_binding_generated_test.go

+5
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,11 @@ resource "google_gke_hub_membership_binding" "example" {
8686
scope = google_gke_hub_scope.example.name
8787
membership_id = "tf-test-membership%{random_suffix}"
8888
location = "global"
89+
labels = {
90+
keyb = "valueb"
91+
keya = "valuea"
92+
keyc = "valuec"
93+
}
8994
depends_on = [
9095
google_gke_hub_membership.example,
9196
google_gke_hub_scope.example

google/services/gkehub2/resource_gke_hub_membership_binding_test.go

+10
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,11 @@ resource "google_gke_hub_membership_binding" "example" {
7474
scope = google_gke_hub_scope.example.name
7575
membership_id = "tf-test-membership%{random_suffix}"
7676
location = "global"
77+
labels = {
78+
keyb = "valueb"
79+
keya = "valuea"
80+
keyc = "valuec"
81+
}
7782
depends_on = [
7883
google_gke_hub_membership.example,
7984
google_gke_hub_scope.example
@@ -110,6 +115,11 @@ resource "google_gke_hub_membership_binding" "example" {
110115
scope = google_gke_hub_scope.example2.name
111116
membership_id = "tf-test-membership%{random_suffix}"
112117
location = "global"
118+
labels = {
119+
updated_keyb = "updated_valueb"
120+
updated_keya = "updated_valuea"
121+
updated_keyc = "updated_valuec"
122+
}
113123
depends_on = [
114124
google_gke_hub_membership.example,
115125
google_gke_hub_scope.example2

website/docs/r/gke_hub_membership_binding.html.markdown

+9
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@ resource "google_gke_hub_membership_binding" "example" {
5858
scope = google_gke_hub_scope.example.name
5959
membership_id = "tf-test-membership%{random_suffix}"
6060
location = "global"
61+
labels = {
62+
keyb = "valueb"
63+
keya = "valuea"
64+
keyc = "valuec"
65+
}
6166
depends_on = [
6267
google_gke_hub_membership.example,
6368
google_gke_hub_scope.example
@@ -91,6 +96,10 @@ The following arguments are supported:
9196
- - -
9297

9398

99+
* `labels` -
100+
(Optional)
101+
Labels for this Membership binding.
102+
94103
* `project` - (Optional) The ID of the project in which the resource belongs.
95104
If it is not provided, the provider project is used.
96105

0 commit comments

Comments
 (0)