From 546e200acfc1f584cba7e182368aedd7dbb2c787 Mon Sep 17 00:00:00 2001 From: diegoitaliait Date: Thu, 3 Aug 2023 18:26:38 +0200 Subject: [PATCH] added features flags --- .../01_container_app_0.tf | 1 - .../diego-container-apps/01_cosmos_db.tf | 23 +- .../02_container_app_env_dapr.tf | 17 +- .../02_container_app_env_diego.tf | 6 +- .../03_container_app_devops_darp.tf | 244 +++++++++--------- .../diego-container-apps/99_variables.tf | 8 + src/domains/diego-container-apps/README.md | 6 +- .../env/dev/terraform.tfvars | 6 + 8 files changed, 170 insertions(+), 141 deletions(-) diff --git a/src/domains/diego-container-apps/01_container_app_0.tf b/src/domains/diego-container-apps/01_container_app_0.tf index e9036efa..9e5ad1ef 100644 --- a/src/domains/diego-container-apps/01_container_app_0.tf +++ b/src/domains/diego-container-apps/01_container_app_0.tf @@ -8,7 +8,6 @@ resource "null_resource" "update_az_cli" { triggers = { env_name = local.container_app_diego_environment_name rg = azurerm_resource_group.container_app_diego.name - subnet_id = module.container_apps_snet.id log_analytics_id = data.azurerm_log_analytics_workspace.log_analytics.workspace_id log_analytics_workspace_primary_shared_key = data.azurerm_log_analytics_workspace.log_analytics.primary_shared_key } diff --git a/src/domains/diego-container-apps/01_cosmos_db.tf b/src/domains/diego-container-apps/01_cosmos_db.tf index 5ac90f97..6d27b093 100644 --- a/src/domains/diego-container-apps/01_cosmos_db.tf +++ b/src/domains/diego-container-apps/01_cosmos_db.tf @@ -1,13 +1,16 @@ resource "azurerm_resource_group" "cosmosdb_dapr" { + count = var.is_resource_enabled.mongodb_dapr ? 1 : 0 name = "${local.project}-dapr-cosmos-rg" location = var.location tags = var.tags } -resource "azurerm_cosmosdb_account" "mongodb" { +resource "azurerm_cosmosdb_account" "mongodb_dapr" { + count = var.is_resource_enabled.mongodb_dapr ? 1 : 0 + name = "${local.project}-dapr-cosmos" - location = azurerm_resource_group.cosmosdb_dapr.location - resource_group_name = azurerm_resource_group.cosmosdb_dapr.name + location = azurerm_resource_group.cosmosdb_dapr[0].location + resource_group_name = azurerm_resource_group.cosmosdb_dapr[0].name offer_type = "Standard" kind = "GlobalDocumentDB" @@ -28,16 +31,20 @@ resource "azurerm_cosmosdb_account" "mongodb" { } resource "azurerm_cosmosdb_sql_database" "db_sql_dapr" { + count = var.is_resource_enabled.mongodb_dapr ? 1 : 0 + name = local.cosmosdb_db_name - resource_group_name = azurerm_resource_group.cosmosdb_dapr.name - account_name = azurerm_cosmosdb_account.mongodb.name + resource_group_name = azurerm_resource_group.cosmosdb_dapr[0].name + account_name = azurerm_cosmosdb_account.mongodb_dapr[0].name } resource "azurerm_cosmosdb_sql_container" "collection_dapr" { + count = var.is_resource_enabled.mongodb_dapr ? 1 : 0 + name = local.cosmosdb_collection_name - resource_group_name = azurerm_resource_group.cosmosdb_dapr.name - account_name = azurerm_cosmosdb_account.mongodb.name - database_name = azurerm_cosmosdb_sql_database.db_sql_dapr.name + resource_group_name = azurerm_resource_group.cosmosdb_dapr[0].name + account_name = azurerm_cosmosdb_account.mongodb_dapr[0].name + database_name = azurerm_cosmosdb_sql_database.db_sql_dapr[0].name partition_key_path = "/id" } diff --git a/src/domains/diego-container-apps/02_container_app_env_dapr.tf b/src/domains/diego-container-apps/02_container_app_env_dapr.tf index 5fd290a0..953592b3 100644 --- a/src/domains/diego-container-apps/02_container_app_env_dapr.tf +++ b/src/domains/diego-container-apps/02_container_app_env_dapr.tf @@ -1,5 +1,6 @@ # Subnet to host the api config module "container_apps_dapr_snet" { + count = var.is_resource_enabled.container_app_dapr ? 1 : 0 source = "git::https://github.com/pagopa/terraform-azurerm-v3.git//subnet?ref=v5.3.0" name = "${local.project}-container-apps-dapr-snet" address_prefixes = var.cidr_subnet_container_apps_dapr @@ -10,10 +11,12 @@ module "container_apps_dapr_snet" { } resource "null_resource" "container_app_dapr_create_env" { + count = var.is_resource_enabled.container_app_dapr ? 1 : 0 + triggers = { env_name = local.container_app_dapr_environment_name rg = azurerm_resource_group.container_app_diego.name - subnet_id = module.container_apps_dapr_snet.id + subnet_id = module.container_apps_dapr_snet[0].id log_analytics_id = data.azurerm_log_analytics_workspace.log_analytics.workspace_id log_analytics_workspace_primary_shared_key = data.azurerm_log_analytics_workspace.log_analytics.primary_shared_key } @@ -24,7 +27,7 @@ resource "null_resource" "container_app_dapr_create_env" { -n ${local.container_app_dapr_environment_name} \ -g ${azurerm_resource_group.container_app_diego.name} \ --location ${var.location} \ - --infrastructure-subnet-resource-id ${module.container_apps_dapr_snet.id} \ + --infrastructure-subnet-resource-id ${module.container_apps_dapr_snet[0].id} \ --internal-only false \ --logs-destination log-analytics \ --logs-workspace-id "${data.azurerm_log_analytics_workspace.log_analytics.workspace_id}" \ @@ -43,26 +46,30 @@ EOD } depends_on = [ - module.container_apps_dapr_snet, + module.container_apps_dapr_snet[0], azurerm_resource_group.container_app_diego ] } locals { container_app_env_darp_cosmosdb_yaml_content = templatefile("${path.module}/container-app-env/cosmosdb-component-dapr.yaml.tpl", { - COSMOSDB_KEY = azurerm_cosmosdb_account.mongodb.primary_key - COSMOSDB_ENDPOINT = azurerm_cosmosdb_account.mongodb.endpoint + COSMOSDB_KEY = var.is_resource_enabled.mongodb_dapr ? azurerm_cosmosdb_account.mongodb_dapr[0].primary_key : "" + COSMOSDB_ENDPOINT = var.is_resource_enabled.mongodb_dapr ? azurerm_cosmosdb_account.mongodb_dapr[0].endpoint : "" COSMOSDB_DATABASE = local.cosmosdb_db_name COSMOSDB_COLLECTION = local.cosmosdb_collection_name }) } resource "local_file" "save_yaml_file_cosmosdb_component" { + count = var.is_resource_enabled.container_app_dapr ? 1 : 0 + content = local.container_app_env_darp_cosmosdb_yaml_content filename = local.container_app_dapr_environment_component_cosmosdb } resource "null_resource" "container_app_env_darp_cosmosdb_yaml" { + count = var.is_resource_enabled.container_app_dapr ? 1 : 0 + triggers = { CONTENT_FILE = local.container_app_env_darp_cosmosdb_yaml_content diff --git a/src/domains/diego-container-apps/02_container_app_env_diego.tf b/src/domains/diego-container-apps/02_container_app_env_diego.tf index 7cbbe964..b4217246 100644 --- a/src/domains/diego-container-apps/02_container_app_env_diego.tf +++ b/src/domains/diego-container-apps/02_container_app_env_diego.tf @@ -1,5 +1,7 @@ # Subnet to host the api config module "container_apps_snet" { + count = var.is_resource_enabled.container_app_diego_env ? 1 : 0 + source = "git::https://github.com/pagopa/terraform-azurerm-v3.git//subnet?ref=v5.3.0" name = "${local.project}-container-apps-snet" address_prefixes = var.cidr_subnet_container_apps @@ -12,9 +14,11 @@ module "container_apps_snet" { resource "azurerm_container_app_environment" "diego_env" { + count = var.is_resource_enabled.container_app_diego_env ? 1 : 0 + name = local.container_app_diego_environment_name location = azurerm_resource_group.container_app_diego.location resource_group_name = azurerm_resource_group.container_app_diego.name log_analytics_workspace_id = data.azurerm_log_analytics_workspace.log_analytics.id - infrastructure_subnet_id = module.container_apps_snet.id + infrastructure_subnet_id = module.container_apps_snet[0].id } diff --git a/src/domains/diego-container-apps/03_container_app_devops_darp.tf b/src/domains/diego-container-apps/03_container_app_devops_darp.tf index 5fa54e9e..30b2f6af 100644 --- a/src/domains/diego-container-apps/03_container_app_devops_darp.tf +++ b/src/domains/diego-container-apps/03_container_app_devops_darp.tf @@ -1,122 +1,122 @@ -data "azurerm_container_app_environment" "dapr_env" { - name = local.container_app_dapr_environment_name - resource_group_name = azurerm_resource_group.container_app_diego.name - - depends_on = [ - null_resource.container_app_dapr_create_env - ] -} - -# -# Frontend -# -resource "azurerm_container_app" "frontend" { - name = "frontend-dapr-showcase" - container_app_environment_id = data.azurerm_container_app_environment.dapr_env.id - resource_group_name = azurerm_resource_group.container_app_diego.name - revision_mode = "Single" - - template { - min_replicas = 1 - max_replicas = 1 - - container { - name = "frontend" - image = "ghcr.io/pagopa/devops-webapp-python:beta-comosdb-component-dapr" - cpu = 0.5 - memory = "1Gi" - - liveness_probe { - failure_count_threshold = 10 - initial_delay = 10 - interval_seconds = 10 - path = "/status" - port = 8000 - transport = "HTTP" - } - - readiness_probe { - failure_count_threshold = 10 - interval_seconds = 10 - path = "/status" - port = 8000 - transport = "HTTP" - } - } - } - - ingress { - external_enabled = true - target_port = 8000 - traffic_weight { - latest_revision = true - percentage = 100 - } - } - - dapr { - app_id = "frontend" - app_port = 8000 - } - - depends_on = [ - data.azurerm_container_app_environment.dapr_env - ] -} - -# -# backend -# -resource "azurerm_container_app" "backend" { - name = "backend-dapr-showcase" - container_app_environment_id = data.azurerm_container_app_environment.dapr_env.id - resource_group_name = azurerm_resource_group.container_app_diego.name - revision_mode = "Single" - - template { - min_replicas = 1 - max_replicas = 1 - - container { - name = "backend" - image = "ghcr.io/diegoitaliait/dapr-showcase:beta-enable-dapr" - cpu = 0.5 - memory = "1Gi" - - liveness_probe { - failure_count_threshold = 10 - initial_delay = 10 - interval_seconds = 10 - path = "/status" - port = 3000 - transport = "HTTP" - } - - readiness_probe { - failure_count_threshold = 10 - interval_seconds = 10 - path = "/status" - port = 3000 - transport = "HTTP" - } - } - } - - ingress { - external_enabled = false - target_port = 3000 - traffic_weight { - latest_revision = true - percentage = 100 - } - } - - dapr { - app_id = "backend" - app_port = 3000 - } - - depends_on = [ - data.azurerm_container_app_environment.dapr_env - ] -} +# data "azurerm_container_app_environment" "dapr_env" { +# name = local.container_app_dapr_environment_name +# resource_group_name = azurerm_resource_group.container_app_diego.name + +# depends_on = [ +# null_resource.container_app_dapr_create_env +# ] +# } + +# # +# # Frontend +# # +# resource "azurerm_container_app" "frontend" { +# name = "frontend-dapr-showcase" +# container_app_environment_id = data.azurerm_container_app_environment.dapr_env.id +# resource_group_name = azurerm_resource_group.container_app_diego.name +# revision_mode = "Single" + +# template { +# min_replicas = 1 +# max_replicas = 1 + +# container { +# name = "frontend" +# image = "ghcr.io/pagopa/devops-webapp-python:beta-comosdb-component-dapr" +# cpu = 0.5 +# memory = "1Gi" + +# liveness_probe { +# failure_count_threshold = 10 +# initial_delay = 10 +# interval_seconds = 10 +# path = "/status" +# port = 8000 +# transport = "HTTP" +# } + +# readiness_probe { +# failure_count_threshold = 10 +# interval_seconds = 10 +# path = "/status" +# port = 8000 +# transport = "HTTP" +# } +# } +# } + +# ingress { +# external_enabled = true +# target_port = 8000 +# traffic_weight { +# latest_revision = true +# percentage = 100 +# } +# } + +# dapr { +# app_id = "frontend" +# app_port = 8000 +# } + +# depends_on = [ +# data.azurerm_container_app_environment.dapr_env +# ] +# } + +# # +# # backend +# # +# resource "azurerm_container_app" "backend" { +# name = "backend-dapr-showcase" +# container_app_environment_id = data.azurerm_container_app_environment.dapr_env.id +# resource_group_name = azurerm_resource_group.container_app_diego.name +# revision_mode = "Single" + +# template { +# min_replicas = 1 +# max_replicas = 1 + +# container { +# name = "backend" +# image = "ghcr.io/diegoitaliait/dapr-showcase:beta-enable-dapr" +# cpu = 0.5 +# memory = "1Gi" + +# liveness_probe { +# failure_count_threshold = 10 +# initial_delay = 10 +# interval_seconds = 10 +# path = "/status" +# port = 3000 +# transport = "HTTP" +# } + +# readiness_probe { +# failure_count_threshold = 10 +# interval_seconds = 10 +# path = "/status" +# port = 3000 +# transport = "HTTP" +# } +# } +# } + +# ingress { +# external_enabled = false +# target_port = 3000 +# traffic_weight { +# latest_revision = true +# percentage = 100 +# } +# } + +# dapr { +# app_id = "backend" +# app_port = 3000 +# } + +# depends_on = [ +# data.azurerm_container_app_environment.dapr_env +# ] +# } diff --git a/src/domains/diego-container-apps/99_variables.tf b/src/domains/diego-container-apps/99_variables.tf index f9bf991e..7ec475c1 100644 --- a/src/domains/diego-container-apps/99_variables.tf +++ b/src/domains/diego-container-apps/99_variables.tf @@ -109,6 +109,14 @@ variable "tags" { } } +variable "is_resource_enabled" { + type = object({ + mongodb_dapr = bool, + container_app_dapr = bool, + container_app_diego_env = bool, + }) +} + variable "terraform_remote_state_core" { type = object({ resource_group_name = string, diff --git a/src/domains/diego-container-apps/README.md b/src/domains/diego-container-apps/README.md index c4d7fcab..973940cf 100644 --- a/src/domains/diego-container-apps/README.md +++ b/src/domains/diego-container-apps/README.md @@ -21,10 +21,8 @@ | Name | Type | |------|------| -| [azurerm_container_app.backend](https://registry.terraform.io/providers/hashicorp/azurerm/3.45.0/docs/resources/container_app) | resource | -| [azurerm_container_app.frontend](https://registry.terraform.io/providers/hashicorp/azurerm/3.45.0/docs/resources/container_app) | resource | | [azurerm_container_app_environment.diego_env](https://registry.terraform.io/providers/hashicorp/azurerm/3.45.0/docs/resources/container_app_environment) | resource | -| [azurerm_cosmosdb_account.mongodb](https://registry.terraform.io/providers/hashicorp/azurerm/3.45.0/docs/resources/cosmosdb_account) | resource | +| [azurerm_cosmosdb_account.mongodb_dapr](https://registry.terraform.io/providers/hashicorp/azurerm/3.45.0/docs/resources/cosmosdb_account) | resource | | [azurerm_cosmosdb_sql_container.collection_dapr](https://registry.terraform.io/providers/hashicorp/azurerm/3.45.0/docs/resources/cosmosdb_sql_container) | resource | | [azurerm_cosmosdb_sql_database.db_sql_dapr](https://registry.terraform.io/providers/hashicorp/azurerm/3.45.0/docs/resources/cosmosdb_sql_database) | resource | | [azurerm_resource_group.container_app_diego](https://registry.terraform.io/providers/hashicorp/azurerm/3.45.0/docs/resources/resource_group) | resource | @@ -39,7 +37,6 @@ | [azuread_group.adgroup_security](https://registry.terraform.io/providers/hashicorp/azuread/2.21.0/docs/data-sources/group) | data source | | [azurerm_application_insights.application_insights](https://registry.terraform.io/providers/hashicorp/azurerm/3.45.0/docs/data-sources/application_insights) | data source | | [azurerm_client_config.current](https://registry.terraform.io/providers/hashicorp/azurerm/3.45.0/docs/data-sources/client_config) | data source | -| [azurerm_container_app_environment.dapr_env](https://registry.terraform.io/providers/hashicorp/azurerm/3.45.0/docs/data-sources/container_app_environment) | data source | | [azurerm_log_analytics_workspace.log_analytics](https://registry.terraform.io/providers/hashicorp/azurerm/3.45.0/docs/data-sources/log_analytics_workspace) | data source | | [azurerm_monitor_action_group.email](https://registry.terraform.io/providers/hashicorp/azurerm/3.45.0/docs/data-sources/monitor_action_group) | data source | | [azurerm_monitor_action_group.slack](https://registry.terraform.io/providers/hashicorp/azurerm/3.45.0/docs/data-sources/monitor_action_group) | data source | @@ -61,6 +58,7 @@ | [env\_short](#input\_env\_short) | n/a | `string` | n/a | yes | | [external\_domain](#input\_external\_domain) | Domain for delegation | `string` | `"pagopa.it"` | no | | [instance](#input\_instance) | One of beta, prod01, prod02 | `string` | n/a | yes | +| [is\_resource\_enabled](#input\_is\_resource\_enabled) | n/a |
object({
mongodb_dapr = bool,
container_app_dapr = bool,
container_app_diego_env = bool,
})
| n/a | yes | | [k8s\_kube\_config\_path\_prefix](#input\_k8s\_kube\_config\_path\_prefix) | n/a | `string` | `"~/.kube"` | no | | [location](#input\_location) | One of westeurope, northeurope | `string` | n/a | yes | | [location\_short](#input\_location\_short) | One of wue, neu | `string` | n/a | yes | diff --git a/src/domains/diego-container-apps/env/dev/terraform.tfvars b/src/domains/diego-container-apps/env/dev/terraform.tfvars index a154cb2b..095a1f77 100644 --- a/src/domains/diego-container-apps/env/dev/terraform.tfvars +++ b/src/domains/diego-container-apps/env/dev/terraform.tfvars @@ -43,3 +43,9 @@ dns_zone_internal_prefix = "internal.devopslab" # cidr_subnet_container_apps = ["10.1.146.0/23"] cidr_subnet_container_apps_dapr = ["10.1.150.0/23"] + +is_resource_enabled = { + mongodb_dapr = false, + container_app_dapr = false, + container_app_diego_env = false, +}