From d62012cebc361210832c15baec535b134241d993 Mon Sep 17 00:00:00 2001 From: Deepak Kumar <21131061+kumadee@users.noreply.github.com> Date: Sat, 20 Jan 2024 10:40:26 +0100 Subject: [PATCH] Specify `docker_repository` field for google_cloudfunctions2_function (#1987) * fix: allow configuring `docker_repository` for cloud-function2 When docker repository is not specified by default docker repository `projects/PROJECT_ID/locations/REGION/repositories/gcf-artifacts` is used. In such a case, terraform plan always generates a difference for `docker_repository` field as the module passes null value but the tfstate file has the above specified default value. This fix allows one to prevent unnecessary infrastructure change when using the default repository as well as any user created repository. * doc: updated README for cloud-function-v2 --------- Co-authored-by: Ludovico Magnocavallo --- modules/cloud-function-v2/README.md | 33 +++++++++++++------------- modules/cloud-function-v2/main.tf | 1 + modules/cloud-function-v2/variables.tf | 8 ++++++- 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/modules/cloud-function-v2/README.md b/modules/cloud-function-v2/README.md index 22edb2cd..bbce1642 100644 --- a/modules/cloud-function-v2/README.md +++ b/modules/cloud-function-v2/README.md @@ -270,24 +270,25 @@ module "cf-http" { |---|---|:---:|:---:|:---:| | [bucket_name](variables.tf#L26) | Name of the bucket that will be used for the function code. It will be created with prefix prepended if bucket_config is not null. | string | ✓ | | | [bundle_config](variables.tf#L38) | Cloud function source folder and generated zip bundle paths. Output path defaults to '/tmp/bundle.zip' if null. | object({…}) | ✓ | | -| [name](variables.tf#L97) | Name used for cloud function and associated resources. | string | ✓ | | -| [project_id](variables.tf#L112) | Project id used for all resources. | string | ✓ | | +| [name](variables.tf#L103) | Name used for cloud function and associated resources. | string | ✓ | | +| [project_id](variables.tf#L118) | Project id used for all resources. | string | ✓ | | | [bucket_config](variables.tf#L17) | Enable and configure auto-created bucket. Set fields to null to use defaults. | object({…}) | | null | | [build_worker_pool](variables.tf#L32) | Build worker pool, in projects//locations//workerPools/ format. | string | | null | | [description](variables.tf#L47) | Optional description. | string | | "Terraform managed." | -| [environment_variables](variables.tf#L53) | Cloud function environment variables. | map(string) | | {} | -| [function_config](variables.tf#L59) | Cloud function configuration. Defaults to using main as entrypoint, 1 instance with 256MiB of memory, and 180 second timeout. | object({…}) | | {…} | -| [iam](variables.tf#L79) | IAM bindings for topic in {ROLE => [MEMBERS]} format. | map(list(string)) | | {} | -| [ingress_settings](variables.tf#L85) | Control traffic that reaches the cloud function. Allowed values are ALLOW_ALL, ALLOW_INTERNAL_AND_GCLB and ALLOW_INTERNAL_ONLY . | string | | null | -| [labels](variables.tf#L91) | Resource labels. | map(string) | | {} | -| [prefix](variables.tf#L102) | Optional prefix used for resource names. | string | | null | -| [region](variables.tf#L117) | Region used for all resources. | string | | "europe-west1" | -| [secrets](variables.tf#L123) | Secret Manager secrets. Key is the variable name or mountpoint, volume versions are in version:path format. | map(object({…})) | | {} | -| [service_account](variables.tf#L135) | Service account email. Unused if service account is auto-created. | string | | null | -| [service_account_create](variables.tf#L141) | Auto-create service account. | bool | | false | -| [trigger_config](variables.tf#L147) | Function trigger configuration. Leave null for HTTP trigger. | object({…}) | | null | -| [vpc_connector](variables.tf#L165) | VPC connector configuration. Set create to 'true' if a new connector needs to be created. | object({…}) | | null | -| [vpc_connector_config](variables.tf#L175) | VPC connector network configuration. Must be provided if new VPC connector is being created. | object({…}) | | null | +| [docker_repository_id](variables.tf#L53) | User managed repository created in Artifact Registry. | string | | null | +| [environment_variables](variables.tf#L59) | Cloud function environment variables. | map(string) | | {} | +| [function_config](variables.tf#L65) | Cloud function configuration. Defaults to using main as entrypoint, 1 instance with 256MiB of memory, and 180 second timeout. | object({…}) | | {…} | +| [iam](variables.tf#L85) | IAM bindings for topic in {ROLE => [MEMBERS]} format. | map(list(string)) | | {} | +| [ingress_settings](variables.tf#L91) | Control traffic that reaches the cloud function. Allowed values are ALLOW_ALL, ALLOW_INTERNAL_AND_GCLB and ALLOW_INTERNAL_ONLY . | string | | null | +| [labels](variables.tf#L97) | Resource labels. | map(string) | | {} | +| [prefix](variables.tf#L108) | Optional prefix used for resource names. | string | | null | +| [region](variables.tf#L123) | Region used for all resources. | string | | "europe-west1" | +| [secrets](variables.tf#L129) | Secret Manager secrets. Key is the variable name or mountpoint, volume versions are in version:path format. | map(object({…})) | | {} | +| [service_account](variables.tf#L141) | Service account email. Unused if service account is auto-created. | string | | null | +| [service_account_create](variables.tf#L147) | Auto-create service account. | bool | | false | +| [trigger_config](variables.tf#L153) | Function trigger configuration. Leave null for HTTP trigger. | object({…}) | | null | +| [vpc_connector](variables.tf#L171) | VPC connector configuration. Set create to 'true' if a new connector needs to be created. | object({…}) | | null | +| [vpc_connector_config](variables.tf#L181) | VPC connector network configuration. Must be provided if new VPC connector is being created. | object({…}) | | null | ## Outputs @@ -306,4 +307,4 @@ module "cf-http" { | [trigger_service_account_iam_email](outputs.tf#L72) | Service account email. | | | [uri](outputs.tf#L80) | Cloud function service uri. | | | [vpc_connector](outputs.tf#L85) | VPC connector resource if created. | | - \ No newline at end of file + diff --git a/modules/cloud-function-v2/main.tf b/modules/cloud-function-v2/main.tf index 32632d68..5896c538 100644 --- a/modules/cloud-function-v2/main.tf +++ b/modules/cloud-function-v2/main.tf @@ -69,6 +69,7 @@ resource "google_cloudfunctions2_function" "function" { runtime = var.function_config.runtime entry_point = var.function_config.entry_point environment_variables = var.environment_variables + docker_repository = var.docker_repository_id source { storage_source { bucket = local.bucket diff --git a/modules/cloud-function-v2/variables.tf b/modules/cloud-function-v2/variables.tf index fde790c2..a66d3e16 100644 --- a/modules/cloud-function-v2/variables.tf +++ b/modules/cloud-function-v2/variables.tf @@ -50,6 +50,12 @@ variable "description" { default = "Terraform managed." } +variable "docker_repository_id" { + description = "User managed repository created in Artifact Registry." + type = string + default = null +} + variable "environment_variables" { description = "Cloud function environment variables." type = map(string) @@ -179,4 +185,4 @@ variable "vpc_connector_config" { network = string }) default = null -} \ No newline at end of file +}