vagrant/plugins/commands/snapshot/command/push_shared.rb

56 lines
1.5 KiB
Ruby
Raw Normal View History

2015-10-08 02:52:27 +00:00
require 'json'
module VagrantPlugins
module CommandSnapshot
module Command
module PushShared
def shared_exec(argv, m, opts={})
2015-10-08 02:52:27 +00:00
with_target_vms(argv) do |vm|
if !vm.id
vm.ui.info("Not created. Cannot push snapshot state.")
next
end
vm.env.lock("machine-snapshot-stack") do
2016-03-04 17:35:54 +00:00
m.call(vm, opts)
2015-10-08 02:52:27 +00:00
end
end
# Success, exit with 0
2015-10-08 02:52:27 +00:00
0
end
2016-03-04 17:35:54 +00:00
def push(machine, opts={})
2015-10-08 02:52:27 +00:00
snapshot_name = "push_#{Time.now.to_i}_#{rand(10000)}"
# Save the snapshot. This will raise an exception if it fails.
machine.action(:snapshot_save, snapshot_name: snapshot_name)
end
2016-03-04 17:35:54 +00:00
def pop(machine, opts={})
# By reverse sorting, we should be able to find the first
# pushed snapshot.
name = nil
snapshots = machine.provider.capability(:snapshot_list)
snapshots.sort.reverse.each do |snapshot|
if snapshot =~ /^push_\d+_\d+$/
name = snapshot
break
end
2015-10-08 02:52:27 +00:00
end
# If no snapshot was found, we never pushed
if !name
machine.ui.info(I18n.t("vagrant.commands.snapshot.no_push_snapshot"))
return
2015-10-08 02:52:27 +00:00
end
# Restore the snapshot and tell the provider to delete it, if required
opts[:snapshot_name] = name
machine.action(:snapshot_restore, opts)
2015-10-08 02:52:27 +00:00
end
end
end
end
end