socsvn commit: r305103 - in soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve: . action
litong at FreeBSD.org
litong at FreeBSD.org
Sat Jun 11 10:23:55 UTC 2016
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
More information about the svn-soc-all
mailing list