providers/docker: warning if synced folders change

This commit is contained in:
Mitchell Hashimoto 2014-04-17 17:45:43 -07:00
parent d1b3165545
commit 0a3346c918
3 changed files with 66 additions and 2 deletions

View File

@ -213,7 +213,6 @@ module VagrantPlugins
b2.use HostMachineSyncFolders b2.use HostMachineSyncFolders
b2.use PrepareNFSValidIds b2.use PrepareNFSValidIds
b2.use SyncedFolderCleanup b2.use SyncedFolderCleanup
b2.use SyncedFolders
b2.use PrepareNFSSettings b2.use PrepareNFSSettings
# If the VM is NOT created yet, then do some setup steps # If the VM is NOT created yet, then do some setup steps
@ -221,12 +220,14 @@ module VagrantPlugins
b2.use Call, IsState, :not_created do |env2, b3| b2.use Call, IsState, :not_created do |env2, b3|
if env2[:result] if env2[:result]
b3.use EnvSet, port_collision_repair: true b3.use EnvSet, port_collision_repair: true
b3.use HostMachineSyncFolders
b3.use HostMachinePortWarning b3.use HostMachinePortWarning
b3.use HostMachinePortChecker b3.use HostMachinePortChecker
b3.use HandleForwardedPortCollisions b3.use HandleForwardedPortCollisions
b3.use SyncedFolders
b3.use Create b3.use Create
b3.use WaitForRunning b3.use WaitForRunning
else
b3.use CompareSyncedFolders
end end
end end
@ -244,6 +245,7 @@ module VagrantPlugins
# The autoload farm # The autoload farm
action_root = Pathname.new(File.expand_path("../action", __FILE__)) action_root = Pathname.new(File.expand_path("../action", __FILE__))
autoload :CompareSyncedFolders, action_root.join("compare_synced_folders")
autoload :Create, action_root.join("create") autoload :Create, action_root.join("create")
autoload :Destroy, action_root.join("destroy") autoload :Destroy, action_root.join("destroy")
autoload :HasSSH, action_root.join("has_ssh") autoload :HasSSH, action_root.join("has_ssh")

View File

@ -0,0 +1,58 @@
require "vagrant/action/builtin/mixin_synced_folders"
module VagrantPlugins
module DockerProvider
module Action
class CompareSyncedFolders
include Vagrant::Action::Builtin::MixinSyncedFolders
def initialize(app, env)
@app = app
end
def call(env)
machine = env[:machine]
# Get the synced folders that are cached, and those that aren't
cached = synced_folders(machine, cached: true)
fresh = synced_folders(machine)
# Build up a mapping of existing setup synced folders
existing = {}
cached.each do |_, fs|
fs.each do |_, data|
existing[data[:guestpath]] = data[:hostpath]
end
end
# Remove the matching folders, and build up non-matching or
# new syncedf olders.
invalids = {}
fresh.each do |_, fs|
fs.each do |_, data|
invalid = false
old = existing.delete(data[:guestpath])
invalid = true if !old
if !invalid && old
invalid = true if old != data[:hostpath]
end
if invalid
invalids[data[:guestpath]] = data[:hostpath]
end
end
end
# If we have invalid entries, these are changed or new entries.
# If we have existing entries, then we removed some entries.
if !invalids.empty? || !existing.empty?
machine.ui.warn(I18n.t("docker_provider.synced_folders_changed"))
end
@app.call(env)
end
end
end
end
end

View File

@ -32,6 +32,10 @@ en:
ssh_through_host_vm: |- ssh_through_host_vm: |-
SSH will be proxied through the Docker virtual machine since we're SSH will be proxied through the Docker virtual machine since we're
not running Docker natively. This is just a notice, and not an error. not running Docker natively. This is just a notice, and not an error.
synced_folders_changed: |-
Vagrant has noticed that the synced folder definitions have changed.
With Docker, these synced folder changes won't take effect until you
destroy the container and recreate it.
waiting_for_running: |- waiting_for_running: |-
Waiting for container to enter "running" state... Waiting for container to enter "running" state...