Skip to content

Commit 16c4b72

Browse files
NA2047anoopkverma-google
authored andcommitted
Adding Labels to Interconnect Attachments (GoogleCloudPlatform#12755)
1 parent 6ffaded commit 16c4b72

File tree

4 files changed

+90
-1
lines changed

4 files changed

+90
-1
lines changed

mmv1/products/compute/InterconnectAttachment.yaml

+18
Original file line numberDiff line numberDiff line change
@@ -332,3 +332,21 @@ properties:
332332
gives Google Cloud Support more debugging visibility.
333333
immutable: true
334334
ignore_read: true
335+
- name: 'labels'
336+
type: KeyValueLabels
337+
update_url: 'projects/{{project}}/regions/{{region}}/interconnectAttachments/{{name}}/setLabels'
338+
update_verb: 'POST'
339+
description: |
340+
Labels for this resource. These can only be added or modified by the setLabels
341+
method. Each label key/value pair must comply with RFC1035. Label values may be empty.
342+
- name: 'labelFingerprint'
343+
type: Fingerprint
344+
update_url: 'projects/{{project}}/regions/{{region}}/interconnectAttachments/{{name}}/setLabels'
345+
update_verb: 'POST'
346+
description: |
347+
A fingerprint for the labels being applied to this Interconnect, which is essentially a hash
348+
of the labels set used for optimistic locking. The fingerprint is initially generated by
349+
Compute Engine and changes after every request to modify or update labels.
350+
You must always provide an up-to-date fingerprint hash in order to update or change labels,
351+
otherwise the request will fail with error 412 conditionNotMet.
352+
output: true

mmv1/templates/terraform/examples/interconnect_attachment_basic.tf.tmpl

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ resource "google_compute_interconnect_attachment" "{{$.PrimaryResourceId}}" {
44
type = "PARTNER"
55
router = google_compute_router.foobar.id
66
mtu = 1500
7+
labels = { mykey = "myvalue" }
78
}
89

910
resource "google_compute_router" "foobar" {

mmv1/templates/terraform/examples/interconnect_attachment_dedicated.tf.tmpl

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ resource "google_compute_interconnect_attachment" "{{$.PrimaryResourceId}}" {
1919
vlan_tag8021q = 1000
2020
region = "https://www.googleapis.com/compute/v1/projects/${data.google_project.project.name}/regions/us-east4"
2121
stack_type = "IPV4_ONLY"
22+
labels = { mykey = "myvalue" }
2223
}
2324

2425
resource "google_compute_router" "foobar" {
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,72 @@
1+
2+
{{- if $.HasLabelsField }}
3+
if v, ok := d.GetOkExists("effective_labels"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, labelsProp)) {
4+
labels := d.Get("labels")
5+
terraformLables := d.Get("terraform_labels")
6+
7+
// Labels cannot be set in a create. We'll have to set them here.
8+
err = resource{{$.ResourceName}}Read(d, meta)
9+
if err != nil {
10+
return err
11+
}
12+
13+
obj := make(map[string]interface{})
14+
// d.Get("effective_labels") will have been overridden by the Read call.
15+
labelsProp, err := expand{{$.ResourceName}}EffectiveLabels(v, d, config)
16+
if err != nil {
17+
return err
18+
}
19+
obj["labels"] = labelsProp
20+
labelFingerprintProp := d.Get("label_fingerprint")
21+
obj["labelFingerprint"] = labelFingerprintProp
22+
23+
url, err = tpgresource.ReplaceVars(d, config, "{{"{{"}}{{$.ProductMetadata.Name}}BasePath{{"}}"}}{{$.SelfLinkUri}}/setLabels")
24+
if err != nil {
25+
return err
26+
}
27+
res, err = transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
28+
Config: config,
29+
Method: "POST",
30+
Project: project,
31+
RawURL: url,
32+
UserAgent: userAgent,
33+
Body: obj,
34+
{{- if $.ErrorRetryPredicates }}
35+
ErrorRetryPredicates: []transport_tpg.RetryErrorPredicateFunc{ {{- join $.ErrorRetryPredicates "," -}} },
36+
{{- end }}
37+
{{- if $.ErrorAbortPredicates }}
38+
ErrorAbortPredicates: []transport_tpg.RetryErrorPredicateFunc{ {{- join $.ErrorAbortPredicates "," -}} },
39+
{{- end }}
40+
})
41+
if err != nil {
42+
return fmt.Errorf("Error adding labels to {{$.ResourceName}} %q: %s", d.Id(), err)
43+
}
44+
45+
err = ComputeOperationWaitTime(
46+
config, res, project, "Updating {{$.ResourceName}} Labels", userAgent,
47+
d.Timeout(schema.TimeoutUpdate))
48+
49+
if err != nil {
50+
return err
51+
}
52+
53+
// Set back the labels field, as it is needed to decide the value of "labels" in the state in the read function.
54+
if err := d.Set("labels", labels); err != nil {
55+
return fmt.Errorf("Error setting back labels: %s", err)
56+
}
57+
58+
// Set back the terraform_labels field, as it is needed to decide the value of "terraform_labels" in the state in the read function.
59+
if err := d.Set("terraform_labels", terraformLables); err != nil {
60+
return fmt.Errorf("Error setting back terraform_labels: %s", err)
61+
}
62+
63+
// Set back the effective_labels field, as it is needed to decide the value of "effective_labels" in the state in the read function.
64+
if err := d.Set("effective_labels", v); err != nil {
65+
return fmt.Errorf("Error setting back effective_labels: %s", err)
66+
}
67+
}
68+
{{- end }}
69+
170
if err := waitForAttachmentToBeProvisioned(d, config, d.Timeout(schema.TimeoutCreate)); err != nil {
271
return fmt.Errorf("Error waiting for InterconnectAttachment %q to be provisioned: %q", d.Get("name").(string), err)
3-
}
72+
}

0 commit comments

Comments
 (0)