From 2cc186edd0bc1a3491ae38e7ac3f04174725d103 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Fri, 6 Sep 2024 11:53:51 -0400
Subject: [PATCH 001/172] refactor: Modify roles in cheaha.yml to enable a
 proxy

This will enable a standalone VM to interact with cluster so it can act
as a proxy for services. eg. OOD,SSH etc.
---
 ansible/group_vars/all                    | 13 ++++-
 ansible/group_vars/proxy                  | 10 ++++
 ansible/roles/cheaha.node/tasks/main.yml  |  5 +-
 ansible/roles/ldap_config/tasks/main.yml  |  3 +-
 ansible/roles/nfs_mounts/tasks/autofs.yml | 66 +++++++++++++++++++++
 ansible/roles/nfs_mounts/tasks/fstab.yml  | 18 ++++++
 ansible/roles/nfs_mounts/tasks/main.yml   | 70 ++---------------------
 7 files changed, 116 insertions(+), 69 deletions(-)
 create mode 100644 ansible/group_vars/proxy
 create mode 100644 ansible/roles/nfs_mounts/tasks/autofs.yml
 create mode 100644 ansible/roles/nfs_mounts/tasks/fstab.yml

diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index e55be3c..7ab5405 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -4,9 +4,20 @@
   yum_repo_files: []
   pkg_list: []
   slurm_version: 18.08.9
-  
+
 # NHC related
   nhc_download_url: "https://github.com/mej/nhc/releases/download/1.4.3/lbnl-nhc-1.4.3-1.el7.noarch.rpm"
   nhc_download_path: "/tmp"
   nhc_git_repo: "https://gitlab.rc.uab.edu/rc/nhc.git"
   nhc_git_repo_path: "/tmp/nhc"
+
+  root_ssh_key: ""
+
+  hostname_lookup_table:
+    - "172.20.0.24 cheaha-master02.cm.cluster cheaha-master02"
+    - "172.20.0.22 cheaha-master01.cm.cluster cheaha-master01"
+    - "172.20.0.25 master.cm.cluster master localmaster.cm.cluster localmaster ldapserver.cm.cluster ldapserver"
+
+  bright_openldap_path: "/cm/local/apps/openldap"
+  ldap_cert_path: "{{bright_openldap_path}}/etc/certs"
+
diff --git a/ansible/group_vars/proxy b/ansible/group_vars/proxy
new file mode 100644
index 0000000..819e47c
--- /dev/null
+++ b/ansible/group_vars/proxy
@@ -0,0 +1,10 @@
+---
+  hostname_lookup_table:
+    - "10.141.255.254 master.cm.cluster master localmaster.cm.cluster localmaster ldapserver.cm.cluster ldapserver"
+
+  ldap_cert_path: "/etc/openldap/certs"
+
+  mount_points:
+    - /gpfs4
+    - /gpfs5
+
diff --git a/ansible/roles/cheaha.node/tasks/main.yml b/ansible/roles/cheaha.node/tasks/main.yml
index 99ca7f3..c5a171f 100644
--- a/ansible/roles/cheaha.node/tasks/main.yml
+++ b/ansible/roles/cheaha.node/tasks/main.yml
@@ -4,9 +4,7 @@
     path: /etc/hosts
     line: "{{ item }}"
   loop:
-    - "172.20.0.24 cheaha-master02.cm.cluster cheaha-master02"
-    - "172.20.0.22 cheaha-master01.cm.cluster cheaha-master01"
-    - "172.20.0.25 master.cm.cluster master localmaster.cm.cluster localmaster ldapserver.cm.cluster ldapserver"
+    "{{ hostname_lookup_table }}"
 
 - name: Add proper DNS search to lookup other nodes on the cluster
   ansible.builtin.lineinfile:
@@ -25,6 +23,7 @@
     owner: root
     group: root
     mode: 0644
+  when: "'cm.repo' in yum_repo_files"
 
 - name: Add ssh key for root access
   ansible.posix.authorized_key:
diff --git a/ansible/roles/ldap_config/tasks/main.yml b/ansible/roles/ldap_config/tasks/main.yml
index 1832610..5b3332f 100644
--- a/ansible/roles/ldap_config/tasks/main.yml
+++ b/ansible/roles/ldap_config/tasks/main.yml
@@ -25,7 +25,7 @@
 - name: Copy ldap cert(s) into place
   ansible.builtin.copy:
     src: "{{ item.src }}"
-    dest: "/cm/local/apps/openldap/etc/certs/{{ item.src }}"
+    dest: "{{ ldap_cert_path }}/{{ item.src }}"
     owner: ldap
     group: ldap
     mode: 0440
@@ -46,5 +46,6 @@
   ansible.builtin.service:
     name: "{{ item }}"
     enabled: yes
+    state: restarted
   loop:
     - nslcd
diff --git a/ansible/roles/nfs_mounts/tasks/autofs.yml b/ansible/roles/nfs_mounts/tasks/autofs.yml
new file mode 100644
index 0000000..39ba56e
--- /dev/null
+++ b/ansible/roles/nfs_mounts/tasks/autofs.yml
@@ -0,0 +1,66 @@
+---
+- name: Create base directories
+  ansible.builtin.file:
+    path: "{{ item.dir }}"
+    state: directory
+    mode: "{{ item.mode }}"
+  loop:
+    - { dir: /local, mode: '0777' }
+    - { dir: /scratch, mode: '0755' }
+    - { dir: /share, mode: '0755' }
+    - { dir: /data/rc/apps, mode: '0755' } # this is only required for the symlink to be happy
+    - { dir: /data/user, mode: '0755' }
+    - { dir: /data/project, mode: '0755' }
+
+- name: Remove unused entry in master map
+  ansible.builtin.replace:
+    dest: /etc/auto.master
+    regexp: '{{ item.regexp }}'
+    replace: '{{ item.replace }}'
+    backup: true
+  loop:
+    - { regexp: '^(/misc)', replace: '#\1' }
+    - { regexp: '^(/net)', replace: '#\1' }
+    - { regexp: '^(\+auto.master)', replace: '#\1' }
+
+- name: Add master map file
+  ansible.builtin.lineinfile:
+    path: "/etc/auto.master.d/gpfs.autofs"
+    line: "{{ item.mount_point }} /etc/auto.{{ item.map_name }}"
+    create: yes
+  loop:
+    - { mount_point: "/cm/shared", map_name: "cm-share" }
+    - { mount_point: "/data/project", map_name: "data-project" }
+    - { mount_point: "/data/user", map_name: "data-user" }
+    - { mount_point: "/data/rc/apps", map_name: "data-rc-apps" }
+    - { mount_point: "/-", map_name: "scratch" }
+    - { mount_point: "/home", map_name: "home" }
+
+- name: Set up autofs map files
+  ansible.builtin.lineinfile:
+    path: "/etc/auto.{{ item.map_name }}"
+    line: "{{ item.key }} -{{ item.opts }} {{ item.src }}"
+    create: true
+  loop:
+    - { map_name: "cm-share", key: "*", src: "gpfs.rc.uab.edu:/data/cm/shared-8.2/&", opts: "fstype=nfs,vers=3,_netdev,defaults" }
+    - { map_name: "data-project", key: "*", src: "gpfs.rc.uab.edu:/data/project/&", opts: "fstype=nfs,vers=3,_netdev,defaults" }
+    - { map_name: "data-user", key: "*", src: "gpfs.rc.uab.edu:/data/user/&", opts: "fstype=nfs,vers=3,_netdev,local_lock=posix,defaults" }
+    - { map_name: "data-rc-apps", key: "*", src: "gpfs.rc.uab.edu:/data/rc/apps/&", opts: "fstype=nfs,vers=3,_netdev,defaults" }
+    - { map_name: "scratch", key: "/scratch", src: "gpfs.rc.uab.edu:/scratch", opts: "fstype=nfs,vers=3,_netdev,local_lock=posix,defaults" }
+    - { map_name: "home", key: "*", src: ":/data/user/home/&", opts: 'fstype=bind' }
+
+- name: Create symbolic links
+  ansible.builtin.file:
+    src: "{{ item.src }}"
+    dest: "{{ item.dest }}"
+    owner: root
+    group: root
+    force: yes
+    state: link
+  loop:
+    - { src: /data/rc/apps, dest: /share/apps }
+
+- name: Enable autofs service
+  ansible.builtin.service:
+    name: autofs
+    enabled: true
diff --git a/ansible/roles/nfs_mounts/tasks/fstab.yml b/ansible/roles/nfs_mounts/tasks/fstab.yml
new file mode 100644
index 0000000..44c3124
--- /dev/null
+++ b/ansible/roles/nfs_mounts/tasks/fstab.yml
@@ -0,0 +1,18 @@
+---
+- name: Create base directories
+  ansible.builtin.file:
+    path: "{{ item }}"
+    state: directory
+    mode: '0755'
+  loop:
+    "{{ mount_points }}"
+
+- name: Make an entry in the fstab
+  ansible.posix.mount:
+    src: "master:{{ item }}"
+    path: "{{ item }}"
+    opts: rw,sync,hard
+    state: present
+    fstype: nfs
+  loop:
+    "{{ mount_points }}"
diff --git a/ansible/roles/nfs_mounts/tasks/main.yml b/ansible/roles/nfs_mounts/tasks/main.yml
index 39ba56e..d99aefe 100644
--- a/ansible/roles/nfs_mounts/tasks/main.yml
+++ b/ansible/roles/nfs_mounts/tasks/main.yml
@@ -1,66 +1,8 @@
 ---
-- name: Create base directories
-  ansible.builtin.file:
-    path: "{{ item.dir }}"
-    state: directory
-    mode: "{{ item.mode }}"
-  loop:
-    - { dir: /local, mode: '0777' }
-    - { dir: /scratch, mode: '0755' }
-    - { dir: /share, mode: '0755' }
-    - { dir: /data/rc/apps, mode: '0755' } # this is only required for the symlink to be happy
-    - { dir: /data/user, mode: '0755' }
-    - { dir: /data/project, mode: '0755' }
+- name: nfs_mounts using fstab
+  include_tasks: fstab.yml
+  when: "'proxy' in group_names"
 
-- name: Remove unused entry in master map
-  ansible.builtin.replace:
-    dest: /etc/auto.master
-    regexp: '{{ item.regexp }}'
-    replace: '{{ item.replace }}'
-    backup: true
-  loop:
-    - { regexp: '^(/misc)', replace: '#\1' }
-    - { regexp: '^(/net)', replace: '#\1' }
-    - { regexp: '^(\+auto.master)', replace: '#\1' }
-
-- name: Add master map file
-  ansible.builtin.lineinfile:
-    path: "/etc/auto.master.d/gpfs.autofs"
-    line: "{{ item.mount_point }} /etc/auto.{{ item.map_name }}"
-    create: yes
-  loop:
-    - { mount_point: "/cm/shared", map_name: "cm-share" }
-    - { mount_point: "/data/project", map_name: "data-project" }
-    - { mount_point: "/data/user", map_name: "data-user" }
-    - { mount_point: "/data/rc/apps", map_name: "data-rc-apps" }
-    - { mount_point: "/-", map_name: "scratch" }
-    - { mount_point: "/home", map_name: "home" }
-
-- name: Set up autofs map files
-  ansible.builtin.lineinfile:
-    path: "/etc/auto.{{ item.map_name }}"
-    line: "{{ item.key }} -{{ item.opts }} {{ item.src }}"
-    create: true
-  loop:
-    - { map_name: "cm-share", key: "*", src: "gpfs.rc.uab.edu:/data/cm/shared-8.2/&", opts: "fstype=nfs,vers=3,_netdev,defaults" }
-    - { map_name: "data-project", key: "*", src: "gpfs.rc.uab.edu:/data/project/&", opts: "fstype=nfs,vers=3,_netdev,defaults" }
-    - { map_name: "data-user", key: "*", src: "gpfs.rc.uab.edu:/data/user/&", opts: "fstype=nfs,vers=3,_netdev,local_lock=posix,defaults" }
-    - { map_name: "data-rc-apps", key: "*", src: "gpfs.rc.uab.edu:/data/rc/apps/&", opts: "fstype=nfs,vers=3,_netdev,defaults" }
-    - { map_name: "scratch", key: "/scratch", src: "gpfs.rc.uab.edu:/scratch", opts: "fstype=nfs,vers=3,_netdev,local_lock=posix,defaults" }
-    - { map_name: "home", key: "*", src: ":/data/user/home/&", opts: 'fstype=bind' }
-
-- name: Create symbolic links
-  ansible.builtin.file:
-    src: "{{ item.src }}"
-    dest: "{{ item.dest }}"
-    owner: root
-    group: root
-    force: yes
-    state: link
-  loop:
-    - { src: /data/rc/apps, dest: /share/apps }
-
-- name: Enable autofs service
-  ansible.builtin.service:
-    name: autofs
-    enabled: true
+- name: nfs_mounts using autofs
+  include_tasks: autofs.yml
+  when: "'proxy' not in group_names"
-- 
GitLab


From f0c770b96c2a0a8a3092831295976255d58a99db Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Thu, 17 Oct 2024 18:41:24 -0500
Subject: [PATCH 002/172] Refactor CI/CD pipeline to include workflow rules and
 retain only deploy jobs

- Removed all jobs except for deploy_ood_proxy_node and deploy_ssh_proxy_node
- Added workflow rules to trigger pipeline based on source (web, schedule, manual)
- Updated scripts and environment variables for the remaining jobs
---
 .gitlab-ci.yml | 498 ++++---------------------------------------------
 1 file changed, 36 insertions(+), 462 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4bd9f80..745e699 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -8,520 +8,94 @@ variables:
   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"]'
+  OOD_PROXY_NETWORK: "proxy-net"
   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"
+  DEV_KEY: "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBXBfBmQDq1HK8U0zK6gDF0jyfWChuFYEPiRp1Wgl0XFJU7JoUngqkE/GAic8kCzKW0hPMiweSjmWdKlAapv/dk= krishmoodbidri@krishs-MacBook-Pro-3.local"
+  BUILT_OOD_IMAGE_ID: ${BUILT_OOD_IMAGE_ID}
+  INSTANCE_FLAVOR: ${INSTANCE_FLAVOR}
+  PROXY_IP: ${PROXY_IP}
 
 stages:
-  - pre-build
-  - build
-  - test
   - deploy
-  - cleanup
 
 workflow:
   rules:
-    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
-    - if: $CI_PIPELINE_SOURCE == 'schedule'
-
-.get_build_date: &get_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
-  - *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
-  - 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
-  stage: pre-build
-  services:
-    - docker:20.10.16-dind
-  tags:
-    - dind
-  before_script:
-    - *get_build_date
-    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
-  script:
-    - docker build -t $CI_REGISTRY_IMAGE:$BUILD_DATE -t $CI_REGISTRY_IMAGE:latest .
-    - >
-      docker run --rm $CI_REGISTRY_IMAGE bash -c
-      'ansible --version &&
-      openstack --version &&
-      packer version &&
-      s3cmd --version &&
-      terraform --version'
-    - docker push --all-tags $CI_REGISTRY_IMAGE
-  rules:
-    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
-      changes:
-        - Dockerfile
-      allow_failure: true
-
-build_base_image:
-  stage: build
-  tags:
-    - build
-  script:
-    - |
-      if [ -n "${BUILT_BASE_IMAGE_ID}" ]; then
-        exit 0
-      fi
-    - *update_ansible_repo
-    - *get_ansible_files
-    - export REPO_HEAD=$(git rev-parse --short HEAD)
-    - export PKR_VAR_flavor="${BASE_BUILD_FLAVOR:-$PKR_VAR_flavor}"
-    - export PKR_VAR_build_instance_name="base-${REPO_HEAD}"
-    - export PKR_VAR_image_date_suffix=false
-    - |
-      if [ $CI_PIPELINE_SOURCE == 'merge_request_event' ]; then
-        export PKR_VAR_image_name="base-PR-${CI_MERGE_REQUEST_IID}"
-      elif [ $CI_PIPELINE_SOURCE == 'schedule' ]; then
-        export PKR_VAR_image_name="base-${BUILD_DATE}"
-      fi
-    - packer init openstack
-    - packer validate openstack
-    - packer build -machine-readable openstack | tee base_build.log
-    - export BUILT_BASE_IMAGE_ID=$(grep 'Image:' base_build.log | awk '{print $4}')
-    - echo BUILT_BASE_IMAGE_ID=${BUILT_BASE_IMAGE_ID} | tee -a $CI_PROJECT_DIR/image.env
-    - openstack image unset --property signature_verified $BUILT_BASE_IMAGE_ID
-  artifacts:
-    reports:
-      dotenv: image.env
-    expire_in: 30 days
-
-build_compute_image:
-  stage: build
-  needs: [build_base_image]
-  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}"
-      fi
-    - packer init openstack-compute
-    - packer validate openstack-compute
-    - packer build -machine-readable openstack-compute | tee compute_build.log
-
-build_gpu_image:
-  stage: build
-  needs: [build_base_image]
-  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
-      fi
-  rules:
-    - if: $SKIP_GPU_BUILD == "true"
-      when: never
-    - when: always
-
-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/(user_register_app_key: ).*/\1\"${SELF_REG_APP_KEY}\"/" CRI_XCBC/group_vars/knightly'
-    - 'sed -i -E "s/(celery_user_password: ).*/\1\"${CELERY_PASSWD}\"/" 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 $CI_PROJECT_DIR/image.env
-        echo OOD_INSTANCE_NAME="ood-knightly" | tee -a $CI_PROJECT_DIR/image.env
-        echo FLOATING_IP=$TEST_IP | tee -a $CI_PROJECT_DIR/image.env
-      fi
-    - >
-      PKR_VAR_build_instance_name="ood-${CRI_XCBC_HEAD}"
-      PKR_VAR_image_date_suffix=false
-      packer build -machine-readable openstack-ood | tee ood_build.log
-    - export BUILT_OOD_IMAGE_ID=$(grep 'Image:' ood_build.log | awk '{print $4}')
-    - echo BUILT_OOD_IMAGE_ID=${BUILT_OOD_IMAGE_ID} | tee -a $CI_PROJECT_DIR/image.env
-    - openstack image set --property CRI_XCBC_prod=${CRI_XCBC_prod} --property CRI_XCBC_dev=${CRI_XCBC_dev} --property PACKER_IMAGE_HEAD=${PACKER_IMAGE_HEAD} ${BUILT_OOD_IMAGE_ID}
-  artifacts:
-    reports:
-      dotenv: image.env
+    - if: $CI_PIPELINE_SOURCE == "web"
+    - if: $CI_PIPELINE_SOURCE == "schedule"
+    - if: $CI_PIPELINE_SOURCE == "manual"
 
-test_ood_image:
-  stage: test
-  needs: [build_ood_image]
+deploy_ood_proxy_node:
+  stage: deploy
   environment:
     name: knightly
   tags:
     - build
   script:
-    - openstack image set --accept $BUILT_OOD_IMAGE_ID
+    - openstack image set --accept $PROXY_OOD_IMAGE_ID
     - FAILED=false
     - |
-      eval $(ssh-agent -s)
-      chmod 400 "$SSH_PRIV_KEY"
-      ssh-add "$SSH_PRIV_KEY"
-      mkdir ~/.ssh
-      chmod 700 ~/.ssh
-    - OLD_INSTANCE_IP=$(openstack floating ip list --floating-ip-address $CHEAHA_IP -c "Fixed IP Address" -f value)
-    - echo $OLD_INSTANCE_IP
-    - |
-      if [ ! -z $OLD_INSTANCE_IP ]; then
-        export OLD_INSTANCE_ID=$(openstack server list --name $OOD_INSTANCE_NAME --ip $OLD_INSTANCE_IP -c ID -f value)
-      fi
-    - echo OLD_INSTANCE_ID=$OLD_INSTANCE_ID | tee -a instance.env
-    - |
-      cat > user_data.txt << OEOF
-      #!/bin/bash
-      echo "Starting user_data: \$(date)"
-      cat > /etc/resolv.conf << EOF
-      search openstack.internal cm.cluster rc.uab.edu ib.cluster drac.cluster eth.cluster ib-hdr.cluster
-      nameserver 172.20.0.25
-      EOF
+      cat > user_data.txt << 
       echo "$DEV_KEY" >> /root/.ssh/authorized_keys
-      mkdir -p /run/shibboleth
-      chown shibd:shibd /run/shibboleth
-      echo "Installing s3cmd: \$(date)"
-      pip3 install s3cmd
-      echo "Downloading hostkey via s3cmd: \$(date)"
-      s3cmd get --force -r --access_key=$AWS_ACCESS_KEY_ID --secret_key=$AWS_SECRET_ACCESS_KEY --host=$AWS_HOST --host-bucket=$AWS_HOST s3://knightly-key/ /etc/ssh/
-      echo "Download completed: \$(date)"
-      OEOF
-    - >
+    - |
       export NEW_INSTANCE_ID=$(openstack server create
-      -c id -f value --image $BUILT_OOD_IMAGE_ID
-      --network $OOD_INSTANCE_NETWORK
+      -c id -f value --image $PROXY_OOD_IMAGE_ID
+      --network $OOD_PROXY_NETWORK
       --security-group ood-https-ports
       --security-group node-exporter
       --security-group allow-ssh
       --user-data user_data.txt
       --flavor $INSTANCE_FLAVOR
       --wait
-      $OOD_INSTANCE_NAME)
-    - echo NEW_INSTANCE_ID=$NEW_INSTANCE_ID | tee -a instance.env
-    - openstack server add floating ip $NEW_INSTANCE_ID $FLOATING_IP
-    - >
-      curl --retry 10 --retry-delay 20 --retry-connrefused https://knightly.rc.uab.edu/Shibboleth.sso/Metadata --resolve knightly.rc.uab.edu:443:$FLOATING_IP -kf
-      || FAILED=true
-    - |
-      cp "$SSH_KNOWN_HOSTS" ~/.ssh/known_hosts
-      chmod 644 ~/.ssh/known_hosts
-      until ssh acctsvc@$FLOATING_IP hostname; do sleep 5; done
-      ssh acctsvc@$FLOATING_IP '[ $(mount | grep "etc/auto" | wc -l) -eq 6 ]' || FAILED=true
-    - |
-      if [ "$FAILED" = true ]; then
-        if [ "${DELETE_WHEN_FAILED-true}" = true ]; then
-          openstack server delete $NEW_INSTANCE_ID
-          echo "DELETE_BUILT_IMAGE=true" | tee -a instance.env
-        fi
-        false
-      fi
-    - openstack server remove floating ip $NEW_INSTANCE_ID $FLOATING_IP
+      $OOD_PROXY_INSTANCE_NAME)
+    - openstack server add floating ip $OOD_PROXY_INSTANCE_NAME $FLOATING_IP
   artifacts:
     reports:
       dotenv: instance.env
   rules:
     - if: $CI_PIPELINE_SOURCE == "schedule"
       when: always
+    - if: $CI_PIPELINE_SOURCE == "manual"
+      when: manual
+    - if: $CI_PIPELINE_SOURCE == "web"
+      when: always
 
-test_ood_image_mr:
-  stage: test
-  needs: [build_ood_image]
+deploy_ssh_proxy_node:
+  stage: deploy
+  environment:
+    name: knightly
   tags:
     - build
   script:
-    - export OOD_INSTANCE_NETWORK="cicd-net"
+    - openstack image set --accept $PROXY_SSH_IMAGE_ID
     - FAILED=false
     - |
-      eval $(ssh-agent -s)
-      chmod 400 "$SSH_PRIV_KEY"
-      ssh-add "$SSH_PRIV_KEY"
-      mkdir ~/.ssh
-      chmod 700 ~/.ssh
-    - |
-      cat > user_data.txt << OEOF
-      #!/bin/bash
-      cat > /etc/resolv.conf << EOF
-      search openstack.internal cm.cluster rc.uab.edu ib.cluster drac.cluster eth.cluster ib-hdr.cluster
-      nameserver 172.20.0.25
-      EOF
+      cat > user_data.txt << 
       echo "$DEV_KEY" >> /root/.ssh/authorized_keys
-      mkdir -p /run/shibboleth
-      chown shibd:shibd /run/shibboleth
-      OEOF
-    - >
+    - |
       export NEW_INSTANCE_ID=$(openstack server create
-      -c id -f value --image $BUILT_OOD_IMAGE_ID
-      --network $OOD_INSTANCE_NETWORK
+      -c id -f value --image $PROXY_SSH_IMAGE_ID
+      --network $OOD_PROXY_NETWORK
       --security-group ood-https-ports
+      --security-group node-exporter
       --security-group allow-ssh
       --user-data user_data.txt
       --flavor $INSTANCE_FLAVOR
       --wait
-      $OOD_INSTANCE_NAME)
-    - echo NEW_INSTANCE_ID=$NEW_INSTANCE_ID | tee -a instance.env
-    - openstack server add floating ip $NEW_INSTANCE_ID $FLOATING_IP
-    - >
-      curl --retry 10 --retry-delay 20 --retry-connrefused https://knightly.rc.uab.edu/Shibboleth.sso/Metadata --resolve knightly.rc.uab.edu:443:$FLOATING_IP -kf
-      || FAILED=true
-    - ssh -o StrictHostKeyChecking=no acctsvc@$FLOATING_IP '[ $(mount | grep "etc/auto" | wc -l) -eq 6 ]' || FAILED=true
-    - |
-      if [ "$FAILED" = true ]; then
-        if [ "${DELETE_WHEN_FAILED-true}" = true ]; then
-          openstack server delete $NEW_INSTANCE_ID
-          openstack image delete $BUILT_OOD_IMAGE_ID
-        fi
-        false
-      fi
+      $SSH_PROXY_INSTANCE_NAME)
+    - openstack server add floating ip $SSH_PROXY_INSTANCE_NAME $FLOATING_IP
   artifacts:
     reports:
       dotenv: instance.env
-  rules:
-    - if: $CI_MERGE_REQUEST_ID
-
-deploy_review:
-  stage: deploy
-  script:
-    - echo "Deploy Review App"
-  environment:
-    name: review/$CI_COMMIT_REF_SLUG
-    url: https://$CI_COMMIT_REF_SLUG.$FLOATING_IP.nip.io
-    on_stop: stop_review
-    auto_stop_in: 2 days
-  tags:
-    - build
-  rules:
-    - if: $CI_MERGE_REQUEST_ID
-
-stop_review:
-  stage: deploy
-  script:
-    - openstack server delete $NEW_INSTANCE_ID
-    - openstack image delete $BUILT_OOD_IMAGE_ID
-    - openstack floating ip delete $FLOATING_IP
-  environment:
-    name: review/$CI_COMMIT_REF_SLUG
-    action: stop
-  tags:
-    - build
-  rules:
-    - if: $CI_MERGE_REQUEST_ID
-      when: manual
-
-deploy_knightly:
-  stage: deploy
-  environment:
-    name: knightly
-  tags:
-    - build
-  script:
-    - |
-      if [ ! -z $OLD_INSTANCE_ID ]; then
-        openstack server remove floating ip $OLD_INSTANCE_ID $CAMPUS_IP
-        openstack server remove floating ip $OLD_INSTANCE_ID $CHEAHA_IP
-      fi
-    - |
-      if [ ! -z $NEW_INSTANCE_ID ]; then
-        openstack server add floating ip $NEW_INSTANCE_ID $CAMPUS_IP
-        openstack server add floating ip $NEW_INSTANCE_ID $CHEAHA_IP
-      fi
-  only:
-    - schedules
-
-deploy_cheaha:
-  stage: deploy
-  environment:
-    name: cheaha
-  tags:
-    - build
-  script:
-    - echo "Job placeholder to deploy to Cheaha"
-  when: manual
-  only:
-    - main
-
-cleanup_knightly:
-  stage: cleanup
-  environment:
-    name: knightly
-  tags:
-    - build
-  script:
-    - >
-      SERVER_TO_BE_DELETE=($(openstack server list --name $OOD_INSTANCE_NAME --sort-column Image --sort-descending -f value -c ID
-      | awk -v NSTK=$NUM_SERVER_TO_KEEP -v OID=$OLD_INSTANCE_ID '$0 != OID {count++}
-      $0 != OID && count>NSTK {print}'))
-    - |
-      for svr in ${SERVER_TO_BE_DELETE[@]}; do
-        echo "Deleting server $svr"
-        openstack server delete ${svr}
-      done
   rules:
     - if: $CI_PIPELINE_SOURCE == "schedule"
       when: always
-
-cleanup_integration:
-  stage: cleanup
-  tags:
-    - build
-  script:
-    - OS_PROJECT_ID=$(openstack application credential show $OS_APPLICATION_CREDENTIAL_ID -f value -c project_id)
-    - openstack image list --sort-column Name --sort-descending -f value -c Name -c ID --property owner=$OS_PROJECT_ID > images.txt
-    - |
-      if [ "${DELETE_BUILT_IMAGE-false}" = true ]; then
-        openstack image delete $BUILT_OOD_IMAGE_ID
-      fi
-    - >
-      OOD_IMAGE_TO_BE_DELETE=($(cat images.txt
-      | awk -v NITK=$NUM_IMAGE_TO_KEEP -v REGEX=ood-$TIMESTAMP_REGEX
-      '{if ($0 ~ REGEX) result[count++] = $1}
-      END {for(i=NITK;i<count;i++) print result[i]}'))
-    - >
-      BASE_IMAGE_TO_BE_DELETE=($(cat images.txt
-      | awk -v NITK=$NUM_IMAGE_TO_KEEP -v REGEX=base-$TIMESTAMP_REGEX
-      '{if ($0 ~ REGEX) result[count++] = $1}
-      END {for(i=NITK;i<count;i++) print result[i]}'))
-    - >
-      COMPUTE_IMAGE_TO_BE_DELETE=($(cat images.txt
-      | awk -v NITK=$NUM_IMAGE_TO_KEEP -v REGEX=compute-$TIMESTAMP_REGEX
-      '{if ($0 ~ REGEX) result[count++] = $1}
-      END {for(i=NITK;i<count;i++) print result[i]}'))
-    - >
-      GPU_IMAGE_TO_BE_DELETE=($(cat images.txt
-      | awk -v NITK=$NUM_IMAGE_TO_KEEP -v REGEX=gpu-$TIMESTAMP_REGEX
-      '{if ($0 ~ REGEX) result[count++] = $1}
-      END {for(i=NITK;i<count;i++) print result[i]}'))
-    - |
-      for img in ${OOD_IMAGE_TO_BE_DELETE[@]}; do
-        echo "Deleting image $img"
-        openstack image delete ${img}
-      done
-    - |
-      for img in ${BASE_IMAGE_TO_BE_DELETE[@]}; do
-        echo "Deleting image $img"
-        openstack image delete ${img}
-      done
-    - |
-      for img in ${COMPUTE_IMAGE_TO_BE_DELETE[@]}; do
-        echo "Deleting image $img"
-        openstack image delete ${img}
-      done
-    - |
-      for img in ${GPU_IMAGE_TO_BE_DELETE[@]}; do
-        echo "Deleting image $img"
-        openstack image delete ${img}
-      done
-  rules:
-    - if: $CI_PIPELINE_SOURCE == "schedule"
-      when: always
-
-cleanup_mr:
-  stage: cleanup
-  tags:
-    - build
-  script:
-    - OS_PROJECT_ID=$(openstack application credential show $OS_APPLICATION_CREDENTIAL_ID -f value -c project_id)
-    - >
-      IMAGE_TO_BE_DELETE=($(openstack image list --sort-column Name --sort-descending -f value -c Name -c ID --property owner=$OS_PROJECT_ID
-      | awk -v REGEX="(ood|base|compute|gpu)-PR-$CI_MERGE_REQUEST_IID" '{if ($0 ~ REGEX) print $1}'))
-    - |
-      for img in ${IMAGE_TO_BE_DELETE[@]}; do
-        echo "Deleting image $img"
-        openstack image delete ${img}
-      done
-  rules:
-    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
+    - if: $CI_PIPELINE_SOURCE == "manual"
+      when: manual
+    - if: $CI_PIPELINE_SOURCE == "web"
       when: always
-- 
GitLab


From f9d6ebca15d060e9b5a6575a4ffca55d73db524d Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Thu, 17 Oct 2024 18:45:39 -0500
Subject: [PATCH 003/172] removed artifacts re. to instance.env

---
 .gitlab-ci.yml | 6 ------
 1 file changed, 6 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 745e699..b8ece56 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -54,9 +54,6 @@ deploy_ood_proxy_node:
       --wait
       $OOD_PROXY_INSTANCE_NAME)
     - openstack server add floating ip $OOD_PROXY_INSTANCE_NAME $FLOATING_IP
-  artifacts:
-    reports:
-      dotenv: instance.env
   rules:
     - if: $CI_PIPELINE_SOURCE == "schedule"
       when: always
@@ -89,9 +86,6 @@ deploy_ssh_proxy_node:
       --wait
       $SSH_PROXY_INSTANCE_NAME)
     - openstack server add floating ip $SSH_PROXY_INSTANCE_NAME $FLOATING_IP
-  artifacts:
-    reports:
-      dotenv: instance.env
   rules:
     - if: $CI_PIPELINE_SOURCE == "schedule"
       when: always
-- 
GitLab


From e22a00e05fbd7fe26af56c8e32906d97409e6c95 Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Thu, 17 Oct 2024 18:52:59 -0500
Subject: [PATCH 004/172] Correct CI/CD pipeline syntax in .gitlab-ci.yml

---
 .gitlab-ci.yml | 44 ++++++++++++++++++++++++--------------------
 1 file changed, 24 insertions(+), 20 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b8ece56..108f72a 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -40,18 +40,20 @@ deploy_ood_proxy_node:
     - openstack image set --accept $PROXY_OOD_IMAGE_ID
     - FAILED=false
     - |
-      cat > user_data.txt << 
+      cat > user_data.txt <<EOF
+      #!/bin/bash
       echo "$DEV_KEY" >> /root/.ssh/authorized_keys
+      EOF
     - |
-      export NEW_INSTANCE_ID=$(openstack server create
-      -c id -f value --image $PROXY_OOD_IMAGE_ID
-      --network $OOD_PROXY_NETWORK
-      --security-group ood-https-ports
-      --security-group node-exporter
-      --security-group allow-ssh
-      --user-data user_data.txt
-      --flavor $INSTANCE_FLAVOR
-      --wait
+      export NEW_INSTANCE_ID=$(openstack server create \
+      -c id -f value --image $PROXY_OOD_IMAGE_ID \
+      --network $OOD_PROXY_NETWORK \
+      --security-group ood-https-ports \
+      --security-group node-exporter \
+      --security-group allow-ssh \
+      --user-data user_data.txt \
+      --flavor $INSTANCE_FLAVOR \
+      --wait \
       $OOD_PROXY_INSTANCE_NAME)
     - openstack server add floating ip $OOD_PROXY_INSTANCE_NAME $FLOATING_IP
   rules:
@@ -72,18 +74,20 @@ deploy_ssh_proxy_node:
     - openstack image set --accept $PROXY_SSH_IMAGE_ID
     - FAILED=false
     - |
-      cat > user_data.txt << 
+      cat > user_data.txt <<EOF
+      #!/bin/bash
       echo "$DEV_KEY" >> /root/.ssh/authorized_keys
+      EOF
     - |
-      export NEW_INSTANCE_ID=$(openstack server create
-      -c id -f value --image $PROXY_SSH_IMAGE_ID
-      --network $OOD_PROXY_NETWORK
-      --security-group ood-https-ports
-      --security-group node-exporter
-      --security-group allow-ssh
-      --user-data user_data.txt
-      --flavor $INSTANCE_FLAVOR
-      --wait
+      export NEW_INSTANCE_ID=$(openstack server create \
+      -c id -f value --image $PROXY_SSH_IMAGE_ID \
+      --network $OOD_PROXY_NETWORK \
+      --security-group ood-https-ports \
+      --security-group node-exporter \
+      --security-group allow-ssh \
+      --user-data user_data.txt \
+      --flavor $INSTANCE_FLAVOR \
+      --wait \
       $SSH_PROXY_INSTANCE_NAME)
     - openstack server add floating ip $SSH_PROXY_INSTANCE_NAME $FLOATING_IP
   rules:
-- 
GitLab


From 6ce25af3a8a371c05e8ca2529505605e832e1c70 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Thu, 17 Oct 2024 22:21:22 -0500
Subject: [PATCH 005/172] style: use yaml folded multiline block

---
 .gitlab-ci.yml | 40 ++++++++++++++++++++--------------------
 1 file changed, 20 insertions(+), 20 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 108f72a..b19e023 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -44,16 +44,16 @@ deploy_ood_proxy_node:
       #!/bin/bash
       echo "$DEV_KEY" >> /root/.ssh/authorized_keys
       EOF
-    - |
-      export NEW_INSTANCE_ID=$(openstack server create \
-      -c id -f value --image $PROXY_OOD_IMAGE_ID \
-      --network $OOD_PROXY_NETWORK \
-      --security-group ood-https-ports \
-      --security-group node-exporter \
-      --security-group allow-ssh \
-      --user-data user_data.txt \
-      --flavor $INSTANCE_FLAVOR \
-      --wait \
+    - >
+      export NEW_INSTANCE_ID=$(openstack server create
+      -c id -f value --image $PROXY_OOD_IMAGE_ID
+      --network $OOD_PROXY_NETWORK
+      --security-group ood-https-ports
+      --security-group node-exporter
+      --security-group allow-ssh
+      --user-data user_data.txt
+      --flavor $INSTANCE_FLAVOR
+      --wait
       $OOD_PROXY_INSTANCE_NAME)
     - openstack server add floating ip $OOD_PROXY_INSTANCE_NAME $FLOATING_IP
   rules:
@@ -78,16 +78,16 @@ deploy_ssh_proxy_node:
       #!/bin/bash
       echo "$DEV_KEY" >> /root/.ssh/authorized_keys
       EOF
-    - |
-      export NEW_INSTANCE_ID=$(openstack server create \
-      -c id -f value --image $PROXY_SSH_IMAGE_ID \
-      --network $OOD_PROXY_NETWORK \
-      --security-group ood-https-ports \
-      --security-group node-exporter \
-      --security-group allow-ssh \
-      --user-data user_data.txt \
-      --flavor $INSTANCE_FLAVOR \
-      --wait \
+    - >
+      export NEW_INSTANCE_ID=$(openstack server create
+      -c id -f value --image $PROXY_SSH_IMAGE_ID
+      --network $OOD_PROXY_NETWORK
+      --security-group ood-https-ports
+      --security-group node-exporter
+      --security-group allow-ssh
+      --user-data user_data.txt
+      --flavor $INSTANCE_FLAVOR
+      --wait
       $SSH_PROXY_INSTANCE_NAME)
     - openstack server add floating ip $SSH_PROXY_INSTANCE_NAME $FLOATING_IP
   rules:
-- 
GitLab


From 7a70af578abe5ab82824047f7b3253ea5ae90e2b Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Thu, 17 Oct 2024 22:24:47 -0500
Subject: [PATCH 006/172] fix: remove invalid pipeline source

---
 .gitlab-ci.yml | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b19e023..d87a109 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -28,7 +28,6 @@ workflow:
   rules:
     - if: $CI_PIPELINE_SOURCE == "web"
     - if: $CI_PIPELINE_SOURCE == "schedule"
-    - if: $CI_PIPELINE_SOURCE == "manual"
 
 deploy_ood_proxy_node:
   stage: deploy
@@ -59,8 +58,6 @@ deploy_ood_proxy_node:
   rules:
     - if: $CI_PIPELINE_SOURCE == "schedule"
       when: always
-    - if: $CI_PIPELINE_SOURCE == "manual"
-      when: manual
     - if: $CI_PIPELINE_SOURCE == "web"
       when: always
 
@@ -93,7 +90,5 @@ deploy_ssh_proxy_node:
   rules:
     - if: $CI_PIPELINE_SOURCE == "schedule"
       when: always
-    - if: $CI_PIPELINE_SOURCE == "manual"
-      when: manual
     - if: $CI_PIPELINE_SOURCE == "web"
       when: always
-- 
GitLab


From 20364932c3da71621c03393b7c85b5bcf9dc826e Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Fri, 18 Oct 2024 00:24:59 -0500
Subject: [PATCH 007/172] style: remove unused variables

---
 .gitlab-ci.yml | 2 --
 1 file changed, 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d87a109..54fd4f2 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -17,9 +17,7 @@ variables:
   GIT_AUTHOR_NAME: "Gitlab runner"
   GIT_AUTHOR_EMAIL: "gitlab@runner"
   DEV_KEY: "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBXBfBmQDq1HK8U0zK6gDF0jyfWChuFYEPiRp1Wgl0XFJU7JoUngqkE/GAic8kCzKW0hPMiweSjmWdKlAapv/dk= krishmoodbidri@krishs-MacBook-Pro-3.local"
-  BUILT_OOD_IMAGE_ID: ${BUILT_OOD_IMAGE_ID}
   INSTANCE_FLAVOR: ${INSTANCE_FLAVOR}
-  PROXY_IP: ${PROXY_IP}
 
 stages:
   - deploy
-- 
GitLab


From d7f6778d4c243889f9c3e2ec4f8aa984f85876c2 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Fri, 18 Oct 2024 00:26:04 -0500
Subject: [PATCH 008/172] refactor: set default instance flavor

---
 .gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 54fd4f2..25124e6 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -17,7 +17,7 @@ variables:
   GIT_AUTHOR_NAME: "Gitlab runner"
   GIT_AUTHOR_EMAIL: "gitlab@runner"
   DEV_KEY: "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBXBfBmQDq1HK8U0zK6gDF0jyfWChuFYEPiRp1Wgl0XFJU7JoUngqkE/GAic8kCzKW0hPMiweSjmWdKlAapv/dk= krishmoodbidri@krishs-MacBook-Pro-3.local"
-  INSTANCE_FLAVOR: ${INSTANCE_FLAVOR}
+  INSTANCE_FLAVOR: "m1.medium-ruffner"
 
 stages:
   - deploy
-- 
GitLab


From 86cfedcb37d50439f27e028fadcc6059d2137e36 Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Fri, 18 Oct 2024 10:20:29 -0500
Subject: [PATCH 009/172] added unique floatingip variables for both instances

---
 .gitlab-ci.yml | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 25124e6..7697741 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -52,8 +52,7 @@ deploy_ood_proxy_node:
       --flavor $INSTANCE_FLAVOR
       --wait
       $OOD_PROXY_INSTANCE_NAME)
-    - openstack server add floating ip $OOD_PROXY_INSTANCE_NAME $FLOATING_IP
-  rules:
+    - openstack server add floating ip $OOD_PROXY_INSTANCE_NAME $OOD_PROXY_FLOATING_IP
     - if: $CI_PIPELINE_SOURCE == "schedule"
       when: always
     - if: $CI_PIPELINE_SOURCE == "web"
@@ -84,7 +83,7 @@ deploy_ssh_proxy_node:
       --flavor $INSTANCE_FLAVOR
       --wait
       $SSH_PROXY_INSTANCE_NAME)
-    - openstack server add floating ip $SSH_PROXY_INSTANCE_NAME $FLOATING_IP
+    - openstack server add floating ip $NEW_INSTANCE_ID $SSH_PROXY_FLOATING_IP
   rules:
     - if: $CI_PIPELINE_SOURCE == "schedule"
       when: always
-- 
GitLab


From 864e35486dca56c15ef7d80114af10023b717825 Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Fri, 18 Oct 2024 10:21:25 -0500
Subject: [PATCH 010/172] fixed syntax error

---
 .gitlab-ci.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 7697741..31bcdc9 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -53,6 +53,7 @@ deploy_ood_proxy_node:
       --wait
       $OOD_PROXY_INSTANCE_NAME)
     - openstack server add floating ip $OOD_PROXY_INSTANCE_NAME $OOD_PROXY_FLOATING_IP
+  rules:
     - if: $CI_PIPELINE_SOURCE == "schedule"
       when: always
     - if: $CI_PIPELINE_SOURCE == "web"
-- 
GitLab


From 6d40d904a84c4ebe52a46ee0ead619b302dbe93c Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Fri, 18 Oct 2024 10:26:42 -0500
Subject: [PATCH 011/172] removed not used security group

---
 .gitlab-ci.yml | 2 --
 1 file changed, 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 31bcdc9..c2cfe93 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -46,7 +46,6 @@ deploy_ood_proxy_node:
       -c id -f value --image $PROXY_OOD_IMAGE_ID
       --network $OOD_PROXY_NETWORK
       --security-group ood-https-ports
-      --security-group node-exporter
       --security-group allow-ssh
       --user-data user_data.txt
       --flavor $INSTANCE_FLAVOR
@@ -78,7 +77,6 @@ deploy_ssh_proxy_node:
       -c id -f value --image $PROXY_SSH_IMAGE_ID
       --network $OOD_PROXY_NETWORK
       --security-group ood-https-ports
-      --security-group node-exporter
       --security-group allow-ssh
       --user-data user_data.txt
       --flavor $INSTANCE_FLAVOR
-- 
GitLab


From a05f469c70bc12f650197333ffdb18332f690344 Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Fri, 18 Oct 2024 10:38:13 -0500
Subject: [PATCH 012/172] fixed security group names

---
 .gitlab-ci.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c2cfe93..f70a5b6 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -45,7 +45,8 @@ deploy_ood_proxy_node:
       export NEW_INSTANCE_ID=$(openstack server create
       -c id -f value --image $PROXY_OOD_IMAGE_ID
       --network $OOD_PROXY_NETWORK
-      --security-group ood-https-ports
+      --security-group https-port
+      --security-group http-port      
       --security-group allow-ssh
       --user-data user_data.txt
       --flavor $INSTANCE_FLAVOR
@@ -76,7 +77,6 @@ deploy_ssh_proxy_node:
       export NEW_INSTANCE_ID=$(openstack server create
       -c id -f value --image $PROXY_SSH_IMAGE_ID
       --network $OOD_PROXY_NETWORK
-      --security-group ood-https-ports
       --security-group allow-ssh
       --user-data user_data.txt
       --flavor $INSTANCE_FLAVOR
-- 
GitLab


From 543c233d81d624ab5b122a4cf72967c2a4026c2e Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Fri, 18 Oct 2024 10:45:35 -0500
Subject: [PATCH 013/172] created floating ip for both instances

---
 .gitlab-ci.yml | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index f70a5b6..d178eed 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -42,7 +42,7 @@ deploy_ood_proxy_node:
       echo "$DEV_KEY" >> /root/.ssh/authorized_keys
       EOF
     - >
-      export NEW_INSTANCE_ID=$(openstack server create
+      export PROXY_OOD_INSTANCE_ID=$(openstack server create
       -c id -f value --image $PROXY_OOD_IMAGE_ID
       --network $OOD_PROXY_NETWORK
       --security-group https-port
@@ -52,7 +52,12 @@ deploy_ood_proxy_node:
       --flavor $INSTANCE_FLAVOR
       --wait
       $OOD_PROXY_INSTANCE_NAME)
-    - openstack server add floating ip $OOD_PROXY_INSTANCE_NAME $OOD_PROXY_FLOATING_IP
+      # Create and assign a floating IP
+      PROXY_OOD_FLOATING_IP=$(openstack floating ip create $PKR_VAR_floating_ip_network -f value -c floating_ip_address)
+      echo "Created FLOATING_IP: $PROXY_OOD_FLOATING_IP"
+      # Associate the floating IP with the ood proxy instance
+      openstack server add floating ip $PROXY_OOD_INSTANCE_ID $PROXY_OOD_FLOATING_IP
+      echo "Associated FLOATING_IP $PROXY_OOD_FLOATING_IP with PROXY_OOD_INSTANCE_ID $PROXY_OOD_INSTANCE_ID"
   rules:
     - if: $CI_PIPELINE_SOURCE == "schedule"
       when: always
@@ -74,7 +79,7 @@ deploy_ssh_proxy_node:
       echo "$DEV_KEY" >> /root/.ssh/authorized_keys
       EOF
     - >
-      export NEW_INSTANCE_ID=$(openstack server create
+      export PROXY_SSH_INSTANCE_ID=$(openstack server create
       -c id -f value --image $PROXY_SSH_IMAGE_ID
       --network $OOD_PROXY_NETWORK
       --security-group allow-ssh
@@ -82,7 +87,12 @@ deploy_ssh_proxy_node:
       --flavor $INSTANCE_FLAVOR
       --wait
       $SSH_PROXY_INSTANCE_NAME)
-    - openstack server add floating ip $NEW_INSTANCE_ID $SSH_PROXY_FLOATING_IP
+      # Create and assign a proxy ssh floating IP
+      PROXY_SSH_FLOATING_IP=$(openstack floating ip create $PKR_VAR_floating_ip_network -f value -c floating_ip_address)
+      echo "Created PROXY_SSH_FLOATING_IP: $PROXY_SSH_FLOATING_IP"
+      # Associate the floating IP with the ssh proxy instance
+      openstack server add floating ip $PROXY_SSH_INSTANCE_ID $PROXY_SSH_FLOATING_IP
+      echo "Associated FLOATING_IP $PROXY_SSH_FLOATING_IP with PROXY_SSH_INSTANCE_ID $PROXY_SSH_INSTANCE_ID"
   rules:
     - if: $CI_PIPELINE_SOURCE == "schedule"
       when: always
-- 
GitLab


From 969227df90da7a9de83120b8bb26dc03dc7c2b81 Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Fri, 18 Oct 2024 10:51:43 -0500
Subject: [PATCH 014/172] rename variables for consistency in proxy deployment

---
 .gitlab-ci.yml | 42 +++++++++++++++++++++---------------------
 1 file changed, 21 insertions(+), 21 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d178eed..d3549bf 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -27,14 +27,14 @@ workflow:
     - if: $CI_PIPELINE_SOURCE == "web"
     - if: $CI_PIPELINE_SOURCE == "schedule"
 
-deploy_ood_proxy_node:
+deploy_http_proxy_node:
   stage: deploy
   environment:
     name: knightly
   tags:
     - build
   script:
-    - openstack image set --accept $PROXY_OOD_IMAGE_ID
+    - openstack image set --accept $HTTP_PROXY_IMAGE_ID
     - FAILED=false
     - |
       cat > user_data.txt <<EOF
@@ -42,8 +42,8 @@ deploy_ood_proxy_node:
       echo "$DEV_KEY" >> /root/.ssh/authorized_keys
       EOF
     - >
-      export PROXY_OOD_INSTANCE_ID=$(openstack server create
-      -c id -f value --image $PROXY_OOD_IMAGE_ID
+      export HTTP_PROXY_INSTANCE_ID=$(openstack server create
+      -c id -f value --image $HTTP_PROXY_IMAGE_ID
       --network $OOD_PROXY_NETWORK
       --security-group https-port
       --security-group http-port      
@@ -51,13 +51,13 @@ deploy_ood_proxy_node:
       --user-data user_data.txt
       --flavor $INSTANCE_FLAVOR
       --wait
-      $OOD_PROXY_INSTANCE_NAME)
-      # Create and assign a floating IP
-      PROXY_OOD_FLOATING_IP=$(openstack floating ip create $PKR_VAR_floating_ip_network -f value -c floating_ip_address)
-      echo "Created FLOATING_IP: $PROXY_OOD_FLOATING_IP"
-      # Associate the floating IP with the ood proxy instance
-      openstack server add floating ip $PROXY_OOD_INSTANCE_ID $PROXY_OOD_FLOATING_IP
-      echo "Associated FLOATING_IP $PROXY_OOD_FLOATING_IP with PROXY_OOD_INSTANCE_ID $PROXY_OOD_INSTANCE_ID"
+      $HTTP_PROXY_INSTANCE_NAME)
+      # Create and assign a floating IP to the HTTP Proxy instance
+      HTTP_PROXY_FLOATING_IP=$(openstack floating ip create $PKR_VAR_floating_ip_network -f value -c floating_ip_address)
+      echo "Created FLOATING_IP: $HTTP_PROXY_FLOATING_IP"
+      # Associate the floating IP with the HTTP Proxy instance
+      openstack server add floating ip $HTTP_PROXY_INSTANCE_ID $HTTP_PROXY_FLOATING_IP
+      echo "Associated FLOATING_IP $HTTP_PROXY_FLOATING_IP with HTTP_PROXY_INSTANCE_ID $HTTP_PROXY_INSTANCE_ID"
   rules:
     - if: $CI_PIPELINE_SOURCE == "schedule"
       when: always
@@ -71,7 +71,7 @@ deploy_ssh_proxy_node:
   tags:
     - build
   script:
-    - openstack image set --accept $PROXY_SSH_IMAGE_ID
+    - openstack image set --accept $SSH_PROXY_IMAGE_ID
     - FAILED=false
     - |
       cat > user_data.txt <<EOF
@@ -79,22 +79,22 @@ deploy_ssh_proxy_node:
       echo "$DEV_KEY" >> /root/.ssh/authorized_keys
       EOF
     - >
-      export PROXY_SSH_INSTANCE_ID=$(openstack server create
-      -c id -f value --image $PROXY_SSH_IMAGE_ID
+      export SSH_PROXY_INSTANCE_ID=$(openstack server create
+      -c id -f value --image $SSH_PROXY_IMAGE_ID
       --network $OOD_PROXY_NETWORK
       --security-group allow-ssh
       --user-data user_data.txt
       --flavor $INSTANCE_FLAVOR
       --wait
       $SSH_PROXY_INSTANCE_NAME)
-      # Create and assign a proxy ssh floating IP
-      PROXY_SSH_FLOATING_IP=$(openstack floating ip create $PKR_VAR_floating_ip_network -f value -c floating_ip_address)
-      echo "Created PROXY_SSH_FLOATING_IP: $PROXY_SSH_FLOATING_IP"
-      # Associate the floating IP with the ssh proxy instance
-      openstack server add floating ip $PROXY_SSH_INSTANCE_ID $PROXY_SSH_FLOATING_IP
-      echo "Associated FLOATING_IP $PROXY_SSH_FLOATING_IP with PROXY_SSH_INSTANCE_ID $PROXY_SSH_INSTANCE_ID"
+      # Create and assign a floating IP to the SSH Proxy instance
+      SSH_PROXY_FLOATING_IP=$(openstack floating ip create $PKR_VAR_floating_ip_network -f value -c floating_ip_address)
+      echo "Created SSH_PROXY_FLOATING_IP: $SSH_PROXY_FLOATING_IP"
+      # Associate the floating IP with the SSH Proxy instance
+      openstack server add floating ip $SSH_PROXY_INSTANCE_ID $SSH_PROXY_FLOATING_IP
+      echo "Associated FLOATING_IP $SSH_PROXY_FLOATING_IP with SSH_PROXY_INSTANCE_ID $SSH_PROXY_INSTANCE_ID"
   rules:
     - if: $CI_PIPELINE_SOURCE == "schedule"
       when: always
     - if: $CI_PIPELINE_SOURCE == "web"
-      when: always
+      when: always
\ No newline at end of file
-- 
GitLab


From 114d5bcd0427d8d56c85f200b936b062977c667b Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Fri, 18 Oct 2024 10:56:02 -0500
Subject: [PATCH 015/172] changed network variable to PROXY_NETWORK

---
 .gitlab-ci.yml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d3549bf..0250ecc 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -13,7 +13,7 @@ variables:
   OS_IDENTITY_API_VERSION: "3"
   OS_INTERFACE: "public"
   OS_REGION_NAME: "bhm1"
-  OOD_PROXY_NETWORK: "proxy-net"
+  PROXY_NETWORK: "proxy-net"
   GIT_AUTHOR_NAME: "Gitlab runner"
   GIT_AUTHOR_EMAIL: "gitlab@runner"
   DEV_KEY: "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBXBfBmQDq1HK8U0zK6gDF0jyfWChuFYEPiRp1Wgl0XFJU7JoUngqkE/GAic8kCzKW0hPMiweSjmWdKlAapv/dk= krishmoodbidri@krishs-MacBook-Pro-3.local"
@@ -44,7 +44,7 @@ deploy_http_proxy_node:
     - >
       export HTTP_PROXY_INSTANCE_ID=$(openstack server create
       -c id -f value --image $HTTP_PROXY_IMAGE_ID
-      --network $OOD_PROXY_NETWORK
+      --network $PROXY_NETWORK
       --security-group https-port
       --security-group http-port      
       --security-group allow-ssh
@@ -81,7 +81,7 @@ deploy_ssh_proxy_node:
     - >
       export SSH_PROXY_INSTANCE_ID=$(openstack server create
       -c id -f value --image $SSH_PROXY_IMAGE_ID
-      --network $OOD_PROXY_NETWORK
+      --network $PROXY_NETWORK
       --security-group allow-ssh
       --user-data user_data.txt
       --flavor $INSTANCE_FLAVOR
-- 
GitLab


From e7d9064a59c3fafc4261dbbab0003d6bb9ab3cc7 Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Fri, 18 Oct 2024 11:05:47 -0500
Subject: [PATCH 016/172] added default instance names for both proxy instances

---
 .gitlab-ci.yml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 0250ecc..5a2e43e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -18,6 +18,8 @@ variables:
   GIT_AUTHOR_EMAIL: "gitlab@runner"
   DEV_KEY: "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBXBfBmQDq1HK8U0zK6gDF0jyfWChuFYEPiRp1Wgl0XFJU7JoUngqkE/GAic8kCzKW0hPMiweSjmWdKlAapv/dk= krishmoodbidri@krishs-MacBook-Pro-3.local"
   INSTANCE_FLAVOR: "m1.medium-ruffner"
+  HTTP_PROXY_INSTANCE_NAME: "http-proxy"
+  SSH_PROXY_INSTANCE_NAME: "ssh-proxy"
 
 stages:
   - deploy
-- 
GitLab


From 411eeffd8c9b5590c3ae75b26ddc95876ed57af9 Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Fri, 18 Oct 2024 11:09:10 -0500
Subject: [PATCH 017/172] fixed synatx for floating ip allocation for proxy
 instances

---
 .gitlab-ci.yml | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 5a2e43e..5ad2828 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -54,9 +54,11 @@ deploy_http_proxy_node:
       --flavor $INSTANCE_FLAVOR
       --wait
       $HTTP_PROXY_INSTANCE_NAME)
+    - |
       # Create and assign a floating IP to the HTTP Proxy instance
       HTTP_PROXY_FLOATING_IP=$(openstack floating ip create $PKR_VAR_floating_ip_network -f value -c floating_ip_address)
       echo "Created FLOATING_IP: $HTTP_PROXY_FLOATING_IP"
+    - |
       # Associate the floating IP with the HTTP Proxy instance
       openstack server add floating ip $HTTP_PROXY_INSTANCE_ID $HTTP_PROXY_FLOATING_IP
       echo "Associated FLOATING_IP $HTTP_PROXY_FLOATING_IP with HTTP_PROXY_INSTANCE_ID $HTTP_PROXY_INSTANCE_ID"
@@ -89,9 +91,11 @@ deploy_ssh_proxy_node:
       --flavor $INSTANCE_FLAVOR
       --wait
       $SSH_PROXY_INSTANCE_NAME)
+    - |
       # Create and assign a floating IP to the SSH Proxy instance
       SSH_PROXY_FLOATING_IP=$(openstack floating ip create $PKR_VAR_floating_ip_network -f value -c floating_ip_address)
       echo "Created SSH_PROXY_FLOATING_IP: $SSH_PROXY_FLOATING_IP"
+    - |
       # Associate the floating IP with the SSH Proxy instance
       openstack server add floating ip $SSH_PROXY_INSTANCE_ID $SSH_PROXY_FLOATING_IP
       echo "Associated FLOATING_IP $SSH_PROXY_FLOATING_IP with SSH_PROXY_INSTANCE_ID $SSH_PROXY_INSTANCE_ID"
-- 
GitLab


From 53bc639cf7703f0a914ba09d5837fe5eec4772c0 Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Fri, 18 Oct 2024 11:11:13 -0500
Subject: [PATCH 018/172] added PKR_VAR_floating_ip_network variable

---
 .gitlab-ci.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 5ad2828..087f894 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -16,6 +16,7 @@ variables:
   PROXY_NETWORK: "proxy-net"
   GIT_AUTHOR_NAME: "Gitlab runner"
   GIT_AUTHOR_EMAIL: "gitlab@runner"
+  PKR_VAR_floating_ip_network: "uab-campus"
   DEV_KEY: "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBXBfBmQDq1HK8U0zK6gDF0jyfWChuFYEPiRp1Wgl0XFJU7JoUngqkE/GAic8kCzKW0hPMiweSjmWdKlAapv/dk= krishmoodbidri@krishs-MacBook-Pro-3.local"
   INSTANCE_FLAVOR: "m1.medium-ruffner"
   HTTP_PROXY_INSTANCE_NAME: "http-proxy"
-- 
GitLab


From e920950b9cd547eef940f0ebbf754ad0b11b99c9 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Fri, 18 Oct 2024 11:34:26 -0500
Subject: [PATCH 019/172] feat: only run deploy jobs when image id present

---
 .gitlab-ci.yml | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 087f894..4f83d1e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -64,9 +64,7 @@ deploy_http_proxy_node:
       openstack server add floating ip $HTTP_PROXY_INSTANCE_ID $HTTP_PROXY_FLOATING_IP
       echo "Associated FLOATING_IP $HTTP_PROXY_FLOATING_IP with HTTP_PROXY_INSTANCE_ID $HTTP_PROXY_INSTANCE_ID"
   rules:
-    - if: $CI_PIPELINE_SOURCE == "schedule"
-      when: always
-    - if: $CI_PIPELINE_SOURCE == "web"
+    - if: $PIPELINE_TARGET == "deploy" && $HTTP_PROXY_IMAGE_ID
       when: always
 
 deploy_ssh_proxy_node:
@@ -101,7 +99,5 @@ deploy_ssh_proxy_node:
       openstack server add floating ip $SSH_PROXY_INSTANCE_ID $SSH_PROXY_FLOATING_IP
       echo "Associated FLOATING_IP $SSH_PROXY_FLOATING_IP with SSH_PROXY_INSTANCE_ID $SSH_PROXY_INSTANCE_ID"
   rules:
-    - if: $CI_PIPELINE_SOURCE == "schedule"
+    - if: $PIPELINE_TARGET == "deploy" && $SSH_PROXY_IMAGE_ID
       when: always
-    - if: $CI_PIPELINE_SOURCE == "web"
-      when: always
\ No newline at end of file
-- 
GitLab


From 1299d8f1cb8769ab08b7ec548cd8c213ffda94e8 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Fri, 18 Oct 2024 11:35:44 -0500
Subject: [PATCH 020/172] style: remove trailing whitespace

---
 .gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4f83d1e..8dc795d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -49,7 +49,7 @@ deploy_http_proxy_node:
       -c id -f value --image $HTTP_PROXY_IMAGE_ID
       --network $PROXY_NETWORK
       --security-group https-port
-      --security-group http-port      
+      --security-group http-port
       --security-group allow-ssh
       --user-data user_data.txt
       --flavor $INSTANCE_FLAVOR
-- 
GitLab


From 286aae2127fced9f458cdc49de7fd70e2bfcf100 Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Fri, 18 Oct 2024 12:02:07 -0500
Subject: [PATCH 021/172] changed sec group to webserver_sec_group for http
 proxy

---
 .gitlab-ci.yml | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8dc795d..6015932 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -48,8 +48,7 @@ deploy_http_proxy_node:
       export HTTP_PROXY_INSTANCE_ID=$(openstack server create
       -c id -f value --image $HTTP_PROXY_IMAGE_ID
       --network $PROXY_NETWORK
-      --security-group https-port
-      --security-group http-port
+      --security-group webserver_sec_group
       --security-group allow-ssh
       --user-data user_data.txt
       --flavor $INSTANCE_FLAVOR
-- 
GitLab


From 9a880dc0422a14eca221a8f4b413a6724ecaf8f9 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Fri, 18 Oct 2024 12:12:49 -0500
Subject: [PATCH 022/172] fix: deploy to staging env instead of knightly

---
 .gitlab-ci.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 6015932..19956ed 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -33,7 +33,7 @@ workflow:
 deploy_http_proxy_node:
   stage: deploy
   environment:
-    name: knightly
+    name: staging
   tags:
     - build
   script:
@@ -69,7 +69,7 @@ deploy_http_proxy_node:
 deploy_ssh_proxy_node:
   stage: deploy
   environment:
-    name: knightly
+    name: staging
   tags:
     - build
   script:
-- 
GitLab


From add47dcd9bab1dbd753604765d8c2f940149e0d7 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Fri, 18 Oct 2024 12:52:44 -0500
Subject: [PATCH 023/172] fix: ignore issue when accept image

---
 .gitlab-ci.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 19956ed..6936a9d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -37,7 +37,7 @@ deploy_http_proxy_node:
   tags:
     - build
   script:
-    - openstack image set --accept $HTTP_PROXY_IMAGE_ID
+    - openstack image set --accept $HTTP_PROXY_IMAGE_ID || true
     - FAILED=false
     - |
       cat > user_data.txt <<EOF
@@ -73,7 +73,7 @@ deploy_ssh_proxy_node:
   tags:
     - build
   script:
-    - openstack image set --accept $SSH_PROXY_IMAGE_ID
+    - openstack image set --accept $SSH_PROXY_IMAGE_ID || true
     - FAILED=false
     - |
       cat > user_data.txt <<EOF
-- 
GitLab


From 7068e3bdaa69ec3e59e50cab2c57f470ed63ca7d Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Wed, 2 Oct 2024 18:23:30 -0500
Subject: [PATCH 024/172] feat(proxy): Add packer template for proxy build

---
 openstack-proxy/README.md         |   1 +
 openstack-proxy/nodeimage.pkr.hcl |  58 +++++++++++++++++
 openstack-proxy/variables.pkr.hcl | 101 ++++++++++++++++++++++++++++++
 3 files changed, 160 insertions(+)
 create mode 100644 openstack-proxy/README.md
 create mode 100644 openstack-proxy/nodeimage.pkr.hcl
 create mode 100644 openstack-proxy/variables.pkr.hcl

diff --git a/openstack-proxy/README.md b/openstack-proxy/README.md
new file mode 100644
index 0000000..d9287a3
--- /dev/null
+++ b/openstack-proxy/README.md
@@ -0,0 +1 @@
+This contains packer hcl files for creating images. For documentation on packer, see [here](https://www.packer.io/docs); for information about the openstack-specific builder, see [here](https://www.packer.io/plugins/builders/openstack)
diff --git a/openstack-proxy/nodeimage.pkr.hcl b/openstack-proxy/nodeimage.pkr.hcl
new file mode 100644
index 0000000..ec858cb
--- /dev/null
+++ b/openstack-proxy/nodeimage.pkr.hcl
@@ -0,0 +1,58 @@
+packer {
+  required_plugins {
+    openstack = {
+      version = "~> 1"
+      source  = "github.com/hashicorp/openstack"
+    }
+    ansible = {
+      version = "~> 1"
+      source  = "github.com/hashicorp/ansible"
+    }
+  }
+}
+
+locals {
+  local_image_name = "${var.image_name}${var.image_date_suffix ? formatdate("-YYYYMMDDHHmm", timestamp()) : ""}"
+}
+
+source "openstack" "image" {
+  skip_create_image         = var.skip_create_image
+  image_name                = local.local_image_name
+  source_image              = var.source_image
+  image_members             = var.image_membership
+  image_auto_accept_members = var.auto_accept_members
+  image_tags                = var.image_tags
+  image_disk_format         = var.image_format
+  volume_size               = var.volume_size
+  flavor                    = var.flavor
+  instance_name             = var.build_instance_name
+  use_blockstorage_volume   = true
+  floating_ip_network       = var.floating_ip_network
+  networks                  = var.networks
+  security_groups           = var.security_groups
+  ssh_username              = var.ssh_username
+}
+
+build {
+  sources = ["source.openstack.image"]
+
+  provisioner "ansible" {
+    use_proxy     = false
+    user          = var.ssh_username
+    groups        = ["proxy"]
+    playbook_file = "./ansible/cheaha.yml"
+    roles_path    = "./ansible/roles"
+    ansible_env_vars = ["ANSIBLE_TIMEOUT=60"]
+    extra_arguments = [
+      "--extra-vars", "root_ssh_key='${var.root_ssh_key}'"
+    ]
+  }
+
+  provisioner "ansible" {
+    use_proxy        = false
+    user             = var.ssh_username
+    groups           = ["proxy"]
+    ansible_env_vars = ["ANSIBLE_HOST_KEY_CHECKING=False", "ANSIBLE_RUN_TAGS=var.ANSIBLE_RUN_TAGS"]
+    playbook_file    = "./CRI_XCBC/proxy.yaml"
+  }
+}
diff --git a/openstack-proxy/variables.pkr.hcl b/openstack-proxy/variables.pkr.hcl
new file mode 100644
index 0000000..c57d279
--- /dev/null
+++ b/openstack-proxy/variables.pkr.hcl
@@ -0,0 +1,101 @@
+variable "root_ssh_key" {
+  type        = string
+  default     = ""
+  description = "The root key to use for ssh"
+}
+
+variable "image_name" {
+  type        = string
+  default     = "cluster-image"
+  description = "Name of the image in openstack"
+}
+
+variable "image_format" {
+  type        = string
+  default     = "qcow2"
+  description = "The format of the resulting image"
+}
+
+variable "image_date_suffix" {
+  type        = bool
+  default     = false
+  description = "Append a date to the image name (in YYYYMMDDHHMMSS format)"
+}
+
+variable "image_tags" {
+  type        = list(string)
+  default     = []
+  description = "List of tags to be associated to the resulting image"
+}
+
+variable "image_membership" {
+  type        = list(string)
+  default     = []
+  description = "Projects/tenants to share the image in openstack with"
+}
+
+variable "auto_accept_members" {
+  type        = bool
+  default     = false
+  description = "A boolean value for auto accepting image in the projects/tenants defined in image_membership."
+}
+
+variable "skip_create_image" {
+  type        = bool
+  default     = false
+  description = "A boolean value for skipping image creation at the end of the build"
+}
+
+variable "source_image" {
+  type        = string
+  default     = ""
+  description = "The name of the source image to use"
+}
+
+variable "flavor" {
+  type        = string
+  default     = ""
+  description = "The name of the flavor to use"
+}
+
+variable "floating_ip_network" {
+  type        = string
+  default     = "uab-campus"
+  description = "floating ip network to use with (temporary) ip assignmnet to a vm"
+}
+
+variable "networks" {
+  type        = list(string)
+  default     = []
+  description = "List of network UUIDs to assign to the network"
+}
+
+variable "security_groups" {
+  type        = list(string)
+  default     = []
+  description = "A list of security groups to add - you should make sure ssh access is open to the machine"
+}
+
+variable "build_instance_name" {
+  type        = string
+  default     = "ood"
+  description = "A name of build instance used for image build"
+}
+
+variable "ssh_username" {
+  type        = string
+  default     = "centos"
+  description = "The default username to use for SSH"
+}
+
+variable "volume_size" {
+  type        = number
+  default     = 20
+  description = "The default volume size for building iamge"
+}
+
+variable "ANSIBLE_RUN_TAGS" {
+  type        = list(string)
+  default     = ["sshpiper"]
+  description = "Run selective roles based on the tags"
+}
-- 
GitLab


From a6eafaffc7f05c67fe1c57bf701671e34482995a Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Sat, 5 Oct 2024 01:27:38 -0500
Subject: [PATCH 025/172] refactor: Remove tags as we use playbook for proxy

---
 openstack-proxy/nodeimage.pkr.hcl | 2 +-
 openstack-proxy/variables.pkr.hcl | 5 -----
 2 files changed, 1 insertion(+), 6 deletions(-)

diff --git a/openstack-proxy/nodeimage.pkr.hcl b/openstack-proxy/nodeimage.pkr.hcl
index ec858cb..7dbcbbf 100644
--- a/openstack-proxy/nodeimage.pkr.hcl
+++ b/openstack-proxy/nodeimage.pkr.hcl
@@ -52,7 +52,7 @@ build {
     use_proxy        = false
     user             = var.ssh_username
     groups           = ["proxy"]
-    ansible_env_vars = ["ANSIBLE_HOST_KEY_CHECKING=False", "ANSIBLE_RUN_TAGS=var.ANSIBLE_RUN_TAGS"]
+    ansible_env_vars = ["ANSIBLE_HOST_KEY_CHECKING=False"]
     playbook_file    = "./CRI_XCBC/proxy.yaml"
   }
 }
diff --git a/openstack-proxy/variables.pkr.hcl b/openstack-proxy/variables.pkr.hcl
index c57d279..8e78a5d 100644
--- a/openstack-proxy/variables.pkr.hcl
+++ b/openstack-proxy/variables.pkr.hcl
@@ -94,8 +94,3 @@ variable "volume_size" {
   description = "The default volume size for building iamge"
 }
 
-variable "ANSIBLE_RUN_TAGS" {
-  type        = list(string)
-  default     = ["sshpiper"]
-  description = "Run selective roles based on the tags"
-}
-- 
GitLab


From c95aa3b09e503f18ad9d58b224e4398859223a04 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Mon, 21 Oct 2024 19:12:35 -0500
Subject: [PATCH 026/172] fix(build): Add ansible timeout for failing yum
 installs

Change the default timeout from 10 secs to 60 secs to accomodate the delay for slurm pkg yum install tasks after running ldap_config  role
Refer #125
---
 openstack-proxy/nodeimage.pkr.hcl | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/openstack-proxy/nodeimage.pkr.hcl b/openstack-proxy/nodeimage.pkr.hcl
index 7dbcbbf..5927b83 100644
--- a/openstack-proxy/nodeimage.pkr.hcl
+++ b/openstack-proxy/nodeimage.pkr.hcl
@@ -52,7 +52,7 @@ build {
     use_proxy        = false
     user             = var.ssh_username
     groups           = ["proxy"]
-    ansible_env_vars = ["ANSIBLE_HOST_KEY_CHECKING=False"]
+    ansible_env_vars = ["ANSIBLE_TIMEOUT=60", "ANSIBLE_HOST_KEY_CHECKING=False"]
     playbook_file    = "./CRI_XCBC/proxy.yaml"
   }
 }
-- 
GitLab


From 17ff86bd5909c76de8ffada59971c00ce3e289b2 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Mon, 7 Oct 2024 22:21:12 -0500
Subject: [PATCH 027/172] refactor: Move vars to appropriate group_var files

We parameterized a few tasks in the cheaha.yml and put the vars in
group_vars/all so that the existing knightly builds won't break.
We added values required for the CoD deploy in group_vars/proxy. Now if
we put the proxy nodes in proxy group they will inherit values meant for
CoD deploy which is not desired in production.
We later realized that the appropriate file is group_vars/knightly and
it gives flexibility to put proxy nodes in knightly group to override
the vars meant for CoD in group_vars/all.
---
 ansible/group_vars/all      | 15 ++++++++++-----
 ansible/group_vars/knightly |  9 +++++++++
 ansible/group_vars/proxy    | 10 ----------
 3 files changed, 19 insertions(+), 15 deletions(-)
 create mode 100644 ansible/group_vars/knightly
 delete mode 100644 ansible/group_vars/proxy

diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index 7ab5405..c0b71fc 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -13,11 +13,16 @@
 
   root_ssh_key: ""
 
+# cheaha.node related
   hostname_lookup_table:
-    - "172.20.0.24 cheaha-master02.cm.cluster cheaha-master02"
-    - "172.20.0.22 cheaha-master01.cm.cluster cheaha-master01"
-    - "172.20.0.25 master.cm.cluster master localmaster.cm.cluster localmaster ldapserver.cm.cluster ldapserver"
+    - "10.141.255.254 master.cm.cluster master localmaster.cm.cluster localmaster ldapserver.cm.cluster ldapserver"
 
-  bright_openldap_path: "/cm/local/apps/openldap"
-  ldap_cert_path: "{{bright_openldap_path}}/etc/certs"
+# ldap_config related
+  ldap_cert_path: "/etc/openldap/certs"
+  ldap_uri: "ldap://ldapserver"
+
+# nfs_mounts related
+  mount_points:
+    - /gpfs4
+    - /gpfs5
 
diff --git a/ansible/group_vars/knightly b/ansible/group_vars/knightly
new file mode 100644
index 0000000..ee662aa
--- /dev/null
+++ b/ansible/group_vars/knightly
@@ -0,0 +1,9 @@
+---
+  hostname_lookup_table:
+    - "172.20.0.24 cheaha-master02.cm.cluster cheaha-master02"
+    - "172.20.0.22 cheaha-master01.cm.cluster cheaha-master01"
+    - "172.20.0.25 master.cm.cluster master localmaster.cm.cluster localmaster ldapserver.cm.cluster ldapserver"
+
+  bright_openldap_path: "/cm/local/apps/openldap"
+  ldap_cert_path: "{{bright_openldap_path}}/etc/certs"
+  ldap_uri: "ldaps://ldapserver"
diff --git a/ansible/group_vars/proxy b/ansible/group_vars/proxy
deleted file mode 100644
index 819e47c..0000000
--- a/ansible/group_vars/proxy
+++ /dev/null
@@ -1,10 +0,0 @@
----
-  hostname_lookup_table:
-    - "10.141.255.254 master.cm.cluster master localmaster.cm.cluster localmaster ldapserver.cm.cluster ldapserver"
-
-  ldap_cert_path: "/etc/openldap/certs"
-
-  mount_points:
-    - /gpfs4
-    - /gpfs5
-
-- 
GitLab


From 673a8ebd3041d678dd9bb2abd19544363c17852a Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Wed, 18 Sep 2024 21:54:29 -0500
Subject: [PATCH 028/172] refactor: Modify placeholder set for hosts during
 development

We changed it to "all" because that's the convention we follow.
When running ansible playbook you need to limit the hosts with -l
so that it doesn't run on all hosts.

Some background on why it was set to default in the first place,
`hosts: default` is used as a placeholder during development
to indicate where actual host groups will later be defined.
You can define specific host groups within the inventory
file with names that are more relevant to your infrastructure,
replacing the "default" placeholder.
---
 ansible/cheaha.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ansible/cheaha.yml b/ansible/cheaha.yml
index bfb1af1..79b50be 100644
--- a/ansible/cheaha.yml
+++ b/ansible/cheaha.yml
@@ -1,6 +1,6 @@
 ---
 - name: Setup node for use as a virtual cheaha node
-  hosts: default
+  hosts: all
   become: true
   roles:
     - { name: 'cheaha.node', tags: 'cheaha.node' }
-- 
GitLab


From 783892c154112790cdacfc9e2c7c757402e75b59 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Wed, 18 Sep 2024 22:11:12 -0500
Subject: [PATCH 029/172] feat: Add conditional in cheaha.yml for a proxy node

A proxy node need not be a slurm client so we don't run this role
---
 ansible/cheaha.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ansible/cheaha.yml b/ansible/cheaha.yml
index 79b50be..bd876b1 100644
--- a/ansible/cheaha.yml
+++ b/ansible/cheaha.yml
@@ -6,4 +6,4 @@
     - { name: 'cheaha.node', tags: 'cheaha.node' }
     - { name: 'nfs_mounts', tags: 'nfs_mounts' }
     - { name: 'ldap_config', tags: 'ldap_config' }
-    - { name: 'slurm_client', tags: 'slurm_client' }
+    - { name: 'slurm_client', tags: 'slurm_client', when: "'proxy' not in group_names" }
-- 
GitLab


From 4c1e9daf7929fd96d7d9cf7c06f4339853b144f8 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Wed, 18 Sep 2024 22:22:40 -0500
Subject: [PATCH 030/172] feat: Enable TLS in ldap depending on ldap_uri var

Enable TLS only if the ldap_uri var is having https substring in the
value
---
 ansible/roles/ldap_config/tasks/main.yml      |   5 +-
 .../roles/ldap_config/templates/nslcd.conf.j2 | 148 ++++++++++++++++++
 2 files changed, 151 insertions(+), 2 deletions(-)
 create mode 100644 ansible/roles/ldap_config/templates/nslcd.conf.j2

diff --git a/ansible/roles/ldap_config/tasks/main.yml b/ansible/roles/ldap_config/tasks/main.yml
index 5b3332f..0f8db2a 100644
--- a/ansible/roles/ldap_config/tasks/main.yml
+++ b/ansible/roles/ldap_config/tasks/main.yml
@@ -33,10 +33,11 @@
     - { src: ca.pem }
     - { src: ldap.key }
     - { src: ldap.pem }
+  when: ldap_uri | regex_search('^ldaps://')
 
 - name: Copy ldap config into place
-  ansible.builtin.copy:
-    src: nslcd.conf
+  ansible.builtin.template:
+    src: nslcd.conf.j2
     dest: /etc/nslcd.conf
     owner: root
     group: root
diff --git a/ansible/roles/ldap_config/templates/nslcd.conf.j2 b/ansible/roles/ldap_config/templates/nslcd.conf.j2
new file mode 100644
index 0000000..0d03cdf
--- /dev/null
+++ b/ansible/roles/ldap_config/templates/nslcd.conf.j2
@@ -0,0 +1,148 @@
+# This is the configuration file for the LDAP nameservice
+# switch library's nslcd daemon. It configures the mapping
+# between NSS names (see /etc/nsswitch.conf) and LDAP
+# information in the directory.
+# See the manual page nslcd.conf(5) for more information.
+
+# The user and group nslcd should run as.
+uid nslcd
+gid ldap
+
+# The uri pointing to the LDAP server to use for name lookups.
+# Multiple entries may be specified. The address that is used
+# here should be resolvable without using LDAP (obviously).
+#uri ldap://127.0.0.1/
+#uri ldaps://127.0.0.1/
+#uri ldapi://%2fvar%2frun%2fldapi_sock/
+# Note: %2f encodes the '/' used as directory separator
+uri {{ ldap_uri }}
+
+# The LDAP version to use (defaults to 3
+# if supported by client library)
+#ldap_version 3
+
+# The distinguished name of the search base.
+base dc=cm,dc=cluster
+
+# The distinguished name to bind to the server with.
+# Optional: default is to bind anonymously.
+#binddn cn=proxyuser,dc=example,dc=com
+
+# The credentials to bind with.
+# Optional: default is no credentials.
+# Note that if you set a bindpw you should check the permissions of this file.
+#bindpw secret
+
+# The distinguished name to perform password modifications by root by.
+#rootpwmoddn cn=admin,dc=example,dc=com
+
+# The default search scope.
+#scope sub
+#scope one
+#scope base
+
+# Customize certain database lookups.
+#base   group  ou=Groups,dc=example,dc=com
+#base   passwd ou=People,dc=example,dc=com
+#base   shadow ou=People,dc=example,dc=com
+#scope  group  onelevel
+#scope  hosts  sub
+
+# Bind/connect timelimit.
+#bind_timelimit 30
+
+# Search timelimit.
+#timelimit 30
+
+# Idle timelimit. nslcd will close connections if the
+# server has not been contacted for the number of seconds.
+idle_timelimit 240
+
+# Use StartTLS without verifying the server certificate.
+#ssl start_tls
+#tls_reqcert never
+
+{% if ldap_uri | regex_search('^ldaps://') %}
+ssl on
+tls_reqcert demand
+
+# CA certificates for server certificate verification
+#tls_cacertdir /etc/ssl/certs
+tls_cacertfile /cm/local/apps/openldap/etc/certs/ca.pem
+tls_cert /cm/local/apps/openldap/etc/certs/ldap.pem
+tls_key /cm/local/apps/openldap/etc/certs/ldap.key
+{% endif %}
+
+# Seed the PRNG if /dev/urandom is not provided
+#tls_randfile /var/run/egd-pool
+
+# SSL cipher suite
+# See man ciphers for syntax
+#tls_ciphers TLSv1
+
+# Client certificate and key
+# Use these, if your server requires client authentication.
+
+# Mappings for Services for UNIX 3.5
+#filter passwd (objectClass=User)
+#map    passwd uid              msSFU30Name
+#map    passwd userPassword     msSFU30Password
+#map    passwd homeDirectory    msSFU30HomeDirectory
+#map    passwd homeDirectory    msSFUHomeDirectory
+#filter shadow (objectClass=User)
+#map    shadow uid              msSFU30Name
+#map    shadow userPassword     msSFU30Password
+#filter group  (objectClass=Group)
+#map    group  member           msSFU30PosixMember
+
+# Mappings for Services for UNIX 2.0
+#filter passwd (objectClass=User)
+#map    passwd uid              msSFUName
+#map    passwd userPassword     msSFUPassword
+#map    passwd homeDirectory    msSFUHomeDirectory
+#map    passwd gecos            msSFUName
+#filter shadow (objectClass=User)
+#map    shadow uid              msSFUName
+#map    shadow userPassword     msSFUPassword
+#map    shadow shadowLastChange pwdLastSet
+#filter group  (objectClass=Group)
+#map    group  member           posixMember
+
+# Mappings for Active Directory
+#pagesize 1000
+#referrals off
+#idle_timelimit 800
+#filter passwd (&(objectClass=user)(!(objectClass=computer))(uidNumber=*)(unixHomeDirectory=*))
+#map    passwd uid              sAMAccountName
+#map    passwd homeDirectory    unixHomeDirectory
+#map    passwd gecos            displayName
+#filter shadow (&(objectClass=user)(!(objectClass=computer))(uidNumber=*)(unixHomeDirectory=*))
+#map    shadow uid              sAMAccountName
+#map    shadow shadowLastChange pwdLastSet
+#filter group  (objectClass=group)
+
+# Alternative mappings for Active Directory
+# (replace the SIDs in the objectSid mappings with the value for your domain)
+#pagesize 1000
+#referrals off
+#idle_timelimit 800
+#filter passwd (&(objectClass=user)(objectClass=person)(!(objectClass=computer)))
+#map    passwd uid           cn
+#map    passwd uidNumber     objectSid:S-1-5-21-3623811015-3361044348-30300820
+#map    passwd gidNumber     objectSid:S-1-5-21-3623811015-3361044348-30300820
+#map    passwd homeDirectory "/home/$cn"
+#map    passwd gecos         displayName
+#map    passwd loginShell    "/bin/bash"
+#filter group (|(objectClass=group)(objectClass=person))
+#map    group gidNumber      objectSid:S-1-5-21-3623811015-3361044348-30300820
+
+# Mappings for AIX SecureWay
+#filter passwd (objectClass=aixAccount)
+#map    passwd uid              userName
+#map    passwd userPassword     passwordChar
+#map    passwd uidNumber        uid
+#map    passwd gidNumber        gid
+#filter group  (objectClass=aixAccessGroup)
+#map    group  cn               groupName
+#map    group  gidNumber        gid
+# This comment prevents repeated auto-migration of settings.
-- 
GitLab


From 229f0e19d59c44a15b810819c48cd126a2b6afec Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Sat, 5 Oct 2024 01:23:02 -0500
Subject: [PATCH 031/172] fix(proxy): add role to fix yum failures

---
 ansible/cheaha.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/ansible/cheaha.yml b/ansible/cheaha.yml
index bd876b1..0f283d2 100644
--- a/ansible/cheaha.yml
+++ b/ansible/cheaha.yml
@@ -3,6 +3,7 @@
   hosts: all
   become: true
   roles:
+    - { name: 'fix_centos_repo', tags: 'fix_centos_repo' }
     - { name: 'cheaha.node', tags: 'cheaha.node' }
     - { name: 'nfs_mounts', tags: 'nfs_mounts' }
     - { name: 'ldap_config', tags: 'ldap_config' }
-- 
GitLab


From 423e686eb9e1b8ae3ebd9af22da952d5976941fa Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Tue, 22 Oct 2024 18:14:41 -0500
Subject: [PATCH 032/172] refactor: knightly is specific to OOD, so rename file

---
 ansible/group_vars/{knightly => prod} | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename ansible/group_vars/{knightly => prod} (100%)

diff --git a/ansible/group_vars/knightly b/ansible/group_vars/prod
similarity index 100%
rename from ansible/group_vars/knightly
rename to ansible/group_vars/prod
-- 
GitLab


From 856ba0f9c2a25331ec5fe95dcf8002bd64f66485 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Wed, 23 Oct 2024 11:50:13 -0500
Subject: [PATCH 033/172] feat: Move clusterhooks to deploy stage

---
 openstack-proxy/nodeimage.pkr.hcl | 12 ------------
 1 file changed, 12 deletions(-)

diff --git a/openstack-proxy/nodeimage.pkr.hcl b/openstack-proxy/nodeimage.pkr.hcl
index 5927b83..02e94da 100644
--- a/openstack-proxy/nodeimage.pkr.hcl
+++ b/openstack-proxy/nodeimage.pkr.hcl
@@ -36,18 +36,6 @@ source "openstack" "image" {
 build {
   sources = ["source.openstack.image"]
 
-  provisioner "ansible" {
-    use_proxy     = false
-    user          = var.ssh_username
-    groups        = ["proxy"]
-    playbook_file = "./ansible/cheaha.yml"
-    roles_path    = "./ansible/roles"
-    ansible_env_vars = ["ANSIBLE_TIMEOUT=60"]
-    extra_arguments = [
-      "--extra-vars", "root_ssh_key='${var.root_ssh_key}'"
-    ]
-  }
-
   provisioner "ansible" {
     use_proxy        = false
     user             = var.ssh_username
-- 
GitLab


From 377beaa7106c9ac0ec568e62efc8ff52c24d7dfc Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Wed, 23 Oct 2024 12:03:47 -0500
Subject: [PATCH 034/172] refactor: use variable to decide if we want autofs
 mount

---
 ansible/group_vars/all                  | 1 +
 ansible/roles/nfs_mounts/tasks/main.yml | 4 ++--
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index c0b71fc..c3cb579 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -22,6 +22,7 @@
   ldap_uri: "ldap://ldapserver"
 
 # nfs_mounts related
+  use_autofs: false
   mount_points:
     - /gpfs4
     - /gpfs5
diff --git a/ansible/roles/nfs_mounts/tasks/main.yml b/ansible/roles/nfs_mounts/tasks/main.yml
index d99aefe..507f4c6 100644
--- a/ansible/roles/nfs_mounts/tasks/main.yml
+++ b/ansible/roles/nfs_mounts/tasks/main.yml
@@ -1,8 +1,8 @@
 ---
 - name: nfs_mounts using fstab
   include_tasks: fstab.yml
-  when: "'proxy' in group_names"
+  when: not use_autofs
 
 - name: nfs_mounts using autofs
   include_tasks: autofs.yml
-  when: "'proxy' not in group_names"
+  when: use_autofs
-- 
GitLab


From 72d760441d57aed9af1090749f50df3182aeb997 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Wed, 23 Oct 2024 12:09:33 -0500
Subject: [PATCH 035/172] refactor: use variable to decide if we want slurm
 client

---
 ansible/cheaha.yml     | 2 +-
 ansible/group_vars/all | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/ansible/cheaha.yml b/ansible/cheaha.yml
index 0f283d2..910268e 100644
--- a/ansible/cheaha.yml
+++ b/ansible/cheaha.yml
@@ -7,4 +7,4 @@
     - { name: 'cheaha.node', tags: 'cheaha.node' }
     - { name: 'nfs_mounts', tags: 'nfs_mounts' }
     - { name: 'ldap_config', tags: 'ldap_config' }
-    - { name: 'slurm_client', tags: 'slurm_client', when: "'proxy' not in group_names" }
+    - { name: 'slurm_client', tags: 'slurm_client', when: enable_slurm_client }
diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index c3cb579..d1d270f 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -4,6 +4,7 @@
   yum_repo_files: []
   pkg_list: []
   slurm_version: 18.08.9
+  enable_slurm_client: false
 
 # NHC related
   nhc_download_url: "https://github.com/mej/nhc/releases/download/1.4.3/lbnl-nhc-1.4.3-1.el7.noarch.rpm"
-- 
GitLab


From ad7cd6fd3b583b09fcbbcc751f4acd54fbc17a41 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Wed, 23 Oct 2024 00:43:48 -0500
Subject: [PATCH 036/172] ci: Add ci jobs to build http and ssh proxy images

---
 .gitlab-ci.yml | 109 ++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 108 insertions(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 6936a9d..c430636 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -14,15 +14,23 @@ variables:
   OS_INTERFACE: "public"
   OS_REGION_NAME: "bhm1"
   PROXY_NETWORK: "proxy-net"
+  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"]'
   GIT_AUTHOR_NAME: "Gitlab runner"
   GIT_AUTHOR_EMAIL: "gitlab@runner"
-  PKR_VAR_floating_ip_network: "uab-campus"
+  PKR_VAR_root_ssh_key: "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAFqqWgmYpEaGtHBeTu27ntVJpYjwq/x5aBefrvfhk8Z9lE3cuZ26vJ9n/9tGE4Zn2Pew1mpZgi6PzfJ3vMt8yA= root@master"
   DEV_KEY: "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBXBfBmQDq1HK8U0zK6gDF0jyfWChuFYEPiRp1Wgl0XFJU7JoUngqkE/GAic8kCzKW0hPMiweSjmWdKlAapv/dk= krishmoodbidri@krishs-MacBook-Pro-3.local"
   INSTANCE_FLAVOR: "m1.medium-ruffner"
   HTTP_PROXY_INSTANCE_NAME: "http-proxy"
   SSH_PROXY_INSTANCE_NAME: "ssh-proxy"
 
 stages:
+  - build
   - deploy
 
 workflow:
@@ -30,6 +38,105 @@ workflow:
     - if: $CI_PIPELINE_SOURCE == "web"
     - if: $CI_PIPELINE_SOURCE == "schedule"
 
+.get_build_date: &get_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
+  - *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
+  - s3cmd get --force -r --host=$AWS_HOST --host-bucket=$AWS_HOST s3://cheaha-cloud-ansible-files/ ansible/files/
+
+.build_proxy_image_template: &build_proxy_image_template
+  script:
+    - *update_ansible_repo
+    - *get_ansible_files
+    # packer vars for job env
+    - export PKR_VAR_flavor="${PROXY_BUILD_FLAVOR:-$PKR_VAR_flavor}"
+    - export PKR_VAR_build_instance_name="${PROXY_NAME}-${CRI_XCBC_HEAD}"
+    - export PKR_VAR_image_date_suffix=false
+    - |
+      if [ $CI_PIPELINE_SOURCE == 'merge_request_event' ]; then
+        export PKR_VAR_image_name="${PROXY_NAME}-PR-${CI_MERGE_REQUEST_IID}"
+      elif [ $CI_PIPELINE_SOURCE == 'schedule' ]; then
+        export PKR_VAR_image_name="PROXY-${BUILD_DATE}"
+      fi
+    # Ansible var overrides
+    - |
+      if [ -n "${PROXY_ENABLE_VAR}" ]; then
+        sed -i -E "s/(${PROXY_ENABLE_VAR}: ).*/\1true/" CRI_XCBC/group_vars/all
+      fi
+    - 'sed -i -E "s|(s3_endpoint: ).*|\1\"${S3_ENDPOINT}\"|" CRI_XCBC/group_vars/all'
+    - 'sed -i -E "s/(lts_access_key: ).*/\1\"${AWS_ACCESS_KEY_ID}\"/" CRI_XCBC/group_vars/all'
+    - 'sed -i -E "s/(lts_secret_key: ).*/\1\"${AWS_SECRET_ACCESS_KEY}\"/" CRI_XCBC/group_vars/all'
+    - 'sed -i -E "s/(s3_shibboleth_bucket_name: ).*/\1\"${S3_SHIBBOLETH_BUCKET_NAME}\"/" CRI_XCBC/group_vars/all'
+    - 'sed -i -E "s/(s3_shibboleth_object_name: ).*/\1\"${S3_SHIBBOLETH_OBJECT_NAME}\"/" CRI_XCBC/group_vars/all'
+    - 'sed -i -E "s|(ssh_pub_key: ).*|\1\"{{ lookup(''file'', ''${SSH_PUB_KEY}'') }}\"|" CRI_XCBC/group_vars/all'
+    # packer commands
+    - packer init openstack-proxy
+    - packer validate openstack-proxy
+    - packer build -machine-readable openstack-proxy | tee proxy_build.log
+    - export BUILT_PROXY_IMAGE_ID=$(grep 'Image:' proxy_build.log | awk '{print $4}')
+    - echo BUILT_PROXY_IMAGE_ID=${BUILT_PROXY_IMAGE_ID} | tee -a $CI_PROJECT_DIR/image.env
+    - openstack image set --property CRI_XCBC_prod=${CRI_XCBC_prod} --property CRI_XCBC_dev=${CRI_XCBC_dev} --property PACKER_IMAGE_HEAD=${PACKER_IMAGE_HEAD} ${BUILT_PROXY_IMAGE_ID}
+  artifacts:
+    reports:
+      dotenv: image.env
+
+build_http_proxy_image:
+  stage: build
+  environment:
+    name: $ENV
+  tags:
+    - build
+  variables:
+    PROXY_NAME: "http-proxy"
+    PROXY_ENABLE_VAR: "enable_ood_proxy"
+  <<: *build_proxy_image_template
+  rules:
+    - if: $PIPELINE_TARGET == "build" && $BUILD_TARGET
+      when: always
+
+build_ssh_proxy_image:
+  stage: build
+  environment:
+    name: $ENV
+  tags:
+    - build
+  variables:
+    PROXY_NAME: "ssh-proxy"
+    PROXY_ENABLE_VAR: "enable_sshpiper"
+  <<: *build_proxy_image_template
+  rules:
+    - if: $PIPELINE_TARGET == "build" && $BUILD_TARGET
+      when: always
+
 deploy_http_proxy_node:
   stage: deploy
   environment:
-- 
GitLab


From 76fd6246b68f0611fb5330599499b67ae792142d Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Thu, 24 Oct 2024 19:05:04 -0500
Subject: [PATCH 037/172] feat: Improve naming for image built via schedule

---
 .gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c430636..e4d6eff 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -85,7 +85,7 @@ workflow:
       if [ $CI_PIPELINE_SOURCE == 'merge_request_event' ]; then
         export PKR_VAR_image_name="${PROXY_NAME}-PR-${CI_MERGE_REQUEST_IID}"
       elif [ $CI_PIPELINE_SOURCE == 'schedule' ]; then
-        export PKR_VAR_image_name="PROXY-${BUILD_DATE}"
+        export PKR_VAR_image_name="${PROXY_NAME}-${BUILD_DATE}"
       fi
     # Ansible var overrides
     - |
-- 
GitLab


From 8694aded656d2390eb784f3c9a578cab975ba05c Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Wed, 23 Oct 2024 15:58:22 -0500
Subject: [PATCH 038/172] feat: Add shell provisioner to fix yum base url

fix yum install failures by fixing the baseurl via shell provisioners
temporarily until we upgrade the base OS
---
 openstack-proxy/nodeimage.pkr.hcl | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/openstack-proxy/nodeimage.pkr.hcl b/openstack-proxy/nodeimage.pkr.hcl
index 02e94da..8d700c0 100644
--- a/openstack-proxy/nodeimage.pkr.hcl
+++ b/openstack-proxy/nodeimage.pkr.hcl
@@ -36,6 +36,13 @@ source "openstack" "image" {
 build {
   sources = ["source.openstack.image"]
 
+  provisioner "shell" {
+    inline = [
+      "sed -i 's/^mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*",
+      "sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*"
+    ]
+  }
+
   provisioner "ansible" {
     use_proxy        = false
     user             = var.ssh_username
-- 
GitLab


From e59f35f9fcdd6fab2377df7872aa19615f53df8b Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Thu, 24 Oct 2024 11:35:24 -0500
Subject: [PATCH 039/172] feat: Options for verbosity,debug ansible provisioner

---
 openstack-proxy/nodeimage.pkr.hcl |  8 +++++++-
 openstack-proxy/variables.pkr.hcl | 12 ++++++++++++
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/openstack-proxy/nodeimage.pkr.hcl b/openstack-proxy/nodeimage.pkr.hcl
index 8d700c0..18c195e 100644
--- a/openstack-proxy/nodeimage.pkr.hcl
+++ b/openstack-proxy/nodeimage.pkr.hcl
@@ -47,7 +47,13 @@ build {
     use_proxy        = false
     user             = var.ssh_username
     groups           = ["proxy"]
-    ansible_env_vars = ["ANSIBLE_TIMEOUT=60", "ANSIBLE_HOST_KEY_CHECKING=False"]
+    ansible_env_vars = [
+      "ANSIBLE_TIMEOUT=60",
+      "ANSIBLE_HOST_KEY_CHECKING=False",
+      "ANSIBLE_VERBOSITY=${var.ANSIBLE_VERBOSITY}",
+      "ANSIBLE_DEBUG=${var.ANSIBLE_DEBUG}",
+      "ANSIBLE_FORCE_COLOR=true"
+    ]
     playbook_file    = "./CRI_XCBC/proxy.yaml"
   }
 }
diff --git a/openstack-proxy/variables.pkr.hcl b/openstack-proxy/variables.pkr.hcl
index 8e78a5d..9215362 100644
--- a/openstack-proxy/variables.pkr.hcl
+++ b/openstack-proxy/variables.pkr.hcl
@@ -94,3 +94,15 @@ variable "volume_size" {
   description = "The default volume size for building iamge"
 }
 
+variable "ANSIBLE_DEBUG" {
+  type        = string
+  default     = "false"
+  description = "to turn on debugging"
+}
+
+variable "ANSIBLE_VERBOSITY" {
+  type        = string
+  default     = "0"
+  description = "to increase verbosity - 0|1|2|3|4"
+}
+
-- 
GitLab


From adbace7ed19935c63e86e1398d276708f45720f5 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Thu, 24 Oct 2024 18:41:05 -0500
Subject: [PATCH 040/172] feat: Allow editing yum repo file by adding sudo

---
 openstack-proxy/nodeimage.pkr.hcl | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/openstack-proxy/nodeimage.pkr.hcl b/openstack-proxy/nodeimage.pkr.hcl
index 18c195e..d20c2c7 100644
--- a/openstack-proxy/nodeimage.pkr.hcl
+++ b/openstack-proxy/nodeimage.pkr.hcl
@@ -38,8 +38,8 @@ build {
 
   provisioner "shell" {
     inline = [
-      "sed -i 's/^mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*",
-      "sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*"
+      "sudo sed -i 's/^mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*",
+      "sudo sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*"
     ]
   }
 
-- 
GitLab


From 14ce98438a104ee903e2b63a2034802832306cb9 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Thu, 24 Oct 2024 21:33:16 -0500
Subject: [PATCH 041/172] feat: Install packages used in depoy pipeline

---
 openstack-proxy/nodeimage.pkr.hcl | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/openstack-proxy/nodeimage.pkr.hcl b/openstack-proxy/nodeimage.pkr.hcl
index d20c2c7..54967da 100644
--- a/openstack-proxy/nodeimage.pkr.hcl
+++ b/openstack-proxy/nodeimage.pkr.hcl
@@ -39,7 +39,11 @@ build {
   provisioner "shell" {
     inline = [
       "sudo sed -i 's/^mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*",
-      "sudo sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*"
+      "sudo sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*",
+      "sudo yum install -y epel-release",
+      "sudo yum install -y libselinux-python3 python3 tmux vim git bash-completion curl wget unzip",
+      "sudo python3 -m pip install --upgrade pip",
+      "sudo pip3 install s3cmd==2.3.0 ansible==4.10.0 python-openstackclient==5.8.0"
     ]
   }
 
-- 
GitLab


From 915a28a769bc275a62857559f9d7f544d1f1b1a7 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Fri, 25 Oct 2024 12:11:57 -0500
Subject: [PATCH 042/172] refactor: Remove root pub key as it's deploy time var

---
 .gitlab-ci.yml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e4d6eff..092d212 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -23,7 +23,6 @@ variables:
   PKR_VAR_networks: '["8cf2f12e-905d-46d9-bc70-b0897c65f75a"]'
   GIT_AUTHOR_NAME: "Gitlab runner"
   GIT_AUTHOR_EMAIL: "gitlab@runner"
-  PKR_VAR_root_ssh_key: "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAFqqWgmYpEaGtHBeTu27ntVJpYjwq/x5aBefrvfhk8Z9lE3cuZ26vJ9n/9tGE4Zn2Pew1mpZgi6PzfJ3vMt8yA= root@master"
   DEV_KEY: "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBXBfBmQDq1HK8U0zK6gDF0jyfWChuFYEPiRp1Wgl0XFJU7JoUngqkE/GAic8kCzKW0hPMiweSjmWdKlAapv/dk= krishmoodbidri@krishs-MacBook-Pro-3.local"
   INSTANCE_FLAVOR: "m1.medium-ruffner"
   HTTP_PROXY_INSTANCE_NAME: "http-proxy"
-- 
GitLab


From 985552c9956048617c206b351aef7d155cb1567f Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Tue, 29 Oct 2024 02:43:51 -0400
Subject: [PATCH 043/172] feat: Run clusterhooks at deploy time for proxies

We are providing hooks into the cluster we need at deploy time rather
than baking them at build time.
This will enable us to build once and deploy across multiple clusters.
Otherwise, we need to build image whenever you need to deploy to a
different cluster.
---
 .gitlab-ci.yml | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 092d212..e52aa29 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -149,6 +149,11 @@ deploy_http_proxy_node:
       cat > user_data.txt <<EOF
       #!/bin/bash
       echo "$DEV_KEY" >> /root/.ssh/authorized_keys
+      git clone ${CI_REPOSITORY_URL} /tmp/${CI_PROJECT_NAME}
+      cd /tmp/${CI_PROJECT_NAME}
+      git checkout ${CI_COMMIT_REF_NAME}
+      ansible-playbook -c local -i 127.0.0.1, ansible/cheaha.yml | tee -a ansible.log
+      rm -rf /tmp/${CI_PROJECT_NAME}
       EOF
     - >
       export HTTP_PROXY_INSTANCE_ID=$(openstack server create
@@ -185,6 +190,11 @@ deploy_ssh_proxy_node:
       cat > user_data.txt <<EOF
       #!/bin/bash
       echo "$DEV_KEY" >> /root/.ssh/authorized_keys
+      git clone ${CI_REPOSITORY_URL} /tmp/${CI_PROJECT_NAME}
+      cd /tmp/${CI_PROJECT_NAME}
+      git checkout ${CI_COMMIT_REF_NAME}
+      ansible-playbook -c local -i 127.0.0.1, ansible/cheaha.yml | tee -a ansible.log
+      rm -rf /tmp/${CI_PROJECT_NAME}
       EOF
     - >
       export SSH_PROXY_INSTANCE_ID=$(openstack server create
-- 
GitLab


From eded233bdc7b71c241849a5dd4c8477822f12475 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Tue, 29 Oct 2024 21:18:55 -0400
Subject: [PATCH 044/172] feat: Retry task until success

---
 ansible/roles/cheaha.node/tasks/main.yml | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/ansible/roles/cheaha.node/tasks/main.yml b/ansible/roles/cheaha.node/tasks/main.yml
index c5a171f..12f098d 100644
--- a/ansible/roles/cheaha.node/tasks/main.yml
+++ b/ansible/roles/cheaha.node/tasks/main.yml
@@ -34,3 +34,7 @@
 - name: Set timezone to America/Chicago
   community.general.timezone:
     name: America/Chicago
+  retries: 3
+  delay: 3
+  register: result
+  until: not result.failed
-- 
GitLab


From 66e10ea9229c75de194e1497e9c93ec1208786c3 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Wed, 30 Oct 2024 22:14:26 -0400
Subject: [PATCH 045/172] feat: Change path to avoid ansible log deletion

---
 .gitlab-ci.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e52aa29..b626cd1 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -152,7 +152,7 @@ deploy_http_proxy_node:
       git clone ${CI_REPOSITORY_URL} /tmp/${CI_PROJECT_NAME}
       cd /tmp/${CI_PROJECT_NAME}
       git checkout ${CI_COMMIT_REF_NAME}
-      ansible-playbook -c local -i 127.0.0.1, ansible/cheaha.yml | tee -a ansible.log
+      ansible-playbook -c local -i 127.0.0.1, ansible/cheaha.yml | tee -a /tmp/ansible.log
       rm -rf /tmp/${CI_PROJECT_NAME}
       EOF
     - >
@@ -193,7 +193,7 @@ deploy_ssh_proxy_node:
       git clone ${CI_REPOSITORY_URL} /tmp/${CI_PROJECT_NAME}
       cd /tmp/${CI_PROJECT_NAME}
       git checkout ${CI_COMMIT_REF_NAME}
-      ansible-playbook -c local -i 127.0.0.1, ansible/cheaha.yml | tee -a ansible.log
+      ansible-playbook -c local -i 127.0.0.1, ansible/cheaha.yml | tee -a /tmp/ansible.log
       rm -rf /tmp/${CI_PROJECT_NAME}
       EOF
     - >
-- 
GitLab


From 5d6b1f151ce01b32b495ecf1b7354ff561b73089 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Thu, 31 Oct 2024 00:10:39 -0400
Subject: [PATCH 046/172] feat: Create multi homed proxy with fixed internal IP
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

We wanted to create a multi-homed instance connected to proxy-net and
internal-net because the nfs-mounts are shared via internal net by the server.
However, the NIC on internal-net wasn’t getting an IP assigned automatically
and this was creating an issue for NFS server to communicate with the clients.
So we created a port and assigned that port during instance creation
---
 .gitlab-ci.yml | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b626cd1..5d0c81b 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -155,10 +155,17 @@ deploy_http_proxy_node:
       ansible-playbook -c local -i 127.0.0.1, ansible/cheaha.yml | tee -a /tmp/ansible.log
       rm -rf /tmp/${CI_PROJECT_NAME}
       EOF
+    - >
+      export HTTP_PROXY_INSTANCE_PORT=$(openstack port create
+      -c id -f value --network $INTERNALNET
+      --fixed-ip subnet=$INTERNALNET_SN,ip-address=$INTERNALNET_IP
+      --disable-port-security
+      ${HTTP_PROXY_INSTANCE_NAME}_internal_port)
     - >
       export HTTP_PROXY_INSTANCE_ID=$(openstack server create
       -c id -f value --image $HTTP_PROXY_IMAGE_ID
       --network $PROXY_NETWORK
+      --port $HTTP_PROXY_INSTANCE_PORT
       --security-group webserver_sec_group
       --security-group allow-ssh
       --user-data user_data.txt
@@ -196,10 +203,17 @@ deploy_ssh_proxy_node:
       ansible-playbook -c local -i 127.0.0.1, ansible/cheaha.yml | tee -a /tmp/ansible.log
       rm -rf /tmp/${CI_PROJECT_NAME}
       EOF
+    - >
+      export SSH_PROXY_INSTANCE_PORT=$(openstack port create
+      -c id -f value --network $INTERNALNET
+      --fixed-ip subnet=$INTERNALNET_SN,ip-address=$INTERNALNET_IP
+      --disable-port-security
+      ${SSH_PROXY_INSTANCE_NAME}_internal_port)
     - >
       export SSH_PROXY_INSTANCE_ID=$(openstack server create
       -c id -f value --image $SSH_PROXY_IMAGE_ID
       --network $PROXY_NETWORK
+      --port $SSH_PROXY_INSTANCE_PORT
       --security-group allow-ssh
       --user-data user_data.txt
       --flavor $INSTANCE_FLAVOR
-- 
GitLab


From d58a3531ed59dd56bd49f452a73a092149feceb3 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Thu, 31 Oct 2024 15:13:16 -0400
Subject: [PATCH 047/172] feat: Replace default gateway to allow login

The instance creation with internal port attached was causing issues
with login because the default gateway was set to internal network
gateway. This will only allow login via headnode but not the host.
This commit will fix that issue by giving a way to define the gw ip
for default route.
---
 .gitlab-ci.yml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 5d0c81b..98fb237 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -149,6 +149,7 @@ deploy_http_proxy_node:
       cat > user_data.txt <<EOF
       #!/bin/bash
       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}
@@ -197,6 +198,7 @@ deploy_ssh_proxy_node:
       cat > user_data.txt <<EOF
       #!/bin/bash
       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}
-- 
GitLab


From 957416cc458b12c557027236e27568c62108782a Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Thu, 31 Oct 2024 18:22:07 -0400
Subject: [PATCH 048/172] feat: Remove fixed IP assignment

Avoids error that the IP has already been assigned while trying multiple
proxy deploys
---
 .gitlab-ci.yml | 2 --
 1 file changed, 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 98fb237..65d92bb 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -159,7 +159,6 @@ deploy_http_proxy_node:
     - >
       export HTTP_PROXY_INSTANCE_PORT=$(openstack port create
       -c id -f value --network $INTERNALNET
-      --fixed-ip subnet=$INTERNALNET_SN,ip-address=$INTERNALNET_IP
       --disable-port-security
       ${HTTP_PROXY_INSTANCE_NAME}_internal_port)
     - >
@@ -208,7 +207,6 @@ deploy_ssh_proxy_node:
     - >
       export SSH_PROXY_INSTANCE_PORT=$(openstack port create
       -c id -f value --network $INTERNALNET
-      --fixed-ip subnet=$INTERNALNET_SN,ip-address=$INTERNALNET_IP
       --disable-port-security
       ${SSH_PROXY_INSTANCE_NAME}_internal_port)
     - >
-- 
GitLab


From 6ebcc501f9d3a50f624a641c694ce2507dc945de Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Fri, 1 Nov 2024 13:02:18 -0500
Subject: [PATCH 049/172] removed dev_key to move var to gitlab pipeline var

---
 .gitlab-ci.yml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b626cd1..d209cdc 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -23,7 +23,6 @@ variables:
   PKR_VAR_networks: '["8cf2f12e-905d-46d9-bc70-b0897c65f75a"]'
   GIT_AUTHOR_NAME: "Gitlab runner"
   GIT_AUTHOR_EMAIL: "gitlab@runner"
-  DEV_KEY: "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBXBfBmQDq1HK8U0zK6gDF0jyfWChuFYEPiRp1Wgl0XFJU7JoUngqkE/GAic8kCzKW0hPMiweSjmWdKlAapv/dk= krishmoodbidri@krishs-MacBook-Pro-3.local"
   INSTANCE_FLAVOR: "m1.medium-ruffner"
   HTTP_PROXY_INSTANCE_NAME: "http-proxy"
   SSH_PROXY_INSTANCE_NAME: "ssh-proxy"
-- 
GitLab


From b0403a5f1965c834abb11cdf88fe3e84903d7b97 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Mon, 4 Nov 2024 12:20:40 -0600
Subject: [PATCH 050/172] fix: Mount dirs besides adding them to fstab

Otherwise, since we run this role in deploy the dirs won't be mounted
and cause unexpected behavior of applications.
---
 ansible/roles/nfs_mounts/tasks/fstab.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/ansible/roles/nfs_mounts/tasks/fstab.yml b/ansible/roles/nfs_mounts/tasks/fstab.yml
index 44c3124..100c042 100644
--- a/ansible/roles/nfs_mounts/tasks/fstab.yml
+++ b/ansible/roles/nfs_mounts/tasks/fstab.yml
@@ -7,12 +7,12 @@
   loop:
     "{{ mount_points }}"
 
-- name: Make an entry in the fstab
+- name: Mount the directories
   ansible.posix.mount:
     src: "master:{{ item }}"
     path: "{{ item }}"
     opts: rw,sync,hard
-    state: present
+    state: mounted
     fstype: nfs
   loop:
     "{{ mount_points }}"
-- 
GitLab


From 95fb35d749aaeaebbdb7eaf475d96ce59054a515 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Mon, 4 Nov 2024 16:26:32 -0600
Subject: [PATCH 051/172] feat: Add a task to template DNS config

---
 ansible/group_vars/all                             | 5 +++++
 ansible/roles/cheaha.node/tasks/main.yml           | 9 +++++++++
 ansible/roles/cheaha.node/templates/resolv.conf.j2 | 4 ++++
 3 files changed, 18 insertions(+)
 create mode 100644 ansible/roles/cheaha.node/templates/resolv.conf.j2

diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index d1d270f..e95c617 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -17,6 +17,11 @@
 # cheaha.node related
   hostname_lookup_table:
     - "10.141.255.254 master.cm.cluster master localmaster.cm.cluster localmaster ldapserver.cm.cluster ldapserver"
+  domain_search_list:
+    - openstack.internal
+    - cm.cluster
+  nameserver_list:
+    - 10.141.255.254
 
 # ldap_config related
   ldap_cert_path: "/etc/openldap/certs"
diff --git a/ansible/roles/cheaha.node/tasks/main.yml b/ansible/roles/cheaha.node/tasks/main.yml
index 12f098d..f5beccc 100644
--- a/ansible/roles/cheaha.node/tasks/main.yml
+++ b/ansible/roles/cheaha.node/tasks/main.yml
@@ -12,6 +12,15 @@
     insertbefore: BOF
     line: 'append domain-name " cm.cluster rc.uab.edu ib.cluster drac.cluster eth.cluster ib-hdr.cluster";'
 
+- name: Template resolv.conf
+  ansible.builtin.template:
+    src: resolv.conf.j2
+    dest: /etc/resolv.conf
+    owner: root
+    group: root
+    mode: 0644
+    backup: true
+
 - name: Disable SELinux
   ansible.posix.selinux:
     state: disabled
diff --git a/ansible/roles/cheaha.node/templates/resolv.conf.j2 b/ansible/roles/cheaha.node/templates/resolv.conf.j2
new file mode 100644
index 0000000..be59430
--- /dev/null
+++ b/ansible/roles/cheaha.node/templates/resolv.conf.j2
@@ -0,0 +1,4 @@
+search {{ domain_search_list | join(' ') }}
+{% for name_server in nameserver_list %}
+nameserver {{ name_server }}
+{% endfor %}
-- 
GitLab


From b9a3ea9fdfbe68bf424ea61fc4d0323781d6c348 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Mon, 4 Nov 2024 17:43:36 -0600
Subject: [PATCH 052/172] feat: Add --extra-vars option defined by variable

This will allow you to define the variables during runtime whose values
you may want to override. In this case, we want to override the DNS
config related to nameserver and search domain
---
 .gitlab-ci.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 107b611..bcacba9 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -152,7 +152,7 @@ deploy_http_proxy_node:
       git clone ${CI_REPOSITORY_URL} /tmp/${CI_PROJECT_NAME}
       cd /tmp/${CI_PROJECT_NAME}
       git checkout ${CI_COMMIT_REF_NAME}
-      ansible-playbook -c local -i 127.0.0.1, ansible/cheaha.yml | tee -a /tmp/ansible.log
+      ansible-playbook -c local -i 127.0.0.1, --extra-vars="$EXTRA_VARS" ansible/cheaha.yml | tee -a /tmp/ansible.log
       rm -rf /tmp/${CI_PROJECT_NAME}
       EOF
     - >
@@ -200,7 +200,7 @@ deploy_ssh_proxy_node:
       git clone ${CI_REPOSITORY_URL} /tmp/${CI_PROJECT_NAME}
       cd /tmp/${CI_PROJECT_NAME}
       git checkout ${CI_COMMIT_REF_NAME}
-      ansible-playbook -c local -i 127.0.0.1, ansible/cheaha.yml | tee -a /tmp/ansible.log
+      ansible-playbook -c local -i 127.0.0.1, --extra-vars="$EXTRA_VARS" ansible/cheaha.yml | tee -a /tmp/ansible.log
       rm -rf /tmp/${CI_PROJECT_NAME}
       EOF
     - >
-- 
GitLab


From 77ccf63b01fff8554658f9fe6510e8d45c6e66f7 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Mon, 4 Nov 2024 20:11:48 -0600
Subject: [PATCH 053/172] feat: Rename playbook to cluster.yml

Rename it because cheaha is not the only cluster we deploy against. So
give it a generic name.
---
 ansible/cheaha.yml => cluster.yml | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename ansible/cheaha.yml => cluster.yml (100%)

diff --git a/ansible/cheaha.yml b/cluster.yml
similarity index 100%
rename from ansible/cheaha.yml
rename to cluster.yml
-- 
GitLab


From 9727aa22292276b6d06305c0d09a818172c14382 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Wed, 6 Nov 2024 14:58:36 -0600
Subject: [PATCH 054/172] feat: enable individual build with BUILD_TARGET

---
 .gitlab-ci.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index bcacba9..2309e1f 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -118,7 +118,7 @@ build_http_proxy_image:
     PROXY_ENABLE_VAR: "enable_ood_proxy"
   <<: *build_proxy_image_template
   rules:
-    - if: $PIPELINE_TARGET == "build" && $BUILD_TARGET
+    - if: $PIPELINE_TARGET == "build" && $BUILD_TARGET == "http-proxy"
       when: always
 
 build_ssh_proxy_image:
@@ -132,7 +132,7 @@ build_ssh_proxy_image:
     PROXY_ENABLE_VAR: "enable_sshpiper"
   <<: *build_proxy_image_template
   rules:
-    - if: $PIPELINE_TARGET == "build" && $BUILD_TARGET
+    - if: $PIPELINE_TARGET == "build" && $BUILD_TARGET == "ssh-proxy"
       when: always
 
 deploy_http_proxy_node:
-- 
GitLab


From dfc09250ce55745e9a4f08e6008c3e0a09d78475 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Wed, 6 Nov 2024 14:59:22 -0600
Subject: [PATCH 055/172] refactor: reuse BUILD_TARGET variable

---
 .gitlab-ci.yml | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 2309e1f..3301d40 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -77,13 +77,13 @@ workflow:
     - *get_ansible_files
     # packer vars for job env
     - export PKR_VAR_flavor="${PROXY_BUILD_FLAVOR:-$PKR_VAR_flavor}"
-    - export PKR_VAR_build_instance_name="${PROXY_NAME}-${CRI_XCBC_HEAD}"
+    - export PKR_VAR_build_instance_name="${BUILD_TARGET}-${CRI_XCBC_HEAD}"
     - export PKR_VAR_image_date_suffix=false
     - |
       if [ $CI_PIPELINE_SOURCE == 'merge_request_event' ]; then
-        export PKR_VAR_image_name="${PROXY_NAME}-PR-${CI_MERGE_REQUEST_IID}"
+        export PKR_VAR_image_name="${BUILD_TARGET}-PR-${CI_MERGE_REQUEST_IID}"
       elif [ $CI_PIPELINE_SOURCE == 'schedule' ]; then
-        export PKR_VAR_image_name="${PROXY_NAME}-${BUILD_DATE}"
+        export PKR_VAR_image_name="${BUILD_TARGET}-${BUILD_DATE}"
       fi
     # Ansible var overrides
     - |
@@ -114,7 +114,6 @@ build_http_proxy_image:
   tags:
     - build
   variables:
-    PROXY_NAME: "http-proxy"
     PROXY_ENABLE_VAR: "enable_ood_proxy"
   <<: *build_proxy_image_template
   rules:
@@ -128,7 +127,6 @@ build_ssh_proxy_image:
   tags:
     - build
   variables:
-    PROXY_NAME: "ssh-proxy"
     PROXY_ENABLE_VAR: "enable_sshpiper"
   <<: *build_proxy_image_template
   rules:
-- 
GitLab


From 95cc85e183d7d2a3c39f0674dcdcab66310994fc Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Sat, 9 Nov 2024 01:03:02 -0600
Subject: [PATCH 056/172] fix: move cluster.yml to correct location

---
 .gitlab-ci.yml                     | 2 +-
 cluster.yml => ansible/cluster.yml | 0
 2 files changed, 1 insertion(+), 1 deletion(-)
 rename cluster.yml => ansible/cluster.yml (100%)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 3301d40..ff6bc5c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -150,7 +150,7 @@ deploy_http_proxy_node:
       git clone ${CI_REPOSITORY_URL} /tmp/${CI_PROJECT_NAME}
       cd /tmp/${CI_PROJECT_NAME}
       git checkout ${CI_COMMIT_REF_NAME}
-      ansible-playbook -c local -i 127.0.0.1, --extra-vars="$EXTRA_VARS" ansible/cheaha.yml | tee -a /tmp/ansible.log
+      ansible-playbook -c local -i 127.0.0.1, --extra-vars="$EXTRA_VARS" ansible/cluster.yml | tee -a /tmp/ansible.log
       rm -rf /tmp/${CI_PROJECT_NAME}
       EOF
     - >
diff --git a/cluster.yml b/ansible/cluster.yml
similarity index 100%
rename from cluster.yml
rename to ansible/cluster.yml
-- 
GitLab


From 318a305ace1b1aa95f28a33a25277be161fce997 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Fri, 8 Nov 2024 21:21:39 -0600
Subject: [PATCH 057/172] fix: Remove irrelevant cmds as we move to Alma

---
 openstack-proxy/nodeimage.pkr.hcl | 2 --
 1 file changed, 2 deletions(-)

diff --git a/openstack-proxy/nodeimage.pkr.hcl b/openstack-proxy/nodeimage.pkr.hcl
index 54967da..af74d59 100644
--- a/openstack-proxy/nodeimage.pkr.hcl
+++ b/openstack-proxy/nodeimage.pkr.hcl
@@ -38,8 +38,6 @@ build {
 
   provisioner "shell" {
     inline = [
-      "sudo sed -i 's/^mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*",
-      "sudo sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*",
       "sudo yum install -y epel-release",
       "sudo yum install -y libselinux-python3 python3 tmux vim git bash-completion curl wget unzip",
       "sudo python3 -m pip install --upgrade pip",
-- 
GitLab


From 78639e0f3f1bb496932d37befaf5c4263dc02f86 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Fri, 8 Nov 2024 21:27:05 -0600
Subject: [PATCH 058/172] feat: Install pip3 as its not available by default

---
 openstack-proxy/nodeimage.pkr.hcl | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/openstack-proxy/nodeimage.pkr.hcl b/openstack-proxy/nodeimage.pkr.hcl
index af74d59..e3629e1 100644
--- a/openstack-proxy/nodeimage.pkr.hcl
+++ b/openstack-proxy/nodeimage.pkr.hcl
@@ -39,7 +39,7 @@ build {
   provisioner "shell" {
     inline = [
       "sudo yum install -y epel-release",
-      "sudo yum install -y libselinux-python3 python3 tmux vim git bash-completion curl wget unzip",
+      "sudo yum install -y libselinux-python3 python3 python3-pip tmux vim git bash-completion curl wget unzip",
       "sudo python3 -m pip install --upgrade pip",
       "sudo pip3 install s3cmd==2.3.0 ansible==4.10.0 python-openstackclient==5.8.0"
     ]
-- 
GitLab


From c7d2b924d9463abe272296244c96985373b8eac0 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Fri, 8 Nov 2024 23:51:48 -0600
Subject: [PATCH 059/172] feat: Enable CRB repository in almalinux for epel

Many EPEL packages require the CodeReady Builder (CRB) repository
It is recommended that you run /usr/bin/crb enable to enable the
CRB repository.
---
 openstack-proxy/nodeimage.pkr.hcl | 1 +
 1 file changed, 1 insertion(+)

diff --git a/openstack-proxy/nodeimage.pkr.hcl b/openstack-proxy/nodeimage.pkr.hcl
index e3629e1..fc1a471 100644
--- a/openstack-proxy/nodeimage.pkr.hcl
+++ b/openstack-proxy/nodeimage.pkr.hcl
@@ -39,6 +39,7 @@ build {
   provisioner "shell" {
     inline = [
       "sudo yum install -y epel-release",
+      "sudo dnf config-manager --set-enabled crb",
       "sudo yum install -y libselinux-python3 python3 python3-pip tmux vim git bash-completion curl wget unzip",
       "sudo python3 -m pip install --upgrade pip",
       "sudo pip3 install s3cmd==2.3.0 ansible==4.10.0 python-openstackclient==5.8.0"
-- 
GitLab


From 499418996875299aad6cedfd2872d1e26f6921be Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Sat, 9 Nov 2024 01:27:02 -0600
Subject: [PATCH 060/172] refactor: Remove irrrelevant role as we move to Alma

---
 ansible/cluster.yml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/ansible/cluster.yml b/ansible/cluster.yml
index 910268e..ef6c952 100644
--- a/ansible/cluster.yml
+++ b/ansible/cluster.yml
@@ -3,7 +3,6 @@
   hosts: all
   become: true
   roles:
-    - { name: 'fix_centos_repo', tags: 'fix_centos_repo' }
     - { name: 'cheaha.node', tags: 'cheaha.node' }
     - { name: 'nfs_mounts', tags: 'nfs_mounts' }
     - { name: 'ldap_config', tags: 'ldap_config' }
-- 
GitLab


From a99fd3927007dc34439414f0137dd70233813308 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Wed, 13 Nov 2024 09:41:51 -0600
Subject: [PATCH 061/172] feat: deploy environment as variable

---
 .gitlab-ci.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index ff6bc5c..d2bf24f 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -136,7 +136,7 @@ build_ssh_proxy_image:
 deploy_http_proxy_node:
   stage: deploy
   environment:
-    name: staging
+    name: $ENV
   tags:
     - build
   script:
@@ -184,7 +184,7 @@ deploy_http_proxy_node:
 deploy_ssh_proxy_node:
   stage: deploy
   environment:
-    name: staging
+    name: $ENV
   tags:
     - build
   script:
-- 
GitLab


From 1b062024e336ac40617b52a33a4bd11412371c67 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Wed, 13 Nov 2024 16:04:37 -0600
Subject: [PATCH 062/172] fix: create dhclient.conf if not exists

---
 ansible/roles/cheaha.node/tasks/main.yml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/ansible/roles/cheaha.node/tasks/main.yml b/ansible/roles/cheaha.node/tasks/main.yml
index f5beccc..c4c9335 100644
--- a/ansible/roles/cheaha.node/tasks/main.yml
+++ b/ansible/roles/cheaha.node/tasks/main.yml
@@ -11,6 +11,8 @@
     path: /etc/dhcp/dhclient.conf
     insertbefore: BOF
     line: 'append domain-name " cm.cluster rc.uab.edu ib.cluster drac.cluster eth.cluster ib-hdr.cluster";'
+    create: true
+    state: present
 
 - name: Template resolv.conf
   ansible.builtin.template:
-- 
GitLab


From 35a69ddb0fb8118deed5d9bf3ae0ad8b1eb8f0aa Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Thu, 14 Nov 2024 15:12:47 -0600
Subject: [PATCH 063/172] feat: remove auto create floating ip

---
 .gitlab-ci.yml | 8 --------
 1 file changed, 8 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d2bf24f..72218d1 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -169,10 +169,6 @@ deploy_http_proxy_node:
       --flavor $INSTANCE_FLAVOR
       --wait
       $HTTP_PROXY_INSTANCE_NAME)
-    - |
-      # Create and assign a floating IP to the HTTP Proxy instance
-      HTTP_PROXY_FLOATING_IP=$(openstack floating ip create $PKR_VAR_floating_ip_network -f value -c floating_ip_address)
-      echo "Created FLOATING_IP: $HTTP_PROXY_FLOATING_IP"
     - |
       # Associate the floating IP with the HTTP Proxy instance
       openstack server add floating ip $HTTP_PROXY_INSTANCE_ID $HTTP_PROXY_FLOATING_IP
@@ -216,10 +212,6 @@ deploy_ssh_proxy_node:
       --flavor $INSTANCE_FLAVOR
       --wait
       $SSH_PROXY_INSTANCE_NAME)
-    - |
-      # Create and assign a floating IP to the SSH Proxy instance
-      SSH_PROXY_FLOATING_IP=$(openstack floating ip create $PKR_VAR_floating_ip_network -f value -c floating_ip_address)
-      echo "Created SSH_PROXY_FLOATING_IP: $SSH_PROXY_FLOATING_IP"
     - |
       # Associate the floating IP with the SSH Proxy instance
       openstack server add floating ip $SSH_PROXY_INSTANCE_ID $SSH_PROXY_FLOATING_IP
-- 
GitLab


From 1049ecd993b53872e6bedac83e927cf17bbe4c9b Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Thu, 14 Nov 2024 15:24:00 -0600
Subject: [PATCH 064/172] feat(ssh_host_keys): add role for managing SSH host
 keys

- Ensure the `/tmp/ssh_keys` directory exists.
- Download SSH host keys from S3 and unpack them to `/etc/ssh`.
- Restart the SSH service to apply the new keys.
- Add necessary variables for S3 and AWS credentials in `groupvars/all`.
- Include `ssh_host_keys` role in `cluster.yml` playbook.
---
 ansible/cluster.yml                        |  1 +
 ansible/group_vars/all                     |  9 ++++++
 ansible/roles/ssh_host_keys/tasks/main.yml | 33 ++++++++++++++++++++++
 3 files changed, 43 insertions(+)
 create mode 100644 ansible/roles/ssh_host_keys/tasks/main.yml

diff --git a/ansible/cluster.yml b/ansible/cluster.yml
index ef6c952..3197a11 100644
--- a/ansible/cluster.yml
+++ b/ansible/cluster.yml
@@ -7,3 +7,4 @@
     - { name: 'nfs_mounts', tags: 'nfs_mounts' }
     - { name: 'ldap_config', tags: 'ldap_config' }
     - { name: 'slurm_client', tags: 'slurm_client', when: enable_slurm_client }
+    - { name: 'ssh_host_keys', tags: 'ssh_host_keys' }
diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index e95c617..f1b531b 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -33,3 +33,12 @@
     - /gpfs4
     - /gpfs5
 
+#SSH Host Keys
+  s3_endpoint: ""
+  ssh_host_keys_s3_bucket: ""
+  ssh_host_keys_s3_object: ""
+
+# AWS credentials
+  lts_access_key: ""
+  lts_secret_key: ""
+
diff --git a/ansible/roles/ssh_host_keys/tasks/main.yml b/ansible/roles/ssh_host_keys/tasks/main.yml
new file mode 100644
index 0000000..cec0cb1
--- /dev/null
+++ b/ansible/roles/ssh_host_keys/tasks/main.yml
@@ -0,0 +1,33 @@
+---
+- name: Ensure destination directory exists only if not present
+  file:
+    path: /tmp/ssh_keys
+    state: directory
+    mode: '0755'
+  args:
+    creates: /tmp/ssh_keys
+
+- name: Download SSH host keys tar.gz from S3
+  aws_s3:
+    mode: get
+    s3_url: "{{ s3_endpoint }}"
+    bucket: "{{ ssh_host_keys_s3_bucket }}"
+    object: "{{ ssh_host_keys_s3_object }}"
+    dest: "/tmp/ssh_keys/{{ ssh_host_keys_s3_object }}"
+    aws_access_key: "{{ lts_access_key }}"
+    aws_secret_key: "{{ lts_secret_key }}"
+  vars:
+    ansible_python_interpreter: /usr/bin/python3
+
+- name: Unpack SSH host keys to /etc/ssh
+  unarchive:
+    src: "/tmp/ssh_keys/{{ ssh_host_keys_s3_object }}"
+    dest: "/etc/ssh"
+    remote_src: yes
+  become: true
+
+- name: Restart SSH service
+  ansible.builtin.service:
+    name: sshd
+    state: restarted
+  become: true
\ No newline at end of file
-- 
GitLab


From 3e3aa063ba4912bca06187b4e3f61e845946ba0b Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Thu, 14 Nov 2024 16:20:54 -0600
Subject: [PATCH 065/172] feat: remove auto create internal net port

---
 .gitlab-ci.yml | 52 ++++++++++++++++++++------------------------------
 1 file changed, 21 insertions(+), 31 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 72218d1..993cc48 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -153,22 +153,17 @@ deploy_http_proxy_node:
       ansible-playbook -c local -i 127.0.0.1, --extra-vars="$EXTRA_VARS" ansible/cluster.yml | tee -a /tmp/ansible.log
       rm -rf /tmp/${CI_PROJECT_NAME}
       EOF
-    - >
-      export HTTP_PROXY_INSTANCE_PORT=$(openstack port create
-      -c id -f value --network $INTERNALNET
-      --disable-port-security
-      ${HTTP_PROXY_INSTANCE_NAME}_internal_port)
-    - >
-      export HTTP_PROXY_INSTANCE_ID=$(openstack server create
-      -c id -f value --image $HTTP_PROXY_IMAGE_ID
-      --network $PROXY_NETWORK
-      --port $HTTP_PROXY_INSTANCE_PORT
-      --security-group webserver_sec_group
-      --security-group allow-ssh
-      --user-data user_data.txt
-      --flavor $INSTANCE_FLAVOR
-      --wait
-      $HTTP_PROXY_INSTANCE_NAME)
+    - |
+      export cmd="openstack server create"
+      cmd+=" -c id -f value --image $HTTP_PROXY_IMAGE_ID"
+      cmd+=" --flavor $INSTANCE_FLAVOR"
+      cmd+=" --network $PROXY_NETWORK"
+      cmd+=" --security-group webserver_sec_group"
+      cmd+=" --security-group allow-ssh"
+      cmd+=" --user-data user_data.txt"
+      if [ -n $HTTP_PROXY_PORT ];then cmd+=" --port $HTTP_PROXY_PORT" fi
+      cmd+=" --wait $HTTP_PROXY_INSTANCE_NAME"
+    - export HTTP_PROXY_INSTANCE_ID=$(bash -c "$cmd")
     - |
       # Associate the floating IP with the HTTP Proxy instance
       openstack server add floating ip $HTTP_PROXY_INSTANCE_ID $HTTP_PROXY_FLOATING_IP
@@ -197,21 +192,16 @@ deploy_ssh_proxy_node:
       ansible-playbook -c local -i 127.0.0.1, --extra-vars="$EXTRA_VARS" ansible/cheaha.yml | tee -a /tmp/ansible.log
       rm -rf /tmp/${CI_PROJECT_NAME}
       EOF
-    - >
-      export SSH_PROXY_INSTANCE_PORT=$(openstack port create
-      -c id -f value --network $INTERNALNET
-      --disable-port-security
-      ${SSH_PROXY_INSTANCE_NAME}_internal_port)
-    - >
-      export SSH_PROXY_INSTANCE_ID=$(openstack server create
-      -c id -f value --image $SSH_PROXY_IMAGE_ID
-      --network $PROXY_NETWORK
-      --port $SSH_PROXY_INSTANCE_PORT
-      --security-group allow-ssh
-      --user-data user_data.txt
-      --flavor $INSTANCE_FLAVOR
-      --wait
-      $SSH_PROXY_INSTANCE_NAME)
+    - |
+      export cmd="openstack server create"
+      cmd+=" -c id -f value --image $SSH_PROXY_IMAGE_ID"
+      cmd+=" --flavor $INSTANCE_FLAVOR"
+      cmd+=" --network $PROXY_NETWORK"
+      cmd+=" --security-group allow-ssh"
+      cmd+=" --user-data user_data.txt"
+      if [ -n $SSH_PROXY_PORT ];then cmd+=" --port $SSH_PROXY_PORT" fi
+      cmd+=" --wait $SSH_PROXY_INSTANCE_NAME"
+    - export SSH_PROXY_INSTANCE_ID=$(bash -c "$cmd")
     - |
       # Associate the floating IP with the SSH Proxy instance
       openstack server add floating ip $SSH_PROXY_INSTANCE_ID $SSH_PROXY_FLOATING_IP
-- 
GitLab


From d10875b8e5078254924b91a820e0e434b0cc6fcb Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Thu, 14 Nov 2024 18:43:08 -0600
Subject: [PATCH 066/172] fix: add missing semicolon

---
 .gitlab-ci.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 993cc48..4aaf749 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -161,7 +161,7 @@ deploy_http_proxy_node:
       cmd+=" --security-group webserver_sec_group"
       cmd+=" --security-group allow-ssh"
       cmd+=" --user-data user_data.txt"
-      if [ -n $HTTP_PROXY_PORT ];then cmd+=" --port $HTTP_PROXY_PORT" fi
+      if [ -n $HTTP_PROXY_PORT ];then cmd+=" --port $HTTP_PROXY_PORT"; fi
       cmd+=" --wait $HTTP_PROXY_INSTANCE_NAME"
     - export HTTP_PROXY_INSTANCE_ID=$(bash -c "$cmd")
     - |
@@ -199,7 +199,7 @@ deploy_ssh_proxy_node:
       cmd+=" --network $PROXY_NETWORK"
       cmd+=" --security-group allow-ssh"
       cmd+=" --user-data user_data.txt"
-      if [ -n $SSH_PROXY_PORT ];then cmd+=" --port $SSH_PROXY_PORT" fi
+      if [ -n $SSH_PROXY_PORT ];then cmd+=" --port $SSH_PROXY_PORT"; fi
       cmd+=" --wait $SSH_PROXY_INSTANCE_NAME"
     - export SSH_PROXY_INSTANCE_ID=$(bash -c "$cmd")
     - |
-- 
GitLab


From 1160137d907f1097260cffcf1d91fe3aadc5db97 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Thu, 14 Nov 2024 19:25:20 -0600
Subject: [PATCH 067/172] fix: add missing quote around variable

---
 .gitlab-ci.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4aaf749..157a200 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -161,7 +161,7 @@ deploy_http_proxy_node:
       cmd+=" --security-group webserver_sec_group"
       cmd+=" --security-group allow-ssh"
       cmd+=" --user-data user_data.txt"
-      if [ -n $HTTP_PROXY_PORT ];then cmd+=" --port $HTTP_PROXY_PORT"; fi
+      if [ -n "$HTTP_PROXY_PORT" ];then cmd+=" --port $HTTP_PROXY_PORT"; fi
       cmd+=" --wait $HTTP_PROXY_INSTANCE_NAME"
     - export HTTP_PROXY_INSTANCE_ID=$(bash -c "$cmd")
     - |
@@ -199,7 +199,7 @@ deploy_ssh_proxy_node:
       cmd+=" --network $PROXY_NETWORK"
       cmd+=" --security-group allow-ssh"
       cmd+=" --user-data user_data.txt"
-      if [ -n $SSH_PROXY_PORT ];then cmd+=" --port $SSH_PROXY_PORT"; fi
+      if [ -n "$SSH_PROXY_PORT" ];then cmd+=" --port $SSH_PROXY_PORT"; fi
       cmd+=" --wait $SSH_PROXY_INSTANCE_NAME"
     - export SSH_PROXY_INSTANCE_ID=$(bash -c "$cmd")
     - |
-- 
GitLab


From db3e4cf2eb3caa9fd55da87b12d3bf23692a52a2 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Thu, 14 Nov 2024 20:08:05 -0600
Subject: [PATCH 068/172] fix: change variable for enable proxy build

---
 .gitlab-ci.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d2bf24f..0d879fa 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -114,7 +114,7 @@ build_http_proxy_image:
   tags:
     - build
   variables:
-    PROXY_ENABLE_VAR: "enable_ood_proxy"
+    PROXY_ENABLE_VAR: "enable_http_proxy"
   <<: *build_proxy_image_template
   rules:
     - if: $PIPELINE_TARGET == "build" && $BUILD_TARGET == "http-proxy"
@@ -127,7 +127,7 @@ build_ssh_proxy_image:
   tags:
     - build
   variables:
-    PROXY_ENABLE_VAR: "enable_sshpiper"
+    PROXY_ENABLE_VAR: "enable_ssh_proxy"
   <<: *build_proxy_image_template
   rules:
     - if: $PIPELINE_TARGET == "build" && $BUILD_TARGET == "ssh-proxy"
-- 
GitLab


From 1e56b08603993d1721430024002ada4f651d41bb Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Fri, 15 Nov 2024 11:53:39 -0600
Subject: [PATCH 069/172] fix: update cluster hook playbook name

---
 .gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 0d879fa..f2a62ee 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -198,7 +198,7 @@ deploy_ssh_proxy_node:
       git clone ${CI_REPOSITORY_URL} /tmp/${CI_PROJECT_NAME}
       cd /tmp/${CI_PROJECT_NAME}
       git checkout ${CI_COMMIT_REF_NAME}
-      ansible-playbook -c local -i 127.0.0.1, --extra-vars="$EXTRA_VARS" ansible/cheaha.yml | tee -a /tmp/ansible.log
+      ansible-playbook -c local -i 127.0.0.1, --extra-vars="$EXTRA_VARS" ansible/cluster.yml | tee -a /tmp/ansible.log
       rm -rf /tmp/${CI_PROJECT_NAME}
       EOF
     - >
-- 
GitLab


From ca6753c06a3a327cd499283d8f2e7399c344d064 Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Fri, 15 Nov 2024 12:07:28 -0600
Subject: [PATCH 070/172] change variable names to uppercase for consistency

---
 ansible/group_vars/all                     | 11 +++++------
 ansible/roles/ssh_host_keys/tasks/main.yml | 16 ++++++++--------
 2 files changed, 13 insertions(+), 14 deletions(-)

diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index f1b531b..59f6612 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -34,11 +34,10 @@
     - /gpfs5
 
 #SSH Host Keys
-  s3_endpoint: ""
-  ssh_host_keys_s3_bucket: ""
-  ssh_host_keys_s3_object: ""
+  S3_ENDPOINT: ""
+  SSH_HOST_KEYS_S3_BUCKET: ""
+  SSH_HOST_KEYS_S3_OBJECT: ""
 
 # AWS credentials
-  lts_access_key: ""
-  lts_secret_key: ""
-
+  LTS_ACCESS_KEY: ""
+  LTS_SECRET_KEY: ""
diff --git a/ansible/roles/ssh_host_keys/tasks/main.yml b/ansible/roles/ssh_host_keys/tasks/main.yml
index cec0cb1..aed8c62 100644
--- a/ansible/roles/ssh_host_keys/tasks/main.yml
+++ b/ansible/roles/ssh_host_keys/tasks/main.yml
@@ -10,18 +10,18 @@
 - name: Download SSH host keys tar.gz from S3
   aws_s3:
     mode: get
-    s3_url: "{{ s3_endpoint }}"
-    bucket: "{{ ssh_host_keys_s3_bucket }}"
-    object: "{{ ssh_host_keys_s3_object }}"
-    dest: "/tmp/ssh_keys/{{ ssh_host_keys_s3_object }}"
-    aws_access_key: "{{ lts_access_key }}"
-    aws_secret_key: "{{ lts_secret_key }}"
+    s3_url: "{{ S3_ENDPOINT }}"
+    bucket: "{{ SSH_HOST_KEYS_S3_BUCKET }}"
+    object: "{{ SSH_HOST_KEYS_S3_OBJECT }}"
+    dest: "/tmp/ssh_keys/{{ SSH_HOST_KEYS_S3_OBJECT }}"
+    aws_access_key: "{{ LTS_ACCESS_KEY }}"
+    aws_secret_key: "{{ LTS_SECRET_KEY }}"
   vars:
     ansible_python_interpreter: /usr/bin/python3
 
 - name: Unpack SSH host keys to /etc/ssh
   unarchive:
-    src: "/tmp/ssh_keys/{{ ssh_host_keys_s3_object }}"
+    src: "/tmp/ssh_keys/{{ SSH_HOST_KEYS_S3_OBJECT }}"
     dest: "/etc/ssh"
     remote_src: yes
   become: true
@@ -30,4 +30,4 @@
   ansible.builtin.service:
     name: sshd
     state: restarted
-  become: true
\ No newline at end of file
+  become: true
-- 
GitLab


From 692379cbd1d1e56c78e9ab15c565abf9b568361c Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Fri, 15 Nov 2024 13:06:00 -0600
Subject: [PATCH 071/172] feat: dynamic create hosts inventory file

---
 .gitlab-ci.yml | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 315d483..b51e4eb 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -189,7 +189,11 @@ deploy_ssh_proxy_node:
       git clone ${CI_REPOSITORY_URL} /tmp/${CI_PROJECT_NAME}
       cd /tmp/${CI_PROJECT_NAME}
       git checkout ${CI_COMMIT_REF_NAME}
-      ansible-playbook -c local -i 127.0.0.1, --extra-vars="$EXTRA_VARS" ansible/cluster.yml | tee -a /tmp/ansible.log
+      cat >> ansible/hosts<<EEOF
+      [$ENV]
+      127.0.0.1
+      EEOF
+      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
     - |
-- 
GitLab


From fd4a29078a66c5d11becf9ec548ddeb3541539ac Mon Sep 17 00:00:00 2001
From: Bo-Chun Chen <louistw@uab.edu>
Date: Fri, 15 Nov 2024 13:54:54 -0600
Subject: [PATCH 072/172] fix: remove incorrect args

---
 ansible/roles/ssh_host_keys/tasks/main.yml | 2 --
 1 file changed, 2 deletions(-)

diff --git a/ansible/roles/ssh_host_keys/tasks/main.yml b/ansible/roles/ssh_host_keys/tasks/main.yml
index aed8c62..b163bc7 100644
--- a/ansible/roles/ssh_host_keys/tasks/main.yml
+++ b/ansible/roles/ssh_host_keys/tasks/main.yml
@@ -4,8 +4,6 @@
     path: /tmp/ssh_keys
     state: directory
     mode: '0755'
-  args:
-    creates: /tmp/ssh_keys
 
 - name: Download SSH host keys tar.gz from S3
   aws_s3:
-- 
GitLab


From 483f2975663e681d39c030dd5b616eb108122774 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Fri, 15 Nov 2024 14:44:00 -0600
Subject: [PATCH 073/172] fix: install boto3

---
 ansible/roles/ssh_host_keys/tasks/main.yml | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/ansible/roles/ssh_host_keys/tasks/main.yml b/ansible/roles/ssh_host_keys/tasks/main.yml
index b163bc7..0a9632e 100644
--- a/ansible/roles/ssh_host_keys/tasks/main.yml
+++ b/ansible/roles/ssh_host_keys/tasks/main.yml
@@ -5,6 +5,12 @@
     state: directory
     mode: '0755'
 
+- name: Install require package
+  ansible.builtin.pip:
+    name: boto3
+    extra_args: "--extra-index-url https://pypi.python.org/simple"
+    executable: "/usr/bin/pip3"
+
 - name: Download SSH host keys tar.gz from S3
   aws_s3:
     mode: get
-- 
GitLab


From 3365b04cfa665f11148d9bdc2adf7175cd7ab52a Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Fri, 15 Nov 2024 16:47:57 -0600
Subject: [PATCH 074/172] fix: disable dns for NetworkManager

---
 .gitlab-ci.yml | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 315d483..8f5e55f 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -145,6 +145,11 @@ deploy_http_proxy_node:
     - |
       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}
@@ -184,6 +189,11 @@ deploy_ssh_proxy_node:
     - |
       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}
-- 
GitLab


From 62eaf4d8813cfb96e54395056d5c658f599b93c6 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Fri, 22 Nov 2024 14:55:32 -0600
Subject: [PATCH 075/172] feat: add enable_nfs_mount variable

---
 ansible/group_vars/all | 1 +
 1 file changed, 1 insertion(+)

diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index 59f6612..93553d5 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -28,6 +28,7 @@
   ldap_uri: "ldap://ldapserver"
 
 # nfs_mounts related
+  enable_nfs_mounts: false
   use_autofs: false
   mount_points:
     - /gpfs4
-- 
GitLab


From 8b59b7646f6a86bc7d8295b60a8a269e980e2569 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Fri, 22 Nov 2024 14:57:16 -0600
Subject: [PATCH 076/172] feat: add when condition to nfs mount in cluster hook

---
 ansible/cluster.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ansible/cluster.yml b/ansible/cluster.yml
index 3197a11..609d2fa 100644
--- a/ansible/cluster.yml
+++ b/ansible/cluster.yml
@@ -4,7 +4,7 @@
   become: true
   roles:
     - { name: 'cheaha.node', tags: 'cheaha.node' }
-    - { name: 'nfs_mounts', tags: 'nfs_mounts' }
+    - { name: 'nfs_mounts', tags: 'nfs_mounts', when: enable_nfs_mounts }
     - { name: 'ldap_config', tags: 'ldap_config' }
     - { name: 'slurm_client', tags: 'slurm_client', when: enable_slurm_client }
     - { name: 'ssh_host_keys', tags: 'ssh_host_keys' }
-- 
GitLab


From b21010dd5f1304fdc7cb33791a960dbba3e2b399 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Fri, 22 Nov 2024 15:00:55 -0600
Subject: [PATCH 077/172] refactor: change default of nfs switch to true

---
 ansible/group_vars/all | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index 93553d5..4f9f406 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -28,7 +28,7 @@
   ldap_uri: "ldap://ldapserver"
 
 # nfs_mounts related
-  enable_nfs_mounts: false
+  enable_nfs_mounts: ture
   use_autofs: false
   mount_points:
     - /gpfs4
-- 
GitLab


From 6e1633d9d22f920e3e699cc37b0dd96e5da13a47 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Fri, 22 Nov 2024 16:15:24 -0500
Subject: [PATCH 078/172] feat: Define group based on var ENV for localhost

---
 .gitlab-ci.yml | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index a0b3c43..5ce1f8c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -155,7 +155,11 @@ deploy_http_proxy_node:
       git clone ${CI_REPOSITORY_URL} /tmp/${CI_PROJECT_NAME}
       cd /tmp/${CI_PROJECT_NAME}
       git checkout ${CI_COMMIT_REF_NAME}
-      ansible-playbook -c local -i 127.0.0.1, --extra-vars="$EXTRA_VARS" ansible/cluster.yml | tee -a /tmp/ansible.log
+      cat >> ansible/hosts<<EEOF
+      [$ENV]
+      127.0.0.1
+      EEOF
+      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
     - |
-- 
GitLab


From 771c2fc387bc5ba74979de7a596c5b21bf23cc5d Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Fri, 22 Nov 2024 15:23:17 -0600
Subject: [PATCH 079/172] fix: typo

---
 ansible/group_vars/all | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index 4f9f406..3e4327a 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -28,7 +28,7 @@
   ldap_uri: "ldap://ldapserver"
 
 # nfs_mounts related
-  enable_nfs_mounts: ture
+  enable_nfs_mounts: true
   use_autofs: false
   mount_points:
     - /gpfs4
-- 
GitLab


From f9d73d57d8ea2581082ce177b88bc0e502f21b20 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Fri, 22 Nov 2024 15:31:29 -0600
Subject: [PATCH 080/172] feat: update structure of mount_points variable

Now as a dictionary that includes:
- src: mount source
- path: mount path
- opts: mount options
---
 ansible/group_vars/all                   | 4 ++--
 ansible/roles/nfs_mounts/tasks/fstab.yml | 8 ++++----
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index 59f6612..48c6de8 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -30,8 +30,8 @@
 # nfs_mounts related
   use_autofs: false
   mount_points:
-    - /gpfs4
-    - /gpfs5
+    - { "src": "master:/gpfs4", "path": "/gpfs4", "opts": "rw,sync,hard" }
+    - { "src": "master:/gpfs5", "path": "/gpfs5", "opts": "rw,sync,hard" }
 
 #SSH Host Keys
   S3_ENDPOINT: ""
diff --git a/ansible/roles/nfs_mounts/tasks/fstab.yml b/ansible/roles/nfs_mounts/tasks/fstab.yml
index 100c042..6b1a1d2 100644
--- a/ansible/roles/nfs_mounts/tasks/fstab.yml
+++ b/ansible/roles/nfs_mounts/tasks/fstab.yml
@@ -1,7 +1,7 @@
 ---
 - name: Create base directories
   ansible.builtin.file:
-    path: "{{ item }}"
+    path: "{{ item.path }}"
     state: directory
     mode: '0755'
   loop:
@@ -9,9 +9,9 @@
 
 - name: Mount the directories
   ansible.posix.mount:
-    src: "master:{{ item }}"
-    path: "{{ item }}"
-    opts: rw,sync,hard
+    src: "{{ item.src }}"
+    path: "{{ item.path }}"
+    opts: "{{ item.opts }}"
     state: mounted
     fstype: nfs
   loop:
-- 
GitLab


From a1fa74e93d5ecf80b4c927c1c19825b3258b0616 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Fri, 22 Nov 2024 15:54:55 -0600
Subject: [PATCH 081/172] feat: make the nfs mount default to ro

---
 ansible/group_vars/all | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index 48c6de8..d11412d 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -30,8 +30,8 @@
 # nfs_mounts related
   use_autofs: false
   mount_points:
-    - { "src": "master:/gpfs4", "path": "/gpfs4", "opts": "rw,sync,hard" }
-    - { "src": "master:/gpfs5", "path": "/gpfs5", "opts": "rw,sync,hard" }
+    - { "src": "master:/gpfs4", "path": "/gpfs4", "opts": "ro,sync,hard" }
+    - { "src": "master:/gpfs5", "path": "/gpfs5", "opts": "ro,sync,hard" }
 
 #SSH Host Keys
   S3_ENDPOINT: ""
-- 
GitLab


From 929e9d2db64e99b97bab4217819204c118af9579 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Fri, 22 Nov 2024 15:56:42 -0600
Subject: [PATCH 082/172] feat: add mode in variable

---
 ansible/group_vars/all                   | 4 ++--
 ansible/roles/nfs_mounts/tasks/fstab.yml | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index d11412d..a1356bb 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -30,8 +30,8 @@
 # nfs_mounts related
   use_autofs: false
   mount_points:
-    - { "src": "master:/gpfs4", "path": "/gpfs4", "opts": "ro,sync,hard" }
-    - { "src": "master:/gpfs5", "path": "/gpfs5", "opts": "ro,sync,hard" }
+    - { "src": "master:/gpfs4", "path": "/gpfs4", "opts": "ro,sync,hard", "mode": "0755" }
+    - { "src": "master:/gpfs5", "path": "/gpfs5", "opts": "ro,sync,hard", "mode": "0755" }
 
 #SSH Host Keys
   S3_ENDPOINT: ""
diff --git a/ansible/roles/nfs_mounts/tasks/fstab.yml b/ansible/roles/nfs_mounts/tasks/fstab.yml
index 6b1a1d2..abfa827 100644
--- a/ansible/roles/nfs_mounts/tasks/fstab.yml
+++ b/ansible/roles/nfs_mounts/tasks/fstab.yml
@@ -3,7 +3,7 @@
   ansible.builtin.file:
     path: "{{ item.path }}"
     state: directory
-    mode: '0755'
+    mode: "{{ item.mode }}"
   loop:
     "{{ mount_points }}"
 
-- 
GitLab


From b1801275c5335ca2e39a943acd26b3a937eea370 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Fri, 22 Nov 2024 17:05:48 -0500
Subject: [PATCH 083/172] feat: Assign multiple Floating IPs when needed

Define Floating IPs as a list so that we can assign multiple
whenever needed like in prod
---
 .gitlab-ci.yml | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 5ce1f8c..2021b76 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -174,9 +174,12 @@ deploy_http_proxy_node:
       cmd+=" --wait $HTTP_PROXY_INSTANCE_NAME"
     - export HTTP_PROXY_INSTANCE_ID=$(bash -c "$cmd")
     - |
-      # Associate the floating IP with the HTTP Proxy instance
-      openstack server add floating ip $HTTP_PROXY_INSTANCE_ID $HTTP_PROXY_FLOATING_IP
-      echo "Associated FLOATING_IP $HTTP_PROXY_FLOATING_IP with HTTP_PROXY_INSTANCE_ID $HTTP_PROXY_INSTANCE_ID"
+      # Associate the floating IP(s) with the HTTP Proxy instance
+      for HTTP_PROXY_FLOATING_IP in ${HTTP_PROXY_FLOATING_IP_LIST[@]};
+      do
+        openstack server add floating ip $HTTP_PROXY_INSTANCE_ID $HTTP_PROXY_FLOATING_IP
+        echo "Associated FLOATING_IP $HTTP_PROXY_FLOATING_IP with HTTP_PROXY_INSTANCE_ID $HTTP_PROXY_INSTANCE_ID"
+      done
   rules:
     - if: $PIPELINE_TARGET == "deploy" && $HTTP_PROXY_IMAGE_ID
       when: always
@@ -221,9 +224,12 @@ deploy_ssh_proxy_node:
       cmd+=" --wait $SSH_PROXY_INSTANCE_NAME"
     - export SSH_PROXY_INSTANCE_ID=$(bash -c "$cmd")
     - |
-      # Associate the floating IP with the SSH Proxy instance
-      openstack server add floating ip $SSH_PROXY_INSTANCE_ID $SSH_PROXY_FLOATING_IP
-      echo "Associated FLOATING_IP $SSH_PROXY_FLOATING_IP with SSH_PROXY_INSTANCE_ID $SSH_PROXY_INSTANCE_ID"
+      # Associate the floating IP(s) with the SSH Proxy instance
+      for SSH_PROXY_FLOATING_IP in ${SSH_PROXY_FLOATING_IP_LIST[@]};
+      do
+        openstack server add floating ip $SSH_PROXY_INSTANCE_ID $SSH_PROXY_FLOATING_IP
+        echo "Associated FLOATING_IP $SSH_PROXY_FLOATING_IP with SSH_PROXY_INSTANCE_ID $SSH_PROXY_INSTANCE_ID"
+      done
   rules:
     - if: $PIPELINE_TARGET == "deploy" && $SSH_PROXY_IMAGE_ID
       when: always
-- 
GitLab


From 60780aca79907fedead02122a37398fe4dea4c0d Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Sun, 24 Nov 2024 17:09:54 -0500
Subject: [PATCH 084/172] feat: Add search domains and nameserver for prod

---
 ansible/group_vars/prod | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/ansible/group_vars/prod b/ansible/group_vars/prod
index ee662aa..7c7964e 100644
--- a/ansible/group_vars/prod
+++ b/ansible/group_vars/prod
@@ -1,8 +1,18 @@
 ---
+  # cheaha.node related
   hostname_lookup_table:
     - "172.20.0.24 cheaha-master02.cm.cluster cheaha-master02"
     - "172.20.0.22 cheaha-master01.cm.cluster cheaha-master01"
     - "172.20.0.25 master.cm.cluster master localmaster.cm.cluster localmaster ldapserver.cm.cluster ldapserver"
+  domain_search_list:
+    - cm.cluster
+    - rc.uab.edu
+    - ib.cluster
+    - drac.cluster
+    - eth.cluster
+    - ib-hdr.cluster
+  nameserver_list:
+    - 172.20.0.25
 
   bright_openldap_path: "/cm/local/apps/openldap"
   ldap_cert_path: "{{bright_openldap_path}}/etc/certs"
-- 
GitLab


From 2a014fd001bf5d06bc211a0bb5a40bfa77c4d193 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Fri, 8 Nov 2024 16:13:59 -0600
Subject: [PATCH 085/172] feat: Define src and target repos using vars

This will enable us to define the upstream and downstream repos hosted
external to gitlab (For eg. Github)
---
 .gitlab-ci.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 5ce1f8c..d5a4b3e 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -44,9 +44,9 @@ workflow:
   - *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
+      git clone ${EXT_PR_TARGET_REPO} ${EXT_REPO_DIR}
+      git remote add upstream ${EXT_PR_SRC_REPO}
       cd ..
     fi
   - cd CRI_XCBC
-- 
GitLab


From 02586d385ed48a057e74a4170008b641f17d6bd9 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Fri, 8 Nov 2024 16:20:30 -0600
Subject: [PATCH 086/172] feat: Define src and target branch using vars

This will let you define the branch name for the PR you want to test
from the src repo and target branch to merge into, in the target repo
---
 .gitlab-ci.yml | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d5a4b3e..10c64ca 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -52,15 +52,15 @@ workflow:
   - 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 ${EXT_PR_TARGET_BRANCH}
+  - git fetch origin ${EXT_PR_TARGET_BRANCH}
+  - git merge origin/${EXT_PR_TARGET_BRANCH}
   - 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)
+  - git fetch upstream ${EXT_PR_SRC_BRANCH}
+  - git merge upstream/${EXT_PR_SRC_BRANCH}
   - cd ..
   - export PACKER_IMAGE_HEAD=$(git rev-parse --short HEAD)
   - echo CRI_XCBC_HEAD=${CRI_XCBC_HEAD} | tee -a $CI_PROJECT_DIR/image.env
-- 
GitLab


From d26d7f41ebf25a7fc065d6b5c35ebac57709103d Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Fri, 8 Nov 2024 16:40:14 -0600
Subject: [PATCH 087/172] feat: Define external repo dir using var

Parse the target dir where the external repo will be cloned, from the
value of EXT_REPO_DIR var. Use this var to replace all instances where
the repo name is hardcoded.
---
 .gitlab-ci.yml | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 10c64ca..83275a8 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -43,13 +43,14 @@ workflow:
 .update_ansible_repo: &update_ansible_repo
   - *get_build_date
   - |
-    if [ ! -d $CI_PROJECT_DIR/CRI_XCBC ]; then
-      cd CRI_XCBC
+    export EXT_REPO_DIR=$(basename -s .git $EXT_PR_TARGET_REPO)
+    if [ ! -d $CI_PROJECT_DIR/$EXT_REPO_DIR ]; then
       git clone ${EXT_PR_TARGET_REPO} ${EXT_REPO_DIR}
+      cd ${EXT_REPO_DIR}
       git remote add upstream ${EXT_PR_SRC_REPO}
       cd ..
     fi
-  - cd CRI_XCBC
+  - cd ${EXT_REPO_DIR}
   - git config user.name "${GIT_AUTHOR_NAME}"
   - git config user.email "${GIT_AUTHOR_EMAIL}"
   - git checkout ${EXT_PR_TARGET_BRANCH}
@@ -88,14 +89,14 @@ workflow:
     # Ansible var overrides
     - |
       if [ -n "${PROXY_ENABLE_VAR}" ]; then
-        sed -i -E "s/(${PROXY_ENABLE_VAR}: ).*/\1true/" CRI_XCBC/group_vars/all
+        sed -i -E "s/(${PROXY_ENABLE_VAR}: ).*/\1true/" $EXT_REPO_DIR/group_vars/all
       fi
-    - 'sed -i -E "s|(s3_endpoint: ).*|\1\"${S3_ENDPOINT}\"|" CRI_XCBC/group_vars/all'
-    - 'sed -i -E "s/(lts_access_key: ).*/\1\"${AWS_ACCESS_KEY_ID}\"/" CRI_XCBC/group_vars/all'
-    - 'sed -i -E "s/(lts_secret_key: ).*/\1\"${AWS_SECRET_ACCESS_KEY}\"/" CRI_XCBC/group_vars/all'
-    - 'sed -i -E "s/(s3_shibboleth_bucket_name: ).*/\1\"${S3_SHIBBOLETH_BUCKET_NAME}\"/" CRI_XCBC/group_vars/all'
-    - 'sed -i -E "s/(s3_shibboleth_object_name: ).*/\1\"${S3_SHIBBOLETH_OBJECT_NAME}\"/" CRI_XCBC/group_vars/all'
-    - 'sed -i -E "s|(ssh_pub_key: ).*|\1\"{{ lookup(''file'', ''${SSH_PUB_KEY}'') }}\"|" CRI_XCBC/group_vars/all'
+    - 'sed -i -E "s|(s3_endpoint: ).*|\1\"${S3_ENDPOINT}\"|" $EXT_REPO_DIR/group_vars/all'
+    - 'sed -i -E "s/(lts_access_key: ).*/\1\"${AWS_ACCESS_KEY_ID}\"/" $EXT_REPO_DIR/group_vars/all'
+    - 'sed -i -E "s/(lts_secret_key: ).*/\1\"${AWS_SECRET_ACCESS_KEY}\"/" $EXT_REPO_DIR/group_vars/all'
+    - 'sed -i -E "s/(s3_shibboleth_bucket_name: ).*/\1\"${S3_SHIBBOLETH_BUCKET_NAME}\"/" $EXT_REPO_DIR/group_vars/all'
+    - 'sed -i -E "s/(s3_shibboleth_object_name: ).*/\1\"${S3_SHIBBOLETH_OBJECT_NAME}\"/" $EXT_REPO_DIR/group_vars/all'
+    - 'sed -i -E "s|(ssh_pub_key: ).*|\1\"{{ lookup(''file'', ''${SSH_PUB_KEY}'') }}\"|" $EXT_REPO_DIR/group_vars/all'
     # packer commands
     - packer init openstack-proxy
     - packer validate openstack-proxy
-- 
GitLab


From ef66954060c8e66b1582a121e5e6abf880e70828 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Fri, 8 Nov 2024 16:42:50 -0600
Subject: [PATCH 088/172] feat: Add comment to describe var exports

---
 .gitlab-ci.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 83275a8..4a266d6 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -62,6 +62,7 @@ workflow:
   - export CRI_XCBC_prod=$(git rev-parse --short origin/uab-prod)
   - git fetch upstream ${EXT_PR_SRC_BRANCH}
   - git merge upstream/${EXT_PR_SRC_BRANCH}
+  # export vars into job artifacts
   - cd ..
   - export PACKER_IMAGE_HEAD=$(git rev-parse --short HEAD)
   - echo CRI_XCBC_HEAD=${CRI_XCBC_HEAD} | tee -a $CI_PROJECT_DIR/image.env
-- 
GitLab


From 0d3bc3946ad7992716a1f5b1fa97ba3509571c04 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Fri, 8 Nov 2024 16:55:08 -0600
Subject: [PATCH 089/172] feat: Replace hardcoded repo name when exporting vars

---
 .gitlab-ci.yml | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4a266d6..9ff758c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -57,17 +57,17 @@ workflow:
   - git fetch origin ${EXT_PR_TARGET_BRANCH}
   - git merge origin/${EXT_PR_TARGET_BRANCH}
   - git checkout -b integration
-  - 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)
   - git fetch upstream ${EXT_PR_SRC_BRANCH}
   - git merge upstream/${EXT_PR_SRC_BRANCH}
   # export vars into job artifacts
+  - export EXT_REPO_HEAD=$(git rev-parse --short HEAD)
+  - export EXT_REPO_dev=$(git rev-parse --short upstream/dev)
+  - export EXT_REPO_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 EXT_REPO_HEAD=${EXT_REPO_HEAD} | tee -a $CI_PROJECT_DIR/image.env
+  - echo EXT_REPO_dev=${EXT_REPO_dev} | tee -a $CI_PROJECT_DIR/image.env
+  - echo EXT_REPO_prod=${EXT_REPO_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
@@ -104,7 +104,7 @@ workflow:
     - packer build -machine-readable openstack-proxy | tee proxy_build.log
     - export BUILT_PROXY_IMAGE_ID=$(grep 'Image:' proxy_build.log | awk '{print $4}')
     - echo BUILT_PROXY_IMAGE_ID=${BUILT_PROXY_IMAGE_ID} | tee -a $CI_PROJECT_DIR/image.env
-    - openstack image set --property CRI_XCBC_prod=${CRI_XCBC_prod} --property CRI_XCBC_dev=${CRI_XCBC_dev} --property PACKER_IMAGE_HEAD=${PACKER_IMAGE_HEAD} ${BUILT_PROXY_IMAGE_ID}
+    - openstack image set --property EXT_REPO_prod=${EXT_REPO_prod} --property EXT_REPO_dev=${EXT_REPO_dev} --property PACKER_IMAGE_HEAD=${PACKER_IMAGE_HEAD} ${BUILT_PROXY_IMAGE_ID}
   artifacts:
     reports:
       dotenv: image.env
-- 
GitLab


From 9399b84b0f0f7fa9e356a38e1bdbeb0e84f90288 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Sun, 24 Nov 2024 15:50:52 -0500
Subject: [PATCH 090/172] feat: Remove references to the dev and prod

---
 .gitlab-ci.yml | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 9ff758c..3c48ecb 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -61,13 +61,13 @@ workflow:
   - git merge upstream/${EXT_PR_SRC_BRANCH}
   # export vars into job artifacts
   - export EXT_REPO_HEAD=$(git rev-parse --short HEAD)
-  - export EXT_REPO_dev=$(git rev-parse --short upstream/dev)
-  - export EXT_REPO_prod=$(git rev-parse --short origin/uab-prod)
+  - export EXT_PR_SRC_BRANCH_SHA=$(git rev-parse --short upstream/${EXT_PR_SRC_BRANCH})
+  - export EXT_PR_TARGET_BRANCH_SHA=$(git rev-parse --short origin/${EXT_PR_TARGET_BRANCH})
   - cd ..
   - export PACKER_IMAGE_HEAD=$(git rev-parse --short HEAD)
   - echo EXT_REPO_HEAD=${EXT_REPO_HEAD} | tee -a $CI_PROJECT_DIR/image.env
-  - echo EXT_REPO_dev=${EXT_REPO_dev} | tee -a $CI_PROJECT_DIR/image.env
-  - echo EXT_REPO_prod=${EXT_REPO_prod} | tee -a $CI_PROJECT_DIR/image.env
+  - echo EXT_PR_SRC_BRANCH_SHA=${EXT_PR_SRC_BRANCH_SHA} | tee -a $CI_PROJECT_DIR/image.env
+  - echo EXT_PR_TARGET_BRANCH_SHA=${EXT_PR_TARGET_BRANCH_SHA} | 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
@@ -79,7 +79,7 @@ workflow:
     - *get_ansible_files
     # packer vars for job env
     - export PKR_VAR_flavor="${PROXY_BUILD_FLAVOR:-$PKR_VAR_flavor}"
-    - export PKR_VAR_build_instance_name="${BUILD_TARGET}-${CRI_XCBC_HEAD}"
+    - export PKR_VAR_build_instance_name="${BUILD_TARGET}-${EXT_REPO_HEAD}"
     - export PKR_VAR_image_date_suffix=false
     - |
       if [ $CI_PIPELINE_SOURCE == 'merge_request_event' ]; then
@@ -104,7 +104,8 @@ workflow:
     - packer build -machine-readable openstack-proxy | tee proxy_build.log
     - export BUILT_PROXY_IMAGE_ID=$(grep 'Image:' proxy_build.log | awk '{print $4}')
     - echo BUILT_PROXY_IMAGE_ID=${BUILT_PROXY_IMAGE_ID} | tee -a $CI_PROJECT_DIR/image.env
-    - openstack image set --property EXT_REPO_prod=${EXT_REPO_prod} --property EXT_REPO_dev=${EXT_REPO_dev} --property PACKER_IMAGE_HEAD=${PACKER_IMAGE_HEAD} ${BUILT_PROXY_IMAGE_ID}
+    # set image properties with repo state
+    - openstack image set --property EXT_PR_SRC_REPO=${EXT_PR_SRC_REPO} --property EXT_PR_SRC_BRANCH_SHA=${EXT_PR_SRC_BRANCH_SHA} --property EXT_PR_TARGET_REPO=${EXT_PR_TARGET_REPO} --property EXT_PR_TARGET_BRANCH_SHA=${EXT_PR_TARGET_BRANCH_SHA} --property PACKER_IMAGE_HEAD=${PACKER_IMAGE_HEAD} ${BUILT_PROXY_IMAGE_ID}
   artifacts:
     reports:
       dotenv: image.env
-- 
GitLab


From b5dfe3348806cc384d1edc88670f3a26384c8b2a Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Tue, 26 Nov 2024 18:44:33 -0500
Subject: [PATCH 091/172] feat: Change order to test multiple FIP assignment

---
 .gitlab-ci.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 2021b76..b34605c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -177,8 +177,8 @@ deploy_http_proxy_node:
       # Associate the floating IP(s) with the HTTP Proxy instance
       for HTTP_PROXY_FLOATING_IP in ${HTTP_PROXY_FLOATING_IP_LIST[@]};
       do
+        echo "Associating FLOATING_IP $HTTP_PROXY_FLOATING_IP with HTTP_PROXY_INSTANCE_ID $HTTP_PROXY_INSTANCE_ID"
         openstack server add floating ip $HTTP_PROXY_INSTANCE_ID $HTTP_PROXY_FLOATING_IP
-        echo "Associated FLOATING_IP $HTTP_PROXY_FLOATING_IP with HTTP_PROXY_INSTANCE_ID $HTTP_PROXY_INSTANCE_ID"
       done
   rules:
     - if: $PIPELINE_TARGET == "deploy" && $HTTP_PROXY_IMAGE_ID
@@ -227,8 +227,8 @@ deploy_ssh_proxy_node:
       # Associate the floating IP(s) with the SSH Proxy instance
       for SSH_PROXY_FLOATING_IP in ${SSH_PROXY_FLOATING_IP_LIST[@]};
       do
+        echo "Associating FLOATING_IP $SSH_PROXY_FLOATING_IP with SSH_PROXY_INSTANCE_ID $SSH_PROXY_INSTANCE_ID"
         openstack server add floating ip $SSH_PROXY_INSTANCE_ID $SSH_PROXY_FLOATING_IP
-        echo "Associated FLOATING_IP $SSH_PROXY_FLOATING_IP with SSH_PROXY_INSTANCE_ID $SSH_PROXY_INSTANCE_ID"
       done
   rules:
     - if: $PIPELINE_TARGET == "deploy" && $SSH_PROXY_IMAGE_ID
-- 
GitLab


From 5700ab7c64f5c776198cec33f671a91655b150f7 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Wed, 27 Nov 2024 13:56:10 -0600
Subject: [PATCH 092/172] feat: Add runtime config for ssh proxy

---
 ansible/cluster.yml                           |  1 +
 ansible/group_vars/all                        |  4 +++
 ansible/group_vars/prod                       |  5 ++++
 ansible/roles/ssh_proxy_config/tasks/main.yml | 13 +++++++++
 .../templates/sshpiperd.yaml.j2               | 28 +++++++++++++++++++
 5 files changed, 51 insertions(+)
 create mode 100644 ansible/roles/ssh_proxy_config/tasks/main.yml
 create mode 100644 ansible/roles/ssh_proxy_config/templates/sshpiperd.yaml.j2

diff --git a/ansible/cluster.yml b/ansible/cluster.yml
index 609d2fa..a84fec6 100644
--- a/ansible/cluster.yml
+++ b/ansible/cluster.yml
@@ -8,3 +8,4 @@
     - { name: 'ldap_config', tags: 'ldap_config' }
     - { name: 'slurm_client', tags: 'slurm_client', when: enable_slurm_client }
     - { name: 'ssh_host_keys', tags: 'ssh_host_keys' }
+    - { name: 'ssh_proxy_config', tags: 'ssh_proxy_config', when: enable_ssh_proxy_config }
diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index 78a9c64..2e8fa6c 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -42,3 +42,7 @@
 # AWS credentials
   LTS_ACCESS_KEY: ""
   LTS_SECRET_KEY: ""
+
+# ssh proxy
+  enable_ssh_proxy_config: false
+  sshpiper_dest_dir: "/opt/sshpiper"
diff --git a/ansible/group_vars/prod b/ansible/group_vars/prod
index 7c7964e..5c694d2 100644
--- a/ansible/group_vars/prod
+++ b/ansible/group_vars/prod
@@ -17,3 +17,8 @@
   bright_openldap_path: "/cm/local/apps/openldap"
   ldap_cert_path: "{{bright_openldap_path}}/etc/certs"
   ldap_uri: "ldaps://ldapserver"
+
+  # proxy_config
+  target_groups:
+    - {"name": "gpfs5", "host": "login002", "default": False, "authorized_keys":"/gpfs5/data/user/home/$DOWNSTREAM_USER/.ssh/authorized_keys", "private_key":"/gpfs5/data/user/home/$DOWNSTREAM_USER/.ssh/id_ecdsa"}
+    - {"name": "gpfs4", "host": "login001", "default": True, "authorized_keys":"/gpfs4/data/user/home/$DOWNSTREAM_USER/.ssh/authorized_keys", "private_key":"/gpfs4/data/user/home/$DOWNSTREAM_USER/.ssh/id_ecdsa"}
diff --git a/ansible/roles/ssh_proxy_config/tasks/main.yml b/ansible/roles/ssh_proxy_config/tasks/main.yml
new file mode 100644
index 0000000..d3ec3bd
--- /dev/null
+++ b/ansible/roles/ssh_proxy_config/tasks/main.yml
@@ -0,0 +1,13 @@
+---
+- name: Configure sshpiper yaml plugin
+  ansible.builtin.template:
+    src: sshpiperd.yaml.j2
+    dest: "{{ sshpiper_dest_dir }}/sshpiperd.yaml"
+    backup: true
+
+- name: Enable and start sshpiper service
+  ansible.builtin.service:
+    name: sshpiperd
+    enabled: true
+    state: restarted
+
diff --git a/ansible/roles/ssh_proxy_config/templates/sshpiperd.yaml.j2 b/ansible/roles/ssh_proxy_config/templates/sshpiperd.yaml.j2
new file mode 100644
index 0000000..4597108
--- /dev/null
+++ b/ansible/roles/ssh_proxy_config/templates/sshpiperd.yaml.j2
@@ -0,0 +1,28 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/tg123/sshpiper/master/plugin/yaml/schema.json
+version: "1.0"
+pipes:
+{% for group in target_groups %}
+{% if not group.default %}
+- from:
+    - groupname: "{{ group.name }}"
+      authorized_keys: "{{ group.authorized_keys }}"
+  to:
+    host: "{{ group.host }}"
+    ignore_hostkey: true
+    private_key: "{{ group.private_key }}"
+- from:
+    - groupname: "{{ group.name }}"
+  to:
+    host: "{{ group.host }}"
+    ignore_hostkey: true
+{% else %}
+- from:
+    - username: ".*" # catch all
+      username_regex_match: true
+      authorized_keys: "{{ group.authorized_keys }}"
+  to:
+    host: "{{ group.host }}"
+    ignore_hostkey: true
+    private_key: "{{ group.private_key }}"
+{% endif %}
+{% endfor %}
-- 
GitLab


From d67bd0fd585b1fe2401f3d616d895c2da5b099d1 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Wed, 4 Dec 2024 15:52:11 -0500
Subject: [PATCH 093/172] feat: Add tasks to install and config fail2ban

---
 ansible/group_vars/all                        |  1 +
 ansible/roles/ssh_proxy_config/tasks/main.yml | 41 +++++++++++++++++++
 .../ssh_proxy_config/templates/jail.local.j2  |  7 ++++
 3 files changed, 49 insertions(+)
 create mode 100644 ansible/roles/ssh_proxy_config/templates/jail.local.j2

diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index 2e8fa6c..452daa7 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -46,3 +46,4 @@
 # ssh proxy
   enable_ssh_proxy_config: false
   sshpiper_dest_dir: "/opt/sshpiper"
+  fail2ban_cidr_list: "127.0.0.1/8"
diff --git a/ansible/roles/ssh_proxy_config/tasks/main.yml b/ansible/roles/ssh_proxy_config/tasks/main.yml
index d3ec3bd..fb51f9f 100644
--- a/ansible/roles/ssh_proxy_config/tasks/main.yml
+++ b/ansible/roles/ssh_proxy_config/tasks/main.yml
@@ -11,3 +11,44 @@
     enabled: true
     state: restarted
 
+- name: Install firewalld
+  ansible.builtin.package:
+    name: firewalld
+    state: present
+
+- name: Configure firewalld
+  ansible.posix.firewalld:
+    port: 2222/tcp
+    zone: public
+    state: enabled
+    permanent: true
+
+- name: Enable and start firewalld
+  ansible.builtin.service:
+    name: firewalld
+    enabled: true
+    state: restarted
+
+- name: Install fail2ban
+  ansible.builtin.package:
+    name: "{{ item }}"
+    state: present
+  loop:
+    - fail2ban
+    - fail2ban-firewalld
+
+- name: Configure fail2ban
+  ansible.builtin.template:
+    src: jail.local.j2
+    dest: "/etc/fail2ban/jail.local"
+    backup: true
+
+- name: Activate the firewall support
+  ansible.builtin.command:
+    cmd: mv /etc/fail2ban/jail.d/00-firewalld.conf /etc/fail2ban/jail.d/00-firewalld.local
+
+- name: Enable and start fail2ban
+  ansible.builtin.service:
+    name: fail2ban
+    enabled: true
+    state: restarted
diff --git a/ansible/roles/ssh_proxy_config/templates/jail.local.j2 b/ansible/roles/ssh_proxy_config/templates/jail.local.j2
new file mode 100644
index 0000000..d5898e6
--- /dev/null
+++ b/ansible/roles/ssh_proxy_config/templates/jail.local.j2
@@ -0,0 +1,7 @@
+[DEFAULT]
+banaction = firewalld
+bantime  = 1200
+ignoreip = {{ fail2ban_cidr_list }}
+
+[sshd]
+enabled = true
-- 
GitLab


From 7955206f522a8e43f5eb976c28fdf4be1bc05dc6 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Thu, 5 Dec 2024 14:15:18 -0500
Subject: [PATCH 094/172] feat: Configure rsyslog

---
 ansible/group_vars/all                        |   3 +
 ansible/roles/rsyslog_config/tasks/main.yml   |  15 ++
 .../rsyslog_config/templates/rsyslog.conf.j2  | 226 ++++++++++++++++++
 3 files changed, 244 insertions(+)
 create mode 100644 ansible/roles/rsyslog_config/tasks/main.yml
 create mode 100644 ansible/roles/rsyslog_config/templates/rsyslog.conf.j2

diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index 452daa7..4c97256 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -47,3 +47,6 @@
   enable_ssh_proxy_config: false
   sshpiper_dest_dir: "/opt/sshpiper"
   fail2ban_cidr_list: "127.0.0.1/8"
+
+# rsyslog
+  rsyslog_target: "*.* @master:514"
diff --git a/ansible/roles/rsyslog_config/tasks/main.yml b/ansible/roles/rsyslog_config/tasks/main.yml
new file mode 100644
index 0000000..61c5029
--- /dev/null
+++ b/ansible/roles/rsyslog_config/tasks/main.yml
@@ -0,0 +1,15 @@
+---
+- name: Add rsyslog configuration
+  ansible.builtin.template:
+    src: rsyslog.conf.j2
+    dest: /etc/rsyslog.conf
+    mode: 0644
+    owner: root
+    group: root
+    backup: true
+
+- name: Enable and start rsyslog
+  ansible.builtin.service:
+    name: rsyslog
+    enabled: true
+    state: restarted
diff --git a/ansible/roles/rsyslog_config/templates/rsyslog.conf.j2 b/ansible/roles/rsyslog_config/templates/rsyslog.conf.j2
new file mode 100644
index 0000000..41ba61b
--- /dev/null
+++ b/ansible/roles/rsyslog_config/templates/rsyslog.conf.j2
@@ -0,0 +1,226 @@
+# rsyslog configuration file
+
+# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
+# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
+
+# Added for distro update >= 4 (7u4)
+global (
+net.enabledns="off"
+)
+
+#### MODULES ####
+
+# The imjournal module bellow is now used as a message source instead of imuxsock.
+$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
+$ModLoad imjournal # provides access to the systemd journal
+#$ModLoad imklog # reads kernel messages (the same are read from journald)
+#$ModLoad immark  # provides --MARK-- message capability
+
+# Provides UDP syslog reception
+#$ModLoad imudp
+#$UDPServerRun 514
+
+# Provides TCP syslog reception
+#$ModLoad imtcp
+#$InputTCPServerRun 514
+
+
+#### GLOBAL DIRECTIVES ####
+
+# Where to place auxiliary files
+$WorkDirectory /var/lib/rsyslog
+
+# Use default timestamp format
+$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
+
+# File syncing capability is disabled by default. This feature is usually not required,
+# not useful and an extreme performance hit
+#$ActionFileEnableSync on
+
+# Include all config files in /etc/rsyslog.d/
+$IncludeConfig /etc/rsyslog.d/*.conf
+
+# Turn off message reception via local log socket;
+# local messages are retrieved through imjournal now.
+$OmitLocalLogging on
+
+# File to store the position in the journal
+$IMJournalStateFile imjournal.state
+
+
+#### RULES ####
+
+# Log all kernel messages to the console.
+# Logging much else clutters up the screen.
+#kern.*                                                 /dev/console
+
+# Filter nslcd ldap ldap_abandon and ldap_result messages.
+if $programname == 'nslcd' and $syslogseverity >= '3' and $msg contains ' failed: Can\'t contact LDAP server' then stop
+if $programname == 'nslcd' and $syslogseverity >= '3' and $msg contains 'ldap_abandon() failed to abandon search: Other (e.g., implementation specific) error' then stop
+if $programname == 'nslcd' and $syslogseverity >= '3' and $msg contains 'ldap_abandon() failed to abandon search: Can\'t contact LDAP server: Transport endpoint is not connected' then stop
+if $programname == 'nslcd' and $syslogseverity >= '3' and $msg contains 'no available LDAP server found, sleeping ' then stop
+if $programname == 'nslcd' and $syslogseverity >= '3' and $msg contains 'connected to LDAP server ldap://local' then stop
+
+# Filter sntp started messages.
+if $programname == 'sntp' and $syslogseverity > '3' and $msg contains 'Started sntp' then stop
+
+# MariaDB Galera
+# disabled, as these messages are being generated every few seconds
+:msg, contains, "START: cm-check-galera-status" stop
+:msg, contains, "EXIT: cm-check-galera-status" stop
+
+# HAProxy for OpenStack
+if $syslogfacility-text == 'local4' and ($programname == 'haproxy') then {
+  local4.* /var/log/haproxy.log
+  stop
+}
+
+# OpenStack specific
+if $syslogfacility-text == 'daemon' then {
+
+  # needed for proper handling of Python stack traces
+  $EscapeControlCharactersOnReceive off
+
+  if $programname startswith 'keystone' then {
+    *.* /var/log/keystone/keystone.log
+  }
+
+  if $programname startswith 'nova' then {
+    *.* /var/log/nova/nova.log
+
+    if $programname == 'nova-api' then {
+      *.* /var/log/nova/nova-api.log
+    }
+    if $programname == 'nova-scheduler' then {
+      *.* /var/log/nova/nova-scheduler.log
+    }
+    if $programname == 'nova-conductor' then {
+      *.* /var/log/nova/nova-conductor.log
+    }
+    if $programname == 'nova-novncproxy' then {
+      *.* /var/log/nova/nova-novncproxy.log
+    }
+    if $programname == 'nova-compute' then {
+      *.* /var/log/nova/nova-compute.log
+    }
+  }
+
+  if $programname startswith 'neutron' then {
+    *.* /var/log/neutron/neutron.log
+
+    if $programname == 'neutron-server' then {
+      *.* /var/log/neutron/neutron-server.log
+    }
+    if $programname == 'neutron-metadata-agent' then {
+      *.* /var/log/neutron/neutron-metadata-agent.log
+    }
+    if $programname == 'neutron-l3-agent' then {
+      *.* /var/log/neutron/neutron-l3-agent.log
+    }
+    if $programname == 'neutron-dhcp-agent' then {
+      *.* /var/log/neutron/neutron-dhcp-agent.log
+    }
+    if $programname == 'neutron-openvswitch-agent' then {
+      *.* /var/log/neutron/neutron-openvswitch-agent.log
+    }
+
+  }
+
+  if $programname startswith 'glance' then {
+    *.* /var/log/glance/glance.log
+
+    if $programname == 'glance-api' then {
+      *.* /var/log/glance/glance-api.log
+    }
+    if $programname == 'glance-registry' then {
+      *.* /var/log/glance/glance-registry.log
+    }
+
+  }
+
+  if $programname startswith 'cinder' then {
+    *.* /var/log/cinder/cinder.log
+
+    if $programname == 'cinder-api' then {
+      *.* /var/log/cinder/cinder-api.log
+    }
+    if $programname == 'cinder-scheduler' then {
+      *.* /var/log/cinder/cinder-scheduler.log
+    }
+    if $programname == 'cinder-volume' then {
+      *.* /var/log/cinder/cinder-volume.log
+    }
+    if $programname == 'cinder-backup' then {
+      *.* /var/log/cinder/cinder-backup.log
+    }
+  }
+
+  if $programname startswith 'heat' then {
+    *.* /var/log/heat/heat.log
+
+    if $programname == 'heat-api' then {
+      *.* /var/log/heat/heat-api.log
+    }
+    if $programname == 'heat-engine' then {
+      *.* /var/log/heat/heat-engine.log
+    }
+  }
+
+  if $programname startswith 'keystone' or \
+     $programname startswith 'nova' or \
+     $programname startswith 'neutron' or \
+     $programname startswith 'glance' or \
+     $programname startswith 'cinder' or \
+     $programname startswith 'heat' then {
+
+     *.* /var/log/openstack
+     *.* @master:514
+     stop
+  }
+}
+
+# Log anything (except mail) of level info or higher.
+# Don't log private authentication messages!
+*.info;mail.none;authpriv.none;cron.none;local5.none;local6.none   /var/log/messages
+
+# The authpriv file has restricted access.
+authpriv.*                                              /var/log/secure
+
+# Log all the mail messages in one place.
+mail.*                                                  -/var/log/maillog
+
+
+# Log cron stuff
+cron.*                                                  /var/log/cron
+
+# Everybody gets emergency messages
+*.emerg                                                 :omusrmsg:*
+
+# Save news errors of level crit and higher in a special file.
+uucp,news.crit                                          /var/log/spooler
+
+# Save boot messages also to boot.log
+local7.*                                                /var/log/boot.log
+
+# cm related log files:
+local5.* -/var/log/node-installer
+local6.* -/var/log/cmdaemon
+
+# ### begin forwarding rule ###
+# The statement between the begin ... end define a SINGLE forwarding
+# rule. They belong together, do NOT split them. If you create multiple
+# forwarding rules, duplicate the whole block!
+# Remote Logging (we use TCP for reliable delivery)
+#
+# An on-disk queue is created for this action. If the remote host is
+# down, messages are spooled to disk and sent when it is up again.
+#$ActionQueueFileName fwdRule1 # unique name prefix for spool files
+#$ActionQueueMaxDiskSpace 1g   # 1gb space limit (use as much as possible)
+#$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
+#$ActionQueueType LinkedList   # run asynchronously
+#$ActionResumeRetryCount -1    # infinite retries if host is down
+# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
+#*.* @@remote-host:514
+#CM
+{{ rsyslog_target }}
+#### end of the forwarding rule ###
-- 
GitLab


From 6e1a58c4c4910fbe9da3ae870768aab7072227c4 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Thu, 5 Dec 2024 14:34:57 -0500
Subject: [PATCH 095/172] feat: Add rsyslog_config role to playbook cluster.yml

---
 ansible/cluster.yml    | 1 +
 ansible/group_vars/all | 1 +
 2 files changed, 2 insertions(+)

diff --git a/ansible/cluster.yml b/ansible/cluster.yml
index a84fec6..a131e1e 100644
--- a/ansible/cluster.yml
+++ b/ansible/cluster.yml
@@ -9,3 +9,4 @@
     - { name: 'slurm_client', tags: 'slurm_client', when: enable_slurm_client }
     - { name: 'ssh_host_keys', tags: 'ssh_host_keys' }
     - { name: 'ssh_proxy_config', tags: 'ssh_proxy_config', when: enable_ssh_proxy_config }
+    - { name: 'rsyslog_config', tags: 'rsyslog_config', when: enable_rsyslog_config }
diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index 4c97256..0f8cdbe 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -49,4 +49,5 @@
   fail2ban_cidr_list: "127.0.0.1/8"
 
 # rsyslog
+  enable_rsyslog_config: false
   rsyslog_target: "*.* @master:514"
-- 
GitLab


From 8a799a3e9c4e04f3043d27cf7b068e1685559f11 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Fri, 6 Dec 2024 13:08:19 -0600
Subject: [PATCH 096/172] feat: add ssl related variables

---
 ansible/group_vars/all | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index 0f8cdbe..f68ae57 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -51,3 +51,13 @@
 # rsyslog
   enable_rsyslog_config: false
   rsyslog_target: "*.* @master:514"
+
+# ssl certs
+  ssl_cert_s3_bucket: ""
+  ssl_cert_key_location: "/etc/pki/tls/private"
+  ssl_cert_file_location: "/etc/pki/tls/certs"
+  ssl_cert_key: ""
+  ssl_cert_file: ""
+  ssl_cert_chain_file: ""
+  ssl_apache_config: ""
+  apache_service: "httpd"
-- 
GitLab


From dcd97881b482f0111a3a0cffe42cf500698eb83f Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Fri, 6 Dec 2024 13:08:36 -0600
Subject: [PATCH 097/172] feat: add ssl_cert role

---
 ansible/cluster.yml                    |  1 +
 ansible/roles/ssl_cert/tasks/main.yaml | 46 ++++++++++++++++++++++++++
 2 files changed, 47 insertions(+)
 create mode 100644 ansible/roles/ssl_cert/tasks/main.yaml

diff --git a/ansible/cluster.yml b/ansible/cluster.yml
index a131e1e..9d4eaa3 100644
--- a/ansible/cluster.yml
+++ b/ansible/cluster.yml
@@ -9,4 +9,5 @@
     - { name: 'slurm_client', tags: 'slurm_client', when: enable_slurm_client }
     - { name: 'ssh_host_keys', tags: 'ssh_host_keys' }
     - { name: 'ssh_proxy_config', tags: 'ssh_proxy_config', when: enable_ssh_proxy_config }
+    - { name: 'ssl_cert', tags: 'ssl_cert' }
     - { name: 'rsyslog_config', tags: 'rsyslog_config', when: enable_rsyslog_config }
diff --git a/ansible/roles/ssl_cert/tasks/main.yaml b/ansible/roles/ssl_cert/tasks/main.yaml
new file mode 100644
index 0000000..7458957
--- /dev/null
+++ b/ansible/roles/ssl_cert/tasks/main.yaml
@@ -0,0 +1,46 @@
+---
+- name: Download SSL Certs from S3
+  aws_s3:
+    mode: get
+    s3_url: "{{ S3_ENDPOINT }}"
+    bucket: "{{ ssl_cert_s3_bucket }}"
+    object: "{{ item }}"
+    dest: "{{ ssl_cert_file_location }}/{{ item }}"
+    aws_access_key: "{{ LTS_ACCESS_KEY }}"
+    aws_secret_key: "{{ LTS_SECRET_KEY }}"
+  vars:
+    ansible_python_interpreter: /usr/bin/python3
+  when: ssl_cert_s3_bucket | length > 0 and item | length > 0
+  loop:
+    - "{{ ssl_cert_file }}"
+    - "{{ ssl_cert_chain_file }}"
+
+- name: Download SSL key from S3
+  aws_s3:
+    mode: get
+    s3_url: "{{ S3_ENDPOINT }}"
+    bucket: "{{ ssl_cert_s3_bucket }}"
+    object: "{{ ssl_cert_key }}"
+    dest: "{{ ssl_cert_key_location }}/{{ ssl_cert_key }}"
+    aws_access_key: "{{ LTS_ACCESS_KEY }}"
+    aws_secret_key: "{{ LTS_SECRET_KEY }}"
+  vars:
+    ansible_python_interpreter: /usr/bin/python3
+  when: ssl_cert_s3_bucket | length > 0 and ssl_cert_key | length > 0
+
+- name: Update SSL in Apache config
+  ansible.builtin.replace:
+    path: "{{ ssl_apache_config }}"
+    regexp: "{{ item.regexp }}"
+    replace: "\\1 {{ item.location }}/{{ item.value }}"
+    backup: true
+  when: ssl_apache_config | length > 0 and item.value | length > 0
+  loop:
+    - { regexp: "#?(SSLCertificateFile).*$", location: "{{ ssl_cert_file_location }}", value: "{{ ssl_cert_file }}" }
+    - { regexp: "#?(SSLCertificateChainFile).*$", location: "{{ ssl_cert_file_location }}", value: "{{ ssl_cert_chain_file }}" }
+    - { regexp: "#?(SSLCertificateKeyFile).*$", location: "{{ ssl_cert_key_location }}", value: "{{ ssl_cert_key }}" }
+
+- name: Restart apache service
+  ansible.builtin.service:
+    name: "{{ apache_service }}"
+    state: restarted
-- 
GitLab


From 63497598297681d4c01d5b8faf7ff5c0ce0d11b8 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Tue, 10 Dec 2024 15:42:13 -0600
Subject: [PATCH 098/172] feat: ensure file permission of cert and key file

---
 ansible/roles/ssl_cert/tasks/main.yaml | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/ansible/roles/ssl_cert/tasks/main.yaml b/ansible/roles/ssl_cert/tasks/main.yaml
index 7458957..aa562aa 100644
--- a/ansible/roles/ssl_cert/tasks/main.yaml
+++ b/ansible/roles/ssl_cert/tasks/main.yaml
@@ -15,6 +15,17 @@
     - "{{ ssl_cert_file }}"
     - "{{ ssl_cert_chain_file }}"
 
+- name: Change cert files permissions
+  ansible.builtin.file:
+    path: "{{ ssl_cert_file_location }}/{{ item }}"
+    owner: root
+    group: root
+    mode: '0600'
+  when: ssl_cert_s3_bucket | length > 0 and item | length > 0
+  loop:
+    - "{{ ssl_cert_file }}"
+    - "{{ ssl_cert_chain_file }}"
+
 - name: Download SSL key from S3
   aws_s3:
     mode: get
@@ -28,6 +39,14 @@
     ansible_python_interpreter: /usr/bin/python3
   when: ssl_cert_s3_bucket | length > 0 and ssl_cert_key | length > 0
 
+- name: Change key file permissions
+  ansible.builtin.file:
+    path: "{{ ssl_cert_key_location }}/{{ ssl_cert_key }}"
+    owner: root
+    group: root
+    mode: '0400'
+  when: ssl_cert_s3_bucket | length > 0 and ssl_cert_key | length > 0
+
 - name: Update SSL in Apache config
   ansible.builtin.replace:
     path: "{{ ssl_apache_config }}"
-- 
GitLab


From d4f320bbf1c6f7ba2c91e258d1765502062c8426 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Tue, 10 Dec 2024 16:13:42 -0600
Subject: [PATCH 099/172] style: use FQCN module name

---
 ansible/roles/ssh_host_keys/tasks/main.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/ansible/roles/ssh_host_keys/tasks/main.yml b/ansible/roles/ssh_host_keys/tasks/main.yml
index 0a9632e..462c09a 100644
--- a/ansible/roles/ssh_host_keys/tasks/main.yml
+++ b/ansible/roles/ssh_host_keys/tasks/main.yml
@@ -1,6 +1,6 @@
 ---
 - name: Ensure destination directory exists only if not present
-  file:
+  ansible.builtin.file:
     path: /tmp/ssh_keys
     state: directory
     mode: '0755'
@@ -24,7 +24,7 @@
     ansible_python_interpreter: /usr/bin/python3
 
 - name: Unpack SSH host keys to /etc/ssh
-  unarchive:
+  ansible.builtin.unarchive:
     src: "/tmp/ssh_keys/{{ SSH_HOST_KEYS_S3_OBJECT }}"
     dest: "/etc/ssh"
     remote_src: yes
-- 
GitLab


From d23b84990b9572926b01253bb746e7d6e8b92234 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Tue, 10 Dec 2024 16:14:13 -0600
Subject: [PATCH 100/172] feat: ensure keys own by root

---
 ansible/roles/ssh_host_keys/tasks/main.yml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/ansible/roles/ssh_host_keys/tasks/main.yml b/ansible/roles/ssh_host_keys/tasks/main.yml
index 462c09a..b9b5b6b 100644
--- a/ansible/roles/ssh_host_keys/tasks/main.yml
+++ b/ansible/roles/ssh_host_keys/tasks/main.yml
@@ -27,6 +27,8 @@
   ansible.builtin.unarchive:
     src: "/tmp/ssh_keys/{{ SSH_HOST_KEYS_S3_OBJECT }}"
     dest: "/etc/ssh"
+    group: root
+    owner: root
     remote_src: yes
   become: true
 
-- 
GitLab


From be66a996caddd19772309b1fe4fdd5f1d5277fdb Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Tue, 10 Dec 2024 16:14:37 -0600
Subject: [PATCH 101/172] feat: remove temporary folder is removed after the
 task

---
 ansible/roles/ssh_host_keys/tasks/main.yml | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/ansible/roles/ssh_host_keys/tasks/main.yml b/ansible/roles/ssh_host_keys/tasks/main.yml
index b9b5b6b..fa39838 100644
--- a/ansible/roles/ssh_host_keys/tasks/main.yml
+++ b/ansible/roles/ssh_host_keys/tasks/main.yml
@@ -32,6 +32,11 @@
     remote_src: yes
   become: true
 
+- name: Remove the temporary folder after put in place
+  ansible.builtin.file:
+    path: /tmp/ssh_keys
+    state: absent
+
 - name: Restart SSH service
   ansible.builtin.service:
     name: sshd
-- 
GitLab


From 273d22132adecde4ff2d1ab771322c9e65ea3c60 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Wed, 11 Dec 2024 06:45:24 -0500
Subject: [PATCH 102/172] feat: Add conditional for ssl certs role

---
 ansible/cluster.yml    | 2 +-
 ansible/group_vars/all | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/ansible/cluster.yml b/ansible/cluster.yml
index 9d4eaa3..a4240f6 100644
--- a/ansible/cluster.yml
+++ b/ansible/cluster.yml
@@ -9,5 +9,5 @@
     - { name: 'slurm_client', tags: 'slurm_client', when: enable_slurm_client }
     - { name: 'ssh_host_keys', tags: 'ssh_host_keys' }
     - { name: 'ssh_proxy_config', tags: 'ssh_proxy_config', when: enable_ssh_proxy_config }
-    - { name: 'ssl_cert', tags: 'ssl_cert' }
+    - { name: 'ssl_cert', tags: 'ssl_cert', when: enable_ssl_certs }
     - { name: 'rsyslog_config', tags: 'rsyslog_config', when: enable_rsyslog_config }
diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index f68ae57..f7b65c0 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -53,6 +53,7 @@
   rsyslog_target: "*.* @master:514"
 
 # ssl certs
+  enable_ssl_certs: false
   ssl_cert_s3_bucket: ""
   ssl_cert_key_location: "/etc/pki/tls/private"
   ssl_cert_file_location: "/etc/pki/tls/certs"
-- 
GitLab


From 9351468c4263ba39c773a0b518f9e8623c542843 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Wed, 11 Dec 2024 07:19:22 -0500
Subject: [PATCH 103/172] feat: Install httpd not available default in Alma9

---
 openstack-proxy/nodeimage.pkr.hcl | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/openstack-proxy/nodeimage.pkr.hcl b/openstack-proxy/nodeimage.pkr.hcl
index fc1a471..1410cbe 100644
--- a/openstack-proxy/nodeimage.pkr.hcl
+++ b/openstack-proxy/nodeimage.pkr.hcl
@@ -40,7 +40,7 @@ build {
     inline = [
       "sudo yum install -y epel-release",
       "sudo dnf config-manager --set-enabled crb",
-      "sudo yum install -y libselinux-python3 python3 python3-pip tmux vim git bash-completion curl wget unzip",
+      "sudo yum install -y libselinux-python3 python3 python3-pip tmux vim git bash-completion curl wget unzip httpd",
       "sudo python3 -m pip install --upgrade pip",
       "sudo pip3 install s3cmd==2.3.0 ansible==4.10.0 python-openstackclient==5.8.0"
     ]
-- 
GitLab


From acc625734b899c74b363438fec7c8688ab82a152 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Thu, 12 Dec 2024 15:59:30 -0600
Subject: [PATCH 104/172] feat: add rewrite map config variable

---
 ansible/group_vars/all | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index f7b65c0..f806c1f 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -62,3 +62,10 @@
   ssl_cert_chain_file: ""
   ssl_apache_config: ""
   apache_service: "httpd"
+
+# rewrite map
+  enable_rewrite_map: false
+  target_groups:
+    - {"name": "gpfs4", "host": "login001", "default": True }
+    - {"name": "gpfs5", "host": "login002", "default": False }
+
-- 
GitLab


From bf72c6c6aeb0a042705dd503812b12f9e92de713 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Thu, 12 Dec 2024 16:02:57 -0600
Subject: [PATCH 105/172] feat: add rewrite_map role

---
 ansible/roles/rewrite_map/tasks/main.yaml             |  8 ++++++++
 .../rewrite_map/templates/rewrite_map_config_py.j2    | 11 +++++++++++
 2 files changed, 19 insertions(+)
 create mode 100644 ansible/roles/rewrite_map/tasks/main.yaml
 create mode 100644 ansible/roles/rewrite_map/templates/rewrite_map_config_py.j2

diff --git a/ansible/roles/rewrite_map/tasks/main.yaml b/ansible/roles/rewrite_map/tasks/main.yaml
new file mode 100644
index 0000000..74c8778
--- /dev/null
+++ b/ansible/roles/rewrite_map/tasks/main.yaml
@@ -0,0 +1,8 @@
+---
+- name: Add apache rewritemap script config
+  ansible.builtin.template:
+    src: rewrite_map_config_py.j2
+    mode: '600'
+    user: root
+    group: root
+    dest: /var/www/rewrite_map_config.py
diff --git a/ansible/roles/rewrite_map/templates/rewrite_map_config_py.j2 b/ansible/roles/rewrite_map/templates/rewrite_map_config_py.j2
new file mode 100644
index 0000000..3d247e7
--- /dev/null
+++ b/ansible/roles/rewrite_map/templates/rewrite_map_config_py.j2
@@ -0,0 +1,11 @@
+DEBUG = False
+target_groups = {
+    {% for group in target_groups %}
+    "{{ group.name }}": "{{ group.host }}",
+    {% endfor %}
+}
+{% for group in target_groups %}
+{% if group.default %}
+default_hostname = "{{ group.host }}"
+{% endif %}
+{% endfor %}
-- 
GitLab


From 0a084d03ec2b50d2f73bf317cd6eaed1db23ae85 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Thu, 12 Dec 2024 16:03:10 -0600
Subject: [PATCH 106/172] feat: add rewrite_map role in cluster.yaml

---
 ansible/cluster.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/ansible/cluster.yml b/ansible/cluster.yml
index a4240f6..1a2c83e 100644
--- a/ansible/cluster.yml
+++ b/ansible/cluster.yml
@@ -11,3 +11,4 @@
     - { name: 'ssh_proxy_config', tags: 'ssh_proxy_config', when: enable_ssh_proxy_config }
     - { name: 'ssl_cert', tags: 'ssl_cert', when: enable_ssl_certs }
     - { name: 'rsyslog_config', tags: 'rsyslog_config', when: enable_rsyslog_config }
+    - { name: 'rewrite_map', tags: 'rewrite_map', when: enable_rewrite_map }
-- 
GitLab


From 47b6c1b42471f3d5e8b7827bd26ebdd634849e33 Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Fri, 22 Nov 2024 09:47:12 -0600
Subject: [PATCH 107/172] Add compute build to ci pipeline

---
 .gitlab-ci.yml | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 18e0edb..5a3722a 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -110,6 +110,30 @@ workflow:
     reports:
       dotenv: image.env
 
+build_compute_image:
+  stage: build
+  needs: [build_base_image]
+  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}"
+      fi
+    - packer init openstack-compute
+    - packer validate openstack-compute
+    - packer build -machine-readable openstack-compute | tee compute_build.log
+
+
 build_http_proxy_image:
   stage: build
   environment:
-- 
GitLab


From c951eb62cfb576a6c2e08ca60c64d7a5ed44ccf2 Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Tue, 3 Dec 2024 10:32:25 -0600
Subject: [PATCH 108/172] compute node deploy

---
 .gitlab-ci.yml | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 5a3722a..cccac1c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -160,6 +160,41 @@ build_ssh_proxy_image:
     - if: $PIPELINE_TARGET == "build" && $BUILD_TARGET == "ssh-proxy"
       when: always
 
+deploy_compute_node:
+  stage: deploy
+  environment:
+    name: $ENV
+  tags:
+    - build
+  script:
+    - openstack image set --accept $compute-${BUILD_DATE} || 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
+      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
+    - |
+
+  rules:
+    - if: $PIPELINE_TARGET == "deploy"
+      when: always
+
 deploy_http_proxy_node:
   stage: deploy
   environment:
-- 
GitLab


From 1529133bab4e5db31ef05f65e7f59405a3b6e0b8 Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Tue, 3 Dec 2024 14:01:36 -0600
Subject: [PATCH 109/172] fixed yaml syntax for build and added rule block

---
 .gitlab-ci.yml | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index cccac1c..f293869 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -132,6 +132,11 @@ build_compute_image:
     - packer init openstack-compute
     - packer validate openstack-compute
     - packer build -machine-readable openstack-compute | tee compute_build.log
+    - |
+
+  rules:
+    - if: $PIPELINE_TARGET == "build"
+      when: always
 
 
 build_http_proxy_image:
-- 
GitLab


From 28aec52b18e7a2fb19c1de6b76743642be63edb8 Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Wed, 4 Dec 2024 09:16:30 -0600
Subject: [PATCH 110/172] removed needs condition from build_compute_image

---
 .gitlab-ci.yml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index f293869..2349ecf 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -112,7 +112,6 @@ workflow:
 
 build_compute_image:
   stage: build
-  needs: [build_base_image]
   tags:
     - build
   script:
-- 
GitLab


From a5fdd6ac0403d29d1c2aa0ddb022fb308dd4b7ac Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Wed, 4 Dec 2024 09:34:47 -0600
Subject: [PATCH 111/172] changed compute build structure

---
 .gitlab-ci.yml | 12 +++---------
 1 file changed, 3 insertions(+), 9 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 2349ecf..da4bff7 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -117,21 +117,15 @@ build_compute_image:
   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_build_instance_name="${BUILD_TARGET}-${COMPUTE_XCBC_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}"
+        export PKR_VAR_image_name="${BUILD_TARGET}-PR-${CI_MERGE_REQUEST_IID}"
       elif [ $CI_PIPELINE_SOURCE == 'schedule' ]; then
-        export PKR_VAR_image_name="compute-${BUILD_DATE}"
+        export PKR_VAR_image_name="${BUILD_TARGET}-${BUILD_DATE}"
       fi
-    - packer init openstack-compute
-    - packer validate openstack-compute
-    - packer build -machine-readable openstack-compute | tee compute_build.log
-    - |
 
   rules:
     - if: $PIPELINE_TARGET == "build"
-- 
GitLab


From 594c0df510b78aadf6680595547b9b06e8fa2698 Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Wed, 4 Dec 2024 10:08:24 -0600
Subject: [PATCH 112/172] Add packer command to compute build

---
 .gitlab-ci.yml | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index da4bff7..61608a8 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -118,7 +118,7 @@ build_compute_image:
     - *update_ansible_repo
     - *get_ansible_files
     - export PKR_VAR_flavor="${COMPUTE_BUILD_FLAVOR:-$PKR_VAR_flavor}"
-    - export PKR_VAR_build_instance_name="${BUILD_TARGET}-${COMPUTE_XCBC_HEAD}"
+    - export PKR_VAR_build_instance_name="${BUILD_TARGET}-${CRI_XCBC_HEAD}"
     - export PKR_VAR_image_date_suffix=false
     - |
       if [ $CI_PIPELINE_SOURCE == 'merge_request_event' ]; then
@@ -126,7 +126,13 @@ build_compute_image:
       elif [ $CI_PIPELINE_SOURCE == 'schedule' ]; then
         export PKR_VAR_image_name="${BUILD_TARGET}-${BUILD_DATE}"
       fi
-
+    # packer commands
+    - packer init openstack-compute
+    - packer validate openstack-compute
+    - packer build -machine-readable openstack-compute | tee compute_build.log
+    - export BUILT_COMPUTE_IMAGE_ID=$(grep 'Image:' compute_build.log | awk '{print $4}')
+    - echo BUILT_COMPUTE_IMAGE_ID=${BUILT_COMPUTE_IMAGE_ID} | tee -a $CI_PROJECT_DIR/image.env
+    - openstack image set --property CRI_XCBC_prod=${CRI_XCBC_prod} --property CRI_XCBC_dev=${CRI_XCBC_dev} --property PACKER_IMAGE_HEAD=${PACKER_IMAGE_HEAD} ${BUILT_COMPUTE_IMAGE_ID}
   rules:
     - if: $PIPELINE_TARGET == "build"
       when: always
-- 
GitLab


From d426ee314e5a7376d43188fe69622e27caad14cd Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Wed, 4 Dec 2024 12:58:51 -0600
Subject: [PATCH 113/172] changed compute built to be similar to proxy node
 builds

---
 .gitlab-ci.yml | 29 ++++++++++++++++++++---------
 1 file changed, 20 insertions(+), 9 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 61608a8..ebbfeef 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -110,15 +110,13 @@ workflow:
     reports:
       dotenv: image.env
 
-build_compute_image:
-  stage: build
-  tags:
-    - build
+.build_compute_image_template: &build_compute_image_template
   script:
     - *update_ansible_repo
     - *get_ansible_files
-    - export PKR_VAR_flavor="${COMPUTE_BUILD_FLAVOR:-$PKR_VAR_flavor}"
-    - export PKR_VAR_build_instance_name="${BUILD_TARGET}-${CRI_XCBC_HEAD}"
+    # packer vars for job env
+    - export PKR_VAR_flavor="${PROXY_BUILD_FLAVOR:-$PKR_VAR_flavor}"
+    - export PKR_VAR_build_instance_name="${BUILD_TARGET}-${EXT_REPO_HEAD}"
     - export PKR_VAR_image_date_suffix=false
     - |
       if [ $CI_PIPELINE_SOURCE == 'merge_request_event' ]; then
@@ -132,12 +130,25 @@ build_compute_image:
     - packer build -machine-readable openstack-compute | tee compute_build.log
     - export BUILT_COMPUTE_IMAGE_ID=$(grep 'Image:' compute_build.log | awk '{print $4}')
     - echo BUILT_COMPUTE_IMAGE_ID=${BUILT_COMPUTE_IMAGE_ID} | tee -a $CI_PROJECT_DIR/image.env
-    - openstack image set --property CRI_XCBC_prod=${CRI_XCBC_prod} --property CRI_XCBC_dev=${CRI_XCBC_dev} --property PACKER_IMAGE_HEAD=${PACKER_IMAGE_HEAD} ${BUILT_COMPUTE_IMAGE_ID}
+    # set image properties with repo state
+    - openstack image set --property EXT_PR_SRC_REPO=${EXT_PR_SRC_REPO} --property EXT_PR_SRC_BRANCH_SHA=${EXT_PR_SRC_BRANCH_SHA} --property EXT_PR_TARGET_REPO=${EXT_PR_TARGET_REPO} --property EXT_PR_TARGET_BRANCH_SHA=${EXT_PR_TARGET_BRANCH_SHA} --property PACKER_IMAGE_HEAD=${PACKER_IMAGE_HEAD} ${BUILT_COMPUTE_IMAGE_ID}
+  artifacts:
+    reports:
+      dotenv: image.env
+
+build_compute_image:
+  stage: build
+  environment:
+    name: $ENV
+  tags:
+    - build
+  variables:
+    PROXY_ENABLE_VAR: "enable_compute"
+  <<: *build_compute_image_template
   rules:
-    - if: $PIPELINE_TARGET == "build"
+    - if: $PIPELINE_TARGET == "build" && $BUILD_TARGET == "http-proxy"
       when: always
 
-
 build_http_proxy_image:
   stage: build
   environment:
-- 
GitLab


From ad40f9c726eb0679cb1b3d8158ccbdda5ffe3673 Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Wed, 4 Dec 2024 13:41:44 -0600
Subject: [PATCH 114/172] added root_ssh_key for compute node build variable

---
 openstack-compute/variables.pkr.hcl | 1 +
 1 file changed, 1 insertion(+)

diff --git a/openstack-compute/variables.pkr.hcl b/openstack-compute/variables.pkr.hcl
index 20efd64..d368139 100644
--- a/openstack-compute/variables.pkr.hcl
+++ b/openstack-compute/variables.pkr.hcl
@@ -1,6 +1,7 @@
 variable "root_ssh_key" {
   type        = string
   description = "The root key to use for ssh"
+  default     = ""
 }
 
 variable "image_name" {
-- 
GitLab


From 1dd27eca4e576a515ab829c6133f13f9e08ba7ec Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Wed, 4 Dec 2024 13:47:57 -0600
Subject: [PATCH 115/172] set build target to compute

---
 .gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index ebbfeef..af25bc5 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -146,7 +146,7 @@ build_compute_image:
     PROXY_ENABLE_VAR: "enable_compute"
   <<: *build_compute_image_template
   rules:
-    - if: $PIPELINE_TARGET == "build" && $BUILD_TARGET == "http-proxy"
+    - if: $PIPELINE_TARGET == "build" && $BUILD_TARGET == "compute"
       when: always
 
 build_http_proxy_image:
-- 
GitLab


From be42fff1ba6760b15ce6906c68717c3251047a0f Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Wed, 4 Dec 2024 14:39:02 -0600
Subject: [PATCH 116/172] Remove cluster hook from compute build

---
 ansible/compute.yml | 2 --
 1 file changed, 2 deletions(-)

diff --git a/ansible/compute.yml b/ansible/compute.yml
index 2907d08..4009929 100644
--- a/ansible/compute.yml
+++ b/ansible/compute.yml
@@ -8,5 +8,3 @@
     - { name: 'pam_slurm_adopt', tags: 'pam_slurm_adopt' }
     - { name: 'install_nhc', tags: 'install_nhc'}
 
-- name: Setup node for use as a virtual cheaha node
-  ansible.builtin.import_playbook: cheaha.yml
-- 
GitLab


From 5ff24ed64184ce008f75effba325938e622d8629 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Fri, 6 Dec 2024 19:03:52 -0500
Subject: [PATCH 117/172] feat: Rearrange code for readability

---
 .gitlab-ci.yml | 123 +++++++++++++++++++++++++------------------------
 1 file changed, 62 insertions(+), 61 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index af25bc5..1c9874c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -110,6 +110,32 @@ workflow:
     reports:
       dotenv: image.env
 
+build_http_proxy_image:
+  stage: build
+  environment:
+    name: $ENV
+  tags:
+    - build
+  variables:
+    PROXY_ENABLE_VAR: "enable_http_proxy"
+  <<: *build_proxy_image_template
+  rules:
+    - if: $PIPELINE_TARGET == "build" && $BUILD_TARGET == "http-proxy"
+      when: always
+
+build_ssh_proxy_image:
+  stage: build
+  environment:
+    name: $ENV
+  tags:
+    - build
+  variables:
+    PROXY_ENABLE_VAR: "enable_ssh_proxy"
+  <<: *build_proxy_image_template
+  rules:
+    - if: $PIPELINE_TARGET == "build" && $BUILD_TARGET == "ssh-proxy"
+      when: always
+
 .build_compute_image_template: &build_compute_image_template
   script:
     - *update_ansible_repo
@@ -149,67 +175,6 @@ build_compute_image:
     - if: $PIPELINE_TARGET == "build" && $BUILD_TARGET == "compute"
       when: always
 
-build_http_proxy_image:
-  stage: build
-  environment:
-    name: $ENV
-  tags:
-    - build
-  variables:
-    PROXY_ENABLE_VAR: "enable_http_proxy"
-  <<: *build_proxy_image_template
-  rules:
-    - if: $PIPELINE_TARGET == "build" && $BUILD_TARGET == "http-proxy"
-      when: always
-
-build_ssh_proxy_image:
-  stage: build
-  environment:
-    name: $ENV
-  tags:
-    - build
-  variables:
-    PROXY_ENABLE_VAR: "enable_ssh_proxy"
-  <<: *build_proxy_image_template
-  rules:
-    - if: $PIPELINE_TARGET == "build" && $BUILD_TARGET == "ssh-proxy"
-      when: always
-
-deploy_compute_node:
-  stage: deploy
-  environment:
-    name: $ENV
-  tags:
-    - build
-  script:
-    - openstack image set --accept $compute-${BUILD_DATE} || 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
-      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
-    - |
-
-  rules:
-    - if: $PIPELINE_TARGET == "deploy"
-      when: always
-
 deploy_http_proxy_node:
   stage: deploy
   environment:
@@ -310,3 +275,39 @@ deploy_ssh_proxy_node:
   rules:
     - if: $PIPELINE_TARGET == "deploy" && $SSH_PROXY_IMAGE_ID
       when: always
+
+deploy_compute_node:
+  stage: deploy
+  environment:
+    name: $ENV
+  tags:
+    - build
+  script:
+    - openstack image set --accept $compute-${BUILD_DATE} || 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
+      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
+    - |
+
+  rules:
+    - if: $PIPELINE_TARGET == "deploy"
+      when: always
+
-- 
GitLab


From 42ced718d6ee56775c3604c3f34c669f86c54c47 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Tue, 10 Dec 2024 16:18:06 -0500
Subject: [PATCH 118/172] Change compute reference to login

Because compute and login nodes are basically the same except login node
does not need slurmd and we don't use compute image anywhere. So use it
to build login image and change its references in CI script
---
 .gitlab-ci.yml                                | 24 +++++++++----------
 .../README.md                                 |  0
 .../nodeimage.pkr.hcl                         |  0
 .../variables.pkr.hcl                         |  0
 4 files changed, 12 insertions(+), 12 deletions(-)
 rename {openstack-compute => openstack-login}/README.md (100%)
 rename {openstack-compute => openstack-login}/nodeimage.pkr.hcl (100%)
 rename {openstack-compute => openstack-login}/variables.pkr.hcl (100%)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 1c9874c..2346bd9 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -136,7 +136,7 @@ build_ssh_proxy_image:
     - if: $PIPELINE_TARGET == "build" && $BUILD_TARGET == "ssh-proxy"
       when: always
 
-.build_compute_image_template: &build_compute_image_template
+.build_login_image_template: &build_login_image_template
   script:
     - *update_ansible_repo
     - *get_ansible_files
@@ -151,18 +151,18 @@ build_ssh_proxy_image:
         export PKR_VAR_image_name="${BUILD_TARGET}-${BUILD_DATE}"
       fi
     # packer commands
-    - packer init openstack-compute
-    - packer validate openstack-compute
-    - packer build -machine-readable openstack-compute | tee compute_build.log
-    - export BUILT_COMPUTE_IMAGE_ID=$(grep 'Image:' compute_build.log | awk '{print $4}')
-    - echo BUILT_COMPUTE_IMAGE_ID=${BUILT_COMPUTE_IMAGE_ID} | tee -a $CI_PROJECT_DIR/image.env
+    - packer init openstack-login
+    - packer validate openstack-login
+    - packer build -machine-readable openstack-login | tee login_build.log
+    - export BUILT_LOGIN_IMAGE_ID=$(grep 'Image:' login_build.log | awk '{print $4}')
+    - echo BUILT_LOGIN_IMAGE_ID=${BUILT_LOGIN_IMAGE_ID} | tee -a $CI_PROJECT_DIR/image.env
     # set image properties with repo state
-    - openstack image set --property EXT_PR_SRC_REPO=${EXT_PR_SRC_REPO} --property EXT_PR_SRC_BRANCH_SHA=${EXT_PR_SRC_BRANCH_SHA} --property EXT_PR_TARGET_REPO=${EXT_PR_TARGET_REPO} --property EXT_PR_TARGET_BRANCH_SHA=${EXT_PR_TARGET_BRANCH_SHA} --property PACKER_IMAGE_HEAD=${PACKER_IMAGE_HEAD} ${BUILT_COMPUTE_IMAGE_ID}
+    - openstack image set --property EXT_PR_SRC_REPO=${EXT_PR_SRC_REPO} --property EXT_PR_SRC_BRANCH_SHA=${EXT_PR_SRC_BRANCH_SHA} --property EXT_PR_TARGET_REPO=${EXT_PR_TARGET_REPO} --property EXT_PR_TARGET_BRANCH_SHA=${EXT_PR_TARGET_BRANCH_SHA} --property PACKER_IMAGE_HEAD=${CI_COMMIT_SHORT_SHA} ${BUILT_LOGIN_IMAGE_ID}
   artifacts:
     reports:
       dotenv: image.env
 
-build_compute_image:
+build_login_image:
   stage: build
   environment:
     name: $ENV
@@ -170,9 +170,9 @@ build_compute_image:
     - build
   variables:
     PROXY_ENABLE_VAR: "enable_compute"
-  <<: *build_compute_image_template
+  <<: *build_login_image_template
   rules:
-    - if: $PIPELINE_TARGET == "build" && $BUILD_TARGET == "compute"
+    - if: $PIPELINE_TARGET == "build" && $BUILD_TARGET == "login"
       when: always
 
 deploy_http_proxy_node:
@@ -276,14 +276,14 @@ deploy_ssh_proxy_node:
     - if: $PIPELINE_TARGET == "deploy" && $SSH_PROXY_IMAGE_ID
       when: always
 
-deploy_compute_node:
+deploy_login_node:
   stage: deploy
   environment:
     name: $ENV
   tags:
     - build
   script:
-    - openstack image set --accept $compute-${BUILD_DATE} || true
+    - openstack image set --accept $login-${BUILD_DATE} || true
     - FAILED=false
     - |
       cat > user_data.txt <<EOF
diff --git a/openstack-compute/README.md b/openstack-login/README.md
similarity index 100%
rename from openstack-compute/README.md
rename to openstack-login/README.md
diff --git a/openstack-compute/nodeimage.pkr.hcl b/openstack-login/nodeimage.pkr.hcl
similarity index 100%
rename from openstack-compute/nodeimage.pkr.hcl
rename to openstack-login/nodeimage.pkr.hcl
diff --git a/openstack-compute/variables.pkr.hcl b/openstack-login/variables.pkr.hcl
similarity index 100%
rename from openstack-compute/variables.pkr.hcl
rename to openstack-login/variables.pkr.hcl
-- 
GitLab


From d9b8ad29cea6faebb61208e517d65f07aedb7026 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Tue, 10 Dec 2024 16:19:47 -0500
Subject: [PATCH 119/172] Remove unncessary vars

---
 .gitlab-ci.yml | 2 --
 1 file changed, 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 2346bd9..8939464 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -168,8 +168,6 @@ build_login_image:
     name: $ENV
   tags:
     - build
-  variables:
-    PROXY_ENABLE_VAR: "enable_compute"
   <<: *build_login_image_template
   rules:
     - if: $PIPELINE_TARGET == "build" && $BUILD_TARGET == "login"
-- 
GitLab


From 5d0ff958ee1ef6ea99ee287dc9acedae4fc76a0d Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Tue, 10 Dec 2024 16:39:41 -0500
Subject: [PATCH 120/172] Add missing code to create instance and associate FIP

---
 .gitlab-ci.yml | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8939464..dae52c1 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -304,8 +304,23 @@ deploy_login_node:
       rm -rf /tmp/${CI_PROJECT_NAME}
       EOF
     - |
-
+      export cmd="openstack server create"
+      cmd+=" -c id -f value --image $LOGIN_IMAGE_ID"
+      cmd+=" --flavor $INSTANCE_FLAVOR"
+      cmd+=" --network $INSTANCE_NETWORK"
+      cmd+=" --security-group allow-ssh"
+      cmd+=" --user-data user_data.txt"
+      if [ -n "$LOGIN_PORT" ];then cmd+=" --port $LOGIN_PORT"; fi
+      cmd+=" --wait $LOGIN_INSTANCE_NAME"
+    - export LOGIN_INSTANCE_ID=$(bash -c "$cmd")
+    - |
+      # Associate the floating IP(s) with the SSH Proxy instance
+      for LOGIN_FLOATING_IP in ${LOGIN_FLOATING_IP_LIST[@]};
+      do
+        echo "Associating FLOATING_IP $LOGIN_FLOATING_IP with LOGIN_INSTANCE_ID $LOGIN_INSTANCE_ID"
+        openstack server add floating ip $LOGIN_INSTANCE_ID $LOGIN_FLOATING_IP
+      done
   rules:
-    - if: $PIPELINE_TARGET == "deploy"
+    - if: $PIPELINE_TARGET == "deploy" && $LOGIN_IMAGE_ID
       when: always
 
-- 
GitLab


From 21f2e2231d033272dbc3c297b3eec6d4346a335a Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Wed, 11 Dec 2024 12:55:50 -0500
Subject: [PATCH 121/172] Install prerequisite packages

---
 openstack-login/nodeimage.pkr.hcl | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/openstack-login/nodeimage.pkr.hcl b/openstack-login/nodeimage.pkr.hcl
index 15941ba..008b768 100644
--- a/openstack-login/nodeimage.pkr.hcl
+++ b/openstack-login/nodeimage.pkr.hcl
@@ -36,6 +36,14 @@ source "openstack" "image" {
 build {
   sources = ["source.openstack.image"]
 
+  provisioner "shell" {
+    inline = [
+      "sudo yum install -y libselinux-python3 python3 python3-pip tmux vim git bash-completion curl wget unzip",
+      "sudo python3 -m pip install --upgrade pip",
+      "sudo pip3 install s3cmd==2.3.0 ansible==4.10.0 python-openstackclient==5.8.0"
+    ]
+  }
+
   provisioner "ansible" {
     use_proxy     = false
     user          = var.ssh_username
-- 
GitLab


From fb99e4eed47d132b0b2c99ccde6dfdcc98fb52ce Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Mon, 16 Dec 2024 09:52:45 -0600
Subject: [PATCH 122/172] fix: accept login image

---
 .gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index dae52c1..08675a2 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -281,7 +281,7 @@ deploy_login_node:
   tags:
     - build
   script:
-    - openstack image set --accept $login-${BUILD_DATE} || true
+    - openstack image set --accept $LOGIN_IMAGE_ID || true
     - FAILED=false
     - |
       cat > user_data.txt <<EOF
-- 
GitLab


From c7a17a897c9d360c8f03a492abe8c085b3a5ebb5 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Tue, 17 Dec 2024 11:12:45 -0600
Subject: [PATCH 123/172] feat: Add conditional to support both autofs, fstab
 mnts

Closes https://gitlab.rc.uab.edu/rc/hpc-factory/-/issues/175
---
 ansible/group_vars/all                  | 1 +
 ansible/roles/nfs_mounts/tasks/main.yml | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index f7b65c0..d1b1c9a 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -30,6 +30,7 @@
 # nfs_mounts related
   enable_nfs_mounts: true
   use_autofs: false
+  use_fstab: false
   mount_points:
     - { "src": "master:/gpfs4", "path": "/gpfs4", "opts": "ro,sync,hard", "mode": "0755" }
     - { "src": "master:/gpfs5", "path": "/gpfs5", "opts": "ro,sync,hard", "mode": "0755" }
diff --git a/ansible/roles/nfs_mounts/tasks/main.yml b/ansible/roles/nfs_mounts/tasks/main.yml
index 507f4c6..96a76ff 100644
--- a/ansible/roles/nfs_mounts/tasks/main.yml
+++ b/ansible/roles/nfs_mounts/tasks/main.yml
@@ -1,7 +1,7 @@
 ---
 - name: nfs_mounts using fstab
   include_tasks: fstab.yml
-  when: not use_autofs
+  when: use_fstab
 
 - name: nfs_mounts using autofs
   include_tasks: autofs.yml
-- 
GitLab


From fadfb001bf29f9340ff53882c26d97bd364136fa Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Thu, 19 Dec 2024 12:24:54 -0600
Subject: [PATCH 124/172] feat: Download ansible files for cluster.yml

Closes https://gitlab.rc.uab.edu/rc/hpc-factory/-/issues/176
---
 .gitlab-ci.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 08675a2..e10ff28 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -300,6 +300,7 @@ deploy_login_node:
       [$ENV]
       127.0.0.1
       EEOF
+      s3cmd get --force -r --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
-- 
GitLab


From 2b70839e4bcbf92b2e823cfb0052dd6df62fef75 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Thu, 19 Dec 2024 14:34:38 -0600
Subject: [PATCH 125/172] feat: Add credentials for the s3cmd

---
 .gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e10ff28..e2956f7 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -300,7 +300,7 @@ deploy_login_node:
       [$ENV]
       127.0.0.1
       EEOF
-      s3cmd get --force -r --host=$AWS_HOST --host-bucket=$AWS_HOST s3://cheaha-cloud-ansible-files/ /tmp/${CI_PROJECT_NAME}/ansible/files/
+      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
-- 
GitLab


From 96e0db225ed30068f6a52c46b880ecad2db653d0 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Mon, 16 Dec 2024 12:33:28 -0600
Subject: [PATCH 126/172] feat: Add params to define the autofs mountpoints

Closes https://gitlab.rc.uab.edu/rc/hpc-factory/-/issues/173
---
 ansible/group_vars/all                    |  8 +++++++
 ansible/roles/nfs_mounts/tasks/autofs.yml | 26 +++++++++--------------
 2 files changed, 18 insertions(+), 16 deletions(-)

diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index d1b1c9a..9b6b230 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -34,6 +34,14 @@
   mount_points:
     - { "src": "master:/gpfs4", "path": "/gpfs4", "opts": "ro,sync,hard", "mode": "0755" }
     - { "src": "master:/gpfs5", "path": "/gpfs5", "opts": "ro,sync,hard", "mode": "0755" }
+  autofs_mounts:
+    - { mount_point: "/cm/shared", map_name: "cm-share", dir: "/cm/shared", mode: '0755', key: "*", src: "gpfs.rc.uab.edu:/data/cm/shared-8.2/&", opts: "fstype=nfs,vers=3,_netdev,defaults" }
+    - { mount_point: "/data/project", map_name: "data-project", dir: "/data/project", mode: '0755', key: "*", src: "gpfs.rc.uab.edu:/data/project/&", opts: "fstype=nfs,vers=3,_netdev,defaults" }
+    - { mount_point: "/data/user", map_name: "data-user", dir: "/data/user", mode: '0755', key: "*", src: "gpfs.rc.uab.edu:/data/user/&", opts: "fstype=nfs,vers=3,_netdev,local_lock=posix,defaults" }
+    - { mount_point: "/data/rc/apps", map_name: "data-rc-apps", dir: "/data/rc/apps", mode: '0755', key: "*", src: "gpfs.rc.uab.edu:/data/rc/apps/&", opts: "fstype=nfs,vers=3,_netdev,defaults" }
+    - { mount_point: "/-", map_name: "scratch", dir: "/scratch", mode: '0755', key: "/scratch", src: "gpfs.rc.uab.edu:/scratch", opts: "fstype=nfs,vers=3,_netdev,local_lock=posix,defaults" }
+    - { mount_point: "/home", map_name: "home", dir: "/data/user/home", mode: '0755', key: "*", src: ":/data/user/home/&", opts: 'fstype=bind' }
+
 
 #SSH Host Keys
   S3_ENDPOINT: ""
diff --git a/ansible/roles/nfs_mounts/tasks/autofs.yml b/ansible/roles/nfs_mounts/tasks/autofs.yml
index 39ba56e..daf9f01 100644
--- a/ansible/roles/nfs_mounts/tasks/autofs.yml
+++ b/ansible/roles/nfs_mounts/tasks/autofs.yml
@@ -6,11 +6,15 @@
     mode: "{{ item.mode }}"
   loop:
     - { dir: /local, mode: '0777' }
-    - { dir: /scratch, mode: '0755' }
     - { dir: /share, mode: '0755' }
-    - { dir: /data/rc/apps, mode: '0755' } # this is only required for the symlink to be happy
-    - { dir: /data/user, mode: '0755' }
-    - { dir: /data/project, mode: '0755' }
+
+- name: Create mountpoint dirs
+  ansible.builtin.file:
+    path: "{{ item.dir }}"
+    state: directory
+    mode: "{{ item.mode }}"
+  loop:
+    "{{ autofs_mounts }}"
 
 - name: Remove unused entry in master map
   ansible.builtin.replace:
@@ -29,12 +33,7 @@
     line: "{{ item.mount_point }} /etc/auto.{{ item.map_name }}"
     create: yes
   loop:
-    - { mount_point: "/cm/shared", map_name: "cm-share" }
-    - { mount_point: "/data/project", map_name: "data-project" }
-    - { mount_point: "/data/user", map_name: "data-user" }
-    - { mount_point: "/data/rc/apps", map_name: "data-rc-apps" }
-    - { mount_point: "/-", map_name: "scratch" }
-    - { mount_point: "/home", map_name: "home" }
+    "{{ autofs_mounts }}"
 
 - name: Set up autofs map files
   ansible.builtin.lineinfile:
@@ -42,12 +41,7 @@
     line: "{{ item.key }} -{{ item.opts }} {{ item.src }}"
     create: true
   loop:
-    - { map_name: "cm-share", key: "*", src: "gpfs.rc.uab.edu:/data/cm/shared-8.2/&", opts: "fstype=nfs,vers=3,_netdev,defaults" }
-    - { map_name: "data-project", key: "*", src: "gpfs.rc.uab.edu:/data/project/&", opts: "fstype=nfs,vers=3,_netdev,defaults" }
-    - { map_name: "data-user", key: "*", src: "gpfs.rc.uab.edu:/data/user/&", opts: "fstype=nfs,vers=3,_netdev,local_lock=posix,defaults" }
-    - { map_name: "data-rc-apps", key: "*", src: "gpfs.rc.uab.edu:/data/rc/apps/&", opts: "fstype=nfs,vers=3,_netdev,defaults" }
-    - { map_name: "scratch", key: "/scratch", src: "gpfs.rc.uab.edu:/scratch", opts: "fstype=nfs,vers=3,_netdev,local_lock=posix,defaults" }
-    - { map_name: "home", key: "*", src: ":/data/user/home/&", opts: 'fstype=bind' }
+    "{{ autofs_mounts }}"
 
 - name: Create symbolic links
   ansible.builtin.file:
-- 
GitLab


From b2495d56b7aefce468b1acddb8fe6e705c507186 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Wed, 18 Dec 2024 16:33:56 -0600
Subject: [PATCH 127/172] feat: Change the default paths mounted with autofs

The values used in prod will be defined at runtime so replacing them
with default values
---
 ansible/group_vars/all | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index 9b6b230..2dabea2 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -35,13 +35,8 @@
     - { "src": "master:/gpfs4", "path": "/gpfs4", "opts": "ro,sync,hard", "mode": "0755" }
     - { "src": "master:/gpfs5", "path": "/gpfs5", "opts": "ro,sync,hard", "mode": "0755" }
   autofs_mounts:
-    - { mount_point: "/cm/shared", map_name: "cm-share", dir: "/cm/shared", mode: '0755', key: "*", src: "gpfs.rc.uab.edu:/data/cm/shared-8.2/&", opts: "fstype=nfs,vers=3,_netdev,defaults" }
-    - { mount_point: "/data/project", map_name: "data-project", dir: "/data/project", mode: '0755', key: "*", src: "gpfs.rc.uab.edu:/data/project/&", opts: "fstype=nfs,vers=3,_netdev,defaults" }
-    - { mount_point: "/data/user", map_name: "data-user", dir: "/data/user", mode: '0755', key: "*", src: "gpfs.rc.uab.edu:/data/user/&", opts: "fstype=nfs,vers=3,_netdev,local_lock=posix,defaults" }
-    - { mount_point: "/data/rc/apps", map_name: "data-rc-apps", dir: "/data/rc/apps", mode: '0755', key: "*", src: "gpfs.rc.uab.edu:/data/rc/apps/&", opts: "fstype=nfs,vers=3,_netdev,defaults" }
-    - { mount_point: "/-", map_name: "scratch", dir: "/scratch", mode: '0755', key: "/scratch", src: "gpfs.rc.uab.edu:/scratch", opts: "fstype=nfs,vers=3,_netdev,local_lock=posix,defaults" }
-    - { mount_point: "/home", map_name: "home", dir: "/data/user/home", mode: '0755', key: "*", src: ":/data/user/home/&", opts: 'fstype=bind' }
-
+    - { "src": "master:/gpfs4/&", "path": "/gpfs4", "opts": "fstype=nfs,vers=3,_netdev,default", "mode": '0755', "mount_point": "/gpfs4", "map_name": "gpfs4", key: "*" }
+    - { "src": "master:/gpfs5/&", "path": "/gpfs5", "opts": "fstype=nfs,vers=3,_netdev,default", "mode": '0755', "mount_point": "/gpfs5", "map_name": "gpfs5", key: "*" }
 
 #SSH Host Keys
   S3_ENDPOINT: ""
-- 
GitLab


From 96764f6a5858c7cb9ca7e10b3a4f554e4047fd24 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Thu, 19 Dec 2024 10:12:09 -0600
Subject: [PATCH 128/172] style: Change the key name in autofs_mounts dict

So that we can have same key names for both dicts used in autofs.yml and fstab.yml roles
---
 ansible/roles/nfs_mounts/tasks/autofs.yml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/ansible/roles/nfs_mounts/tasks/autofs.yml b/ansible/roles/nfs_mounts/tasks/autofs.yml
index daf9f01..301c266 100644
--- a/ansible/roles/nfs_mounts/tasks/autofs.yml
+++ b/ansible/roles/nfs_mounts/tasks/autofs.yml
@@ -1,16 +1,16 @@
 ---
 - name: Create base directories
   ansible.builtin.file:
-    path: "{{ item.dir }}"
+    path: "{{ item.path }}"
     state: directory
     mode: "{{ item.mode }}"
   loop:
-    - { dir: /local, mode: '0777' }
-    - { dir: /share, mode: '0755' }
+    - { path: /local, mode: '0777' }
+    - { path: /share, mode: '0755' }
 
 - name: Create mountpoint dirs
   ansible.builtin.file:
-    path: "{{ item.dir }}"
+    path: "{{ item.path }}"
     state: directory
     mode: "{{ item.mode }}"
   loop:
-- 
GitLab


From 180e8eabb503b91bf6d0dad8ed3a29514a3748a2 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Mon, 23 Dec 2024 10:53:00 -0500
Subject: [PATCH 129/172] feat: Rename compute.yml to login.yml for login build

Change the references to compute.yml in the packer template to use
login.yml
---
 ansible/{compute.yml => login.yml} | 0
 openstack-login/nodeimage.pkr.hcl  | 2 +-
 2 files changed, 1 insertion(+), 1 deletion(-)
 rename ansible/{compute.yml => login.yml} (100%)

diff --git a/ansible/compute.yml b/ansible/login.yml
similarity index 100%
rename from ansible/compute.yml
rename to ansible/login.yml
diff --git a/openstack-login/nodeimage.pkr.hcl b/openstack-login/nodeimage.pkr.hcl
index 008b768..fd6b35e 100644
--- a/openstack-login/nodeimage.pkr.hcl
+++ b/openstack-login/nodeimage.pkr.hcl
@@ -48,7 +48,7 @@ build {
     use_proxy     = false
     user          = var.ssh_username
     groups        = ["compute"]
-    playbook_file = "./ansible/compute.yml"
+    playbook_file = "./ansible/login.yml"
     roles_path    = "./ansible/roles"
     extra_arguments = [
       "--extra-vars", "root_ssh_key='${var.root_ssh_key}'"
-- 
GitLab


From 10f7c135599ec344b175189f4c079c8d90931e65 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Mon, 23 Dec 2024 10:59:23 -0500
Subject: [PATCH 130/172] fix: Remove pam_slurm config causing ssh denial

pam_slurm config denies ssh if there is no slurm job on the compute node
A login node is not expected to run jobs so we removed this config from
the login playbook
---
 ansible/login.yml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/ansible/login.yml b/ansible/login.yml
index 4009929..9d7dd23 100644
--- a/ansible/login.yml
+++ b/ansible/login.yml
@@ -5,6 +5,5 @@
   roles:
     - { name: 'fix_centos_repo', tags: 'fix_centos_repo' }
     - { name: 'install_packages', tags: 'install_packages' }
-    - { name: 'pam_slurm_adopt', tags: 'pam_slurm_adopt' }
     - { name: 'install_nhc', tags: 'install_nhc'}
 
-- 
GitLab


From 0ec2bcda9f4a92d981141966f1862c2892e42349 Mon Sep 17 00:00:00 2001
From: Bo-Chun Chen <louistw@uab.edu>
Date: Fri, 27 Dec 2024 14:14:11 -0600
Subject: [PATCH 131/172] fix: add when condition to ssh_host_keys role

Follow the same approach in ssl_cert role, to avoid missing host key issue during deploy
---
 ansible/roles/ssh_host_keys/tasks/main.yml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/ansible/roles/ssh_host_keys/tasks/main.yml b/ansible/roles/ssh_host_keys/tasks/main.yml
index fa39838..59beb02 100644
--- a/ansible/roles/ssh_host_keys/tasks/main.yml
+++ b/ansible/roles/ssh_host_keys/tasks/main.yml
@@ -22,6 +22,7 @@
     aws_secret_key: "{{ LTS_SECRET_KEY }}"
   vars:
     ansible_python_interpreter: /usr/bin/python3
+  when: SSH_HOST_KEYS_S3_BUCKET | length > 0 and SSH_HOST_KEYS_S3_OBJECT | length > 0
 
 - name: Unpack SSH host keys to /etc/ssh
   ansible.builtin.unarchive:
@@ -31,6 +32,7 @@
     owner: root
     remote_src: yes
   become: true
+  when: SSH_HOST_KEYS_S3_BUCKET | length > 0 and SSH_HOST_KEYS_S3_OBJECT | length > 0
 
 - name: Remove the temporary folder after put in place
   ansible.builtin.file:
-- 
GitLab


From 6019778c76eb696c7b72d4131f46791a937aa3b5 Mon Sep 17 00:00:00 2001
From: Bo-Chun Chen <louistw@uab.edu>
Date: Fri, 27 Dec 2024 15:25:17 -0600
Subject: [PATCH 132/172] fix: use owner instead of user in template ansible
 module

---
 ansible/roles/rewrite_map/tasks/main.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ansible/roles/rewrite_map/tasks/main.yaml b/ansible/roles/rewrite_map/tasks/main.yaml
index 74c8778..36c671a 100644
--- a/ansible/roles/rewrite_map/tasks/main.yaml
+++ b/ansible/roles/rewrite_map/tasks/main.yaml
@@ -3,6 +3,6 @@
   ansible.builtin.template:
     src: rewrite_map_config_py.j2
     mode: '600'
-    user: root
+    owner: root
     group: root
     dest: /var/www/rewrite_map_config.py
-- 
GitLab


From 68ac825f990e9aa426c9a8506dd08ebcf73ec6ca Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Thu, 2 Jan 2025 09:58:22 -0500
Subject: [PATCH 133/172] fix: Add missing autofs service start

---
 ansible/roles/nfs_mounts/tasks/autofs.yml | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/ansible/roles/nfs_mounts/tasks/autofs.yml b/ansible/roles/nfs_mounts/tasks/autofs.yml
index 301c266..642a02e 100644
--- a/ansible/roles/nfs_mounts/tasks/autofs.yml
+++ b/ansible/roles/nfs_mounts/tasks/autofs.yml
@@ -54,7 +54,8 @@
   loop:
     - { src: /data/rc/apps, dest: /share/apps }
 
-- name: Enable autofs service
+- name: Enable and start autofs service
   ansible.builtin.service:
     name: autofs
     enabled: true
+    state: restarted
-- 
GitLab


From ba397c1c2ec0634813360432aec2c23d9ef74249 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Thu, 2 Jan 2025 16:14:07 -0500
Subject: [PATCH 134/172] fix: Skip creating home dir for slurm user

The home dir for slurm user is available as a mount from master so there
is no need to create a local home dir for it.
---
 ansible/roles/slurm_client/tasks/main.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/ansible/roles/slurm_client/tasks/main.yml b/ansible/roles/slurm_client/tasks/main.yml
index 9751720..e2c1d78 100644
--- a/ansible/roles/slurm_client/tasks/main.yml
+++ b/ansible/roles/slurm_client/tasks/main.yml
@@ -19,6 +19,7 @@
     state: present
     uid: 450
     group: slurm
+    create_home: false
 
 - name: Copy munge key
   ansible.builtin.copy:
-- 
GitLab


From d5f0f8e87242e4b6dcc4c609023e30dedb20c34b Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Fri, 3 Jan 2025 20:15:22 -0600
Subject: [PATCH 135/172] feat: add extra_vars variable in packer templates

---
 openstack-login/variables.pkr.hcl | 8 +++++++-
 openstack-ood/variables.pkr.hcl   | 8 +++++++-
 openstack-proxy/variables.pkr.hcl | 5 +++++
 3 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/openstack-login/variables.pkr.hcl b/openstack-login/variables.pkr.hcl
index d368139..6cef95c 100644
--- a/openstack-login/variables.pkr.hcl
+++ b/openstack-login/variables.pkr.hcl
@@ -88,4 +88,10 @@ variable "volume_size" {
   type        = number
   default     = 20
   description = "The default volume size for building iamge"
-}
\ No newline at end of file
+}
+
+variable "extra_vars" {
+  type        = string
+  default     = ""
+  description = "Extra vars to pass to ansible playbook command"
+}
diff --git a/openstack-ood/variables.pkr.hcl b/openstack-ood/variables.pkr.hcl
index 5a6f608..b87cb6d 100644
--- a/openstack-ood/variables.pkr.hcl
+++ b/openstack-ood/variables.pkr.hcl
@@ -87,4 +87,10 @@ variable "volume_size" {
   type        = number
   default     = 20
   description = "The default volume size for building iamge"
-}
\ No newline at end of file
+}
+
+variable "extra_vars" {
+  type        = string
+  default     = ""
+  description = "Extra vars to pass to ansible playbook command"
+}
diff --git a/openstack-proxy/variables.pkr.hcl b/openstack-proxy/variables.pkr.hcl
index 9215362..6ab03ba 100644
--- a/openstack-proxy/variables.pkr.hcl
+++ b/openstack-proxy/variables.pkr.hcl
@@ -106,3 +106,8 @@ variable "ANSIBLE_VERBOSITY" {
   description = "to increase verbosity - 0|1|2|3|4"
 }
 
+variable "extra_vars" {
+  type        = string
+  default     = ""
+  description = "Extra vars to pass to ansible playbook command"
+}
-- 
GitLab


From fd96d27a73be5ce5bf7af7c55f3017d8dd25dec0 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Fri, 3 Jan 2025 20:22:39 -0600
Subject: [PATCH 136/172] feat: pass extra_vars to packer template

---
 openstack-login/nodeimage.pkr.hcl | 3 +++
 openstack-ood/nodeimage.pkr.hcl   | 3 +++
 openstack-proxy/nodeimage.pkr.hcl | 3 +++
 3 files changed, 9 insertions(+)

diff --git a/openstack-login/nodeimage.pkr.hcl b/openstack-login/nodeimage.pkr.hcl
index fd6b35e..e770d3e 100644
--- a/openstack-login/nodeimage.pkr.hcl
+++ b/openstack-login/nodeimage.pkr.hcl
@@ -61,5 +61,8 @@ build {
     groups           = ["compute"]
     ansible_env_vars = ["ANSIBLE_HOST_KEY_CHECKING=False"]
     playbook_file    = "./CRI_XCBC/compute-packer.yaml"
+    extra_arguments  = [
+      "--extra-vars", "${var.extra_vars}"
+    ]
   }
 }
diff --git a/openstack-ood/nodeimage.pkr.hcl b/openstack-ood/nodeimage.pkr.hcl
index b31d7a1..61b05ef 100644
--- a/openstack-ood/nodeimage.pkr.hcl
+++ b/openstack-ood/nodeimage.pkr.hcl
@@ -53,5 +53,8 @@ build {
     groups           = ["ood", "knightly"]
     ansible_env_vars = ["ANSIBLE_HOST_KEY_CHECKING=False"]
     playbook_file    = "./CRI_XCBC/ood-packer.yaml"
+    extra_arguments  = [
+      "--extra-vars", "${var.extra_vars}"
+    ]
   }
 }
diff --git a/openstack-proxy/nodeimage.pkr.hcl b/openstack-proxy/nodeimage.pkr.hcl
index 1410cbe..b9480f2 100644
--- a/openstack-proxy/nodeimage.pkr.hcl
+++ b/openstack-proxy/nodeimage.pkr.hcl
@@ -58,5 +58,8 @@ build {
       "ANSIBLE_FORCE_COLOR=true"
     ]
     playbook_file    = "./CRI_XCBC/proxy.yaml"
+    extra_arguments  = [
+      "--extra-vars", "${var.extra_vars}"
+    ]
   }
 }
-- 
GitLab


From ecbd2287adff9451d46acc077a92ff72c89f24e2 Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Tue, 7 Jan 2025 11:44:08 -0600
Subject: [PATCH 137/172] Update Apache configuration for OOD rewrite rules
 during deploy phase
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

We lookup the value of the placeholder (RewriteCond %{HTTP:REMOTE_USER}  \’^(.+)$\’) in this case in the apache conf during build and replace it with the rewrite conditions during deploy phase.
---
 ansible/roles/rewrite_map/tasks/main.yaml | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/ansible/roles/rewrite_map/tasks/main.yaml b/ansible/roles/rewrite_map/tasks/main.yaml
index 36c671a..ed79cc8 100644
--- a/ansible/roles/rewrite_map/tasks/main.yaml
+++ b/ansible/roles/rewrite_map/tasks/main.yaml
@@ -6,3 +6,11 @@
     owner: root
     group: root
     dest: /var/www/rewrite_map_config.py
+
+- name: Replace OOD rewrite placeholder in Apache configuration
+  ansible.builtin.replace:
+    path: /etc/httpd/conf.d/front-end.conf
+    regexp: "RewriteCond %{HTTP:REMOTE_USER} '\\^\\(\\.\\+\\)\\$'"
+    replace: |
+      RewriteCond %{HTTP:REMOTE_USER} '([a-zA-Z0-9_.+-]+)@uab.edu$' [OR]
+      RewriteCond %{HTTP:REMOTE_USER} 'urn:mace:incommon:uab.edu!https://uabgrid.uab.edu/shibboleth!(.+)$'
-- 
GitLab


From b8f68f374313b5df7aa7e4323c455681329aedf4 Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Tue, 7 Jan 2025 12:23:19 -0600
Subject: [PATCH 138/172] fixed task name to reflect functionality

previously it reflected a placeholder but it actually is the value in file from build that we're looking for and replacing in deploy phase
---
 ansible/roles/rewrite_map/tasks/main.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ansible/roles/rewrite_map/tasks/main.yaml b/ansible/roles/rewrite_map/tasks/main.yaml
index ed79cc8..ffd4f6f 100644
--- a/ansible/roles/rewrite_map/tasks/main.yaml
+++ b/ansible/roles/rewrite_map/tasks/main.yaml
@@ -7,7 +7,7 @@
     group: root
     dest: /var/www/rewrite_map_config.py
 
-- name: Replace OOD rewrite placeholder in Apache configuration
+- name: Replace OOD rewrite condition regex in Apache configuration
   ansible.builtin.replace:
     path: /etc/httpd/conf.d/front-end.conf
     regexp: "RewriteCond %{HTTP:REMOTE_USER} '\\^\\(\\.\\+\\)\\$'"
-- 
GitLab


From 4deca31396621d781fd0e74894d7865a041f57e0 Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Tue, 7 Jan 2025 16:34:17 -0600
Subject: [PATCH 139/172] Added 4 extra spaces for apache file consistency. The
 4 extra saces do not affect functionality

---
 ansible/roles/rewrite_map/tasks/main.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ansible/roles/rewrite_map/tasks/main.yaml b/ansible/roles/rewrite_map/tasks/main.yaml
index ffd4f6f..8dab4d5 100644
--- a/ansible/roles/rewrite_map/tasks/main.yaml
+++ b/ansible/roles/rewrite_map/tasks/main.yaml
@@ -13,4 +13,4 @@
     regexp: "RewriteCond %{HTTP:REMOTE_USER} '\\^\\(\\.\\+\\)\\$'"
     replace: |
       RewriteCond %{HTTP:REMOTE_USER} '([a-zA-Z0-9_.+-]+)@uab.edu$' [OR]
-      RewriteCond %{HTTP:REMOTE_USER} 'urn:mace:incommon:uab.edu!https://uabgrid.uab.edu/shibboleth!(.+)$'
+          RewriteCond %{HTTP:REMOTE_USER} 'urn:mace:incommon:uab.edu!https://uabgrid.uab.edu/shibboleth!(.+)$'
-- 
GitLab


From e1367527d4773f2310cc727347527f3bf49e0e82 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Tue, 7 Jan 2025 17:13:26 -0600
Subject: [PATCH 140/172] fix: restart httpd service after update

---
 ansible/roles/rewrite_map/tasks/main.yaml | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/ansible/roles/rewrite_map/tasks/main.yaml b/ansible/roles/rewrite_map/tasks/main.yaml
index 8dab4d5..d990565 100644
--- a/ansible/roles/rewrite_map/tasks/main.yaml
+++ b/ansible/roles/rewrite_map/tasks/main.yaml
@@ -14,3 +14,9 @@
     replace: |
       RewriteCond %{HTTP:REMOTE_USER} '([a-zA-Z0-9_.+-]+)@uab.edu$' [OR]
           RewriteCond %{HTTP:REMOTE_USER} 'urn:mace:incommon:uab.edu!https://uabgrid.uab.edu/shibboleth!(.+)$'
+
+- name: Restart httpd services
+  ansible.builtin.service:
+    name: httpd
+    enabled: true
+    state: restarted
-- 
GitLab


From 17f0d7c5b73b6ea77633ff5d599c4563a6842cdd Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Mon, 6 Jan 2025 13:40:36 -0500
Subject: [PATCH 141/172] ci: Add OOD image build job to gitlab CI

---
 .gitlab-ci.yml | 41 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e2956f7..fe63fba 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -173,6 +173,47 @@ build_login_image:
     - if: $PIPELINE_TARGET == "build" && $BUILD_TARGET == "login"
       when: always
 
+build_ood_image:
+  stage: build
+  tags:
+    - build
+  script:
+    - *update_ansible_repo
+    - *get_ansible_files
+    # packer vars for job env
+    - export PKR_VAR_flavor="${OOD_BUILD_FLAVOR:-$PKR_VAR_flavor}"
+    - export PKR_VAR_build_instance_name="${BUILD_TARGET}-${EXT_REPO_HEAD}"
+    - export PKR_VAR_image_date_suffix=false
+    - >
+      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/(user_register_app_key: ).*/\1\"${SELF_REG_APP_KEY}\"/" CRI_XCBC/group_vars/knightly'
+    - 'sed -i -E "s/(celery_user_password: ).*/\1\"${CELERY_PASSWD}\"/" CRI_XCBC/group_vars/knightly'
+    - 'sed -i -E "s|(ssh_pub_key: ).*|\1\"{{ lookup(''file'', ''${SSH_PUB_KEY}'') }}\"|" CRI_XCBC/group_vars/knightly'
+    - |
+      if [ $CI_PIPELINE_SOURCE == 'merge_request_event' ]; then
+        export PKR_VAR_image_name="ood-PR-${CI_MERGE_REQUEST_IID}"
+      elif [ $CI_PIPELINE_SOURCE == 'schedule' ]; then
+        export PKR_VAR_image_name="ood-${BUILD_DATE}"
+      fi
+    # packer commands
+    - packer init openstack-ood
+    - packer validate openstack-ood
+    - packer build -machine-readable openstack-ood | tee ood_build.log
+    - export BUILT_OOD_IMAGE_ID=$(grep 'Image:' ood_build.log | awk '{print $4}')
+    - echo BUILT_OOD_IMAGE_ID=${BUILT_OOD_IMAGE_ID} | tee -a $CI_PROJECT_DIR/image.env
+    # set image properties with repo state
+    - openstack image set --property EXT_PR_SRC_REPO=${EXT_PR_SRC_REPO} --property EXT_PR_SRC_BRANCH_SHA=${EXT_PR_SRC_BRANCH_SHA} --property EXT_PR_TARGET_REPO=${EXT_PR_TARGET_REPO} --property EXT_PR_TARGET_BRANCH_SHA=${EXT_PR_TARGET_BRANCH_SHA} --property PACKER_IMAGE_HEAD=${CI_COMMIT_SHORT_SHA} ${BUILT_OOD_IMAGE_ID}
+  artifacts:
+    reports:
+      dotenv: image.env
+  rules:
+    - if: $PIPELINE_TARGET == "build" && $BUILD_TARGET == "ood"
+      when: always
+
 deploy_http_proxy_node:
   stage: deploy
   environment:
-- 
GitLab


From d78a2612e4862cd5224fbb01aef5c09cbcb2369c Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Tue, 7 Jan 2025 12:11:04 -0500
Subject: [PATCH 142/172] fix: Define a default value for root ssh pub key

to avoid error when a value is not provided for root_ssh_key
---
 openstack-ood/variables.pkr.hcl | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/openstack-ood/variables.pkr.hcl b/openstack-ood/variables.pkr.hcl
index 5a6f608..a97e327 100644
--- a/openstack-ood/variables.pkr.hcl
+++ b/openstack-ood/variables.pkr.hcl
@@ -1,5 +1,6 @@
 variable "root_ssh_key" {
   type        = string
+  default     = ""
   description = "The root key to use for ssh"
 }
 
@@ -87,4 +88,4 @@ variable "volume_size" {
   type        = number
   default     = 20
   description = "The default volume size for building iamge"
-}
\ No newline at end of file
+}
-- 
GitLab


From 6a74a89ce71abec1611ba32e726de22e26c2109c Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Tue, 7 Jan 2025 12:30:37 -0500
Subject: [PATCH 143/172] fix: Delete cheaha.yml call from ood.yml playbook

We moved cheaha.yml playbook to run during deploy time
---
 ansible/ood.yml | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/ansible/ood.yml b/ansible/ood.yml
index 089ffd3..37c09aa 100644
--- a/ansible/ood.yml
+++ b/ansible/ood.yml
@@ -6,6 +6,3 @@
     - { name: 'fix_centos_repo', tags: 'fix_centos_repo' }
     - { name: 'install_packages', tags: 'install_packages' }
     - { name: 'install_zsh', tags: 'install_zsh' }
-
-- name: Setup node for use as a virtual cheaha node
-  ansible.builtin.import_playbook: cheaha.yml
-- 
GitLab


From 93b58dd8a5c79e5c103ec832808a4a899c9c9ed0 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Tue, 7 Jan 2025 13:27:49 -0500
Subject: [PATCH 144/172] feat: Add environment to the ood image build ci job

---
 .gitlab-ci.yml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index fe63fba..8b441ee 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -175,6 +175,8 @@ build_login_image:
 
 build_ood_image:
   stage: build
+  environment:
+    name: $ENV
   tags:
     - build
   script:
-- 
GitLab


From ffb9f2382987c7194fc76a87067d6066e8d2e450 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Wed, 8 Jan 2025 15:38:13 -0500
Subject: [PATCH 145/172] feat: Add pkgs required during deploy

---
 openstack-ood/nodeimage.pkr.hcl | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/openstack-ood/nodeimage.pkr.hcl b/openstack-ood/nodeimage.pkr.hcl
index b31d7a1..2b516be 100644
--- a/openstack-ood/nodeimage.pkr.hcl
+++ b/openstack-ood/nodeimage.pkr.hcl
@@ -54,4 +54,13 @@ build {
     ansible_env_vars = ["ANSIBLE_HOST_KEY_CHECKING=False"]
     playbook_file    = "./CRI_XCBC/ood-packer.yaml"
   }
+
+  provisioner "shell" {
+    inline = [
+      "sudo yum install -y libselinux-python3 python3 python3-pip tmux vim git bash-completion curl wget unzip",
+      "sudo python3 -m pip install --upgrade pip",
+      "sudo pip3 install s3cmd==2.3.0 ansible==4.10.0 python-openstackclient==5.8.0"
+    ]
+  }
+
 }
-- 
GitLab


From 056ba88eccd317cb79a099d28483a3b1ed3bed2e Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Tue, 14 Jan 2025 12:54:35 -0600
Subject: [PATCH 146/172] feat: update account app port

---
 ansible/group_vars/all                    | 2 ++
 ansible/roles/rewrite_map/tasks/main.yaml | 6 ++++++
 2 files changed, 8 insertions(+)

diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index eaef961..7055312 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -73,3 +73,5 @@
     - {"name": "gpfs4", "host": "login001", "default": True }
     - {"name": "gpfs5", "host": "login002", "default": False }
 
+# account app
+  account_app_port: 8000
diff --git a/ansible/roles/rewrite_map/tasks/main.yaml b/ansible/roles/rewrite_map/tasks/main.yaml
index d990565..8b08eb6 100644
--- a/ansible/roles/rewrite_map/tasks/main.yaml
+++ b/ansible/roles/rewrite_map/tasks/main.yaml
@@ -15,6 +15,12 @@
       RewriteCond %{HTTP:REMOTE_USER} '([a-zA-Z0-9_.+-]+)@uab.edu$' [OR]
           RewriteCond %{HTTP:REMOTE_USER} 'urn:mace:incommon:uab.edu!https://uabgrid.uab.edu/shibboleth!(.+)$'
 
+- name: Replace account app port in Apache configuration
+  ansible.builtin.replace:
+    path: /etc/httpd/conf.d/front-end.conf
+    regexp: "account-app:8000"
+    replace: "account-app:{{ account_app_port }}"
+
 - name: Restart httpd services
   ansible.builtin.service:
     name: httpd
-- 
GitLab


From 2a76eae35dfad9b5ecafd8f46f71afb4b97437e1 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Fri, 10 Jan 2025 16:29:59 -0500
Subject: [PATCH 147/172] feat: Download group_vars based on conditional for
 knightly and prod

Download group_vars/knightly or group_vars/prod for knightly or prod
environments respectively.
Note: For all other environments like dev or staging just use the
default values from group_vars/all
---
 .gitlab-ci.yml | 29 ++++++++++++++++++++---------
 1 file changed, 20 insertions(+), 9 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8b441ee..fd17b81 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -186,15 +186,26 @@ build_ood_image:
     - export PKR_VAR_flavor="${OOD_BUILD_FLAVOR:-$PKR_VAR_flavor}"
     - export PKR_VAR_build_instance_name="${BUILD_TARGET}-${EXT_REPO_HEAD}"
     - export PKR_VAR_image_date_suffix=false
-    - >
-      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/(user_register_app_key: ).*/\1\"${SELF_REG_APP_KEY}\"/" CRI_XCBC/group_vars/knightly'
-    - 'sed -i -E "s/(celery_user_password: ).*/\1\"${CELERY_PASSWD}\"/" CRI_XCBC/group_vars/knightly'
-    - 'sed -i -E "s|(ssh_pub_key: ).*|\1\"{{ lookup(''file'', ''${SSH_PUB_KEY}'') }}\"|" CRI_XCBC/group_vars/knightly'
+    - |
+      if [[ $ENV == 'knightly' ]]; then
+        curl --header "PRIVATE-TOKEN: ${ANSIBLE_VAR_TOKEN}" \
+        "${CI_API_V4_URL}/projects/2836/repository/files/knightly/raw?ref=main" \
+        -o CRI_XCBC/group_vars/$ENV
+        'sed -i -E "s/(lts_access_key: ).*/\1\"${AWS_ACCESS_KEY_ID}\"/" CRI_XCBC/group_vars/$ENV'
+        'sed -i -E "s/(lts_secret_key: ).*/\1\"${AWS_SECRET_ACCESS_KEY}\"/" CRI_XCBC/group_vars/$ENV'
+        'sed -i -E "s/(user_register_app_key: ).*/\1\"${SELF_REG_APP_KEY}\"/" CRI_XCBC/group_vars/$ENV'
+        'sed -i -E "s/(celery_user_password: ).*/\1\"${CELERY_PASSWD}\"/" CRI_XCBC/group_vars/$ENV'
+        'sed -i -E "s|(ssh_pub_key: ).*|\1\"{{ lookup(''file'', ''${SSH_PUB_KEY}'') }}\"|" CRI_XCBC/group_vars/$ENV'
+      elif [[ $ENV == 'prod' ]]; then
+        curl --header "PRIVATE-TOKEN: ${ANSIBLE_VAR_TOKEN}" \
+        "${CI_API_V4_URL}/projects/2836/repository/files/prod/raw?ref=main" \
+        -o CRI_XCBC/group_vars/$ENV
+        'sed -i -E "s/(lts_access_key: ).*/\1\"${AWS_ACCESS_KEY_ID}\"/" CRI_XCBC/group_vars/$ENV'
+        'sed -i -E "s/(lts_secret_key: ).*/\1\"${AWS_SECRET_ACCESS_KEY}\"/" CRI_XCBC/group_vars/$ENV'
+        'sed -i -E "s/(user_register_app_key: ).*/\1\"${SELF_REG_APP_KEY}\"/" CRI_XCBC/group_vars/$ENV'
+        'sed -i -E "s/(celery_user_password: ).*/\1\"${CELERY_PASSWD}\"/" CRI_XCBC/group_vars/$ENV'
+        'sed -i -E "s|(ssh_pub_key: ).*|\1\"{{ lookup(''file'', ''${SSH_PUB_KEY}'') }}\"|" CRI_XCBC/group_vars/$ENV'
+      fi
     - |
       if [ $CI_PIPELINE_SOURCE == 'merge_request_event' ]; then
         export PKR_VAR_image_name="ood-PR-${CI_MERGE_REQUEST_IID}"
-- 
GitLab


From 0685dcb8c5d8b76df2b217b93c5fcf0e8807c384 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Wed, 15 Jan 2025 00:39:19 -0500
Subject: [PATCH 148/172] feat: Add a way to define multiple security groups

Closes https://gitlab.rc.uab.edu/rc/hpc-factory/-/issues/203
---
 .gitlab-ci.yml | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e2956f7..cc90b82 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -309,7 +309,10 @@ deploy_login_node:
       cmd+=" -c id -f value --image $LOGIN_IMAGE_ID"
       cmd+=" --flavor $INSTANCE_FLAVOR"
       cmd+=" --network $INSTANCE_NETWORK"
-      cmd+=" --security-group allow-ssh"
+      for security_group in ${SECURITY_GROUP_LIST[@]};
+      do
+        cmd+=" --security-group $security_group"
+      done
       cmd+=" --user-data user_data.txt"
       if [ -n "$LOGIN_PORT" ];then cmd+=" --port $LOGIN_PORT"; fi
       cmd+=" --wait $LOGIN_INSTANCE_NAME"
-- 
GitLab


From 822bb0f20182676b8e8bd62e77899f7e28b951a6 Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Fri, 24 Jan 2025 12:59:15 -0600
Subject: [PATCH 149/172] Add symbolic links for Slurm config files

Created symlinks for `slurm.conf`, `gres.conf`, `slurmdbd.conf`, and `cgroup.conf` in `/etc/slurm`.
To ensure consistency with the current production environment where these symlinks already exist.
---
 ansible/roles/slurm_client/tasks/main.yml | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/ansible/roles/slurm_client/tasks/main.yml b/ansible/roles/slurm_client/tasks/main.yml
index e2c1d78..44edcbc 100644
--- a/ansible/roles/slurm_client/tasks/main.yml
+++ b/ansible/roles/slurm_client/tasks/main.yml
@@ -29,6 +29,17 @@
     group: root
     mode: 0400
 
+- name: Create symbolic links for Slurm config files
+  ansible.builtin.file:
+    src: "{{ item.src }}"
+    dest: "{{ item.dest }}"
+    state: link
+  loop:
+    - { src: "/cm/shared/apps/slurm/var/etc/cgroup.conf", dest: "/etc/slurm/cgroup.conf" }
+    - { src: "/cm/shared/apps/slurm/var/etc/gres.conf", dest: "/etc/slurm/gres.conf" }
+    - { src: "/cm/shared/apps/slurm/var/etc/slurm.conf", dest: "/etc/slurm/slurm.conf" }
+    - { src: "/cm/shared/apps/slurm/var/etc/slurmdbd.conf", dest: "/etc/slurm/slurmdbd.conf" }
+
 - name: Enable services
   ansible.builtin.service:
     name: "{{ item }}"
-- 
GitLab


From 637be235d277016d1346d2c4bc9c0e7fac100077 Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Fri, 24 Jan 2025 14:20:10 -0600
Subject: [PATCH 150/172] Force creation of symbolic links for Slurm config
 files

---
 ansible/roles/slurm_client/tasks/main.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/ansible/roles/slurm_client/tasks/main.yml b/ansible/roles/slurm_client/tasks/main.yml
index 44edcbc..d1233ed 100644
--- a/ansible/roles/slurm_client/tasks/main.yml
+++ b/ansible/roles/slurm_client/tasks/main.yml
@@ -34,6 +34,7 @@
     src: "{{ item.src }}"
     dest: "{{ item.dest }}"
     state: link
+    force: yes  # Force the creation of the symlinks even if source files do not exist yet
   loop:
     - { src: "/cm/shared/apps/slurm/var/etc/cgroup.conf", dest: "/etc/slurm/cgroup.conf" }
     - { src: "/cm/shared/apps/slurm/var/etc/gres.conf", dest: "/etc/slurm/gres.conf" }
-- 
GitLab


From 2d919ff80175e015ed6a0488d3f7205760280d45 Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Fri, 24 Jan 2025 14:24:55 -0600
Subject: [PATCH 151/172] Add symbolic link for job_submit.lua configuration
 file

---
 ansible/roles/slurm_client/tasks/main.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/ansible/roles/slurm_client/tasks/main.yml b/ansible/roles/slurm_client/tasks/main.yml
index d1233ed..64612ed 100644
--- a/ansible/roles/slurm_client/tasks/main.yml
+++ b/ansible/roles/slurm_client/tasks/main.yml
@@ -40,6 +40,7 @@
     - { src: "/cm/shared/apps/slurm/var/etc/gres.conf", dest: "/etc/slurm/gres.conf" }
     - { src: "/cm/shared/apps/slurm/var/etc/slurm.conf", dest: "/etc/slurm/slurm.conf" }
     - { src: "/cm/shared/apps/slurm/var/etc/slurmdbd.conf", dest: "/etc/slurm/slurmdbd.conf" }
+    - { src: "/cm/shared/apps/slurm/var/etc/job_submit.lua", dest: "/etc/slurm/job_submit.lua" }
 
 - name: Enable services
   ansible.builtin.service:
-- 
GitLab


From 28a835da8f7f2158375cf3a1ed57d16489a48b17 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Fri, 24 Jan 2025 14:34:35 -0500
Subject: [PATCH 152/172] refactor: Move the fail2ban tasks out of
 ssh_proxy_config

---
 ansible/roles/fail2ban/tasks/main.yml         | 46 +++++++++++++++++++
 ansible/roles/ssh_proxy_config/tasks/main.yml | 42 -----------------
 .../ssh_proxy_config/templates/jail.local.j2  |  7 ---
 3 files changed, 46 insertions(+), 49 deletions(-)
 create mode 100644 ansible/roles/fail2ban/tasks/main.yml
 delete mode 100644 ansible/roles/ssh_proxy_config/templates/jail.local.j2

diff --git a/ansible/roles/fail2ban/tasks/main.yml b/ansible/roles/fail2ban/tasks/main.yml
new file mode 100644
index 0000000..2f7d96e
--- /dev/null
+++ b/ansible/roles/fail2ban/tasks/main.yml
@@ -0,0 +1,46 @@
+---
+
+- name: Install fail2ban
+  ansible.builtin.package:
+    name: "{{ item }}"
+    state: present
+  loop:
+    - fail2ban
+    - fail2ban-firewalld
+
+- name: Configure fail2ban
+  ansible.builtin.template:
+    src: "{{ item.src }}"
+    dest: "{{ item.dest }}"
+    backup: true
+  loop:
+    - { src: 'jail.local.j2', dest: '/etc/fail2ban/jail.local' }
+    - { src: 'sshpiperd_filter.local.j2', dest: '/etc/fail2ban/filter.d/sshpiperd.local' }
+    - { src: 'sshpiperd_jail.local.j2', dest: '/etc/fail2ban/jail.d/sshpiperd.local' }
+
+- name: Activate the firewalld support for fail2ban
+  ansible.builtin.command:
+    cmd: mv /etc/fail2ban/jail.d/00-firewalld.conf /etc/fail2ban/jail.d/00-firewalld.local
+
+- name: Configure firewalld to allow ssh and sshpiper traffic
+  ansible.posix.firewalld:
+    port: "{{ item }}"
+    zone: public
+    state: enabled
+    permanent: true
+  loop:
+    - 2222/tcp
+    - 22/tcp
+
+- name: Enable and start firewalld
+  ansible.builtin.service:
+    name: firewalld
+    enabled: true
+    state: restarted
+
+- name: Enable and start fail2ban
+  ansible.builtin.service:
+    name: fail2ban
+    enabled: true
+    state: restarted
+
diff --git a/ansible/roles/ssh_proxy_config/tasks/main.yml b/ansible/roles/ssh_proxy_config/tasks/main.yml
index fb51f9f..30bac2a 100644
--- a/ansible/roles/ssh_proxy_config/tasks/main.yml
+++ b/ansible/roles/ssh_proxy_config/tasks/main.yml
@@ -10,45 +10,3 @@
     name: sshpiperd
     enabled: true
     state: restarted
-
-- name: Install firewalld
-  ansible.builtin.package:
-    name: firewalld
-    state: present
-
-- name: Configure firewalld
-  ansible.posix.firewalld:
-    port: 2222/tcp
-    zone: public
-    state: enabled
-    permanent: true
-
-- name: Enable and start firewalld
-  ansible.builtin.service:
-    name: firewalld
-    enabled: true
-    state: restarted
-
-- name: Install fail2ban
-  ansible.builtin.package:
-    name: "{{ item }}"
-    state: present
-  loop:
-    - fail2ban
-    - fail2ban-firewalld
-
-- name: Configure fail2ban
-  ansible.builtin.template:
-    src: jail.local.j2
-    dest: "/etc/fail2ban/jail.local"
-    backup: true
-
-- name: Activate the firewall support
-  ansible.builtin.command:
-    cmd: mv /etc/fail2ban/jail.d/00-firewalld.conf /etc/fail2ban/jail.d/00-firewalld.local
-
-- name: Enable and start fail2ban
-  ansible.builtin.service:
-    name: fail2ban
-    enabled: true
-    state: restarted
diff --git a/ansible/roles/ssh_proxy_config/templates/jail.local.j2 b/ansible/roles/ssh_proxy_config/templates/jail.local.j2
deleted file mode 100644
index d5898e6..0000000
--- a/ansible/roles/ssh_proxy_config/templates/jail.local.j2
+++ /dev/null
@@ -1,7 +0,0 @@
-[DEFAULT]
-banaction = firewalld
-bantime  = 1200
-ignoreip = {{ fail2ban_cidr_list }}
-
-[sshd]
-enabled = true
-- 
GitLab


From a9dcf73cc1f2ef49befb2e243013e776d74963a2 Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Fri, 24 Jan 2025 19:13:38 -0500
Subject: [PATCH 153/172] feat: Add fail2ban config files as templates

Adds fail2ban filter and jail configs
---
 ansible/group_vars/all                        |  6 +++++
 .../roles/fail2ban/templates/jail.local.j2    |  7 ++++++
 .../templates/sshpiperd_filter.local.j2       | 22 +++++++++++++++++++
 .../templates/sshpiperd_jail.local.j2         |  9 ++++++++
 4 files changed, 44 insertions(+)
 create mode 100644 ansible/roles/fail2ban/templates/jail.local.j2
 create mode 100644 ansible/roles/fail2ban/templates/sshpiperd_filter.local.j2
 create mode 100644 ansible/roles/fail2ban/templates/sshpiperd_jail.local.j2

diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index 7055312..357ce7b 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -75,3 +75,9 @@
 
 # account app
   account_app_port: 8000
+
+# fail2ban
+  enable_fail2ban: true
+  maxretry: 1
+  findtime: 600
+  bantime: 1200
diff --git a/ansible/roles/fail2ban/templates/jail.local.j2 b/ansible/roles/fail2ban/templates/jail.local.j2
new file mode 100644
index 0000000..af6ae66
--- /dev/null
+++ b/ansible/roles/fail2ban/templates/jail.local.j2
@@ -0,0 +1,7 @@
+[DEFAULT]
+banaction = firewalld
+bantime  = {{ bantime }}
+ignoreip = {{ fail2ban_cidr_list }}
+
+[sshd]
+enabled = true
diff --git a/ansible/roles/fail2ban/templates/sshpiperd_filter.local.j2 b/ansible/roles/fail2ban/templates/sshpiperd_filter.local.j2
new file mode 100644
index 0000000..f5a6081
--- /dev/null
+++ b/ansible/roles/fail2ban/templates/sshpiperd_filter.local.j2
@@ -0,0 +1,22 @@
+# Refer to https://github.com/fail2ban/fail2ban/wiki/Developing-Regex-in-Fail2ban for developing regex using fail2ban
+#
+[INCLUDES]
+before = common.conf
+
+[DEFAULT]
+_daemon = sshpiperd
+__iso_datetime = "\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:[+-]\d{2}:\d{2}|Z)"
+__pref = time=%(__iso_datetime)s level=(?:debug|error)
+
+[Definition]
+# Define the prefix regex for the log lines
+prefregex = ^<F-MLFID>%(__prefix_line)s%(__pref)s</F-MLFID>\s+<F-CONTENT>.+</F-CONTENT>$
+
+# Failregex to match the specific failure log lines (prefregex is automatically included)
+failregex = ^msg="connection from .*failtoban: ip <HOST> too auth many failures"$
+
+ignoreregex =
+
+mode = normal
+
+maxlines = 1
diff --git a/ansible/roles/fail2ban/templates/sshpiperd_jail.local.j2 b/ansible/roles/fail2ban/templates/sshpiperd_jail.local.j2
new file mode 100644
index 0000000..681212c
--- /dev/null
+++ b/ansible/roles/fail2ban/templates/sshpiperd_jail.local.j2
@@ -0,0 +1,9 @@
+# This configuration will block the remote host after {{maxretry}} failed SSH login attempts.
+[sshpiperd]
+enabled  = true
+filter   = sshpiperd
+logpath  = /var/log/messages
+port     = 22
+maxretry = {{ maxretry }}
+backend  = auto
+findtime = {{ findtime }}
-- 
GitLab


From 0c0cadb44add1129fe07a7115f34da0cff4a57ad Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Mon, 27 Jan 2025 16:31:15 -0500
Subject: [PATCH 154/172] feat: Use appropriate variable name for fail2ban
 whitelist ips

---
 ansible/group_vars/all                         | 2 +-
 ansible/roles/fail2ban/templates/jail.local.j2 | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index 357ce7b..51a889a 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -50,7 +50,6 @@
 # ssh proxy
   enable_ssh_proxy_config: false
   sshpiper_dest_dir: "/opt/sshpiper"
-  fail2ban_cidr_list: "127.0.0.1/8"
 
 # rsyslog
   enable_rsyslog_config: false
@@ -81,3 +80,4 @@
   maxretry: 1
   findtime: 600
   bantime: 1200
+  fail2ban_white_list: "127.0.0.1/8"
diff --git a/ansible/roles/fail2ban/templates/jail.local.j2 b/ansible/roles/fail2ban/templates/jail.local.j2
index af6ae66..87f9e4f 100644
--- a/ansible/roles/fail2ban/templates/jail.local.j2
+++ b/ansible/roles/fail2ban/templates/jail.local.j2
@@ -1,7 +1,7 @@
 [DEFAULT]
 banaction = firewalld
 bantime  = {{ bantime }}
-ignoreip = {{ fail2ban_cidr_list }}
+ignoreip = {{ fail2ban_white_list }}
 
 [sshd]
 enabled = true
-- 
GitLab


From f8785f2f6cc371264b45dd3cfb5a12ea9b6abe0e Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Wed, 29 Jan 2025 14:13:57 -0500
Subject: [PATCH 155/172] feat: Add fail2ban role to cluster.yml playbook

---
 ansible/cluster.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/ansible/cluster.yml b/ansible/cluster.yml
index 1a2c83e..1e05580 100644
--- a/ansible/cluster.yml
+++ b/ansible/cluster.yml
@@ -12,3 +12,4 @@
     - { name: 'ssl_cert', tags: 'ssl_cert', when: enable_ssl_certs }
     - { name: 'rsyslog_config', tags: 'rsyslog_config', when: enable_rsyslog_config }
     - { name: 'rewrite_map', tags: 'rewrite_map', when: enable_rewrite_map }
+    - { name: 'fail2ban', tags: 'fail2ban', when: enable_fail2ban }
-- 
GitLab


From 16ba256a00102d3d139588e0ce9b17711ff5717a Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Wed, 29 Jan 2025 21:16:16 -0500
Subject: [PATCH 156/172] feat: fixup

---
 .gitlab-ci.yml | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index cc90b82..8915b12 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -207,8 +207,10 @@ deploy_http_proxy_node:
       cmd+=" -c id -f value --image $HTTP_PROXY_IMAGE_ID"
       cmd+=" --flavor $INSTANCE_FLAVOR"
       cmd+=" --network $PROXY_NETWORK"
-      cmd+=" --security-group webserver_sec_group"
-      cmd+=" --security-group allow-ssh"
+      for security_group in ${SECURITY_GROUP_LIST[@]};
+      do
+        cmd+=" --security-group $security_group"
+      done
       cmd+=" --user-data user_data.txt"
       if [ -n "$HTTP_PROXY_PORT" ];then cmd+=" --port $HTTP_PROXY_PORT"; fi
       cmd+=" --wait $HTTP_PROXY_INSTANCE_NAME"
@@ -258,7 +260,10 @@ deploy_ssh_proxy_node:
       cmd+=" -c id -f value --image $SSH_PROXY_IMAGE_ID"
       cmd+=" --flavor $INSTANCE_FLAVOR"
       cmd+=" --network $PROXY_NETWORK"
-      cmd+=" --security-group allow-ssh"
+      for security_group in ${SECURITY_GROUP_LIST[@]};
+      do
+        cmd+=" --security-group $security_group"
+      done
       cmd+=" --user-data user_data.txt"
       if [ -n "$SSH_PROXY_PORT" ];then cmd+=" --port $SSH_PROXY_PORT"; fi
       cmd+=" --wait $SSH_PROXY_INSTANCE_NAME"
-- 
GitLab


From 1b9577e973fe416772ac6c31661e4de9a112178e Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Tue, 4 Feb 2025 16:10:57 -0600
Subject: [PATCH 157/172] feat: disable fail2ban by default

---
 ansible/group_vars/all | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index 51a889a..b980d46 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -76,7 +76,7 @@
   account_app_port: 8000
 
 # fail2ban
-  enable_fail2ban: true
+  enable_fail2ban: false
   maxretry: 1
   findtime: 600
   bantime: 1200
-- 
GitLab


From 420230b4f7a4222cdf43c0bc18492376b3396de9 Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Wed, 19 Feb 2025 13:24:58 -0600
Subject: [PATCH 158/172] Enable rsyslog configuration by default

Changed the 'enable_rsyslog_config' variable from false to true
This should be the default behavior for all nodes unless explicitly turned off by the developer.
---
 ansible/group_vars/all | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index b980d46..6be1a75 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -52,7 +52,7 @@
   sshpiper_dest_dir: "/opt/sshpiper"
 
 # rsyslog
-  enable_rsyslog_config: false
+  enable_rsyslog_config: true
   rsyslog_target: "*.* @master:514"
 
 # ssl certs
-- 
GitLab


From 6c10564578fa8d0c1dad63aa56ce7ad1e7c68eec Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Wed, 26 Feb 2025 16:29:28 -0600
Subject: [PATCH 159/172] feat(node_exporter): add variables in group_vars

---
 ansible/group_vars/all | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/ansible/group_vars/all b/ansible/group_vars/all
index b980d46..7cea2c9 100644
--- a/ansible/group_vars/all
+++ b/ansible/group_vars/all
@@ -81,3 +81,11 @@
   findtime: 600
   bantime: 1200
   fail2ban_white_list: "127.0.0.1/8"
+
+# Node Exporter
+  enable_node_exporter: false
+  node_exporter_ver: "1.8.2"
+  node_exporter_filename: "node_exporter-{{ node_exporter_ver }}.linux-amd64"
+  node_exporter_user: node_exporter
+  node_exporter_group: node_exporter
+  node_exporter_port: 9100
-- 
GitLab


From 38b7fd3d8994ad066da363693269cad6a3474712 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Wed, 26 Feb 2025 16:30:52 -0600
Subject: [PATCH 160/172] feat: add install_node_exporter role

---
 .../install_node_exporter/tasks/main.yaml     | 60 +++++++++++++++++++
 .../templates/node_exporter.service.j2        | 12 ++++
 2 files changed, 72 insertions(+)
 create mode 100644 ansible/roles/install_node_exporter/tasks/main.yaml
 create mode 100644 ansible/roles/install_node_exporter/templates/node_exporter.service.j2

diff --git a/ansible/roles/install_node_exporter/tasks/main.yaml b/ansible/roles/install_node_exporter/tasks/main.yaml
new file mode 100644
index 0000000..3bee4a7
--- /dev/null
+++ b/ansible/roles/install_node_exporter/tasks/main.yaml
@@ -0,0 +1,60 @@
+---
+- name: Download node_exporter binary
+  ansible.builtin.get_url:
+    url: "https://github.com/prometheus/node_exporter/releases/download/v{{ node_exporter_ver }}/{{ node_exporter_filename }}.tar.gz"
+    dest: "/tmp/{{ node_exporter_filename }}.tar.gz"
+
+- name: Extract node_exporter
+  ansible.builtin.unarchive:
+    src: "/tmp/{{ node_exporter_filename }}.tar.gz"
+    dest: "/tmp"
+    remote_src: yes
+
+- name: Create system group for user account {{ node_exporter_group }}
+  ansible.builtin.group:
+    name: "{{ node_exporter_group }}"
+    system: true
+    state: present
+
+- name: Create system user account {{ node_exporter_user }}
+  ansible.builtin.user:
+    name: "{{ node_exporter_user }}"
+    comment: Prometheus node_exporter system account
+    group: "{{ node_exporter_group }}"
+    system: true
+    home: /var/lib/node_exporter
+    create_home: false
+    shell: /sbin/nologin
+    state: present
+
+- name: Copy node_exporter binary
+  ansible.builtin.copy:
+    src: "/tmp/{{ node_exporter_filename }}/node_exporter"
+    dest: /usr/local/bin/node_exporter
+    remote_src: yes
+    owner: root
+    group: root
+    mode: 0755
+
+- name: Copy systemd unit file
+  ansible.builtin.template:
+    src: node_exporter.service.j2
+    dest: /etc/systemd/system/node_exporter.service
+    owner: root
+    group: root
+    mode: '0644'
+
+- name: Clean up /tmp
+  ansible.builtin.file:
+    path: "/tmp/{{ item }}"
+    state: absent
+  loop:
+    - "{{ node_exporter_filename }}.tar.gz"
+    - "{{ node_exporter_filename }}"
+
+- name: Restart node_exporter service
+  ansible.builtin.systemd:
+    daemon_reload: yes
+    name: node_exporter
+    state: restarted
+    enabled: true
diff --git a/ansible/roles/install_node_exporter/templates/node_exporter.service.j2 b/ansible/roles/install_node_exporter/templates/node_exporter.service.j2
new file mode 100644
index 0000000..fddb82d
--- /dev/null
+++ b/ansible/roles/install_node_exporter/templates/node_exporter.service.j2
@@ -0,0 +1,12 @@
+[Unit]
+Description=Node Exporter
+After=network.target
+
+[Service]
+User={{ node_exporter_user }}
+Group={{ node_exporter_group }}
+Type=simple
+ExecStart=/usr/local/bin/node_exporter --web.listen-address=:{{ node_exporter_port }} --collector.filesystem.mount-points-exclude "^/(dev|proc|run/user/.+|run/credentials/.+|sys|var/lib/docker/.+)($|/)" --collector.filesystem.fs-types-exclude "^(autofs|binfmt_misc|bpf|cgroup|tmpfs|sunrpc|cgroup2?|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|iso9660|mqueue|nsfs|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|selinuxfs|squashfs|sysfs|tracefs)$"
+
+[Install]
+WantedBy=multi-user.target
-- 
GitLab


From 982be05a075cfbf665bbfae96b72770748789980 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Wed, 26 Feb 2025 16:33:05 -0600
Subject: [PATCH 161/172] feat: add install_node_exporter in cluster.yml

---
 ansible/cluster.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/ansible/cluster.yml b/ansible/cluster.yml
index 1e05580..9664bf9 100644
--- a/ansible/cluster.yml
+++ b/ansible/cluster.yml
@@ -13,3 +13,4 @@
     - { name: 'rsyslog_config', tags: 'rsyslog_config', when: enable_rsyslog_config }
     - { name: 'rewrite_map', tags: 'rewrite_map', when: enable_rewrite_map }
     - { name: 'fail2ban', tags: 'fail2ban', when: enable_fail2ban }
+    - { name: 'install_node_exporter', tags: 'install_node_exporter', when: enable_node_exporter }
-- 
GitLab


From a96a7c84b35a62d1da621d57c0bb540b7c571f6d Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Wed, 5 Mar 2025 10:40:27 -0600
Subject: [PATCH 162/172] feat: open node exporter port in firewalld

---
 ansible/roles/install_node_exporter/tasks/main.yaml | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/ansible/roles/install_node_exporter/tasks/main.yaml b/ansible/roles/install_node_exporter/tasks/main.yaml
index 3bee4a7..cb52fd3 100644
--- a/ansible/roles/install_node_exporter/tasks/main.yaml
+++ b/ansible/roles/install_node_exporter/tasks/main.yaml
@@ -58,3 +58,16 @@
     name: node_exporter
     state: restarted
     enabled: true
+
+- name: Collect facts about system services
+  ansible.builtin.service_facts:
+
+- name: Configure firewalld to allow prometheus
+  ansible.posix.firewalld:
+    port: "{{ node_exporter_port }}/tcp"
+    zone: public
+    state: enabled
+    permanent: true
+  when:
+    - "'firewalld.service' in ansible_facts.services"
+    - ansible_facts.services["firewalld.service"].state == "running"
-- 
GitLab


From e7ae10b883b62168b20b562ab31b164bc66e14f1 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Wed, 5 Mar 2025 11:27:23 -0600
Subject: [PATCH 163/172] fix: restart firewalld after change

---
 ansible/roles/install_node_exporter/tasks/main.yaml | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/ansible/roles/install_node_exporter/tasks/main.yaml b/ansible/roles/install_node_exporter/tasks/main.yaml
index cb52fd3..4d9fe61 100644
--- a/ansible/roles/install_node_exporter/tasks/main.yaml
+++ b/ansible/roles/install_node_exporter/tasks/main.yaml
@@ -71,3 +71,9 @@
   when:
     - "'firewalld.service' in ansible_facts.services"
     - ansible_facts.services["firewalld.service"].state == "running"
+
+- name: Enable and start firewalld
+  ansible.builtin.service:
+    name: firewalld
+    enabled: true
+    state: restarted
-- 
GitLab


From 815ced555fd3387bef85c089bdad3b0be0b418b5 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Fri, 7 Mar 2025 10:28:00 -0600
Subject: [PATCH 164/172] fix: restart firewalld only when it was running

---
 ansible/roles/install_node_exporter/tasks/main.yaml | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/ansible/roles/install_node_exporter/tasks/main.yaml b/ansible/roles/install_node_exporter/tasks/main.yaml
index 4d9fe61..205904b 100644
--- a/ansible/roles/install_node_exporter/tasks/main.yaml
+++ b/ansible/roles/install_node_exporter/tasks/main.yaml
@@ -77,3 +77,6 @@
     name: firewalld
     enabled: true
     state: restarted
+  when:
+    - "'firewalld.service' in ansible_facts.services"
+    - ansible_facts.services["firewalld.service"].state == "running"
-- 
GitLab


From 09717c19594edc11da6b69f640ab55815178941b Mon Sep 17 00:00:00 2001
From: Eesaan Atluri <atlurie@uab.edu>
Date: Tue, 14 Jan 2025 21:53:09 -0500
Subject: [PATCH 165/172] feat: Use conditional to make --network optional

Closes https://gitlab.rc.uab.edu/rc/hpc-factory/-/issues/181

Defining a network can be optional when a port is already defined when
deploying a VM.

This commit adds flexibility where you can either use --port or
--network options to define a network during the deployment.

Alternatively, you can define both but the port cannot be from the same
network you used in the --network option. Otherwise, you will have two
ips from the same network which will cause network reachability issues.
---
 .gitlab-ci.yml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8915b12..44e6bfa 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -206,12 +206,12 @@ deploy_http_proxy_node:
       export cmd="openstack server create"
       cmd+=" -c id -f value --image $HTTP_PROXY_IMAGE_ID"
       cmd+=" --flavor $INSTANCE_FLAVOR"
-      cmd+=" --network $PROXY_NETWORK"
       for security_group in ${SECURITY_GROUP_LIST[@]};
       do
         cmd+=" --security-group $security_group"
       done
       cmd+=" --user-data user_data.txt"
+      if [ -n "$PROXY_NETWORK" ];then cmd+=" --network $PROXY_NETWORK"; fi
       if [ -n "$HTTP_PROXY_PORT" ];then cmd+=" --port $HTTP_PROXY_PORT"; fi
       cmd+=" --wait $HTTP_PROXY_INSTANCE_NAME"
     - export HTTP_PROXY_INSTANCE_ID=$(bash -c "$cmd")
@@ -259,12 +259,12 @@ deploy_ssh_proxy_node:
       export cmd="openstack server create"
       cmd+=" -c id -f value --image $SSH_PROXY_IMAGE_ID"
       cmd+=" --flavor $INSTANCE_FLAVOR"
-      cmd+=" --network $PROXY_NETWORK"
       for security_group in ${SECURITY_GROUP_LIST[@]};
       do
         cmd+=" --security-group $security_group"
       done
       cmd+=" --user-data user_data.txt"
+      if [ -n "$PROXY_NETWORK" ];then cmd+=" --network $PROXY_NETWORK"; fi
       if [ -n "$SSH_PROXY_PORT" ];then cmd+=" --port $SSH_PROXY_PORT"; fi
       cmd+=" --wait $SSH_PROXY_INSTANCE_NAME"
     - export SSH_PROXY_INSTANCE_ID=$(bash -c "$cmd")
@@ -313,12 +313,12 @@ deploy_login_node:
       export cmd="openstack server create"
       cmd+=" -c id -f value --image $LOGIN_IMAGE_ID"
       cmd+=" --flavor $INSTANCE_FLAVOR"
-      cmd+=" --network $INSTANCE_NETWORK"
       for security_group in ${SECURITY_GROUP_LIST[@]};
       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 "$LOGIN_PORT" ];then cmd+=" --port $LOGIN_PORT"; fi
       cmd+=" --wait $LOGIN_INSTANCE_NAME"
     - export LOGIN_INSTANCE_ID=$(bash -c "$cmd")
-- 
GitLab


From b94d83eb19393bf0140a794521f82d921e3bf41d Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Fri, 14 Mar 2025 20:03:35 -0500
Subject: [PATCH 166/172] refactor: remove repeating code

---
 .gitlab-ci.yml | 12 +-----------
 1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index fd17b81..372147a 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -187,7 +187,7 @@ build_ood_image:
     - export PKR_VAR_build_instance_name="${BUILD_TARGET}-${EXT_REPO_HEAD}"
     - export PKR_VAR_image_date_suffix=false
     - |
-      if [[ $ENV == 'knightly' ]]; then
+      if [ $ENV = 'knightly' || $ENV = 'prod' ]; then
         curl --header "PRIVATE-TOKEN: ${ANSIBLE_VAR_TOKEN}" \
         "${CI_API_V4_URL}/projects/2836/repository/files/knightly/raw?ref=main" \
         -o CRI_XCBC/group_vars/$ENV
@@ -196,16 +196,6 @@ build_ood_image:
         'sed -i -E "s/(user_register_app_key: ).*/\1\"${SELF_REG_APP_KEY}\"/" CRI_XCBC/group_vars/$ENV'
         'sed -i -E "s/(celery_user_password: ).*/\1\"${CELERY_PASSWD}\"/" CRI_XCBC/group_vars/$ENV'
         'sed -i -E "s|(ssh_pub_key: ).*|\1\"{{ lookup(''file'', ''${SSH_PUB_KEY}'') }}\"|" CRI_XCBC/group_vars/$ENV'
-      elif [[ $ENV == 'prod' ]]; then
-        curl --header "PRIVATE-TOKEN: ${ANSIBLE_VAR_TOKEN}" \
-        "${CI_API_V4_URL}/projects/2836/repository/files/prod/raw?ref=main" \
-        -o CRI_XCBC/group_vars/$ENV
-        'sed -i -E "s/(lts_access_key: ).*/\1\"${AWS_ACCESS_KEY_ID}\"/" CRI_XCBC/group_vars/$ENV'
-        'sed -i -E "s/(lts_secret_key: ).*/\1\"${AWS_SECRET_ACCESS_KEY}\"/" CRI_XCBC/group_vars/$ENV'
-        'sed -i -E "s/(user_register_app_key: ).*/\1\"${SELF_REG_APP_KEY}\"/" CRI_XCBC/group_vars/$ENV'
-        'sed -i -E "s/(celery_user_password: ).*/\1\"${CELERY_PASSWD}\"/" CRI_XCBC/group_vars/$ENV'
-        'sed -i -E "s|(ssh_pub_key: ).*|\1\"{{ lookup(''file'', ''${SSH_PUB_KEY}'') }}\"|" CRI_XCBC/group_vars/$ENV'
-      fi
     - |
       if [ $CI_PIPELINE_SOURCE == 'merge_request_event' ]; then
         export PKR_VAR_image_name="ood-PR-${CI_MERGE_REQUEST_IID}"
-- 
GitLab


From c24c138cc101a297c1617d574454c7defdfacf14 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Fri, 14 Mar 2025 20:30:31 -0500
Subject: [PATCH 167/172] refactor: remove unused condition

We do not run merge request pipeline, so no need to check for it
---
 .gitlab-ci.yml | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 372147a..9a6a693 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -186,6 +186,7 @@ build_ood_image:
     - export PKR_VAR_flavor="${OOD_BUILD_FLAVOR:-$PKR_VAR_flavor}"
     - export PKR_VAR_build_instance_name="${BUILD_TARGET}-${EXT_REPO_HEAD}"
     - export PKR_VAR_image_date_suffix=false
+    - export PKR_VAR_image_name="${BUILD_TARGET}-${BUILD_DATE}"
     - |
       if [ $ENV = 'knightly' || $ENV = 'prod' ]; then
         curl --header "PRIVATE-TOKEN: ${ANSIBLE_VAR_TOKEN}" \
@@ -196,11 +197,6 @@ build_ood_image:
         'sed -i -E "s/(user_register_app_key: ).*/\1\"${SELF_REG_APP_KEY}\"/" CRI_XCBC/group_vars/$ENV'
         'sed -i -E "s/(celery_user_password: ).*/\1\"${CELERY_PASSWD}\"/" CRI_XCBC/group_vars/$ENV'
         'sed -i -E "s|(ssh_pub_key: ).*|\1\"{{ lookup(''file'', ''${SSH_PUB_KEY}'') }}\"|" CRI_XCBC/group_vars/$ENV'
-    - |
-      if [ $CI_PIPELINE_SOURCE == 'merge_request_event' ]; then
-        export PKR_VAR_image_name="ood-PR-${CI_MERGE_REQUEST_IID}"
-      elif [ $CI_PIPELINE_SOURCE == 'schedule' ]; then
-        export PKR_VAR_image_name="ood-${BUILD_DATE}"
       fi
     # packer commands
     - packer init openstack-ood
-- 
GitLab


From 97e1f7f53384301db908cbe2df81412d5c9d1eec Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Tue, 18 Mar 2025 17:32:11 -0500
Subject: [PATCH 168/172] refactor: only run build pipeline in build
 environment

Since build env is setup for building images, it makes more sense to
have all build jobs in that environment.
---
 .gitlab-ci.yml | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 2873657..623ec22 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -113,7 +113,7 @@ workflow:
 build_http_proxy_image:
   stage: build
   environment:
-    name: $ENV
+    name: build
   tags:
     - build
   variables:
@@ -126,7 +126,7 @@ build_http_proxy_image:
 build_ssh_proxy_image:
   stage: build
   environment:
-    name: $ENV
+    name: build
   tags:
     - build
   variables:
@@ -165,7 +165,7 @@ build_ssh_proxy_image:
 build_login_image:
   stage: build
   environment:
-    name: $ENV
+    name: build
   tags:
     - build
   <<: *build_login_image_template
@@ -176,7 +176,7 @@ build_login_image:
 build_ood_image:
   stage: build
   environment:
-    name: $ENV
+    name: build
   tags:
     - build
   script:
-- 
GitLab


From c6391491af6507a27b7713249a974a2e8be16da1 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Tue, 18 Mar 2025 19:05:50 -0500
Subject: [PATCH 169/172] style: bash test missing close square bracket

---
 .gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 623ec22..c976ebd 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -188,7 +188,7 @@ build_ood_image:
     - export PKR_VAR_image_date_suffix=false
     - export PKR_VAR_image_name="${BUILD_TARGET}-${BUILD_DATE}"
     - |
-      if [ $ENV = 'knightly' || $ENV = 'prod' ]; then
+      if [ $ENV = 'knightly' ] || [ $ENV = 'prod' ]; then
         curl --header "PRIVATE-TOKEN: ${ANSIBLE_VAR_TOKEN}" \
         "${CI_API_V4_URL}/projects/2836/repository/files/knightly/raw?ref=main" \
         -o CRI_XCBC/group_vars/$ENV
-- 
GitLab


From 2e966d7b902af9c04d8336a73c625ba7f1a56e36 Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Wed, 19 Mar 2025 08:45:58 -0500
Subject: [PATCH 170/172] style: remove single quote around the command

---
 .gitlab-ci.yml | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c976ebd..deb2662 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -192,11 +192,11 @@ build_ood_image:
         curl --header "PRIVATE-TOKEN: ${ANSIBLE_VAR_TOKEN}" \
         "${CI_API_V4_URL}/projects/2836/repository/files/knightly/raw?ref=main" \
         -o CRI_XCBC/group_vars/$ENV
-        'sed -i -E "s/(lts_access_key: ).*/\1\"${AWS_ACCESS_KEY_ID}\"/" CRI_XCBC/group_vars/$ENV'
-        'sed -i -E "s/(lts_secret_key: ).*/\1\"${AWS_SECRET_ACCESS_KEY}\"/" CRI_XCBC/group_vars/$ENV'
-        'sed -i -E "s/(user_register_app_key: ).*/\1\"${SELF_REG_APP_KEY}\"/" CRI_XCBC/group_vars/$ENV'
-        'sed -i -E "s/(celery_user_password: ).*/\1\"${CELERY_PASSWD}\"/" CRI_XCBC/group_vars/$ENV'
-        'sed -i -E "s|(ssh_pub_key: ).*|\1\"{{ lookup(''file'', ''${SSH_PUB_KEY}'') }}\"|" CRI_XCBC/group_vars/$ENV'
+        sed -i -E "s/(lts_access_key: ).*/\1\"${AWS_ACCESS_KEY_ID}\"/" CRI_XCBC/group_vars/$ENV
+        sed -i -E "s/(lts_secret_key: ).*/\1\"${AWS_SECRET_ACCESS_KEY}\"/" CRI_XCBC/group_vars/$ENV
+        sed -i -E "s/(user_register_app_key: ).*/\1\"${SELF_REG_APP_KEY}\"/" CRI_XCBC/group_vars/$ENV
+        sed -i -E "s/(celery_user_password: ).*/\1\"${CELERY_PASSWD}\"/" CRI_XCBC/group_vars/$ENV
+        sed -i -E "s|(ssh_pub_key: ).*|\1\"{{ lookup('file', '${SSH_PUB_KEY}') }}\"|" CRI_XCBC/group_vars/$ENV
       fi
     # packer commands
     - packer init openstack-ood
-- 
GitLab


From 16a9c1646326840eed2cec9f60babe698f41f2ea Mon Sep 17 00:00:00 2001
From: Bo-Chun Louis Chen <louistw@uab.edu>
Date: Fri, 21 Mar 2025 19:14:47 -0500
Subject: [PATCH 171/172] fix: use ENV variable in ansible var url

---
 .gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index deb2662..3428c7a 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -190,7 +190,7 @@ build_ood_image:
     - |
       if [ $ENV = 'knightly' ] || [ $ENV = 'prod' ]; then
         curl --header "PRIVATE-TOKEN: ${ANSIBLE_VAR_TOKEN}" \
-        "${CI_API_V4_URL}/projects/2836/repository/files/knightly/raw?ref=main" \
+        "${CI_API_V4_URL}/projects/2836/repository/files/$ENV/raw?ref=main" \
         -o CRI_XCBC/group_vars/$ENV
         sed -i -E "s/(lts_access_key: ).*/\1\"${AWS_ACCESS_KEY_ID}\"/" CRI_XCBC/group_vars/$ENV
         sed -i -E "s/(lts_secret_key: ).*/\1\"${AWS_SECRET_ACCESS_KEY}\"/" CRI_XCBC/group_vars/$ENV
-- 
GitLab


From df94461653e73f2737baf1dd432b2000deaa93f6 Mon Sep 17 00:00:00 2001
From: Krish Moodbidri <krish94@uab.edu>
Date: Wed, 26 Mar 2025 01:23:33 -0500
Subject: [PATCH 172/172] Use BUILD_TAG for image build prefix if set, else
 fallback to BUILD_DATE

---
 .gitlab-ci.yml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 3428c7a..db544ce 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -85,7 +85,7 @@ workflow:
       if [ $CI_PIPELINE_SOURCE == 'merge_request_event' ]; then
         export PKR_VAR_image_name="${BUILD_TARGET}-PR-${CI_MERGE_REQUEST_IID}"
       elif [ $CI_PIPELINE_SOURCE == 'schedule' ]; then
-        export PKR_VAR_image_name="${BUILD_TARGET}-${BUILD_DATE}"
+        export PKR_VAR_image_name="${BUILD_TARGET}-${BUILD_TAG:-${BUILD_DATE}}"
       fi
     # Ansible var overrides
     - |
@@ -148,7 +148,7 @@ build_ssh_proxy_image:
       if [ $CI_PIPELINE_SOURCE == 'merge_request_event' ]; then
         export PKR_VAR_image_name="${BUILD_TARGET}-PR-${CI_MERGE_REQUEST_IID}"
       elif [ $CI_PIPELINE_SOURCE == 'schedule' ]; then
-        export PKR_VAR_image_name="${BUILD_TARGET}-${BUILD_DATE}"
+        export PKR_VAR_image_name="${BUILD_TARGET}-${BUILD_TAG:-${BUILD_DATE}}"
       fi
     # packer commands
     - packer init openstack-login
@@ -186,7 +186,7 @@ build_ood_image:
     - export PKR_VAR_flavor="${OOD_BUILD_FLAVOR:-$PKR_VAR_flavor}"
     - export PKR_VAR_build_instance_name="${BUILD_TARGET}-${EXT_REPO_HEAD}"
     - export PKR_VAR_image_date_suffix=false
-    - export PKR_VAR_image_name="${BUILD_TARGET}-${BUILD_DATE}"
+    - export PKR_VAR_image_name="${BUILD_TARGET}-${BUILD_TAG:-${BUILD_DATE}}"
     - |
       if [ $ENV = 'knightly' ] || [ $ENV = 'prod' ]; then
         curl --header "PRIVATE-TOKEN: ${ANSIBLE_VAR_TOKEN}" \
-- 
GitLab