annotate files/fbhyve.in @ 649:4ee9a8042f4a

common.subr: _get_jail_from_path() now just returns when the jail is dying. But it prints the name of the jail if it is yet dying. Real error reporting must not consistently be done in the caller.
author Franz Glasner <fzglas.hg@dom66.de>
date Fri, 27 Sep 2024 21:21:34 +0200
parents 30ba5e272030
children 24129dd789f0
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"
479
30ba5e272030 fbhyve: put tmux into the required_files
Franz Glasner <fzglas.hg@dom66.de>
parents: 477
diff changeset
90 command="%%LOCALBASE%%/bin/tmux"
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
91 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
92
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_dirs="${_rundir}"
479
30ba5e272030 fbhyve: put tmux into the required_files
Franz Glasner <fzglas.hg@dom66.de>
parents: 477
diff changeset
94 required_files="${fbhyve_config} ${command}"
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
95
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 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
97
6ecd16725818 Begin refactoring bhyve into fbhyve.
Franz Glasner <fzglas.hg@dom66.de>
parents: 465
diff changeset
98
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
99 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
100 {
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 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
102
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 _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
104 _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
105 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
106 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
107 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
108 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
109 _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
110 fi
464
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
111
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
112 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
113 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
114 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
115 _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
116 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
117 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
118 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
119 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
120 _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
121 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
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 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
124 }
464
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
125
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
126
475
827371176fec Formatting
Franz Glasner <fzglas.hg@dom66.de>
parents: 474
diff changeset
127 fbhyve_pre_start()
827371176fec Formatting
Franz Glasner <fzglas.hg@dom66.de>
parents: 474
diff changeset
128 {
477
3f187ec5c4d9 Extra support for "forcestart" in fbhyve
Franz Glasner <fzglas.hg@dom66.de>
parents: 476
diff changeset
129 local _level
3f187ec5c4d9 Extra support for "forcestart" in fbhyve
Franz Glasner <fzglas.hg@dom66.de>
parents: 476
diff changeset
130
3f187ec5c4d9 Extra support for "forcestart" in fbhyve
Franz Glasner <fzglas.hg@dom66.de>
parents: 476
diff changeset
131 if [ -z "${rc_force}" ]; then
3f187ec5c4d9 Extra support for "forcestart" in fbhyve
Franz Glasner <fzglas.hg@dom66.de>
parents: 476
diff changeset
132 _level="ERROR:"
3f187ec5c4d9 Extra support for "forcestart" in fbhyve
Franz Glasner <fzglas.hg@dom66.de>
parents: 476
diff changeset
133 else
3f187ec5c4d9 Extra support for "forcestart" in fbhyve
Franz Glasner <fzglas.hg@dom66.de>
parents: 476
diff changeset
134 _level="WARNING:"
3f187ec5c4d9 Extra support for "forcestart" in fbhyve
Franz Glasner <fzglas.hg@dom66.de>
parents: 476
diff changeset
135 fi
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
136 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
137 echo "ERROR: Cannot load kernel module \`vmm'" 1>&2
477
3f187ec5c4d9 Extra support for "forcestart" in fbhyve
Franz Glasner <fzglas.hg@dom66.de>
parents: 476
diff changeset
138 [ -z "${rc_force}" ] && return 1
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
139 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
140 if [ -e "/dev/vmm/${_vm}" ]; then
477
3f187ec5c4d9 Extra support for "forcestart" in fbhyve
Franz Glasner <fzglas.hg@dom66.de>
parents: 476
diff changeset
141 echo "${_level} VM \`${_vm}' already created in the VM monitor" 1>&2
3f187ec5c4d9 Extra support for "forcestart" in fbhyve
Franz Glasner <fzglas.hg@dom66.de>
parents: 476
diff changeset
142 [ -z "${rc_force}" ] && return 1
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
143 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
144 if ${command} has-session -t "${_session}" 2>/dev/null; then
477
3f187ec5c4d9 Extra support for "forcestart" in fbhyve
Franz Glasner <fzglas.hg@dom66.de>
parents: 476
diff changeset
145 echo "${_level} tmux session \`${_session}' already exists" 1>&2
3f187ec5c4d9 Extra support for "forcestart" in fbhyve
Franz Glasner <fzglas.hg@dom66.de>
parents: 476
diff changeset
146 [ -z "${rc_force}" ] && return 1
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
147 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
148 return 0
464
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
149 }
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
150
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
151
475
827371176fec Formatting
Franz Glasner <fzglas.hg@dom66.de>
parents: 474
diff changeset
152 fbhyve_post_stop()
827371176fec Formatting
Franz Glasner <fzglas.hg@dom66.de>
parents: 474
diff changeset
153 {
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
154 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
155 /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
156 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
157 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
158 ${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
159 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
160 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
161 return 0
464
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
162 }
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
163
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
164
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
165 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
166 {
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 # 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
168 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
169 /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
170 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
171 # 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
172 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
173 }
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
174
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
175
464
f1e00e5b2f2d ADD: the new original code from bhyve-rc.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff changeset
176 run_rc_command "$1"