From bd563a7f827017d1c08f385bacdd01195f05ebd9 Mon Sep 17 00:00:00 2001 From: Arif Ali Date: Mon, 16 Feb 2026 13:15:51 +0000 Subject: [PATCH] Update jammy TF modules to current deployment This introduces multiple fixes as well as modularising mysql-innodb-cluster and vault --- juju/home-maas-jammy/01-cloud.tf | 2 +- juju/home-maas-jammy/04-openstack-common.tf | 46 +++++- juju/home-maas-jammy/additional/09-nrpe.tf | 6 +- juju/home-maas-jammy/cos-lite/00-init.tf | 9 +- juju/home-maas-jammy/lma/22-graylog.tf | 6 +- juju/home-maas-jammy/lma/25-prometheus.tf | 1 + juju/home-maas-jammy/lma/26-cos-proxy.tf | 18 +- .../modules/cinder-lvm/outputs.tf | 3 + .../modules/glance/variables.tf | 2 +- .../modules/mysql-innodb-cluster/init.tf | 8 + .../mysql-innodb-cluster/main.tf} | 19 +-- .../modules/mysql-innodb-cluster/outputs.tf | 3 + .../modules/mysql-innodb-cluster/variables.tf | 128 +++++++++++++++ juju/home-maas-jammy/modules/vault/init.tf | 8 + .../{10-vault.tf => modules/vault/main.tf} | 54 ++---- juju/home-maas-jammy/modules/vault/outputs.tf | 3 + .../modules/vault/variables.tf | 155 ++++++++++++++++++ juju/home-maas-jammy/terraform.tfvars | 1 + 18 files changed, 408 insertions(+), 64 deletions(-) mode change 120000 => 100644 juju/home-maas-jammy/cos-lite/00-init.tf create mode 100644 juju/home-maas-jammy/modules/cinder-lvm/outputs.tf create mode 100644 juju/home-maas-jammy/modules/mysql-innodb-cluster/init.tf rename juju/home-maas-jammy/{04-mysql.tf => modules/mysql-innodb-cluster/main.tf} (50%) create mode 100644 juju/home-maas-jammy/modules/mysql-innodb-cluster/outputs.tf create mode 100644 juju/home-maas-jammy/modules/mysql-innodb-cluster/variables.tf create mode 100644 juju/home-maas-jammy/modules/vault/init.tf rename juju/home-maas-jammy/{10-vault.tf => modules/vault/main.tf} (69%) create mode 100644 juju/home-maas-jammy/modules/vault/outputs.tf create mode 100644 juju/home-maas-jammy/modules/vault/variables.tf diff --git a/juju/home-maas-jammy/01-cloud.tf b/juju/home-maas-jammy/01-cloud.tf index 248f102..6747a71 100644 --- a/juju/home-maas-jammy/01-cloud.tf +++ b/juju/home-maas-jammy/01-cloud.tf @@ -23,5 +23,5 @@ resource "juju_model" "openstack" { resource "juju_ssh_key" "aarsa4096canonical" { model = juju_model.openstack.name - payload = file("/home/arif/.ssh/aarsa4096canonical.pub") + payload = file("/home/arif.ali@canonical.com/.ssh/aarsa4096canonical.pub") } diff --git a/juju/home-maas-jammy/04-openstack-common.tf b/juju/home-maas-jammy/04-openstack-common.tf index 97dd5b9..133c1ca 100644 --- a/juju/home-maas-jammy/04-openstack-common.tf +++ b/juju/home-maas-jammy/04-openstack-common.tf @@ -9,6 +9,15 @@ module "rabbitmq-server" { model-name = var.model-name } +module "mysql-innodb-cluster" { + source = "./modules/mysql-innodb-cluster" + + # Common variables + controller_ids = var.controller_ids + all_machines = juju_machine.all_machines + model-name = var.model-name +} + module "keystone" { source = "./modules/keystone" @@ -54,7 +63,7 @@ module "heat" { controller_ids = var.controller_ids all_machines = juju_machine.all_machines model-name = var.model-name - #public-space = var.public-space + public-space = var.public-space # Dependancies keystone_app = module.keystone.keystone.name @@ -222,3 +231,38 @@ module "nova-compute-kvm-dpdk" { cinder-ceph_app = module.cinder.cinder-ceph.name rabbitmq-server_app = module.rabbitmq-server.rabbitmq-server.name } + +module "vault" { + source = "./modules/vault" + + # Common variables + controller_ids = var.controller_ids + all_machines = juju_machine.all_machines + model-name = var.model-name + + cert_apps = [ + "ceph-radosgw", + "cinder", + "glance", + "heat", + "keystone", + "mysql-innodb-cluster", + "neutron-api", + "neutron-api-plugin-ovn", + "nova-cloud-controller", + "openstack-dashboard", + "ovn-central", + "ovn-chassis-kvm", + "ovn-chassis-dpdk", + "placement", + ] + # Common variables + sdn_ids = var.sdn_ids + vips = var.vips + + # Application Variables + nagios-context = var.nagios-context + + # Dependancies + ceph-osd_app = juju_application.ceph-osd.name +} diff --git a/juju/home-maas-jammy/additional/09-nrpe.tf b/juju/home-maas-jammy/additional/09-nrpe.tf index f4d285c..6c3be9e 100644 --- a/juju/home-maas-jammy/additional/09-nrpe.tf +++ b/juju/home-maas-jammy/additional/09-nrpe.tf @@ -128,13 +128,13 @@ resource "juju_integration" "nrpe-host-integration" { locals { nrpe_apps_info = [ - "nrpe-cont", + "nrpe-container", "nrpe-host", ] } resource "juju_integration" "nrpe-cos" { - for_each = toset(local.host_apps) + for_each = toset(local.nrpe_apps_info) model = juju_model.openstack.name @@ -144,6 +144,6 @@ resource "juju_integration" "nrpe-cos" { } application { - offer_url = juju_offer.cos_proxy.url + offer_url = juju_offer.cos-proxy.url } } diff --git a/juju/home-maas-jammy/cos-lite/00-init.tf b/juju/home-maas-jammy/cos-lite/00-init.tf deleted file mode 120000 index b015707..0000000 --- a/juju/home-maas-jammy/cos-lite/00-init.tf +++ /dev/null @@ -1 +0,0 @@ -../00-init.tf \ No newline at end of file diff --git a/juju/home-maas-jammy/cos-lite/00-init.tf b/juju/home-maas-jammy/cos-lite/00-init.tf new file mode 100644 index 0000000..f896e85 --- /dev/null +++ b/juju/home-maas-jammy/cos-lite/00-init.tf @@ -0,0 +1,8 @@ +terraform { + required_providers { + juju = { + version = "~> 1.2.0" + source = "juju/juju" + } + } +} diff --git a/juju/home-maas-jammy/lma/22-graylog.tf b/juju/home-maas-jammy/lma/22-graylog.tf index e570b00..dfa9d59 100644 --- a/juju/home-maas-jammy/lma/22-graylog.tf +++ b/juju/home-maas-jammy/lma/22-graylog.tf @@ -52,9 +52,9 @@ resource "juju_application" "graylog-mongodb" { space = var.oam-space }] - config = { - nagios_context = var.nagios-context - } + #config = { + # nagios_context = var.nagios-context + #} } resource "juju_integration" "graylog-mongodb" { diff --git a/juju/home-maas-jammy/lma/25-prometheus.tf b/juju/home-maas-jammy/lma/25-prometheus.tf index ca59f09..eabf169 100644 --- a/juju/home-maas-jammy/lma/25-prometheus.tf +++ b/juju/home-maas-jammy/lma/25-prometheus.tf @@ -2,6 +2,7 @@ resource "juju_machine" "prometheus" { model = juju_model.lma.name placement = join(":", ["lxd", juju_machine.lma_machines["201"].machine_id]) constraints = "spaces=oam" + base = var.default-base } resource "juju_application" "prometheus" { diff --git a/juju/home-maas-jammy/lma/26-cos-proxy.tf b/juju/home-maas-jammy/lma/26-cos-proxy.tf index 74aaee5..cb0210b 100644 --- a/juju/home-maas-jammy/lma/26-cos-proxy.tf +++ b/juju/home-maas-jammy/lma/26-cos-proxy.tf @@ -2,6 +2,7 @@ resource "juju_machine" "cos-proxy" { model = juju_model.lma.name placement = join(":", ["lxd", juju_machine.lma_machines["202"].machine_id]) constraints = "spaces=oam" + base = var.default-base } resource "juju_application" "cos-proxy" { @@ -17,16 +18,29 @@ resource "juju_application" "cos-proxy" { units = 1 - placement = juju_machine.prometheus.machine_id + placement = juju_machine.cos-proxy.machine_id endpoint_bindings = [{ space = var.oam-space }] } -resource "juju_offer" "cosy-proxy" { +resource "juju_offer" "cos-proxy" { model = juju_model.lma.name application_name = juju_application.cos-proxy.name endpoint = "monitors" } +resource "juju_integration" "cos-proxy-prometheus" { + model = juju_model.lma.name + + application { + name = juju_application.cos-proxy.name + endpoint = "downstream-prometheus-scrape" + } + + application { + offer_url = "admin/cos3.prometheus-scrape-config" + } + +} diff --git a/juju/home-maas-jammy/modules/cinder-lvm/outputs.tf b/juju/home-maas-jammy/modules/cinder-lvm/outputs.tf new file mode 100644 index 0000000..59944e2 --- /dev/null +++ b/juju/home-maas-jammy/modules/cinder-lvm/outputs.tf @@ -0,0 +1,3 @@ +output "cinder-lvm" { + value = juju_application.cinder-lvm +} diff --git a/juju/home-maas-jammy/modules/glance/variables.tf b/juju/home-maas-jammy/modules/glance/variables.tf index 182b3ac..6716ed0 100644 --- a/juju/home-maas-jammy/modules/glance/variables.tf +++ b/juju/home-maas-jammy/modules/glance/variables.tf @@ -38,7 +38,7 @@ variable default-series { variable glance-channel { type = string - default = "yogastable" + default = "yoga/stable" } variable glance-revision { diff --git a/juju/home-maas-jammy/modules/mysql-innodb-cluster/init.tf b/juju/home-maas-jammy/modules/mysql-innodb-cluster/init.tf new file mode 100644 index 0000000..2efaa5b --- /dev/null +++ b/juju/home-maas-jammy/modules/mysql-innodb-cluster/init.tf @@ -0,0 +1,8 @@ +terraform { + required_providers { + juju = { + version = "~> 0.19.0" + source = "registry.terraform.io/juju/juju" + } + } +} diff --git a/juju/home-maas-jammy/04-mysql.tf b/juju/home-maas-jammy/modules/mysql-innodb-cluster/main.tf similarity index 50% rename from juju/home-maas-jammy/04-mysql.tf rename to juju/home-maas-jammy/modules/mysql-innodb-cluster/main.tf index 0ead7bc..17920e9 100644 --- a/juju/home-maas-jammy/04-mysql.tf +++ b/juju/home-maas-jammy/modules/mysql-innodb-cluster/main.tf @@ -1,23 +1,23 @@ -resource "juju_machine" "mysql" { +resource "juju_machine" "mysql-innodb-cluster" { count = var.num_units model = var.model-name - placement = join(":", ["lxd", juju_machine.all_machines[var.controller_ids[count.index]].machine_id]) + placement = join(":", ["lxd", var.all_machines[var.controller_ids[count.index]].machine_id]) constraints = "spaces=oam" } resource "juju_application" "mysql-innodb-cluster" { - name = "mysql-innodb-cluster" + name = var.app-name model = var.model-name charm { name = "mysql-innodb-cluster" - channel = var.mysql-channel + channel = var.mysql-innodb-cluster-channel base = var.default-base } machines = [ - for res in juju_machine.mysql : + for res in juju_machine.mysql-innodb-cluster : res.machine_id ] @@ -31,12 +31,5 @@ resource "juju_application" "mysql-innodb-cluster" { space = var.internal-space }] - config = { - source = var.openstack-origin - wait-timeout = "3600" - enable-binlogs = "false" - snapd_refresh = "max" - max-connections = var.mysql-connections - tuning-level = var.mysql-tuning-level - } + config = local.mysql-config } diff --git a/juju/home-maas-jammy/modules/mysql-innodb-cluster/outputs.tf b/juju/home-maas-jammy/modules/mysql-innodb-cluster/outputs.tf new file mode 100644 index 0000000..e0398ca --- /dev/null +++ b/juju/home-maas-jammy/modules/mysql-innodb-cluster/outputs.tf @@ -0,0 +1,3 @@ +output "mysql-innodb-cluster" { + value = juju_application.mysql-innodb-cluster +} diff --git a/juju/home-maas-jammy/modules/mysql-innodb-cluster/variables.tf b/juju/home-maas-jammy/modules/mysql-innodb-cluster/variables.tf new file mode 100644 index 0000000..bbc8a4f --- /dev/null +++ b/juju/home-maas-jammy/modules/mysql-innodb-cluster/variables.tf @@ -0,0 +1,128 @@ +variable num_units { + type = number + default = 3 +} + +variable "all_machines" { + description = "Machines" + type = map(object({ + base = string + constraints = string + id = string + machine_id = string + model = string + name = string + series = string + })) +} + +variable controller_ids { + type = list(string) + default = [] +} + +variable model-name { + type = string + default = "openstack" +} + +variable default-base { + type = string + default = "ubuntu@22.04" +} + +variable default-series { + type = string + default = "jammy" +} + +variable mysql-innodb-cluster-channel { + type = string + default = "8.0/stable" +} + +variable mysql-innodb-cluster-revision { + type = string + default = "" +} + +variable oam-space { + type = string + default = "oam" +} + +variable admin-space { + type = string + default = "admin" +} + +variable public-space { + type = string + default = "public" +} + +variable internal-space { + type = string + default = "internal" +} + +variable ceph-public-space { + type = string + default = "ceph-public" +} + +variable ceph-cluster-space { + type = string + default = "ceph-cluster" +} + +variable overlay-space { + type = string + default = "overlay" +} + +variable openstack-origin { + type = string + default = "distro" +} + +variable openstack-region { + type = string + default = "RegionOne" +} + +variable app-name { + type = string + default = "mysql-innodb-cluster" +} + +variable mysql-connections { + type = string + default = "4000" +} + +variable mysql-tuning-level { + type = string + default = "safest" +} + +variable mysql-innodb-cluster-config-overrides { + type = map(string) + default = {} +} + +locals { + base-mysql-config = { + source = var.openstack-origin + wait-timeout = "3600" + enable-binlogs = "false" + snapd_refresh = "max" + max-connections = var.mysql-connections + tuning-level = var.mysql-tuning-level + } + + mysql-config = merge( + local.base-mysql-config, + var.mysql-innodb-cluster-config-overrides + ) +} diff --git a/juju/home-maas-jammy/modules/vault/init.tf b/juju/home-maas-jammy/modules/vault/init.tf new file mode 100644 index 0000000..2efaa5b --- /dev/null +++ b/juju/home-maas-jammy/modules/vault/init.tf @@ -0,0 +1,8 @@ +terraform { + required_providers { + juju = { + version = "~> 0.19.0" + source = "registry.terraform.io/juju/juju" + } + } +} diff --git a/juju/home-maas-jammy/10-vault.tf b/juju/home-maas-jammy/modules/vault/main.tf similarity index 69% rename from juju/home-maas-jammy/10-vault.tf rename to juju/home-maas-jammy/modules/vault/main.tf index b3be913..38fd08c 100644 --- a/juju/home-maas-jammy/10-vault.tf +++ b/juju/home-maas-jammy/modules/vault/main.tf @@ -1,20 +1,20 @@ resource "juju_machine" "vault" { count = var.num_units model = var.model-name - placement = join(":",["lxd",juju_machine.all_machines[var.sdn_ids[count.index]].machine_id]) + placement = join(":",["lxd",var.all_machines[var.sdn_ids[count.index]].machine_id]) constraints = "spaces=oam" } resource "juju_application" "vault" { - name = "vault" + name = var.app-name model = var.model-name charm { name = "vault" - channel = var.vault_channel + channel = var.vault-channel base = var.default-base - revision = 319 + #revision = var.vault-revision } machines = [ @@ -22,32 +22,28 @@ resource "juju_application" "vault" { res.machine_id ] - config = { - vip = var.vips["vault"] - nagios_context = var.nagios-context - auto-generate-root-ca-cert = "true" - } + config = local.vault-config } module "vault-mysql-router" { - source = "./modules/mysql-router" + source = "../mysql-router" sub-name = juju_application.vault.name - model-name = juju_model.openstack.name + model-name = var.model-name } module "vault-hacluster" { - source = "./modules/hacluster" + source = "../hacluster" sub-name = juju_application.vault.name - model-name = juju_model.openstack.name + model-name = var.model-name } resource "juju_machine" "etcd" { count = var.num_units model = var.model-name - placement = join(":",["lxd",juju_machine.all_machines[var.sdn_ids[count.index]].machine_id]) + placement = join(":",["lxd",var.all_machines[var.sdn_ids[count.index]].machine_id]) constraints = "spaces=oam" } @@ -58,7 +54,7 @@ resource "juju_application" "etcd" { charm { name = "etcd" - channel = var.etcd_channel + channel = var.etcd-channel base = var.default-base #revision = var.etcd_revision } @@ -85,7 +81,7 @@ resource "juju_application" "etcd" { resource "juju_machine" "easyrsa" { model = var.model-name - placement = join(":",["lxd",juju_machine.all_machines["402"].machine_id]) + placement = join(":",["lxd",var.all_machines[var.sdn_ids[0]].machine_id]) constraints = "spaces=oam" } @@ -96,7 +92,7 @@ resource "juju_application" "easyrsa" { charm { name = "easyrsa" - channel = var.easyrsa_channel + channel = var.easyrsa-channel base = var.default-base } @@ -145,33 +141,13 @@ resource "juju_integration" "vault-ceph" { } application { - name = juju_application.ceph-osd.name + name = var.ceph-osd_app endpoint = "secrets-storage" } } -locals { - cert_apps = [ - "ceph-radosgw", - "cinder", - "glance", - "heat", - "keystone", - "mysql-innodb-cluster", - "neutron-api", - "neutron-api-plugin-ovn", - "nova-cloud-controller", - "openstack-dashboard", - "ovn-central", - "ovn-chassis-kvm", - "ovn-chassis-dpdk", - "placement", - ] - -} - resource "juju_integration" "vault-cert" { - for_each = toset(local.cert_apps) + for_each = toset(var.cert_apps) model = var.model-name diff --git a/juju/home-maas-jammy/modules/vault/outputs.tf b/juju/home-maas-jammy/modules/vault/outputs.tf new file mode 100644 index 0000000..119db5b --- /dev/null +++ b/juju/home-maas-jammy/modules/vault/outputs.tf @@ -0,0 +1,3 @@ +output "vault" { + value = juju_application.vault +} diff --git a/juju/home-maas-jammy/modules/vault/variables.tf b/juju/home-maas-jammy/modules/vault/variables.tf new file mode 100644 index 0000000..1ccae8e --- /dev/null +++ b/juju/home-maas-jammy/modules/vault/variables.tf @@ -0,0 +1,155 @@ +variable num_units { + type = number + default = 3 +} + +variable "all_machines" { + description = "Machines" + type = map(object({ + base = string + constraints = string + id = string + machine_id = string + model = string + name = string + series = string + })) +} + +variable controller_ids { + type = list(string) + default = [] +} + +variable sdn_ids { + type = list(string) + default = [] +} + +variable model-name { + type = string + default = "openstack" +} + +variable default-base { + type = string + default = "ubuntu@22.04" +} + +variable default-series { + type = string + default = "jammy" +} + +variable vault-channel { + type = string + default = "1.8/stable" +} + +variable vault-revision { + type = string + default = "" +} + +variable etcd-channel { + type = string + default = "1.29/stable" +} + +variable easyrsa-channel { + type = string + default = "latest/stable" +} + +variable oam-space { + type = string + default = "oam" +} + +variable admin-space { + type = string + default = "admin" +} + +variable public-space { + type = string + default = "public" +} + +variable internal-space { + type = string + default = "internal" +} + +variable ceph-public-space { + type = string + default = "ceph-public" +} + +variable ceph-cluster-space { + type = string + default = "ceph-cluster" +} + +variable overlay-space { + type = string + default = "overlay" +} + +variable nagios-context { + type = string + default = "" +} + +variable openstack-origin { + type = string + default = "distro" +} + +variable openstack-region { + type = string + default = "RegionOne" +} + +variable worker-multiplier { + type = string + default = "0.25" +} + +variable app-name { + type = string + default = "vault" +} + +variable vips { + type = map(string) + default = {} +} + +variable cert_apps { + type = list(string) + default = [] +} + +variable ceph-osd_app { + type = string + default = "ceph-osd" +} + +variable vault-config-overrides { + type = map(string) + default = {} +} + +locals { + base-vault-config = { + vip = var.vips["vault"] + nagios_context = var.nagios-context + auto-generate-root-ca-cert = "true" + } + + vault-config = merge( + local.base-vault-config, + var.vault-config-overrides + ) +} diff --git a/juju/home-maas-jammy/terraform.tfvars b/juju/home-maas-jammy/terraform.tfvars index 3fe2502..d3782ae 100644 --- a/juju/home-maas-jammy/terraform.tfvars +++ b/juju/home-maas-jammy/terraform.tfvars @@ -1,3 +1,4 @@ +cloud = "home" model-name = "cpe-jammy" machines = [