mirror of
https://git.ecdf.ed.ac.uk/win_automation/windows-ansible.git
synced 2026-10-29 19:36:51 +00:00
update script for load balancing
This commit is contained in:
1 parent
79932ac986
commit
e1b53ffb68
1 file changed
+59
-25
+59
-25
@@ -1,14 +1,16 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Varialbes Passed By Rundeck
|
# Varialbes Passed By Rundeck
|
||||||
OS_PROJECT=$1
|
declare -gr OS_PROJECT=$1
|
||||||
WIN_PROJECT=$2
|
declare -gr WIN_PROJECT=$2
|
||||||
API_TOKEN=$3
|
declare -gr API_TOKEN=$3
|
||||||
|
declare -g RD_JOB_ID=$4
|
||||||
|
declare -g RD_EXEC_ID=$5
|
||||||
|
|
||||||
export OS_CLIENT_CONFIG_FILE=/deployments/$OS_PROJECT-$WIN_PROJECT/clouds.yaml
|
export OS_CLIENT_CONFIG_FILE=/deployments/$OS_PROJECT-$WIN_PROJECT/clouds.yaml
|
||||||
|
|
||||||
# check directory exists
|
# check directory exists
|
||||||
if [ ! -d /deployments/$OS_PROJECT-$WIN_PROJECT/ ]; then
|
if [[ ! -d /deployments/$OS_PROJECT-$WIN_PROJECT/ ]]; then
|
||||||
>&2 echo "Directory Doesn't exist"
|
>&2 echo "Directory Doesn't exist"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -16,41 +18,73 @@ fi
|
|||||||
RD_JOB_ID=$(cat /deployments/$OS_PROJECT-$WIN_PROJECT/JOB_ID)
|
RD_JOB_ID=$(cat /deployments/$OS_PROJECT-$WIN_PROJECT/JOB_ID)
|
||||||
RD_EXEC_ID=$(cat /deployments/$OS_PROJECT-$WIN_PROJECT/EXEC_ID)
|
RD_EXEC_ID=$(cat /deployments/$OS_PROJECT-$WIN_PROJECT/EXEC_ID)
|
||||||
|
|
||||||
|
initialize_json() {
|
||||||
|
declare -r OUTPUT_FILE="/deployments/$OS_PROJECT-$WIN_PROJECT/data.json"
|
||||||
|
|
||||||
|
jq -n '
|
||||||
|
{
|
||||||
|
"job_id": "'$RD_JOB_ID'",
|
||||||
|
"execution_id": "'$RD_EXEC_ID'",
|
||||||
|
"status": "ok",
|
||||||
|
"DC": {},
|
||||||
|
"WB": {"load_balancer": true, VM: []},
|
||||||
|
"APP": {"load_balancer": false, VM: []},
|
||||||
|
"GPU": {"load_balancer": false, VM: []}
|
||||||
|
}' > $OUTPUT_FILE
|
||||||
|
declare -g -r VM_JSON="/deployments/$OS_PROJECT-$WIN_PROJECT/data.json"
|
||||||
|
}
|
||||||
|
|
||||||
|
add_vm() {
|
||||||
|
|
||||||
|
declare -r NAME=$1
|
||||||
|
declare -r UUID=$2
|
||||||
|
declare -r IP=$3
|
||||||
|
declare -r TYPE=$4
|
||||||
|
|
||||||
|
if [[ $TYPE == "DC" ]]; then
|
||||||
|
jq ".${TYPE} += {\"name\": \"${NAME}\", \"ip\": \"${IP}\", \"uuid\": \"${UUID}\"}" $VM_JSON > temp.json
|
||||||
|
mv -f temp.json $VM_JSON
|
||||||
|
else
|
||||||
|
jq ".${TYPE}.VM += [{\"name\": \"${NAME}\", \"ip\": \"${IP}\", \"uuid\": \"${UUID}\"}]" $VM_JSON > temp.json
|
||||||
|
mv -f temp.json $VM_JSON
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
post_request() {
|
post_request() {
|
||||||
local INPUT=$1
|
#declare -r API_ENDPOINT='https://projects.eidf.ac.uk/testportal/job/api/notification'
|
||||||
local TYPE=$2
|
declare -r API_ENDPOINT='http://www.adbraun.lol:9001'
|
||||||
|
jq -c . $VM_JSON
|
||||||
local UUID=$(echo "$INPUT" | awk '{print $1}')
|
|
||||||
local NAME=$(echo "$INPUT" | awk '{print $2}')
|
|
||||||
local IPv4=$(echo "$INPUT" | awk '{print $4}' | cut -d '=' -f 2)
|
|
||||||
|
|
||||||
curl \
|
curl \
|
||||||
-X POST \
|
-X POST \
|
||||||
-H "content-type: application/json" \
|
-H "content-type: application/json" \
|
||||||
-H "accept: application/json" \
|
-H "accept: application/json" \
|
||||||
-H "Authorization: Token $API_TOKEN" \
|
-H "Authorization: Token $API_TOKEN" \
|
||||||
-d '{ "job_id":"'$RD_JOB_ID'","execution_id":"'$RD_EXEC_ID'", "status":"ok", "data":{"name":"'$NAME'", "ip":"'$IPv4'", "uuid":"'$UUID'", "type":"'$TYPE'"}}' \
|
-d "'$(jq -c . $VM_JSON)'" \
|
||||||
https://projects.eidf.ac.uk/testportal/job/api/notification
|
$API_ENDPOINT
|
||||||
}
|
}
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
# Get list of VMs within project
|
initialize_json
|
||||||
local TABLE=$(openstack --os-cloud $OS_PROJECT server list | tail -n +4 | head -n -1 | sed 's/|//g')
|
while read -r VM; do
|
||||||
|
declare vm_uuid=$(jq -r '.ID' <<< "$VM")
|
||||||
|
declare vm_name=$(jq -r '.Name' <<< "$VM")
|
||||||
|
declare vm_ip=$(jq -r '.IP' <<< "$VM")
|
||||||
|
|
||||||
echo "$TABLE" | while read -r line; do
|
if [[ "$vm_name" =~ ^$OS_PROJECT-$WIN_PROJECT-dc01$ ]]; then
|
||||||
# Pattern to match user VMs
|
add_vm $vm_name $vm_uuid $vm_ip 'DC'
|
||||||
if echo "$line" | grep -qE "$OS_PROJECT\-$WIN_PROJECT\-wb|app|gpu"; then
|
|
||||||
post_request "$line" "CLIENT"
|
|
||||||
|
|
||||||
# Pattern to match DC01
|
elif [[ "$vm_name" =~ ^$OS_PROJECT-$WIN_PROJECT-wb[0-9]+$ ]]; then
|
||||||
elif echo "$line" | grep -qE "$OS_PROJECT\-$WIN_PROJECT\-dc01"; then
|
add_vm $vm_name $vm_uuid $vm_ip 'WB'
|
||||||
post_request "$line" "DC"
|
|
||||||
|
|
||||||
else
|
elif [[ "$vm_name" =~ ^$OS_PROJECT-$WIN_PROJECT-app[0-9]+$ ]]; then
|
||||||
continue
|
add_vm $vm_name $vm_uuid $vm_ip 'APP'
|
||||||
|
|
||||||
|
elif [[ "$vm_name" =~ ^$OS_PROJECT-$WIN_PROJECT-gpu[0-9]+$ ]]; then
|
||||||
|
add_vm $vm_name $vm_uuid $vm_ip 'GPU'
|
||||||
fi
|
fi
|
||||||
done
|
done < <(openstack --os-cloud $OS_PROJECT server list -f json | jq -c '.[] | {ID, Name, IP: .Networks.external[0]}')
|
||||||
|
|
||||||
|
post_request
|
||||||
}
|
}
|
||||||
|
|
||||||
main
|
main
|
||||||
Reference in new issue
Block a user