From b9ba5add732668061b75c7f32af4af24a18b9017 Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Fri, 10 Apr 2020 11:38:59 +0200 Subject: [PATCH 01/28] Update README.md --- modules/cloud-config-container/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cloud-config-container/README.md b/modules/cloud-config-container/README.md index 49083faa3d..7ee53bdc18 100644 --- a/modules/cloud-config-container/README.md +++ b/modules/cloud-config-container/README.md @@ -15,7 +15,7 @@ These modules are designed for several use cases: - [MySQL](./mysql) - [Nginx](./nginx) - [On-prem in Docker](./onprem) -- [ ] Squid forward proxy +- [Squid forward proxy](./squid) ## Using the modules @@ -27,4 +27,4 @@ For convenience when developing or prototyping infrastructure, an optional test ## TODO -- [ ] convert all `xxx_config` variables to use file content instead of path \ No newline at end of file +- [ ] convert all `xxx_config` variables to use file content instead of path From fb8690529f8ef882ab0cde587b1130ab35ce8f2d Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Thu, 16 Apr 2020 09:07:16 +0200 Subject: [PATCH 02/28] fixes onprem example docs --- infrastructure/onprem-google-access-dns/README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/infrastructure/onprem-google-access-dns/README.md b/infrastructure/onprem-google-access-dns/README.md index 39f7a6d8de..2820c8f528 100644 --- a/infrastructure/onprem-google-access-dns/README.md +++ b/infrastructure/onprem-google-access-dns/README.md @@ -44,7 +44,7 @@ If the forwader address does not match the Terraform variable, add the correct v ```bash tf apply -tf taint module.on-prem.google_compute_instance.on_prem_in_a_box +tf taint 'module.vm-onprem.google_compute_instance.default["onprem-1"]' tf apply ``` @@ -89,7 +89,7 @@ google.internal { ```bash # connect to the onprem instance -gcloud compute ssh onprem +gcloud compute ssh onprem-1 # check that the BGP session works and the advertised routes are set sudo docker exec -it onprem_bird_1 ip route |grep bird @@ -101,6 +101,12 @@ sudo docker exec -it onprem_bird_1 ip route |grep bird # get a shell on the toolbox container sudo docker exec -it onprem_toolbox_1 sh +# test pinging the IP address of the test instance (check outputs for it) +ping 10.0.0.3 + +# note: if you are able to ping the IP but the DNS tests below do not work, +# refer to the sections above on configuring the DNS inbound fwd IP + # test forwarding from CoreDNS via the Cloud DNS inbound policy dig test-1.gcp.example.org +short 10.0.0.3 From ee27878212bafb331b93bdd8c167e494f658bc7a Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Thu, 16 Apr 2020 17:07:52 +0200 Subject: [PATCH 03/28] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c34b5603f2..6561b33b38 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ This repository provides **end-to-end examples** and a **suite of Terraform modules** for Google Cloud, which support different use cases: -- starter kits used to bootstrap real-word cloud foundations and infrastructure +- starter kits used to bootstrap real-world cloud foundations and infrastructure - reference examples used to deep dive on network patterns or product features - composable modules that support quick prototyping and testing - a comprehensive source of lean modules that lend themselves well to changes From 152c172b55bbe87e370a5b7b6f1f64c1f6a8c5b7 Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Wed, 22 Apr 2020 15:43:48 +0200 Subject: [PATCH 04/28] fix DNS module internal zone lookup --- CHANGELOG.md | 2 ++ modules/dns/main.tf | 8 +++++--- modules/dns/outputs.tf | 6 +++--- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5780078569..08704af7ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +- fix DNS module internal zone lookup + ## [1.3.0] - 2020-04-08 - add organization policy module diff --git a/modules/dns/main.tf b/modules/dns/main.tf index 4c9dfae214..6e098b8d8d 100644 --- a/modules/dns/main.tf +++ b/modules/dns/main.tf @@ -20,9 +20,11 @@ locals { for record in var.recordsets : join("/", [record.name, record.type]) => record } - zone = element(concat( - google_dns_managed_zone.non-public, google_dns_managed_zone.public - ), 0) + zone = try( + google_dns_managed_zone.non-public.0, try( + google_dns_managed_zone.public.0, null + ) + ) } resource "google_dns_managed_zone" "non-public" { diff --git a/modules/dns/outputs.tf b/modules/dns/outputs.tf index df35628a21..87add74016 100644 --- a/modules/dns/outputs.tf +++ b/modules/dns/outputs.tf @@ -26,15 +26,15 @@ output "zone" { output "name" { description = "The DNS zone name." - value = local.zone.name + value = try(local.zone.name, null) } output "domain" { description = "The DNS zone domain." - value = local.zone.dns_name + value = try(local.zone.dns_name, null) } output "name_servers" { description = "The DNS zone name servers." - value = local.zone.name_servers + value = try(local.zone.name_servers, null) } From 45a8bd841ff6c77d60482f4fd1a2c8521acc0336 Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Wed, 22 Apr 2020 15:47:33 +0200 Subject: [PATCH 05/28] fix Cloud NAT module internal router name lookup --- CHANGELOG.md | 1 + modules/net-cloudnat/main.tf | 6 ++++-- modules/net-cloudnat/outputs.tf | 6 +++++- modules/net-cloudnat/variables.tf | 4 ++-- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 08704af7ff..b856f42b02 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ All notable changes to this project will be documented in this file. ## [Unreleased] - fix DNS module internal zone lookup +- fix Cloud NAT module internal router name lookup ## [1.3.0] - 2020-04-08 diff --git a/modules/net-cloudnat/main.tf b/modules/net-cloudnat/main.tf index fa652ff036..cd380d7255 100644 --- a/modules/net-cloudnat/main.tf +++ b/modules/net-cloudnat/main.tf @@ -16,13 +16,15 @@ locals { router_name = ( - var.router_create ? google_compute_router.router[0].name : var.router_name + var.router_create + ? try(google_compute_router.router[0].name, null) + : var.router_name ) } resource "google_compute_router" "router" { count = var.router_create ? 1 : 0 - name = var.router_name == "" ? "${var.name}-nat" : var.router_name + name = var.router_name == null ? "${var.name}-nat" : var.router_name project = var.project_id region = var.region network = var.router_network diff --git a/modules/net-cloudnat/outputs.tf b/modules/net-cloudnat/outputs.tf index 8dad023498..1cf94a55f8 100644 --- a/modules/net-cloudnat/outputs.tf +++ b/modules/net-cloudnat/outputs.tf @@ -31,7 +31,11 @@ output "region" { output "router" { description = "Cloud NAT router resources (if auto created)." - value = var.router_create ? google_compute_router.router[0] : null + value = ( + var.router_create + ? try(google_compute_router.router[0], null) + : null + ) } output "router_name" { diff --git a/modules/net-cloudnat/variables.tf b/modules/net-cloudnat/variables.tf index 5b987cf565..dbe0f46b5d 100644 --- a/modules/net-cloudnat/variables.tf +++ b/modules/net-cloudnat/variables.tf @@ -78,13 +78,13 @@ variable "router_create" { variable "router_name" { description = "Router name, leave blank if router will be created to use auto generated name." type = string - default = "" + default = null } variable "router_network" { description = "Name of the VPC used for auto-created router." type = string - default = "" + default = null } variable "subnetworks" { From e03ceeedd1cfe8dc34507294314ca49d8273b10b Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Wed, 22 Apr 2020 17:14:41 +0200 Subject: [PATCH 06/28] update hub and spoke peering diagram --- .../hub-and-spoke-peering/diagram.png | Bin 153704 -> 151868 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/infrastructure/hub-and-spoke-peering/diagram.png b/infrastructure/hub-and-spoke-peering/diagram.png index 0c598fe56eb548065c4766b17209061b9480bbce..ad2b37ab1fe45b5b24e44b1004d53a3c980cc5df 100644 GIT binary patch literal 151868 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

#FkAC${zN~kek z25KK@jg>CkCL;J77(c>urMpI3fCRw)J9OPlIOOso#m3#l6HN*M*^tXi9QJg$Ss#7z zcYL&wEh%lc2J%+%@Ea9r#0~-F$?GdaN=w=1hz|7;dyH?Mhf3PJMn!ppnT(frDQo^+eN8`#|z^C?hrX+C6XKe>CX@ zf^%t{Ks*V%?G;L#;kg(4Q2o?~)b&XvBvYMcm{uSOQJ4lHUNCw$Nxo@MU~6J7!cw+V zqb=arE{n>GMRb|7SI#bVH$k7N^&y2EMj==9KmaCwa`}k6Ag2;Hc176u?mPu-`Q;Bl z+d)?vOA)Ji-nAlAqfk%Q#a1sW@8G&M8Z<{<^~?kn_%+86uC#p63uRQN*PCI8<8d

&){Eru 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 a-PD{<_U%h?y5CC!{^^}C#*}C|Uj7H9(_J9| From 41e8e70e4f56c73058a91aa0b8f3ca334ddecdb6 Mon Sep 17 00:00:00 2001 From: Aleksandr Averbukh Date: Thu, 23 Apr 2020 07:10:52 +0200 Subject: [PATCH 07/28] Update outputs for foundations/environments example (#59) --- foundations/environments/README.md | 3 ++- foundations/environments/outputs.tf | 23 +++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/foundations/environments/README.md b/foundations/environments/README.md index 41f34c4595..8f5c361a4f 100644 --- a/foundations/environments/README.md +++ b/foundations/environments/README.md @@ -61,5 +61,6 @@ If no shared services are needed, the shared service project module can of cours | environment_service_account_keys | Service account keys used to run each environment Terraform modules. | ✓ | | environment_service_accounts | Service accounts used to run each environment Terraform modules. | | | environment_tf_gcs_buckets | GCS buckets used for each environment Terraform state. | | -| shared_resources_project | Project that holdes resources shared across environments. | | +| shared_services_project | Project that holdes resources shared across environments. | | +| terraform_project | Project that holds the base Terraform resources. | | diff --git a/foundations/environments/outputs.tf b/foundations/environments/outputs.tf index f083d1c8a0..733a574ce3 100644 --- a/foundations/environments/outputs.tf +++ b/foundations/environments/outputs.tf @@ -12,52 +12,51 @@ # See the License for the specific language governing permissions and # limitations under the License. -/* output "terraform_project" { +output "terraform_project" { description = "Project that holds the base Terraform resources." - value = module.project-tf.project_id + value = module.tf-project.project_id } output "bootstrap_tf_gcs_bucket" { description = "GCS bucket used for the bootstrap Terraform state." - value = module.gcs-tf-bootstrap.name + value = module.tf-gcs-bootstrap.name } output "environment_folders" { description = "Top-level environment folders." - value = module.folders-top-level.ids + value = module.environment-folders.ids } output "environment_tf_gcs_buckets" { description = "GCS buckets used for each environment Terraform state." - value = module.gcs-tf-environments.names + value = module.tf-gcs-environments.names } output "environment_service_account_keys" { description = "Service account keys used to run each environment Terraform modules." sensitive = true - value = module.service-accounts-tf-environments.keys + value = module.tf-service-accounts.keys } output "environment_service_accounts" { description = "Service accounts used to run each environment Terraform modules." - value = module.service-accounts-tf-environments.emails + value = module.tf-service-accounts.emails } output "audit_logs_bq_dataset" { description = "Bigquery dataset for the audit logs export." - value = module.bq-audit-export.resource_name + value = module.audit-datasets.datasets[0].dataset_id } output "audit_logs_project" { description = "Project that holds the audit logs export resources." - value = module.project-audit.project_id + value = module.audit-project.project_id } -output "shared_resources_project" { +output "shared_services_project" { description = "Project that holdes resources shared across environments." - value = module.project-shared-resources.project_id + value = module.sharedsvc-project.project_id } # Add further outputs here for the additional modules that manage shared # resources, like GCR, GCS buckets, KMS, etc. - */ From 724950fe2ad6e64f57abc716fd6ed548b41e1738 Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Thu, 23 Apr 2020 07:11:51 +0200 Subject: [PATCH 08/28] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b856f42b02..4299862ad8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ All notable changes to this project will be documented in this file. - fix DNS module internal zone lookup - fix Cloud NAT module internal router name lookup +- re-enable and update outputs for the foundations environments example ## [1.3.0] - 2020-04-08 From 587f6113b214d466f45a5ad7eff73262426b7397 Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Thu, 23 Apr 2020 09:54:04 +0200 Subject: [PATCH 09/28] Add peering route configuration support for private clusters (#60) * add peering routes and node DNS cache support to GKE modules * fix peering config count * catch and fix vpc self link in peering resource --- modules/gke-cluster/main.tf | 25 ++++++++++++++++++++++++- modules/gke-cluster/variables.tf | 21 ++++++++++++++++----- 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/modules/gke-cluster/main.tf b/modules/gke-cluster/main.tf index 67e95dd3c7..4b98acd549 100644 --- a/modules/gke-cluster/main.tf +++ b/modules/gke-cluster/main.tf @@ -14,6 +14,16 @@ * limitations under the License. */ +locals { + # The Google provider is unable to validate certain configurations of + # private_cluster_config when enable_private_nodes is false (provider docs) + is_private = try(var.private_cluster_config.enable_private_nodes, false) + peering = try( + google_container_cluster.cluster.private_cluster_config.0.peering_name, + null + ) +} + resource "google_container_cluster" "cluster" { provider = google-beta project = var.project_id @@ -36,8 +46,12 @@ resource "google_container_cluster" "cluster" { remove_default_node_pool = true # node_config + # TODO(ludomagno): compute addons map in locals and use a single dynamic block addons_config { + dns_cache_config { + enabled = var.addons.dns_cache_config + } http_load_balancing { disabled = ! var.addons.http_load_balancing } @@ -106,7 +120,7 @@ resource "google_container_cluster" "cluster" { } dynamic private_cluster_config { - for_each = var.private_cluster_config != null ? [var.private_cluster_config] : [] + for_each = local.is_private ? [var.private_cluster_config] : [] iterator = config content { enable_private_nodes = config.value.enable_private_nodes @@ -195,3 +209,12 @@ resource "google_container_cluster" "cluster" { } } + +resource "google_compute_network_peering_routes_config" "gke_master" { + count = local.is_private && var.peering_config != null ? 1 : 0 + project = var.project_id + peering = local.peering + network = element(reverse(split("/", var.network)), 0) + import_custom_routes = var.peering_config.import_routes + export_custom_routes = var.peering_config.export_routes +} diff --git a/modules/gke-cluster/variables.tf b/modules/gke-cluster/variables.tf index e39667711b..270a20f2aa 100644 --- a/modules/gke-cluster/variables.tf +++ b/modules/gke-cluster/variables.tf @@ -17,24 +17,26 @@ variable "addons" { description = "Addons enabled in the cluster (true means enabled)." type = object({ + cloudrun_config = bool + dns_cache_config = bool horizontal_pod_autoscaling = bool http_load_balancing = bool - network_policy_config = bool - cloudrun_config = bool istio_config = object({ enabled = bool tls = bool }) + network_policy_config = bool }) default = { + cloudrun_config = false + dns_cache_config = false horizontal_pod_autoscaling = true http_load_balancing = true - network_policy_config = false - cloudrun_config = false istio_config = { enabled = false tls = false } + network_policy_config = false } } @@ -169,6 +171,15 @@ variable "node_locations" { default = [] } +variable "peering_config" { + description = "Configure peering with the master VPC for private clusters." + type = object({ + export_routes = bool + import_routes = bool + }) + default = null +} + variable "pod_security_policy" { description = "Enable the PodSecurityPolicy feature." type = bool @@ -176,7 +187,7 @@ variable "pod_security_policy" { } variable "private_cluster_config" { - description = "Enable and configure private cluster." + description = "Enable and configure private cluster, private nodes must be true if used." type = object({ enable_private_nodes = bool enable_private_endpoint = bool From 0f68507b4ceeaf1a9075831c1f9aaf99f229fbcd Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Thu, 23 Apr 2020 09:54:39 +0200 Subject: [PATCH 10/28] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4299862ad8..e955c8fcda 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ All notable changes to this project will be documented in this file. - fix DNS module internal zone lookup - fix Cloud NAT module internal router name lookup - re-enable and update outputs for the foundations environments example +- add peering route configuration for private clusters to GKE cluster module ## [1.3.0] - 2020-04-08 From 5c90dd58854fc7eb6200db16f5151e4e32fde786 Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Sat, 25 Apr 2020 07:20:51 +0200 Subject: [PATCH 11/28] add network-level diagram to hub and spoke peering --- infrastructure/hub-and-spoke-peering/README.md | 4 +++- .../hub-and-spoke-peering/diagram-network.png | Bin 0 -> 51692 bytes 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 infrastructure/hub-and-spoke-peering/diagram-network.png diff --git a/infrastructure/hub-and-spoke-peering/README.md b/infrastructure/hub-and-spoke-peering/README.md index 6e4cb87cdc..82ed9a4892 100644 --- a/infrastructure/hub-and-spoke-peering/README.md +++ b/infrastructure/hub-and-spoke-peering/README.md @@ -30,7 +30,9 @@ This sample creates several distinct groups of resources: ## Testing GKE access from spoke 1 -As mentioned above, a VPN tunnel is used as a workaround to avoid the peering transitivity issue that would prevent any VPC other than spoke 2 to connect to the GKE master. +As mentioned above, a VPN tunnel is used as a workaround to avoid the peering transitivity issue that would prevent any VPC other than spoke 2 to connect to the GKE master. This diagram illustrates the solution + +![Network-level diagram](diagram-network.png "Network-level diagram") To test cluster access, first log on to the spoke 2 instance and confirm cluster and IAM roles are set up correctly: diff --git a/infrastructure/hub-and-spoke-peering/diagram-network.png b/infrastructure/hub-and-spoke-peering/diagram-network.png new file mode 100644 index 0000000000000000000000000000000000000000..2817fef526692e852352762cd8ad5958ab4e65ab GIT binary patch literal 51692 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 Date: Sat, 25 Apr 2020 07:27:29 +0200 Subject: [PATCH 12/28] update GKE cluster module README --- modules/gke-cluster/README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/gke-cluster/README.md b/modules/gke-cluster/README.md index fb0c95afbe..fcbae58fa5 100644 --- a/modules/gke-cluster/README.md +++ b/modules/gke-cluster/README.md @@ -41,7 +41,7 @@ module "cluster-1" { | secondary_range_pods | Subnet secondary range name used for pods. | string | ✓ | | | secondary_range_services | Subnet secondary range name used for services. | string | ✓ | | | subnetwork | VPC subnetwork name or self link. | string | ✓ | | -| *addons* | Addons enabled in the cluster (true means enabled). | object({...}) | | ... | +| *addons* | Addons enabled in the cluster (true means enabled). | object({...}) | | ... | | *authenticator_security_group* | RBAC security group for Google Groups for GKE, format is gke-security-groups@yourdomain.com. | string | | null | | *cluster_autoscaling* | Enable and configure limits for Node Auto-Provisioning with Cluster Autoscaler. | object({...}) | | ... | | *database_encryption* | Enable and configure GKE application-layer secrets encryption. | object({...}) | | ... | @@ -58,8 +58,9 @@ module "cluster-1" { | *min_master_version* | Minimum version of the master, defaults to the version of the most recent official release. | string | | null | | *monitoring_service* | Monitoring service (disable with an empty string). | string | | monitoring.googleapis.com/kubernetes | | *node_locations* | Zones in which the cluster's nodes are located. | list(string) | | [] | +| *peering_config* | Configure peering with the master VPC for private clusters. | object({...}) | | null | | *pod_security_policy* | Enable the PodSecurityPolicy feature. | bool | | null | -| *private_cluster_config* | Enable and configure private cluster. | object({...}) | | null | +| *private_cluster_config* | Enable and configure private cluster, private nodes must be true if used. | object({...}) | | null | | *release_channel* | Release channel for GKE upgrades. | string | | null | | *resource_usage_export_config* | Configure the ResourceUsageExportConfig feature. | object({...}) | | ... | | *vertical_pod_autoscaling* | Enable the Vertical Pod Autoscaling feature. | bool | | null | From 6a75a3d2be480c67c9d21fe019d54b2ffbcca338 Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Sat, 25 Apr 2020 07:34:01 +0200 Subject: [PATCH 13/28] add peering config via GKE module to hub and spoke peering README --- .../hub-and-spoke-peering/README.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/infrastructure/hub-and-spoke-peering/README.md b/infrastructure/hub-and-spoke-peering/README.md index 82ed9a4892..836fb56484 100644 --- a/infrastructure/hub-and-spoke-peering/README.md +++ b/infrastructure/hub-and-spoke-peering/README.md @@ -41,7 +41,24 @@ gcloud container clusters get-credentials cluster-1 --zone europe-west1-b kubectl get all ``` -The next step is to edit the peering towards the GKE master tenant VPC, and enable export routes. The peering has a name like `gke-xxxxxxxxxxxxxxxxxxxx-xxxx-xxxx-peer`, you can edit it in the Cloud Console from the *VPC network peering* page or using `gcloud`: +The next step is to edit the peering towards the GKE master tenant VPC, and enable export routes. You can do it directly in Terraform with the GKE module `peering_config' variable, via gcloud, or on the cloud ccnsole. We're leaving it as an option, since one of the goals of this example is to allow testing both working and non-working configurations. + +### Export routes via Terraform + +Change the GKE cluster module and add a new variable after `private_cluster_config`: + +```hcl + peering_config = { + export_routes = bool + import_routes = bool + } +``` + +If you added the variable after applying, simply apply Terraform again. + +### Export routes via gcloud + +The peering has a name like `gke-xxxxxxxxxxxxxxxxxxxx-xxxx-xxxx-peer`, you can edit it in the Cloud Console from the *VPC network peering* page or using `gcloud`: ``` gcloud compute networks peerings list From 095f0d2adde6baae61cc1d749c74624298c3f9b6 Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Sat, 25 Apr 2020 07:35:30 +0200 Subject: [PATCH 14/28] fix peering config via GKE module in hub and spoke peering README --- infrastructure/hub-and-spoke-peering/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/infrastructure/hub-and-spoke-peering/README.md b/infrastructure/hub-and-spoke-peering/README.md index 836fb56484..d89814477c 100644 --- a/infrastructure/hub-and-spoke-peering/README.md +++ b/infrastructure/hub-and-spoke-peering/README.md @@ -49,8 +49,8 @@ Change the GKE cluster module and add a new variable after `private_cluster_conf ```hcl peering_config = { - export_routes = bool - import_routes = bool + export_routes = true + import_routes = false } ``` From c48f6130e6a8b2d675f8f0c6750fce20275243b3 Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Sat, 25 Apr 2020 07:47:12 +0200 Subject: [PATCH 15/28] Update README.md --- infrastructure/hub-and-spoke-peering/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/infrastructure/hub-and-spoke-peering/README.md b/infrastructure/hub-and-spoke-peering/README.md index d89814477c..1ad0aba983 100644 --- a/infrastructure/hub-and-spoke-peering/README.md +++ b/infrastructure/hub-and-spoke-peering/README.md @@ -71,7 +71,9 @@ Then connect via SSH to the spoke 1 instance and run the same commands you ran o ## Operational considerations -A single pre-existing project is used in this example to keep variables and complexity to a minimum, in a real world scenarios each spoke would probably use a separate project. +A single pre-existing project is used in this example to keep variables and complexity to a minimum, in a real world scenario each spoke would use a separate project (and Shared VPC). + +A few APIs need to be enabled in the project, if `apply` fails due to a service not being enabled just click on the link in the errr message to enable it for the project then resume `apply`. The VPN used to connect the GKE masters VPC does not account for HA, upgrading to use HA VPN is reasonably simple by using the relevant [module](../../modules/net-vpn-ha). From 6f0fd6913b5f66ce8ea3ced3040d9d82e9b0af79 Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Sat, 25 Apr 2020 07:47:55 +0200 Subject: [PATCH 16/28] Update README.md --- infrastructure/hub-and-spoke-peering/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/infrastructure/hub-and-spoke-peering/README.md b/infrastructure/hub-and-spoke-peering/README.md index 1ad0aba983..3a23ba9681 100644 --- a/infrastructure/hub-and-spoke-peering/README.md +++ b/infrastructure/hub-and-spoke-peering/README.md @@ -73,7 +73,7 @@ Then connect via SSH to the spoke 1 instance and run the same commands you ran o A single pre-existing project is used in this example to keep variables and complexity to a minimum, in a real world scenario each spoke would use a separate project (and Shared VPC). -A few APIs need to be enabled in the project, if `apply` fails due to a service not being enabled just click on the link in the errr message to enable it for the project then resume `apply`. +A few APIs need to be enabled in the project, if `apply` fails due to a service not being enabled just click on the link in the error message to enable it for the project, then resume `apply`. The VPN used to connect the GKE masters VPC does not account for HA, upgrading to use HA VPN is reasonably simple by using the relevant [module](../../modules/net-vpn-ha). From ab41d2d3f888a662d5f0a4e8358aa3fc9370d21b Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Sat, 25 Apr 2020 12:04:47 +0200 Subject: [PATCH 17/28] fix compute-vm instance group manager and add usage example --- modules/compute-vm/README.md | 46 +++++++++++++++++++++++++--- modules/compute-vm/instance_group.tf | 2 +- 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/modules/compute-vm/README.md b/modules/compute-vm/README.md index e07680922c..e5c3f8e290 100644 --- a/modules/compute-vm/README.md +++ b/modules/compute-vm/README.md @@ -2,10 +2,6 @@ This module allows creating one or multiple instances or an instance template for a specific configuration. A service account is optionally created and assigned if not specified. -## TODO - -- [ ] add examples for instance groups - ## Examples ### Instance leveraging defaults @@ -61,6 +57,48 @@ module "debian-test" { } ``` +### Managed instance group + +This example shows a basic instance where the module is used to create an instance template, and the template is associated to a basic managed instance group with no autohealing or autoscaling configuration. Instance group support is meant for prototyping, or in those situations where there's no need to manage multiple application versions. + +```hcl +module "instance-group" { + source = "../../cloud-foundation-fabric/modules/compute-vm" + project_id = "my-project" + region = "europe-west1" + zone = "europe-west1-b" + name = "ilb-test" + network_interfaces = [{ + network = local.network_self_link, + subnetwork = local.subnetwork_self_link, + nat = false, + addresses = null + }] + boot_disk = { + image = "projects/cos-cloud/global/images/family/cos-stable" + type = "pd-ssd" + size = 10 + } + service_account = local.service_account_email + service_account_scopes = ["https://www.googleapis.com/auth/cloud-platform"] + use_instance_template = true + metadata = { + user-data = local.cloud_config + } + group_manager = { + auto_healing_policies = null + options = null + update_policy = null + named_ports = {} + regional = false + target_size = 2 + versions = [] + default = module.instance-group.template.self_link + } +} + +``` + ## Variables diff --git a/modules/compute-vm/instance_group.tf b/modules/compute-vm/instance_group.tf index 17dcd44dbe..561b7cb193 100644 --- a/modules/compute-vm/instance_group.tf +++ b/modules/compute-vm/instance_group.tf @@ -113,7 +113,7 @@ resource "google_compute_instance_group_manager" "managed" { } dynamic version { for_each = ( - var.group_manager.versions == null ? [] : [var.group_manager.versions] + var.group_manager.versions == null ? [] : var.group_manager.versions ) iterator = config content { From af5850ef2bd586d0b934299f4333da7c021aad50 Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Mon, 27 Apr 2020 08:08:31 +0200 Subject: [PATCH 18/28] rename workload config variable in gke nodepool and change default --- CHANGELOG.md | 3 +++ modules/gke-nodepool/main.tf | 2 +- modules/gke-nodepool/variables.tf | 12 ++++++------ 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e955c8fcda..a2d135c471 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,9 @@ All notable changes to this project will be documented in this file. - fix Cloud NAT module internal router name lookup - re-enable and update outputs for the foundations environments example - add peering route configuration for private clusters to GKE cluster module +- **incompatible changes** in the GKE nodepool module + - rename `node_config_workload_metadata_config` variable to `workload_metadata_config` + - new default for `workload_metadata_config` is `GKE_METADATA_SERVER` ## [1.3.0] - 2020-04-08 diff --git a/modules/gke-nodepool/main.tf b/modules/gke-nodepool/main.tf index 40019e09c4..3fe022a741 100644 --- a/modules/gke-nodepool/main.tf +++ b/modules/gke-nodepool/main.tf @@ -77,7 +77,7 @@ resource "google_container_node_pool" "nodepool" { } workload_metadata_config { - node_metadata = var.node_config_workload_metadata_config + node_metadata = var.workload_metadata_config } } diff --git a/modules/gke-nodepool/variables.tf b/modules/gke-nodepool/variables.tf index 049cfb3ede..96f05d074e 100644 --- a/modules/gke-nodepool/variables.tf +++ b/modules/gke-nodepool/variables.tf @@ -165,12 +165,6 @@ variable "node_config_tags" { # default = null # } -variable "node_config_workload_metadata_config" { - description = "Metadata configuration to expose to workloads on the node pool." - type = string - default = "SECURE" -} - variable "node_count" { description = "Number of nodes per instance group, can be updated after creation. Ignored when autoscaling is set." type = number @@ -196,3 +190,9 @@ variable "upgrade_config" { }) default = null } + +variable "workload_metadata_config" { + description = "Metadata configuration to expose to workloads on the node pool." + type = string + default = "GKE_METADATA_SERVER" +} From bce602f7f7b9fd2203b3588b653177dbdb164712 Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Mon, 27 Apr 2020 09:12:53 +0200 Subject: [PATCH 19/28] update gke nodepool README --- modules/gke-nodepool/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/gke-nodepool/README.md b/modules/gke-nodepool/README.md index fcaa4bae59..0828190ebb 100644 --- a/modules/gke-nodepool/README.md +++ b/modules/gke-nodepool/README.md @@ -43,10 +43,10 @@ module "cluster-1-nodepool-1" { | *node_config_service_account* | Service account used for nodes. | string | | null | | *node_config_shielded_instance_config* | Shielded instance options. | object({...}) | | null | | *node_config_tags* | Network tags applied to nodes. | list(string) | | null | -| *node_config_workload_metadata_config* | Metadata configuration to expose to workloads on the node pool. | string | | SECURE | | *node_count* | Number of nodes per instance group, can be updated after creation. Ignored when autoscaling is set. | number | | null | | *node_locations* | Optional list of zones in which nodes should be located. Uses cluster locations if unset. | list(string) | | null | | *upgrade_config* | Optional node upgrade configuration. | object({...}) | | null | +| *workload_metadata_config* | Metadata configuration to expose to workloads on the node pool. | string | | GKE_METADATA_SERVER | ## Outputs From df0b4c532a46943c2c5e8ebc51855a3804d2d274 Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Mon, 27 Apr 2020 09:16:45 +0200 Subject: [PATCH 20/28] add to GKE cluster module --- CHANGELOG.md | 1 + modules/gke-cluster/README.md | 1 + modules/gke-cluster/main.tf | 4 ++++ modules/gke-cluster/variables.tf | 6 ++++++ 4 files changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a2d135c471..831209a26d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ All notable changes to this project will be documented in this file. - fix Cloud NAT module internal router name lookup - re-enable and update outputs for the foundations environments example - add peering route configuration for private clusters to GKE cluster module +- add `workload_metadata_config` variable to GKE cluster module - **incompatible changes** in the GKE nodepool module - rename `node_config_workload_metadata_config` variable to `workload_metadata_config` - new default for `workload_metadata_config` is `GKE_METADATA_SERVER` diff --git a/modules/gke-cluster/README.md b/modules/gke-cluster/README.md index fcbae58fa5..fcf9d34581 100644 --- a/modules/gke-cluster/README.md +++ b/modules/gke-cluster/README.md @@ -65,6 +65,7 @@ module "cluster-1" { | *resource_usage_export_config* | Configure the ResourceUsageExportConfig feature. | object({...}) | | ... | | *vertical_pod_autoscaling* | Enable the Vertical Pod Autoscaling feature. | bool | | null | | *workload_identity* | Enable the Workload Identity feature. | bool | | true | +| *workload_metadata_config* | Define how to expose node metadata to workloads. | string | | GKE_METADATA_SERVER | ## Outputs diff --git a/modules/gke-cluster/main.tf b/modules/gke-cluster/main.tf index 4b98acd549..85df98f264 100644 --- a/modules/gke-cluster/main.tf +++ b/modules/gke-cluster/main.tf @@ -208,6 +208,10 @@ resource "google_container_cluster" "cluster" { } } + workload_metadata_config { + node_metadata = var.workload_metadata_config + } + } resource "google_compute_network_peering_routes_config" "gke_master" { diff --git a/modules/gke-cluster/variables.tf b/modules/gke-cluster/variables.tf index 270a20f2aa..7d008dc93b 100644 --- a/modules/gke-cluster/variables.tf +++ b/modules/gke-cluster/variables.tf @@ -245,3 +245,9 @@ variable "workload_identity" { type = bool default = true } + +variable "workload_metadata_config" { + description = "Define how to expose node metadata to workloads." + type = string + default = "GKE_METADATA_SERVER" +} From 560fb3ac3c41294c00e4d1520079aadec9b6c128 Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Mon, 27 Apr 2020 09:19:23 +0200 Subject: [PATCH 21/28] Revert "add to GKE cluster module" This reverts commit df0b4c532a46943c2c5e8ebc51855a3804d2d274. --- CHANGELOG.md | 1 - modules/gke-cluster/README.md | 1 - modules/gke-cluster/main.tf | 4 ---- modules/gke-cluster/variables.tf | 6 ------ 4 files changed, 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 831209a26d..a2d135c471 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,6 @@ All notable changes to this project will be documented in this file. - fix Cloud NAT module internal router name lookup - re-enable and update outputs for the foundations environments example - add peering route configuration for private clusters to GKE cluster module -- add `workload_metadata_config` variable to GKE cluster module - **incompatible changes** in the GKE nodepool module - rename `node_config_workload_metadata_config` variable to `workload_metadata_config` - new default for `workload_metadata_config` is `GKE_METADATA_SERVER` diff --git a/modules/gke-cluster/README.md b/modules/gke-cluster/README.md index fcf9d34581..fcbae58fa5 100644 --- a/modules/gke-cluster/README.md +++ b/modules/gke-cluster/README.md @@ -65,7 +65,6 @@ module "cluster-1" { | *resource_usage_export_config* | Configure the ResourceUsageExportConfig feature. | object({...}) | | ... | | *vertical_pod_autoscaling* | Enable the Vertical Pod Autoscaling feature. | bool | | null | | *workload_identity* | Enable the Workload Identity feature. | bool | | true | -| *workload_metadata_config* | Define how to expose node metadata to workloads. | string | | GKE_METADATA_SERVER | ## Outputs diff --git a/modules/gke-cluster/main.tf b/modules/gke-cluster/main.tf index 85df98f264..4b98acd549 100644 --- a/modules/gke-cluster/main.tf +++ b/modules/gke-cluster/main.tf @@ -208,10 +208,6 @@ resource "google_container_cluster" "cluster" { } } - workload_metadata_config { - node_metadata = var.workload_metadata_config - } - } resource "google_compute_network_peering_routes_config" "gke_master" { diff --git a/modules/gke-cluster/variables.tf b/modules/gke-cluster/variables.tf index 7d008dc93b..270a20f2aa 100644 --- a/modules/gke-cluster/variables.tf +++ b/modules/gke-cluster/variables.tf @@ -245,9 +245,3 @@ variable "workload_identity" { type = bool default = true } - -variable "workload_metadata_config" { - description = "Define how to expose node metadata to workloads." - type = string - default = "GKE_METADATA_SERVER" -} From 5088ed61ff273916cdee5f83dde77e848d28dea8 Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Tue, 28 Apr 2020 19:43:42 +0200 Subject: [PATCH 22/28] make the vpn ha module more resilient on destroy --- modules/net-vpn-ha/main.tf | 2 +- modules/net-vpn-ha/outputs.tf | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/net-vpn-ha/main.tf b/modules/net-vpn-ha/main.tf index 49055b1b5f..751081ee23 100644 --- a/modules/net-vpn-ha/main.tf +++ b/modules/net-vpn-ha/main.tf @@ -24,7 +24,7 @@ locals { ) router = ( var.router_create - ? google_compute_router.router[0].name + ? try(google_compute_router.router[0].name, null) : var.router_name ) secret = random_id.secret.b64_url diff --git a/modules/net-vpn-ha/outputs.tf b/modules/net-vpn-ha/outputs.tf index 2a5388900e..9426937725 100644 --- a/modules/net-vpn-ha/outputs.tf +++ b/modules/net-vpn-ha/outputs.tf @@ -53,7 +53,7 @@ output "tunnels" { description = "VPN tunnel resources." value = { for name in keys(var.tunnels) : - name => google_compute_vpn_tunnel.tunnels[name] + name => try(google_compute_vpn_tunnel.tunnels[name], null) } } @@ -61,7 +61,7 @@ output "tunnel_names" { description = "VPN tunnel names." value = { for name in keys(var.tunnels) : - name => google_compute_vpn_tunnel.tunnels[name].name + name => try(google_compute_vpn_tunnel.tunnels[name].name, null) } } @@ -69,7 +69,7 @@ output "tunnel_self_links" { description = "VPN tunnel self links." value = { for name in keys(var.tunnels) : - name => google_compute_vpn_tunnel.tunnels[name].self_link + name => try(google_compute_vpn_tunnel.tunnels[name].self_link, null) } } From be3c461cf9f49cd4ce916b9b991c25ce765f91b1 Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Thu, 30 Apr 2020 17:08:18 +0200 Subject: [PATCH 23/28] MIG and ILB modules (#61) * preliminary net-ilb module, untested * outputs * fix basic mistakes, add initial test * test variable defaults on all resources * README stub * net-ilb module fixes and example * compute-vm module fixes * fix test * remove mig from compute vm module * split out mig from compute-vm (untested) * split out mig from compute-vm (untested) * fix mig versions * small fixes and examples for mig module * Update README.md * Update README.md * switch mig to using a single variable for both region and zone --- modules/compute-mig/README.md | 188 +++++++++ modules/compute-mig/main.tf | 367 ++++++++++++++++++ modules/compute-mig/outputs.tf | 40 ++ modules/compute-mig/variables.tf | 131 +++++++ modules/compute-vm/README.md | 26 +- modules/compute-vm/instance_group.tf | 215 ---------- modules/compute-vm/main.tf | 26 ++ modules/compute-vm/outputs.tf | 19 +- modules/compute-vm/variables.tf | 35 +- modules/net-ilb/README.md | 110 ++++++ modules/net-ilb/main.tf | 191 +++++++++ modules/net-ilb/outputs.tf | 65 ++++ modules/net-ilb/variables.tf | 129 ++++++ tests/modules/compute_vm/fixture/main.tf | 1 - tests/modules/compute_vm/fixture/variables.tf | 5 - tests/modules/compute_vm/test_plan.py | 9 + tests/modules/compute_vm/test_plan_group.py | 44 --- tests/modules/net_ilb/__init__.py | 13 + tests/modules/net_ilb/fixture/main.tf | 35 ++ tests/modules/net_ilb/fixture/variables.tf | 88 +++++ tests/modules/net_ilb/test_plan.py | 55 +++ 21 files changed, 1459 insertions(+), 333 deletions(-) create mode 100644 modules/compute-mig/README.md create mode 100644 modules/compute-mig/main.tf create mode 100644 modules/compute-mig/outputs.tf create mode 100644 modules/compute-mig/variables.tf delete mode 100644 modules/compute-vm/instance_group.tf create mode 100644 modules/net-ilb/README.md create mode 100644 modules/net-ilb/main.tf create mode 100644 modules/net-ilb/outputs.tf create mode 100644 modules/net-ilb/variables.tf delete mode 100644 tests/modules/compute_vm/test_plan_group.py create mode 100644 tests/modules/net_ilb/__init__.py create mode 100644 tests/modules/net_ilb/fixture/main.tf create mode 100644 tests/modules/net_ilb/fixture/variables.tf create mode 100644 tests/modules/net_ilb/test_plan.py diff --git a/modules/compute-mig/README.md b/modules/compute-mig/README.md new file mode 100644 index 0000000000..918a2a3d97 --- /dev/null +++ b/modules/compute-mig/README.md @@ -0,0 +1,188 @@ +# GCE Managed Instance Group module + +This module allows creating a managed instance group supporting one or more application versions via instance templates. A health check and an autoscaler can also be optionally created. + +This module can be coupled with the [`compute-vm`](../compute-vm) module which can manage instance templates, and the [`net-ilb`](../net-ilb) module to assign the MIG to a backend wired to an Internal Load Balancer. The first use case is shown in the examples below. + +## Examples + +This example shows how to manage a simple MIG that leverages the `compute-vm` module to manage the underlying instance template. The following sub-examples will only show how to enable specific features of this module, and won't replicate the combined setup. + +```hcl +module "cos-nginx" { + source = "./modules/cloud-config-container/nginx" +} + +module "nginx-template" { + source = "./modules/compute-vm" + project_id = "my-project" + region = "europe-west1" + zone = "europe-west1-b" + name = "ilb-test" + network_interfaces = [{ + network = local.network_self_link, + subnetwork = local.subnetwork_self_link, + nat = false, + addresses = null + }] + boot_disk = { + image = "projects/cos-cloud/global/images/family/cos-stable" + type = "pd-ssd" + size = 10 + } + tags = ["http-server", "ssh"] + use_instance_template = true + metadata = { + user-data = module.cos-nginx.cloud_config + } +} + +module "nginx-mig" { + source = "./modules/compute-mig" + project_id = "my-project" + location = "europe-west1-b" + name = "mig-test" + target_size = 2 + default_version = { + instance_template = module.nginx-template.template.self_link + name = "default" + } +} +``` + +### Multiple versions + +If multiple versions are desired, use more `compute-vm` instances for the additional templates used in each version (not shown here), and reference them like this: + +```hcl +module "nginx-mig" { + source = "./modules/compute-mig" + project_id = "my-project" + location = "europe-west1-b" + name = "mig-test" + target_size = 3 + default_version = { + instance_template = module.nginx-template-default.template.self_link + name = "default" + } + versions = { + canary = { + instance_template = module.nginx-template-default.template.self_link + target_type = "fixed" + target_size = 1 + } + } +} +``` + +### Health check and autohealing policies + +Autohealing policies can use an externally defined health check, or have this module auto-create one: + +```hcl +module "nginx-mig" { + source = "./modules/compute-mig" + project_id = "my-project" + location = "europe-west1-b" + name = "mig-test" + target_size = 3 + default_version = { + instance_template = module.nginx-template-default.template.self_link + name = "default" + } + auto_healing_policies = { + health_check = module.nginx-mig.health_check.self_link + initial_delay_sec = 30 + } + health_check_config = { + type = "http" + check = { port = 80 } + config = {} + logging = true + } +} +``` + +### Autoscaling + +The module can create and manage an autoscaler associated with the MIG. When using autoscaling do not set the `target_size` variable or set it to `null`. Here we show a CPU utilization autoscaler, the other available modes are load balancing utilization and custom metric, like the underlying autoscaler resource. + +```hcl +module "nginx-mig" { + source = "./modules/compute-mig" + project_id = "my-project" + location = "europe-west1-b" + name = "mig-test" + target_size = 3 + default_version = { + instance_template = module.nginx-template-default.template.self_link + name = "default" + } + autoscaler_config = { + max_replicas = 3 + min_replicas = 1 + cooldown_period = 30 + cpu_utilization_target = 0.65 + load_balancing_utilization_target = null + metric = null + } +} +``` + +### Update policy + +```hcl +module "nginx-mig" { + source = "./modules/compute-mig" + project_id = "my-project" + location = "europe-west1-b" + name = "mig-test" + target_size = 3 + default_version = { + instance_template = module.nginx-template-default.template.self_link + name = "default" + } + update_policy = { + type = "PROACTIVE" + minimal_action = "REPLACE" + min_ready_sec = 30 + max_surge_type = "fixed" + max_surge = 1 + max_unavailable_type = null + max_unavailable = null + } +} +``` + + +## Variables + +| name | description | type | required | default | +|---|---|:---: |:---:|:---:| +| default_version | Default application version template. Additional versions can be specified via the `versions` variable. | object({...}) | ✓ | | +| location | Compute zone, or region if `regional` is set to true. | string | ✓ | | +| name | Managed group name. | string | ✓ | | +| project_id | Project id. | string | ✓ | | +| *auto_healing_policies* | Auto-healing policies for this group. | object({...}) | | null | +| *autoscaler_config* | Optional autoscaler configuration. Only one of 'cpu_utilization_target' 'load_balancing_utilization_target' or 'metric' can be not null. | object({...}) | | null | +| *health_check_config* | Optional auto-created helth check configuration, use the output self-link to set it in the auto healing policy. Refer to examples for usage. | object({...}) | | null | +| *named_ports* | Named ports. | map(number) | | null | +| *regional* | Use regional instance group. When set, `location` should be set to the region. | bool | | false | +| *target_pools* | Optional list of URLs for target pools to which new instances in the group are added. | list(string) | | [] | +| *target_size* | Group target size, leave null when using an autoscaler. | number | | null | +| *update_policy* | Update policy. Type can be 'OPPORTUNISTIC' or 'PROACTIVE', action 'REPLACE' or 'restart', surge type 'fixed' or 'percent'. | object({...}) | | null | +| *versions* | Additional application versions, target_type is either 'fixed' or 'percent'. | map(object({...})) | | null | +| *wait_for_instances* | Wait for all instances to be created/updated before returning. | bool | | null | + +## Outputs + +| name | description | sensitive | +|---|---|:---:| +| autoscaler | Auto-created autoscaler resource. | | +| group_manager | Instance group resource. | | +| health_check | Auto-created health-check resource. | | + + +## TODO + +- [ ] add support for instance groups diff --git a/modules/compute-mig/main.tf b/modules/compute-mig/main.tf new file mode 100644 index 0000000000..85c25b8686 --- /dev/null +++ b/modules/compute-mig/main.tf @@ -0,0 +1,367 @@ +/** + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +resource "google_compute_autoscaler" "default" { + provider = google-beta + count = var.regional || var.autoscaler_config == null ? 0 : 1 + project = var.project_id + name = var.name + description = "Terraform managed." + zone = var.location + target = google_compute_instance_group_manager.default.0.id + + autoscaling_policy { + max_replicas = var.autoscaler_config.max_replicas + min_replicas = var.autoscaler_config.min_replicas + cooldown_period = var.autoscaler_config.cooldown_period + + dynamic cpu_utilization { + for_each = ( + var.autoscaler_config.cpu_utilization_target == null ? [] : [""] + ) + content { + target = var.autoscaler_config.cpu_utilization_target + } + } + + dynamic load_balancing_utilization { + for_each = ( + var.autoscaler_config.load_balancing_utilization_target == null ? [] : [""] + ) + content { + target = var.autoscaler_config.load_balancing_utilization_target + } + } + + dynamic metric { + for_each = ( + var.autoscaler_config.metric == null + ? [] + : [var.autoscaler_config.metric] + ) + iterator = config + content { + name = config.value.name + single_instance_assignment = config.value.single_instance_assignment + target = config.value.target + type = config.value.type + filter = config.value.filter + } + } + } +} + + +resource "google_compute_instance_group_manager" "default" { + provider = google-beta + count = var.regional ? 0 : 1 + project = var.project_id + zone = var.location + name = var.name + base_instance_name = var.name + description = "Terraform-managed." + target_size = var.target_size + target_pools = var.target_pools + wait_for_instances = var.wait_for_instances + dynamic auto_healing_policies { + for_each = var.auto_healing_policies == null ? [] : [var.auto_healing_policies] + iterator = config + content { + health_check = config.value.health_check + initial_delay_sec = config.value.initial_delay_sec + } + } + dynamic update_policy { + for_each = var.update_policy == null ? [] : [var.update_policy] + iterator = config + content { + type = config.value.type + minimal_action = config.value.minimal_action + min_ready_sec = config.value.min_ready_sec + max_surge_fixed = ( + config.value.max_surge_type == "fixed" ? config.value.max_surge : null + ) + max_surge_percent = ( + config.value.max_surge_type == "percent" ? config.value.max_surge : null + ) + max_unavailable_fixed = ( + config.value.max_unavailable_type == "fixed" ? config.value.max_unavailable : null + ) + max_unavailable_percent = ( + config.value.max_unavailable_type == "percent" ? config.value.max_unavailable : null + ) + } + } + dynamic named_port { + for_each = var.named_ports == null ? {} : var.named_ports + iterator = config + content { + name = config.key + port = config.value + } + } + version { + instance_template = var.default_version.instance_template + name = var.default_version.name + } + dynamic version { + for_each = var.versions == null ? {} : var.versions + iterator = version + content { + name = version.key + instance_template = version.value.instance_template + target_size { + fixed = ( + version.value.target_type == "fixed" ? version.value.target_size : null + ) + percent = ( + version.value.target_type == "percent" ? version.value.target_size : null + ) + } + } + } +} + + +resource "google_compute_region_autoscaler" "default" { + provider = google-beta + count = var.regional && var.autoscaler_config != null ? 1 : 0 + project = var.project_id + name = var.name + description = "Terraform managed." + region = var.location + target = google_compute_region_instance_group_manager.default.0.id + + autoscaling_policy { + max_replicas = var.autoscaler_config.max_replicas + min_replicas = var.autoscaler_config.min_replicas + cooldown_period = var.autoscaler_config.cooldown_period + + dynamic cpu_utilization { + for_each = ( + var.autoscaler_config.cpu_utilization_target == null ? [] : [""] + ) + content { + target = var.autoscaler_config.cpu_utilization_target + } + } + + dynamic load_balancing_utilization { + for_each = ( + var.autoscaler_config.load_balancing_utilization_target == null ? [] : [""] + ) + content { + target = var.autoscaler_config.load_balancing_utilization_target + } + } + + dynamic metric { + for_each = ( + var.autoscaler_config.metric == null + ? [] + : [var.autoscaler_config.metric] + ) + iterator = config + content { + name = config.value.name + single_instance_assignment = config.value.single_instance_assignment + target = config.value.target + type = config.value.type + filter = config.value.filter + } + } + } +} + + +resource "google_compute_region_instance_group_manager" "default" { + provider = google-beta + count = var.regional ? 1 : 0 + project = var.project_id + region = var.location + name = var.name + base_instance_name = var.name + description = "Terraform-managed." + target_size = var.target_size + target_pools = var.target_pools + wait_for_instances = var.wait_for_instances + dynamic auto_healing_policies { + for_each = var.auto_healing_policies == null ? [] : [var.auto_healing_policies] + iterator = config + content { + health_check = config.value.health_check + initial_delay_sec = config.value.initial_delay_sec + } + } + dynamic update_policy { + for_each = var.update_policy == null ? [] : [var.update_policy] + iterator = config + content { + type = config.value.type + minimal_action = config.value.minimal_action + min_ready_sec = config.value.min_ready_sec + max_surge_fixed = ( + config.value.max_surge_type == "fixed" ? config.value.max_surge : null + ) + max_surge_percent = ( + config.value.max_surge_type == "percent" ? config.value.max_surge : null + ) + max_unavailable_fixed = ( + config.value.max_unavailable_type == "fixed" ? config.value.max_unavailable : null + ) + max_unavailable_percent = ( + config.value.max_unavailable_type == "percent" ? config.value.max_unavailable : null + ) + } + } + dynamic named_port { + for_each = var.named_ports == null ? {} : var.named_ports + iterator = config + content { + name = config.key + port = config.value + } + } + version { + instance_template = var.default_version.instance_template + name = var.default_version.name + } + dynamic version { + for_each = var.versions == null ? {} : var.versions + iterator = version + content { + name = version.key + instance_template = version.value.instance_template + target_size { + fixed = ( + version.value.target_type == "fixed" ? version.value.target_size : null + ) + percent = ( + version.value.target_type == "percent" ? version.value.target_size : null + ) + } + } + } +} + +resource "google_compute_health_check" "default" { + provider = google-beta + count = var.health_check_config == null ? 0 : 1 + project = var.project_id + name = var.name + description = "Terraform managed." + + check_interval_sec = try(var.health_check_config.config.check_interval_sec, null) + healthy_threshold = try(var.health_check_config.config.healthy_threshold, null) + timeout_sec = try(var.health_check_config.config.timeout_sec, null) + unhealthy_threshold = try(var.health_check_config.config.unhealthy_threshold, null) + + dynamic http_health_check { + for_each = ( + try(var.health_check_config.type, null) == "http" + ? [var.health_check_config.check] + : [] + ) + iterator = check + content { + host = try(check.value.host, null) + port = try(check.value.port, null) + port_name = try(check.value.port_name, null) + port_specification = try(check.value.port_specification, null) + proxy_header = try(check.value.proxy_header, null) + request_path = try(check.value.request_path, null) + response = try(check.value.response, null) + } + } + + dynamic https_health_check { + for_each = ( + try(var.health_check_config.type, null) == "https" + ? [var.health_check_config.check] + : [] + ) + iterator = check + content { + host = try(check.value.host, null) + port = try(check.value.port, null) + port_name = try(check.value.port_name, null) + port_specification = try(check.value.port_specification, null) + proxy_header = try(check.value.proxy_header, null) + request_path = try(check.value.request_path, null) + response = try(check.value.response, null) + } + } + + dynamic tcp_health_check { + for_each = ( + try(var.health_check_config.type, null) == "tcp" + ? [var.health_check_config.check] + : [] + ) + iterator = check + content { + port = try(check.value.port, null) + port_name = try(check.value.port_name, null) + port_specification = try(check.value.port_specification, null) + proxy_header = try(check.value.proxy_header, null) + request = try(check.value.request, null) + response = try(check.value.response, null) + } + } + + dynamic ssl_health_check { + for_each = ( + try(var.health_check_config.type, null) == "ssl" + ? [var.health_check_config.check] + : [] + ) + iterator = check + content { + port = try(check.value.port, null) + port_name = try(check.value.port_name, null) + port_specification = try(check.value.port_specification, null) + proxy_header = try(check.value.proxy_header, null) + request = try(check.value.request, null) + response = try(check.value.response, null) + } + } + + dynamic http2_health_check { + for_each = ( + try(var.health_check_config.type, null) == "http2" + ? [var.health_check_config.check] + : [] + ) + iterator = check + content { + host = try(check.value.host, null) + port = try(check.value.port, null) + port_name = try(check.value.port_name, null) + port_specification = try(check.value.port_specification, null) + proxy_header = try(check.value.proxy_header, null) + request_path = try(check.value.request_path, null) + response = try(check.value.response, null) + } + } + + dynamic log_config { + for_each = try(var.health_check_config.logging, false) ? [""] : [] + content { + enable = true + } + } + +} diff --git a/modules/compute-mig/outputs.tf b/modules/compute-mig/outputs.tf new file mode 100644 index 0000000000..ca038a222f --- /dev/null +++ b/modules/compute-mig/outputs.tf @@ -0,0 +1,40 @@ +/** + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +output "autoscaler" { + description = "Auto-created autoscaler resource." + value = var.autoscaler_config == null ? null : try( + google_compute_autoscaler.default.0, + google_compute_region_autoscaler.default.0, + {} + ) +} + +output "group_manager" { + description = "Instance group resource." + value = try( + google_compute_instance_group_manager.default.0, + google_compute_region_instance_group_manager.default.0, + {} + ) +} + +output "health_check" { + description = "Auto-created health-check resource." + value = var.health_check_config == null ? null : try( + google_compute_health_check.default.0, {} + ) +} diff --git a/modules/compute-mig/variables.tf b/modules/compute-mig/variables.tf new file mode 100644 index 0000000000..925ef7b703 --- /dev/null +++ b/modules/compute-mig/variables.tf @@ -0,0 +1,131 @@ +/** + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +variable "autoscaler_config" { + description = "Optional autoscaler configuration. Only one of 'cpu_utilization_target' 'load_balancing_utilization_target' or 'metric' can be not null." + type = object({ + max_replicas = number + min_replicas = number + cooldown_period = number + cpu_utilization_target = number + load_balancing_utilization_target = number + metric = object({ + name = string + single_instance_assignment = number + target = number + type = string # GAUGE, DELTA_PER_SECOND, DELTA_PER_MINUTE + filter = string + }) + }) + default = null +} + +variable "auto_healing_policies" { + description = "Auto-healing policies for this group." + type = object({ + health_check = string + initial_delay_sec = number + }) + default = null +} + +variable "default_version" { + description = "Default application version template. Additional versions can be specified via the `versions` variable." + type = object({ + instance_template = string + name = string + }) +} + +variable "health_check_config" { + description = "Optional auto-created helth check configuration, use the output self-link to set it in the auto healing policy. Refer to examples for usage." + type = object({ + type = string # http https tcp ssl http2 + check = map(any) # actual health check block attributes + config = map(number) # interval, thresholds, timeout + logging = bool + }) + default = null +} + +variable "location" { + description = "Compute zone, or region if `regional` is set to true." + type = string +} + +variable "name" { + description = "Managed group name." + type = string +} + +variable "named_ports" { + description = "Named ports." + type = map(number) + default = null +} + +variable "project_id" { + description = "Project id." + type = string +} + +variable "regional" { + description = "Use regional instance group. When set, `location` should be set to the region." + type = bool + default = false +} + +variable "target_pools" { + description = "Optional list of URLs for target pools to which new instances in the group are added." + type = list(string) + default = [] +} + +variable "target_size" { + description = "Group target size, leave null when using an autoscaler." + type = number + default = null +} + +variable "update_policy" { + description = "Update policy. Type can be 'OPPORTUNISTIC' or 'PROACTIVE', action 'REPLACE' or 'restart', surge type 'fixed' or 'percent'." + type = object({ + type = string # OPPORTUNISTIC | PROACTIVE + minimal_action = string # REPLACE | RESTART + min_ready_sec = number + max_surge_type = string # fixed | percent + max_surge = number + max_unavailable_type = string + max_unavailable = number + }) + default = null +} + +variable "versions" { + description = "Additional application versions, target_type is either 'fixed' or 'percent'." + type = map(object({ + instance_template = string + target_type = string # fixed | percent + target_size = number + })) + default = null +} + +variable "wait_for_instances" { + description = "Wait for all instances to be created/updated before returning." + type = bool + default = null +} diff --git a/modules/compute-vm/README.md b/modules/compute-vm/README.md index e5c3f8e290..14fb10dc7f 100644 --- a/modules/compute-vm/README.md +++ b/modules/compute-vm/README.md @@ -1,6 +1,11 @@ # Google Compute Engine VM module -This module allows creating one or multiple instances or an instance template for a specific configuration. A service account is optionally created and assigned if not specified. +This module can operate in two distinct modes: + +- instance creation, with optional unmanaged group +- instance template creation + +In both modes, an optional service account can be created and assigned to either instances or template. If you need a managed instance group when using the module in template mode, refer to the [`compute-mig`](../compute-mig) module. ## Examples @@ -57,9 +62,9 @@ module "debian-test" { } ``` -### Managed instance group +### Instance group -This example shows a basic instance where the module is used to create an instance template, and the template is associated to a basic managed instance group with no autohealing or autoscaling configuration. Instance group support is meant for prototyping, or in those situations where there's no need to manage multiple application versions. +If an instance group is needed when operating in instance mode, simply set the `group` variable to a non null map. The map can contain named port declarations, or be empty if named ports are not needed. ```hcl module "instance-group" { @@ -85,16 +90,7 @@ module "instance-group" { metadata = { user-data = local.cloud_config } - group_manager = { - auto_healing_policies = null - options = null - update_policy = null - named_ports = {} - regional = false - target_size = 2 - versions = [] - default = module.instance-group.template.self_link - } + group = {} } ``` @@ -112,8 +108,7 @@ module "instance-group" { | *attached_disk_defaults* | Defaults for attached disks options. | object({...}) | | ... | | *attached_disks* | Additional disks, if options is null defaults will be used in its place. | list(object({...})) | | [] | | *boot_disk* | Boot disk properties. | object({...}) | | ... | -| *group* | Instance group (for instance use). | object({...}) | | null | -| *group_manager* | Instance group manager (for template use). | object({...}) | | null | +| *group* | Define this variable to create an instance group for instances. Disabled for template use. | object({...}) | | null | | *hostname* | Instance FQDN name. | string | | null | | *instance_count* | Number of instances to create (only for non-template usage). | number | | 1 | | *instance_type* | Instance type. | string | | f1-micro | @@ -134,7 +129,6 @@ module "instance-group" { |---|---|:---:| | external_ips | Instance main interface external IP addresses. | | | group | Instance group resource. | | -| group_manager | Instance group resource. | | | instances | Instance resources. | | | internal_ips | Instance main interface internal IP addresses. | | | names | Instance names. | | diff --git a/modules/compute-vm/instance_group.tf b/modules/compute-vm/instance_group.tf deleted file mode 100644 index 561b7cb193..0000000000 --- a/modules/compute-vm/instance_group.tf +++ /dev/null @@ -1,215 +0,0 @@ -/** - * Copyright 2019 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -resource "google_compute_instance_group" "unmanaged" { - count = ( - var.group != null && ! var.use_instance_template ? 1 : 0 - ) - project = var.project_id - network = ( - length(var.network_interfaces) > 0 - ? var.network_interfaces.0.network - : "" - ) - zone = var.zone - name = var.name - description = "Terraform-managed." - instances = [ - for name, instance in google_compute_instance.default : instance.self_link - ] - dynamic named_port { - for_each = var.group.named_ports != null ? var.group.named_ports : {} - iterator = config - content { - name = config.key - port = config.value - } - } -} - -resource "google_compute_instance_group_manager" "managed" { - count = ( - var.group_manager != null && var.use_instance_template - ? var.group_manager.regional ? 0 : 1 - : 0 - ) - project = var.project_id - zone = var.zone - name = var.name - base_instance_name = var.name - description = "Terraform-managed." - target_size = var.group_manager.target_size - target_pools = ( - var.group_manager.options == null - ? null - : var.group_manager.options.target_pools - ) - wait_for_instances = ( - var.group_manager.options == null - ? null - : var.group_manager.options.wait_for_instances - ) - dynamic auto_healing_policies { - for_each = ( - var.group_manager.auto_healing_policies == null - ? [] - : [var.group_manager.auto_healing_policies] - ) - iterator = config - content { - health_check = config.value.health_check - initial_delay_sec = config.value.initial_delay_sec - } - } - dynamic update_policy { - for_each = ( - var.group_manager.update_policy == null - ? [] - : [var.group_manager.update_policy] - ) - iterator = config - content { - type = config.value.type - minimal_action = config.value.minimal_action - min_ready_sec = config.value.min_ready_sec - max_surge_fixed = ( - config.value.max_surge_type == "fixed" ? config.value.max_surge : null - ) - max_surge_percent = ( - config.value.max_surge_type == "percent" ? config.value.max_surge : null - ) - max_unavailable_fixed = ( - config.value.max_unavailable_type == "fixed" ? config.value.max_unavailable : null - ) - max_unavailable_percent = ( - config.value.max_unavailable_type == "percent" ? config.value.max_unavailable : null - ) - } - } - dynamic named_port { - for_each = var.group_manager.named_ports != null ? var.group_manager.named_ports : {} - iterator = config - content { - name = config.key - port = config.value - } - } - version { - name = "${var.name}-default" - instance_template = google_compute_instance_template.default.0.self_link - } - dynamic version { - for_each = ( - var.group_manager.versions == null ? [] : var.group_manager.versions - ) - iterator = config - content { - name = config.value.name - instance_template = config.value.instance_template - target_size { - fixed = config.value.target_type == "fixed" ? config.value.target_size : null - percent = config.value.target_type == "percent" ? config.value.target_size : null - } - } - } -} - -resource "google_compute_region_instance_group_manager" "managed" { - count = ( - var.group_manager != null && var.use_instance_template - ? var.group_manager.regional ? 1 : 0 - : 0 - ) - project = var.project_id - region = var.region - name = var.name - base_instance_name = var.name - description = "Terraform-managed." - target_size = var.group_manager.target_size - target_pools = ( - var.group_manager.options == null - ? null - : var.group_manager.options.target_pools - ) - wait_for_instances = ( - var.group_manager.options == null - ? null - : var.group_manager.options.wait_for_instances - ) - dynamic auto_healing_policies { - for_each = ( - var.group_manager.auto_healing_policies == null - ? [] - : [var.group_manager.auto_healing_policies] - ) - iterator = config - content { - health_check = config.value.health_check - initial_delay_sec = config.value.initial_delay_sec - } - } - dynamic update_policy { - for_each = ( - var.group_manager.update_policy == null - ? [] - : [var.group_manager.update_policy] - ) - iterator = config - content { - type = config.value.type - minimal_action = config.value.minimal_action - min_ready_sec = config.value.min_ready_sec - max_surge_fixed = ( - config.value.max_surge_type == "fixed" ? config.value.max_surge : null - ) - max_surge_percent = ( - config.value.max_surge_type == "percent" ? config.value.max_surge : null - ) - max_unavailable_fixed = ( - config.value.max_unavailable_type == "fixed" ? config.value.max_unavailable : null - ) - max_unavailable_percent = ( - config.value.max_unavailable_type == "percent" ? config.value.max_unavailable : null - ) - } - } - dynamic named_port { - for_each = var.group.named_ports - iterator = config - content { - name = config.key - port = config.value - } - } - version { - name = "${var.name}-default" - instance_template = google_compute_instance_template.default.0.self_link - } - dynamic version { - for_each = ( - var.group_manager.versions == null ? [] : [var.group_manager.versions] - ) - iterator = config - content { - name = config.value.name - instance_template = config.value.instance_template - target_size { - fixed = config.value.target_type == "fixed" ? config.value.target_size : null - percent = config.value.target_type == "percent" ? config.value.target_size : null - } - } - } -} diff --git a/modules/compute-vm/main.tf b/modules/compute-vm/main.tf index 75f642dc8b..e97d576c21 100644 --- a/modules/compute-vm/main.tf +++ b/modules/compute-vm/main.tf @@ -218,6 +218,32 @@ resource "google_compute_instance_template" "default" { } } +resource "google_compute_instance_group" "unmanaged" { + count = ( + var.group != null && ! var.use_instance_template ? 1 : 0 + ) + project = var.project_id + network = ( + length(var.network_interfaces) > 0 + ? var.network_interfaces.0.network + : "" + ) + zone = var.zone + name = var.name + description = "Terraform-managed." + instances = [ + for name, instance in google_compute_instance.default : instance.self_link + ] + dynamic named_port { + for_each = var.group.named_ports != null ? var.group.named_ports : {} + iterator = config + content { + name = config.key + port = config.value + } + } +} + resource "google_service_account" "service_account" { count = var.service_account_create ? 1 : 0 project = var.project_id diff --git a/modules/compute-vm/outputs.tf b/modules/compute-vm/outputs.tf index 1fb31887c1..1291fdea10 100644 --- a/modules/compute-vm/outputs.tf +++ b/modules/compute-vm/outputs.tf @@ -28,24 +28,7 @@ output "external_ips" { output "group" { description = "Instance group resource." - value = ( - length(google_compute_instance_group.unmanaged) > 0 - ? google_compute_instance_group.unmanaged.0 - : null - ) -} - -output "group_manager" { - description = "Instance group resource." - value = ( - length(google_compute_instance_group_manager.managed) > 0 - ? google_compute_instance_group_manager.managed.0 - : ( - length(google_compute_region_instance_group_manager.managed) > 0 - ? google_compute_region_instance_group_manager.managed.0 - : null - ) - ) + value = try(google_compute_instance_group.unmanaged.0, null) } output "instances" { diff --git a/modules/compute-vm/variables.tf b/modules/compute-vm/variables.tf index 018e16d108..3593fef2c9 100644 --- a/modules/compute-vm/variables.tf +++ b/modules/compute-vm/variables.tf @@ -61,46 +61,13 @@ variable "boot_disk" { } variable "group" { - description = "Instance group (for instance use)." + description = "Define this variable to create an instance group for instances. Disabled for template use." type = object({ named_ports = map(number) }) default = null } -variable "group_manager" { - description = "Instance group manager (for template use)." - type = object({ - auto_healing_policies = object({ - health_check = string - initial_delay_sec = number - }) - named_ports = map(number) - options = object({ - target_pools = list(string) - wait_for_instances = bool - }) - regional = bool - target_size = number - update_policy = object({ - type = string # OPPORTUNISTIC | PROACTIVE - minimal_action = string # REPLACE | RESTART - min_ready_sec = number - max_surge_type = string # fixed | percent - max_surge = number - max_unavailable_type = string - max_unavailable = number - }) - versions = list(object({ - name = string - instance_template = string - target_type = string # fixed | percent - target_size = number - })) - }) - default = null -} - variable "hostname" { description = "Instance FQDN name." type = string diff --git a/modules/net-ilb/README.md b/modules/net-ilb/README.md new file mode 100644 index 0000000000..3669c54bb2 --- /dev/null +++ b/modules/net-ilb/README.md @@ -0,0 +1,110 @@ +# Internal Load Balancer Module + +This module allows managing a GCE Internal Load Balancer and integrates the forwarding rule, regional backend, and optional health check resources. It's designed to be a simple match for the [`compute-vm`](../compute-vm) module, which can be used to manage instance templates and instance groups. + +## Issues + +TODO(ludoo): check if this is still the case after splitting out MIG from compute-vm + +There are some corner cases (eg when switching the instance template from internal service account to an externally managed one) where Terraform raises a cycle error on apply. In these situations, run successive applies targeting resources used in the template first then the template itself, and the cycle should be fixed. + +One other issue is a `Provider produced inconsistent final plan` error which is sometimes raised when switching template version. This seems to be related to this [open provider issue](https://github.com/terraform-providers/terraform-provider-google/issues/3937), but it's relatively harmless since the resource is updated, and subsequent applies raise no errors. + +## Example + +This example spins up a simple HTTP server and combines four modules: + +- [`nginx`](../cloud-config-container/nginx) from the `cloud-config-container` collection, to manage instance configuration +- [`compute-vm`](../compute-vm) to manage the instance template and unmanaged instance group +- this module to create an Internal Load Balancer in front of the managed instance group + +Note that the example uses the GCE default service account. You might want to create an ad-hoc service account by combining the [`iam-service-accounts`](../iam-service-accounts) module, or by having the GCE VM module create one for you. In both cases, remember to set at least logging write permissions for the service account, or the container on the instances won't be able to start. + +```hcl +module "cos-nginx" { + source = "./modules/cloud-config-container/nginx" +} + +module "instance-group" { + source = "./modules/compute-vm" + project_id = "my-project" + region = "europe-west1" + zone = "europe-west1-b" + name = "ilb-test" + network_interfaces = [{ + network = local.network_self_link, + subnetwork = local.subnetwork_self_link, + nat = false, + addresses = null + }] + boot_disk = { + image = "projects/cos-cloud/global/images/family/cos-stable" + type = "pd-ssd" + size = 10 + } + tags = ["http-server", "ssh"] + metadata = { + user-data = module.cos-nginx.cloud_config + } + group = {} +} + +module "ilb" { + source = "./modules/net-ilb" + project_id = "my-project" + region = "europe-west1" + name = "ilb-test" + service_label = "ilb-test" + network = local.network_self_link + subnetwork = local.subnetwork_self_link + ports = [80] + backends = [{ + failover = false + group = module.instance-group.group.self_link + balancing_mode = "CONNECTION" + }] + health_check_config = { + type = "http", check = { port = 80 }, config = {}, logging = true + } +} + +``` + + +## Variables + +| name | description | type | required | default | +|---|---|:---: |:---:|:---:| +| backends | Load balancer backends, balancing mode is one of 'CONNECTION' or 'UTILIZATION'. | list(object({...})) | ✓ | | +| name | Name used for all resources. | string | ✓ | | +| network | Network used for resources. | string | ✓ | | +| project_id | Project id where resources will be created. | string | ✓ | | +| region | GCP region. | string | ✓ | | +| subnetwork | Subnetwork used for the forwarding rule. | string | ✓ | | +| *address* | Optional IP address used for the forwarding rule. | string | | null | +| *backend_config* | Optional backend configuration. | object({...}) | | null | +| *failover_config* | Optional failover configuration. | object({...}) | | null | +| *global_access* | Global access, defaults to false if not set. | bool | | null | +| *health_check* | Name of existing health check to use, disables auto-created health check. | string | | null | +| *health_check_config* | Configuration of the auto-created helth check. | object({...}) | | ... | +| *labels* | Labels set on resources. | map(string) | | {} | +| *log_sample_rate* | Set a value between 0 and 1 to enable logging for resources, and set the sampling rate for backend logging. | number | | null | +| *ports* | Comma-separated ports, leave null to use all ports. | list(string) | | null | +| *protocol* | IP protocol used, defaults to TCP. | string | | TCP | +| *service_label* | Optional prefix of the fully qualified forwarding rule name. | string | | null | + +## Outputs + +| name | description | sensitive | +|---|---|:---:| +| backend | Backend resource. | | +| backend_id | Backend id. | | +| backend_self_link | Backend self link. | | +| forwarding_rule | Forwarding rule resource. | | +| forwarding_rule_address | Forwarding rule address. | | +| forwarding_rule_id | Forwarding rule id. | | +| forwarding_rule_self_link | Forwarding rule self link. | | +| health_check | Auto-created health-check resource. | | +| health_check_self_id | Auto-created health-check self id. | | +| health_check_self_link | Auto-created health-check self link. | | + diff --git a/modules/net-ilb/main.tf b/modules/net-ilb/main.tf new file mode 100644 index 0000000000..d271402f2a --- /dev/null +++ b/modules/net-ilb/main.tf @@ -0,0 +1,191 @@ +/** + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +locals { + health_check = ( + var.health_check == null + ? try(google_compute_health_check.default.0.self_link, null) + : var.health_check + ) +} + +resource "google_compute_forwarding_rule" "default" { + provider = google-beta + project = var.project_id + name = var.name + description = "Terraform managed." + load_balancing_scheme = "INTERNAL" + region = var.region + network = var.network + subnetwork = var.subnetwork + ip_address = var.address + ip_protocol = var.protocol # TCP | UDP + ports = var.ports # "nnnnn" or "nnnnn,nnnnn,nnnnn" max 5 + service_label = var.service_label + all_ports = var.ports == null ? true : null + allow_global_access = var.global_access + backend_service = google_compute_region_backend_service.default.self_link + # is_mirroring_collector = false + labels = var.labels +} + +resource "google_compute_region_backend_service" "default" { + provider = google-beta + project = var.project_id + name = var.name + description = "Terraform managed." + load_balancing_scheme = "INTERNAL" + region = var.region + network = var.network + health_checks = [local.health_check] + protocol = var.protocol + + session_affinity = try(var.backend_config.session_affinity, null) + timeout_sec = try(var.backend_config.timeout_sec, null) + connection_draining_timeout_sec = try(var.backend_config.connection_draining_timeout_sec, null) + + dynamic backend { + for_each = { for b in var.backends : b.group => b } + iterator = backend + content { + balancing_mode = backend.value.balancing_mode + description = "Terraform managed." + failover = backend.value.failover + group = backend.key + } + } + + dynamic failover_policy { + for_each = var.failover_config == null ? [] : [var.failover_config] + iterator = config + content { + disable_connection_drain_on_failover = config.value.disable_connection_drain + drop_traffic_if_unhealthy = config.value.drop_traffic_if_unhealthy + failover_ratio = config.value.ratio + } + } + +} + +resource "google_compute_health_check" "default" { + provider = google-beta + count = var.health_check == null ? 1 : 0 + project = var.project_id + name = var.name + description = "Terraform managed." + + check_interval_sec = try(var.health_check_config.config.check_interval_sec, null) + healthy_threshold = try(var.health_check_config.config.healthy_threshold, null) + timeout_sec = try(var.health_check_config.config.timeout_sec, null) + unhealthy_threshold = try(var.health_check_config.config.unhealthy_threshold, null) + + dynamic http_health_check { + for_each = ( + try(var.health_check_config.type, null) == "http" + ? [var.health_check_config.check] + : [] + ) + iterator = check + content { + host = try(check.value.host, null) + port = try(check.value.port, null) + port_name = try(check.value.port_name, null) + port_specification = try(check.value.port_specification, null) + proxy_header = try(check.value.proxy_header, null) + request_path = try(check.value.request_path, null) + response = try(check.value.response, null) + } + } + + dynamic https_health_check { + for_each = ( + try(var.health_check_config.type, null) == "https" + ? [var.health_check_config.check] + : [] + ) + iterator = check + content { + host = try(check.value.host, null) + port = try(check.value.port, null) + port_name = try(check.value.port_name, null) + port_specification = try(check.value.port_specification, null) + proxy_header = try(check.value.proxy_header, null) + request_path = try(check.value.request_path, null) + response = try(check.value.response, null) + } + } + + dynamic tcp_health_check { + for_each = ( + try(var.health_check_config.type, null) == "tcp" + ? [var.health_check_config.check] + : [] + ) + iterator = check + content { + port = try(check.value.port, null) + port_name = try(check.value.port_name, null) + port_specification = try(check.value.port_specification, null) + proxy_header = try(check.value.proxy_header, null) + request = try(check.value.request, null) + response = try(check.value.response, null) + } + } + + dynamic ssl_health_check { + for_each = ( + try(var.health_check_config.type, null) == "ssl" + ? [var.health_check_config.check] + : [] + ) + iterator = check + content { + port = try(check.value.port, null) + port_name = try(check.value.port_name, null) + port_specification = try(check.value.port_specification, null) + proxy_header = try(check.value.proxy_header, null) + request = try(check.value.request, null) + response = try(check.value.response, null) + } + } + + dynamic http2_health_check { + for_each = ( + try(var.health_check_config.type, null) == "http2" + ? [var.health_check_config.check] + : [] + ) + iterator = check + content { + host = try(check.value.host, null) + port = try(check.value.port, null) + port_name = try(check.value.port_name, null) + port_specification = try(check.value.port_specification, null) + proxy_header = try(check.value.proxy_header, null) + request_path = try(check.value.request_path, null) + response = try(check.value.response, null) + } + } + + dynamic log_config { + for_each = try(var.health_check_config.logging, false) ? [""] : [] + content { + enable = true + } + } + +} diff --git a/modules/net-ilb/outputs.tf b/modules/net-ilb/outputs.tf new file mode 100644 index 0000000000..a3529eba85 --- /dev/null +++ b/modules/net-ilb/outputs.tf @@ -0,0 +1,65 @@ +/** + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +output "backend" { + description = "Backend resource." + value = google_compute_region_backend_service.default +} + +output "backend_id" { + description = "Backend id." + value = google_compute_region_backend_service.default.id +} + +output "backend_self_link" { + description = "Backend self link." + value = google_compute_region_backend_service.default.self_link +} + +output "forwarding_rule" { + description = "Forwarding rule resource." + value = google_compute_forwarding_rule.default +} + +output "forwarding_rule_address" { + description = "Forwarding rule address." + value = google_compute_forwarding_rule.default.ip_address +} + +output "forwarding_rule_id" { + description = "Forwarding rule id." + value = google_compute_forwarding_rule.default.id +} + +output "forwarding_rule_self_link" { + description = "Forwarding rule self link." + value = google_compute_forwarding_rule.default.self_link +} + +output "health_check" { + description = "Auto-created health-check resource." + value = try(google_compute_health_check.default.0, {}) +} + +output "health_check_self_id" { + description = "Auto-created health-check self id." + value = try(google_compute_health_check.default.0.id, null) +} + +output "health_check_self_link" { + description = "Auto-created health-check self link." + value = try(google_compute_health_check.default.0.self_link, null) +} diff --git a/modules/net-ilb/variables.tf b/modules/net-ilb/variables.tf new file mode 100644 index 0000000000..df7e7ee8b8 --- /dev/null +++ b/modules/net-ilb/variables.tf @@ -0,0 +1,129 @@ +/** + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +variable "address" { + description = "Optional IP address used for the forwarding rule." + type = string + default = null +} + +variable "backends" { + description = "Load balancer backends, balancing mode is one of 'CONNECTION' or 'UTILIZATION'." + type = list(object({ + failover = bool + group = string + balancing_mode = string + })) +} + +variable "backend_config" { + description = "Optional backend configuration." + type = object({ + session_affinity = string + timeout_sec = number + connection_draining_timeout_sec = number + }) + default = null +} + +variable "failover_config" { + description = "Optional failover configuration." + type = object({ + disable_connection_drain = bool + drop_traffic_if_unhealthy = bool + ratio = number + }) + default = null +} + +variable "global_access" { + description = "Global access, defaults to false if not set." + type = bool + default = null +} + +variable "health_check" { + description = "Name of existing health check to use, disables auto-created health check." + type = string + default = null +} + +variable "health_check_config" { + description = "Configuration of the auto-created helth check." + type = object({ + type = string # http https tcp ssl http2 + check = map(any) # actual health check block attributes + config = map(number) # interval, thresholds, timeout + logging = bool + }) + default = { + type = "http" + check = { + port_specification = "USE_SERVING_PORT" + } + config = {} + logging = false + } +} + +variable "labels" { + description = "Labels set on resources." + type = map(string) + default = {} +} + +variable "name" { + description = "Name used for all resources." + type = string +} + +variable "network" { + description = "Network used for resources." + type = string +} + +variable "project_id" { + description = "Project id where resources will be created." + type = string +} + +variable "ports" { + description = "Comma-separated ports, leave null to use all ports." + type = list(string) + default = null +} + +variable "protocol" { + description = "IP protocol used, defaults to TCP." + type = string + default = "TCP" +} + +variable "region" { + description = "GCP region." + type = string +} + +variable "service_label" { + description = "Optional prefix of the fully qualified forwarding rule name." + type = string + default = null +} + +variable "subnetwork" { + description = "Subnetwork used for the forwarding rule." + type = string +} diff --git a/tests/modules/compute_vm/fixture/main.tf b/tests/modules/compute_vm/fixture/main.tf index 4f4b3b36d2..a134883467 100644 --- a/tests/modules/compute_vm/fixture/main.tf +++ b/tests/modules/compute_vm/fixture/main.tf @@ -30,5 +30,4 @@ module "test" { instance_count = var.instance_count use_instance_template = var.use_instance_template group = var.group - group_manager = var.group_manager } diff --git a/tests/modules/compute_vm/fixture/variables.tf b/tests/modules/compute_vm/fixture/variables.tf index 7b2b9aad23..7191d315ca 100644 --- a/tests/modules/compute_vm/fixture/variables.tf +++ b/tests/modules/compute_vm/fixture/variables.tf @@ -19,11 +19,6 @@ variable "group" { default = null } -variable "group_manager" { - type = any - default = null -} - variable "instance_count" { type = number default = 1 diff --git a/tests/modules/compute_vm/test_plan.py b/tests/modules/compute_vm/test_plan.py index 009309984c..733ee1eec0 100644 --- a/tests/modules/compute_vm/test_plan.py +++ b/tests/modules/compute_vm/test_plan.py @@ -44,3 +44,12 @@ def test_template(plan_runner): assert len(resources) == 1 assert resources[0]['type'] == 'google_compute_instance_template' assert resources[0]['values']['name_prefix'] == 'test-' + + +def test_group(plan_runner): + plan, resources = plan_runner(FIXTURES_DIR, instance_count=2, + group='{named_ports={}}') + assert len(resources) == 3 + assert set(r['type'] for r in resources) == set([ + 'google_compute_instance_group', 'google_compute_instance' + ]) diff --git a/tests/modules/compute_vm/test_plan_group.py b/tests/modules/compute_vm/test_plan_group.py deleted file mode 100644 index de198d731c..0000000000 --- a/tests/modules/compute_vm/test_plan_group.py +++ /dev/null @@ -1,44 +0,0 @@ -# Copyright 2020 Google LLC -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -import os -import pytest - - -FIXTURES_DIR = os.path.join(os.path.dirname(__file__), 'fixture') - - -def test_unmanaged(plan_runner): - plan, resources = plan_runner(FIXTURES_DIR, instance_count=2, - group='{named_ports={}}') - assert len(resources) == 3 - assert set(r['type'] for r in resources) == set([ - 'google_compute_instance_group', 'google_compute_instance' - ]) - - -def test_managed(plan_runner): - plan, resources = plan_runner( - FIXTURES_DIR, use_instance_template='true', group_manager=( - '{ ' - 'auto_healing_policies=null, named_ports={}, options=null, ' - 'regional=false, target_size=1, update_policy=null, versions=null' - ' }' - ) - ) - assert len(resources) == 2 - assert set(r['type'] for r in resources) == set([ - 'google_compute_instance_group_manager', 'google_compute_instance_template' - ]) diff --git a/tests/modules/net_ilb/__init__.py b/tests/modules/net_ilb/__init__.py new file mode 100644 index 0000000000..6913f02e36 --- /dev/null +++ b/tests/modules/net_ilb/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2020 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/tests/modules/net_ilb/fixture/main.tf b/tests/modules/net_ilb/fixture/main.tf new file mode 100644 index 0000000000..ff7ad5aeaa --- /dev/null +++ b/tests/modules/net_ilb/fixture/main.tf @@ -0,0 +1,35 @@ +/** + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +module "test" { + source = "../../../../modules/net-ilb" + project_id = "my-project" + region = "europe-west1" + network = "default" + subnetwork = "default" + name = "ilb-test" + labels = {} + address = var.address + backends = var.backends + backend_config = var.backend_config + failover_config = var.failover_config + global_access = var.global_access + health_check = var.health_check + health_check_config = var.health_check_config + ports = var.ports + protocol = var.protocol + service_label = var.service_label +} diff --git a/tests/modules/net_ilb/fixture/variables.tf b/tests/modules/net_ilb/fixture/variables.tf new file mode 100644 index 0000000000..5955e69e01 --- /dev/null +++ b/tests/modules/net_ilb/fixture/variables.tf @@ -0,0 +1,88 @@ +/** + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +variable "address" { + type = string + default = null +} + +variable "backends" { + type = list(object({ + failover = bool + group = string + balancing_mode = string + })) +} + +variable "backend_config" { + type = object({ + session_affinity = string + timeout_sec = number + connection_draining_timeout_sec = number + }) + default = null +} + +variable "failover_config" { + type = object({ + disable_connection_drain = bool + drop_traffic_if_unhealthy = bool + ratio = number + }) + default = null +} + +variable "global_access" { + type = bool + default = null +} + +variable "health_check" { + type = string + default = null +} + +variable "health_check_config" { + type = object({ + type = string # http https tcp ssl http2 + check = map(any) # actual health check block attributes + config = map(number) # interval, thresholds, timeout + logging = bool + }) + default = { + type = "http" + check = { + port_specification = "USE_SERVING_PORT" + } + config = {} + logging = false + } +} + +variable "ports" { + type = list(string) + default = null +} + +variable "protocol" { + type = string + default = "TCP" +} + +variable "service_label" { + type = string + default = null +} diff --git a/tests/modules/net_ilb/test_plan.py b/tests/modules/net_ilb/test_plan.py new file mode 100644 index 0000000000..e528dc5cf1 --- /dev/null +++ b/tests/modules/net_ilb/test_plan.py @@ -0,0 +1,55 @@ +# Copyright 2020 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import os +import pytest + + +FIXTURES_DIR = os.path.join(os.path.dirname(__file__), 'fixture') + +_BACKENDS = '[{balancing_mode="CONNECTION", group="foo", failover=false}]' + + +def test_defaults(plan_runner): + "Test variable defaults." + _, resources = plan_runner(FIXTURES_DIR, backends=_BACKENDS) + assert len(resources) == 3 + resources = dict((r['type'], r['values']) for r in resources) + fwd_rule = resources['google_compute_forwarding_rule'] + assert fwd_rule['load_balancing_scheme'] == 'INTERNAL' + assert fwd_rule['all_ports'] + assert fwd_rule['allow_global_access'] is None + backend = resources['google_compute_region_backend_service'] + assert len(backend['backend']) == 1 + assert backend['backend'][0]['group'] == 'foo' + health_check = resources['google_compute_health_check'] + for k, v in health_check.items(): + if k == 'http_health_check': + assert len(v) == 1 + assert v[0]['port_specification'] == 'USE_SERVING_PORT' + elif k.endswith('_health_check'): + assert len(v) == 0 + + +def test_forwarding_rule(plan_runner): + "Test forwarding rule variables." + _, resources = plan_runner( + FIXTURES_DIR, backends=_BACKENDS, global_access='true', ports="[80]") + assert len(resources) == 3 + values = [r['values'] for r in resources if r['type'] + == 'google_compute_forwarding_rule'][0] + assert not values['all_ports'] + assert values['ports'] == ['80'] + assert values['allow_global_access'] From bf137148b38c6f795c45f8eee2ff94d75702439f Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Thu, 30 Apr 2020 17:09:58 +0200 Subject: [PATCH 24/28] Update CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a2d135c471..754f2721d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,8 @@ All notable changes to this project will be documented in this file. - **incompatible changes** in the GKE nodepool module - rename `node_config_workload_metadata_config` variable to `workload_metadata_config` - new default for `workload_metadata_config` is `GKE_METADATA_SERVER` +- **incompatible change** remove support for MIG from `compute-vm` module +- add `compute-mig` and `net-ilb` modules ## [1.3.0] - 2020-04-08 From 98f6b301972dcd0de338a610ecdf31e7c4e9f97a Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Thu, 30 Apr 2020 19:29:39 +0200 Subject: [PATCH 25/28] Allow specifying subnet name in net-vpc module (#64) * add name attribute to net-vpc subnet variable * update vpc variables in infra examples * fix old project output used in shared vpc infra example --- infrastructure/hub-and-spoke-peering/main.tf | 3 +++ infrastructure/hub-and-spoke-vpn/main.tf | 6 ++++++ infrastructure/onprem-google-access-dns/main.tf | 1 + infrastructure/shared-vpc-gke/main.tf | 4 +++- modules/net-vpc/README.md | 8 ++++++-- modules/net-vpc/main.tf | 2 +- modules/net-vpc/variables.tf | 3 ++- tests/modules/{net-vpc => net_vpc}/__init__.py | 0 tests/modules/{net-vpc => net_vpc}/fixture/main.tf | 0 .../modules/{net-vpc => net_vpc}/fixture/variables.tf | 1 + tests/modules/{net-vpc => net_vpc}/test_plan.py | 0 .../modules/{net-vpc => net_vpc}/test_plan_subnets.py | 10 +++++----- 12 files changed, 28 insertions(+), 10 deletions(-) rename tests/modules/{net-vpc => net_vpc}/__init__.py (100%) rename tests/modules/{net-vpc => net_vpc}/fixture/main.tf (100%) rename tests/modules/{net-vpc => net_vpc}/fixture/variables.tf (98%) rename tests/modules/{net-vpc => net_vpc}/test_plan.py (100%) rename tests/modules/{net-vpc => net_vpc}/test_plan_subnets.py (91%) diff --git a/infrastructure/hub-and-spoke-peering/main.tf b/infrastructure/hub-and-spoke-peering/main.tf index 9f4b875734..08603e4dc7 100644 --- a/infrastructure/hub-and-spoke-peering/main.tf +++ b/infrastructure/hub-and-spoke-peering/main.tf @@ -34,6 +34,7 @@ module "vpc-hub" { subnets = { default = { ip_cidr_range = var.ip_ranges.hub + name = null region = var.region secondary_ip_range = {} } @@ -59,6 +60,7 @@ module "vpc-spoke-1" { subnets = { default = { ip_cidr_range = var.ip_ranges.spoke-1 + name = null region = var.region secondary_ip_range = {} } @@ -101,6 +103,7 @@ module "vpc-spoke-2" { subnets = { default = { ip_cidr_range = var.ip_ranges.spoke-2 + name = null region = var.region secondary_ip_range = { pods = var.ip_secondary_ranges.spoke-2-pods diff --git a/infrastructure/hub-and-spoke-vpn/main.tf b/infrastructure/hub-and-spoke-vpn/main.tf index bee66f7fb5..3211214f18 100644 --- a/infrastructure/hub-and-spoke-vpn/main.tf +++ b/infrastructure/hub-and-spoke-vpn/main.tf @@ -33,11 +33,13 @@ module "vpc-hub" { subnets = { a = { ip_cidr_range = var.ip_ranges.hub-a + name = null region = var.regions.a secondary_ip_range = {} } b = { ip_cidr_range = var.ip_ranges.hub-b + name = null region = var.regions.b secondary_ip_range = {} } @@ -121,11 +123,13 @@ module "vpc-spoke-1" { subnets = { a = { ip_cidr_range = var.ip_ranges.spoke-1-a + name = null region = var.regions.a secondary_ip_range = {} } b = { ip_cidr_range = var.ip_ranges.spoke-1-b + name = null region = var.regions.a secondary_ip_range = {} } @@ -182,11 +186,13 @@ module "vpc-spoke-2" { subnets = { a = { ip_cidr_range = var.ip_ranges.spoke-2-a + name = null region = var.regions.b secondary_ip_range = {} } b = { ip_cidr_range = var.ip_ranges.spoke-2-b + name = null region = var.regions.b secondary_ip_range = {} } diff --git a/infrastructure/onprem-google-access-dns/main.tf b/infrastructure/onprem-google-access-dns/main.tf index f5fa104dc8..5ebcbb1ede 100644 --- a/infrastructure/onprem-google-access-dns/main.tf +++ b/infrastructure/onprem-google-access-dns/main.tf @@ -55,6 +55,7 @@ module "vpc" { subnets = { default = { ip_cidr_range = var.ip_ranges.gcp + name = null region = var.region secondary_ip_range = {} } diff --git a/infrastructure/shared-vpc-gke/main.tf b/infrastructure/shared-vpc-gke/main.tf index 7c47ad812b..e55e54cd8e 100644 --- a/infrastructure/shared-vpc-gke/main.tf +++ b/infrastructure/shared-vpc-gke/main.tf @@ -91,7 +91,7 @@ module "project-svc-gke" { module "vpc-shared" { source = "../../modules/net-vpc" - project_id = module.project-host.iam_project_id + project_id = module.project-host.project_id name = "shared-vpc" shared_vpc_host = true shared_vpc_service_projects = [ @@ -101,11 +101,13 @@ module "vpc-shared" { subnets = { gce = { ip_cidr_range = var.ip_ranges.gce + name = null region = var.region secondary_ip_range = {} } gke = { ip_cidr_range = var.ip_ranges.gke + name = null region = var.region secondary_ip_range = { pods = var.ip_secondary_ranges.gke-pods diff --git a/modules/net-vpc/README.md b/modules/net-vpc/README.md index 0826502527..80f7545fe2 100644 --- a/modules/net-vpc/README.md +++ b/modules/net-vpc/README.md @@ -16,6 +16,7 @@ module "vpc" { subnets = { subnet-1 = { ip_cidr_range = "10.0.0.0/24" + name = "production" region = "europe-west1" secondary_ip_range = { pods = "172.16.0.0/20" @@ -24,7 +25,8 @@ module "vpc" { } subnet-2 = { ip_cidr_range = "10.0.16.0/24" - region = "europe-west1" + name = "production" + region = "europe-west2" secondary_ip_range = {} } } @@ -43,6 +45,7 @@ module "vpc-spoke-1" { subnets = { subnet-1 = { ip_cidr_range = "10.0.0.0/24" + name = null region = "europe-west1" secondary_ip_range = { pods = "172.16.0.0/20" @@ -68,6 +71,7 @@ module "vpc-host" { subnets = { subnet-1 = { ip_cidr_range = "10.0.0.0/24" + name = null region = "europe-west1" secondary_ip_range = { pods = "172.16.0.0/20" @@ -121,7 +125,7 @@ module "vpc-host" { | *subnet_descriptions* | Optional map of subnet descriptions, keyed by subnet name. | map(string) | | {} | | *subnet_flow_logs* | Optional map of boolean to control flow logs (default is disabled), keyed by subnet name. | map(bool) | | {} | | *subnet_private_access* | Optional map of boolean to control private Google access (default is enabled), keyed by subnet name. | map(bool) | | {} | -| *subnets* | The list of subnets being created | map(object({...})) | | null | +| *subnets* | Subnets being created. If name is set to null, a default will be used combining network name and this map key. | map(object({...})) | | null | ## Outputs diff --git a/modules/net-vpc/main.tf b/modules/net-vpc/main.tf index f94cc59546..0d854f2eb4 100644 --- a/modules/net-vpc/main.tf +++ b/modules/net-vpc/main.tf @@ -116,7 +116,7 @@ resource "google_compute_subnetwork" "subnetwork" { project = var.project_id network = google_compute_network.network.name region = each.value.region - name = "${var.name}-${each.key}" + name = each.value.name != null ? each.value.name : "${var.name}-${each.key}" ip_cidr_range = each.value.ip_cidr_range secondary_ip_range = each.value.secondary_ip_range == null ? [] : [ for name, range in each.value.secondary_ip_range : diff --git a/modules/net-vpc/variables.tf b/modules/net-vpc/variables.tf index 1f45132118..0d37637e2e 100644 --- a/modules/net-vpc/variables.tf +++ b/modules/net-vpc/variables.tf @@ -109,9 +109,10 @@ variable "shared_vpc_service_projects" { } variable "subnets" { - description = "The list of subnets being created" + description = "Subnets being created. If name is set to null, a default will be used combining network name and this map key." type = map(object({ ip_cidr_range = string + name = string region = string secondary_ip_range = map(string) })) diff --git a/tests/modules/net-vpc/__init__.py b/tests/modules/net_vpc/__init__.py similarity index 100% rename from tests/modules/net-vpc/__init__.py rename to tests/modules/net_vpc/__init__.py diff --git a/tests/modules/net-vpc/fixture/main.tf b/tests/modules/net_vpc/fixture/main.tf similarity index 100% rename from tests/modules/net-vpc/fixture/main.tf rename to tests/modules/net_vpc/fixture/main.tf diff --git a/tests/modules/net-vpc/fixture/variables.tf b/tests/modules/net_vpc/fixture/variables.tf similarity index 98% rename from tests/modules/net-vpc/fixture/variables.tf rename to tests/modules/net_vpc/fixture/variables.tf index 56f190a207..c34750adba 100644 --- a/tests/modules/net-vpc/fixture/variables.tf +++ b/tests/modules/net_vpc/fixture/variables.tf @@ -99,6 +99,7 @@ variable "subnets" { description = "The list of subnets being created" type = map(object({ ip_cidr_range = string + name = string region = string secondary_ip_range = map(string) })) diff --git a/tests/modules/net-vpc/test_plan.py b/tests/modules/net_vpc/test_plan.py similarity index 100% rename from tests/modules/net-vpc/test_plan.py rename to tests/modules/net_vpc/test_plan.py diff --git a/tests/modules/net-vpc/test_plan_subnets.py b/tests/modules/net_vpc/test_plan_subnets.py similarity index 91% rename from tests/modules/net-vpc/test_plan_subnets.py rename to tests/modules/net_vpc/test_plan_subnets.py index f08f425203..47dcd67a6a 100644 --- a/tests/modules/net-vpc/test_plan_subnets.py +++ b/tests/modules/net_vpc/test_plan_subnets.py @@ -21,11 +21,11 @@ _VAR_SUBNETS = ( '{ ' 'a={region = "europe-west1", ip_cidr_range = "10.0.0.0/24",' - ' secondary_ip_range=null},' + ' name=null, secondary_ip_range=null},' 'b={region = "europe-west1", ip_cidr_range = "10.0.1.0/24",' - ' secondary_ip_range=null},' + ' name=null, secondary_ip_range=null},' 'c={region = "europe-west1", ip_cidr_range = "10.0.2.0/24",' - ' secondary_ip_range={a="192.168.0.0/24", b="192.168.1.0/24"}},' + ' name="c", secondary_ip_range={a="192.168.0.0/24", b="192.168.1.0/24"}},' '}' ) _VAR_LOG_CONFIG = '{a = { flow_sampling = 0.1 }}' @@ -45,7 +45,7 @@ def test_subnets_simple(plan_runner): subnets = [r['values'] for r in resources if r['type'] == 'google_compute_subnetwork'] assert set(s['name'] for s in subnets) == set( - ['my-vpc-a', 'my-vpc-b', 'my-vpc-c']) + ['my-vpc-a', 'my-vpc-b', 'c']) assert set(len(s['secondary_ip_range']) for s in subnets) == set([0, 0, 2]) @@ -75,5 +75,5 @@ def test_subnet_log_configs(plan_runner): 'metadata': 'INCLUDE_ALL_METADATA' }], # don't enable - 'my-vpc-c': [] + 'c': [] } From 52a8c4d0bb5b2a0d572e20df4ee8a3013dec8b20 Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Thu, 30 Apr 2020 19:31:26 +0200 Subject: [PATCH 26/28] Update CHANGELOG.md --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 754f2721d4..68e7d8cfa1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ All notable changes to this project will be documented in this file. - new default for `workload_metadata_config` is `GKE_METADATA_SERVER` - **incompatible change** remove support for MIG from `compute-vm` module - add `compute-mig` and `net-ilb` modules +- **incompatible change** add support for specifying subnet name in `net-vpc` + to update to the new module, add an extra `name = false` attribute to each subnet ## [1.3.0] - 2020-04-08 From 99d9e81e8945f0310c42f5881adab94893a9962b Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Thu, 30 Apr 2020 19:34:58 +0200 Subject: [PATCH 27/28] Update CHANGELOG.md --- CHANGELOG.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 68e7d8cfa1..0ef2143aca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,10 +11,11 @@ All notable changes to this project will be documented in this file. - **incompatible changes** in the GKE nodepool module - rename `node_config_workload_metadata_config` variable to `workload_metadata_config` - new default for `workload_metadata_config` is `GKE_METADATA_SERVER` -- **incompatible change** remove support for MIG from `compute-vm` module +- **incompatible change** in the `compute-vm` module + - removed support for MIG and the `group_manager` variable - add `compute-mig` and `net-ilb` modules -- **incompatible change** add support for specifying subnet name in `net-vpc` - to update to the new module, add an extra `name = false` attribute to each subnet +- **incompatible change** in `net-vpc` + - a new `name` attribute has been added to the `subnets` variable, allowing to directly set subnet name, to update to the new module add an extra `name = false` attribute to each subnet ## [1.3.0] - 2020-04-08 From 733530a3938441bfa5a65ea3682ae763a03e96d6 Mon Sep 17 00:00:00 2001 From: Ludovico Magnocavallo Date: Fri, 1 May 2020 09:07:43 +0200 Subject: [PATCH 28/28] update changelog for v1.4.0 --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ef2143aca..4252d4a350 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +## [1.4.0] - 2020-05-01 + - fix DNS module internal zone lookup - fix Cloud NAT module internal router name lookup - re-enable and update outputs for the foundations environments example @@ -38,7 +40,8 @@ All notable changes to this project will be documented in this file. - merge development branch with suite of new modules and end-to-end examples -[Unreleased]: https://github.com/terraform-google-modules/cloud-foundation-fabric/compare/v1.3.0...HEAD +[Unreleased]: https://github.com/terraform-google-modules/cloud-foundation-fabric/compare/v1.4.0...HEAD +[1.4.0]: https://github.com/terraform-google-modules/cloud-foundation-fabric/compare/v1.3.0...v1.4.0 [1.3.0]: https://github.com/terraform-google-modules/cloud-foundation-fabric/compare/v1.2...v1.3.0 [1.2.0]: https://github.com/terraform-google-modules/cloud-foundation-fabric/compare/v1.1...v1.2 [1.1.0]: https://github.com/terraform-google-modules/cloud-foundation-fabric/compare/v1.0...v1.1

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 HO#}ZQITcS#ICBcHiA>W^kXgiRGuQdCQxG{0qi0 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