diff --git a/google-beta/services/cloudrun/resource_cloud_run_service.go b/google-beta/services/cloudrun/resource_cloud_run_service.go index 24826fca03..e5c30a579b 100644 --- a/google-beta/services/cloudrun/resource_cloud_run_service.go +++ b/google-beta/services/cloudrun/resource_cloud_run_service.go @@ -698,6 +698,33 @@ will use the project's default service account.`, }, }, }, + "nfs": { + Type: schema.TypeList, + Optional: true, + Description: `A filesystem backed by a Network File System share. This filesystem requires the +run.googleapis.com/execution-environment annotation to be set to "gen2" and +run.googleapis.com/launch-stage set to "BETA" or "ALPHA".`, + MaxItems: 1, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "path": { + Type: schema.TypeString, + Required: true, + Description: `Path exported by the NFS server`, + }, + "server": { + Type: schema.TypeString, + Required: true, + Description: `IP address or hostname of the NFS server`, + }, + "read_only": { + Type: schema.TypeBool, + Optional: true, + Description: `If true, mount the NFS volume as read only in all mounts. Defaults to false.`, + }, + }, + }, + }, "secret": { Type: schema.TypeList, Optional: true, @@ -2526,6 +2553,7 @@ func flattenCloudRunServiceSpecTemplateSpecVolumes(v interface{}, d *schema.Reso "secret": flattenCloudRunServiceSpecTemplateSpecVolumesSecret(original["secret"], d, config), "empty_dir": flattenCloudRunServiceSpecTemplateSpecVolumesEmptyDir(original["emptyDir"], d, config), "csi": flattenCloudRunServiceSpecTemplateSpecVolumesCsi(original["csi"], d, config), + "nfs": flattenCloudRunServiceSpecTemplateSpecVolumesNfs(original["nfs"], d, config), }) } return transformed @@ -2669,6 +2697,35 @@ func flattenCloudRunServiceSpecTemplateSpecVolumesCsiVolumeAttributes(v interfac return v } +func flattenCloudRunServiceSpecTemplateSpecVolumesNfs(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + if v == nil { + return nil + } + original := v.(map[string]interface{}) + if len(original) == 0 { + return nil + } + transformed := make(map[string]interface{}) + transformed["server"] = + flattenCloudRunServiceSpecTemplateSpecVolumesNfsServer(original["server"], d, config) + transformed["path"] = + flattenCloudRunServiceSpecTemplateSpecVolumesNfsPath(original["path"], d, config) + transformed["read_only"] = + flattenCloudRunServiceSpecTemplateSpecVolumesNfsReadOnly(original["readOnly"], d, config) + return []interface{}{transformed} +} +func flattenCloudRunServiceSpecTemplateSpecVolumesNfsServer(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + return v +} + +func flattenCloudRunServiceSpecTemplateSpecVolumesNfsPath(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + return v +} + +func flattenCloudRunServiceSpecTemplateSpecVolumesNfsReadOnly(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { + return v +} + func flattenCloudRunServiceSpecTemplateSpecServingState(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { return v } @@ -4192,6 +4249,13 @@ func expandCloudRunServiceSpecTemplateSpecVolumes(v interface{}, d tpgresource.T transformed["csi"] = transformedCsi } + transformedNfs, err := expandCloudRunServiceSpecTemplateSpecVolumesNfs(original["nfs"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedNfs); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["nfs"] = transformedNfs + } + req = append(req, transformed) } return req, nil @@ -4376,6 +4440,51 @@ func expandCloudRunServiceSpecTemplateSpecVolumesCsiVolumeAttributes(v interface return m, nil } +func expandCloudRunServiceSpecTemplateSpecVolumesNfs(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + l := v.([]interface{}) + if len(l) == 0 || l[0] == nil { + return nil, nil + } + raw := l[0] + original := raw.(map[string]interface{}) + transformed := make(map[string]interface{}) + + transformedServer, err := expandCloudRunServiceSpecTemplateSpecVolumesNfsServer(original["server"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedServer); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["server"] = transformedServer + } + + transformedPath, err := expandCloudRunServiceSpecTemplateSpecVolumesNfsPath(original["path"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedPath); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["path"] = transformedPath + } + + transformedReadOnly, err := expandCloudRunServiceSpecTemplateSpecVolumesNfsReadOnly(original["read_only"], d, config) + if err != nil { + return nil, err + } else if val := reflect.ValueOf(transformedReadOnly); val.IsValid() && !tpgresource.IsEmptyValue(val) { + transformed["readOnly"] = transformedReadOnly + } + + return transformed, nil +} + +func expandCloudRunServiceSpecTemplateSpecVolumesNfsServer(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + return v, nil +} + +func expandCloudRunServiceSpecTemplateSpecVolumesNfsPath(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + return v, nil +} + +func expandCloudRunServiceSpecTemplateSpecVolumesNfsReadOnly(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { + return v, nil +} + func expandCloudRunServiceSpecTemplateSpecServingState(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { return v, nil } diff --git a/website/docs/r/cloud_run_service.html.markdown b/website/docs/r/cloud_run_service.html.markdown index fe378c6771..64411b7c30 100644 --- a/website/docs/r/cloud_run_service.html.markdown +++ b/website/docs/r/cloud_run_service.html.markdown @@ -818,6 +818,13 @@ The following arguments are supported: A filesystem specified by the Container Storage Interface (CSI). Structure is [documented below](#nested_csi). +* `nfs` - + (Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html)) + A filesystem backed by a Network File System share. This filesystem requires the + run.googleapis.com/execution-environment annotation to be set to "gen2" and + run.googleapis.com/launch-stage set to "BETA" or "ALPHA". + Structure is [documented below](#nested_nfs). + The `secret` block supports: @@ -900,6 +907,20 @@ The following arguments are supported: * gcsfuse.run.googleapis.com * bucketName: The name of the Cloud Storage Bucket that backs this volume. The Cloud Run Service identity must have access to this bucket. +The `nfs` block supports: + +* `server` - + (Required) + IP address or hostname of the NFS server + +* `path` - + (Required) + Path exported by the NFS server + +* `read_only` - + (Optional) + If true, mount the NFS volume as read only in all mounts. Defaults to false. + - - -