Skip to content

Commit 17d467e

Browse files
Add annotations for cloudrunV2_service (#7023) (#13509)
* cloudrunV2: added `annotations` to `CloudRunV2_service` resource Signed-off-by: Modular Magician <[email protected]> Signed-off-by: Modular Magician <[email protected]>
1 parent e574237 commit 17d467e

6 files changed

+253
-3
lines changed

.changelog/7023.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
cloudrunV2: added `annotations` to `CloudRunV2_service` resource
3+
```

google/resource_cloud_run_v2_service.go

+66
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,12 @@ func resourceCloudRunV2Service() *schema.Resource {
5555
MaxItems: 1,
5656
Elem: &schema.Resource{
5757
Schema: map[string]*schema.Schema{
58+
"annotations": {
59+
Type: schema.TypeMap,
60+
Optional: true,
61+
Description: `KRM-style annotations for the resource.`,
62+
Elem: &schema.Schema{Type: schema.TypeString},
63+
},
5864
"containers": {
5965
Type: schema.TypeList,
6066
Optional: true,
@@ -544,6 +550,12 @@ A duration in seconds with up to nine fractional digits, ending with 's'. Exampl
544550
},
545551
},
546552
},
553+
"annotations": {
554+
Type: schema.TypeMap,
555+
Optional: true,
556+
Description: `Unstructured key value map that may be set by external tools to store and arbitrary metadata. They are not queryable and should be preserved when modifying objects. Cloud Run will populate some annotations using 'run.googleapis.com' or 'serving.knative.dev' namespaces. This field follows Kubernetes annotations' namespacing, limits, and rules. More info: https://kubernetes.io/docs/user-guide/annotations`,
557+
Elem: &schema.Schema{Type: schema.TypeString},
558+
},
547559
"binary_authorization": {
548560
Type: schema.TypeList,
549561
Optional: true,
@@ -848,6 +860,12 @@ func resourceCloudRunV2ServiceCreate(d *schema.ResourceData, meta interface{}) e
848860
} else if v, ok := d.GetOkExists("labels"); !isEmptyValue(reflect.ValueOf(labelsProp)) && (ok || !reflect.DeepEqual(v, labelsProp)) {
849861
obj["labels"] = labelsProp
850862
}
863+
annotationsProp, err := expandCloudRunV2ServiceAnnotations(d.Get("annotations"), d, config)
864+
if err != nil {
865+
return err
866+
} else if v, ok := d.GetOkExists("annotations"); !isEmptyValue(reflect.ValueOf(annotationsProp)) && (ok || !reflect.DeepEqual(v, annotationsProp)) {
867+
obj["annotations"] = annotationsProp
868+
}
851869
clientProp, err := expandCloudRunV2ServiceClient(d.Get("client"), d, config)
852870
if err != nil {
853871
return err
@@ -993,6 +1011,9 @@ func resourceCloudRunV2ServiceRead(d *schema.ResourceData, meta interface{}) err
9931011
if err := d.Set("labels", flattenCloudRunV2ServiceLabels(res["labels"], d, config)); err != nil {
9941012
return fmt.Errorf("Error reading Service: %s", err)
9951013
}
1014+
if err := d.Set("annotations", flattenCloudRunV2ServiceAnnotations(res["annotations"], d, config)); err != nil {
1015+
return fmt.Errorf("Error reading Service: %s", err)
1016+
}
9961017
if err := d.Set("client", flattenCloudRunV2ServiceClient(res["client"], d, config)); err != nil {
9971018
return fmt.Errorf("Error reading Service: %s", err)
9981019
}
@@ -1073,6 +1094,12 @@ func resourceCloudRunV2ServiceUpdate(d *schema.ResourceData, meta interface{}) e
10731094
} else if v, ok := d.GetOkExists("labels"); !isEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, labelsProp)) {
10741095
obj["labels"] = labelsProp
10751096
}
1097+
annotationsProp, err := expandCloudRunV2ServiceAnnotations(d.Get("annotations"), d, config)
1098+
if err != nil {
1099+
return err
1100+
} else if v, ok := d.GetOkExists("annotations"); !isEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, annotationsProp)) {
1101+
obj["annotations"] = annotationsProp
1102+
}
10761103
clientProp, err := expandCloudRunV2ServiceClient(d.Get("client"), d, config)
10771104
if err != nil {
10781105
return err
@@ -1228,6 +1255,10 @@ func flattenCloudRunV2ServiceLabels(v interface{}, d *schema.ResourceData, confi
12281255
return v
12291256
}
12301257

1258+
func flattenCloudRunV2ServiceAnnotations(v interface{}, d *schema.ResourceData, config *Config) interface{} {
1259+
return v
1260+
}
1261+
12311262
func flattenCloudRunV2ServiceClient(v interface{}, d *schema.ResourceData, config *Config) interface{} {
12321263
return v
12331264
}
@@ -1280,6 +1311,8 @@ func flattenCloudRunV2ServiceTemplate(v interface{}, d *schema.ResourceData, con
12801311
flattenCloudRunV2ServiceTemplateRevision(original["revision"], d, config)
12811312
transformed["labels"] =
12821313
flattenCloudRunV2ServiceTemplateLabels(original["labels"], d, config)
1314+
transformed["annotations"] =
1315+
flattenCloudRunV2ServiceTemplateAnnotations(original["annotations"], d, config)
12831316
transformed["scaling"] =
12841317
flattenCloudRunV2ServiceTemplateScaling(original["scaling"], d, config)
12851318
transformed["vpc_access"] =
@@ -1308,6 +1341,10 @@ func flattenCloudRunV2ServiceTemplateLabels(v interface{}, d *schema.ResourceDat
13081341
return v
13091342
}
13101343

1344+
func flattenCloudRunV2ServiceTemplateAnnotations(v interface{}, d *schema.ResourceData, config *Config) interface{} {
1345+
return v
1346+
}
1347+
13111348
func flattenCloudRunV2ServiceTemplateScaling(v interface{}, d *schema.ResourceData, config *Config) interface{} {
13121349
if v == nil {
13131350
return nil
@@ -2321,6 +2358,17 @@ func expandCloudRunV2ServiceLabels(v interface{}, d TerraformResourceData, confi
23212358
return m, nil
23222359
}
23232360

2361+
func expandCloudRunV2ServiceAnnotations(v interface{}, d TerraformResourceData, config *Config) (map[string]string, error) {
2362+
if v == nil {
2363+
return map[string]string{}, nil
2364+
}
2365+
m := make(map[string]string)
2366+
for k, val := range v.(map[string]interface{}) {
2367+
m[k] = val.(string)
2368+
}
2369+
return m, nil
2370+
}
2371+
23242372
func expandCloudRunV2ServiceClient(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
23252373
return v, nil
23262374
}
@@ -2394,6 +2442,13 @@ func expandCloudRunV2ServiceTemplate(v interface{}, d TerraformResourceData, con
23942442
transformed["labels"] = transformedLabels
23952443
}
23962444

2445+
transformedAnnotations, err := expandCloudRunV2ServiceTemplateAnnotations(original["annotations"], d, config)
2446+
if err != nil {
2447+
return nil, err
2448+
} else if val := reflect.ValueOf(transformedAnnotations); val.IsValid() && !isEmptyValue(val) {
2449+
transformed["annotations"] = transformedAnnotations
2450+
}
2451+
23972452
transformedScaling, err := expandCloudRunV2ServiceTemplateScaling(original["scaling"], d, config)
23982453
if err != nil {
23992454
return nil, err
@@ -2475,6 +2530,17 @@ func expandCloudRunV2ServiceTemplateLabels(v interface{}, d TerraformResourceDat
24752530
return m, nil
24762531
}
24772532

2533+
func expandCloudRunV2ServiceTemplateAnnotations(v interface{}, d TerraformResourceData, config *Config) (map[string]string, error) {
2534+
if v == nil {
2535+
return map[string]string{}, nil
2536+
}
2537+
m := make(map[string]string)
2538+
for k, val := range v.(map[string]interface{}) {
2539+
m[k] = val.(string)
2540+
}
2541+
return m, nil
2542+
}
2543+
24782544
func expandCloudRunV2ServiceTemplateScaling(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
24792545
l := v.([]interface{})
24802546
if len(l) == 0 || l[0] == nil {

google/resource_cloud_run_v2_service_test.go

+14-3
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,15 @@ resource "google_cloud_run_v2_service" "default" {
4646
name = "tf-test-cloudrun-service%{random_suffix}"
4747
description = "description creating"
4848
location = "us-central1"
49+
annotations = {
50+
generated-by = "magic-modules"
51+
}
4952
ingress = "INGRESS_TRAFFIC_ALL"
5053
labels = {
5154
label-1 = "value-1"
5255
}
5356
client = "client-1"
5457
client_version = "client-version-1"
55-
5658
template {
5759
labels = {
5860
label-1 = "value-1"
@@ -64,6 +66,9 @@ resource "google_cloud_run_v2_service" "default" {
6466
max_instance_count = 3
6567
min_instance_count = 1
6668
}
69+
annotations = {
70+
generated-by = "magic-modules"
71+
}
6772
containers {
6873
name = "container-1"
6974
image = "us-docker.pkg.dev/cloudrun/container/hello"
@@ -103,6 +108,9 @@ resource "google_cloud_run_v2_service" "default" {
103108
name = "tf-test-cloudrun-service%{random_suffix}"
104109
description = "description updating"
105110
location = "us-central1"
111+
annotations = {
112+
generated-by = "magic-modules-files"
113+
}
106114
ingress = "INGRESS_TRAFFIC_ALL"
107115
binary_authorization {
108116
use_default = true
@@ -113,7 +121,7 @@ resource "google_cloud_run_v2_service" "default" {
113121
}
114122
client = "client-update"
115123
client_version = "client-version-update"
116-
124+
117125
template {
118126
labels = {
119127
label-1 = "value-update"
@@ -125,6 +133,9 @@ resource "google_cloud_run_v2_service" "default" {
125133
max_instance_count = 2
126134
min_instance_count = 1
127135
}
136+
annotations = {
137+
generated-by = "magic-modules"
138+
}
128139
containers {
129140
name = "container-update"
130141
image = "us-docker.pkg.dev/cloudrun/container/hello"
@@ -156,7 +167,7 @@ resource "google_cloud_run_v2_service" "default" {
156167
traffic {
157168
type = "TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST"
158169
percent = 100
159-
tag = "traffic-tag-update"
170+
tag = "tt-update"
160171
}
161172
}
162173

google/resource_sql_source_representation_instance.go

+138
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,36 @@ func resourceSQLSourceRepresentationInstance() *schema.Resource {
6363
ValidateFunc: validateIpAddress,
6464
Description: `The externally accessible IPv4 address for the source database server.`,
6565
},
66+
"ca_certificate": {
67+
Type: schema.TypeString,
68+
Optional: true,
69+
ForceNew: true,
70+
Description: `The CA certificate on the external server. Include only if SSL/TLS is used on the external server.`,
71+
},
72+
"client_certificate": {
73+
Type: schema.TypeString,
74+
Optional: true,
75+
ForceNew: true,
76+
Description: `The client certificate on the external server. Required only for server-client authentication. Include only if SSL/TLS is used on the external server.`,
77+
},
78+
"client_key": {
79+
Type: schema.TypeString,
80+
Optional: true,
81+
ForceNew: true,
82+
Description: `The private key file for the client certificate on the external server. Required only for server-client authentication. Include only if SSL/TLS is used on the external server.`,
83+
},
84+
"dump_file_path": {
85+
Type: schema.TypeString,
86+
Optional: true,
87+
ForceNew: true,
88+
Description: `A file in the bucket that contains the data from the external server.`,
89+
},
90+
"password": {
91+
Type: schema.TypeString,
92+
Optional: true,
93+
ForceNew: true,
94+
Description: `The password for the replication user account.`,
95+
},
6696
"port": {
6797
Type: schema.TypeInt,
6898
Optional: true,
@@ -72,6 +102,12 @@ func resourceSQLSourceRepresentationInstance() *schema.Resource {
72102
Defaults to 3306.`,
73103
Default: 3306,
74104
},
105+
"username": {
106+
Type: schema.TypeString,
107+
Optional: true,
108+
ForceNew: true,
109+
Description: `The replication user account on the external server.`,
110+
},
75111

76112
"region": {
77113
Type: schema.TypeString,
@@ -340,6 +376,18 @@ func flattenSQLSourceRepresentationInstanceOnPremisesConfiguration(v interface{}
340376
flattenSQLSourceRepresentationInstanceOnPremisesConfigurationHost(original["host"], d, config)
341377
transformed["port"] =
342378
flattenSQLSourceRepresentationInstanceOnPremisesConfigurationPort(original["port"], d, config)
379+
transformed["username"] =
380+
flattenSQLSourceRepresentationInstanceOnPremisesConfigurationUsername(original["username"], d, config)
381+
transformed["password"] =
382+
flattenSQLSourceRepresentationInstanceOnPremisesConfigurationPassword(original["password"], d, config)
383+
transformed["dump_file_path"] =
384+
flattenSQLSourceRepresentationInstanceOnPremisesConfigurationDumpFilePath(original["dumpFilePath"], d, config)
385+
transformed["ca_certificate"] =
386+
flattenSQLSourceRepresentationInstanceOnPremisesConfigurationCaCertificate(original["caCertificate"], d, config)
387+
transformed["client_certificate"] =
388+
flattenSQLSourceRepresentationInstanceOnPremisesConfigurationClientCertificate(original["clientCertificate"], d, config)
389+
transformed["client_key"] =
390+
flattenSQLSourceRepresentationInstanceOnPremisesConfigurationClientKey(original["clientKey"], d, config)
343391
return []interface{}{transformed}
344392
}
345393
func flattenSQLSourceRepresentationInstanceOnPremisesConfigurationHost(v interface{}, d *schema.ResourceData, config *Config) interface{} {
@@ -363,6 +411,30 @@ func flattenSQLSourceRepresentationInstanceOnPremisesConfigurationPort(v interfa
363411
return v // let terraform core handle it otherwise
364412
}
365413

414+
func flattenSQLSourceRepresentationInstanceOnPremisesConfigurationUsername(v interface{}, d *schema.ResourceData, config *Config) interface{} {
415+
return v
416+
}
417+
418+
func flattenSQLSourceRepresentationInstanceOnPremisesConfigurationPassword(v interface{}, d *schema.ResourceData, config *Config) interface{} {
419+
return v
420+
}
421+
422+
func flattenSQLSourceRepresentationInstanceOnPremisesConfigurationDumpFilePath(v interface{}, d *schema.ResourceData, config *Config) interface{} {
423+
return v
424+
}
425+
426+
func flattenSQLSourceRepresentationInstanceOnPremisesConfigurationCaCertificate(v interface{}, d *schema.ResourceData, config *Config) interface{} {
427+
return v
428+
}
429+
430+
func flattenSQLSourceRepresentationInstanceOnPremisesConfigurationClientCertificate(v interface{}, d *schema.ResourceData, config *Config) interface{} {
431+
return v
432+
}
433+
434+
func flattenSQLSourceRepresentationInstanceOnPremisesConfigurationClientKey(v interface{}, d *schema.ResourceData, config *Config) interface{} {
435+
return v
436+
}
437+
366438
func expandSQLSourceRepresentationInstanceName(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
367439
return v, nil
368440
}
@@ -391,6 +463,48 @@ func expandSQLSourceRepresentationInstanceOnPremisesConfiguration(v interface{},
391463
transformed["port"] = transformedPort
392464
}
393465

466+
transformedUsername, err := expandSQLSourceRepresentationInstanceOnPremisesConfigurationUsername(d.Get("username"), d, config)
467+
if err != nil {
468+
return nil, err
469+
} else if val := reflect.ValueOf(transformedUsername); val.IsValid() && !isEmptyValue(val) {
470+
transformed["username"] = transformedUsername
471+
}
472+
473+
transformedPassword, err := expandSQLSourceRepresentationInstanceOnPremisesConfigurationPassword(d.Get("password"), d, config)
474+
if err != nil {
475+
return nil, err
476+
} else if val := reflect.ValueOf(transformedPassword); val.IsValid() && !isEmptyValue(val) {
477+
transformed["password"] = transformedPassword
478+
}
479+
480+
transformedDumpFilePath, err := expandSQLSourceRepresentationInstanceOnPremisesConfigurationDumpFilePath(d.Get("dump_file_path"), d, config)
481+
if err != nil {
482+
return nil, err
483+
} else if val := reflect.ValueOf(transformedDumpFilePath); val.IsValid() && !isEmptyValue(val) {
484+
transformed["dumpFilePath"] = transformedDumpFilePath
485+
}
486+
487+
transformedCaCertificate, err := expandSQLSourceRepresentationInstanceOnPremisesConfigurationCaCertificate(d.Get("ca_certificate"), d, config)
488+
if err != nil {
489+
return nil, err
490+
} else if val := reflect.ValueOf(transformedCaCertificate); val.IsValid() && !isEmptyValue(val) {
491+
transformed["caCertificate"] = transformedCaCertificate
492+
}
493+
494+
transformedClientCertificate, err := expandSQLSourceRepresentationInstanceOnPremisesConfigurationClientCertificate(d.Get("client_certificate"), d, config)
495+
if err != nil {
496+
return nil, err
497+
} else if val := reflect.ValueOf(transformedClientCertificate); val.IsValid() && !isEmptyValue(val) {
498+
transformed["clientCertificate"] = transformedClientCertificate
499+
}
500+
501+
transformedClientKey, err := expandSQLSourceRepresentationInstanceOnPremisesConfigurationClientKey(d.Get("client_key"), d, config)
502+
if err != nil {
503+
return nil, err
504+
} else if val := reflect.ValueOf(transformedClientKey); val.IsValid() && !isEmptyValue(val) {
505+
transformed["clientKey"] = transformedClientKey
506+
}
507+
394508
return transformed, nil
395509
}
396510

@@ -402,6 +516,30 @@ func expandSQLSourceRepresentationInstanceOnPremisesConfigurationPort(v interfac
402516
return v, nil
403517
}
404518

519+
func expandSQLSourceRepresentationInstanceOnPremisesConfigurationUsername(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
520+
return v, nil
521+
}
522+
523+
func expandSQLSourceRepresentationInstanceOnPremisesConfigurationPassword(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
524+
return v, nil
525+
}
526+
527+
func expandSQLSourceRepresentationInstanceOnPremisesConfigurationDumpFilePath(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
528+
return v, nil
529+
}
530+
531+
func expandSQLSourceRepresentationInstanceOnPremisesConfigurationCaCertificate(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
532+
return v, nil
533+
}
534+
535+
func expandSQLSourceRepresentationInstanceOnPremisesConfigurationClientCertificate(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
536+
return v, nil
537+
}
538+
539+
func expandSQLSourceRepresentationInstanceOnPremisesConfigurationClientKey(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
540+
return v, nil
541+
}
542+
405543
func resourceSQLSourceRepresentationInstanceEncoder(d *schema.ResourceData, meta interface{}, obj map[string]interface{}) (map[string]interface{}, error) {
406544
opc := obj["onPremisesConfiguration"].(map[string]interface{})
407545
opc["hostPort"] = fmt.Sprintf("%v:%v", opc["host"], opc["port"])

0 commit comments

Comments
 (0)