vagrant-snap 0.01 → 0.02

Sign up to get free protection for your applications and to get access to all the features.
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