From 1b2f59ea5605d91790be59cfe7b465be78b2536d Mon Sep 17 00:00:00 2001 From: Arif Ali Date: Thu, 12 Mar 2026 12:28:34 +0000 Subject: [PATCH] Update to latest configs * Add designate module * Update cinder/cinder-ceph modules * move the memcache/nova relation to nova block --- juju/home-maas-jammy/04-openstack-common.tf | 29 ++- juju/home-maas-jammy/05-nova.tf | 15 ++ .../modules/cinder-ceph/main.tf | 5 +- .../modules/cinder-ceph/variables.tf | 9 +- juju/home-maas-jammy/modules/cinder/main.tf | 1 + .../modules/cinder/variables.tf | 9 +- .../home-maas-jammy/modules/designate/init.tf | 8 + .../home-maas-jammy/modules/designate/main.tf | 224 ++++++++++++++++++ .../modules/designate/outputs.tf | 7 + .../modules/designate/variables.tf | 143 +++++++++++ .../home-maas-jammy/modules/memcached/main.tf | 15 -- juju/home-maas-jammy/terraform.tfvars | 2 + 12 files changed, 443 insertions(+), 24 deletions(-) create mode 100644 juju/home-maas-jammy/modules/designate/init.tf create mode 100644 juju/home-maas-jammy/modules/designate/main.tf create mode 100644 juju/home-maas-jammy/modules/designate/outputs.tf create mode 100644 juju/home-maas-jammy/modules/designate/variables.tf diff --git a/juju/home-maas-jammy/04-openstack-common.tf b/juju/home-maas-jammy/04-openstack-common.tf index 6891fef..0d709d9 100644 --- a/juju/home-maas-jammy/04-openstack-common.tf +++ b/juju/home-maas-jammy/04-openstack-common.tf @@ -275,10 +275,12 @@ module "vault" { "ovn-chassis-kvm", "ovn-chassis-dpdk", "placement", + "designate", ] # Common variables - sdn_ids = var.sdn_ids - vips = var.vips + sdn_ids = var.sdn_ids + vips = var.vips + internal-space = var.internal-space # Application Variables nagios-context = var.nagios-context @@ -294,8 +296,31 @@ module "memcached" { controller_ids = var.controller_ids all_machines = juju_machine.all_machines model-name = var.model-name + internal-space = var.internal-space # Dependancies novacc_app = juju_application.nova-cloud-controller.name } +module "designate" { + source = "./modules/designate" + + designate-config-overrides = { + nameservers = "ns1.arif-ali.co.uk,ns1.arif-ali.co.uk" + } + + # Common variables + controller_ids = var.controller_ids + all_machines = juju_machine.all_machines + model-name = var.model-name + vips = var.vips + internal-space = var.internal-space + public-space = var.public-space + admin-space = var.admin-space + + # Dependancies + keystone_app = module.keystone.keystone.name + neutron_app = juju_application.neutron-api.name + rabbitmq-server_app = module.rabbitmq-server.rabbitmq-server.name + memcache_app = module.memcached.memcached.name +} diff --git a/juju/home-maas-jammy/05-nova.tf b/juju/home-maas-jammy/05-nova.tf index 10e33c1..82cc0a5 100644 --- a/juju/home-maas-jammy/05-nova.tf +++ b/juju/home-maas-jammy/05-nova.tf @@ -143,3 +143,18 @@ resource "juju_integration" "nova-cloud-controller-glance" { endpoint = "image-service" } } + +resource "juju_integration" "nova-cloud-controller-memcached" { + + model = var.model-name + + application { + name = juju_application.nova-cloud-controller.name + endpoint = "memcache" + } + + application { + name = module.memcached.memcached.name + endpoint = "cache" + } +} diff --git a/juju/home-maas-jammy/modules/cinder-ceph/main.tf b/juju/home-maas-jammy/modules/cinder-ceph/main.tf index 73f4bf2..1e1ad01 100644 --- a/juju/home-maas-jammy/modules/cinder-ceph/main.tf +++ b/juju/home-maas-jammy/modules/cinder-ceph/main.tf @@ -8,10 +8,7 @@ resource "juju_application" "cinder-ceph" { channel = var.cinder-ceph-channel } - config = { - restrict-ceph-pools = "false" - rbd-pool-name = var.ceph-pool==""? null : var.ceph-pool - } + config = local.cinder-ceph-config } resource "juju_integration" "cinder-ceph-mon" { diff --git a/juju/home-maas-jammy/modules/cinder-ceph/variables.tf b/juju/home-maas-jammy/modules/cinder-ceph/variables.tf index 76c7844..b3dbd97 100644 --- a/juju/home-maas-jammy/modules/cinder-ceph/variables.tf +++ b/juju/home-maas-jammy/modules/cinder-ceph/variables.tf @@ -100,10 +100,17 @@ variable cinder-ceph-config-overrides { locals { base-cinder-ceph-config = { + restrict-ceph-pools = "false" + rbd-pool-name = var.ceph-pool==""? null : var.ceph-pool + } + + clean-cinder-ceph-config = { + for k, v in local.base-cinder-ceph-config : k => v + if v != null } cinder-ceph-config = merge( - local.base-cinder-ceph-config, + local.clean-cinder-ceph-config, var.cinder-ceph-config-overrides ) } diff --git a/juju/home-maas-jammy/modules/cinder/main.tf b/juju/home-maas-jammy/modules/cinder/main.tf index 4dd06c6..f5587f9 100644 --- a/juju/home-maas-jammy/modules/cinder/main.tf +++ b/juju/home-maas-jammy/modules/cinder/main.tf @@ -48,6 +48,7 @@ module "cinder-mysql-router" { } module "cinder-hacluster" { + count = contains(keys(var.vips), var.app-name) ? 1 : 0 source = "../hacluster" sub-name = var.app-name diff --git a/juju/home-maas-jammy/modules/cinder/variables.tf b/juju/home-maas-jammy/modules/cinder/variables.tf index 8fc3fa1..eed3a27 100644 --- a/juju/home-maas-jammy/modules/cinder/variables.tf +++ b/juju/home-maas-jammy/modules/cinder/variables.tf @@ -139,14 +139,19 @@ locals { worker-multiplier = var.worker-multiplier openstack-origin = var.openstack-origin region = var.openstack-region - vip = var.vips["cinder"] + vip = try(var.vips[var.app-name], null) use-internal-endpoints = "true" block-device = "None" glance-api-version = "2" } + cleaned-cinder-config = { + for k, v in local.base-cinder-config : k => v + if v != null + } + cinder-config = merge( - local.base-cinder-config, + local.cleaned-cinder-config, var.cinder-config-overrides ) } diff --git a/juju/home-maas-jammy/modules/designate/init.tf b/juju/home-maas-jammy/modules/designate/init.tf new file mode 100644 index 0000000..2efaa5b --- /dev/null +++ b/juju/home-maas-jammy/modules/designate/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/modules/designate/main.tf b/juju/home-maas-jammy/modules/designate/main.tf new file mode 100644 index 0000000..d4bbf5c --- /dev/null +++ b/juju/home-maas-jammy/modules/designate/main.tf @@ -0,0 +1,224 @@ +resource "juju_machine" "designate" { + count = var.num_units + model = var.model-name + placement = join(":", ["lxd", var.all_machines[var.controller_ids[count.index+var.num_units]].machine_id]) + constraints = "spaces=oam" +} + +resource "juju_application" "designate" { + name = var.app-name + + model = var.model-name + + charm { + name = "designate" + channel = var.designate-channel + base = var.default-base + } + + machines = [ + for res in juju_machine.designate : + res.machine_id + ] + + endpoint_bindings = [{ + space = var.oam-space + },{ + endpoint = "public" + space = var.public-space + },{ + endpoint = "admin" + space = var.admin-space + },{ + endpoint = "internal" + space = var.internal-space + },{ + endpoint = "shared-db" + space = var.internal-space + }] + + config = local.designate-config +} + +module "designate-mysql-router" { + source = "../mysql-router" + + sub-name = var.app-name + model-name = var.model-name +} + +module "designate-hacluster" { + source = "../hacluster" + + sub-name = var.app-name + model-name = var.model-name +} + +resource "juju_machine" "designate-bind" { + count = var.num_units + model = var.model-name + placement = join(":", ["lxd", var.all_machines[var.controller_ids[count.index+var.num_units]].machine_id]) + constraints = "spaces=oam" +} + +resource "juju_application" "designate-bind" { + name = "${var.app-name}-bind" + + model = var.model-name + + charm { + name = "designate-bind" + channel = var.designate-channel + base = var.default-base + } + + machines = [ + for res in juju_machine.designate-bind : + res.machine_id + ] + + config = { + disable-dnssec-validation = true + forwarders = "" + recursion = true + service_ips = var.vips["designate-bind"] + use-internal-endpoints = true + } +} + +module "designate-bind-hacluster" { + source = "../hacluster" + + sub-name = "${var.app-name}-bind" + model-name = var.model-name +} + +resource "juju_integration" "designate-rmq" { + + model = var.model-name + + application { + name = juju_application.designate.name + endpoint = "amqp" + } + + application { + name = var.rabbitmq-server_app + endpoint = "amqp" + } + + lifecycle { + replace_triggered_by = [ + juju_application.designate.name, + juju_application.designate.model, + juju_application.designate.constraints, + juju_application.designate.placement, + juju_application.designate.charm.name, + ] + } +} + +resource "juju_integration" "designate-neutron" { + + model = var.model-name + + application { + name = juju_application.designate.name + endpoint = "dnsaas" + } + + application { + name = var.neutron_app + endpoint = "external-dns" + } + + lifecycle { + replace_triggered_by = [ + juju_application.designate.name, + juju_application.designate.model, + juju_application.designate.constraints, + juju_application.designate.placement, + juju_application.designate.charm.name, + ] + } +} + +resource "juju_integration" "designate-keystone" { + + model = var.model-name + + application { + name = juju_application.designate.name + endpoint = "identity-service" + } + + application { + name = var.keystone_app + endpoint = "identity-service" + } + + lifecycle { + replace_triggered_by = [ + juju_application.designate.name, + juju_application.designate.model, + juju_application.designate.constraints, + juju_application.designate.placement, + juju_application.designate.charm.name, + ] + } +} + +resource "juju_integration" "designate-memcache" { + + model = var.model-name + + application { + name = juju_application.designate.name + endpoint = "coordinator-memcached" + } + + application { + name = var.memcache_app + endpoint = "cache" + } + + lifecycle { + replace_triggered_by = [ + juju_application.designate.name, + juju_application.designate.model, + juju_application.designate.constraints, + juju_application.designate.placement, + juju_application.designate.charm.name, + ] + } +} + +resource "juju_integration" "designate-designate-bind" { + + model = var.model-name + + application { + name = juju_application.designate.name + endpoint = "dns-backend" + } + + application { + name = juju_application.designate-bind.name + endpoint = "dns-backend" + } + + lifecycle { + replace_triggered_by = [ + juju_application.designate.name, + juju_application.designate.model, + juju_application.designate.constraints, + juju_application.designate.placement, + juju_application.designate.charm.name, + juju_application.designate-bind.name, + juju_application.designate-bind.model, + juju_application.designate-bind.constraints, + juju_application.designate-bind.placement, + juju_application.designate-bind.charm.name, + ] + } +} diff --git a/juju/home-maas-jammy/modules/designate/outputs.tf b/juju/home-maas-jammy/modules/designate/outputs.tf new file mode 100644 index 0000000..a6e7358 --- /dev/null +++ b/juju/home-maas-jammy/modules/designate/outputs.tf @@ -0,0 +1,7 @@ +output "designate" { + value = juju_application.designate +} + +#output "designate-bind" { +# value = juju_application.designate-bind +#} diff --git a/juju/home-maas-jammy/modules/designate/variables.tf b/juju/home-maas-jammy/modules/designate/variables.tf new file mode 100644 index 0000000..a928360 --- /dev/null +++ b/juju/home-maas-jammy/modules/designate/variables.tf @@ -0,0 +1,143 @@ +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 designate-channel { + type = string + default = "yoga/stable" +} + +variable designate-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 worker-multiplier { + type = string + default = "0.25" +} + +variable app-name { + type = string + default = "designate" +} + +variable vips { + type = map(string) + default = {} +} + +variable neutron_app { + type = string + default = "neutron-api" +} +variable keystone_app { + type = string + default = "keystone" +} +variable rabbitmq-server_app { + type = string + default = "rabbitmq-server" +} +variable memcache_app { + type = string + default = "memcached" +} + +variable designate-config-overrides { + type = map(string) + default = {} +} + +locals { + base-designate-config = { + openstack-origin = var.openstack-origin + region = var.openstack-region + use-internal-endpoints = "true" + vip = var.vips["designate"] + } + + designate-config = merge( + local.base-designate-config, + var.designate-config-overrides + ) +} diff --git a/juju/home-maas-jammy/modules/memcached/main.tf b/juju/home-maas-jammy/modules/memcached/main.tf index f37d69f..bf34a26 100644 --- a/juju/home-maas-jammy/modules/memcached/main.tf +++ b/juju/home-maas-jammy/modules/memcached/main.tf @@ -31,18 +31,3 @@ resource "juju_application" "memcached" { config = local.memcached-config } - -resource "juju_integration" "nova-cc-memcached" { - - model = var.model-name - - application { - name = var.novacc_app - endpoint = "memcache" - } - - application { - name = juju_application.memcached.name - endpoint = "cache" - } -} diff --git a/juju/home-maas-jammy/terraform.tfvars b/juju/home-maas-jammy/terraform.tfvars index d3782ae..e23b490 100644 --- a/juju/home-maas-jammy/terraform.tfvars +++ b/juju/home-maas-jammy/terraform.tfvars @@ -99,6 +99,8 @@ vips = { vault = "10.0.1.222" placement = "10.0.1.223" radosgw = "10.0.1.224" + designate = "10.0.1.225" + designate-bind = "10.0.1.225" } fqdn-pub = {