Rohit Yadav 5da7d2d01e
scripts: fix external provision to use correct power state & hyperv powersync (#11504)
* scripts: fix external provision to use correct power state

The valid states are poweron and poweroff.

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>

* strip string while processing powerstate for HyperV

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>

* ignore warning that spills over to exten output string

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>

---------

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
2025-08-29 12:09:23 +05:30

148 lines
3.4 KiB
Bash
Executable File

#!/bin/bash
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
parse_json() {
local json_string=$1
echo "$json_string" | jq '.' > /dev/null || { echo '{"error":"Invalid JSON input"}'; exit 1; }
}
generate_random_mac() {
hexchars="0123456789ABCDEF"
echo "52:54:00:$(for i in {1..3}; do echo -n ${hexchars:$(( RANDOM % 16 )):1}${hexchars:$(( RANDOM % 16 )):1}; [[ $i -lt 3 ]] && echo -n ':'; done)"
}
prepare() {
parse_json "$1" || exit 1
local input_json="$1"
local nics_json
nics_json=$(echo "$input_json" | jq '.["cloudstack.vm.details"].nics')
# If NICs array is empty, return empty string
if [ "$(echo "$nics_json" | jq 'length // 0')" -eq 0 ]; then
echo ""
return
fi
local result='{"nics":['
local first=1
while IFS= read -r uuid; do
local mac
mac=$(generate_random_mac)
if [ $first -eq 1 ]; then
first=0
else
result+=','
fi
result+='{"uuid":"'"$uuid"'","mac":"'"$mac"'"}'
done < <(echo "$nics_json" | jq -r '.[].uuid')
result+=']}'
echo "$result"
}
create() {
parse_json "$1" || exit 1
local response
response=$(jq -n \
'{status: "success", message: "Instance created"}')
echo "$response"
}
delete() {
parse_json "$1" || exit 1
local response
response=$(jq -n \
'{status: "success", message: "Instance deleted"}')
echo "$response"
}
start() {
parse_json "$1" || exit 1
echo '{"status": "success", "message": "Instance started"}'
}
stop() {
parse_json "$1" || exit 1
echo '{"status": "success", "message": "Instance stopped"}'
}
reboot() {
parse_json "$1" || exit 1
echo '{"status": "success", "message": "Instance rebooted"}'
}
status() {
parse_json "$1" || exit 1
echo '{"status": "success", "power_state": "poweron"}'
}
action=$1
parameters_file="$2"
wait_time="$3"
if [[ -z "$action" || -z "$parameters_file" ]]; then
echo '{"error":"Missing required arguments"}'
exit 1
fi
if [[ ! -r "$parameters_file" ]]; then
echo '{"error":"File not found or unreadable"}'
exit 1
fi
# Read file content as parameters (assumes space-separated arguments)
parameters=$(<"$parameters_file")
case $action in
prepare)
prepare "$parameters"
;;
create)
create "$parameters"
;;
delete)
delete "$parameters"
;;
start)
start "$parameters"
;;
stop)
stop "$parameters"
;;
reboot)
reboot "$parameters"
;;
status)
status "$parameters"
;;
*)
echo '{"error":"Invalid action"}'
exit 1
;;
esac
exit 0