mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	* 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>
		
			
				
	
	
		
			148 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			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
 |