Add vm state management scripts
This commit is contained in:
		
							
								
								
									
										39
									
								
								capsulflask/shell_scripts/force-stop.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										39
									
								
								capsulflask/shell_scripts/force-stop.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,39 @@
 | 
			
		||||
#!/bin/sh -e
 | 
			
		||||
#
 | 
			
		||||
# force-stop.sh - pull the plug on a capsul
 | 
			
		||||
# if it is already stopped, do nothing
 | 
			
		||||
 | 
			
		||||
# State Key
 | 
			
		||||
# NOSTATE: 0 - no state
 | 
			
		||||
# RUNNING: 1 - the domain is running
 | 
			
		||||
# BLOCKED: 2 - the domain is blocked on resource
 | 
			
		||||
# PAUSED: 3 - the domain is paused by user
 | 
			
		||||
# SHUTDOWN: 4 - the domain is being shut down
 | 
			
		||||
# SHUTOFF: 5 - the domain is shut off
 | 
			
		||||
# CRASHED: 6 - the domain is crashed
 | 
			
		||||
# PMSUSPENDED: 7 - the domain is suspended by guest power management
 | 
			
		||||
# LAST: 8 NB: this enum value will increase over time as new events are added to the libvirt API. It reflects the last state supported by this version of the libvirt API.
 | 
			
		||||
 | 
			
		||||
vmname="$1"
 | 
			
		||||
 | 
			
		||||
[ "$vmname" = '' ] && printf 'you must set $vmname\n' && exit 1
 | 
			
		||||
 | 
			
		||||
if printf "$vmname" | grep -vqE '^(cvm|capsul)-[a-z0-9]{10}$'; then
 | 
			
		||||
  printf 'vmname %s must match ^capsul-[a-z0-9]{10}$\n' "$vmname"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
state="$(virsh domstats $vmname | grep state.state | cut -d '=' -f 2)"
 | 
			
		||||
 | 
			
		||||
[ "$state" = '' ] && printf 'state was not detected. must match ^[0-8]$\n' && exit 1
 | 
			
		||||
 | 
			
		||||
if printf "$state" | grep -vqE '^[0-8]$'; then
 | 
			
		||||
  printf 'state %s must match ^[0-8]$\n' "$state"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
case "$state" in
 | 
			
		||||
  [1-47]) virsh destroy "$vmname" > /dev/null ;; # virsh destroy == pull the plug
 | 
			
		||||
  [5-6]) printf "%s is already off\n" "$vmname" ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										43
									
								
								capsulflask/shell_scripts/restart.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										43
									
								
								capsulflask/shell_scripts/restart.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,43 @@
 | 
			
		||||
#!/bin/sh -e
 | 
			
		||||
#
 | 
			
		||||
# restart.sh - restarts a capsul
 | 
			
		||||
# if it is stopping, do nothing
 | 
			
		||||
 | 
			
		||||
# State Key
 | 
			
		||||
# NOSTATE: 0 - no state
 | 
			
		||||
# RUNNING: 1 - the domain is running
 | 
			
		||||
# BLOCKED: 2 - the domain is blocked on resource
 | 
			
		||||
# PAUSED: 3 - the domain is paused by user
 | 
			
		||||
# SHUTDOWN: 4 - the domain is being shut down
 | 
			
		||||
# SHUTOFF: 5 - the domain is shut off
 | 
			
		||||
# CRASHED: 6 - the domain is crashed
 | 
			
		||||
# PMSUSPENDED: 7 - the domain is suspended by guest power management
 | 
			
		||||
# LAST: 8 NB: this enum value will increase over time as new events are added to the libvirt API. It reflects the last state supported by this version of the libvirt API.
 | 
			
		||||
 | 
			
		||||
vmname="$1"
 | 
			
		||||
 | 
			
		||||
[ "$vmname" = '' ] && printf 'you must set $vmname\n' && exit 1
 | 
			
		||||
 | 
			
		||||
if printf "$vmname" | grep -vqE '^(cvm|capsul)-[a-z0-9]{10}$'; then
 | 
			
		||||
  printf 'vmname %s must match ^capsul-[a-z0-9]{10}$\n' "$vmname"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
state="$(virsh domstats $vmname | grep state.state | cut -d '=' -f 2)"
 | 
			
		||||
 | 
			
		||||
[ "$state" = '' ] && printf 'state was not detected. must match ^[0-8]$\n' && exit 1
 | 
			
		||||
 | 
			
		||||
if printf "$state" | grep -vqE '^[0-8]$'; then
 | 
			
		||||
  printf 'state %s must match ^[0-8]$\n' "$state"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
case "$state" in
 | 
			
		||||
  1) virsh reboot "$vmname" > /dev/null ;;
 | 
			
		||||
  2) printf '%s cannot be rebooted while it is blocked\n' "$vmname" ;;
 | 
			
		||||
  37) printf '%s cannot be rebooted while it is paused\n' "$vmname" ;;
 | 
			
		||||
  4) printf '%s cannot be rebooted while it is shutting down\n' "$vmname" ;;
 | 
			
		||||
  56) printf '%s cannot be rebooted while it is stopped\n' "$vmname" ;;
 | 
			
		||||
  *) printf 'unknown script behavior. state: %s\n' "$state" ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										40
									
								
								capsulflask/shell_scripts/start.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										40
									
								
								capsulflask/shell_scripts/start.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,40 @@
 | 
			
		||||
#!/bin/sh -e
 | 
			
		||||
#
 | 
			
		||||
# start.sh - starts a capsul
 | 
			
		||||
# if it is already started, do nothing
 | 
			
		||||
# if it is stopping, do nothing
 | 
			
		||||
 | 
			
		||||
# State Key
 | 
			
		||||
# NOSTATE: 0 - no state
 | 
			
		||||
# RUNNING: 1 - the domain is running
 | 
			
		||||
# BLOCKED: 2 - the domain is blocked on resource
 | 
			
		||||
# PAUSED: 3 - the domain is paused by user
 | 
			
		||||
# SHUTDOWN: 4 - the domain is being shut down
 | 
			
		||||
# SHUTOFF: 5 - the domain is shut off
 | 
			
		||||
# CRASHED: 6 - the domain is crashed
 | 
			
		||||
# PMSUSPENDED: 7 - the domain is suspended by guest power management
 | 
			
		||||
# LAST: 8 NB: this enum value will increase over time as new events are added to the libvirt API. It reflects the last state supported by this version of the libvirt API.
 | 
			
		||||
 | 
			
		||||
vmname="$1"
 | 
			
		||||
 | 
			
		||||
[ "$vmname" = '' ] && printf 'you must set $vmname\n' && exit 1
 | 
			
		||||
 | 
			
		||||
if printf "$vmname" | grep -vqE '^(cvm|capsul)-[a-z0-9]{10}$'; then
 | 
			
		||||
  printf 'vmname %s must match ^capsul-[a-z0-9]{10}$\n' "$vmname"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
state="$(virsh domstats $vmname | grep state.state | cut -d '=' -f 2)"
 | 
			
		||||
 | 
			
		||||
[ "$state" = '' ] && printf 'state was not detected. must match ^[0-8]$\n' && exit 1
 | 
			
		||||
 | 
			
		||||
if printf "$state" | grep -vqE '^[0-8]$'; then
 | 
			
		||||
  printf 'state %s must match ^[0-8]$\n' "$state"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
case "$state" in
 | 
			
		||||
  1) printf '%s is already running\n' "$vmname" ;;
 | 
			
		||||
  4) printf '%s cannot be started while it is shutting down\n' "$vmname" ;;
 | 
			
		||||
  [235-7]) virsh start "$vmname" > /dev/null ;;
 | 
			
		||||
esac
 | 
			
		||||
							
								
								
									
										39
									
								
								capsulflask/shell_scripts/stop.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										39
									
								
								capsulflask/shell_scripts/stop.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,39 @@
 | 
			
		||||
#!/bin/sh -e
 | 
			
		||||
#
 | 
			
		||||
# stop.sh - stops a capsul
 | 
			
		||||
# if it is already stopped, do nothing
 | 
			
		||||
 | 
			
		||||
# State Key
 | 
			
		||||
# NOSTATE: 0 - no state
 | 
			
		||||
# RUNNING: 1 - the domain is running
 | 
			
		||||
# BLOCKED: 2 - the domain is blocked on resource
 | 
			
		||||
# PAUSED: 3 - the domain is paused by user
 | 
			
		||||
# SHUTDOWN: 4 - the domain is being shut down
 | 
			
		||||
# SHUTOFF: 5 - the domain is shut off
 | 
			
		||||
# CRASHED: 6 - the domain is crashed
 | 
			
		||||
# PMSUSPENDED: 7 - the domain is suspended by guest power management
 | 
			
		||||
# LAST: 8 NB: this enum value will increase over time as new events are added to the libvirt API. It reflects the last state supported by this version of the libvirt API.
 | 
			
		||||
 | 
			
		||||
vmname="$1"
 | 
			
		||||
 | 
			
		||||
[ "$vmname" = '' ] && printf 'you must set $vmname\n' && exit 1
 | 
			
		||||
 | 
			
		||||
if printf "$vmname" | grep -vqE '^(cvm|capsul)-[a-z0-9]{10}$'; then
 | 
			
		||||
  printf 'vmname %s must match ^capsul-[a-z0-9]{10}$\n' "$vmname"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
state="$(virsh domstats $vmname | grep state.state | cut -d '=' -f 2)"
 | 
			
		||||
 | 
			
		||||
[ "$state" = '' ] && printf 'state was not detected. must match ^[0-8]$\n' && exit 1
 | 
			
		||||
 | 
			
		||||
if printf "$state" | grep -vqE '^[0-8]$'; then
 | 
			
		||||
  printf 'state %s must match ^[0-8]$\n' "$state"
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
case "$state" in
 | 
			
		||||
  [1-37]) virsh shutdown "$vmname" > /dev/null ;;
 | 
			
		||||
  [4-6]) printf '%s is already shutting down\n' "$vmname" ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user