Add option to allow/disable fstab modification
Defaults to allow modification of fstab
This commit is contained in:
parent
1dc761a6c4
commit
fe7968315b
@ -8,6 +8,13 @@ module VagrantPlugins
|
|||||||
class PersistMountSharedFolder
|
class PersistMountSharedFolder
|
||||||
extend SyncedFolder::UnixMountHelpers
|
extend SyncedFolder::UnixMountHelpers
|
||||||
|
|
||||||
|
# Inserts fstab entry for a set of synced folders. Will fully replace
|
||||||
|
# the currently managed group of Vagrant managed entries. Note, passing
|
||||||
|
# empty list of folders will just remove entries
|
||||||
|
#
|
||||||
|
# @param [Machine] machine The machine to run the action on
|
||||||
|
# @param [Map<String, Map>] A map of folders to add to fstab
|
||||||
|
# @param [String] mount type, ex. vboxfs, cifs, etc
|
||||||
def self.persist_mount_shared_folder(machine, fstab_folders, mount_type)
|
def self.persist_mount_shared_folder(machine, fstab_folders, mount_type)
|
||||||
if fstab_folders.empty?
|
if fstab_folders.empty?
|
||||||
self.remove_vagrant_managed_fstab(machine)
|
self.remove_vagrant_managed_fstab(machine)
|
||||||
|
|||||||
@ -22,6 +22,7 @@ module VagrantPlugins
|
|||||||
DEFAULT_VM_NAME = :default
|
DEFAULT_VM_NAME = :default
|
||||||
|
|
||||||
attr_accessor :allowed_synced_folder_types
|
attr_accessor :allowed_synced_folder_types
|
||||||
|
attr_accessor :allow_fstab_modification
|
||||||
attr_accessor :base_mac
|
attr_accessor :base_mac
|
||||||
attr_accessor :base_address
|
attr_accessor :base_address
|
||||||
attr_accessor :boot_timeout
|
attr_accessor :boot_timeout
|
||||||
@ -56,6 +57,7 @@ module VagrantPlugins
|
|||||||
@logger = Log4r::Logger.new("vagrant::config::vm")
|
@logger = Log4r::Logger.new("vagrant::config::vm")
|
||||||
|
|
||||||
@allowed_synced_folder_types = UNSET_VALUE
|
@allowed_synced_folder_types = UNSET_VALUE
|
||||||
|
@allow_fstab_modification = UNSET_VALUE
|
||||||
@base_mac = UNSET_VALUE
|
@base_mac = UNSET_VALUE
|
||||||
@base_address = UNSET_VALUE
|
@base_address = UNSET_VALUE
|
||||||
@boot_timeout = UNSET_VALUE
|
@boot_timeout = UNSET_VALUE
|
||||||
@ -452,6 +454,7 @@ module VagrantPlugins
|
|||||||
|
|
||||||
def finalize!
|
def finalize!
|
||||||
# Defaults
|
# Defaults
|
||||||
|
@allow_fstab_modification = true if @allow_fstab_modification == UNSET_VALUE
|
||||||
@allowed_synced_folder_types = nil if @allowed_synced_folder_types == UNSET_VALUE
|
@allowed_synced_folder_types = nil if @allowed_synced_folder_types == UNSET_VALUE
|
||||||
@base_mac = nil if @base_mac == UNSET_VALUE
|
@base_mac = nil if @base_mac == UNSET_VALUE
|
||||||
@base_address = nil if @base_address == UNSET_VALUE
|
@base_address = nil if @base_address == UNSET_VALUE
|
||||||
@ -928,6 +931,12 @@ module VagrantPlugins
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if ![TrueClass, FalseClass].include?(@allow_fstab_modification.class)
|
||||||
|
errors["vm"] << I18n.t("vagrant.config.vm.config_type",
|
||||||
|
option: "allow_fstab_modification", given: @allow_fstab_modification.class, required: "Boolean"
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
errors
|
errors
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@ -61,6 +61,10 @@ module VagrantPlugins
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
if machine.guest.capability?(:persist_mount_shared_folder)
|
if machine.guest.capability?(:persist_mount_shared_folder)
|
||||||
|
# If Vagrant has been configured to not allow fstab modification, then
|
||||||
|
# execute the guest capability with an empty list in order to ensure
|
||||||
|
# there is no Vagrant managed fstab entries.
|
||||||
|
fstab_folders = [] if !machine.config.vm.allow_fstab_modification
|
||||||
machine.guest.capability(:persist_mount_shared_folder, fstab_folders, "vboxsf")
|
machine.guest.capability(:persist_mount_shared_folder, fstab_folders, "vboxsf")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -1947,6 +1947,7 @@ en:
|
|||||||
box_download_options_not_converted: |-
|
box_download_options_not_converted: |-
|
||||||
Something went wrong converting VM config `box_download_options`. Value for provided key '%{missing_key}' is invalid type. Should be String or Bool
|
Something went wrong converting VM config `box_download_options`. Value for provided key '%{missing_key}' is invalid type. Should be String or Bool
|
||||||
clone_and_box: "Only one of clone or box can be specified."
|
clone_and_box: "Only one of clone or box can be specified."
|
||||||
|
config_type: "Found '%{option}' specified as type '%{given}', should be '%{required}'"
|
||||||
hostname_invalid_characters: |-
|
hostname_invalid_characters: |-
|
||||||
The hostname set for the VM '%{name}' should only contain letters, numbers,
|
The hostname set for the VM '%{name}' should only contain letters, numbers,
|
||||||
hyphens or dots. It cannot start with a hyphen or dot.
|
hyphens or dots. It cannot start with a hyphen or dot.
|
||||||
|
|||||||
@ -6,10 +6,24 @@ require Vagrant.source_root.join("plugins/providers/virtualbox/synced_folder")
|
|||||||
|
|
||||||
describe VagrantPlugins::ProviderVirtualBox::SyncedFolder do
|
describe VagrantPlugins::ProviderVirtualBox::SyncedFolder do
|
||||||
include_context "unit"
|
include_context "unit"
|
||||||
|
|
||||||
|
let(:vm_config) do
|
||||||
|
double("vm_config").tap do |vm_config|
|
||||||
|
allow(vm_config).to receive(:allow_fstab_modification).and_return(true)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
let(:machine_config) do
|
||||||
|
double("machine_config").tap do |top_config|
|
||||||
|
allow(top_config).to receive(:vm).and_return(vm_config)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
let(:machine) do
|
let(:machine) do
|
||||||
double("machine").tap do |m|
|
double("machine").tap do |m|
|
||||||
allow(m).to receive(:provider_config).and_return(VagrantPlugins::ProviderVirtualBox::Config.new)
|
allow(m).to receive(:provider_config).and_return(VagrantPlugins::ProviderVirtualBox::Config.new)
|
||||||
allow(m).to receive(:provider_name).and_return(:virtualbox)
|
allow(m).to receive(:provider_name).and_return(:virtualbox)
|
||||||
|
allow(m).to receive(:config).and_return(machine_config)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -73,6 +87,21 @@ describe VagrantPlugins::ProviderVirtualBox::SyncedFolder do
|
|||||||
test_folders = folders.merge(no_guestpath_folder)
|
test_folders = folders.merge(no_guestpath_folder)
|
||||||
subject.enable(machine, test_folders, nil)
|
subject.enable(machine, test_folders, nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "fstab modification disabled" do
|
||||||
|
before do
|
||||||
|
allow(vm_config).to receive(:allow_fstab_modification).and_return(false)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should not persist folders" do
|
||||||
|
expect(guest).to receive(:capability).with(:mount_virtualbox_shared_folder, "folder", any_args)
|
||||||
|
expect(guest).not_to receive(:capability).with(:mount_virtualbox_shared_folder, "no_guestpath_folder", any_args)
|
||||||
|
expect(guest).to receive(:capability?).with(:persist_mount_shared_folder).and_return(true)
|
||||||
|
expect(guest).to receive(:capability).with(:persist_mount_shared_folder, [], "vboxsf")
|
||||||
|
test_folders = folders.merge(no_guestpath_folder)
|
||||||
|
subject.enable(machine, test_folders, nil)
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#prepare" do
|
describe "#prepare" do
|
||||||
|
|||||||
@ -16,6 +16,11 @@ machine that Vagrant manages.
|
|||||||
|
|
||||||
## Available Settings
|
## Available Settings
|
||||||
|
|
||||||
|
- `config.vm.allow_fstab_modification` (boolean) - If true, will add fstab
|
||||||
|
entries for synced folders. If false, no modifications to fstab will be made
|
||||||
|
by Vagrant. Note, this may mean that folders will not be automatically mounted
|
||||||
|
on machine reboot. Defaults to true.
|
||||||
|
|
||||||
- `config.vm.base_mac` (string) - The MAC address to be assigned to the default
|
- `config.vm.base_mac` (string) - The MAC address to be assigned to the default
|
||||||
NAT interface on the guest. _Support for this option is provider dependent._
|
NAT interface on the guest. _Support for this option is provider dependent._
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user