#!/usr/local/bin/execlineb -P
# {{ ansible_managed }}

s6-envdir ./env
multisubstitute {
	importas -i -u    NAME  NAME
	importas -i -u -s ORDER ORDER
	importas -i -u    RAM   RAM
	importas -i -u    ROM   ROM
	importas -i -u    CPUS  CPUS
	importas -i -u    NIC   NIC
	importas -i -u    COM   COM
	importas -i -u    PORT  PORT
	importas -i -u    PASS  PASS
}

backtick -n AHCI {
	forx X { $ORDER }
		importas X X
		importas Y $X
		echo -n ,$Y
}
importas -i -u AHCI AHCI

foreground { if { test -e "/dev/vmm/${NAME}" } bhyvectl --vm="${NAME}" --destroy }
foreground { /etc/rc.d/netif start "${NIC}" }
foreground { fdmove -c 1 2 echo "bhyve-${NAME}: Starting VM ${NAME} with ${CPUS} CPUs, ${RAM} RAM, COM on ${COM}, NIC ${NIC} and VNC port ${PORT}." }

s6-notifyoncheck -d -w 100 -n 70

fdmove -c 2 1
{% macro bhyve_run(extra_args="") -%}
bhyve -c "${CPUS}" -m "${RAM}" -w -A -P -H
	-s "0,amd_hostbridge"
	-s "2:0,ahci${AHCI}"
	-s "3,virtio-net,${NIC}"
	-s "4,virtio-rnd"
	{% for disk in item.0.disks if disk.virtio|default(False) -%}
	-s "{{ disk.virtio_slot }},virtio-blk,/dev/zvol/{{ bhyve_pool }}/bhyve/guests/{{ item.0.name }}/{{ disk.name }}"
	{% endfor -%}
	-s "31,lpc"
	-l "com1,/dev/${COM}"
	-l "bootrom,${ROM}"
	{{ extra_args }} "${NAME}"
{%- endmacro %}
ifelse { test -n "$PASS" } {
	{{ bhyve_run('-s "29,fbuf,tcp=[::1]:${PORT},w=800,h=600,password=${PASS}"') }}
}
	{{ bhyve_run() }}