diff --git a/Makefile b/Makefile index 5f833c3a..35485a8b 100644 --- a/Makefile +++ b/Makefile @@ -137,3 +137,44 @@ domains-apply: domains-init domains-destroy: domains-init terraform -chdir=terraform/domains/environment_domains destroy -var-file config/${CONFIG}.tfvars.json ${AUTO_APPROVE} + +# Test domains2 infrastructure +domains2-infra-vendor: + rm -rf terraform/domains/infrastructure_v2_test/vendor/modules/domains + git -c advice.detachedHead=false clone --depth=1 --single-branch --branch 1756-spike-domains-terraform-modules-enhancements https://github.com/DFE-Digital/terraform-modules.git terraform/domains/infrastructure_v2_test/vendor/modules/domains + +domains2-infra-init: domains composed-variables domains2-infra-vendor set-azure-account + terraform -chdir=terraform/domains/infrastructure_v2_test init -upgrade -reconfigure \ + -backend-config=resource_group_name=${RESOURCE_GROUP_NAME} \ + -backend-config=storage_account_name=${STORAGE_ACCOUNT_NAME} \ + -backend-config=key=domains2_infrastructure_test.tfstate + +domains2-infra-plan: domains2-infra-init + terraform -chdir=terraform/domains/infrastructure_v2_test plan -var-file config/zones.tfvars.json + +domains2-infra-apply: domains2-infra-init + terraform -chdir=terraform/domains/infrastructure_v2_test apply -var-file config/zones.tfvars.json ${AUTO_APPROVE} + +# Test domains2 environment domains +domains2-env-vendor: + rm -rf terraform/domains/environment_domains_v2_test/vendor/modules/domains + git -c advice.detachedHead=false clone --depth=1 --single-branch --branch 1756-spike-domains-terraform-modules-enhancements https://github.com/DFE-Digital/terraform-modules.git terraform/domains/environment_domains_v2_test/vendor/modules/domains + +domains2-env-init: domains composed-variables domains2-env-vendor set-azure-account + terraform -chdir=terraform/domains/environment_domains_v2_test init -upgrade -reconfigure \ + -backend-config=resource_group_name=${RESOURCE_GROUP_NAME} \ + -backend-config=storage_account_name=${STORAGE_ACCOUNT_NAME} \ + -backend-config=key=domains2_environment_${ENVIRONMENT}_test.tfstate + +domains2-env-plan: domains2-env-init + terraform -chdir=terraform/domains/environment_domains_v2_test plan -var-file config/${CONFIG}.tfvars.json + +domains2-env-apply: domains2-env-init + terraform -chdir=terraform/domains/environment_domains_v2_test apply -var-file config/${CONFIG}.tfvars.json ${AUTO_APPROVE} + +# Cleanup commands +domains2-env-destroy: domains2-env-init + terraform -chdir=terraform/domains/environment_domains_v2_test destroy -var-file config/${CONFIG}.tfvars.json ${AUTO_APPROVE} + +domains2-infra-destroy: domains2-infra-init + terraform -chdir=terraform/domains/infrastructure_v2_test destroy -var-file config/zones.tfvars.json ${AUTO_APPROVE} diff --git a/terraform/domains/environment_domains_v2_test/config/production.tfvars.json b/terraform/domains/environment_domains_v2_test/config/production.tfvars.json new file mode 100644 index 00000000..2f7899b0 --- /dev/null +++ b/terraform/domains/environment_domains_v2_test/config/production.tfvars.json @@ -0,0 +1,18 @@ +{ + "environment": "production", + "domains": [ + { + "name": "apex-production", + "zone": "technical-guidance.education.gov.uk", + "zone_resource_group": "s189p01-techg-dom-rg", + "environment": "production", + "origin_hostname": "technical-guidance-production.teacherservices.cloud", + "patterns_to_match": ["/*"], + "enable_caching": true, + "subdomain": null, + "health_probe_path": "/", + "health_probe_interval": 30, + "health_probe_timeout": 120 + } + ] +} \ No newline at end of file diff --git a/terraform/domains/environment_domains_v2_test/main.tf b/terraform/domains/environment_domains_v2_test/main.tf new file mode 100644 index 00000000..e32e656c --- /dev/null +++ b/terraform/domains/environment_domains_v2_test/main.tf @@ -0,0 +1,28 @@ +module "domains" { + source = "./vendor/modules/domains//domains2/environment_domains_v2" + + environment = var.environment + front_door_profile_name = "s189p01-techg-test-fd" + resource_group_name = "s189p01-techg-dom-rg" + + endpoint_configuration = { + strategy = "per_environment" # Simple strategy for single zone + } + + domains = var.domains + + rate_limit_rules = var.rate_limit != null ? { + "global-limit" = { + domain = "technical-guidance.education.gov.uk" + duration_in_minutes = var.rate_limit.duration_in_minutes + threshold = var.rate_limit.threshold + action = var.rate_limit.action + } + } : {} + + tags = { + Service = "TechnicalGuidance" + Environment = var.environment + Module = "domains2" + } +} \ No newline at end of file diff --git a/terraform/domains/environment_domains_v2_test/terraform.tf b/terraform/domains/environment_domains_v2_test/terraform.tf new file mode 100644 index 00000000..d57aac4b --- /dev/null +++ b/terraform/domains/environment_domains_v2_test/terraform.tf @@ -0,0 +1,18 @@ +terraform { + required_version = "= 1.6.4" + + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = "3.116.0" + } + } + backend "azurerm" { + container_name = "terraform-state" + } +} + +provider "azurerm" { + features {} + skip_provider_registration = true +} \ No newline at end of file diff --git a/terraform/domains/environment_domains_v2_test/variables.tf b/terraform/domains/environment_domains_v2_test/variables.tf new file mode 100644 index 00000000..aa3b16d2 --- /dev/null +++ b/terraform/domains/environment_domains_v2_test/variables.tf @@ -0,0 +1,30 @@ +variable "environment" { + type = string + description = "Environment name" +} + +variable "domains" { + type = list(object({ + name = string + zone = string + zone_resource_group = string + environment = string + origin_hostname = string + patterns_to_match = list(string) + enable_caching = optional(bool, true) + subdomain = optional(string) + health_probe_path = optional(string, "/") + health_probe_interval = optional(number, 30) + health_probe_timeout = optional(number, 120) + })) + description = "List of domain configurations" +} + +variable "rate_limit" { + type = object({ + duration_in_minutes = number + threshold = number + action = string + }) + default = null +} \ No newline at end of file diff --git a/terraform/domains/infrastructure_v2_test/config/zones.tfvars.json b/terraform/domains/infrastructure_v2_test/config/zones.tfvars.json new file mode 100644 index 00000000..690ef93f --- /dev/null +++ b/terraform/domains/infrastructure_v2_test/config/zones.tfvars.json @@ -0,0 +1,11 @@ +{ + "hosted_zone": { + "technical-guidance.education.gov.uk": { + "caa_records": {}, + "txt_records": {}, + "resource_group_name": "s189p01-techg-dom-rg", + "front_door_name": "s189p01-techg-test-fd" + } + }, + "deploy_default_records": false +} \ No newline at end of file diff --git a/terraform/domains/infrastructure_v2_test/main.tf b/terraform/domains/infrastructure_v2_test/main.tf new file mode 100644 index 00000000..64742fee --- /dev/null +++ b/terraform/domains/infrastructure_v2_test/main.tf @@ -0,0 +1,24 @@ +module "domains_infrastructure" { + source = "./vendor/modules/domains//domains2/infrastructure_v2" + + front_door_name = "s189p01-techg-test-fd" # New name for testing + resource_group_name = "s189p01-techg-dom-rg" + + hosted_zones = { + main = { + zone_name = "technical-guidance.education.gov.uk" + resource_group_name = "s189p01-techg-dom-rg" + deploy_default_records = false # Matching current config + caa_record_list = [] + txt_records = {} + } + } + + azure_enable_monitoring = false + + tags = { + Service = "TechnicalGuidance" + Environment = "Test" + Module = "domains2" + } +} \ No newline at end of file diff --git a/terraform/domains/infrastructure_v2_test/terraform.tf b/terraform/domains/infrastructure_v2_test/terraform.tf new file mode 100644 index 00000000..d57aac4b --- /dev/null +++ b/terraform/domains/infrastructure_v2_test/terraform.tf @@ -0,0 +1,18 @@ +terraform { + required_version = "= 1.6.4" + + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = "3.116.0" + } + } + backend "azurerm" { + container_name = "terraform-state" + } +} + +provider "azurerm" { + features {} + skip_provider_registration = true +} \ No newline at end of file diff --git a/terraform/domains/infrastructure_v2_test/variables.tf b/terraform/domains/infrastructure_v2_test/variables.tf new file mode 100644 index 00000000..02da7828 --- /dev/null +++ b/terraform/domains/infrastructure_v2_test/variables.tf @@ -0,0 +1,8 @@ +variable "hosted_zone" { + type = map(any) + default = {} +} + +variable "deploy_default_records" { + default = false +} \ No newline at end of file