socsvn commit: r305037 - 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:05 UTC 2016
Author: litong
Date: Fri Jun 10 12:36:00 2016
New Revision: 305037
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305037
Log:
add initial example box
Added:
soc2016/litong/vagrant-bhyve/trunk/example_box/
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/action.rb
soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/config.rb
soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb
soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb
soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/plugin.rb
soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/provider.rb
soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/util.rb
Modified:
soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve.rb
soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/version.rb
Added: soc2016/litong/vagrant-bhyve/trunk/example_box/README.md
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ soc2016/litong/vagrant-bhyve/trunk/example_box/README.md Fri Jun 10 12:36:00 2016 (r305037)
@@ -0,0 +1,28 @@
+# Vagrant Bhyve Example Box
+
+Vagrant providers each require a custom provider-specific box format.
+This folder shows the example contents of a box for the `bhyve` provider.
+To turn this into a box create a vagrant image according documentation (don't
+ forget to install rsync command) and create box with following command:
+
+```
+$ tar cvzf custom_box.box ./metadata.json ./Vagrantfile ./box.img
+```
+
+This box works by using Vagrant's built-in Vagrantfile merging to setup
+defaults for Bhyve. These defaults can easily be overwritten by higher-level
+Vagrantfiles (such as project root Vagrantfiles).
+
+## Box Metadata
+
+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
+
+## Converting Boxes
+
+Instead of creating a box from scratch, you can use
+[vagrant-mutate](https://github.com/sciurus/vagrant-mutate)
+to take boxes created for other Vagrant providers and use them
+with vagrant-bhyve
Added: soc2016/litong/vagrant-bhyve/trunk/example_box/metadata.json
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ soc2016/litong/vagrant-bhyve/trunk/example_box/metadata.json Fri Jun 10 12:36:00 2016 (r305037)
@@ -0,0 +1,4 @@
+{
+ "provider" : "libvirt",
+ "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:35:48 2016 (r305036)
+++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve.rb Fri Jun 10 12:36:00 2016 (r305037)
@@ -1,10 +1,13 @@
require "pathname"
-
require "vagrant-bhyve/version"
module VagrantPlugin
- module Bhyve
+ module ProviderBhyve
lib_path = Pathname.new(File.expand_path("../vagrant-bhyve", __FILE__))
+ autoload :Action, lib_path.join('action')
+ autoload :Driver, lib_path.join('driver')
+ autoload :Errors, lib_path.join('errors')
+ autoload :Util, lib_path.join('util')
# This function returns the path to the source of this plugin
Added: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/action.rb
==============================================================================
Added: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/config.rb
==============================================================================
Added: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/driver.rb Fri Jun 10 12:36:00 2016 (r305037)
@@ -0,0 +1,21 @@
+require "log4r"
+
+module VagrantPlugins
+ module ProviderBhyve
+ class Driver
+
+ @@sudo = ''
+
+ def initialize(machine)
+ @logger = Log4r::Logger.new("vagrant::bhyve::driver")
+ @machine = machine
+ 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'
Added: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/errors.rb
==============================================================================
Added: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/plugin.rb
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/plugin.rb Fri Jun 10 12:36:00 2016 (r305037)
@@ -0,0 +1,73 @@
+begin
+ require "vagrant"
+rescue LoadError
+ raise "The Vagrant Bhyve plugin must be run within Vagrant."
+end
+
+#############################################################
+# TBD some version check #
+#############################################################
+
+module VagrantPlugins
+ module ProviderBhyve
+ class Plugin < Vagrant.plugin('2')
+ name "bhyve"
+ description <<-DESC
+ This plugin allows vagrant to manage VMs in bhyve, the hypervisor
+ provided by FreeBSD's kernel
+ DESC
+
+ config(:bhyve, :provider) do
+ require_relative "config"
+ Config
+ end
+
+ provider(:bhyve, parallel: true) do
+ require_relative "provider"
+ Provider
+ end
+
+ # This initializes the internationalization strings.
+ def self.setup_i18n
+ I18n.load_path << File.expand_path('locales/en.yml',
+ ProviderLibvirt.source_root)
+ I18n.reload!
+ end
+
+ # This sets up our log level to be whatever VAGRANT_LOG is.
+ def self.setup_logging
+ require 'log4r'
+
+ level = nil
+ begin
+ level = Log4r.const_get(ENV['VAGRANT_LOG'].upcase)
+ rescue NameError
+ # This means that the logging constant wasn't found,
+ # which is fine. We just keep `level` as `nil`. But
+ # we tell the user.
+ level = nil
+ end
+
+ # Some constants, such as "true" resolve to booleans, so the
+ # above error checking doesn't catch it. This will check to make
+ # sure that the log level is an integer, as Log4r requires.
+ level = nil if !level.is_a?(Integer)
+
+ # Set the logging level on all "vagrant" namespaced
+ # logs as long as we have a valid level.
+ if level
+ logger = Log4r::Logger.new('vagrant_libvirt')
+ logger.outputters = Log4r::Outputter.stderr
+ logger.level = level
+ logger = nil
+ end
+ end
+
+ # Setup logging and i18n before any autoloading loads other classes
+ # with logging configured as this prevents inheritance of the log level
+ # from the parent logger.
+ setup_logging
+ setup_i18n
+ end
+ end
+end
Added: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/provider.rb
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/provider.rb Fri Jun 10 12:36:00 2016 (r305037)
@@ -0,0 +1,68 @@
+require "vagrant"
+require "log4r"
+
+module VagrantPlugins
+ module ProviderBhyve
+ autoload :Driver, 'vagrant-bhyve/driver'
+
+ class Provider < Vagrant.plugin('2', :provider)
+
+ def initialize(machine)
+ @logger = Log4r::Logger.new("vagrant::provider::bhyve")
+ @machine = machine
+ end
+
+ def action(name)
+ # Attrmpt to get the action method from the Action class if it
+ # exists, otherwise return nil to show that we don't support the
+ # given action
+ action_method = "action_#{name}"
+ return Action.send(action_method) if Action.respond_to?(action_method)
+ nil
+ end
+
+ def driver
+ return @driver if @driver
+ @driver = Driver.new(@machine)
+ end
+
+ # This should return a hash of information that explains how to SSH
+ # into the machine. If the machine is not at a point where SSH is
+ # even possiable, then 'nil' should be returned
+ #
+ # The general structure of this returned hash should be the
+ # following:
+ #
+ # {
+ # host: "1.2.3.4",
+ # port: "22",
+ # username: "vagrant",
+ # private_key_path: "/path/to/my/key"
+ # }
+ def ssh_info
+ return nil if state.id != :running
+
+ ip = driver.get_ipaddress(@machine)
+
+ # We just return nil if were not able to identify the VM's IP and
+ # let Vagrant core deal with it like docker provider does
+ return nil if !ip
+
+ ssh_info = {
+ host: ip,
+ port: @machine.config.ssh.guest_port
+ }
+#############################################################
+# TBD add more ssh info #
+#############################################################
+ ssh_info
+ end
+
+ def state
+
+ end
+
+
+ end
+ end
+end
Added: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/util.rb
==============================================================================
Modified: soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/version.rb
==============================================================================
--- soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/version.rb Fri Jun 10 12:35:48 2016 (r305036)
+++ soc2016/litong/vagrant-bhyve/trunk/lib/vagrant-bhyve/version.rb Fri Jun 10 12:36:00 2016 (r305037)
@@ -1,6 +1,7 @@
<<<<<<< f0976cd4b81347c0d687988ff6463d3113e547d2
<<<<<<< 8569ecf8bd116d9e214f6907f29993bd8e03d40d
module VagrantPlugins
+<<<<<<< 41be567461e651dace80def0b0d464b58d14e3da
=======
module Vagrant
>>>>>>> Initial commit
@@ -8,6 +9,9 @@
module VagrantPlugins
>>>>>>> remove bin
module Bhyve
+=======
+ module ProviderBhyve
+>>>>>>> add initial example box
VERSION = "0.1.0"
end
end
More information about the svn-soc-all
mailing list