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 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
- ## install
6
+ ## Install
6
7
 
7
8
  gem install vagrant-snap
8
9
 
9
- ## following commands are added
10
+ ## Following commands are added
10
11
 
11
12
  Tasks:
12
- vagrant snap back # back to current snapshot
13
- vagrant snap delete SNAP_NAME # delete snapshot
14
- vagrant snap go SNAP_NAME # go to specified snapshot
15
- vagrant snap help [COMMAND] # Describe subcommands or one specific subcommand
16
- vagrant snap list # list snapshot
17
- vagrant snap take [desc] # take snapshot
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
- ## limitation
20
+ ## Example
20
21
 
21
- Currently multi-vm environment is not supported
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.01
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 vmname
60
- @vagrant_env ||= Vagrant::Environment.new
61
- @instance_name ||= "#{@vagrant_env.vms[:default].vm.name}"
62
- @instance_name
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
- result = VBox::SnapShot.parse_tree( vmname )
69
- puts result ? result : "no snapshot"
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
- system "VBoxManage controlvm #{vmname} poweroff"
75
- system "VBoxManage snapshot #{vmname} restore #{snapshot_name}"
76
- system "VBoxManage startvm #{vmname} --type headless"
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
- system "VBoxManage controlvm #{vmname} poweroff"
82
- system "VBoxManage snapshot #{vmname} restorecurrent"
83
- system "VBoxManage startvm #{vmname} --type headless"
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 [desc]", "take snapshot"
87
- def take(desc="")
88
- VBox::SnapShot.parse_tree( vmname )
89
- last_name = VBox::SnapShot.snaps.sort.reverse.first
90
- new_name = last_name.nil? ? vmname + "-01" : last_name.succ
91
- system "VBoxManage snapshot #{vmname} take #{new_name} --description '#{desc}' --pause"
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
- system "VBoxManage snapshot #{vmname} delete #{snapshot_name}"
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
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{vagrant-snap}
5
- s.version = "0.01"
5
+ s.version = "0.02"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["t9md"]
metadata CHANGED
@@ -1,12 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-snap
3
3
  version: !ruby/object:Gem::Version
4
- hash: 9
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
9
- version: "0.01"
8
+ - 2
9
+ version: "0.02"
10
10
  platform: ruby
11
11
  authors:
12
12
  - t9md