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