File: //bigscoots/solusvm/get.sh
#!/bin/bash
OPTION="$1"
MYSQL_PASS="$(cut -d':' -f3 /usr/local/solusvm/includes/solusvm.conf)"
MYSQL_USER="$(cut -d':' -f2 /usr/local/solusvm/includes/solusvm.conf)"
MYSQL_DB="$(cut -d':' -f1 /usr/local/solusvm/includes/solusvm.conf)"
MYSQL_COMMAND="mysql -u "${MYSQL_USER}" -p"${MYSQL_PASS}" "${MYSQL_DB}" -sNe"
if [[ "$OPTION" == node_info ]]
then
NODE_ID="$2"
if [[ "$NODE_ID" == "ALL" ]]
then
${MYSQL_COMMAND} "SELECT nodeid, name, ip, fname FROM nodes WHERE groupid IN (4, 9);" --batch --raw \
| jq -R -s 'split("\n")[:-1] | map(split("\t")) | map({"node_id": .[0], "name": .[1], "ip": .[2], "fname": .[3]})'
else
${MYSQL_COMMAND} "SELECT nodeid, name, ip, fname FROM nodes WHERE nodeid = '${NODE_ID}' LIMIT 1;" --batch --raw \
| jq -R 'split("\t") | {"node_id": .[0], "name": .[1], "ip": .[2], "fname": .[3]}'
fi
elif [[ "$OPTION" == vm_info ]]
then
VM_ID="$2"
# Define variables to capture CTID and ONLINE statuses
CTID=$(${MYSQL_COMMAND} "SELECT ctid FROM vservers WHERE vserverid = '${VM_ID}' LIMIT 1;" --batch --raw)
ONLINE=$(${MYSQL_COMMAND} "SELECT cachestatus FROM vservers WHERE vserverid = '${VM_ID}' LIMIT 1;" --batch --raw)
${MYSQL_COMMAND} "SELECT nodeid FROM vservers WHERE vserverid = '${VM_ID}' LIMIT 1;" \
| while read -r NODEID
do
NODEIP=$(${MYSQL_COMMAND} "SELECT ip FROM nodes WHERE nodeid = '${NODEID}' LIMIT 1;" --batch --raw)
echo '{ "nodeId":"'"$NODEID"'", "nodeIP":"'"$NODEIP"'", "ctid":"'"$CTID"'", "ctid_status":"'"$ONLINE"'" },'
done \
| tr -s '\n' ' ' \
| sed "s/, $// ; s/$/ ] }/g ; s/^/{ \"$VM_ID\": [/g" \
| jq
elif [[ "$OPTION" == sync_vm_from_node ]]
then
CTID="$2"
NODEIP="$3"
# Check if CTID and NODEIP are provided
if [[ -z "$CTID" || -z "$NODEIP" ]]
then
echo "Usage: $0 sync_vm_from_node <CTID> <NODEIP>"
exit 1
fi
# Get the node ID based on the NODEIP
NODE_ID=$(bash /bigscoots/solusvm/get.sh node_info ALL | jq -r --arg ip "$NODEIP" '.[] | select(.ip == $ip) | .node_id')
if [[ -z "$NODE_ID" ]]
then
echo "Error: Unable to find node ID for IP $NODEIP"
exit 1
fi
# Get the SolusVM ID from the database
SOLUS_VM_ID=$(mysql -u "${MYSQL_USER}" -p"${MYSQL_PASS}" "${MYSQL_DB}" -sNe "select vserverid from vservers where ctid = '${CTID}';")
if [[ -z "$SOLUS_VM_ID" ]]
then
echo "Error: Unable to find SolusVM ID for CTID $CTID"
exit 1
fi
# Get the current node ID
NODE_ID_CURRENT=$(bash /bigscoots/solusvm/get.sh vm_info "$SOLUS_VM_ID" | jq -r --arg id "$SOLUS_VM_ID" '.[$id][0].nodeId')
if [[ -z "$NODE_ID_CURRENT" ]]
then
echo "Error: Unable to get current node ID for SolusVM ID $SOLUS_VM_ID"
exit 1
fi
echo "Container ID: $CTID"
echo "SolusVM ID: $SOLUS_VM_ID"
echo "Node ID Current: $NODE_ID_CURRENT"
echo "Node ID Actual : $NODE_ID"
echo "Node IP: $NODEIP"
# Compare and update node ID if needed
if [[ "$NODE_ID_CURRENT" != "$NODE_ID" ]]
then
echo "Updating the Node ID on https://manage.securedserverspace.com:5656/admincp/manage.php?id=$SOLUS_VM_ID"
/scripts/vm-migrate "$SOLUS_VM_ID" "$NODE_ID"
else
echo "$SOLUS_VM_ID already assigned to the correct node."
fi
else
echo "Command not found."
exit
fi