vagrant-snap 0.09 → 0.10

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/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ * 0.10
2
+ 2012-01-26
3
+ * rewite to support vagrant 0.9(it no longer use Thor).
4
+ * dirty hack but work..
1
5
  * 0.09
2
6
  2011-07-19
3
7
  * don't die on VM defined in env but not yet created, thanks to Ches Martin
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  What's this?
2
2
  ==================================
3
3
  vagrant snapshot management plugin
4
- can handle multi-vm envirnment.
4
+ can handle multi-vm environment.
5
5
 
6
6
  ## Install
7
7
 
data/Rakefile CHANGED
@@ -5,7 +5,7 @@ require 'echoe'
5
5
  Echoe.new "vagrant-snap", File.read("./VERSION").chomp do |p|
6
6
  p.author = "t9md"
7
7
  p.email = "taqumd@gmail.com"
8
- p.summary = %Q{vagrant snapshot managemen plugin}
8
+ p.summary = %Q{vagrant snapshot management plugin}
9
9
  p.project = nil
10
10
  p.url = "http://github.com/t9md/vagrant-snap"
11
11
  p.ignore_pattern = ["misc/*"]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.09
1
+ 0.10
@@ -1,4 +1,6 @@
1
+ require "virtualbox"
1
2
  require "colored"
3
+ require "pp"
2
4
 
3
5
  module Snap
4
6
  module VBox
@@ -17,7 +19,7 @@ module Snap
17
19
 
18
20
  def parse_tree(vmname)
19
21
  init
20
- vm = VirtualBox::VM.find( vmname )
22
+ vm = ::VirtualBox::VM.find( vmname )
21
23
  @@current = vm.current_snapshot
22
24
  return unless @@current
23
25
  @@tree = _parse(vm.root_snapshot)
@@ -68,6 +70,16 @@ module Snap
68
70
  end
69
71
  end
70
72
 
73
+ def next_available_snapname
74
+ if lastname.nil?
75
+ "0"
76
+ else
77
+ n = lastname.succ
78
+ n = n.succ while VBox::SnapShot.include? n
79
+ n
80
+ end
81
+ end
82
+
71
83
  def include?(name)
72
84
  return false unless tree
73
85
  tree.flatten.map(&:name).include? name
@@ -91,110 +103,156 @@ module Snap
91
103
  end #}}}
92
104
  end
93
105
 
94
- class Command < Vagrant::Command::GroupBase
95
- register "snap","Manages a snap"
106
+ class Snap < Vagrant::Command::Base
107
+ def help
108
+ puts <<-EOS
109
+ Usage: vagrant snap <subcommand> [options...]
96
110
 
97
- no_tasks {
98
- def env
99
- @_env ||= Vagrant::Environment.new
111
+ subcommands are..
112
+ vagrant snap list
113
+ vagrant snap back
114
+ vagrant snap go <snapshot> [boxname]
115
+ vagrant snap take [TARGET] [-n SNAP_NAME] [-d DESC]"
116
+ vagrant snap delete <snapshot> [boxname]"
117
+
118
+ EOS
119
+ end
120
+ def execute# {{{
121
+ @main_args, @sub_command, @sub_args = split_main_and_subcommand(@argv)
122
+ # p [@main_args, @sub_command, @sub_args]
123
+
124
+ # sub_list = %w(list go back take delete test)
125
+ sub_list = %w(list go back take delete)
126
+ unless @sub_command
127
+ help
128
+ exit
129
+ end
130
+ if sub_list.include? @sub_command
131
+ send(@sub_command)
132
+ else
133
+ ui.warn "unkown command '#{@sub_command}'"
134
+ help
135
+ exit
100
136
  end
137
+ end# }}}
101
138
 
102
- def with_target(target, &blk)
103
- target_found = false
104
- env.vms.each do |name, vm|
105
- next if vm.vm.nil? # not yet created
106
- vagvmname = vm.name
107
- vmname = vm.vm.name
139
+ private
140
+ # def env
141
+ # @_env ||= Vagrant::Environment.new
142
+ # end
108
143
 
109
- if target.nil? or target.to_sym == vagvmname
110
- blk.call(vmname, vagvmname)
111
- target_found = true
112
- end
113
- end
114
- warn "A VM by the name of `#{target}' was not found".red unless target_found
115
- end
116
- }
117
-
118
- desc "list", "list snapshot"
119
- def list(target=nil)
120
- with_target(target) do |vmname, vagvmname|
121
- puts "[#{vagvmname}]"
122
- VBox::SnapShot.parse_tree( vmname )
123
- if VBox::SnapShot.tree
124
- result = VBox::SnapShot.show
125
- else
126
- result = "no snapshot"
144
+ def ui# {{{
145
+ @ui ||= ::Vagrant::UI::Colored.new("vagrant")
146
+ end# }}}
147
+ def safe_with_target_vms(target, &blk)# {{{
148
+ with_target_vms(target) do |vm|
149
+ unless vm.created?
150
+ @logger.info("not created yet: #{vm.name}")
151
+ next
127
152
  end
128
- puts result
153
+ puts "[#{vm.name}]"
154
+ blk.call(vm)
129
155
  end
130
- end
156
+ end# }}}
157
+ def target_vmname# {{{
158
+ target = @sub_args.empty? ? nil : @sub_args.last.to_s
159
+ end# }}}
160
+ def exe(cmd)# {{{
161
+ puts "# exe: #{cmd}" if @exe_verbose
162
+ system cmd
163
+ end# }}}
131
164
 
132
- desc "go SNAP_NAME", "go to specified snapshot"
133
- def go(snapshot_name, target=nil)
134
- with_target(target) do |vmname, vagvmname|
135
- puts "[#{vagvmname}]"
136
- VBox::SnapShot.parse_tree( vmname )
137
- if VBox::SnapShot.include?( snapshot_name )
138
- system "VBoxManage controlvm #{vmname} poweroff"
139
- system "VBoxManage snapshot #{vmname} restore #{snapshot_name}"
140
- system "VBoxManage startvm #{vmname} --type headless"
165
+ def list# {{{
166
+ # options = {}
167
+ # opts = OptionParser.new { |opts| opts.banner = "vagrant snap list" }
168
+ # argv = parse_options(opts)
169
+ # # p argv
170
+ safe_with_target_vms(target_vmname) do |vm|
171
+ VBox::SnapShot.parse_tree( vm.uuid )
172
+ puts VBox::SnapShot.tree ? VBox::SnapShot.show : "no snapshot"
173
+ end
174
+ end# }}}
175
+ def go # {{{
176
+ options = {}
177
+ opts = OptionParser.new do |opts|
178
+ opts.banner = "Usage: vagrant snapt go <snapshot> [boxname]"
179
+ end
180
+ snapshot, target = *@sub_args
181
+ unless snapshot
182
+ puts opts.help
183
+ return
184
+ end
185
+ safe_with_target_vms(target) do |vm|
186
+ VBox::SnapShot.parse_tree( vm.uuid )
187
+ if VBox::SnapShot.include?( snapshot )
188
+ exe "VBoxManage controlvm '#{vm.uuid}' poweroff"
189
+ exe "VBoxManage snapshot '#{vm.uuid}' restore '#{snapshot}'"
190
+ exe "VBoxManage startvm '#{vm.uuid}' --type headless"
141
191
  else
142
- warn "#{snapshot_name} is not exist".red
192
+ ui.warn "'#{snapshot}' is not exist"
143
193
  end
144
194
  end
145
- end
146
-
147
- desc "back", "back to current snapshot"
148
- def back(target=nil)
149
- with_target(target) do |vmname, vagvmname|
150
- puts "[#{vagvmname}]"
151
- system "VBoxManage controlvm #{vmname} poweroff"
152
- system "VBoxManage snapshot #{vmname} restorecurrent"
153
- system "VBoxManage startvm #{vmname} --type headless"
195
+ end# }}}
196
+ def back# {{{
197
+ safe_with_target_vms(target_vmname) do |vm|
198
+ exe "VBoxManage controlvm '#{vm.uuid}' poweroff"
199
+ exe "VBoxManage snapshot '#{vm.uuid}' restorecurrent"
200
+ exe "VBoxManage startvm '#{vm.uuid}' --type headless"
201
+ end
202
+ end# }}}
203
+ def take# {{{
204
+ options = {}
205
+ opts = OptionParser.new do |opts|
206
+ opts.banner = "Usage: vagrant snap take [TARGET] [-n SNAP_NAME] [-d DESC]"
207
+ opts.on("-n", "--name STR", "Name of snapshot" ){ |v| options[:name] = v }
208
+ opts.on("-d", "--desc STR", "Description of snapshot"){ |v| options[:desc] = v }
154
209
  end
155
- end
156
210
 
157
- desc "take [TARGET] [-n SNAP_NAME] [-d DESC]", "take snapshot"
158
- method_option :desc, :type => :string, :aliases => "-d"
159
- method_option :name, :type => :string, :aliases => "-n"
160
- def take(target=nil)
161
- with_target(target) do |vmname, vagvmname|
162
- puts "[#{vagvmname}]"
163
- VBox::SnapShot.parse_tree( vmname )
164
- if options.name
165
- if VBox::SnapShot.include? options.name
166
- warn "#{options.name} is already exist".red
167
- next
168
- else
169
- new_name = options.name
170
- end
211
+ begin
212
+ argv = parse_options(opts)
213
+ rescue OptionParser::MissingArgument
214
+ raise ::Vagrant::Errors::CLIInvalidOptions, :help => opts.help.chomp
215
+ end
216
+ return if !argv
217
+ @main_args, @sub_command, @sub_args = split_main_and_subcommand(argv)
218
+ # p @sub_args
219
+ # return
220
+ # snapshot, target = *@sub_args
221
+ safe_with_target_vms(target_vmname) do |vm|
222
+ VBox::SnapShot.parse_tree( vm.uuid )
223
+ if options[:name] and VBox::SnapShot.include? options[:name]
224
+ ui.warn "'#{options[:name]}' is already exist"
225
+ next
171
226
  end
172
- unless new_name
173
- lastname = VBox::SnapShot.lastname
174
- new_name = if lastname.nil?
175
- "0"
176
- else
177
- n = lastname.succ
178
- n = n.succ while VBox::SnapShot.include? n
179
- n
180
- end
227
+ snapshot = options[:name] ? options[:name] : VBox::SnapShot.next_available_snapname
228
+ cmd = "VBoxManage snapshot '#{vm.uuid}' take '#{snapshot}' --pause"
229
+ if options[:desc]
230
+ cmd << " --description '#{options[:desc]}'"
181
231
  end
182
- desc = options.desc ? " --description '#{options.desc}'" : ""
183
- system "VBoxManage snapshot '#{vmname}' take '#{new_name}' #{desc} --pause"
232
+ exe cmd
184
233
  end
185
- end
234
+ end# }}}
186
235
 
187
- desc "delete SNAP_NAME", "delete snapshot"
188
- def delete(snapshot_name, target=nil)
189
- with_target(target) do |vmname, vagvmname|
190
- puts "[#{vagvmname}]"
191
- VBox::SnapShot.parse_tree( vmname )
192
- if VBox::SnapShot.include?( snapshot_name )
193
- system "VBoxManage snapshot #{vmname} delete #{snapshot_name}"
236
+ def delete# {{{
237
+ options = {}
238
+ opts = OptionParser.new do |opts|
239
+ opts.banner = "vagrant snap delete <snapshot> [boxname]"
240
+ end
241
+ snapshot, target = *@sub_args
242
+ unless snapshot
243
+ puts opts.help
244
+ return
245
+ end
246
+ snapshot, target = *@sub_args
247
+ safe_with_target_vms(target) do |vm|
248
+ VBox::SnapShot.parse_tree( vm.uuid )
249
+ if VBox::SnapShot.include?( snapshot )
250
+ exe "VBoxManage snapshot '#{vm.uuid}' delete '#{snapshot}'"
194
251
  else
195
- warn "#{snapshot_name} is not exist".red
252
+ ui.warn "'#{snapshot}' is not exist"
196
253
  end
197
254
  end
198
- end
255
+ end# }}}
199
256
  end
200
257
  end
258
+ Vagrant.commands.register(:snap) { ::Snap::Snap }
@@ -2,12 +2,12 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{vagrant-snap}
5
- s.version = "0.09"
5
+ s.version = "0.10"
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"]
9
- s.date = %q{2011-07-19}
10
- s.description = %q{vagrant snapshot managemen plugin}
9
+ s.date = %q{2012-01-26}
10
+ s.description = %q{vagrant snapshot management plugin}
11
11
  s.email = %q{taqumd@gmail.com}
12
12
  s.extra_rdoc_files = ["LICENSE.txt", "README.md", "CHANGELOG", "lib/vagrant_init.rb", "lib/vagrant_snap.rb"]
13
13
  s.files = ["LICENSE.txt", "Manifest", "README.md", "Rakefile", "VERSION", "CHANGELOG", "lib/vagrant_init.rb", "lib/vagrant_snap.rb", "vagrant-snap.gemspec"]
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
15
15
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Vagrant-snap", "--main", "README.md"]
16
16
  s.require_paths = ["lib"]
17
17
  s.rubygems_version = %q{1.3.7}
18
- s.summary = %q{vagrant snapshot managemen plugin}
18
+ s.summary = %q{vagrant snapshot management plugin}
19
19
 
20
20
  if s.respond_to? :specification_version then
21
21
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
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: 25
4
+ hash: 31
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 9
9
- version: "0.09"
8
+ - 10
9
+ version: "0.10"
10
10
  platform: ruby
11
11
  authors:
12
12
  - t9md
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-07-19 00:00:00 +09:00
17
+ date: 2012-01-26 00:00:00 +09:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -45,7 +45,7 @@ dependencies:
45
45
  version: "0"
46
46
  type: :runtime
47
47
  version_requirements: *id002
48
- description: vagrant snapshot managemen plugin
48
+ description: vagrant snapshot management plugin
49
49
  email: taqumd@gmail.com
50
50
  executables: []
51
51
 
@@ -106,6 +106,6 @@ rubyforge_project:
106
106
  rubygems_version: 1.3.7
107
107
  signing_key:
108
108
  specification_version: 3
109
- summary: vagrant snapshot managemen plugin
109
+ summary: vagrant snapshot management plugin
110
110
  test_files: []
111
111