vagrant-snap 0.01 → 0.02
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +59 -11
- data/VERSION +1 -1
- data/lib/vagrant_snap.rb +54 -23
- data/vagrant-snap.gemspec +1 -1
- metadata +3 -3
data/README.md
CHANGED
@@ -1,25 +1,73 @@
|
|
1
1
|
What's this?
|
2
2
|
==================================
|
3
3
|
vagrant snapshot management plugin
|
4
|
+
can handle multi-vm envirnment.
|
4
5
|
|
5
|
-
##
|
6
|
+
## Install
|
6
7
|
|
7
8
|
gem install vagrant-snap
|
8
9
|
|
9
|
-
##
|
10
|
+
## Following commands are added
|
10
11
|
|
11
12
|
Tasks:
|
12
|
-
vagrant snap back
|
13
|
-
vagrant snap delete SNAP_NAME
|
14
|
-
vagrant snap go SNAP_NAME
|
15
|
-
vagrant snap help [COMMAND]
|
16
|
-
vagrant snap list
|
17
|
-
vagrant snap take [
|
13
|
+
vagrant snap back # back to current snapshot
|
14
|
+
vagrant snap delete SNAP_NAME # delete snapshot
|
15
|
+
vagrant snap go SNAP_NAME # go to specified snapshot
|
16
|
+
vagrant snap help [COMMAND] # Describe subcommands or one specific subcommand
|
17
|
+
vagrant snap list # list snapshot
|
18
|
+
vagrant snap take [NAME] [-d DESC] # take snapshot
|
18
19
|
|
19
|
-
##
|
20
|
+
## Example
|
20
21
|
|
21
|
-
|
22
|
+
In actual example, current snapshot is highlighted with yellow ANSI color.
|
23
|
+
|
24
|
+
t510 dev/vagtest02% vagrant snap take
|
25
|
+
[db]
|
26
|
+
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
|
27
|
+
[web]
|
28
|
+
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
|
29
|
+
t510 dev/vagtest02%
|
30
|
+
t510 [1] dev/vagtest02% vagrant snap list
|
31
|
+
[db]
|
32
|
+
+-db-01 [ 16 seconds ]
|
33
|
+
[web]
|
34
|
+
+-web-01 [ 14 seconds ]
|
35
|
+
t510 dev/vagtest02% vagrant snap take -d "2nd snap"
|
36
|
+
[db]
|
37
|
+
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
|
38
|
+
[web]
|
39
|
+
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
|
40
|
+
t510 dev/vagtest02% vagrant snap list
|
41
|
+
[db]
|
42
|
+
+-db-01 [ 48 seconds ]
|
43
|
+
+-db-02 [ 10 seconds ] 2nd snap
|
44
|
+
[web]
|
45
|
+
+-web-01 [ 47 seconds ]
|
46
|
+
+-web-02 [ 8 seconds ] 2nd snap
|
47
|
+
t510 dev/vagtest02% vagrant snap go web-01 web
|
48
|
+
[web]
|
49
|
+
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
|
50
|
+
Restoring snapshot 283d90aa-ef75-4316-a847-e04961c2ec26
|
51
|
+
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
|
52
|
+
Waiting for the VM to power on...
|
53
|
+
VM has been successfully started.
|
54
|
+
t510 dev/vagtest02% vagrant snap list
|
55
|
+
[db]
|
56
|
+
+-db-01 [ 1 minute ]
|
57
|
+
+-db-02 [ 40 seconds ] 2nd snap
|
58
|
+
[web]
|
59
|
+
+-web-01 [ 1 minute ]
|
60
|
+
+-web-02 [ 38 seconds ] 2nd snap
|
61
|
+
t510 dev/vagtest02%
|
22
62
|
|
23
|
-
## Similar project
|
24
63
|
|
64
|
+
## Similar project
|
25
65
|
[sahara](https://github.com/jedi4ever/sahara)
|
66
|
+
|
67
|
+
## Other
|
68
|
+
I intentionally avoided naming this plugin as 'vagrant-snapshot', because I believe Vagrant author
|
69
|
+
implement snap shot management feature and want to use 'snapshot' as command name.
|
70
|
+
|
71
|
+
## VM configuration
|
72
|
+
In my experience, to avoid `VERR_SSM_LOAD_CONFIG_MISMATCH` error when restoreing snaphot,
|
73
|
+
disable `USB controller` and `absolte pointing device`.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.02
|
data/lib/vagrant_snap.rb
CHANGED
@@ -56,44 +56,75 @@ module Snap
|
|
56
56
|
register "snap","Manages a snap"
|
57
57
|
|
58
58
|
no_tasks {
|
59
|
-
def
|
60
|
-
@
|
61
|
-
|
62
|
-
|
59
|
+
def env
|
60
|
+
@_env ||= Vagrant::Environment.new
|
61
|
+
end
|
62
|
+
|
63
|
+
def with_target(target, &blk)
|
64
|
+
target_found = false
|
65
|
+
env.vms.each do |name, vm|
|
66
|
+
vagvmname = vm.name
|
67
|
+
vmname = vm.vm.name
|
68
|
+
if target
|
69
|
+
blk.call(vmname, vagvmname) if target.to_sym == vagvmname
|
70
|
+
target_found = true
|
71
|
+
else
|
72
|
+
blk.call(vmname, vagvmname)
|
73
|
+
target_found = true
|
74
|
+
end
|
75
|
+
end
|
76
|
+
warn "you need to select collect vmname" unless target_found
|
63
77
|
end
|
64
78
|
}
|
65
79
|
|
66
80
|
desc "list", "list snapshot"
|
67
|
-
def list
|
68
|
-
|
69
|
-
|
81
|
+
def list(target=nil)
|
82
|
+
with_target(target) do |vmname, vagvmname|
|
83
|
+
puts "[#{vagvmname}]"
|
84
|
+
result = VBox::SnapShot.parse_tree( vmname )
|
85
|
+
puts result ? result : "no snapshot"
|
86
|
+
end
|
70
87
|
end
|
71
88
|
|
72
89
|
desc "go SNAP_NAME", "go to specified snapshot"
|
73
|
-
def go(snapshot_name)
|
74
|
-
|
75
|
-
|
76
|
-
|
90
|
+
def go(snapshot_name, target=nil)
|
91
|
+
with_target(target) do |vmname, vagvmname|
|
92
|
+
puts "[#{vagvmname}]"
|
93
|
+
system "VBoxManage controlvm #{vmname} poweroff"
|
94
|
+
system "VBoxManage snapshot #{vmname} restore #{snapshot_name}"
|
95
|
+
system "VBoxManage startvm #{vmname} --type headless"
|
96
|
+
end
|
77
97
|
end
|
78
98
|
|
79
99
|
desc "back", "back to current snapshot"
|
80
|
-
def back
|
81
|
-
|
82
|
-
|
83
|
-
|
100
|
+
def back(target=nil)
|
101
|
+
with_target(target) do |vmname, vagvmname|
|
102
|
+
puts "[#{vagvmname}]"
|
103
|
+
system "VBoxManage controlvm #{vmname} poweroff"
|
104
|
+
system "VBoxManage snapshot #{vmname} restorecurrent"
|
105
|
+
system "VBoxManage startvm #{vmname} --type headless"
|
106
|
+
end
|
84
107
|
end
|
85
108
|
|
86
|
-
desc "take [
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
109
|
+
desc "take [NAME] [-d DESC]", "take snapshot"
|
110
|
+
method_option :desc, :type => :string, :aliases => "-d"
|
111
|
+
def take(target=nil)
|
112
|
+
with_target(target) do |vmname, vagvmname|
|
113
|
+
puts "[#{vagvmname}]"
|
114
|
+
VBox::SnapShot.parse_tree( vmname )
|
115
|
+
last_name = VBox::SnapShot.snaps.sort.reverse.first
|
116
|
+
new_name = last_name.nil? ? vmname + "-01" : last_name.succ
|
117
|
+
desc = options.desc ? " --description '#{options.desc}'" : ""
|
118
|
+
system "VBoxManage snapshot #{vmname} take #{new_name} #{desc} --pause"
|
119
|
+
end
|
92
120
|
end
|
93
121
|
|
94
122
|
desc "delete SNAP_NAME", "delete snapshot"
|
95
|
-
def delete(snapshot_name)
|
96
|
-
|
123
|
+
def delete(snapshot_name, target=nil)
|
124
|
+
with_target(target) do |vmname, vagvmname|
|
125
|
+
puts "[#{vagvmname}]"
|
126
|
+
system "VBoxManage snapshot #{vmname} delete #{snapshot_name}"
|
127
|
+
end
|
97
128
|
end
|
98
129
|
end
|
99
130
|
end
|
data/vagrant-snap.gemspec
CHANGED
metadata
CHANGED