diff --git a/modules/compute-mig/README.md b/modules/compute-mig/README.md index 5e3dbd8e2..01aec0163 100644 --- a/modules/compute-mig/README.md +++ b/modules/compute-mig/README.md @@ -17,6 +17,7 @@ Stateful disks can be created directly, as shown in the last example below. - [Stateful MIGs - Instance Config](#stateful-migs-instance-config) - [Variables](#variables) - [Outputs](#outputs) +- [Fixtures](#fixtures) ## Examples @@ -34,7 +35,7 @@ module "nginx-template" { source = "./fabric/modules/compute-vm" project_id = var.project_id name = "nginx-template" - zone = "europe-west1-b" + zone = "${var.region}-b" tags = ["http-server", "ssh"] network_interfaces = [{ network = var.vpc.self_link @@ -55,13 +56,13 @@ module "nginx-template" { module "nginx-mig" { source = "./fabric/modules/compute-mig" - project_id = "my-project" - location = "europe-west1-b" + project_id = var.project_id + location = "${var.region}-b" name = "mig-test" target_size = 2 instance_template = module.nginx-template.template.self_link } -# tftest modules=2 resources=2 inventory=simple.yaml +# tftest modules=2 resources=2 inventory=simple.yaml e2e ``` ### Multiple Versions @@ -77,7 +78,7 @@ module "nginx-template" { source = "./fabric/modules/compute-vm" project_id = var.project_id name = "nginx-template" - zone = "europe-west1-b" + zone = "${var.region}-b" tags = ["http-server", "ssh"] network_interfaces = [{ network = var.vpc.self_link @@ -98,8 +99,8 @@ module "nginx-template" { module "nginx-mig" { source = "./fabric/modules/compute-mig" - project_id = "my-project" - location = "europe-west1-b" + project_id = var.project_id + location = "${var.region}-b" name = "mig-test" target_size = 3 instance_template = module.nginx-template.template.self_link @@ -112,7 +113,7 @@ module "nginx-mig" { } } } -# tftest modules=2 resources=2 +# tftest modules=2 resources=2 inventory=multiple.yaml e2e ``` ### Health Check and Autohealing Policies @@ -128,7 +129,7 @@ module "nginx-template" { source = "./fabric/modules/compute-vm" project_id = var.project_id name = "nginx-template" - zone = "europe-west1-b" + zone = "${var.region}-b" tags = ["http-server", "ssh"] network_interfaces = [{ network = var.vpc.self_link, @@ -149,8 +150,8 @@ module "nginx-template" { module "nginx-mig" { source = "./fabric/modules/compute-mig" - project_id = "my-project" - location = "europe-west1-b" + project_id = var.project_id + location = "${var.region}-b" name = "mig-test" target_size = 3 instance_template = module.nginx-template.template.self_link @@ -164,7 +165,7 @@ module "nginx-mig" { } } } -# tftest modules=2 resources=3 inventory=health-check.yaml +# tftest modules=2 resources=3 inventory=health-check.yaml e2e ``` ### Autoscaling @@ -180,7 +181,7 @@ module "nginx-template" { source = "./fabric/modules/compute-vm" project_id = var.project_id name = "nginx-template" - zone = "europe-west1-b" + zone = "${var.region}-b" tags = ["http-server", "ssh"] network_interfaces = [{ network = var.vpc.self_link @@ -201,8 +202,8 @@ module "nginx-template" { module "nginx-mig" { source = "./fabric/modules/compute-mig" - project_id = "my-project" - location = "europe-west1-b" + project_id = var.project_id + location = "${var.region}-b" name = "mig-test" target_size = 3 instance_template = module.nginx-template.template.self_link @@ -217,7 +218,7 @@ module "nginx-mig" { } } } -# tftest modules=2 resources=3 inventory=autoscaling.yaml +# tftest modules=2 resources=3 inventory=autoscaling.yaml e2e ``` ### Update Policy @@ -231,7 +232,7 @@ module "nginx-template" { source = "./fabric/modules/compute-vm" project_id = var.project_id name = "nginx-template" - zone = "europe-west1-b" + zone = "${var.region}-b" tags = ["http-server", "ssh"] network_interfaces = [{ network = var.vpc.self_link @@ -252,8 +253,8 @@ module "nginx-template" { module "nginx-mig" { source = "./fabric/modules/compute-mig" - project_id = "my-project" - location = "europe-west1-b" + project_id = var.project_id + location = "${var.region}-b" name = "mig-test" target_size = 3 instance_template = module.nginx-template.template.self_link @@ -266,7 +267,7 @@ module "nginx-mig" { } } } -# tftest modules=2 resources=2 +# tftest modules=2 resources=2 inventory=policy.yaml e2e ``` ### Stateful MIGs - MIG Config @@ -286,9 +287,9 @@ module "cos-nginx" { module "nginx-template" { source = "./fabric/modules/compute-vm" - project_id = "my-prj" + project_id = var.project_id name = "nginx-template" - zone = "europe-west8-b" + zone = "${var.region}-b" tags = ["http-server", "ssh"] instance_type = "e2-small" network_interfaces = [{ @@ -304,7 +305,7 @@ module "nginx-template" { source_type = "attach" name = "data-1" size = 10 - source = "test-data-1" + source = google_compute_disk.test-disk.name }] create_template = true metadata = { @@ -314,8 +315,8 @@ module "nginx-template" { module "nginx-mig" { source = "./fabric/modules/compute-mig" - project_id = "my-prj" - location = "europe-west8-b" + project_id = var.project_id + location = "${var.region}-b" name = "mig-test-2" target_size = 1 instance_template = module.nginx-template.template.self_link @@ -323,7 +324,7 @@ module "nginx-mig" { data-1 = false } } -# tftest modules=2 resources=2 +# tftest modules=2 resources=3 fixtures=fixtures/attached-disks.tf inventory=mig-config.yaml e2e ``` ### Stateful MIGs - Instance Config @@ -337,9 +338,9 @@ module "cos-nginx" { module "nginx-template" { source = "./fabric/modules/compute-vm" - project_id = "my-prj" + project_id = var.project_id name = "nginx-template" - zone = "europe-west8-b" + zone = "${var.region}-b" tags = ["http-server", "ssh"] instance_type = "e2-small" network_interfaces = [{ @@ -355,7 +356,7 @@ module "nginx-template" { source_type = "attach" name = "data-1" size = 10 - source = "test-data-1" + source = google_compute_disk.test-disk.name }] create_template = true metadata = { @@ -365,8 +366,8 @@ module "nginx-template" { module "nginx-mig" { source = "./fabric/modules/compute-mig" - project_id = "my-prj" - location = "europe-west8-b" + project_id = var.project_id + location = "${var.region}-b" name = "mig-test" instance_template = module.nginx-template.template.self_link stateful_config = { @@ -376,7 +377,7 @@ module "nginx-mig" { preserved_state = { disks = { data-1 = { - source = "projects/my-prj/zones/europe-west8-b/disks/test-data-1" + source = google_compute_disk.test-disk.id } } metadata = { @@ -386,7 +387,7 @@ module "nginx-mig" { } } } -# tftest modules=2 resources=3 inventory=stateful.yaml +# tftest modules=2 resources=4 fixtures=fixtures/attached-disks.tf inventory=stateful.yaml e2e ``` ## Variables @@ -421,4 +422,8 @@ module "nginx-mig" { | [group_manager](outputs.tf#L26) | Instance group resource. | | | [health_check](outputs.tf#L35) | Auto-created health-check resource. | | | [id](outputs.tf#L44) | Fully qualified group manager id. | | + +## Fixtures + +- [attached-disks.tf](../../tests/fixtures/attached-disks.tf) diff --git a/tests/fixtures/attached-disks.tf b/tests/fixtures/attached-disks.tf new file mode 100644 index 000000000..8a6170bc9 --- /dev/null +++ b/tests/fixtures/attached-disks.tf @@ -0,0 +1,24 @@ +/** + * Copyright 2024 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_disk" "test-disk" { + project = var.project_id + name = "test-data-1" + type = "pd-balanced" + zone = "${var.region}-b" + physical_block_size_bytes = 4096 + size = 10 +} diff --git a/tests/modules/compute_mig/examples/autoscaling.yaml b/tests/modules/compute_mig/examples/autoscaling.yaml index 79e85aa04..45f1fc3e1 100644 --- a/tests/modules/compute_mig/examples/autoscaling.yaml +++ b/tests/modules/compute_mig/examples/autoscaling.yaml @@ -1,4 +1,4 @@ -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -26,12 +26,37 @@ values: mode: 'ON' scale_in_control: [] scaling_schedules: [] + description: Terraform managed. name: mig-test - project: my-project + project: project-id timeouts: null - zone: europe-west1-b + zone: europe-west8-b + module.nginx-mig.google_compute_instance_group_manager.default[0]: + all_instances_config: [] + auto_healing_policies: [] + base_instance_name: mig-test + description: Terraform managed. + list_managed_instances_results: PAGELESS + name: mig-test + named_port: [] + project: project-id + stateful_disk: [] + stateful_external_ip: [] + stateful_internal_ip: [] + target_pools: null + target_size: 3 + timeouts: null + version: + - name: default + target_size: [] + wait_for_instances: false + wait_for_instances_status: STABLE + zone: europe-west8-b counts: google_compute_autoscaler: 1 google_compute_instance_group_manager: 1 google_compute_instance_template: 1 + modules: 2 + resources: 3 + diff --git a/tests/modules/compute_mig/examples/health-check.yaml b/tests/modules/compute_mig/examples/health-check.yaml index 569e7ddf2..4d503679e 100644 --- a/tests/modules/compute_mig/examples/health-check.yaml +++ b/tests/modules/compute_mig/examples/health-check.yaml @@ -1,4 +1,4 @@ -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -15,6 +15,7 @@ values: module.nginx-mig.google_compute_health_check.default[0]: check_interval_sec: 5 + description: Terraform managed. grpc_health_check: [] healthy_threshold: 2 http2_health_check: [] @@ -30,14 +31,39 @@ values: log_config: - enable: true name: mig-test - project: my-project + project: project-id ssl_health_check: [] tcp_health_check: [] timeout_sec: 5 timeouts: null unhealthy_threshold: 2 + module.nginx-mig.google_compute_instance_group_manager.default[0]: + all_instances_config: [] + auto_healing_policies: + - initial_delay_sec: 30 + base_instance_name: mig-test + description: Terraform managed. + list_managed_instances_results: PAGELESS + name: mig-test + named_port: [] + project: project-id + stateful_disk: [] + stateful_external_ip: [] + stateful_internal_ip: [] + target_pools: null + target_size: 3 + timeouts: null + version: + - name: default + target_size: [] + wait_for_instances: false + wait_for_instances_status: STABLE + zone: europe-west8-b counts: google_compute_health_check: 1 google_compute_instance_group_manager: 1 google_compute_instance_template: 1 + modules: 2 + resources: 3 + diff --git a/tests/modules/compute_mig/examples/mig-config.yaml b/tests/modules/compute_mig/examples/mig-config.yaml new file mode 100644 index 000000000..74f46cc4a --- /dev/null +++ b/tests/modules/compute_mig/examples/mig-config.yaml @@ -0,0 +1,47 @@ +# Copyright 2024 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. + +values: + module.nginx-mig.google_compute_instance_group_manager.default[0]: + all_instances_config: [] + auto_healing_policies: [] + base_instance_name: mig-test-2 + description: Terraform managed. + list_managed_instances_results: PAGELESS + name: mig-test-2 + named_port: [] + project: project-id + stateful_disk: + - delete_rule: NEVER + device_name: data-1 + stateful_external_ip: [] + stateful_internal_ip: [] + target_pools: null + target_size: 1 + timeouts: null + version: + - name: default + target_size: [] + wait_for_instances: false + wait_for_instances_status: STABLE + zone: europe-west8-b + +counts: + google_compute_disk: 1 + google_compute_instance_group_manager: 1 + google_compute_instance_template: 1 + modules: 2 + resources: 3 + + diff --git a/tests/modules/compute_mig/examples/multiple.yaml b/tests/modules/compute_mig/examples/multiple.yaml new file mode 100644 index 000000000..9639359af --- /dev/null +++ b/tests/modules/compute_mig/examples/multiple.yaml @@ -0,0 +1,47 @@ +# Copyright 2024 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. + +values: + module.nginx-mig.google_compute_instance_group_manager.default[0]: + all_instances_config: [] + auto_healing_policies: [] + base_instance_name: mig-test + description: Terraform managed. + list_managed_instances_results: PAGELESS + name: mig-test + named_port: [] + project: project-id + stateful_disk: [] + stateful_external_ip: [] + stateful_internal_ip: [] + target_pools: null + target_size: 3 + timeouts: null + version: + - name: default + target_size: [] + - name: canary + target_size: + - fixed: 1 + percent: null + wait_for_instances: false + wait_for_instances_status: STABLE + zone: europe-west8-b + +counts: + google_compute_instance_group_manager: 1 + google_compute_instance_template: 1 + modules: 2 + resources: 2 + diff --git a/tests/modules/compute_mig/examples/policy.yaml b/tests/modules/compute_mig/examples/policy.yaml new file mode 100644 index 000000000..cfce764df --- /dev/null +++ b/tests/modules/compute_mig/examples/policy.yaml @@ -0,0 +1,52 @@ +# Copyright 2023 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. + +values: + module.nginx-mig.google_compute_instance_group_manager.default[0]: + all_instances_config: [] + auto_healing_policies: [] + base_instance_name: mig-test + description: Terraform managed. + list_managed_instances_results: PAGELESS + name: mig-test + named_port: [] + project: project-id + stateful_disk: [] + stateful_external_ip: [] + stateful_internal_ip: [] + target_pools: null + target_size: 3 + timeouts: null + update_policy: + - max_surge_fixed: 1 + max_surge_percent: null + max_unavailable_percent: null + min_ready_sec: 30 + minimal_action: REPLACE + most_disruptive_allowed_action: null + replacement_method: null + type: PROACTIVE + version: + - name: default + target_size: [] + wait_for_instances: false + wait_for_instances_status: STABLE + zone: europe-west8-b + +counts: + google_compute_instance_group_manager: 1 + google_compute_instance_template: 1 + modules: 2 + resources: 2 + diff --git a/tests/modules/compute_mig/examples/simple.yaml b/tests/modules/compute_mig/examples/simple.yaml index 92671f0e3..5183d21bc 100644 --- a/tests/modules/compute_mig/examples/simple.yaml +++ b/tests/modules/compute_mig/examples/simple.yaml @@ -1,4 +1,4 @@ -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -16,9 +16,9 @@ values: module.nginx-mig.google_compute_instance_group_manager.default[0]: base_instance_name: mig-test name: mig-test - project: my-project + project: project-id target_size: 2 - zone: europe-west1-b + zone: europe-west8-b counts: google_compute_instance_group_manager: 1 diff --git a/tests/modules/compute_mig/examples/stateful.yaml b/tests/modules/compute_mig/examples/stateful.yaml index 4783e23e5..1b8a56bbc 100644 --- a/tests/modules/compute_mig/examples/stateful.yaml +++ b/tests/modules/compute_mig/examples/stateful.yaml @@ -1,4 +1,4 @@ -# Copyright 2023 Google LLC +# Copyright 2024 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -21,7 +21,7 @@ values: list_managed_instances_results: PAGELESS name: mig-test named_port: [] - project: my-prj + project: project-id stateful_disk: [] stateful_external_ip: [] stateful_internal_ip: [] @@ -43,19 +43,22 @@ values: - delete_rule: NEVER device_name: data-1 mode: READ_WRITE - source: projects/my-prj/zones/europe-west8-b/disks/test-data-1 + external_ip: [] + internal_ip: [] metadata: foo: bar - project: my-prj + project: project-id + remove_instance_on_destroy: false remove_instance_state_on_destroy: false timeouts: null zone: europe-west8-b + counts: + google_compute_disk: 1 google_compute_instance_group_manager: 1 google_compute_instance_template: 1 google_compute_per_instance_config: 1 modules: 2 - resources: 3 + resources: 4 -outputs: {}