Date: Sat, 11 Jun 2016 10:23:53 GMT From: litong@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r305103 - in soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve: . action Message-ID: <201606111023.u5BANrin086281@socsvn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: litong Date: Sat Jun 11 10:23:53 2016 New Revision: 305103 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305103 Log: add load_os action and its corresponding driver code Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action/load_os.rb soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action/load_os.rb ============================================================================== --- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action/load_os.rb Sat Jun 11 06:42:34 2016 (r305102) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action/load_os.rb Sat Jun 11 10:23:53 2016 (r305103) @@ -11,14 +11,19 @@ end def call(env) - @machine = env[:machine] - @driver = @machine.provider.driver - firmware = @machine.box.metadata[:firmware] - loader = @machine.box.metadata[:loader] - @driver.loader(loader) if firmware == 'bios' + machine = env[:machine] + load(machine) @app.call(env) end + private + + def load(machine) + driver = machine.provider.driver + firmware = machine.box.metadata[:firmware] + loader = machine.box.metadata[:loader] + driver.load(loader, machine) if firmware == 'bios' + end end end end Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb ============================================================================== --- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb Sat Jun 11 06:42:34 2016 (r305102) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb Sat Jun 11 10:23:53 2016 (r305103) @@ -47,7 +47,44 @@ execute(false, @sudo, "ifconfig", bridge_name, "description", switch_name, "up") end - def loader(loader) + def load(loader, machine) + run_cmd = [] + case loader + when 'bhyveload' + run_cmd.push('bhyveload') + # Set autoboot, and memory and disk + run_cmd.push("-m").push("#{machine.config.memory}") + ######################################################### + # TBD: problem with disk name # + ######################################################### + run_cmd.push("-d").push("#{machine.box.directory.join('disk.img').to_s}") + run_cmd += %w(-e autoboot_delay=0) + when 'grub-bhyve' + command = execute(false, %w(which grub-bhyve)) + raise Errors::GrubBhyveNotInstalled if command.length == 0 + run_cmd.push(command) + run_cmd.push("-m").push("#{machine.box.directory.join('device.map').to_s}") + run_cmd.push("-M").push("#{machine.config.memory}") + # Maybe there should be some grub config in Vagrantfile, for now + # we just use this hd0,1 as default root and don't use -d -g + # argument + run_cmd += %w(-r hd0,1) + else + raise Errors::UnrecognizedLoader + end + + # Find an available nmdm device and add it as loader's -m argument + nmdm_num = 1 + while true + result = execute(false, %w(ls -l /dev/ | grep).push("nmdm#{nmdm_num}A")) + break if result.length == 0 + nmdm_num += 1 + end + run_cmd.push("-c").push("/dev/nmdm#{nmdm_num}A") + + vm_name = machine.box.name.gsub('/', '_') + run_cmd.push(vm_name) + execute(false, run_cmd) end def bhyve Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb ============================================================================== --- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb Sat Jun 11 06:42:34 2016 (r305102) +++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb Sat Jun 11 10:23:53 2016 (r305103) @@ -22,6 +22,14 @@ class UnableToCreateBridge < VagrantError error_key(:unable_to_create_brighe) end + + class UnrecognizedLoader < VagrantError + error_key(:unrecognized_loader) + end + + class GrubBhyveNotinstalled < VagrantError + error_key(:grub_bhyve_not_installed) + end end end end
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201606111023.u5BANrin086281>