sahara 0.0.16 → 0.0.17
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/.gitignore +2 -0
- data/lib/sahara/command/commit.rb +1 -0
- data/lib/sahara/command/off.rb +1 -0
- data/lib/sahara/command/on.rb +1 -0
- data/lib/sahara/command/rollback.rb +3 -3
- data/lib/sahara/command/root.rb +2 -2
- data/lib/sahara/errors.rb +4 -0
- data/lib/sahara/session/factory.rb +6 -0
- data/lib/sahara/session/libvirt.rb +13 -1
- data/lib/sahara/session/parallels.rb +70 -0
- data/lib/sahara/session/virtualbox.rb +4 -3
- data/lib/sahara/session/vmware.rb +58 -0
- data/lib/sahara/version.rb +1 -1
- data/sahara.gemspec +0 -1
- metadata +5 -19
data/.gitignore
CHANGED
data/lib/sahara/command/off.rb
CHANGED
data/lib/sahara/command/on.rb
CHANGED
@@ -25,10 +25,10 @@ module Sahara
|
|
25
25
|
end
|
26
26
|
if !ses.is_snapshot_mode_on? then
|
27
27
|
puts "[#{machine.name}] Not sandbox mode now"
|
28
|
-
|
28
|
+
else
|
29
|
+
puts "[#{machine.name}] Rolling back the virtual machine..."
|
30
|
+
ses.rollback
|
29
31
|
end
|
30
|
-
ses.rollback
|
31
|
-
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
data/lib/sahara/command/root.rb
CHANGED
@@ -55,7 +55,7 @@ module Sahara
|
|
55
55
|
# Prints the help out for this command
|
56
56
|
def help
|
57
57
|
opts = OptionParser.new do |o|
|
58
|
-
o.banner = "Usage: vagrant
|
58
|
+
o.banner = "Usage: vagrant sandbox <command> [<args>]"
|
59
59
|
o.separator ""
|
60
60
|
o.separator "Available subcommands:"
|
61
61
|
|
@@ -69,7 +69,7 @@ module Sahara
|
|
69
69
|
end
|
70
70
|
|
71
71
|
o.separator ""
|
72
|
-
o.separator "For help on any individual command run `vagrant
|
72
|
+
o.separator "For help on any individual command run `vagrant sandbox <command> -h`"
|
73
73
|
end
|
74
74
|
|
75
75
|
@env.ui.info(opts.help, :prefix => false)
|
data/lib/sahara/errors.rb
CHANGED
@@ -11,6 +11,12 @@ module Sahara
|
|
11
11
|
when :libvirt
|
12
12
|
require_relative "libvirt"
|
13
13
|
Libvirt.new(machine)
|
14
|
+
when :parallels
|
15
|
+
require_relative "parallels"
|
16
|
+
Parallels.new(machine)
|
17
|
+
when :vmware_fusion
|
18
|
+
require_relative "vmware"
|
19
|
+
VMWare.new(machine)
|
14
20
|
else
|
15
21
|
raise Sahara::Errors::ProviderNotSupported
|
16
22
|
end
|
@@ -8,7 +8,7 @@ module Sahara
|
|
8
8
|
@machine=machine
|
9
9
|
@sandboxname="sahara-sandbox"
|
10
10
|
@connection=connect_to_libvirt
|
11
|
-
@domain
|
11
|
+
@domain=get_domain
|
12
12
|
end
|
13
13
|
|
14
14
|
# based on VagrantPlugins::ProviderLibvirt::Action::ConnectLibvirt
|
@@ -18,6 +18,10 @@ module Sahara
|
|
18
18
|
|
19
19
|
# Setup connection uri.
|
20
20
|
uri = config.driver
|
21
|
+
if uri == "kvm"
|
22
|
+
uri = "qemu"
|
23
|
+
end
|
24
|
+
|
21
25
|
if config.connect_via_ssh
|
22
26
|
uri << '+ssh://'
|
23
27
|
if config.username
|
@@ -53,6 +57,14 @@ module Sahara
|
|
53
57
|
end
|
54
58
|
end
|
55
59
|
|
60
|
+
def get_domain
|
61
|
+
if is_vm_created?
|
62
|
+
return @connection.client.lookup_domain_by_uuid(@machine.id)
|
63
|
+
else
|
64
|
+
return nil
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
56
68
|
def get_snapshot_if_exists
|
57
69
|
# if we can get snapshot description without exception it exists
|
58
70
|
begin
|
@@ -0,0 +1,70 @@
|
|
1
|
+
module Sahara
|
2
|
+
module Session
|
3
|
+
class Parallels
|
4
|
+
|
5
|
+
def initialize(machine)
|
6
|
+
@machine=machine
|
7
|
+
@instance_id = @machine.id
|
8
|
+
@prlctl="prlctl"
|
9
|
+
@sandboxname="sahara-sandbox"
|
10
|
+
@snapshots=list_snapshots
|
11
|
+
end
|
12
|
+
|
13
|
+
def list_snapshots
|
14
|
+
snapshotlist = Hash.new
|
15
|
+
output = `#{@prlctl} snapshot-list "#{@instance_id}" --tree`
|
16
|
+
snapshot_ids=output.scan(/\{([\w-]*)?\}/).flatten
|
17
|
+
snapshot_ids.each do |id|
|
18
|
+
res = `#{@prlctl} snapshot-list "#{@instance_id}" -i "#{id}"`
|
19
|
+
if res =~ (/^Name:\s(.*)$/)
|
20
|
+
snapshotlist[$1] = id
|
21
|
+
end
|
22
|
+
end
|
23
|
+
snapshotlist
|
24
|
+
end
|
25
|
+
|
26
|
+
def get_snapshot_id
|
27
|
+
# if we can get snapshot description without exception it exists
|
28
|
+
begin
|
29
|
+
snapshot_id = @snapshots.fetch(@sandboxname)
|
30
|
+
rescue
|
31
|
+
raise Sahara::Errors::SnapshotMissing
|
32
|
+
end
|
33
|
+
return snapshot_id
|
34
|
+
end
|
35
|
+
|
36
|
+
def is_snapshot_mode_on?
|
37
|
+
begin
|
38
|
+
snapshot_id = get_snapshot_id
|
39
|
+
rescue Sahara::Errors::SnapshotMissing
|
40
|
+
return false
|
41
|
+
end
|
42
|
+
return true
|
43
|
+
end
|
44
|
+
|
45
|
+
def off
|
46
|
+
snapshot_id = get_snapshot_id
|
47
|
+
`#{@prlctl} snapshot-delete "#{@instance_id}" --id "#{snapshot_id}" `
|
48
|
+
end
|
49
|
+
|
50
|
+
def on
|
51
|
+
`#{@prlctl} snapshot "#{@instance_id}" --name "#{@sandboxname}"`
|
52
|
+
end
|
53
|
+
|
54
|
+
def commit
|
55
|
+
off
|
56
|
+
on
|
57
|
+
end
|
58
|
+
|
59
|
+
def rollback
|
60
|
+
snapshot_id = get_snapshot_id
|
61
|
+
`#{@prlctl} snapshot-switch "#{@instance_id}" --id "#{snapshot_id}" `
|
62
|
+
end
|
63
|
+
|
64
|
+
def is_vm_created?
|
65
|
+
return !@machine.id.nil?
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -11,10 +11,11 @@ module Sahara
|
|
11
11
|
|
12
12
|
def determine_vboxcmd
|
13
13
|
if windows?
|
14
|
-
# On Windows, we use the VBOX_INSTALL_PATH environmental
|
15
|
-
if ENV.has_key?("VBOX_INSTALL_PATH")
|
14
|
+
# On Windows, we use the VBOX_INSTALL_PATH and VBOX_MSI_INSTALL_PATH environmental
|
15
|
+
if ENV.has_key?("VBOX_INSTALL_PATH") || ENV.has_key?("VBOX_MSI_INSTALL_PATH")
|
16
16
|
# The path usually ends with a \ but we make sure here
|
17
|
-
path =
|
17
|
+
path = ENV["VBOX_INSTALL_PATH"] || ENV["VBOX_MSI_INSTALL_PATH"]
|
18
|
+
path = File.join(path, "VBoxManage.exe")
|
18
19
|
return "\"#{path}\""
|
19
20
|
end
|
20
21
|
else
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Sahara
|
2
|
+
module Session
|
3
|
+
class VMWare
|
4
|
+
|
5
|
+
def initialize(machine)
|
6
|
+
@machine=machine
|
7
|
+
@vmx_path=@machine.provider.driver.vmx_path
|
8
|
+
@vmwarecmd=@machine.provider.driver.instance_variable_get(:@vmrun_path).to_s.gsub(" ", "\\ ")
|
9
|
+
@sandboxname="sahara-sandbox"
|
10
|
+
if @machine.provider.driver.class.to_s != "HashiCorp::VagrantVMwarefusion::Driver::Fusion"
|
11
|
+
raise Sahara::Errors::ProviderNotSupported
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def list_snapshots
|
16
|
+
output = `#{@vmwarecmd} listSnapshots "#{@vmx_path}"`
|
17
|
+
output.rstrip.split(/\r?\n/).map {|line| line.chomp }
|
18
|
+
end
|
19
|
+
|
20
|
+
def is_snapshot_mode_on?
|
21
|
+
snapshots=self.list_snapshots
|
22
|
+
return snapshots.include?(@sandboxname)
|
23
|
+
end
|
24
|
+
|
25
|
+
def off
|
26
|
+
`#{@vmwarecmd} -T ws deleteSnapshot "#{@vmx_path}" "#{@sandboxname}"`
|
27
|
+
end
|
28
|
+
|
29
|
+
def on
|
30
|
+
`#{@vmwarecmd} -T ws snapshot "#{@vmx_path}" "#{@sandboxname}"`
|
31
|
+
end
|
32
|
+
|
33
|
+
def commit
|
34
|
+
`#{@vmwarecmd} -T ws deleteSnapshot "#{@vmx_path}" "#{@sandboxname}"`
|
35
|
+
`#{@vmwarecmd} -T ws snapshot "#{@vmx_path}" "#{@sandboxname}"`
|
36
|
+
end
|
37
|
+
|
38
|
+
def rollback
|
39
|
+
`#{@vmwarecmd} -T ws revertToSnapshot "#{@vmx_path}" "#{@sandboxname}" `
|
40
|
+
sleep 2
|
41
|
+
|
42
|
+
gui_boot = @machine.provider_config.gui
|
43
|
+
if gui_boot
|
44
|
+
boot_mode = "gui"
|
45
|
+
else
|
46
|
+
boot_mode = "nogui"
|
47
|
+
end
|
48
|
+
# restore boot mode
|
49
|
+
`#{@vmwarecmd} -T ws start "#{@vmx_path}" #{boot_mode} `
|
50
|
+
end
|
51
|
+
|
52
|
+
def is_vm_created?
|
53
|
+
return !@machine.id.nil?
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/lib/sahara/version.rb
CHANGED
data/sahara.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sahara
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.17
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-06-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: popen4
|
@@ -27,22 +27,6 @@ dependencies:
|
|
27
27
|
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: 0.1.2
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
name: thor
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
|
-
requirements:
|
35
|
-
- - ! '>'
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: '0.14'
|
38
|
-
type: :runtime
|
39
|
-
prerelease: false
|
40
|
-
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ! '>'
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: '0.14'
|
46
30
|
- !ruby/object:Gem::Dependency
|
47
31
|
name: bundler
|
48
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,7 +64,9 @@ files:
|
|
80
64
|
- lib/sahara/errors.rb
|
81
65
|
- lib/sahara/session/factory.rb
|
82
66
|
- lib/sahara/session/libvirt.rb
|
67
|
+
- lib/sahara/session/parallels.rb
|
83
68
|
- lib/sahara/session/virtualbox.rb
|
69
|
+
- lib/sahara/session/vmware.rb
|
84
70
|
- lib/sahara/version.rb
|
85
71
|
- locales/en.yml
|
86
72
|
- sahara.gemspec
|
@@ -98,7 +84,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
98
84
|
version: '0'
|
99
85
|
segments:
|
100
86
|
- 0
|
101
|
-
hash:
|
87
|
+
hash: 55792310888730998
|
102
88
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
103
89
|
none: false
|
104
90
|
requirements:
|