[DRE-commits] [vagrant-libvirt] 39/104: add nfs support
Antonio Terceiro
terceiro at moszumanska.debian.org
Sun Apr 24 13:55:42 UTC 2016
This is an automated email from the git hooks/post-receive script.
terceiro pushed a commit to annotated tag 0.0.11
in repository vagrant-libvirt.
commit e1d42256444da2770a7a4d591e4c0abf98f67ed1
Author: dima <pronix.service at gmail.com>
Date: Fri May 10 21:24:14 2013 +0200
add nfs support
---
lib/vagrant-libvirt/action.rb | 9 +++
lib/vagrant-libvirt/action/connect_libvirt.rb | 8 +--
lib/vagrant-libvirt/action/prepare_nfs_settings.rb | 54 +++++++++++++++
lib/vagrant-libvirt/action/prune_nfs_exports.rb | 21 ++++++
lib/vagrant-libvirt/action/share_folders.rb | 76 ++++++++++++++++++++++
lib/vagrant-libvirt/config.rb | 16 +++++
6 files changed, 180 insertions(+), 4 deletions(-)
diff --git a/lib/vagrant-libvirt/action.rb b/lib/vagrant-libvirt/action.rb
index 259a28f..6bd7327 100644
--- a/lib/vagrant-libvirt/action.rb
+++ b/lib/vagrant-libvirt/action.rb
@@ -24,6 +24,11 @@ module VagrantPlugins
b2.use TimedProvision
b2.use CreateNetworks
b2.use CreateNetworkInterfaces
+
+ b2.use PruneNFSExports
+ b2.use NFS
+ b2.use PrepareNFSSettings
+ b2.use ShareFolders
b2.use StartDomain
b2.use WaitTillUp
b2.use SyncFolders
@@ -100,6 +105,7 @@ module VagrantPlugins
next
end
+ b2.use PruneNFSExports
b2.use ConnectLibvirt
b2.use DestroyDomain
b2.use DestroyNetworks
@@ -279,6 +285,9 @@ module VagrantPlugins
autoload :WaitTillUp, action_root.join("wait_till_up")
autoload :SyncFolders, action_root.join("sync_folders")
autoload :SSHRun, "vagrant/action/builtin/ssh_run"
+ autoload :PrepareNFSSettings, action_root.join("prepare_nfs_settings")
+ autoload :PruneNFSExports, action_root.join("prune_nfs_exports")
+ autoload :ShareFolders, action_root.join("share_folders")
end
end
end
diff --git a/lib/vagrant-libvirt/action/connect_libvirt.rb b/lib/vagrant-libvirt/action/connect_libvirt.rb
index 83ad752..d48236b 100644
--- a/lib/vagrant-libvirt/action/connect_libvirt.rb
+++ b/lib/vagrant-libvirt/action/connect_libvirt.rb
@@ -18,7 +18,7 @@ module VagrantPlugins
env[:libvirt_compute] = Libvirt.libvirt_connection
return @app.call(env)
end
-
+
# Get config options for libvirt provider.
config = env[:machine].provider_config
@@ -38,7 +38,7 @@ module VagrantPlugins
else
uri << '://'
uri << config.host if config.host
- end
+ end
uri << '/system?no_verify=1'
conn_attr = {}
@@ -46,7 +46,7 @@ module VagrantPlugins
conn_attr[:libvirt_uri] = uri
conn_attr[:libvirt_username] = config.username if config.username
conn_attr[:libvirt_password] = config.password if config.password
-
+
# Setup command for retrieving IP address for newly created machine
# with some MAC address. Get it from dnsmasq leases table - either
# /var/lib/libvirt/dnsmasq/*.leases files, or
@@ -54,7 +54,7 @@ module VagrantPlugins
ip_command = "LEASES='/var/lib/libvirt/dnsmasq/*.leases'; "
ip_command << "[ -f /var/lib/misc/dnsmasq.leases ] && "
ip_command << "LEASES='/var/lib/misc/dnsmasq.leases'; "
- ip_command << "cat $LEASES | grep $mac | awk '{ print $3 }'"
+ ip_command << "grep $mac $LEASES | awk '{ print $3 }'"
conn_attr[:libvirt_ip_command] = ip_command
@logger.info("Connecting to Libvirt (#{uri}) ...")
diff --git a/lib/vagrant-libvirt/action/prepare_nfs_settings.rb b/lib/vagrant-libvirt/action/prepare_nfs_settings.rb
new file mode 100644
index 0000000..b00d790
--- /dev/null
+++ b/lib/vagrant-libvirt/action/prepare_nfs_settings.rb
@@ -0,0 +1,54 @@
+module VagrantPlugins
+ module Libvirt
+ module Action
+ class PrepareNFSSettings
+ def initialize(app,env)
+ @app = app
+ @logger = Log4r::Logger.new("vagrant::action::vm::nfs")
+ end
+
+ def call(env)
+ @app.call(env)
+
+ using_nfs = false
+ env[:machine].config.vm.synced_folders.each do |id, opts|
+ if opts[:nfs]
+ using_nfs = true
+ break
+ end
+ end
+
+ if using_nfs
+ @logger.info("Using NFS, preparing NFS settings by reading host IP and machine IP")
+ env[:nfs_host_ip] = read_host_ip(env[:machine])
+ env[:nfs_machine_ip] = env[:machine].ssh_info[:host]
+
+ raise Vagrant::Errors::NFSNoHostonlyNetwork if !env[:nfs_machine_ip]
+ end
+ end
+
+ # Returns the IP address of the first host only network adapter
+ #
+ # @param [Machine] machine
+ # @return [String]
+ def read_host_ip(machine)
+ `ip addr show | grep -A 2 virbr0 | grep -i 'inet ' | tr -s ' ' | cut -d' ' -f3 | cut -d'/' -f 1`.chomp
+ end
+
+ # Returns the IP address of the guest by looking at the first
+ # enabled host only network.
+ #
+ # @return [String]
+ def read_machine_ip(machine)
+ machine.config.vm.networks.each do |type, options|
+ if type == :private_network && options[:ip].is_a?(String)
+ return options[:ip]
+ end
+ end
+
+ nil
+ end
+ end
+ end
+ end
+end
diff --git a/lib/vagrant-libvirt/action/prune_nfs_exports.rb b/lib/vagrant-libvirt/action/prune_nfs_exports.rb
new file mode 100644
index 0000000..dcc2d49
--- /dev/null
+++ b/lib/vagrant-libvirt/action/prune_nfs_exports.rb
@@ -0,0 +1,21 @@
+require 'yaml'
+module VagrantPlugins
+ module Libvirt
+ module Action
+ class PruneNFSExports
+ def initialize(app, env)
+ @app = app
+ end
+
+ def call(env)
+ if env[:host]
+ uuid = env[:machine].id
+ env[:host].nfs_prune(uuid)
+ end
+
+ @app.call(env)
+ end
+ end
+ end
+ end
+end
diff --git a/lib/vagrant-libvirt/action/share_folders.rb b/lib/vagrant-libvirt/action/share_folders.rb
new file mode 100644
index 0000000..c6b496d
--- /dev/null
+++ b/lib/vagrant-libvirt/action/share_folders.rb
@@ -0,0 +1,76 @@
+require "pathname"
+
+require "log4r"
+
+module VagrantPlugins
+ module Libvirt
+ module Action
+ class ShareFolders
+ def initialize(app, env)
+ @logger = Log4r::Logger.new("vagrant::action::vm::share_folders")
+ @app = app
+ end
+
+ def call(env)
+ @env = env
+
+ prepare_folders
+ create_metadata
+
+ @app.call(env)
+ end
+
+ # This method returns an actual list of shared
+ # folders to create and their proper path.
+ def shared_folders
+ {}.tap do |result|
+ @env[:machine].config.vm.synced_folders.each do |id, data|
+ # Ignore NFS shared folders
+ #next if data[:nfs]
+
+ # convert to NFS share
+ data[:nfs] = true
+
+ # This to prevent overwriting the actual shared folders data
+ result[id] = data.dup
+ end
+ end
+ end
+
+ # Prepares the shared folders by verifying they exist and creating them
+ # if they don't.
+ def prepare_folders
+ shared_folders.each do |id, options|
+ hostpath = Pathname.new(options[:hostpath]).expand_path(@env[:root_path])
+
+ if !hostpath.directory? && options[:create]
+ # Host path doesn't exist, so let's create it.
+ @logger.debug("Host path doesn't exist, creating: #{hostpath}")
+
+ begin
+ hostpath.mkpath
+ rescue Errno::EACCES
+ raise Vagrant::Errors::SharedFolderCreateFailed,
+ :path => hostpath.to_s
+ end
+ end
+ end
+ end
+
+ def create_metadata
+ @env[:ui].info I18n.t("vagrant.actions.vm.share_folders.creating")
+
+ folders = []
+ shared_folders.each do |id, data|
+ folders << {
+ :name => id,
+ :hostpath => File.expand_path(data[:hostpath], @env[:root_path]),
+ :transient => data[:transient]
+ }
+ end
+ end
+
+ end
+ end
+ end
+end
diff --git a/lib/vagrant-libvirt/config.rb b/lib/vagrant-libvirt/config.rb
index a8a151f..7422459 100644
--- a/lib/vagrant-libvirt/config.rb
+++ b/lib/vagrant-libvirt/config.rb
@@ -27,7 +27,10 @@ module VagrantPlugins
attr_accessor :cpus
attr_accessor :nested
+ attr_reader :shared_folders
+
def initialize
+ @shared_folders = {}
@driver = UNSET_VALUE
@host = UNSET_VALUE
@connect_via_ssh = UNSET_VALUE
@@ -55,6 +58,19 @@ module VagrantPlugins
@nested = false if @nested == UNSET_VALUE
end
+ def share_folder(name, guestpath, hostpath, opts=nil)
+ @shared_folders[name] = {
+ :guestpath => guestpath.to_s,
+ :hostpath => hostpath.to_s,
+ :create => false,
+ :owner => nil,
+ :group => nil,
+ :nfs => false,
+ :transient => false,
+ :extra => nil
+ }.merge(opts || {})
+ end
+
def validate(machine)
end
end
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ruby-extras/vagrant-libvirt.git
More information about the Pkg-ruby-extras-commits
mailing list