annotate files/fbhyve.in @ 476:c3ad1105c746

Implement a "kill" extra-commant for fbhyve to do an immediate poweroff of a VM
author Franz Glasner <fzglas.hg@dom66.de>
date Tue, 27 Aug 2024 22:33:57 +0200
parents 827371176fec
children 3f187ec5c4d9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
464
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
1 #!/bin/sh
474
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
2 # -*- indent-tabs-mode: nil -*-
464
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
3
467
6ecd16725818 Begin refactoring bhyve into fbhyve.
Franz Glasner <fzglas.hg@dom66.de>
parents: 465
diff changeset
4 # PROVIDE: fbhyve
474
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
5 # REQUIRE: LOGIN FILESYSTEMS
467
6ecd16725818 Begin refactoring bhyve into fbhyve.
Franz Glasner <fzglas.hg@dom66.de>
parents: 465
diff changeset
6 # KEYWORD: shutdown nojail
464
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
7 #
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
8
467
6ecd16725818 Begin refactoring bhyve into fbhyve.
Franz Glasner <fzglas.hg@dom66.de>
parents: 465
diff changeset
9 # @(#)%%SIMPLEVERSIONTAG%%
6ecd16725818 Begin refactoring bhyve into fbhyve.
Franz Glasner <fzglas.hg@dom66.de>
parents: 465
diff changeset
10
464
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
11 #
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
12 # Add the following lines to /etc/rc.conf to enable bhyve:
474
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
13 #
467
6ecd16725818 Begin refactoring bhyve into fbhyve.
Franz Glasner <fzglas.hg@dom66.de>
parents: 465
diff changeset
14 # fbhyve_enable (bool): Set to "NO" by default.
474
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
15 # Acts as default for all listed VMs.
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
16 # Set it to "YES" to enable bhyve.
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
17 # fbhyve_list (str): Set to "" by default.
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
18 # Define the names of your VMs here.
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
19 # fbhyve_tmux_session_prefix (str): All tmux session names will have this
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
20 # prefix string.
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
21 # fbhyve_configdir (str): Where by default config files for all VMs live.
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
22 # Default: $PREFIX/etc/fbhyve
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
23 #
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
24 #
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
25 # fbhyve_<vm>_enable (bool): Allow to enable or disable a specific VM.
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
26 # Set to $fbhyve_enable by default.
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
27 # fbhyve_<vm>_config (str): The bhyve configuration file to use to.
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
28 # The default is $fbhyve_configdir/<vm>.conf
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
29 #
464
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
30
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
31 . /etc/rc.subr
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
32
467
6ecd16725818 Begin refactoring bhyve into fbhyve.
Franz Glasner <fzglas.hg@dom66.de>
parents: 465
diff changeset
33 name="fbhyve"
474
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
34 desc="Manage system bhyve virtual machines"
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
35 rcvar="fbhyve_enable"
464
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
36
476
c3ad1105c746 Implement a "kill" extra-commant for fbhyve to do an immediate poweroff of a VM
Franz Glasner <fzglas.hg@dom66.de>
parents: 475
diff changeset
37 extra_commands="kill"
474
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
38 start_precmd="fbhyve_pre_start"
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
39 stop_postcmd="fbhyve_post_stop"
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
40 status_cmd="fbhyve_status"
476
c3ad1105c746 Implement a "kill" extra-commant for fbhyve to do an immediate poweroff of a VM
Franz Glasner <fzglas.hg@dom66.de>
parents: 475
diff changeset
41 kill_cmd="fbhyve_kill"
464
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
42
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
43
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
44 load_rc_config $name
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
45
474
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
46 : ${fbhyve_enable:="NO"}
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
47 : ${fbhyve_list=}
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
48 : ${fbhyve_tmux_session_prefix:="${name}_"}
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
49 : ${fbhyve_configdir:="%%FBHYVE_ETCDIR%%"}
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
50
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
51
475
827371176fec Formatting
Franz Glasner <fzglas.hg@dom66.de>
parents: 474
diff changeset
52 _fbhyve_vm_exists()
827371176fec Formatting
Franz Glasner <fzglas.hg@dom66.de>
parents: 474
diff changeset
53 {
474
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
54 local _p
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
55 for _p in ${fbhyve_list}; do
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
56 [ "${_p}" = "$1" ] && return 0;
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
57 done
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
58 return 1
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
59 }
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
60
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
61
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
62 if [ $# -eq 2 ]; then
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
63 _vm="$2"
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
64 if ! _fbhyve_vm_exists "${_vm}"; then
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
65 echo "ERROR: no VM named \`${_vm}' in \`fbhyve_list'" 1>&2
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
66 exit 1
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
67 fi
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
68 echo "-- VM: ${_vm} --"
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
69 _session="${fbhyve_tmux_session_prefix}${_vm}"
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
70 _window="${_session}_console"
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
71 eval fbhyve_enable="\${fbhyve_${_vm}_enable:-${fbhyve_enable}}"
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
72 eval fbhyve_config="\${fbhyve_${_vm}_config:-\"${fbhyve_configdir}/${_vm}.conf\"}"
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
73 else
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
74 _ec=0
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
75 _swap=$*; shift; _vmarglist=$*
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
76 _vmlist=${_vmarglist:-${fbhyve_list}}
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
77 set -- ${_swap}
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
78 for _vm in ${_vmlist}; do
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
79 "$0" "$1" "${_vm}"
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
80 _vmec=$?
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
81 if [ ${_vmec} -gt ${_ec} ]; then
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
82 _ec=${_vmec}
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
83 fi
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
84 done
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
85 exit ${_ec}
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
86 fi
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
87
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
88 _rundir="%%FBHYVE_RUNDIR%%"
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
89 pidfile="${_rundir}/${_vm}.pid"
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
90 procname="bhyve:" # something like bhyve: <vmname> (bhyve)
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
91
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
92 required_dirs="${_rundir}"
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
93 required_files="${fbhyve_config}"
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
94
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
95 command="%%LOCALBASE%%/bin/tmux"
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
96
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
97 command_args="new-session -ds ${_session} -n ${_window} \"sh -c 'echo \\\$\\\$ >\\\"${pidfile}\\\"; /usr/sbin/bhyve -k \\\"${fbhyve_config}\\\" \\\"${_vm}\\\"'\""
467
6ecd16725818 Begin refactoring bhyve into fbhyve.
Franz Glasner <fzglas.hg@dom66.de>
parents: 465
diff changeset
98
6ecd16725818 Begin refactoring bhyve into fbhyve.
Franz Glasner <fzglas.hg@dom66.de>
parents: 465
diff changeset
99
474
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
100 fbhyve_status()
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
101 {
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
102 local _pid _rc
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
103
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
104 _rc=0
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
105 _pid=$(check_pidfile "$pidfile" "$procname")
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
106 if [ -n "${_pid}" ]; then
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
107 echo "VM ${_vm} is running as pid $_pid."
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
108 else
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
109 echo "VM ${_vm} is not running."
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
110 _rc=1
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
111 fi
464
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
112
474
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
113 if ${command} has-session -t ${_session} 2>/dev/null; then
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
114 echo "tmux session ${_session} exists."
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
115 if [ ${_rc} -gt 0 ]; then
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
116 _rc=2
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
117 fi
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
118 else
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
119 echo "tmux session ${_session} does not exist."
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
120 if [ ${_rc} -gt 0 ]; then
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
121 _rc=2
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
122 fi
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
123 fi
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
124 return ${_rc}
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
125 }
464
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
126
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
127
475
827371176fec Formatting
Franz Glasner <fzglas.hg@dom66.de>
parents: 474
diff changeset
128 fbhyve_pre_start()
827371176fec Formatting
Franz Glasner <fzglas.hg@dom66.de>
parents: 474
diff changeset
129 {
474
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
130 if ! load_kld -m vmm vmm.ko; then
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
131 echo "ERROR: Cannot load kernel module \`vmm'" 1>&2
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
132 return 1
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
133 fi
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
134 if [ -e "/dev/vmm/${_vm}" ]; then
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
135 echo "ERROR: VM \`${_vm}' already created in the VM monitor" 1>&2
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
136 return 1
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
137 fi
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
138 if ${command} has-session -t "${_session}" 2>/dev/null; then
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
139 echo "ERROR: tmux session \`${_session}' already exists" 1>&2
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
140 return 1
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
141 fi
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
142 return 0
464
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
143 }
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
144
474
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
145
475
827371176fec Formatting
Franz Glasner <fzglas.hg@dom66.de>
parents: 474
diff changeset
146 fbhyve_post_stop()
827371176fec Formatting
Franz Glasner <fzglas.hg@dom66.de>
parents: 474
diff changeset
147 {
474
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
148 if [ -e "/dev/vmm/${_vm}" ]; then
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
149 /usr/sbin/bhyvectl --vm="${_vm}" --destroy
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
150 fi
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
151 if ${command} has-session -t "${_session}" 2>/dev/null; then
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
152 ${command} kill-session -t "${_session}"
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
153 fi
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
154 rm -f "${pidfile}"
57f253106ed6 Implement fbhyve, a management system that runs bhyve virtual machines within tmux sessions
Franz Glasner <fzglas.hg@dom66.de>
parents: 467
diff changeset
155 return 0
464
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
156 }
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
157
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
158
476
c3ad1105c746 Implement a "kill" extra-commant for fbhyve to do an immediate poweroff of a VM
Franz Glasner <fzglas.hg@dom66.de>
parents: 475
diff changeset
159 fbhyve_kill()
c3ad1105c746 Implement a "kill" extra-commant for fbhyve to do an immediate poweroff of a VM
Franz Glasner <fzglas.hg@dom66.de>
parents: 475
diff changeset
160 {
c3ad1105c746 Implement a "kill" extra-commant for fbhyve to do an immediate poweroff of a VM
Franz Glasner <fzglas.hg@dom66.de>
parents: 475
diff changeset
161 # Just kill without terminating
c3ad1105c746 Implement a "kill" extra-commant for fbhyve to do an immediate poweroff of a VM
Franz Glasner <fzglas.hg@dom66.de>
parents: 475
diff changeset
162 if [ -e "/dev/vmm/${_vm}" ]; then
c3ad1105c746 Implement a "kill" extra-commant for fbhyve to do an immediate poweroff of a VM
Franz Glasner <fzglas.hg@dom66.de>
parents: 475
diff changeset
163 /usr/sbin/bhyvectl --vm="${_vm}" --force-poweroff 2>/dev/null 1>/dev/null
c3ad1105c746 Implement a "kill" extra-commant for fbhyve to do an immediate poweroff of a VM
Franz Glasner <fzglas.hg@dom66.de>
parents: 475
diff changeset
164 fi
c3ad1105c746 Implement a "kill" extra-commant for fbhyve to do an immediate poweroff of a VM
Franz Glasner <fzglas.hg@dom66.de>
parents: 475
diff changeset
165 # and do the normal cleanup
c3ad1105c746 Implement a "kill" extra-commant for fbhyve to do an immediate poweroff of a VM
Franz Glasner <fzglas.hg@dom66.de>
parents: 475
diff changeset
166 fbhyve_post_stop
c3ad1105c746 Implement a "kill" extra-commant for fbhyve to do an immediate poweroff of a VM
Franz Glasner <fzglas.hg@dom66.de>
parents: 475
diff changeset
167 }
c3ad1105c746 Implement a "kill" extra-commant for fbhyve to do an immediate poweroff of a VM
Franz Glasner <fzglas.hg@dom66.de>
parents: 475
diff changeset
168
c3ad1105c746 Implement a "kill" extra-commant for fbhyve to do an immediate poweroff of a VM
Franz Glasner <fzglas.hg@dom66.de>
parents: 475
diff changeset
169
464
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
170 run_rc_command "$1"