From 9edad42dd7bfaef9378c92896551dcf55902b9b9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ing=2E=20Kl=C3=A1ra=20Moravcov=C3=A1?=
 <klara.moravcova@cesnet.cz>
Date: Thu, 13 Mar 2025 13:42:39 +0100
Subject: [PATCH] Modify to be complient to the root module.

---
 terraform/control-cloudinit.txt               |  6 ++
 terraform/docs/additional_worker_volumes.md   | 82 +++++++++++++++++++
 terraform/main.tf                             |  9 +-
 ...des-cloudinit.txt => worker-cloudinit.txt} |  0
 4 files changed, 94 insertions(+), 3 deletions(-)
 create mode 100644 terraform/control-cloudinit.txt
 create mode 100644 terraform/docs/additional_worker_volumes.md
 rename terraform/{nodes-cloudinit.txt => worker-cloudinit.txt} (100%)

diff --git a/terraform/control-cloudinit.txt b/terraform/control-cloudinit.txt
new file mode 100644
index 0000000..566878b
--- /dev/null
+++ b/terraform/control-cloudinit.txt
@@ -0,0 +1,6 @@
+users:
+  - default
+  - name: ubuntu
+    shell: /bin/bash
+  package_update: true
+package_upgrade: true
diff --git a/terraform/docs/additional_worker_volumes.md b/terraform/docs/additional_worker_volumes.md
new file mode 100644
index 0000000..48ece9f
--- /dev/null
+++ b/terraform/docs/additional_worker_volumes.md
@@ -0,0 +1,82 @@
+# Additional worker groups
+
+Every worker node comes with a root disk, with the maximum size defined by its flavor. If you need a larger volume or an additional volume for any reason, you can define an additional volume and attach it to the worker.
+
+```
+  worker_nodes = [
+    {
+      name        = "wg-blue"
+      flavor      = "c2.4core-16ram"
+      volume_size = 30
+      count       = 2
+      additional_volumes = [
+      { size = 20 } # Create 20 GB disk per wroker and attach to the worker. 
+    ]
+    }
+  ]
+}
+```
+After attaching the volume, you need to format and mount it. You can add a script to worker-cloudinit.txt to search for an unmounted device, format it, and mount it. For example, the following script mounts the unmounted device to `/var/lib/containerd`:
+
+```
+write_files:
+  - path: /usr/local/bin/mount-unmounted-disks.sh
+    permissions: '0755'
+    content: |
+      #!/bin/bash
+      set -e
+
+      # Log output for debugging
+      LOG_FILE="/var/log/cloud-init-unmounted-disks.log"
+      exec > >(tee -a "${LOG_FILE}") 2>&1
+
+      echo "Starting disk discovery and mounting process..."
+
+      # Find unmounted disks
+      UNMOUNTED_DISKS=$(lsblk -ndp -o NAME | while read -r DISK; do
+          if lsblk -np "$DISK" | grep -q 'part' && mount | grep -q "$(lsblk -np -o NAME "$DISK" | grep part)"; then
+              continue
+          else
+              echo "$DISK"
+          fi
+      done)
+
+      # Process each unmounted disk
+      for DISK in $UNMOUNTED_DISKS; do
+          echo "Processing disk: $DISK"
+
+          # Create a single partition (if not already partitioned)
+          if ! lsblk -np "$DISK" | grep -q 'part'; then
+              echo "Creating partition on $DISK"
+              parted --script "$DISK" mklabel gpt
+              parted --script "$DISK" mkpart primary ext4 0% 100%
+              PARTITION="${DISK}1"
+              echo "Created partition: $PARTITION"
+          else
+              PARTITION=$(lsblk -np -o NAME "$DISK" | grep 'part' | head -n 1)
+              echo "Found existing partition: $PARTITION"
+          fi
+
+          # Format the partition if not already formatted
+          if ! blkid "$PARTITION" >/dev/null 2>&1; then
+              echo "Formatting partition: $PARTITION"
+              mkfs.ext4 "$PARTITION"
+          fi
+
+          # Mount the partition
+          MOUNT_POINT="/var/lib/containerd/"
+          mkdir -p "$MOUNT_POINT"
+          echo "Mounting $PARTITION at $MOUNT_POINT"
+          mount "$PARTITION" "$MOUNT_POINT"
+
+          # Add to /etc/fstab for persistence
+          UUID=$(blkid -s UUID -o value "$PARTITION")
+          echo "UUID=$UUID $MOUNT_POINT ext4 defaults,nofail 0 2" >> /etc/fstab
+      done
+
+      echo "Disk mounting process completed."
+      echo "Check ${LOG_FILE} for details."
+      
+runcmd:
+  - /usr/local/bin/mount-unmounted-disks.sh
+```
diff --git a/terraform/main.tf b/terraform/main.tf
index 021dfc3..2eb7efb 100644
--- a/terraform/main.tf
+++ b/terraform/main.tf
@@ -1,7 +1,7 @@
 module "kubernetes_infra" {
 
   #  source = "./../../kubernetes-infra"
-  source = "git::https://gitlab.ics.muni.cz/cloud/terraform/modules/kubernetes-infra.git?ref=v4.0.1"
+  source = "git::https://gitlab.ics.muni.cz/cloud/terraform/modules/kubernetes-infra.git?ref=v5.0.1"
 
   # Example of variable override
   ssh_public_key = "~/.ssh/id_rsa.pub"
@@ -10,14 +10,17 @@ module "kubernetes_infra" {
 
   control_nodes_count       = 3
   control_nodes_volume_size = 30
-  control_nodes_flavor      = "hpc.8core-16ram"
+  control_nodes_flavor      = "r3.4core-8ram-30edisk"
 
   worker_nodes = [
     {
       name        = "worker"
-      flavor      = "standard.small"
+      flavor      = "c2.4core-16ram"
       volume_size = 30
       count       = 2
+      additional_volumes = [
+#      { size = 20 }
+    ]
     }
   ]
 }
diff --git a/terraform/nodes-cloudinit.txt b/terraform/worker-cloudinit.txt
similarity index 100%
rename from terraform/nodes-cloudinit.txt
rename to terraform/worker-cloudinit.txt
-- 
GitLab