diff --git a/terraform/loki/main.tf b/terraform/loki/main.tf index 138d26bb..464b842c 100644 --- a/terraform/loki/main.tf +++ b/terraform/loki/main.tf @@ -48,9 +48,27 @@ module "loki_coordinator" { units = var.coordinator_units } +module "loki_all" { + source = "git::https://github.com/canonical/loki-worker-k8s-operator//terraform" + depends_on = [module.loki_coordinator] + count = var.monolithic ? 1 : 0 + + app_name = var.all_name + channel = var.channel + constraints = var.anti_affinity ? "arch=amd64 tags=anti-pod.app.kubernetes.io/name=${var.all_name},anti-pod.topology-key=kubernetes.io/hostname" : var.worker_constraints + config = merge({ + role-all = true + }, var.all_config) + model_uuid = var.model_uuid + revision = var.worker_revision + storage_directives = var.worker_storage_directives + units = var.all_units +} + module "loki_backend" { source = "git::https://github.com/canonical/loki-worker-k8s-operator//terraform" depends_on = [module.loki_coordinator] + count = var.monolithic ? 0 : 1 app_name = var.backend_name channel = var.channel @@ -67,6 +85,7 @@ module "loki_backend" { module "loki_read" { source = "git::https://github.com/canonical/loki-worker-k8s-operator//terraform" depends_on = [module.loki_coordinator] + count = var.monolithic ? 0 : 1 app_name = var.read_name channel = var.channel @@ -83,6 +102,7 @@ module "loki_read" { module "loki_write" { source = "git::https://github.com/canonical/loki-worker-k8s-operator//terraform" depends_on = [module.loki_coordinator] + count = var.monolithic ? 0 : 1 app_name = var.write_name channel = var.channel @@ -112,7 +132,8 @@ resource "juju_integration" "coordinator_to_s3_integrator" { } resource "juju_integration" "coordinator_to_backend" { - model_uuid = var.model_uuid + count = var.monolithic ? 0 : 1 + model_uuid = var.model_uuidbackend_units application { name = module.loki_coordinator.app_name @@ -126,6 +147,7 @@ resource "juju_integration" "coordinator_to_backend" { } resource "juju_integration" "coordinator_to_read" { + count = var.monolithic ? 0 : 1 model_uuid = var.model_uuid application { @@ -140,6 +162,7 @@ resource "juju_integration" "coordinator_to_read" { } resource "juju_integration" "coordinator_to_write" { + count = var.monolithic ? 0 : 1 model_uuid = var.model_uuid application { @@ -152,3 +175,19 @@ resource "juju_integration" "coordinator_to_write" { endpoint = "loki-cluster" } } + + +resource "juju_integration" "coordinator_to_all" { + count = var.monolithic ? 1 : 0 + model_uuid = var.model_uuid + + application { + name = module.loki_coordinator.app_name + endpoint = "loki-cluster" + } + + application { + name = module.loki_all.app_name + endpoint = "loki-cluster" + } +} diff --git a/terraform/loki/variables.tf b/terraform/loki/variables.tf index c3676c6f..c5f95161 100644 --- a/terraform/loki/variables.tf +++ b/terraform/loki/variables.tf @@ -14,6 +14,12 @@ variable "anti_affinity" { default = true } +variable "monolithic" { + description = "Enable the monolithic deployment mode" + type = bool + default = false +} + # -------------- # S3 object storage -------------- variable "s3_integrator_channel" { @@ -46,6 +52,12 @@ variable "s3_endpoint" { # -------------- # App Names -------------- +variable "all_name" { + description = "Name of the Loki app with the all role" + type = string + default = "loki-worker" +} + variable "backend_name" { description = "Name of the Loki app with the backend role" type = string @@ -186,12 +198,23 @@ variable "s3_integrator_storage_directives" { # -------------- # Units Per App -------------- + +variable "all_units" { + description = "Number of Loki worker units with the all role" + type = number + default = 1 + validation { + condition = var.all_units >= 1 || var.monolithic == 0 + error_message = "The number of units must be greater than or equal to 1." + } +} + variable "backend_units" { description = "Number of Loki worker units with the backend role" type = number default = 1 validation { - condition = var.backend_units >= 1 + condition = var.backend_units >= 1 || var.monolithic == 1 error_message = "The number of units must be greater than or equal to 1." } } @@ -201,7 +224,7 @@ variable "read_units" { type = number default = 1 validation { - condition = var.read_units >= 1 + condition = var.read_units >= 1 || var.monolithic == 1 error_message = "The number of units must be greater than or equal to 1." } } @@ -211,7 +234,7 @@ variable "write_units" { type = number default = 1 validation { - condition = var.write_units >= 1 + condition = var.write_units >= 1 || var.monolithic == 1 error_message = "The number of units must be greater than or equal to 1." } } @@ -221,7 +244,7 @@ variable "coordinator_units" { type = number default = 1 validation { - condition = var.coordinator_units >= 1 + condition = var.coordinator_units >= 1 || var.monolithic == 1 error_message = "The number of units must be greater than or equal to 1." } } diff --git a/terraform/mimir/main.tf b/terraform/mimir/main.tf index 92b030b8..aa14af08 100644 --- a/terraform/mimir/main.tf +++ b/terraform/mimir/main.tf @@ -49,9 +49,30 @@ module "mimir_coordinator" { units = var.coordinator_units } + +module "mimir_all" { + source = "git::https://github.com/canonical/mimir-worker-k8s-operator//terraform" + depends_on = [module.mimir_coordinator] + count = var.monolithic ? 1 : 0 + + app_name = var.all_name + channel = var.channel + constraints = var.anti_affinity ? "arch=amd64 tags=anti-pod.app.kubernetes.io/name=${var.backend_name},anti-pod.topology-key=kubernetes.io/hostname" : var.worker_constraints + config = merge({ + role-all = true + }, var.all_config) + model_uuid = var.model_uuid + revision = var.worker_revision + storage_directives = var.worker_storage_directives + units = var.all_units +} + + module "mimir_backend" { source = "git::https://github.com/canonical/mimir-worker-k8s-operator//terraform" depends_on = [module.mimir_coordinator] + count = var.monolithic ? 0 : 1 + app_name = var.backend_name channel = var.channel @@ -68,6 +89,7 @@ module "mimir_backend" { module "mimir_read" { source = "git::https://github.com/canonical/mimir-worker-k8s-operator//terraform" depends_on = [module.mimir_coordinator] + count = var.monolithic ? 0 : 1 app_name = var.read_name channel = var.channel @@ -84,6 +106,7 @@ module "mimir_read" { module "mimir_write" { source = "git::https://github.com/canonical/mimir-worker-k8s-operator//terraform" depends_on = [module.mimir_coordinator] + count = var.monolithic ? 0 : 1 app_name = var.write_name channel = var.channel @@ -101,6 +124,7 @@ module "mimir_write" { resource "juju_integration" "coordinator_to_s3_integrator" { model_uuid = var.model_uuid + application { name = juju_application.s3_integrator.name endpoint = "s3-credentials" @@ -114,6 +138,7 @@ resource "juju_integration" "coordinator_to_s3_integrator" { resource "juju_integration" "coordinator_to_read" { model_uuid = var.model_uuid + count = var.monolithic ? 0 : 1 application { name = module.mimir_coordinator.app_name @@ -128,6 +153,7 @@ resource "juju_integration" "coordinator_to_read" { resource "juju_integration" "coordinator_to_write" { model_uuid = var.model_uuid + count = var.monolithic ? 0 : 1 application { name = module.mimir_coordinator.app_name @@ -142,6 +168,8 @@ resource "juju_integration" "coordinator_to_write" { resource "juju_integration" "coordinator_to_backend" { model_uuid = var.model_uuid + count = var.monolithic ? 0 : 1 + application { name = module.mimir_coordinator.app_name @@ -153,3 +181,19 @@ resource "juju_integration" "coordinator_to_backend" { endpoint = "mimir-cluster" } } + +resource "juju_integration" "coordinator_to_all" { + model_uuid = var.model_uuid + count = var.monolithic ? 1 : 0 + + + application { + name = module.mimir_coordinator.app_name + endpoint = "mimir-cluster" + } + + application { + name = module.mimir_all.app_name + endpoint = "mimir-cluster" + } +} diff --git a/terraform/mimir/variables.tf b/terraform/mimir/variables.tf index fa908ce8..04cc4d25 100644 --- a/terraform/mimir/variables.tf +++ b/terraform/mimir/variables.tf @@ -14,6 +14,12 @@ variable "anti_affinity" { default = true } +variable "monolithic" { + description = "Enable the monolithic deployment mode." + type = bool + default = false +} + # -------------- # S3 object storage -------------- variable "s3_integrator_channel" { @@ -46,6 +52,13 @@ variable "s3_endpoint" { # -------------- # App Names -------------- + +variable "all_name" { + description = "Name of the Mimir all (meta role) app" + type = string + default = "mimir-worker" +} + variable "read_name" { description = "Name of the Mimir read (meta role) app" type = string @@ -78,6 +91,13 @@ variable "coordinator_config" { default = {} } + +variable "all_config" { + description = "Map of the all worker configuration options" + type = map(string) + default = {} +} + variable "backend_config" { description = "Map of the backend worker configuration options" type = map(string) @@ -186,12 +206,22 @@ variable "s3_integrator_storage_directives" { # -------------- # Units Per App -------------- +variable "all_units" { + description = "Number of Mimir worker units with the all meta role" + type = number + default = 1 + validation { + condition = var.all_units >= 1 || var.monolithic == 0 + error_message = "The number of units must be greater than or equal to 1." + } +} + variable "read_units" { description = "Number of Mimir worker units with the read meta role" type = number default = 1 validation { - condition = var.read_units >= 1 + condition = var.read_units >= 1 || var.monolithic == 1 error_message = "The number of units must be greater than or equal to 1." } } @@ -201,7 +231,7 @@ variable "write_units" { type = number default = 1 validation { - condition = var.write_units >= 1 + condition = var.write_units >= 1 || var.monolithic == 1 error_message = "The number of units must be greater than or equal to 1." } } @@ -211,7 +241,7 @@ variable "backend_units" { type = number default = 1 validation { - condition = var.backend_units >= 1 + condition = var.backend_units >= 1 || var.monolithic == 1 error_message = "The number of units must be greater than or equal to 1." } } @@ -221,7 +251,7 @@ variable "coordinator_units" { type = number default = 1 validation { - condition = var.coordinator_units >= 1 + condition = var.coordinator_units >= 1 || var.monolithic == 1 error_message = "The number of units must be greater than or equal to 1." } }