NFS middleware interface complete. Implemention on host not yet done.
This commit is contained in:
parent
7430cf54ff
commit
30e8b3b8ce
|
@ -14,7 +14,7 @@ module Vagrant
|
||||||
# folder.
|
# folder.
|
||||||
#
|
#
|
||||||
class NFS
|
class NFS
|
||||||
attr_reader :folders
|
include ExceptionCatcher
|
||||||
|
|
||||||
def initialize(app,env)
|
def initialize(app,env)
|
||||||
@app = app
|
@app = app
|
||||||
|
@ -27,9 +27,17 @@ module Vagrant
|
||||||
@env = env
|
@env = env
|
||||||
|
|
||||||
extract_folders
|
extract_folders
|
||||||
export_folders
|
export_folders if !folders.empty?
|
||||||
|
return if env.error?
|
||||||
|
|
||||||
@app.call(env)
|
@app.call(env)
|
||||||
|
|
||||||
|
mount_folders if !folders.empty? && !env.error?
|
||||||
|
end
|
||||||
|
|
||||||
|
# Returns the folders which are to be synced via NFS.
|
||||||
|
def folders
|
||||||
|
@folders ||= {}
|
||||||
end
|
end
|
||||||
|
|
||||||
# Removes the NFS enabled shared folders from the configuration,
|
# Removes the NFS enabled shared folders from the configuration,
|
||||||
|
@ -54,6 +62,13 @@ module Vagrant
|
||||||
# involves adding a line to `/etc/exports` for this VM, but it is
|
# involves adding a line to `/etc/exports` for this VM, but it is
|
||||||
# up to the host class to define the specific behavior.
|
# up to the host class to define the specific behavior.
|
||||||
def export_folders
|
def export_folders
|
||||||
|
catch_action_exception(@env) do
|
||||||
|
@env["host"].nfs_export(folders)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Uses the system class to mount the NFS folders.
|
||||||
|
def mount_folders
|
||||||
end
|
end
|
||||||
|
|
||||||
# Verifies that the host is set and supports NFS.
|
# Verifies that the host is set and supports NFS.
|
||||||
|
|
|
@ -59,6 +59,13 @@ module Vagrant
|
||||||
def nfs?
|
def nfs?
|
||||||
false
|
false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Exports the given hash of folders via NFS. This method will raise
|
||||||
|
# an {Vagrant::Action::ActionException} if anything goes wrong.
|
||||||
|
#
|
||||||
|
# @param [Hash] folders Shared folders to sync.
|
||||||
|
def nfs_export(folders)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -22,11 +22,53 @@ class NFSVMActionTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
|
|
||||||
context "calling" do
|
context "calling" do
|
||||||
|
setup do
|
||||||
|
@instance.stubs(:folders).returns([:a])
|
||||||
|
|
||||||
|
[:extract_folders, :export_folders, :mount_folders].each do |meth|
|
||||||
|
@instance.stubs(meth)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
should "call the proper sequence and succeed" do
|
should "call the proper sequence and succeed" do
|
||||||
seq = sequence('seq')
|
seq = sequence('seq')
|
||||||
@instance.expects(:extract_folders).in_sequence(seq)
|
@instance.expects(:extract_folders).in_sequence(seq)
|
||||||
@instance.expects(:export_folders).in_sequence(seq)
|
@instance.expects(:export_folders).in_sequence(seq)
|
||||||
@app.expects(:call).with(@env).in_sequence(seq)
|
@app.expects(:call).with(@env).in_sequence(seq)
|
||||||
|
@instance.expects(:mount_folders).in_sequence(seq)
|
||||||
|
@instance.call(@env)
|
||||||
|
end
|
||||||
|
|
||||||
|
should "not export folders if folders is empty" do
|
||||||
|
@instance.stubs(:folders).returns([])
|
||||||
|
|
||||||
|
seq = sequence('seq')
|
||||||
|
@instance.expects(:extract_folders).in_sequence(seq)
|
||||||
|
@instance.expects(:export_folders).never
|
||||||
|
@app.expects(:call).with(@env).in_sequence(seq)
|
||||||
|
@instance.expects(:mount_folders).never
|
||||||
|
@instance.call(@env)
|
||||||
|
end
|
||||||
|
|
||||||
|
should "halt chain if environment error occured" do
|
||||||
|
@env.error!(:foo)
|
||||||
|
|
||||||
|
seq = sequence('seq')
|
||||||
|
@instance.expects(:extract_folders).in_sequence(seq)
|
||||||
|
@instance.expects(:export_folders).in_sequence(seq)
|
||||||
|
@app.expects(:call).never
|
||||||
|
@instance.call(@env)
|
||||||
|
end
|
||||||
|
|
||||||
|
should "not mount folders if an error occured" do
|
||||||
|
@app.expects(:call).with() do
|
||||||
|
# Use this mark the env as error
|
||||||
|
@env.error!(:foo)
|
||||||
|
|
||||||
|
true
|
||||||
|
end
|
||||||
|
|
||||||
|
@instance.expects(:mount_folders).never
|
||||||
@instance.call(@env)
|
@instance.call(@env)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -49,6 +91,24 @@ class NFSVMActionTest < Test::Unit::TestCase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "exporting folders" do
|
||||||
|
setup do
|
||||||
|
@instance.stubs(:folders).returns({})
|
||||||
|
end
|
||||||
|
|
||||||
|
should "call nfs_export on the host" do
|
||||||
|
@env["host"].expects(:nfs_export).with(@instance.folders)
|
||||||
|
@instance.export_folders
|
||||||
|
end
|
||||||
|
|
||||||
|
should "error the environment if exception is raised" do
|
||||||
|
@env["host"].expects(:nfs_export).raises(Vagrant::Action::ActionException.new(:foo))
|
||||||
|
@instance.export_folders
|
||||||
|
assert @env.error?
|
||||||
|
assert_equal :foo, @env.error.first
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context "verifying host" do
|
context "verifying host" do
|
||||||
should "error environment if host is nil" do
|
should "error environment if host is nil" do
|
||||||
@env.env.stubs(:host).returns(nil)
|
@env.env.stubs(:host).returns(nil)
|
||||||
|
|
Loading…
Reference in New Issue