Extract os friendly mount name for vbox shared folders

This commit is contained in:
sophia 2021-02-10 14:30:18 -06:00
parent 81b7d1524b
commit b30a87ce6c
7 changed files with 27 additions and 18 deletions

View File

@ -34,13 +34,12 @@ module VagrantPlugins
mount_options, _, _ = data[:plugin].capability(
:mount_options, name, guest_path, data)
if data[:plugin].capability?(:mount_name)
name = data[:plugin].capability(:mount_name, data)
name = data[:plugin].capability(:mount_name, name, data)
end
else
next
end
mount_options = "#{mount_options},nofail"
{
name: name,
mount_point: guest_path,

View File

@ -22,6 +22,7 @@ module VagrantPlugins
mount_options << "uid=#{mount_uid}"
mount_options << "gid=#{mount_gid}"
mount_options << "_netdev"
mount_options = mount_options.join(',')
return mount_options, mount_uid, mount_gid
end
@ -29,6 +30,10 @@ module VagrantPlugins
def self.mount_type(machine)
return VB_MOUNT_TYPE
end
def self.mount_name(machine, name, data)
name.gsub(/[\s\/\\]/,'_').sub(/^_/, '')
end
end
end
end

View File

@ -78,6 +78,11 @@ module VagrantPlugins
require_relative "cap/mount_options"
Cap::MountOptions
end
synced_folder_capability(:virtualbox, "mount_name") do
require_relative "cap/mount_options"
Cap::MountOptions
end
end
autoload :Action, File.expand_path("../action", __FILE__)

View File

@ -36,7 +36,7 @@ module VagrantPlugins
end
mnt_opts << "_netdev"
mnt_opts = merge_mount_options(mnt_opts, options[:mount_options] || [])
mnt_opts << "nofail"
mount_options = mnt_opts.join(",")
return mount_options, mount_uid, mount_gid
end
@ -45,7 +45,7 @@ module VagrantPlugins
return MOUNT_TYPE
end
def self.mount_name(machine, data)
def self.mount_name(machine, name, data)
data[:smb_host] ||= machine.guest.capability(
:choose_addressable_ip_addr, candidate_ips)
"//#{data[:smb_host]}/#{data[:smb_id]}"

View File

@ -29,7 +29,7 @@ describe "VagrantPlugins::GuestLinux::Cap::PersistMountSharedFolder" do
let (:folders) { {
:folder_type => fstab_folders
} }
let(:expected_mount_options) { "uid=#{options_uid},gid=#{options_gid},nofail" }
let(:expected_mount_options) { "uid=#{options_uid},gid=#{options_gid}" }
before do
allow(machine).to receive(:communicate).and_return(comm)

View File

@ -49,7 +49,7 @@ describe "VagrantPlugins::ProviderVirtualBox::Cap::MountOptions" do
let(:mount_owner){ 2000 }
it "generates the expected mount command using mount_owner directly" do
out_mount_options, out_mount_uid, out_mount_gid = cap.mount_options(machine, mount_name, mount_guest_path, folder_options)
expect(out_mount_options).to eq("uid=#{mount_owner},gid=#{mount_gid}")
expect(out_mount_options).to eq("uid=#{mount_owner},gid=#{mount_gid},_netdev")
expect(out_mount_uid).to eq(mount_owner)
expect(out_mount_gid).to eq(mount_gid)
end
@ -59,7 +59,7 @@ describe "VagrantPlugins::ProviderVirtualBox::Cap::MountOptions" do
let(:mount_owner){ "2000" }
it "generates the expected mount command using mount_owner directly" do
out_mount_options, out_mount_uid, out_mount_gid = cap.mount_options(machine, mount_name, mount_guest_path, folder_options)
expect(out_mount_options).to eq("uid=#{mount_owner},gid=#{mount_gid}")
expect(out_mount_options).to eq("uid=#{mount_owner},gid=#{mount_gid},_netdev")
expect(out_mount_uid).to eq(mount_owner)
expect(out_mount_gid).to eq(mount_gid)
end
@ -78,7 +78,7 @@ describe "VagrantPlugins::ProviderVirtualBox::Cap::MountOptions" do
it "generates the expected mount command using mount_group directly" do
out_mount_options, out_mount_uid, out_mount_gid = cap.mount_options(machine, mount_name, mount_guest_path, folder_options)
expect(out_mount_options).to eq("uid=#{mount_uid},gid=#{mount_group}")
expect(out_mount_options).to eq("uid=#{mount_uid},gid=#{mount_group},_netdev")
expect(out_mount_uid).to eq(mount_uid)
expect(out_mount_gid).to eq(mount_group)
end
@ -89,7 +89,7 @@ describe "VagrantPlugins::ProviderVirtualBox::Cap::MountOptions" do
it "generates the expected mount command using mount_group directly" do
out_mount_options, out_mount_uid, out_mount_gid = cap.mount_options(machine, mount_name, mount_guest_path, folder_options)
expect(out_mount_options).to eq("uid=#{mount_uid},gid=#{mount_group}")
expect(out_mount_options).to eq("uid=#{mount_uid},gid=#{mount_group},_netdev")
expect(out_mount_uid).to eq(mount_uid)
expect(out_mount_gid).to eq(mount_group)
end
@ -103,7 +103,7 @@ describe "VagrantPlugins::ProviderVirtualBox::Cap::MountOptions" do
expect(comm).to receive(:execute).with("getent group #{mount_group}", anything).and_raise(Vagrant::Errors::VirtualBoxMountFailed, {command: '', output: ''})
expect(comm).to receive(:execute).with("id -g #{mount_owner}", anything).and_yield(:stdout, "1").and_return(0)
out_mount_options, out_mount_uid, out_mount_gid = cap.mount_options(machine, mount_name, mount_guest_path, folder_options)
expect(out_mount_options).to eq("uid=#{mount_uid},gid=1")
expect(out_mount_options).to eq("uid=#{mount_uid},gid=1,_netdev")
end
end
@ -122,7 +122,7 @@ describe "VagrantPlugins::ProviderVirtualBox::Cap::MountOptions" do
expect(comm).to receive(:execute).with("id -u #{mount_owner}", anything).and_yield(:stdout, mount_uid)
expect(comm).to receive(:execute).with("getent group #{mount_group}", anything).and_yield(:stdout, "vagrant:x:#{mount_gid}:")
out_mount_options, out_mount_uid, out_mount_gid = cap.mount_options(machine, mount_name, mount_guest_path, folder_options.merge(mount_options: ["ro"]))
expect(out_mount_options).to eq("ro,uid=#{mount_uid},gid=#{mount_gid}")
expect(out_mount_options).to eq("ro,uid=#{mount_uid},gid=#{mount_gid},_netdev")
expect(out_mount_uid).to eq(mount_uid)
expect(out_mount_gid).to eq(mount_gid)
end
@ -142,7 +142,7 @@ describe "VagrantPlugins::ProviderVirtualBox::Cap::MountOptions" do
expect(comm).not_to receive(:execute).with("id -u #{mount_owner}", anything).and_yield(:stdout, mount_uid)
expect(comm).to receive(:execute).with("getent group #{mount_group}", anything).and_yield(:stdout, "vagrant:x:#{mount_gid}:")
out_mount_options, out_mount_uid, out_mount_gid = cap.mount_options(machine, mount_name, mount_guest_path, folder_options.merge(mount_options: ["uid=#{options_uid}"]) )
expect(out_mount_options).to eq("uid=#{options_uid},gid=#{mount_gid}")
expect(out_mount_options).to eq("uid=#{options_uid},gid=#{mount_gid},_netdev")
expect(out_mount_uid).to eq(options_uid)
expect(out_mount_gid).to eq(mount_gid)
end
@ -155,7 +155,7 @@ describe "VagrantPlugins::ProviderVirtualBox::Cap::MountOptions" do
expect(comm).to receive(:execute).with("id -u #{mount_owner}", anything).and_yield(:stdout, mount_uid)
expect(comm).not_to receive(:execute).with("getent group #{mount_group}", anything).and_yield(:stdout, "vagrant:x:#{mount_gid}:")
out_mount_options, out_mount_uid, out_mount_gid = cap.mount_options(machine, mount_name, mount_guest_path, folder_options.merge(mount_options: ["gid=#{options_gid}"]) )
expect(out_mount_options).to eq("uid=#{mount_uid},gid=#{options_gid}")
expect(out_mount_options).to eq("uid=#{mount_uid},gid=#{options_gid},_netdev")
expect(out_mount_uid).to eq(mount_uid)
expect(out_mount_gid).to eq(options_gid)
end
@ -169,7 +169,7 @@ describe "VagrantPlugins::ProviderVirtualBox::Cap::MountOptions" do
expect(comm).not_to receive(:execute).with("id -u #{mount_owner}", anything).and_yield(:stdout, mount_uid)
expect(comm).not_to receive(:execute).with("getent group #{mount_group}", anything).and_yield(:stdout, "vagrant:x:#{options_gid}:")
out_mount_options, out_mount_uid, out_mount_gid = cap.mount_options(machine, mount_name, mount_guest_path, folder_options.merge(mount_options: ["uid=#{options_uid}", "gid=#{options_gid}"]) )
expect(out_mount_options).to eq("uid=#{options_uid},gid=#{options_gid}")
expect(out_mount_options).to eq("uid=#{options_uid},gid=#{options_gid},_netdev")
expect(out_mount_uid).to eq(options_uid)
expect(out_mount_gid).to eq(options_gid)
end

View File

@ -44,7 +44,7 @@ describe VagrantPlugins::SyncedFolderSMB::Cap::MountOptions do
it "generates the expected default mount command" do
out_opts, out_uid, out_gid = cap.mount_options(machine, mount_name, mount_guest_path, folder_options)
expect(out_opts).to eq("sec=ntlmssp,credentials=/etc/smb_creds_vagrant,uid=1000,gid=1000,_netdev")
expect(out_opts).to eq("sec=ntlmssp,credentials=/etc/smb_creds_vagrant,uid=1000,gid=1000,_netdev,nofail")
expect(out_uid).to eq(mount_uid)
expect(out_gid).to eq(mount_gid)
end
@ -52,7 +52,7 @@ describe VagrantPlugins::SyncedFolderSMB::Cap::MountOptions do
it "includes provided mount options" do
folder_options[:mount_options] =["ro"]
out_opts, out_uid, out_gid = cap.mount_options(machine, mount_name, mount_guest_path, folder_options)
expect(out_opts).to eq("sec=ntlmssp,credentials=/etc/smb_creds_vagrant,uid=1000,gid=1000,_netdev,ro")
expect(out_opts).to eq("sec=ntlmssp,credentials=/etc/smb_creds_vagrant,uid=1000,gid=1000,_netdev,ro,nofail")
expect(out_uid).to eq(mount_uid)
expect(out_gid).to eq(mount_gid)
end
@ -60,7 +60,7 @@ describe VagrantPlugins::SyncedFolderSMB::Cap::MountOptions do
it "overwrites default mount options" do
folder_options[:mount_options] =["ro", "sec=custom"]
out_opts, out_uid, out_gid = cap.mount_options(machine, mount_name, mount_guest_path, folder_options)
expect(out_opts).to eq("sec=custom,credentials=/etc/smb_creds_vagrant,uid=1000,gid=1000,_netdev,ro")
expect(out_opts).to eq("sec=custom,credentials=/etc/smb_creds_vagrant,uid=1000,gid=1000,_netdev,ro,nofail")
expect(out_uid).to eq(mount_uid)
expect(out_gid).to eq(mount_gid)
end
@ -68,7 +68,7 @@ describe VagrantPlugins::SyncedFolderSMB::Cap::MountOptions do
it "does not add mfsymlinks option if env var VAGRANT_DISABLE_SMBMFSYMLINKS exists" do
expect(ENV).to receive(:[]).with("VAGRANT_DISABLE_SMBMFSYMLINKS").and_return(false)
out_opts, out_uid, out_gid = cap.mount_options(machine, mount_name, mount_guest_path, folder_options)
expect(out_opts).to eq("sec=ntlmssp,credentials=/etc/smb_creds_vagrant,uid=1000,gid=1000,mfsymlinks,_netdev")
expect(out_opts).to eq("sec=ntlmssp,credentials=/etc/smb_creds_vagrant,uid=1000,gid=1000,mfsymlinks,_netdev,nofail")
expect(out_uid).to eq(mount_uid)
expect(out_gid).to eq(mount_gid)
end