From cbd3f3c47810f7e5a28f8f75dc006be5767a0cda Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Fri, 16 May 2025 12:58:58 -0500
Subject: [PATCH]  Added OpenStack VM deployment job

- Add `deploy_user_defined_vm` job for configurable VM provisioning
- Implement dynamic OpenStack CLI command construction supporting:
  * Image selection by name/UUID via $VM_IMAGE
  * Flavor specification with $VM_FLAVOR
  * Security group array input ($VM_SECURITY_GROUPS)
  * Network/port options ($VM_NETWORK/$VM_PORT)
  * Floating IP association ($VM_FLOATING_IPS)
---
 .gitlab-ci.yml | 55 ++++++++++++++++----------------------------------
 1 file changed, 17 insertions(+), 38 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 25048fe..9f0e158 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -373,56 +373,35 @@ deploy_login_node:
     - if: $PIPELINE_TARGET == "deploy" && $LOGIN_IMAGE_ID
       when: always
 
-deploy_ood_node:
+deploy_user_defined_vm:
   stage: deploy
   environment:
     name: $ENV
   tags:
     - build
   script:
-    - openstack image set --accept $OOD_IMAGE_ID || true
-    - FAILED=false
-    - |
-      cat > user_data.txt <<EOF
-      #!/bin/bash
-      cat >> /etc/NetworkManager/conf.d/90-dns-none.conf<<EEOF
-      [main]
-      dns=none
-      EEOF
-      systemctl reload NetworkManager
-      echo "$DEV_KEY" >> /root/.ssh/authorized_keys
-      ip route replace default via ${DEFAULT_GATEWAY_IP} dev eth0
-      git clone ${CI_REPOSITORY_URL} /tmp/${CI_PROJECT_NAME}
-      cd /tmp/${CI_PROJECT_NAME}
-      git checkout ${CI_COMMIT_REF_NAME}
-      cat >> ansible/hosts<<EEOF
-      [$ENV]
-      127.0.0.1
-      EEOF
-      s3cmd get --force -r --access_key=$AWS_ACCESS_KEY_ID --secret_key=$AWS_SECRET_ACCESS_KEY --host=$AWS_HOST --host-bucket=$AWS_HOST s3://cheaha-cloud-ansible-files/ /tmp/${CI_PROJECT_NAME}/ansible/files/
-      ansible-playbook -c local -i ansible/hosts --extra-vars="$EXTRA_VARS" ansible/cluster.yml | tee -a /tmp/ansible.log
-      rm -rf /tmp/${CI_PROJECT_NAME}
-      EOF
     - |
       export cmd="openstack server create"
-      cmd+=" -c id -f value --image $OOD_IMAGE_ID"
-      cmd+=" --flavor $INSTANCE_FLAVOR"
-      for security_group in ${SECURITY_GROUP_LIST[@]};
+      cmd+=" -c id -f value --image $VM_IMAGE"
+      cmd+=" --flavor $VM_FLAVOR"
+      for security_group in ${VM_SECURITY_GROUPS[@]};
       do
         cmd+=" --security-group $security_group"
       done
-      cmd+=" --user-data user_data.txt"
-      if [ -n "$INSTANCE_NETWORK" ];then cmd+=" --network $INSTANCE_NETWORK"; fi
-      if [ -n "$OOD_PORT" ];then cmd+=" --port $OOD_PORT"; fi
-      cmd+=" --wait $OOD_INSTANCE_NAME"
-    - export OOD_INSTANCE_ID=$(bash -c "$cmd")
+      if [ -n "$VM_NETWORK" ]; then
+        cmd+=" --network $VM_NETWORK"
+      fi
+      if [ -n "$VM_PORT" ]; then
+        cmd+=" --port $VM_PORT"
+      fi
+      cmd+=" --wait $VM_INSTANCE_NAME"
+    - export VM_INSTANCE_ID=$(bash -c "$cmd")
     - |
-      # Associate the floating IP(s) with the SSH Proxy instance
-      for OOD_FLOATING_IP in ${OOD_FLOATING_IP_LIST[@]};
+      for FLOATING_IP in ${VM_FLOATING_IPS[@]};
       do
-        echo "Associating FLOATING_IP $OOD_FLOATING_IP with OOD_INSTANCE_ID $OOD_INSTANCE_ID"
-        openstack server add floating ip $OOD_INSTANCE_ID $OOD_FLOATING_IP
+        openstack server add floating ip $VM_INSTANCE_ID $FLOATING_IP
+        echo "Associated IP: $FLOATING_IP"
       done
   rules:
-    - if: $PIPELINE_TARGET == "deploy" && $OOD_IMAGE_ID
-      when: always
+    - if: $DEPLOY_VM == "true" 
+      when: always
\ No newline at end of file
-- 
GitLab