vagrant-vbox-snapshot 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 59803a44c1dfd4762ad171ac328e8281b5b0798c
4
- data.tar.gz: 8ff585dcf406ac9c1932310283c695dabc0a5a68
3
+ metadata.gz: 33e9abe0b4d5521bffb2509f88c1aad9a2d6152f
4
+ data.tar.gz: 9a3ffca4dec1a13a32bcd420e5c26e4d55755cd5
5
5
  SHA512:
6
- metadata.gz: 2ff4aea7a11ac98f5f934c259e66723b3041fe3a57dd131873e6edda4f3a6da9c36f47d08458c391be3dd5bd914d36ebca5b3a47114644ea446e156cc37a3669
7
- data.tar.gz: 35c4d93a36cb0c04e3074ce272ddfde3ec260105d15893cde898b372f5af0f979c5eb7117cf3703d7b0f92291c99ab8a76edaeaa08d201120b8c95424837842e
6
+ metadata.gz: 73151d2048746312481aff7ad37b2c4fb8f525e2ac8ce88a80984be697e569a9e0c1d9fec58ca11be31df150fac5fafb23d5a1fbac38193e94768a995bb09e9e
7
+ data.tar.gz: 91bc767c5c6813f4d2daf0169f6b7d2399f4e14e4f86cad5d236347d7306e9806fcb6b99b60f443e90e3cc095c83aae9a31daa0d8954fbba83eada4add3575cb
data/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## [0.0.4](https://github.com/dergachev/vagrant-vbox-snapshot/compare/v0.0.3...v0.0.4) (Sep 23, 2013)
2
+
3
+ BACKWARDS INCOMPATIBILITIES:
4
+
5
+ - none
6
+
7
+ FEATURES:
8
+
9
+ - Add Windows compatibility [#12](https://github.com/dergachev/vagrant-vbox-snapshot/issues/12)
10
+
11
+ IMPROVEMENTS:
12
+
13
+ - Clean up `vagrant snapshot go` output when target is already in poweroff state. [#14](https://github.com/dergachev/vagrant-vbox-snapshot/pull/14)
14
+
1
15
  ## [0.0.3](https://github.com/dergachev/vagrant-vbox-snapshot/compare/v0.0.2...v0.0.3) (Sep 3, 2013)
2
16
 
3
17
  BACKWARDS INCOMPATIBILITIES:
data/DEVNOTES.md CHANGED
@@ -1,31 +1,24 @@
1
- ## Updating to vagrant 1.1 plugin API
2
-
3
- Resources:
1
+ # Developer notes for vagrant-vbox-snapshot
4
2
 
5
- * http://docs.vagrantup.com/v2/plugins/development-basics.html
6
- * http://railscasts.com/episodes/245-new-gem-with-bundler?view=asciicast (Gem tutorial)
3
+ ## Forking and hacking on vagrant-vbox-snapshot
7
4
 
8
- Example code:
9
-
10
- * https://gist.github.com/dergachev/5367385#vagrant-snapshot.rb
11
- * https://github.com/mitchellh/vagrant/issues/143#add-vagrant-snapshot-option
12
- * https://github.com/fgrehm/vagrant-notify
13
- * https://github.com/RiotGames/berkshelf-vagrant
14
- * https://github.com/mitchellh/vagrant-aws/blob/master/lib/vagrant-aws/plugin.rb
15
- * sahara 1.1 update commit: https://github.com/ryuzee/sahara/commit/b80a621a9200bb4935c782bd4e538886c42b8643
16
- * vagrant-snap: https://github.com/t9md/vagrant-snap/blob/master/lib/vagrant_snap.rb
17
- * https://github.com/dotless-de/vagrant-plugins-env/blob/master/.gitmodules
18
-
19
- Vagrant source code:
5
+ ```
6
+ # fork vagrant-vbox-snapshot on github.com, and clone locally
7
+ cd ~/code # or wherever you like to put coding projects
8
+ git clone git@github.com/USERNAME/vagrant-vbox-snapshot.git
9
+ cd vagrant-vbox-snapshot
20
10
 
21
- * https://github.com/mitchellh/vagrant/blob/master/lib/vagrant/registry.rb
22
- * https://github.com/mitchellh/vagrant/tree/master/plugins/provisioners/shell
23
- * https://github.com/mitchellh/vagrant/blob/master/lib/vagrant/plugin/v2/provisioner.rb
24
- * https://github.com/mitchellh/vagrant/blob/master/lib/vagrant/plugin/v2/command.rb
11
+ # create a new branch for your work
12
+ git checkout -b FEATURE_NAME
25
13
 
26
- ## other ideas related to snapshots
14
+ bundle install # not 100% sure this is necessary
15
+ # hack away...
16
+ # then test, possibly modifying Vagrantfile to suit scenario
17
+ vagrant up
18
+ vagrant snapshot take TEST1 # and so on...
27
19
 
28
- * http://code.chrisroberts.org/blog/2012/05/09/cooking-up-partial-run-lists-with-chef/
20
+ # then commit, push, and create pull request
21
+ ```
29
22
 
30
23
  ## Reviewing a pull request
31
24
 
@@ -41,28 +34,71 @@ git push -u origin master
41
34
 
42
35
  ## Pushing out a new release of the gem
43
36
 
37
+ Do a local build:
38
+
44
39
  ```
45
- # make commits
46
- # consider creating/updating CHANGELOG.txt
47
40
  vim lib/vagrant-vbox-snapshot/version.rb +/VERSION # increment version counter, eg to 0.0.3
48
- gem build vagrant-vbox-snapshot.gemspec # creates vagrant-vbox-snapshot-0.0.3.gem
41
+ gem build vagrant-vbox-snapshot.gemspec # creates vagrant-vbox-snapshot-0.0.3.gem
42
+ ```
49
43
 
44
+ Test the local build:
45
+
46
+ ```
50
47
  # test the gem locally, in a random vagrant project
51
48
  cd ~/code/screengif
52
49
  vagrant plugin uninstall vagrant-vbox-snapshot
53
- vagrant plugin install ~/code/vagrant-vbox-snapshot/vagrant-vbox-snapshot-0.0.3.gem
54
- # test it out, ensure basic sanity, eg for 0.0.3:
55
- vagrant snapshot list -h
56
- # cleanup
57
- vagrant plugin uninstall
50
+ vagrant plugin install ~/code/vagrant-vbox-snapshot/vagrant-vbox-snapshot-VERSION.gem # replace VERSION with 0.0.3
51
+ vagrant plugin list | grep snapshot # ensure that correct version is installed
52
+ vagrant snapshot list -h # quick sanity check
53
+ vagrant plugin uninstall # cleanup
54
+ ```
55
+
56
+ Now commit and tag:
57
+
58
+
59
+ ```
60
+ cd ~/code/vagrant-vbox-snapshot
61
+
62
+ vim CHANGELOG.txt # update CHANGELOG
63
+ # git commit everything
58
64
 
59
- cd ~/code/vagrant-vbox-snapshot/
60
65
  gem push vagrant-vbox-snapshot-0.0.3.gem
61
- git tag 0.0.3
66
+ git tag vN.N.N # eg v0.0.3
62
67
  git push --tags
68
+ ```
63
69
 
64
70
  # test installing from rubygems
65
71
  cd ~/code/screengif
66
72
  vagrant plugin install vagrant-vbox-snapshot
67
73
  vagrant plugin list
68
74
  ```
75
+
76
+
77
+ ## Updating to vagrant 1.1 plugin API
78
+
79
+ Resources:
80
+
81
+ * http://docs.vagrantup.com/v2/plugins/development-basics.html
82
+ * http://railscasts.com/episodes/245-new-gem-with-bundler?view=asciicast (Gem tutorial)
83
+
84
+ Example code:
85
+
86
+ * https://gist.github.com/dergachev/5367385#vagrant-snapshot.rb
87
+ * https://github.com/mitchellh/vagrant/issues/143#add-vagrant-snapshot-option
88
+ * https://github.com/fgrehm/vagrant-notify
89
+ * https://github.com/RiotGames/berkshelf-vagrant
90
+ * https://github.com/mitchellh/vagrant-aws/blob/master/lib/vagrant-aws/plugin.rb
91
+ * sahara 1.1 update commit: https://github.com/ryuzee/sahara/commit/b80a621a9200bb4935c782bd4e538886c42b8643
92
+ * vagrant-snap: https://github.com/t9md/vagrant-snap/blob/master/lib/vagrant_snap.rb
93
+ * https://github.com/dotless-de/vagrant-plugins-env/blob/master/.gitmodules
94
+
95
+ Vagrant source code:
96
+
97
+ * https://github.com/mitchellh/vagrant/blob/master/lib/vagrant/registry.rb
98
+ * https://github.com/mitchellh/vagrant/tree/master/plugins/provisioners/shell
99
+ * https://github.com/mitchellh/vagrant/blob/master/lib/vagrant/plugin/v2/provisioner.rb
100
+ * https://github.com/mitchellh/vagrant/blob/master/lib/vagrant/plugin/v2/command.rb
101
+
102
+ ## other ideas related to snapshots
103
+
104
+ * http://code.chrisroberts.org/blog/2012/05/09/cooking-up-partial-run-lists-with-chef/
data/README.md CHANGED
@@ -21,7 +21,6 @@ The following commands are added by this plugin:
21
21
  ## Caveats
22
22
 
23
23
  * Not compatible with Vagrant <1.1. If you need this, try [another solution](#other-solutions).
24
- * Only minimally tested.
25
24
 
26
25
  ## Other solutions
27
26
 
@@ -15,11 +15,22 @@ module VagrantPlugins
15
15
  return if !argv
16
16
 
17
17
  with_target_vms(argv, single_target: true) 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"
18
+
19
+ if machine.state.id != :poweroff
20
+ machine.provider.driver.execute("controlvm", machine.id, "poweroff")
21
+ end
22
+
23
+ machine.provider.driver.execute("snapshot", machine.id, "restorecurrent") do |type, data|
24
+ machine.env.ui.info(data, :color => type == :stderr ? :red : :white, :new_line => false)
25
+ end
26
+
27
+ if options[:reload]
28
+ @env.ui.info("Reloading VM, since --reload passed")
29
+ machine.action(:reload, :provision_enabled => false)
30
+ else
31
+ @env.ui.info("Starting restored VM")
32
+ machine.action(:up, :provision_enabled => false)
33
+ end
23
34
  end
24
35
  end
25
36
  end
@@ -1,3 +1,6 @@
1
+ # this command is very slow
2
+ # consider removing it; or replacing with this idea: http://superuser.com/questions/590968/quickest-way-to-merge-snapshots-in-virtualbox
3
+
1
4
  require_relative 'multi_vm_args'
2
5
 
3
6
  module VagrantPlugins
@@ -10,7 +13,7 @@ module VagrantPlugins
10
13
  options = {}
11
14
 
12
15
  opts = OptionParser.new do |opts|
13
- opts.banner = "Delete snapshot"
16
+ opts.banner = "Delete snapshot (warning: this is a very slow operation)"
14
17
  opts.separator ""
15
18
  opts.separator "Usage: vagrant snapshot delete [vm-name] <SNAPSHOT_NAME>"
16
19
  end
@@ -22,8 +25,9 @@ module VagrantPlugins
22
25
  return if !snapshot_name
23
26
 
24
27
  with_target_vms(vm_name, single_target: true) do |machine|
25
- vm_id = machine.id
26
- system "VBoxManage snapshot #{vm_id} delete #{snapshot_name}"
28
+ machine.provider.driver.execute("snapshot", machine.id, "delete", snapshot_name) do |type, data|
29
+ machine.env.ui.info(data, :color => type == :stderr ? :red : :white)
30
+ end
27
31
  end
28
32
  end
29
33
  end
@@ -6,9 +6,9 @@ module VagrantPlugins
6
6
  class Go < Vagrant.plugin(2, :command)
7
7
  include MultiVmArgs
8
8
 
9
- def get_shared_folders(vm_id)
9
+ def get_shared_folders(machine)
10
10
  shared_folders = []
11
- info = `VBoxManage showvminfo #{vm_id} --machinereadable`
11
+ info = machine.provider.driver.execute("showvminfo", machine.id, "--machinereadable")
12
12
  info.split("\n").each do |line|
13
13
  if line =~ /^SharedFolderNameMachineMapping\d+="(.+?)"$/
14
14
  shared_folders << $1.to_s
@@ -17,14 +17,13 @@ module VagrantPlugins
17
17
  return shared_folders
18
18
  end
19
19
 
20
- def before_restore(vm_id)
21
- @shared_folders_before = get_shared_folders(vm_id)
20
+ def before_restore(machine)
21
+ @shared_folders_before = get_shared_folders(machine)
22
22
  end
23
23
 
24
- def after_restore(vm_id)
25
- @shared_folders_after = get_shared_folders(vm_id)
24
+ def after_restore(machine)
25
+ @shared_folders_after = get_shared_folders(machine)
26
26
  if @shared_folders_before != @shared_folders_after
27
- missing_folders = @shared_folders_before - @shared_folders_after
28
27
  @env.ui.warn("Synced folders have changed after restoring snapshot. Consider running 'vagrant reload'.")
29
28
  @env.ui.warn(" Before restore: #{@shared_folders_before}")
30
29
  @env.ui.warn(" After restore: #{@shared_folders_after}")
@@ -55,21 +54,26 @@ module VagrantPlugins
55
54
  with_target_vms(vm_name, single_target: true) do |machine|
56
55
  vm_id = machine.id
57
56
 
58
- before_restore(vm_id)
57
+ before_restore(machine)
59
58
 
60
- system "VBoxManage controlvm #{vm_id} poweroff"
61
- system "VBoxManage snapshot #{vm_id} restore #{snapshot_name}"
59
+ if machine.state.id != :poweroff
60
+ @env.ui.info("Powering off machine #{vm_id}")
61
+ machine.provider.driver.execute("controlvm", machine.id, "poweroff")
62
+ end
63
+
64
+ machine.provider.driver.execute("snapshot", machine.id, "restore", snapshot_name) do |type, data|
65
+ machine.env.ui.info(data, :color => type == :stderr ? :red : :white, :new_line => false)
66
+ end
62
67
 
63
68
  if options[:reload]
64
- @env.ui.info("Reloading VM")
69
+ @env.ui.info("Reloading VM, since --reload passed")
65
70
  machine.action(:reload, :provision_enabled => false)
66
71
  else
67
- @env.ui.info("Starting VM from restored snapshot (#{snapshot_name})")
68
- @logger.info("starting VM")
69
- system "VBoxManage startvm #{vm_id} --type headless"
72
+ @env.ui.info("Starting restored VM")
73
+ machine.action(:up, :provision_enabled => false)
70
74
  end
71
75
 
72
- after_restore(vm_id)
76
+ after_restore(machine)
73
77
  end
74
78
  end
75
79
  end
@@ -15,8 +15,11 @@ module VagrantPlugins
15
15
  return if !argv
16
16
 
17
17
  with_target_vms(argv, single_target: true) do |machine|
18
- vm_id = machine.id
19
- system "VBoxManage snapshot #{vm_id} list --details"
18
+ puts "Listing snapshots for '#{machine.name}':"
19
+
20
+ res = machine.provider.driver.execute("snapshot", machine.id, "list", "--details") do |type, data|
21
+ machine.env.ui.info(data, :color => :green) if (type == :stdout)
22
+ end
20
23
  end
21
24
  end
22
25
  end
@@ -22,8 +22,10 @@ module VagrantPlugins
22
22
  return if !snapshot_name
23
23
 
24
24
  with_target_vms(vm_name, single_target: true) do |machine|
25
- vm_id = machine.id
26
- system "VBoxManage snapshot #{vm_id} take #{snapshot_name} --pause"
25
+ machine.env.ui.info("Taking snapshot #{snapshot_name}")
26
+ machine.provider.driver.execute("snapshot", machine.id, "take", snapshot_name, "--pause") do |type, data|
27
+ machine.env.ui.info(data, :color => type == :stderr ? :red : :white, :new_line => false)
28
+ end
27
29
  end
28
30
  end
29
31
  end
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
2
  module VBoxSnapshot
3
- VERSION = "0.0.3"
3
+ VERSION = "0.0.4"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-vbox-snapshot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Dergachev
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-03 00:00:00.000000000 Z
11
+ date: 2013-09-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler