providers/docker: set preparing set to avoid data dir clear [GH-3873]
This commit is contained in:
parent
62fa97f334
commit
1e6259dd00
|
@ -12,6 +12,7 @@ BUG FIXES:
|
||||||
- core: Fix cases where sometimes SSH connection would hang.
|
- core: Fix cases where sometimes SSH connection would hang.
|
||||||
- commands/box: `--cert` flag works properly. [GH-4691]
|
- commands/box: `--cert` flag works properly. [GH-4691]
|
||||||
- command/docker-logs: Won't crash if container is removed. [GH-3990]
|
- command/docker-logs: Won't crash if container is removed. [GH-3990]
|
||||||
|
- command/docker-run: Synced folders will be attached properly. [GH-3873]
|
||||||
- command/rsync: Sync to Docker containers properly. [GH-4066]
|
- command/rsync: Sync to Docker containers properly. [GH-4066]
|
||||||
- providers/docker: Create args works. [GH-4526]
|
- providers/docker: Create args works. [GH-4526]
|
||||||
- providers/docker: Nicer error if package is called. [GH-4595]
|
- providers/docker: Nicer error if package is called. [GH-4595]
|
||||||
|
|
|
@ -215,7 +215,7 @@ module VagrantPlugins
|
||||||
def self.action_start
|
def self.action_start
|
||||||
Vagrant::Action::Builder.new.tap do |b|
|
Vagrant::Action::Builder.new.tap do |b|
|
||||||
b.use Call, IsState, :running do |env, b2|
|
b.use Call, IsState, :running do |env, b2|
|
||||||
# If the container is running and we're doing a run, we're done
|
# If the container is running and we're not doing a run, we're done
|
||||||
next if env[:result] && env[:machine_action] != :run_command
|
next if env[:result] && env[:machine_action] != :run_command
|
||||||
|
|
||||||
if env[:machine_action] != :run_command
|
if env[:machine_action] != :run_command
|
||||||
|
@ -231,7 +231,10 @@ module VagrantPlugins
|
||||||
end
|
end
|
||||||
|
|
||||||
b2.use Call, IsState, :not_created do |env2, b3|
|
b2.use Call, IsState, :not_created do |env2, b3|
|
||||||
if !env2[:result]
|
if env2[:result]
|
||||||
|
# First time making this thing, set to the "preparing" state
|
||||||
|
b3.use InitState
|
||||||
|
else
|
||||||
b3.use EnvSet, host_machine_sync_folders: false
|
b3.use EnvSet, host_machine_sync_folders: false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -247,7 +250,7 @@ module VagrantPlugins
|
||||||
if env[:machine_action] != :run_command
|
if env[:machine_action] != :run_command
|
||||||
# If the container is NOT created yet, then do some setup steps
|
# If the container is NOT created yet, then do some setup steps
|
||||||
# necessary for creating it.
|
# necessary for creating it.
|
||||||
b2.use Call, IsState, :not_created do |env2, b3|
|
b2.use Call, IsState, :preparing 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 HostMachinePortWarning
|
b3.use HostMachinePortWarning
|
||||||
|
@ -271,6 +274,7 @@ module VagrantPlugins
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
|
# We're in a run command, so we do things a bit differently.
|
||||||
b2.use SyncedFolders
|
b2.use SyncedFolders
|
||||||
b2.use Create
|
b2.use Create
|
||||||
end
|
end
|
||||||
|
@ -294,6 +298,7 @@ module VagrantPlugins
|
||||||
autoload :HostMachineRequired, action_root.join("host_machine_required")
|
autoload :HostMachineRequired, action_root.join("host_machine_required")
|
||||||
autoload :HostMachineSyncFolders, action_root.join("host_machine_sync_folders")
|
autoload :HostMachineSyncFolders, action_root.join("host_machine_sync_folders")
|
||||||
autoload :HostMachineSyncFoldersDisable, action_root.join("host_machine_sync_folders_disable")
|
autoload :HostMachineSyncFoldersDisable, action_root.join("host_machine_sync_folders_disable")
|
||||||
|
autoload :InitState, action_root.join("init_state")
|
||||||
autoload :IsBuild, action_root.join("is_build")
|
autoload :IsBuild, action_root.join("is_build")
|
||||||
autoload :IsHostMachineCreated, action_root.join("is_host_machine_created")
|
autoload :IsHostMachineCreated, action_root.join("is_host_machine_created")
|
||||||
autoload :Login, action_root.join("login")
|
autoload :Login, action_root.join("login")
|
||||||
|
|
|
@ -46,7 +46,6 @@ module VagrantPlugins
|
||||||
def setup_synced_folders(host_machine, env)
|
def setup_synced_folders(host_machine, env)
|
||||||
# Write the host machine SFID if we have one
|
# Write the host machine SFID if we have one
|
||||||
id_path = env[:machine].data_dir.join("host_machine_sfid")
|
id_path = env[:machine].data_dir.join("host_machine_sfid")
|
||||||
host_sfid = nil
|
|
||||||
if !id_path.file?
|
if !id_path.file?
|
||||||
host_sfid = SecureRandom.uuid
|
host_sfid = SecureRandom.uuid
|
||||||
id_path.open("w") do |f|
|
id_path.open("w") do |f|
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
module VagrantPlugins
|
||||||
|
module DockerProvider
|
||||||
|
module Action
|
||||||
|
class InitState
|
||||||
|
def initialize(app, env)
|
||||||
|
@app = app
|
||||||
|
end
|
||||||
|
|
||||||
|
def call(env)
|
||||||
|
# We set the ID of the machine to "preparing" so that we can use
|
||||||
|
# the data dir without it being deleted with the not_created state.
|
||||||
|
env[:machine].id = nil
|
||||||
|
env[:machine].id = "preparing"
|
||||||
|
|
||||||
|
@app.call(env)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -156,6 +156,11 @@ module VagrantPlugins
|
||||||
state_id = driver.state(@machine.id) if @machine.id && !state_id
|
state_id = driver.state(@machine.id) if @machine.id && !state_id
|
||||||
state_id = :unknown if !state_id
|
state_id = :unknown if !state_id
|
||||||
|
|
||||||
|
# This is a special pseudo-state so that we don't set the
|
||||||
|
# NOT_CREATED_ID while we're setting up the machine. This avoids
|
||||||
|
# clearing the data dir.
|
||||||
|
state_id = :preparing if @machine.id == "preparing"
|
||||||
|
|
||||||
short = state_id.to_s.gsub("_", " ")
|
short = state_id.to_s.gsub("_", " ")
|
||||||
long = I18n.t("docker_provider.status.#{state_id}")
|
long = I18n.t("docker_provider.status.#{state_id}")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue