This is an expansion of D2448, but I didn't want to hijack that review
This uses a more detailed config file that exposes more of the options.
This code is not complete yet (bhyveload has not been converted)
A bug fix is pending in upstream libucl to deal with implicit/explicit arrays, that is breaking the ability to have more than 1 disk {}, device {} or network {} block
In the example config, you'll notice that the device stanza is an array, this will be changed to being 2 separate device {} stanzas once the libucl bug fix is imported.
Ideally, Most of the config options will be moved to a default.conf that will be loaded 'under' the user defined config file, using libucl's include mechanism, once it supports lower relative priorities.