From e3e4e464b580436f4513f947039702846fbed030 Mon Sep 17 00:00:00 2001 From: Arif Ali Date: Tue, 10 Dec 2024 09:02:41 +0000 Subject: [PATCH] multiple updates * Add microk8s model * Add cinder-backup * Multiple improvements to other plans --- juju/home-maas-jammy/00-init.tf | 6 +- juju/home-maas-jammy/00-variables.tf | 18 ++ juju/home-maas-jammy/03-machines.tf | 2 +- juju/home-maas-jammy/05-cinder-backup.tf | 168 +++++++++++++++++++ juju/home-maas-jammy/10-vault.tf | 2 + juju/home-maas-jammy/microk8s/30-model.tf | 18 ++ juju/home-maas-jammy/microk8s/31-machines.tf | 10 ++ juju/home-maas-jammy/microk8s/32-microk8s.tf | 23 +++ juju/home-maas-jammy/microk8s/33-ceph.tf | 122 ++++++++++++++ juju/home-maas-jammy/microk8s/34-ntp.tf | 29 ++++ juju/home-maas-jammy/terraform.tfvars | 6 + juju/init.tf | 5 +- 12 files changed, 402 insertions(+), 7 deletions(-) create mode 100644 juju/home-maas-jammy/05-cinder-backup.tf create mode 100644 juju/home-maas-jammy/microk8s/30-model.tf create mode 100644 juju/home-maas-jammy/microk8s/31-machines.tf create mode 100644 juju/home-maas-jammy/microk8s/32-microk8s.tf create mode 100644 juju/home-maas-jammy/microk8s/33-ceph.tf create mode 100644 juju/home-maas-jammy/microk8s/34-ntp.tf diff --git a/juju/home-maas-jammy/00-init.tf b/juju/home-maas-jammy/00-init.tf index e54deec..33c9c39 100644 --- a/juju/home-maas-jammy/00-init.tf +++ b/juju/home-maas-jammy/00-init.tf @@ -1,9 +1,9 @@ terraform { required_providers { juju = { - version = "~> 0.12.0" - #source = "juju/juju" - source = "terraform.local/juju/juju" + version = "~> 0.15.0" + source = "juju/juju" + } } } diff --git a/juju/home-maas-jammy/00-variables.tf b/juju/home-maas-jammy/00-variables.tf index 78a67c6..4ca0cec 100644 --- a/juju/home-maas-jammy/00-variables.tf +++ b/juju/home-maas-jammy/00-variables.tf @@ -26,6 +26,11 @@ variable sdn_ids { default = ["400", "401", "402"] } +variable k8s_ids { + type = list(string) + default = ["300", "301", "302"] +} + variable apt_mirror { type = string default = "192.168.1.12" @@ -75,6 +80,14 @@ variable "lma-machines" { })) } +variable "microk8s-machines" { + type = list(object({ + machine_id = number + constraints = string + base = optional(string) + })) +} + variable model-name { type = string default = "openstack" @@ -85,6 +98,11 @@ variable lma-model-name { default = "lma" } +variable microk8s-model-name { + type = string + default = "microk8s" +} + variable openstack-origin { type = string default = "distro" diff --git a/juju/home-maas-jammy/03-machines.tf b/juju/home-maas-jammy/03-machines.tf index 19df533..18a21df 100644 --- a/juju/home-maas-jammy/03-machines.tf +++ b/juju/home-maas-jammy/03-machines.tf @@ -3,7 +3,7 @@ resource "juju_machine" "all_machines" { for index, machine in var.machines: machine.machine_id => machine } - model = var.model-name + model = juju_model.openstack.name name = each.value.machine_id constraints = each.value.constraints } diff --git a/juju/home-maas-jammy/05-cinder-backup.tf b/juju/home-maas-jammy/05-cinder-backup.tf new file mode 100644 index 0000000..4b98689 --- /dev/null +++ b/juju/home-maas-jammy/05-cinder-backup.tf @@ -0,0 +1,168 @@ +resource "juju_machine" "cinder-backup" { + count = var.num_units + model = var.model-name + placement = join(":", ["lxd", juju_machine.all_machines[var.controller_ids[count.index+var.num_units]].machine_id]) + constraints = "spaces=oam" +} + +resource "juju_application" "cinder-backup" { + name = "cinder-backup" + + model = var.model-name + + charm { + name = "cinder" + channel = var.openstack-channel + base = var.default-base + } + + units = var.num_units + + placement = "${join(",", sort([ + for res in juju_machine.cinder-backup : + 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 = { + worker-multiplier = var.worker-multiplier + openstack-origin = var.openstack-origin + region = var.openstack-region + use-internal-endpoints = "true" + block-device = "None" + glance-api-version = "2" + enabled-services = "backup" + } +} + +resource "juju_application" "cinder-backup-mysql-router" { + name = "cinder-backup-mysql-router" + + model = var.model-name + + charm { + name = "mysql-router" + channel = var.mysql-router-channel + } + + units = 0 + + endpoint_bindings = [{ + space = var.oam-space + },{ + space = var.internal-space + endpoint = "shared-db" + },{ + space = var.internal-space + endpoint = "db-router" + }] + + config = { + source = var.openstack-origin + } +} + +resource "juju_integration" "cinder-backup-mysql" { + + model = var.model-name + + application { + name = juju_application.cinder-backup.name + endpoint = "shared-db" + } + + application { + name = juju_application.cinder-backup-mysql-router.name + endpoint = "shared-db" + } +} + +resource "juju_integration" "cinder-backup-db" { + + model = var.model-name + + application { + name = juju_application.cinder-backup-mysql-router.name + endpoint = "db-router" + } + + application { + name = juju_application.mysql-innodb-cluster.name + endpoint = "db-router" + } +} + +resource "juju_integration" "cinder-backup-rmq" { + + model = var.model-name + + application { + name = juju_application.cinder-backup.name + endpoint = "amqp" + } + + application { + name = juju_application.rabbitmq-server.name + endpoint = "amqp" + } +} + +resource "juju_integration" "cinder-backup-keystone" { + + model = var.model-name + + application { + name = juju_application.cinder-backup.name + endpoint = "identity-service" + } + + application { + name = juju_application.keystone.name + endpoint = "identity-service" + } +} + +resource "juju_integration" "cinder-backup-ceph" { + + model = var.model-name + + application { + name = juju_application.cinder-backup.name + endpoint = "ceph" + } + + application { + name = juju_application.ceph-mon.name + endpoint = "client" + } +} + +resource "juju_integration" "cinder-ceph-cinder-backup" { + + model = var.model-name + + application { + name = juju_application.cinder-ceph.name + endpoint = "storage-backend" + } + + application { + name = juju_application.cinder-backup.name + endpoint = "storage-backend" + } +} diff --git a/juju/home-maas-jammy/10-vault.tf b/juju/home-maas-jammy/10-vault.tf index 445a473..864ad6c 100644 --- a/juju/home-maas-jammy/10-vault.tf +++ b/juju/home-maas-jammy/10-vault.tf @@ -14,6 +14,7 @@ resource "juju_application" "vault" { name = "vault" channel = var.vault_channel base = var.default-base + revision = 319 } units = var.num_units @@ -26,6 +27,7 @@ resource "juju_application" "vault" { config = { vip = var.vips["vault"] nagios_context = var.nagios-context + auto-generate-root-ca-cert = "true" } } diff --git a/juju/home-maas-jammy/microk8s/30-model.tf b/juju/home-maas-jammy/microk8s/30-model.tf new file mode 100644 index 0000000..3bc1f93 --- /dev/null +++ b/juju/home-maas-jammy/microk8s/30-model.tf @@ -0,0 +1,18 @@ +resource "juju_model" "microk8s" { + name = var.microk8s-model-name + + cloud { + name = var.cloud + } + + config = { + apt-mirror = "http://${var.apt_mirror}/archive.ubuntu.com/ubuntu" + lxd-snap-channel = var.lxd-snap-channel + + container-image-metadata-url = "http://${var.apt_mirror}/lxd/" + container-image-stream = "released" + + agent-metadata-url = "http://${var.apt_mirror}/juju/tools/" + agent-stream = "released" + } +} diff --git a/juju/home-maas-jammy/microk8s/31-machines.tf b/juju/home-maas-jammy/microk8s/31-machines.tf new file mode 100644 index 0000000..a6be61b --- /dev/null +++ b/juju/home-maas-jammy/microk8s/31-machines.tf @@ -0,0 +1,10 @@ +resource "juju_machine" "microk8s" { + for_each = { + for index, machine in var.microk8s-machines: + machine.machine_id => machine + } + model = juju_model.microk8s.name + name = each.value.machine_id + constraints = each.value.constraints + base = each.value.base +} diff --git a/juju/home-maas-jammy/microk8s/32-microk8s.tf b/juju/home-maas-jammy/microk8s/32-microk8s.tf new file mode 100644 index 0000000..2770d7c --- /dev/null +++ b/juju/home-maas-jammy/microk8s/32-microk8s.tf @@ -0,0 +1,23 @@ +resource "juju_application" "microk8s" { + name = "microk8s" + + model = juju_model.microk8s.name + + charm { + name = "microk8s" + channel = "1.28/stable" + base = "ubuntu@22.04" + } + + units = 3 + + placement = "${join(",", sort([ + for res in juju_machine.microk8s : + res.machine_id + ]))}" + + + endpoint_bindings = [{ + space = var.oam-space + }] +} diff --git a/juju/home-maas-jammy/microk8s/33-ceph.tf b/juju/home-maas-jammy/microk8s/33-ceph.tf new file mode 100644 index 0000000..9a2310a --- /dev/null +++ b/juju/home-maas-jammy/microk8s/33-ceph.tf @@ -0,0 +1,122 @@ +resource "juju_application" "ceph-osd" { + name = "ceph-osd" + + model = juju_model.microk8s.name + + charm { + name = "ceph-osd" + channel = var.ceph-channel + base = var.default-base + } + + units = length(juju_machine.microk8s) + + placement = "${join(",", sort([ + for res in juju_machine.microk8s : + res.machine_id + ]))}" + + config = { + osd-devices = var.osd-devices + } +} + +resource "juju_machine" "ceph-mon" { + count = length(juju_machine.microk8s) + model = juju_model.microk8s.name + placement = join(":", ["lxd", juju_machine.microk8s[var.k8s_ids[count.index]].machine_id]) + constraints = "spaces=oam" + base = var.default-base +} + +resource "juju_application" "ceph-mon" { + name = "ceph-mon" + + model = juju_model.microk8s.name + + charm { + name = "ceph-mon" + channel = var.ceph-channel + base = var.default-base + } + + units = length(juju_machine.microk8s) + + placement = "${join(",", sort([ + for res in juju_machine.ceph-mon : + res.machine_id + ]))}" + + endpoint_bindings = [{ + space = var.oam-space + }] + + config = { + expected-osd-count = 6 + monitor-count = 3 + } +} + +resource "juju_application" "ceph-csi" { + name = "ceph-csi" + + model = juju_model.microk8s.name + + charm { + name = "ceph-csi" + channel = "1.28/stable" + base = var.default-base + } + + units = 0 + + config = { + provisioner-replicas = 1 + namespace = "kube-system" + } +} + +resource "juju_integration" "osd-mon" { + + model = juju_model.microk8s.name + + application { + name = juju_application.ceph-osd.name + endpoint = "mon" + } + + application { + name = juju_application.ceph-mon.name + endpoint = "osd" + } +} + +resource "juju_integration" "csi-mon" { + + model = juju_model.microk8s.name + + application { + name = juju_application.ceph-csi.name + endpoint = "ceph-client" + } + + application { + name = juju_application.ceph-mon.name + endpoint = "client" + } +} + +resource "juju_integration" "csi-k8s" { + + model = juju_model.microk8s.name + + application { + name = juju_application.ceph-csi.name + endpoint = "kubernetes-info" + } + + application { + name = juju_application.microk8s.name + endpoint = "kubernetes-info" + } +} diff --git a/juju/home-maas-jammy/microk8s/34-ntp.tf b/juju/home-maas-jammy/microk8s/34-ntp.tf new file mode 100644 index 0000000..003d878 --- /dev/null +++ b/juju/home-maas-jammy/microk8s/34-ntp.tf @@ -0,0 +1,29 @@ +resource "juju_application" "ntp" { + name = "ntp" + + model = juju_model.microk8s.name + + charm { + name = "ntp" + channel = "latest/stable" + base = "ubuntu@22.04" + } + + units = 0 +} + +resource "juju_integration" "ntp-k8s" { + + model = juju_model.microk8s.name + + application { + name = juju_application.ntp.name + endpoint = "juju-info" + } + + application { + name = juju_application.microk8s.name + endpoint = "juju-info" + } +} + diff --git a/juju/home-maas-jammy/terraform.tfvars b/juju/home-maas-jammy/terraform.tfvars index 58c8f4b..b6832e6 100644 --- a/juju/home-maas-jammy/terraform.tfvars +++ b/juju/home-maas-jammy/terraform.tfvars @@ -26,6 +26,12 @@ lma-machines = [ {machine_id=202,constraints="tags=compute,asrock02",base="ubuntu@20.04"}, ] +microk8s-machines = [ + {machine_id=300,constraints="tags=compute,asrock03",base="ubuntu@22.04"}, + {machine_id=301,constraints="tags=compute,asrock02",base="ubuntu@22.04"}, + {machine_id=302,constraints="tags=compute,asrock01",base="ubuntu@22.04"}, +] + osd-devices = "/dev/sdb /dev/sdc" nagios-context = "arif-nc01" diff --git a/juju/init.tf b/juju/init.tf index e54deec..5aff294 100644 --- a/juju/init.tf +++ b/juju/init.tf @@ -1,9 +1,8 @@ terraform { required_providers { juju = { - version = "~> 0.12.0" - #source = "juju/juju" - source = "terraform.local/juju/juju" + version = "~> 0.15.0" + source = "juju/juju" } } }