socsvn commit: r305039 - in soc2016/litong/vagrant-bhyve/trunk: example_box lib lib/vagrant-bhyve
litong at FreeBSD.org
litong at FreeBSD.org
Fri Jun 10 12:36:26 UTC 2016
Author: litong
Date: Fri Jun 10 12:36:23 2016
New Revision: 305039
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305039
Log:
add executor and update box format
Added:
soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/executor.rb
Modified:
soc2016/litong/vagrant-bhyve/trunk/example_box/README.md
soc2016/litong/vagrant-bhyve/trunk/example_box/metadata.json
soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve.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/example_box/README.md
==============================================================================
--- soc2016/litong/vagrant-bhyve/trunk/example_box/README.md Fri Jun 10 12:36:12 2016 (r305038)
+++ soc2016/litong/vagrant-bhyve/trunk/example_box/README.md Fri Jun 10 12:36:23 2016 (r305039)
@@ -17,8 +17,9 @@
Bhyve box should define at least two data fields in `metadata.json` file.
-* provider - Provider name is bhyve
-* loader - Loader should be grub2-bhyve or bhyveload
+* provider - Provider name is bhyve.
+* firmaware - Firmware should be bios or uefi.
+* loader - Loader should be grub-bhyve or bhyveload when firmware is bios. This key should keep blank when firmware is uefi.
## Converting Boxes
Modified: soc2016/litong/vagrant-bhyve/trunk/example_box/metadata.json
==============================================================================
--- soc2016/litong/vagrant-bhyve/trunk/example_box/metadata.json Fri Jun 10 12:36:12 2016 (r305038)
+++ soc2016/litong/vagrant-bhyve/trunk/example_box/metadata.json Fri Jun 10 12:36:23 2016 (r305039)
@@ -1,4 +1,5 @@
{
"provider" : "libvirt",
+ "firmware" : "bios",
"loader" : "bhyveload"
}
Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve.rb
==============================================================================
--- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve.rb Fri Jun 10 12:36:12 2016 (r305038)
+++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve.rb Fri Jun 10 12:36:23 2016 (r305039)
@@ -5,6 +5,7 @@
module ProviderBhyve
lib_path = Pathname.new(File.expand_path("../vagrant-bhyve", __FILE__))
autoload :Action, lib_path.join('action')
+ autoload :Executor, lib_path.join('executor')
autoload :Driver, lib_path.join('driver')
autoload :Errors, lib_path.join('errors')
Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb
==============================================================================
--- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb Fri Jun 10 12:36:12 2016 (r305038)
+++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb Fri Jun 10 12:36:23 2016 (r305039)
@@ -4,28 +4,31 @@
module VagrantPlugins
module ProviderBhyve
class Driver
+
+ # This executor is responsible for actually executing commands, including
+ # bhyve, dnsmasq and other shell utils used to get VM's state
+ attr_accessor :executor
@@sudo = ''
def initialize(machine)
@logger = Log4r::Logger.new("vagrant::bhyve::driver")
@machine = machine
+ @executor = Executor::Exec.new
end
# if vagrant is excecuted by root (or with sudo) then the variable
# will be empty string, otherwise it will be 'sudo' to make sure we
# can run bhyve, bhyveload and pf with sudo privilege
def sudo
- if Process.uid == 0
- @@sudo = ''
- else
- @@sudo = 'sudo'
- end
+ @@sudo = '' if Process.uid == 0
+ @@sudo = 'sudo'
end
- def execute(command)
- process = Subprocess.new(command)
- process.execute
+ def state(&block)
+ IO.popen("test -e #{name}").tap { |f| f.read }.close
+ return :running if $?.success?
+ return :not_running
end
end
Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb
==============================================================================
--- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb Fri Jun 10 12:36:12 2016 (r305038)
+++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb Fri Jun 10 12:36:23 2016 (r305039)
@@ -7,10 +7,14 @@
error_namespace('vagrant_bhyve.errors')
end
- class NotRootUser << VagrantError
+ class HasNoRootPrivilege << VagrantBhyveError
error_key(:has_no_root_privilege)
end
+ class ExecuteError << VagrantBhyveError
+ error_key(:execute_error)
+ end
+
end
end
end
Added: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/executor.rb
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/executor.rb Fri Jun 10 12:36:23 2016 (r305039)
@@ -0,0 +1,39 @@
+require "vagrant/util/busy"
+require "vagrant/util/subprocess"
+
+module VagrantPlugins
+ module ProviderBhyve
+ module Executor
+ # This class is used to execute commands as subprocess.
+ class Exec
+ # When test is true, this method will return the executed command's
+ # exit code. Otherwise it will return the result's stdout
+ def execute(test, *cmd, **opts, &block)
+ # Append in the options for subprocess
+ cmd << { notify: [:stdout, :stderr] }
+
+ interrupted = false
+ # Lambda to change interrupted to true
+ int_callback = ->{ interrupted = true }
+ result = ::Vagrant::Util::Busy.busy(int_callback) do
+ ::Vagrant::Util::Subprocess.execute(*cmd, &block)
+ end
+
+ return result.exit_code if test
+
+ result.stderr.gsub!("\r\n", "\n")
+ result.stdout.gsub!("\r\n", "\n")
+
+ if result.exit_code != 0 && interrupted
+ raise Errors::ExecuteError,
+ command: cmd.inspect,
+ stderr: result.stderr,
+ stdout: result.stdout
+ end
+
+ result.stdout
+ end
+ end
+ end
+ end
+end
More information about the svn-soc-all
mailing list