diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e5089c4196e97327899844acaf60fb1afd4d743e..3cc38c99894e6614d420816af8e16bd50d26f54a 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -2,19 +2,34 @@ default:
   image: $CI_REGISTRY_IMAGE:latest
 
 variables:
-  DOCKER_DRIVER: overlay2
-  BUILD_DATE: $CI_COMMIT_TIMESTAMP
-  BASE_BUILD_FLAVOR: "standard"
-  COMPUTE_BUILD_FLAVOR: "compute.large"
-  GPU_BUILD_FLAVOR: "gpu.medium"
-  OOD_BUILD_FLAVOR: "ood.standard"
-  PKR_VAR_flavor: "standard"
-  BUILT_BASE_IMAGE_ID: ""
-  ANSIBLE_VAR_TOKEN: $ANSIBLE_PRIVATE_TOKEN
-  AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY
-  AWS_SECRET_ACCESS_KEY: $AWS_SECRET_KEY
-  SELF_REG_APP_KEY: $SELF_REG_KEY
-  SSH_PUB_KEY: $CI_SSH_PUB_KEY
+  CAMPUS_IP: 138.26.48.47
+  CHEAHA_IP: 172.20.10.9
+  TEST_IP: 138.26.49.134
+  ANSIBLE_REMOTE_TMP: "/tmp"
+  AWS_DEFAULT_REGION: "bhm"
+  AWS_HOST: "s3.lts.rc.uab.edu"
+  FF_SCRIPT_SECTIONS: "true"
+  OS_AUTH_TYPE: "v3applicationcredential"
+  OS_AUTH_URL: "https://keystone.cloud.rc.uab.edu:5000/v3"
+  OS_IDENTITY_API_VERSION: "3"
+  OS_INTERFACE: "public"
+  OS_REGION_NAME: "bhm1"
+  OOD_INSTANCE_NETWORK: "knightly-network"
+  PKR_VAR_flavor: "m1.medium-ruffner"
+  PKR_VAR_source_image: "CentOS-7-x86_64-GenericCloud-2009"
+  PKR_VAR_floating_ip_network: "uab-campus"
+  PKR_VAR_security_groups: '["allow-ssh"]'
+  PKR_VAR_skip_create_image: "false"
+  PKR_VAR_ssh_username: "centos"
+  PKR_VAR_networks: '["8cf2f12e-905d-46d9-bc70-b0897c65f75a"]'
+  PKR_VAR_image_membership: '["cf6fa1e53d4c40a49f4e0e469c440359"]'
+  GIT_AUTHOR_NAME: "Gitlab runner"
+  GIT_AUTHOR_EMAIL: "gitlab@runner"
+  NUM_SERVER_TO_KEEP: 1
+  NUM_IMAGE_TO_KEEP: 30
+  TIMESTAMP_REGEXP: '[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{6}'
+  PKR_VAR_root_ssh_key: "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAFqqWgmYpEaGtHBeTu27ntVJpYjwq/x5aBefrvfhk8Z9lE3cuZ26vJ9n/9tGE4Zn2Pew1mpZgi6PzfJ3vMt8yA= root@master"
+  DEV_KEY: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCpncAcYosVHt7HsUcE2XOYDuCi4HQnmFJv279LOcpZgXtZ6o0BM1fe5FgJS0X1ohBXQUFRuYJuJSW/GSmC1K8T+wCrKjZLJdMbqrubHV27diUZfdoVkoJy1vcAQF5nEcoTC7MpAFbBomdn2rsrpgQe8DGiURV7+soqybXV1OsIR3FFf6npnUaskHYT/oVtG9eBOnscyBxoVgbxzlmyoBLXED/sHKFw4nQSF/glYKEFiDu6TRTsBBEGvv23Qo/66QpQiFJ6TNfApNiyY9L1X+Dy8EWU6lozmNgwGDjXQ70Lr6xHnA0QGVALJlHXa6QjpgtpC5Nefsdvtf1hpfFo2VutpbSB+aq9jk3gWNN+XkhrWN5PiwP7YYJNw/WozyfL+IhwjfHZGxkuws+wGR6ZKxlX9W9Vrsq9ncYNKuhy2SdsR6s2XECQtrEQ6ZlX5jRt6Yh5M9ls5fMsWEqknDPmr1Ui6wV7NxprYngo9fLSdYO/ETIO3S6PB0aEHOZOyGitGaM06EmNpvjQn/QkkaVgt/O8wKL1o1AVzXhDMAFvtG6ejppV6kuTUHXFgSGZF6N9fnP91HuytyzC09F+NMWcmnRdrgXlHapjuuL3zzi+XLCQvk8+aYTzBKx1nU2FPMDRZ9sInGmqdTuM002E7qVbaCy4OxcWaAS/L2UVhGnHr+egYw== louistw@uab.edu"
 
 stages:
   - pre-build
@@ -29,18 +44,39 @@ workflow:
     - if: $CI_PIPELINE_SOURCE == 'schedule'
 
 .get_build_date: &get_build_date
-  script:
-    - export BUILD_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
-    - echo "Build Date: $BUILD_DATE"
+  - export BUILD_DATE=$(TZ=America/Chicago date +%Y-%m-%dT%H%M%S)
+  - echo BUILD_DATE=${BUILD_DATE}
 
 .update_ansible_repo: &update_ansible_repo
-  script:
-    - git clone https://gitlab.com/my_ansible_repo.git ansible
+  - *get_build_date
+  - |
+    if [ ! -d $CI_PROJECT_DIR/CRI_XCBC ]; then
+      git clone https://github.com/uabrc/CRI_XCBC.git
+      cd CRI_XCBC
+      git remote add upstream https://github.com/jprorama/CRI_XCBC.git
+      cd ..
+    fi
+  - cd CRI_XCBC
+  - git config user.name "${GIT_AUTHOR_NAME}"
+  - git config user.email "${GIT_AUTHOR_EMAIL}"
+  - git fetch origin uab-prod
+  - git fetch upstream dev
+  - git checkout uab-prod
+  - git merge origin/uab-prod
+  - git checkout -b integration
+  - git merge upstream/dev
+  - export CRI_XCBC_HEAD=$(git rev-parse --short HEAD)
+  - export CRI_XCBC_dev=$(git rev-parse --short upstream/dev)
+  - export CRI_XCBC_prod=$(git rev-parse --short origin/uab-prod)
+  - cd ..
+  - export PACKER_IMAGE_HEAD=$(git rev-parse --short HEAD)
+  - echo CRI_XCBC_HEAD=${CRI_XCBC_HEAD} | tee -a $CI_PROJECT_DIR/image.env
+  - echo CRI_XCBC_dev=${CRI_XCBC_dev} | tee -a $CI_PROJECT_DIR/image.env
+  - echo CRI_XCBC_prod=${CRI_XCBC_prod} | tee -a $CI_PROJECT_DIR/image.env
+  - echo PACKER_IMAGE_HEAD=${PACKER_IMAGE_HEAD} | tee -a $CI_PROJECT_DIR/image.env
 
 .get_ansible_files: &get_ansible_files
-  script:
-    - cp ansible/inventory/production .
-    - cp -R ansible/playbooks .
+  - s3cmd get --force -r --host=$AWS_HOST --host-bucket=$AWS_HOST s3://cheaha-cloud-ansible-files/ ansible/files/
 
 build_docker_image:
   image: docker:20.10.17
@@ -63,9 +99,10 @@ build_docker_image:
       terraform --version'
     - docker push --all-tags $CI_REGISTRY_IMAGE
   rules:
-    - if: $CI_COMMIT_REF_NAME == "main"
     - if: $CI_PIPELINE_SOURCE == "merge_request_event"
-  when: manual  # Manual trigger for the build
+      changes:
+        - Dockerfile
+      allow_failure: true
 
 build_base_image:
   stage: build
@@ -97,105 +134,34 @@ build_base_image:
   artifacts:
     reports:
       dotenv: image.env
-    expire_in: 30 days
-  rules:
-    - if: $CI_COMMIT_REF_NAME == "main"
-    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
-  when: manual  # Manual trigger for the build
+  when: manual # Add manual trigger here
 
-build_compute_image:
-  stage: build
-  needs: [build_base_image]
+create_instance:
+  stage: deploy
   tags:
     - build
   script:
-    - *update_ansible_repo
-    - *get_ansible_files
-    - export PKR_VAR_source_image=${BUILT_BASE_IMAGE_ID}
-    - export REPO_HEAD=$(git rev-parse --short HEAD)
-    - export PKR_VAR_flavor="${COMPUTE_BUILD_FLAVOR:-$PKR_VAR_flavor}"
-    - export PKR_VAR_build_instance_name="compute-${REPO_HEAD}"
-    - export PKR_VAR_image_date_suffix=false
     - |
-      if [ $CI_PIPELINE_SOURCE == 'merge_request_event' ]; then
-        export PKR_VAR_image_name="compute-PR-${CI_MERGE_REQUEST_IID}"
-      elif [ $CI_PIPELINE_SOURCE == 'schedule' ]; then
-        export PKR_VAR_image_name="compute-${BUILD_DATE}"
+      if [ -z "${BUILT_BASE_IMAGE_ID}" ]; then
+        exit 0
       fi
-    - packer init openstack-compute
-    - packer validate openstack-compute
-    - packer build -machine-readable openstack-compute | tee compute_build.log
-  rules:
-    - if: $CI_COMMIT_REF_NAME == "main"
-    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
-  when: manual  # Manual trigger for the build
+    - export INSTANCE_NAME="knightly"
+    - export INST_ID=$(openstack server create --flavor $PKR_VAR_flavor --image $BUILT_BASE_IMAGE_ID --network $OOD_INSTANCE_NETWORK --security-group allow-ssh --key-name $DEV_KEY --floating-ip $CAMPUS_IP -f value -c id)
+    - echo INST_ID=${INST_ID} | tee -a $CI_PROJECT_DIR/image.env
+    - echo "Sleeping to allow for instance to initialize..."
+    - sleep 10
+    - openstack server list
+    - openstack server show $INST_ID
+  when: manual # Add manual trigger here
 
-build_gpu_image:
-  stage: build
-  needs: [build_base_image]
+destroy_instance:
+  stage: cleanup
   tags:
     - build
   script:
-    - *update_ansible_repo
-    - *get_ansible_files
-    - FAILED=false
-    - export GPU_PLACEHOLDER_NAME="gpu1-placeholder"
-    - export GPU_PLACEHOLDER_FLAVOR="gpu1.medium"
-    - export GPU_PLACEHOLDER_IMAGE="CentOS-7-x86_64-GenericCloud-2009"
-    - export PKR_VAR_source_image=${BUILT_BASE_IMAGE_ID}
-    - export REPO_HEAD=$(git rev-parse --short HEAD)
-    - export PKR_VAR_flavor="${GPU_BUILD_FLAVOR:-gpu1.medium}"
-    - export PKR_VAR_build_instance_name="gpu-${REPO_HEAD}"
-    - export PKR_VAR_image_date_suffix=false
     - |
-      if [ $CI_PIPELINE_SOURCE == 'merge_request_event' ]; then
-        export PKR_VAR_image_name="gpu-PR-${CI_MERGE_REQUEST_IID}"
-      elif [ $CI_PIPELINE_SOURCE == 'schedule' ]; then
-        export PKR_VAR_image_name="gpu-${BUILD_DATE}"
-      fi
-    - packer init openstack-gpu
-    - packer validate openstack-gpu
-    - openstack server delete --wait $GPU_PLACEHOLDER_NAME
-    - packer build -machine-readable openstack-gpu | tee gpu_build.log || FAILED=true
-    - openstack server create --image $GPU_PLACEHOLDER_IMAGE --network cicd-net --flavor $GPU_PLACEHOLDER_FLAVOR $GPU_PLACEHOLDER_NAME
-    - |
-      if [ "$FAILED" = true ]; then
-        exit 1
+      if [ -z "${INST_ID}" ]; then
+        exit 0
       fi
-  rules:
-    - if: $CI_COMMIT_REF_NAME == "main"
-    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
-  when: manual  # Manual trigger for the build
-
-build_ood_image:
-  stage: build
-  tags:
-    - build
-  script:
-    - *update_ansible_repo
-    - *get_ansible_files
-    - >
-      curl --header "PRIVATE-TOKEN: ${ANSIBLE_VAR_TOKEN}"
-      "${CI_API_V4_URL}/projects/2836/repository/files/knightly/raw?ref=main"
-      -o CRI_XCBC/group_vars/knightly
-    - 'sed -i -E "s/(lts_access_key: ).*/\1\"${AWS_ACCESS_KEY_ID}\"/" CRI_XCBC/group_vars/knightly'
-    - 'sed -i -E "s/(lts_secret_key: ).*/\1\"${AWS_SECRET_ACCESS_KEY}\"/" CRI_XCBC/group_vars/knightly'
-    - 'sed -i -E "s|(ssh_pub_key: ).*|\1\"{{ lookup(''file'', ''${SSH_PUB_KEY}'') }}\"|" CRI_XCBC/group_vars/knightly'
-    - export PKR_VAR_flavor="${OOD_BUILD_FLAVOR:-$PKR_VAR_flavor}"
-    - packer init openstack-ood
-    - packer validate openstack-ood
-    - |
-      if [ $CI_PIPELINE_SOURCE == 'merge_request_event' ]; then
-        export PKR_VAR_image_name="ood-PR-${CI_MERGE_REQUEST_IID}"
-        echo INSTANCE_FLAVOR="${PKR_VAR_flavor}" | tee -a $CI_PROJECT_DIR/image.env
-        echo OOD_INSTANCE_NAME="ood-PR-${CI_MERGE_REQUEST_IID}" | tee -a $CI_PROJECT_DIR/image.env
-        export FLOATING_IP=$(openstack floating ip create uab-campus -f value -c floating_ip_address)
-        echo FLOATING_IP=$FLOATING_IP | tee -a $CI_PROJECT_DIR/image.env
-        sed -i -E "s/(ood_servername: ).*/\1\"$CI_COMMIT_REF_SLUG.$FLOATING_IP.nip.io\"/" CRI_XCBC/group_vars/knightly
-      elif [ $CI_PIPELINE_SOURCE == 'schedule' ]; then
-        export PKR_VAR_image_name="ood-${BUILD_DATE}"
-        echo INSTANCE_FLAVOR="${OOD_INSTANCE_FLAVOR:-cpu16-64g}" | tee -a
-  rules:
-    - if: $CI_COMMIT_REF_NAME == "main"
-    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
-  when: manual  # Manual trigger for the build
+    - openstack server delete $INST_ID || true
+  when: manual # Add manual trigger here