diff --git a/terraform/cos-lite/README.md b/terraform/cos-lite/README.md index 404bc531..9d1e5dd5 100644 --- a/terraform/cos-lite/README.md +++ b/terraform/cos-lite/README.md @@ -27,7 +27,6 @@ This is a Terraform module facilitating the deployment of the COS Lite solution, |------|-------------|------|---------|:--------:| | [alertmanager](#input\_alertmanager) | Application configuration for Alertmanager. For more details: https://registry.terraform.io/providers/juju/juju/latest/docs/resources/application |
object({
app_name = optional(string, "alertmanager")
config = optional(map(string), {})
constraints = optional(string, "arch=amd64")
revision = optional(number, null)
storage_directives = optional(map(string), {})
units = optional(number, 1)
})
| `{}` | no | | [catalogue](#input\_catalogue) | Application configuration for Catalogue. For more details: https://registry.terraform.io/providers/juju/juju/latest/docs/resources/application |
object({
app_name = optional(string, "catalogue")
config = optional(map(string), {})
constraints = optional(string, "arch=amd64")
revision = optional(number, null)
storage_directives = optional(map(string), {})
units = optional(number, 1)
})
| `{}` | no | -| [channel](#input\_channel) | Channel that the applications are (unless overwritten by individual channels) deployed from | `string` | `"dev/edge"` | no | | [external\_ca\_cert\_offer\_url](#input\_external\_ca\_cert\_offer\_url) | A Juju offer URL (e.g. admin/external-ca.send-ca-cert) of a CA providing the 'certificate\_transfer' integration for applications to trust ingress via Traefik. | `string` | `null` | no | | [external\_certificates\_offer\_url](#input\_external\_certificates\_offer\_url) | A Juju offer URL (e.g. admin/external-ca.certificates) of a CA providing the 'tls\_certificates' integration for Traefik to supply it with server certificates. | `string` | `null` | no | | [grafana](#input\_grafana) | Application configuration for Grafana. For more details: https://registry.terraform.io/providers/juju/juju/latest/docs/resources/application |
object({
app_name = optional(string, "grafana")
config = optional(map(string), {})
constraints = optional(string, "arch=amd64")
revision = optional(number, null)
storage_directives = optional(map(string), {})
units = optional(number, 1)
})
| `{}` | no | @@ -36,6 +35,7 @@ This is a Terraform module facilitating the deployment of the COS Lite solution, | [loki](#input\_loki) | Application configuration for Loki. For more details: https://registry.terraform.io/providers/juju/juju/latest/docs/resources/application |
object({
app_name = optional(string, "loki")
config = optional(map(string), {})
constraints = optional(string, "arch=amd64")
revision = optional(number, null)
storage_directives = optional(map(string), {})
units = optional(number, 1)
})
| `{}` | no | | [model\_uuid](#input\_model\_uuid) | Reference to an existing model resource or data source for the model to deploy to | `string` | n/a | yes | | [prometheus](#input\_prometheus) | Application configuration for Prometheus. For more details: https://registry.terraform.io/providers/juju/juju/latest/docs/resources/application |
object({
app_name = optional(string, "prometheus")
config = optional(map(string), {})
constraints = optional(string, "arch=amd64")
revision = optional(number, null)
storage_directives = optional(map(string), {})
units = optional(number, 1)
})
| `{}` | no | +| [risk](#input\_risk) | Risk level that the applications are (unless overwritten by individual channels) deployed from | `string` | `"edge"` | no | | [ssc](#input\_ssc) | Application configuration for self-signed-certificates. For more details: https://registry.terraform.io/providers/juju/juju/latest/docs/resources/application |
object({
app_name = optional(string, "ca")
channel = optional(string, "1/stable")
config = optional(map(string), {})
constraints = optional(string, "arch=amd64")
revision = optional(number, null)
storage_directives = optional(map(string), {})
units = optional(number, 1)
})
| `{}` | no | | [traefik](#input\_traefik) | Application configuration for Traefik. For more details: https://registry.terraform.io/providers/juju/juju/latest/docs/resources/application |
object({
app_name = optional(string, "traefik")
channel = optional(string, "latest/stable")
config = optional(map(string), {})
constraints = optional(string, "arch=amd64")
revision = optional(number, null)
storage_directives = optional(map(string), {})
units = optional(number, 1)
})
| `{}` | no | diff --git a/terraform/cos-lite/applications.tf b/terraform/cos-lite/applications.tf index dd1bd5ab..0fd945df 100644 --- a/terraform/cos-lite/applications.tf +++ b/terraform/cos-lite/applications.tf @@ -1,7 +1,7 @@ module "alertmanager" { source = "git::https://github.com/canonical/alertmanager-k8s-operator//terraform" app_name = var.alertmanager.app_name - channel = var.channel + channel = local.tracks.alertmanager + "/" + var.risk config = var.alertmanager.config constraints = var.alertmanager.constraints model_uuid = var.model_uuid @@ -13,7 +13,7 @@ module "alertmanager" { module "catalogue" { source = "git::https://github.com/canonical/catalogue-k8s-operator//terraform" app_name = var.catalogue.app_name - channel = var.channel + channel = local.tracks.catalogue + "/" + var.risk config = var.catalogue.config constraints = var.catalogue.constraints model_uuid = var.model_uuid @@ -25,7 +25,7 @@ module "catalogue" { module "grafana" { source = "git::https://github.com/canonical/grafana-k8s-operator//terraform" app_name = var.grafana.app_name - channel = var.channel + channel = local.tracks.grafana + "/" + var.risk config = var.grafana.config constraints = var.grafana.constraints model_uuid = var.model_uuid @@ -37,7 +37,7 @@ module "grafana" { module "loki" { source = "git::https://github.com/canonical/loki-k8s-operator//terraform" app_name = var.loki.app_name - channel = var.channel + channel = local.tracks.loki + "/" + var.risk config = var.loki.config constraints = var.loki.constraints model_uuid = var.model_uuid @@ -49,7 +49,7 @@ module "loki" { module "prometheus" { source = "git::https://github.com/canonical/prometheus-k8s-operator//terraform" app_name = var.prometheus.app_name - channel = var.channel + channel = local.tracks.prometheus + "/" + var.risk config = var.prometheus.config constraints = var.prometheus.constraints model_uuid = var.model_uuid @@ -62,7 +62,7 @@ module "ssc" { count = var.internal_tls ? 1 : 0 source = "git::https://github.com/canonical/self-signed-certificates-operator//terraform" app_name = var.ssc.app_name - channel = var.ssc.channel + channel = local.tracks.ssc + "/" + var.risk config = var.ssc.config constraints = var.ssc.constraints model_uuid = var.model_uuid @@ -73,7 +73,7 @@ module "ssc" { module "traefik" { source = "git::https://github.com/canonical/traefik-k8s-operator//terraform" app_name = var.traefik.app_name - channel = var.traefik.channel + channel = local.tracks.traefik + "/" + var.risk config = var.traefik.config constraints = var.traefik.constraints model_uuid = var.model_uuid diff --git a/terraform/cos-lite/variables.tf b/terraform/cos-lite/variables.tf index 5421f6c6..fe8e4d75 100644 --- a/terraform/cos-lite/variables.tf +++ b/terraform/cos-lite/variables.tf @@ -8,12 +8,21 @@ locals { # https://github.com/juju/terraform-provider-juju/issues/972 tls_termination = var.external_certificates_offer_url != null ? true : false + tracks = { + alertmanager = "0.31" + catalogue = "3.0" + grafana = "12.4" + loki = "3.7" + prometheus = "3.10" + ssc = "latest" + traefik = "latest" + } } -variable "channel" { - description = "Channel that the applications are (unless overwritten by individual channels) deployed from" +variable "risk" { + description = "Risk level that the applications are (unless overwritten by individual channels) deployed from" type = string - default = "dev/edge" + default = "edge" } variable "model_uuid" { diff --git a/terraform/cos/README.md b/terraform/cos/README.md index bd294b6a..f608486d 100644 --- a/terraform/cos/README.md +++ b/terraform/cos/README.md @@ -33,7 +33,6 @@ This is a Terraform module facilitating the deployment of the COS solution, usin | [alertmanager](#input\_alertmanager) | Application configuration for Alertmanager. For more details: https://registry.terraform.io/providers/juju/juju/latest/docs/resources/application |
object({
app_name = optional(string, "alertmanager")
config = optional(map(string), {})
constraints = optional(string, "arch=amd64")
revision = optional(number, null)
storage_directives = optional(map(string), {})
units = optional(number, 1)
})
| `{}` | no | | [anti\_affinity](#input\_anti\_affinity) | Enable anti-affinity constraints across all HA modules (Mimir, Loki, Tempo) | `bool` | `true` | no | | [catalogue](#input\_catalogue) | Application configuration for Catalogue. For more details: https://registry.terraform.io/providers/juju/juju/latest/docs/resources/application |
object({
app_name = optional(string, "catalogue")
config = optional(map(string), {})
constraints = optional(string, "arch=amd64")
revision = optional(number, null)
storage_directives = optional(map(string), {})
units = optional(number, 1)
})
| `{}` | no | -| [channel](#input\_channel) | Channel that the applications are (unless overwritten by individual channels) deployed from | `string` | `"dev/edge"` | no | | [cloud](#input\_cloud) | Kubernetes cloud or environment where this COS module will be deployed (e.g self-managed, aws) | `string` | `"self-managed"` | no | | [external\_ca\_cert\_offer\_url](#input\_external\_ca\_cert\_offer\_url) | A Juju offer URL (e.g. admin/external-ca.send-ca-cert) of a CA providing the 'certificate\_transfer' integration for applications to trust ingress via Traefik. | `string` | `null` | no | | [external\_certificates\_offer\_url](#input\_external\_certificates\_offer\_url) | A Juju offer URL of a CA providing the 'tls\_certificates' integration for Traefik to supply it with server certificates | `string` | `null` | no | @@ -48,6 +47,7 @@ This is a Terraform module facilitating the deployment of the COS solution, usin | [mimir\_worker](#input\_mimir\_worker) | Application configuration for all Mimir Workers. For more details: https://registry.terraform.io/providers/juju/juju/latest/docs/resources/application |
object({
backend_config = optional(map(string), {})
read_config = optional(map(string), {})
write_config = optional(map(string), {})
constraints = optional(string, "arch=amd64")
revision = optional(number, null)
backend_storage_directives = optional(map(string), {})
read_storage_directives = optional(map(string), {})
write_storage_directives = optional(map(string), {})
backend_units = optional(number, 3)
read_units = optional(number, 3)
write_units = optional(number, 3)
})
| `{}` | no | | [model\_uuid](#input\_model\_uuid) | Reference to an existing model resource or data source for the model to deploy to | `string` | n/a | yes | | [opentelemetry\_collector](#input\_opentelemetry\_collector) | Application configuration for OpenTelemetry Collector. For more details: https://registry.terraform.io/providers/juju/juju/latest/docs/resources/application |
object({
app_name = optional(string, "otelcol")
config = optional(map(string), {})
constraints = optional(string, "arch=amd64")
revision = optional(number, null)
storage_directives = optional(map(string), {})
units = optional(number, 1)
})
| `{}` | no | +| [risk](#input\_risk) | Risk level that the applications are (unless overwritten by individual channels) deployed from | `string` | `"edge"` | no | | [s3\_access\_key](#input\_s3\_access\_key) | S3 access-key credential | `string` | n/a | yes | | [s3\_endpoint](#input\_s3\_endpoint) | S3 endpoint | `string` | n/a | yes | | [s3\_integrator](#input\_s3\_integrator) | Application configuration for all S3-integrators in coordinated workers. For more details: https://registry.terraform.io/providers/juju/juju/latest/docs/resources/application |
object({
channel = optional(string, "2/edge")
config = optional(map(string), {})
constraints = optional(string, "arch=amd64")
revision = optional(number, null)
storage_directives = optional(map(string), {})
units = optional(number, 1)
})
| `{}` | no | diff --git a/terraform/cos/applications.tf b/terraform/cos/applications.tf index 8420484e..11ac4165 100644 --- a/terraform/cos/applications.tf +++ b/terraform/cos/applications.tf @@ -1,7 +1,7 @@ module "alertmanager" { source = "git::https://github.com/canonical/alertmanager-k8s-operator//terraform" app_name = var.alertmanager.app_name - channel = var.channel + channel = local.tracks.alertmanager + "/" + var.risk config = var.alertmanager.config constraints = var.alertmanager.constraints model_uuid = var.model_uuid @@ -13,7 +13,7 @@ module "alertmanager" { module "catalogue" { source = "git::https://github.com/canonical/catalogue-k8s-operator//terraform" app_name = var.catalogue.app_name - channel = var.channel + channel = local.tracks.catalogue + "/" + var.risk config = var.catalogue.config constraints = var.catalogue.constraints model_uuid = var.model_uuid @@ -25,7 +25,7 @@ module "catalogue" { module "grafana" { source = "git::https://github.com/canonical/grafana-k8s-operator//terraform" app_name = var.grafana.app_name - channel = var.channel + channel = local.tracks.grafana + "/" + var.risk config = var.grafana.config constraints = var.grafana.constraints model_uuid = var.model_uuid @@ -37,7 +37,7 @@ module "grafana" { module "loki" { source = "git::https://github.com/canonical/loki-operators//terraform" anti_affinity = var.anti_affinity - channel = var.channel + channel = local.tracks.loki + "/" + var.risk model_uuid = var.model_uuid s3_endpoint = var.s3_endpoint s3_secret_key = var.s3_secret_key @@ -68,29 +68,21 @@ module "loki" { } module "mimir" { - source = "git::https://github.com/canonical/mimir-operators//terraform" - anti_affinity = var.anti_affinity - channel = var.channel - model_uuid = var.model_uuid - s3_endpoint = var.s3_endpoint - s3_secret_key = var.s3_secret_key - s3_access_key = var.s3_access_key - s3_bucket = var.mimir_bucket - s3_integrator_channel = var.s3_integrator.channel - s3_integrator_config = var.s3_integrator.config - s3_integrator_constraints = var.s3_integrator.constraints - s3_integrator_revision = var.s3_integrator.revision - s3_integrator_storage_directives = var.s3_integrator.storage_directives - s3_integrator_units = var.s3_integrator.units - coordinator_config = merge( - var.mimir_coordinator.config, - # enable exemplar storage (required for metrics-to-traces). - # This config option is not supported in track `1`, so we'll set it only - # for newer tracks to maintain backward compatibility. - can(regex("^1/", var.channel)) ? {} : { - "max_global_exemplars_per_user" = "100000" - } - ) + source = "git::https://github.com/canonical/mimir-operators//terraform" + anti_affinity = var.anti_affinity + channel = local.tracks.mimir + "/" + var.risk + model_uuid = var.model_uuid + s3_endpoint = var.s3_endpoint + s3_secret_key = var.s3_secret_key + s3_access_key = var.s3_access_key + s3_bucket = var.mimir_bucket + s3_integrator_channel = var.s3_integrator.channel + s3_integrator_config = var.s3_integrator.config + s3_integrator_constraints = var.s3_integrator.constraints + s3_integrator_revision = var.s3_integrator.revision + s3_integrator_storage_directives = var.s3_integrator.storage_directives + s3_integrator_units = var.s3_integrator.units + coordinator_config = { "max_global_exemplars_per_user" = "100000" } coordinator_constraints = var.mimir_coordinator.constraints coordinator_revision = var.mimir_coordinator.revision coordinator_storage_directives = var.mimir_coordinator.storage_directives @@ -111,7 +103,7 @@ module "mimir" { module "opentelemetry_collector" { source = "git::https://github.com/canonical/opentelemetry-collector-k8s-operator//terraform" app_name = var.opentelemetry_collector.app_name - channel = var.channel + channel = local.tracks.otelcol + "/" + var.risk config = var.opentelemetry_collector.config constraints = var.opentelemetry_collector.constraints model_uuid = var.model_uuid @@ -124,7 +116,7 @@ module "ssc" { count = var.internal_tls ? 1 : 0 source = "git::https://github.com/canonical/self-signed-certificates-operator//terraform" app_name = var.ssc.app_name - channel = var.ssc.channel + channel = local.tracks.ssc + "/" + var.risk config = var.ssc.config constraints = var.ssc.constraints model_uuid = var.model_uuid @@ -135,7 +127,7 @@ module "ssc" { module "tempo" { source = "git::https://github.com/canonical/tempo-operators//terraform" anti_affinity = var.anti_affinity - channel = var.channel + channel = local.tracks.tempo + "/" + var.risk model_uuid = var.model_uuid s3_endpoint = var.s3_endpoint s3_access_key = var.s3_access_key @@ -177,7 +169,7 @@ module "tempo" { module "traefik" { source = "git::https://github.com/canonical/traefik-k8s-operator//terraform" app_name = var.traefik.app_name - channel = var.traefik.channel + channel = local.tracks.traefik + "/" + var.risk config = var.cloud == "aws" ? { "loadbalancer_annotations" = "service.beta.kubernetes.io/aws-load-balancer-scheme=internet-facing" } : var.traefik.config constraints = var.traefik.constraints model_uuid = var.model_uuid diff --git a/terraform/cos/variables.tf b/terraform/cos/variables.tf index 2c45184d..62a2d47d 100644 --- a/terraform/cos/variables.tf +++ b/terraform/cos/variables.tf @@ -8,12 +8,23 @@ locals { clouds = ["aws", "self-managed"] # list of k8s clouds where this COS module can be deployed. tls_termination = var.external_certificates_offer_url != null ? true : false + tracks = { + alertmanager = "0.31" + catalogue = "3.0" + grafana = "12.4" + loki = "3.7" + mimir = "3.0" + otelcol = "0.130" + ssc = "latest" + tempo = "2.10" + traefik = "latest" + } } -variable "channel" { - description = "Channel that the applications are (unless overwritten by individual channels) deployed from" +variable "risk" { + description = "Risk level that the applications are (unless overwritten by individual channels) deployed from" type = string - default = "dev/edge" + default = "edge" } variable "model_uuid" {