Skip to content

Commit

Permalink
Add field traffic.tag and traffic.url to Cloud Run (#5772) (#11641)
Browse files Browse the repository at this point in the history
Signed-off-by: Modular Magician <magic-modules@google.com>
  • Loading branch information
modular-magician authored May 4, 2022
1 parent a2f013f commit 1789ea2
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 1 deletion.
3 changes: 3 additions & 0 deletions .changelog/5772.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:enhancement
cloudrun: added `traffic.tag` and `traffic.url` fields to `google_cloud_run_service`
```
44 changes: 44 additions & 0 deletions google/resource_cloud_run_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -612,6 +612,18 @@ false when RevisionName is non-empty.`,
Optional: true,
Description: `RevisionName of a specific revision to which to send this portion of traffic.`,
},
"tag": {
Type: schema.TypeString,
Optional: true,
Description: `Tag is optionally used to expose a dedicated url for referencing this target exclusively.`,
},
"url": {
Type: schema.TypeString,
Computed: true,
Description: `URL displays the URL for accessing tagged traffic targets. URL is displayed in status,
and is disallowed on spec. URL must contain a scheme (e.g. http://) and a hostname,
but may not contain anything else (e.g. basic auth, url path, etc.)`,
},
},
},
},
Expand Down Expand Up @@ -1183,7 +1195,9 @@ func flattenCloudRunServiceSpecTraffic(v interface{}, d *schema.ResourceData, co
transformed = append(transformed, map[string]interface{}{
"revision_name": flattenCloudRunServiceSpecTrafficRevisionName(original["revisionName"], d, config),
"percent": flattenCloudRunServiceSpecTrafficPercent(original["percent"], d, config),
"tag": flattenCloudRunServiceSpecTrafficTag(original["tag"], d, config),
"latest_revision": flattenCloudRunServiceSpecTrafficLatestRevision(original["latestRevision"], d, config),
"url": flattenCloudRunServiceSpecTrafficUrl(original["url"], d, config),
})
}
return transformed
Expand All @@ -1209,10 +1223,18 @@ func flattenCloudRunServiceSpecTrafficPercent(v interface{}, d *schema.ResourceD
return v // let terraform core handle it otherwise
}

func flattenCloudRunServiceSpecTrafficTag(v interface{}, d *schema.ResourceData, config *Config) interface{} {
return v
}

func flattenCloudRunServiceSpecTrafficLatestRevision(v interface{}, d *schema.ResourceData, config *Config) interface{} {
return v
}

func flattenCloudRunServiceSpecTrafficUrl(v interface{}, d *schema.ResourceData, config *Config) interface{} {
return v
}

func flattenCloudRunServiceSpecTemplate(v interface{}, d *schema.ResourceData, config *Config) interface{} {
if v == nil {
return nil
Expand Down Expand Up @@ -1964,13 +1986,27 @@ func expandCloudRunServiceSpecTraffic(v interface{}, d TerraformResourceData, co
transformed["percent"] = transformedPercent
}

transformedTag, err := expandCloudRunServiceSpecTrafficTag(original["tag"], d, config)
if err != nil {
return nil, err
} else if val := reflect.ValueOf(transformedTag); val.IsValid() && !isEmptyValue(val) {
transformed["tag"] = transformedTag
}

transformedLatestRevision, err := expandCloudRunServiceSpecTrafficLatestRevision(original["latest_revision"], d, config)
if err != nil {
return nil, err
} else if val := reflect.ValueOf(transformedLatestRevision); val.IsValid() && !isEmptyValue(val) {
transformed["latestRevision"] = transformedLatestRevision
}

transformedUrl, err := expandCloudRunServiceSpecTrafficUrl(original["url"], d, config)
if err != nil {
return nil, err
} else if val := reflect.ValueOf(transformedUrl); val.IsValid() && !isEmptyValue(val) {
transformed["url"] = transformedUrl
}

req = append(req, transformed)
}
return req, nil
Expand All @@ -1984,10 +2020,18 @@ func expandCloudRunServiceSpecTrafficPercent(v interface{}, d TerraformResourceD
return v, nil
}

func expandCloudRunServiceSpecTrafficTag(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
return v, nil
}

func expandCloudRunServiceSpecTrafficLatestRevision(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
return v, nil
}

func expandCloudRunServiceSpecTrafficUrl(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
return v, nil
}

func expandCloudRunServiceSpecTemplate(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
l := v.([]interface{})
if len(l) == 0 || l[0] == nil {
Expand Down
2 changes: 1 addition & 1 deletion google/resource_cloud_run_service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,6 @@ resource "google_cloud_run_service" "default" {
spec {
containers {
image = "gcr.io/cloudrun/hello"
args = ["arrgs"]
ports {
container_port = 8080
}
Expand All @@ -105,6 +104,7 @@ resource "google_cloud_run_service" "default" {
traffic {
percent = 100
latest_revision = true
tag = "magic-module"
}
lifecycle {
Expand Down
9 changes: 9 additions & 0 deletions website/docs/r/cloud_run_service.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -560,13 +560,22 @@ The following arguments are supported:
(Required)
Percent specifies percent of the traffic to this Revision or Configuration.

* `tag` -
(Optional)
Tag is optionally used to expose a dedicated url for referencing this target exclusively.

* `latest_revision` -
(Optional)
LatestRevision may be optionally provided to indicate that the latest ready
Revision of the Configuration should be used for this traffic target. When
provided LatestRevision must be true if RevisionName is empty; it must be
false when RevisionName is non-empty.

* `url` -
URL displays the URL for accessing tagged traffic targets. URL is displayed in status,
and is disallowed on spec. URL must contain a scheme (e.g. http://) and a hostname,
but may not contain anything else (e.g. basic auth, url path, etc.)

<a name="nested_template"></a>The `template` block supports:

* `metadata` -
Expand Down

0 comments on commit 1789ea2

Please sign in to comment.