vagrant-vbox-snapshot 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ OWYyMDIzMDlmMTUwZDlhZGJlOTEwMmU2NTU3YzgzMTFmNmExMDc1OA==
5
+ data.tar.gz: !binary |-
6
+ NzQ3NDZhOTg5NjBhODk0Mzk0YTFiZTIxZTU3YzAwNzljOWYwOWQxMA==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ ZTFkOGQxY2E0YzU0MWM4YTZiMTQ5OTVhNThjMWI5NzM2ZjgyNzMwYTYzN2Ri
10
+ YjA4MTIyN2IxNWI1ZWU4MzI1M2UxNWRiZDE2ODk5MWYwMDFmOWU5YTlmODIy
11
+ MTAxN2I3OGMxMDNiYjUzNWFiYzUzMTBlMmQzOTllMmRmYzVmYTU=
12
+ data.tar.gz: !binary |-
13
+ YWU2MjhkMTM4MWNkZmNlYTNhMmUwODU1MjAyMjA1YzM0YzhkZDVlZTRkM2Qy
14
+ YmJkNDhmMzQ3M2ZiOGVlNmVhYjljODVmODVjN2NkMzFkNzRhZGY5ODRmYjM3
15
+ ZWJhNGE5NzI5NDA0NTZlZmM1YjY5YjdmNGIwYzM3NjM3OTU4Mzg=
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ coverage
6
+ InstalledFiles
7
+ lib/bundler/man
8
+ pkg
9
+ rdoc
10
+ spec/reports
11
+ test/tmp
12
+ test/version_tmp
13
+ tmp
14
+
15
+ # YARD artifacts
16
+ .yardoc
17
+ _yardoc
18
+ doc/
data/DEVNOTES.md ADDED
@@ -0,0 +1,27 @@
1
+ ## Updating to vagrant 1.1 plugin API
2
+
3
+ Resources:
4
+
5
+ * http://docs.vagrantup.com/v2/plugins/development-basics.html
6
+
7
+ Example code:
8
+
9
+ * https://gist.github.com/dergachev/5367385#vagrant-snapshot.rb
10
+ * https://github.com/mitchellh/vagrant/issues/143#add-vagrant-snapshot-option
11
+ * https://github.com/fgrehm/vagrant-notify
12
+ * https://github.com/RiotGames/berkshelf-vagrant
13
+ * https://github.com/mitchellh/vagrant-aws/blob/master/lib/vagrant-aws/plugin.rb
14
+ * sahara 1.1 update commit: https://github.com/ryuzee/sahara/commit/b80a621a9200bb4935c782bd4e538886c42b8643
15
+ * vagrant-snap: https://github.com/t9md/vagrant-snap/blob/master/lib/vagrant_snap.rb
16
+ * https://github.com/dotless-de/vagrant-plugins-env/blob/master/.gitmodules
17
+
18
+ Vagrant source code:
19
+
20
+ * https://github.com/mitchellh/vagrant/blob/master/lib/vagrant/registry.rb
21
+ * https://github.com/mitchellh/vagrant/tree/master/plugins/provisioners/shell
22
+ * https://github.com/mitchellh/vagrant/blob/master/lib/vagrant/plugin/v2/provisioner.rb
23
+ * https://github.com/mitchellh/vagrant/blob/master/lib/vagrant/plugin/v2/command.rb
24
+
25
+ ## other ideas related to snapshots
26
+
27
+ * http://code.chrisroberts.org/blog/2012/05/09/cooking-up-partial-run-lists-with-chef/
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in vagrant-snap.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,37 @@
1
+ vagrant-vbox-snapshot
2
+ ==================================
3
+ Vagrant plugin that exposes the `VBoxManage snapshot` command.
4
+
5
+ ## Install
6
+
7
+ Ensure you have Vagrant 1.1+ installed, then run:
8
+
9
+ vagrant plugin install vagrant-vbox-snapshot
10
+
11
+ ## Usage
12
+
13
+ The following commands are added by this plugin:
14
+
15
+ vagrant snap back # back to current snapshot
16
+ vagrant snap delete SNAP_NAME # delete snapshot
17
+ vagrant snap go SNAP_NAME # go to specified snapshot
18
+ vagrant snap help [COMMAND] # Describe subcommands or one specific subcommand
19
+ vagrant snap list # list snapshot
20
+ vagrant snap take [NAME] # take snapshot
21
+
22
+ ## Other solutions
23
+
24
+ There have been a number of similar plugins, but none worked for Vagrant 1.1:
25
+
26
+ * [vagrant-snap](https://github.com/t9md/vagrant-snap)
27
+ - originally published as a gist: https://gist.github.com/t9md/1008031
28
+ - fork of above gist, with Vagrant 1.0.6 compatibility: https://gist.github.com/tombh/5142237
29
+ - [source](https://github.com/mitchellh/vagrant/issues/143#issuecomment-14781762)
30
+ - primary inspiration for vagrant-vbox-snapshot
31
+ * [sahara](https://github.com/jedi4ever/sahara)
32
+ - fork exists with 1.1 functionality: https://github.com/ryuzee/sahara
33
+
34
+ ## Development
35
+
36
+ See [DEVNOTES.md](https://github.com/dergachev/vagrant-vbox-snapshot/blob/master/DEVNOTES.md)
37
+ for the notes I compiled while developing this plugin.
@@ -0,0 +1,28 @@
1
+ module VagrantPlugins
2
+ module VBoxSnapshot
3
+ module Command
4
+ class Back < Vagrant.plugin(2, :command)
5
+ def execute
6
+ options = {}
7
+
8
+ opts = OptionParser.new do |opts|
9
+ opts.banner = "Back to current snapshot"
10
+ opts.separator ""
11
+ opts.separator "Usage: vagrant snapshot back"
12
+ end
13
+ # Parse the options
14
+ argv = parse_options(opts)
15
+ return if !argv
16
+
17
+ with_target_vms do |machine|
18
+ vm_id = machine.id
19
+ system "VBoxManage snapshot #{vm_id} list --details"
20
+ system "VBoxManage controlvm #{vm_id} poweroff"
21
+ system "VBoxManage snapshot #{vm_id} restorecurrent"
22
+ system "VBoxManage startvm #{vm_id} --type headless"
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,31 @@
1
+ module VagrantPlugins
2
+ module VBoxSnapshot
3
+ module Command
4
+ class Delete < Vagrant.plugin(2, :command)
5
+ def execute
6
+ options = {}
7
+
8
+ opts = OptionParser.new do |opts|
9
+ opts.banner = "Delete snapshot"
10
+ opts.separator ""
11
+ opts.separator "Usage: vagrant snapshot delete <SNAPSHOT_NAME>"
12
+ end
13
+ # Parse the options
14
+ argv = parse_options(opts)
15
+ return if !argv
16
+
17
+ if !argv[0]
18
+ @env.ui.info(opts.help, :prefix => false)
19
+ return
20
+ end
21
+
22
+ with_target_vms do |machine|
23
+ vm_id = machine.id
24
+ snapshot_name = argv[0]
25
+ system "VBoxManage snapshot #{vm_id} delete #{snapshot_name}"
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,33 @@
1
+ module VagrantPlugins
2
+ module VBoxSnapshot
3
+ module Command
4
+ class Go < Vagrant.plugin(2, :command)
5
+ def execute
6
+ options = {}
7
+
8
+ opts = OptionParser.new do |opts|
9
+ opts.banner = "Go to specified snapshot"
10
+ opts.separator ""
11
+ opts.separator "Usage: vagrant snapshot go <SNAPSHOT_NAME>"
12
+ end
13
+ # Parse the options
14
+ argv = parse_options(opts)
15
+ return if !argv
16
+
17
+ if !argv[0]
18
+ @env.ui.info(opts.help, :prefix => false)
19
+ return
20
+ end
21
+
22
+ with_target_vms do |machine|
23
+ vm_id = machine.id
24
+ snapshot_name = argv[0]
25
+ system "VBoxManage controlvm #{vm_id} poweroff"
26
+ system "VBoxManage snapshot #{vm_id} restore #{snapshot_name}"
27
+ system "VBoxManage startvm #{vm_id} --type headless"
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,25 @@
1
+ module VagrantPlugins
2
+ module VBoxSnapshot
3
+ module Command
4
+ class List < Vagrant.plugin(2, :command)
5
+ def execute
6
+ options = {}
7
+
8
+ opts = OptionParser.new do |opts|
9
+ opts.banner = "List snapshots"
10
+ opts.separator ""
11
+ opts.separator "Usage: vagrant snapshot list"
12
+ end
13
+ # Parse the options
14
+ argv = parse_options(opts)
15
+ return if !argv
16
+
17
+ with_target_vms do |machine|
18
+ vm_id = machine.id
19
+ system "VBoxManage snapshot #{vm_id} list --details"
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,75 @@
1
+ module VagrantPlugins
2
+ module VBoxSnapshot
3
+ module Command
4
+ class Root < Vagrant.plugin(2, :command)
5
+ def initialize(argv, env)
6
+ super
7
+
8
+ @main_args, @sub_command, @sub_args = split_main_and_subcommand(argv)
9
+
10
+ @subcommands = Vagrant::Registry.new
11
+ @subcommands.register(:take) do
12
+ require_relative('take')
13
+ Take
14
+ end
15
+ @subcommands.register(:list) do
16
+ require_relative('list')
17
+ List
18
+ end
19
+ @subcommands.register(:go) do
20
+ require_relative('go')
21
+ Go
22
+ end
23
+ @subcommands.register(:back) do
24
+ require_relative('back')
25
+ Back
26
+ end
27
+ @subcommands.register(:delete) do
28
+ require_relative('delete')
29
+ Delete
30
+ end
31
+ end
32
+
33
+ def execute
34
+ if @main_args.include?("-h") || @main_args.include?("--help")
35
+ # Print the help for all the box commands.
36
+ return help
37
+ end
38
+
39
+ # If we reached this far then we must have a subcommand. If not,
40
+ # then we also just print the help and exit.
41
+ command_class = @subcommands.get(@sub_command.to_sym) if @sub_command
42
+ return help if !command_class || !@sub_command
43
+ @logger.debug("Invoking command class: #{command_class} #{@sub_args.inspect}")
44
+
45
+ # Initialize and execute the command class
46
+ command_class.new(@sub_args, @env).execute
47
+ end
48
+
49
+ # Prints the help out for this command
50
+ def help
51
+ opts = OptionParser.new do |opts|
52
+ opts.banner = "Usage: vagrant snapshot <command> [<args>]"
53
+ opts.separator ""
54
+ opts.separator "Available subcommands:"
55
+
56
+ # Add the available subcommands as separators in order to print them
57
+ # out as well.
58
+ keys = []
59
+ @subcommands.each { |key, value| keys << key.to_s }
60
+
61
+ keys.sort.each do |key|
62
+ opts.separator " #{key}"
63
+ end
64
+
65
+ opts.separator ""
66
+ opts.separator "For help on any individual command run `vagrant snapshot <command> -h`"
67
+ end
68
+
69
+ @env.ui.info(opts.help, :prefix => false)
70
+ end
71
+
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,31 @@
1
+ module VagrantPlugins
2
+ module VBoxSnapshot
3
+ module Command
4
+ class Take < Vagrant.plugin(2, :command)
5
+ def execute
6
+ options = {}
7
+
8
+ opts = OptionParser.new do |opts|
9
+ opts.banner = "Take snapshot"
10
+ opts.separator ""
11
+ opts.separator "Usage: vagrant snapshot take <SNAPSHOT_NAME>"
12
+ end
13
+ # Parse the options
14
+ argv = parse_options(opts)
15
+ return if !argv
16
+
17
+ if !argv[0]
18
+ @env.ui.info(opts.help, :prefix => false)
19
+ return
20
+ end
21
+
22
+ with_target_vms do |machine|
23
+ vm_id = machine.id
24
+ snapshot_name = argv[0]
25
+ system "VBoxManage snapshot #{vm_id} take #{snapshot_name} --pause"
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,20 @@
1
+ begin
2
+ require "vagrant"
3
+ rescue LoadError
4
+ raise "The Vagrant VBox Snapshot plugin must be run within Vagrant."
5
+ end
6
+
7
+ module VagrantPlugins
8
+ module VBoxSnapshot
9
+ class Plugin < Vagrant.plugin("2")
10
+ name "Vagrant VBox Snapshot"
11
+ description "Wrapper on the `VBoxManage snapshot` command."
12
+
13
+ command "snapshot" do
14
+ require_relative 'commands/root.rb'
15
+ Command::Root
16
+ end
17
+
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,5 @@
1
+ module VagrantPlugins
2
+ module VBoxSnapshot
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,2 @@
1
+ require_relative 'vagrant-vbox-snapshot/version.rb'
2
+ require_relative 'vagrant-vbox-snapshot/plugin.rb'
@@ -0,0 +1,21 @@
1
+ $:.unshift File.expand_path('../lib', __FILE__)
2
+ require 'vagrant-vbox-snapshot/version'
3
+
4
+ Gem::Specification.new do |spec|
5
+ spec.name = "vagrant-vbox-snapshot"
6
+ spec.version = VagrantPlugins::VBoxSnapshot::VERSION
7
+ spec.authors = "Alex Dergachev"
8
+ spec.email = "alex@evolvingweb.ca"
9
+ spec.summary = 'Vagrant plugin that exposes the `VBoxManage snapshot` command.'
10
+ spec.description = 'Vagrant plugin that exposes the `VBoxManage snapshot` command.'
11
+ spec.homepage = 'https://github.com/dergachev/vagrant-vbox-snapshot'
12
+ spec.license = "MIT"
13
+
14
+ spec.files = `git ls-files`.split($/)
15
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
16
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
+ spec.require_path = 'lib'
18
+
19
+ spec.add_development_dependency "bundler"
20
+ spec.add_development_dependency "rake"
21
+ end
metadata ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vagrant-vbox-snapshot
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Alex Dergachev
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-04-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: Vagrant plugin that exposes the `VBoxManage snapshot` command.
42
+ email: alex@evolvingweb.ca
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - .gitignore
48
+ - DEVNOTES.md
49
+ - Gemfile
50
+ - README.md
51
+ - lib/vagrant-vbox-snapshot.rb
52
+ - lib/vagrant-vbox-snapshot/commands/back.rb
53
+ - lib/vagrant-vbox-snapshot/commands/delete.rb
54
+ - lib/vagrant-vbox-snapshot/commands/go.rb
55
+ - lib/vagrant-vbox-snapshot/commands/list.rb
56
+ - lib/vagrant-vbox-snapshot/commands/root.rb
57
+ - lib/vagrant-vbox-snapshot/commands/take.rb
58
+ - lib/vagrant-vbox-snapshot/plugin.rb
59
+ - lib/vagrant-vbox-snapshot/version.rb
60
+ - vagrant-vbox-snapshot.gemspec
61
+ homepage: https://github.com/dergachev/vagrant-vbox-snapshot
62
+ licenses:
63
+ - MIT
64
+ metadata: {}
65
+ post_install_message:
66
+ rdoc_options: []
67
+ require_paths:
68
+ - lib
69
+ required_ruby_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ! '>='
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ required_rubygems_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ requirements: []
80
+ rubyforge_project:
81
+ rubygems_version: 2.0.3
82
+ signing_key:
83
+ specification_version: 4
84
+ summary: Vagrant plugin that exposes the `VBoxManage snapshot` command.
85
+ test_files: []