mirror of
				https://github.com/oSoWoSo/DistroHopper.git
				synced 2024-08-14 22:46:53 +00:00 
			
		
		
		
	Add support to send command to QEMU-Monitor
- Add commandline parameter --monitor-cmd - Support implemented on commandline as well as for configuration file
This commit is contained in:
		
							parent
							
								
									21788f525d
								
							
						
					
					
						commit
						bd00b34067
					
				
					 1 changed files with 63 additions and 7 deletions
				
			
		
							
								
								
									
										70
									
								
								quickemu
									
										
									
									
									
								
							
							
						
						
									
										70
									
								
								quickemu
									
										
									
									
									
								
							|  | @ -1028,7 +1028,7 @@ function vm_boot() { | |||
|     echo " - Monitor:  On host: telnet ${MONITOR_TELNET_HOST} ${MONITOR_TELNET_PORT}" | ||||
|     echo "monitor-telnet,${MONITOR_TELNET_PORT},${MONITOR_TELNET_HOST}" >> "${VMDIR}/${VMNAME}.ports" | ||||
|   elif [ "${MONITOR}" == "socket" ]; then | ||||
|     args+=(-monitor unix:${VMDIR}/${VMNAME}-monitor.socket,server,nowait) | ||||
|     args+=(-monitor unix:${VM_MONITOR_SOCKETPATH},server,nowait) | ||||
|     echo " - Monitor:  On host: nc -U \"${VMDIR}/${VMNAME}-monitor.socket\"" | ||||
|   else | ||||
|     :: | ||||
|  | @ -1141,6 +1141,7 @@ function usage() { | |||
|   echo "  --monitor <type>                  : Set monitor connection type. @Options: 'socket' (default), 'telnet', 'none'" | ||||
|   echo "  --monitor-telnet-host <ip/host>   : Set telnet host for monitor. (default: 'localhost')" | ||||
|   echo "  --monitor-telnet-port <port>      : Set telnet port for monitor. (default: '4444')" | ||||
|   echo "  --monitor-cmd <CMD>               : Send command to monitor if available. (Example: system_powerdown)" | ||||
|   echo "  --version                         : Print version" | ||||
|   exit 1 | ||||
| } | ||||
|  | @ -1173,14 +1174,20 @@ function parse_ports_from_file { | |||
|     local FILE="${VMDIR}/${VMNAME}.ports" | ||||
| 
 | ||||
|     # parse ports | ||||
|     port_name=( $(cat "$FILE" | cut -d, -f1) ) | ||||
|     port_number=( $(cat "$FILE" | cut -d, -f2) ) | ||||
|     local port_name=( $(cat "$FILE" | cut -d, -f1) ) | ||||
|     local port_number=( $(cat "$FILE" | cut -d, -f2) ) | ||||
|     local host_name=( $(cat "$FILE" | gawk 'FS="," {print $3,"."}') ) | ||||
| 
 | ||||
|     for ((i=0; i<${#port_name[@]}; i++)); do | ||||
|       if [ ${port_name[$i]} == 'ssh' ]; then | ||||
|         SSH_PORT=${port_number[$i]} | ||||
|       if [ "${port_name[$i]}" == "ssh" ]; then | ||||
|         SSH_PORT="${port_number[$i]}" | ||||
|       fi | ||||
|       if [ ${port_name[$i]} == 'spice' ]; then | ||||
|         SPICE_PORT=${port_number[$i]} | ||||
|       if [ "${port_name[$i]}" == "spice" ]; then | ||||
|         SPICE_PORT="${port_number[$i]}" | ||||
|       fi | ||||
|       if [ "${port_name[$i]}" == "monitor-telnet" ]; then | ||||
|         MONITOR_TELNET_PORT="${port_number[$i]}" | ||||
|         MONITOR_TELNET_HOST="${host_name[$i]}" | ||||
|       fi | ||||
|     done | ||||
| } | ||||
|  | @ -1189,6 +1196,45 @@ function is_numeric { | |||
|     [[ "$1" =~ ^[0-9]+$ ]] | ||||
| } | ||||
| 
 | ||||
| function monitor_send_cmd { | ||||
|     local MSG="${1}" | ||||
| 
 | ||||
|     if [ -z "${MSG}" ]; then | ||||
|         echo "WARNING! Send to QEMU-Monitor: Message empty!" | ||||
|         return 1 | ||||
|     fi | ||||
| 
 | ||||
|     # Determine monitor channel | ||||
|     local monitor_channel="" | ||||
| 
 | ||||
|     if [ -S "${VMDIR}/${VMNAME}-monitor.socket" ]; then | ||||
|         monitor_channel="socket" | ||||
|     elif [ -n "${MONITOR_TELNET_PORT}" ] && [ -n "${MONITOR_TELNET_HOST}" ]; then | ||||
|         monitor_channel="telnet" | ||||
|     else | ||||
|         echo "WARNING! No qemu-monitor channel available - Couldn't send message to monitor!" | ||||
|         return | ||||
|     fi | ||||
| 
 | ||||
| 
 | ||||
|     case "${monitor_channel}" in | ||||
|         socket) | ||||
|             echo -e " - MON-SEND: ${MSG}" | ||||
|             echo -e "${MSG}" | nc -N -U "${VM_MONITOR_SOCKETPATH}" 2>&1 > /dev/null | ||||
|             ;; | ||||
|         telnet) | ||||
|             echo -e " - MON-SEND: ${MSG}" | ||||
|             echo -e "${MSG}" | nc -N "${MONITOR_TELNET_HOST}" "${MONITOR_TELNET_PORT}" 2>&1 > /dev/null | ||||
|             ;; | ||||
|         *) | ||||
|             echo "ERROR! This should never happen!" | ||||
|             exit 1 | ||||
|             ;; | ||||
|     esac | ||||
| 
 | ||||
|     return 0 | ||||
| } | ||||
| 
 | ||||
| ### MAIN | ||||
| 
 | ||||
| # Lowercase variables are used in the VM config file only | ||||
|  | @ -1217,6 +1263,7 @@ public_dir="" | |||
| monitor="socket" | ||||
| monitor_telnet_port="4444" | ||||
| monitor_telnet_host="localhost" | ||||
| monitor_cmd="" | ||||
| 
 | ||||
| BRAILLE="" | ||||
| DELETE_DISK=0 | ||||
|  | @ -1241,6 +1288,8 @@ VIEWER="" | |||
| SSH_PORT="" | ||||
| SPICE_PORT="" | ||||
| MONITOR="" | ||||
| MONITOR_CMD="" | ||||
| VM_MONITOR_SOCKETPATH="" | ||||
| 
 | ||||
| # shellcheck disable=SC2155 | ||||
| readonly LAUNCHER=$(basename "${0}") | ||||
|  | @ -1338,6 +1387,10 @@ else | |||
|             MONITOR="${2}" | ||||
|             shift; | ||||
|             shift;; | ||||
|           -monitor-cmd|--monitor-cmd) | ||||
|             MONITOR_CMD="${2}" | ||||
|             shift; | ||||
|             shift;; | ||||
|           -monitor-telnet-host|--monitor-telnet-host) | ||||
|             MONITOR_TELNET_HOST="${2}" | ||||
|             shift; | ||||
|  | @ -1369,6 +1422,7 @@ if [ -n "${VM}" ] && [ -e "${VM}" ]; then | |||
|   VMDIR=$(dirname "${disk_img}") | ||||
|   VMNAME=$(basename "${VM}" .conf) | ||||
|   VMPATH=$(realpath "$(dirname "${VM}")") | ||||
|   VM_MONITOR_SOCKETPATH="${VMDIR}/${VMNAME}-monitor.socket" | ||||
| 
 | ||||
|   # Backwards compatibility for ${driver_iso} | ||||
|   if [ -n "${driver_iso}" ] && [ -z "${fixed_iso}" ]; then | ||||
|  | @ -1503,9 +1557,11 @@ fi | |||
| if [ $VM_UP -eq 0 ]; then | ||||
|     vm_boot | ||||
|     start_viewer | ||||
|     monitor_send_cmd "${MONITOR_CMD}" | ||||
| else | ||||
|     parse_ports_from_file | ||||
|     start_viewer | ||||
|     monitor_send_cmd "${MONITOR_CMD}" | ||||
| fi | ||||
| 
 | ||||
| # vim:tabstop=2:shiftwidth=2:expandtab | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue