From c9dac8f05081d5d534e379359d7b4308e6e8c730 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Petazzoni?= Date: Fri, 29 May 2026 20:12:01 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9E=95=EF=B8=8F=20Add=20special=20Talos-on-O?= =?UTF-8?q?penStack=20hack?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prepare-labs/lib/commands.sh | 16 +++++++ prepare-labs/settings/talos.env | 18 ++++++++ prepare-labs/terraform/talos/talos.tf | 65 +++++++++++++++++++++++++++ 3 files changed, 99 insertions(+) create mode 100644 prepare-labs/settings/talos.env create mode 100644 prepare-labs/terraform/talos/talos.tf diff --git a/prepare-labs/lib/commands.sh b/prepare-labs/lib/commands.sh index f2ed982d..f245e038 100644 --- a/prepare-labs/lib/commands.sh +++ b/prepare-labs/lib/commands.sh @@ -1234,6 +1234,22 @@ EOF pssh -I sudo tee /opt/tailhist/index.html status + +} + _cmd terraform "Apply Terraform configuration to provision resources." _cmd_terraform() { TAG=$1 diff --git a/prepare-labs/settings/talos.env b/prepare-labs/settings/talos.env new file mode 100644 index 00000000..e53f74e8 --- /dev/null +++ b/prepare-labs/settings/talos.env @@ -0,0 +1,18 @@ +CLUSTERSIZE=1 + +CLUSTERPREFIX=talos + +USER_LOGIN=talos +USER_PASSWORD=training + +STEPS=" + terraform + wait + standardize + clusterize + tools + createuser + tailhist + talos + kubetools +" diff --git a/prepare-labs/terraform/talos/talos.tf b/prepare-labs/terraform/talos/talos.tf new file mode 100644 index 00000000..fb59edcc --- /dev/null +++ b/prepare-labs/terraform/talos/talos.tf @@ -0,0 +1,65 @@ +resource "openstack_compute_instance_v2" "talos" { + for_each = local.talos_nodes + name = each.value.node_name + image_id = openstack_images_image_v2.talos.image_id + flavor_name = each.value.node_size + security_groups = [openstack_networking_secgroup_v2._.name] + network { + name = openstack_networking_network_v2._.name + } +} + +locals { + talos_nodes_per_cluster = 3 + talos_schematic_id = "376567988ad370138ad8b2698212367b8edcb69b5fd68c80be1f2ec7d603b4ba" + talos_version = "1.13.3" +} + +resource "openstack_images_image_v2" "talos" { + name = "Talos ${local.talos_version} for ${var.tag}" + image_source_url = "https://factory.talos.dev/image/${local.talos_schematic_id}/v${local.talos_version}/openstack-amd64.qcow2" + container_format = "bare" + disk_format = "qcow2" + properties = { + os = "talos" + schematic = local.talos_schematic_id + version = local.talos_version + } +} + +resource "openstack_networking_secgroup_v2" "_" { + name = var.tag +} + +resource "openstack_networking_secgroup_rule_v2" "_" { + direction = "ingress" + ethertype = "IPv4" + security_group_id = openstack_networking_secgroup_v2._.id +} + +locals { + talos_nodes = { + for cn in setproduct( + range(1, 1 + var.how_many_clusters), + range(1, 1 + local.talos_nodes_per_cluster) + ) : + format("c%03dt%03d", cn[0], cn[1]) => { + cluster_key = format("c%03d", cn[0]) + cluster_name = format("%s-%03d", var.tag, cn[0]) + node_name = format("%s-%03d-%03d", var.tag, cn[0], cn[1]) + node_size = lookup(var.node_sizes, var.node_size, var.node_size) + } + } +} + +resource "local_file" "talos" { + content = join("", formatlist("%s\n", [ + for cid in range(1, 1 + var.how_many_clusters) : + join("\t", + [for nid in range(1, 1 + local.talos_nodes_per_cluster) : + openstack_compute_instance_v2.talos[format("c%03dt%03d", cid, nid)].access_ip_v4 + ])])) + filename = "talos.tsv" + file_permission = "0600" +} +