From d11251bdfd098899d8f06c97462282ceb4e41ebd Mon Sep 17 00:00:00 2001 From: alhendrickson <159636032+alhendrickson@users.noreply.github.com.> Date: Tue, 23 Sep 2025 10:25:40 +0000 Subject: [PATCH 1/4] feat(iac): Expose k3s kubeconfig as an output variable --- .../openstack-kubernetes-infra/kubeconfig-extraction.tf | 5 +---- .../terraform/modules/openstack-kubernetes-infra/outputs.tf | 5 +++++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/deployment/terraform/modules/openstack-kubernetes-infra/kubeconfig-extraction.tf b/deployment/terraform/modules/openstack-kubernetes-infra/kubeconfig-extraction.tf index 4e381a8..378ccab 100644 --- a/deployment/terraform/modules/openstack-kubernetes-infra/kubeconfig-extraction.tf +++ b/deployment/terraform/modules/openstack-kubernetes-infra/kubeconfig-extraction.tf @@ -22,10 +22,7 @@ data "local_file" "kube_config_raw_file" { depends_on = [ null_resource.copy_kubeconfig ] } -# output "kube_config_raw" { -# value = data.local_file.kube_config_raw_file -# description = "Kubeconfig for this cluster" -# } + # data "external" "extract_kubeconfig_file" { # program = ["bash", "${path.module}/kubeconfig_extraction.sh"] diff --git a/deployment/terraform/modules/openstack-kubernetes-infra/outputs.tf b/deployment/terraform/modules/openstack-kubernetes-infra/outputs.tf index 2ad485e..4317d22 100644 --- a/deployment/terraform/modules/openstack-kubernetes-infra/outputs.tf +++ b/deployment/terraform/modules/openstack-kubernetes-infra/outputs.tf @@ -29,3 +29,8 @@ output "kubeconfig_file" { value = abspath(local.kubeconfig_file) description = "Path to the generated KUBECONFIG file used to connect to kubernetes" } + +output "kube_config_raw" { + value = data.local_file.kube_config_raw_file + description = "Kubeconfig for this cluster" +} \ No newline at end of file From a6e00d073dfa829bed7836ae9a81cbee431e081a Mon Sep 17 00:00:00 2001 From: alhendrickson <159636032+alhendrickson@users.noreply.github.com.> Date: Tue, 23 Sep 2025 10:56:04 +0000 Subject: [PATCH 2/4] fixup! feat(iac): Expose k3s kubeconfig as an output variable --- .../openstack-kubernetes/k3s-cluster/main.tf | 12 +++---- .../kubeconfig-extraction.tf | 17 +++------- .../kubeconfig_extraction.sh | 33 ------------------- .../openstack-kubernetes-infra/outputs.tf | 7 +--- .../shared-locals.tf | 4 +-- .../openstack-kubernetes-infra/variables.tf | 4 +-- 6 files changed, 15 insertions(+), 62 deletions(-) delete mode 100644 deployment/terraform/modules/openstack-kubernetes-infra/kubeconfig_extraction.sh diff --git a/deployment/terraform/examples/openstack-kubernetes/k3s-cluster/main.tf b/deployment/terraform/examples/openstack-kubernetes/k3s-cluster/main.tf index 437d004..ccd8f2e 100644 --- a/deployment/terraform/examples/openstack-kubernetes/k3s-cluster/main.tf +++ b/deployment/terraform/examples/openstack-kubernetes/k3s-cluster/main.tf @@ -2,12 +2,12 @@ module "openstack_cogstack_infra" { source = "../../../modules/openstack-kubernetes-infra" host_instances = [ { name = "cogstack-k3s", is_controller = true }, - { - name = "cogstack-k3s-node-2" - flavour = "2cpu4ram" - volume_size = 20 - is_controller = false - }, + # { + # name = "cogstack-k3s-node-2" + # flavour = "2cpu4ram" + # volume_size = 20 + # is_controller = false + # }, ] allowed_ingress_ips_cidr = var.allowed_ingress_ips_cidr ubuntu_immage_name = var.ubuntu_immage_name diff --git a/deployment/terraform/modules/openstack-kubernetes-infra/kubeconfig-extraction.tf b/deployment/terraform/modules/openstack-kubernetes-infra/kubeconfig-extraction.tf index 378ccab..9de8d3b 100644 --- a/deployment/terraform/modules/openstack-kubernetes-infra/kubeconfig-extraction.tf +++ b/deployment/terraform/modules/openstack-kubernetes-infra/kubeconfig-extraction.tf @@ -21,16 +21,7 @@ data "local_file" "kube_config_raw_file" { filename = local.kubeconfig_file depends_on = [ null_resource.copy_kubeconfig ] } - - - -# data "external" "extract_kubeconfig_file" { -# program = ["bash", "${path.module}/kubeconfig_extraction.sh"] - -# query = { -# PATH_ROOT=path.root -# SERVER_IP=openstack_compute_instance_v2.kubernetes_server.access_ip_v4 -# SSH_KEY=local.ssh_keys.private_key_file -# # KUBECONFIG_FILE=local.kubeconfig_file -# } -# } \ No newline at end of file +output "kube_config_raw" { + value = data.local_file.kube_config_raw_file.content + description = "Kubeconfig for this cluster" +} diff --git a/deployment/terraform/modules/openstack-kubernetes-infra/kubeconfig_extraction.sh b/deployment/terraform/modules/openstack-kubernetes-infra/kubeconfig_extraction.sh deleted file mode 100644 index ab95380..0000000 --- a/deployment/terraform/modules/openstack-kubernetes-infra/kubeconfig_extraction.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -# ============================== -# Variables (from Terraform) -# ============================== -PATH_ROOT=${path.root} -SERVER_IP=${openstack_compute_instance_v2.kubernetes_server.access_ip_v4} -SSH_KEY=${local.ssh_keys.private_key_file} -KUBECONFIG_FILE=${local.kubeconfig_file} - -# ============================== -# Script Logic -# ============================== - -# Create .build directory if it doesn't exist -mkdir -p "${PATH_ROOT}/.build/" - -# Add server's SSH key to a custom known_hosts file -ssh-keyscan -H "${SERVER_IP}" >> "${PATH_ROOT}/.build/.known_hosts_cogstack" - -# Securely copy the K3s kubeconfig file from the server -scp \ - -o UserKnownHostsFile="${PATH_ROOT}/.build/.known_hosts_cogstack" \ - -o StrictHostKeyChecking=yes \ - -i "${SSH_KEY}" \ - "ubuntu@${SERVER_IP}:/etc/rancher/k3s/k3s.yaml" \ - "${KUBECONFIG_FILE}" - -# Replace localhost with the actual server IP in the kubeconfig -sed -i "s/127\.0\.0\.1/${SERVER_IP}/" "${KUBECONFIG_FILE}" - -echo "Kubeconfig successfully fetched and updated at: ${KUBECONFIG_FILE}" \ No newline at end of file diff --git a/deployment/terraform/modules/openstack-kubernetes-infra/outputs.tf b/deployment/terraform/modules/openstack-kubernetes-infra/outputs.tf index 4317d22..6289ed1 100644 --- a/deployment/terraform/modules/openstack-kubernetes-infra/outputs.tf +++ b/deployment/terraform/modules/openstack-kubernetes-infra/outputs.tf @@ -6,7 +6,7 @@ output "created_hosts" { name = k } }, { - (local.controller_host.name) : local.controller_host_instance + (local.controller_host.name) : local.controller_host_instance }) description = "Created Hosts: A map of { hostname: { data } }" @@ -29,8 +29,3 @@ output "kubeconfig_file" { value = abspath(local.kubeconfig_file) description = "Path to the generated KUBECONFIG file used to connect to kubernetes" } - -output "kube_config_raw" { - value = data.local_file.kube_config_raw_file - description = "Kubeconfig for this cluster" -} \ No newline at end of file diff --git a/deployment/terraform/modules/openstack-kubernetes-infra/shared-locals.tf b/deployment/terraform/modules/openstack-kubernetes-infra/shared-locals.tf index f510522..e2d95c2 100644 --- a/deployment/terraform/modules/openstack-kubernetes-infra/shared-locals.tf +++ b/deployment/terraform/modules/openstack-kubernetes-infra/shared-locals.tf @@ -5,7 +5,7 @@ locals { locals { - controller_host = one([for host in var.host_instances : host if host.is_controller]) + controller_host = one([for host in var.host_instances : host if host.is_controller]) created_controller_host = openstack_compute_instance_v2.kubernetes_server controller_host_instance = { name = local.controller_host.name @@ -16,7 +16,7 @@ locals { locals { output_file_directory = var.output_file_directory != null ? var.output_file_directory : "${path.root}/.build" - kubeconfig_file = "${local.output_file_directory}/downloaded-kubeconfig.yaml" + kubeconfig_file = "${local.output_file_directory}/downloaded-kubeconfig.yaml" } resource "random_id" "server" { diff --git a/deployment/terraform/modules/openstack-kubernetes-infra/variables.tf b/deployment/terraform/modules/openstack-kubernetes-infra/variables.tf index 556a44b..302746a 100644 --- a/deployment/terraform/modules/openstack-kubernetes-infra/variables.tf +++ b/deployment/terraform/modules/openstack-kubernetes-infra/variables.tf @@ -57,7 +57,7 @@ variable "ssh_key_pair" { } variable "output_file_directory" { - type = string - default = null + type = string + default = null description = "Optional path to write output files to. If directory doesnt exist it will be created" } \ No newline at end of file From b45ff304cf64274f79b17e80d0c65d4124ce38a5 Mon Sep 17 00:00:00 2001 From: alhendrickson <159636032+alhendrickson@users.noreply.github.com.> Date: Tue, 23 Sep 2025 11:38:49 +0000 Subject: [PATCH 3/4] fixup! fixup! feat(iac): Expose k3s kubeconfig as an output variable --- .../openstack-kubernetes-infra/kubeconfig-extraction.tf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/deployment/terraform/modules/openstack-kubernetes-infra/kubeconfig-extraction.tf b/deployment/terraform/modules/openstack-kubernetes-infra/kubeconfig-extraction.tf index 9de8d3b..0749c32 100644 --- a/deployment/terraform/modules/openstack-kubernetes-infra/kubeconfig-extraction.tf +++ b/deployment/terraform/modules/openstack-kubernetes-infra/kubeconfig-extraction.tf @@ -17,11 +17,11 @@ EOT } } -data "local_file" "kube_config_raw_file" { +data "local_file" "kubeconfig_file" { filename = local.kubeconfig_file depends_on = [ null_resource.copy_kubeconfig ] } -output "kube_config_raw" { - value = data.local_file.kube_config_raw_file.content +output "kubeconfig_raw" { + value = data.local_file.kubeconfig_file.content description = "Kubeconfig for this cluster" } From a923be879e36527178b25ceec1d4c23edc1db725 Mon Sep 17 00:00:00 2001 From: alhendrickson <159636032+alhendrickson@users.noreply.github.com.> Date: Tue, 23 Sep 2025 11:59:47 +0000 Subject: [PATCH 4/4] fixup! fixup! fixup! feat(iac): Expose k3s kubeconfig as an output variable --- .../openstack-kubernetes/k3s-cluster/main.tf | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/deployment/terraform/examples/openstack-kubernetes/k3s-cluster/main.tf b/deployment/terraform/examples/openstack-kubernetes/k3s-cluster/main.tf index ccd8f2e..437d004 100644 --- a/deployment/terraform/examples/openstack-kubernetes/k3s-cluster/main.tf +++ b/deployment/terraform/examples/openstack-kubernetes/k3s-cluster/main.tf @@ -2,12 +2,12 @@ module "openstack_cogstack_infra" { source = "../../../modules/openstack-kubernetes-infra" host_instances = [ { name = "cogstack-k3s", is_controller = true }, - # { - # name = "cogstack-k3s-node-2" - # flavour = "2cpu4ram" - # volume_size = 20 - # is_controller = false - # }, + { + name = "cogstack-k3s-node-2" + flavour = "2cpu4ram" + volume_size = 20 + is_controller = false + }, ] allowed_ingress_ips_cidr = var.allowed_ingress_ips_cidr ubuntu_immage_name = var.ubuntu_immage_name