diff --git a/files/oke-fss-mount.sh b/files/oke-fss-mount.sh new file mode 100644 index 0000000..a16bd5e --- /dev/null +++ b/files/oke-fss-mount.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +# Variables (set these to your OCI FSS details) +MOUNT_TARGET_IP="$3" # IP address of OCI FSS mount target +EXPORT_PATH="$1" # Export path of FSS (from OCI Console) +MOUNT_POINT="$2" # Local directory to mount FSS + +# Install NFS utils on yum or apt-get systems +if command -v yum >/dev/null 2>&1; then + yum install -y nfs-utils + echo "Installed nfs-utils via yum" +elif command -v apt-get >/dev/null 2>&1; then + # Wait for apt lock and install the package + while fuser /var/{lib/{dpkg/{lock,lock-frontend},apt/lists},cache/apt/archives}/lock >/dev/null 2>&1; do + echo "Waiting for dpkg/apt lock" + sleep 1 + done + apt-get update + apt-get install -y nfs-common + echo "Installed nfs-common via apt-get" +fi + +# Create mount point directory if it doesn't exist +mkdir -p "$MOUNT_POINT" + +# Mount the NFS share +mount -t nfs -o vers=3,nconnect=16 "$MOUNT_TARGET_IP:$EXPORT_PATH" "$MOUNT_POINT" +if [ $? -eq 0 ]; then + echo "Successfully mounted $MOUNT_TARGET_IP:$EXPORT_PATH at $MOUNT_POINT" +else + echo "Failed to mount $MOUNT_TARGET_IP:$EXPORT_PATH" >&2 + exit 1 +fi + +# Add entry to /etc/fstab for re-mount at boot (if not already present) +if ! grep -q "$MOUNT_TARGET_IP:$EXPORT_PATH" /etc/fstab; then + echo "$MOUNT_TARGET_IP:$EXPORT_PATH $MOUNT_POINT nfs vers=3,nconnect=16,_netdev 0 0" >> /etc/fstab + echo "Added mount entry to /etc/fstab" +else + echo "Mount entry already exists in /etc/fstab" +fi diff --git a/terraform/fss.tf b/terraform/fss.tf index fecdeea..96105a0 100644 --- a/terraform/fss.tf +++ b/terraform/fss.tf @@ -5,6 +5,11 @@ locals { fss_export_path = format("/oke-gpu-%v", local.state_id) } +#export path picked from user input +#locals { +# fss_export_path = var.fss_export_path +#} + data "oci_file_storage_mount_targets" "fss" { count = var.create_fss ? 1 : 0 availability_domain = var.fss_ad diff --git a/terraform/oke-workers.tf b/terraform/oke-workers.tf index 9989152..dbaf894 100644 --- a/terraform/oke-workers.tf +++ b/terraform/oke-workers.tf @@ -3,6 +3,7 @@ locals { create_workers = true + fss_mount_ip = try(data.oci_core_private_ip.fss_mt_ip[0].ip_address, "") ssh_authorized_keys = compact([ trimspace(local.ssh_public_key), ]) @@ -25,6 +26,13 @@ locals { var.nvme_raid_level, ) : "" + #fss mounting on worker nodes + + runcmd_fss_mount = var.create_fss && local.fss_mount_ip != "" && local.fss_export_path != "" ? format( + "curl -sL -o /var/run/oke-fss-mount.sh https://raw.githubusercontent.com/oracle-quickstart/oci-hpc-oke/refs/heads/main/files/oke-fss-mount.sh && (bash /var/run/oke-fss-mount.sh '%v' '%v' '%v' || echo 'Error initializing RAID' >&2)", + local.fss_export_path, var.fss_mount_path, local.fss_mount_ip + ) : "" + write_files = [ { content = local.cluster_apiserver, @@ -43,6 +51,7 @@ locals { runcmd = compact([ local.runcmd_nvme_raid, local.runcmd_bootstrap, + local.runcmd_fss_mount ]) write_files = local.write_files } diff --git a/terraform/schema.yaml b/terraform/schema.yaml index 025a024..b46f17b 100644 --- a/terraform/schema.yaml +++ b/terraform/schema.yaml @@ -184,6 +184,7 @@ variableGroups: - create_bv_high - create_fss - fss_ad + - fss_mount_path - create_lustre - lustre_ad - lustre_size_in_tb @@ -743,6 +744,12 @@ variables: visible: ${create_fss} dependsOn: compartmentId: ${compartment_ocid} + fss_mount_path: + title: FSS mount point + type: string + default: "/mnt/oci-fss" + required: true + visible: ${create_fss} create_bv_high: title: Create a storage class backed by higher performance OCI block volumes description: "Create a storage class backed by higher performance OCI block volumes (VPU: 20)." diff --git a/terraform/variables.tf b/terraform/variables.tf index 159025c..ae4da8a 100644 --- a/terraform/variables.tf +++ b/terraform/variables.tf @@ -188,6 +188,13 @@ variable "create_lustre_pv" { default = true type = bool } +# created variable for fss mounting +variable "fss_mount_path" { + default = "/mnt/oci-fss" + type = string +} + + # MONITORING variable "install_monitoring" {