sahara 0.0.15 → 0.0.16
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.rb +6 -1
- data/lib/sahara/command/commit.rb +12 -3
- data/lib/sahara/command/off.rb +12 -3
- data/lib/sahara/command/on.rb +12 -5
- data/lib/sahara/command/rollback.rb +12 -3
- data/lib/sahara/command/root.rb +1 -0
- data/lib/sahara/command/status.rb +12 -5
- data/lib/sahara/errors.rb +33 -0
- data/lib/sahara/session/factory.rb +20 -0
- data/lib/sahara/session/libvirt.rb +124 -0
- data/lib/sahara/session/virtualbox.rb +83 -0
- data/lib/sahara/version.rb +1 -1
- data/locales/en.yml +15 -0
- metadata +8 -4
- data/lib/sahara/session.rb +0 -135
data/.gitignore
CHANGED
data/lib/sahara.rb
CHANGED
@@ -2,7 +2,6 @@
|
|
2
2
|
# vim: set fileencoding=utf-8
|
3
3
|
|
4
4
|
require "vagrant"
|
5
|
-
require File.expand_path("../sahara/session", __FILE__)
|
6
5
|
|
7
6
|
module Sahara
|
8
7
|
class Plugin < Vagrant.plugin("2")
|
@@ -12,8 +11,14 @@ module Sahara
|
|
12
11
|
DESC
|
13
12
|
|
14
13
|
command("sandbox") do
|
14
|
+
setup_i18n
|
15
15
|
require File.expand_path("../sahara/command/root", __FILE__)
|
16
16
|
Command::Root
|
17
17
|
end
|
18
|
+
|
19
|
+
def self.setup_i18n
|
20
|
+
I18n.load_path << File.expand_path('../../locales/en.yml', __FILE__)
|
21
|
+
I18n.reload!
|
22
|
+
end
|
18
23
|
end
|
19
24
|
end
|
@@ -16,10 +16,19 @@ module Sahara
|
|
16
16
|
argv = parse_options(opts)
|
17
17
|
return if !argv
|
18
18
|
|
19
|
-
ses = Sahara::Session::Command.new(@app, @env)
|
20
|
-
|
21
19
|
with_target_vms(argv, :reverse => true) do |machine|
|
22
|
-
|
20
|
+
|
21
|
+
ses = Sahara::Session::Factory.create(machine)
|
22
|
+
if !ses.is_vm_created? then
|
23
|
+
puts "[#{machine.name}] VM is not created"
|
24
|
+
next
|
25
|
+
end
|
26
|
+
if ses.is_snapshot_mode_on? then
|
27
|
+
ses.commit
|
28
|
+
else
|
29
|
+
puts "[#{machine.name}] Not sandbox mode now"
|
30
|
+
end
|
31
|
+
|
23
32
|
end
|
24
33
|
end
|
25
34
|
end
|
data/lib/sahara/command/off.rb
CHANGED
@@ -16,10 +16,19 @@ module Sahara
|
|
16
16
|
argv = parse_options(opts)
|
17
17
|
return if !argv
|
18
18
|
|
19
|
-
ses = Sahara::Session::Command.new(@app, @env)
|
20
|
-
|
21
19
|
with_target_vms(argv, :reverse => true) do |machine|
|
22
|
-
|
20
|
+
|
21
|
+
ses = Sahara::Session::Factory.create(machine)
|
22
|
+
if !ses.is_vm_created? then
|
23
|
+
puts "[#{machine.name}] VM is not created"
|
24
|
+
next
|
25
|
+
end
|
26
|
+
if ses.is_snapshot_mode_on? then
|
27
|
+
ses.off
|
28
|
+
else
|
29
|
+
puts "[#{machine.name}] Not sandbox mode now"
|
30
|
+
end
|
31
|
+
|
23
32
|
end
|
24
33
|
end
|
25
34
|
end
|
data/lib/sahara/command/on.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require "optparse"
|
2
|
-
|
3
1
|
module Sahara
|
4
2
|
module Command
|
5
3
|
class On < Vagrant.plugin("2", :command)
|
@@ -18,10 +16,19 @@ module Sahara
|
|
18
16
|
argv = parse_options(opts)
|
19
17
|
return if !argv
|
20
18
|
|
21
|
-
ses = Sahara::Session::Command.new(@app, @env)
|
22
|
-
|
23
19
|
with_target_vms(argv, :reverse => true) do |machine|
|
24
|
-
|
20
|
+
|
21
|
+
ses = Sahara::Session::Factory.create(machine)
|
22
|
+
if !ses.is_vm_created? then
|
23
|
+
puts "[#{machine.name}] VM is not created"
|
24
|
+
next
|
25
|
+
end
|
26
|
+
if !ses.is_snapshot_mode_on? then
|
27
|
+
ses.on
|
28
|
+
else
|
29
|
+
puts "[#{machine.name}] Already sandbox mode"
|
30
|
+
end
|
31
|
+
|
25
32
|
end
|
26
33
|
end
|
27
34
|
end
|
@@ -16,10 +16,19 @@ module Sahara
|
|
16
16
|
argv = parse_options(opts)
|
17
17
|
return if !argv
|
18
18
|
|
19
|
-
ses = Sahara::Session::Command.new(@app, @env)
|
20
|
-
|
21
19
|
with_target_vms(argv, :reverse => true) do |machine|
|
22
|
-
|
20
|
+
|
21
|
+
ses = Sahara::Session::Factory.create(machine)
|
22
|
+
if !ses.is_vm_created? then
|
23
|
+
puts "[#{machine.name}] VM is not created"
|
24
|
+
next
|
25
|
+
end
|
26
|
+
if !ses.is_snapshot_mode_on? then
|
27
|
+
puts "[#{machine.name}] Not sandbox mode now"
|
28
|
+
next
|
29
|
+
end
|
30
|
+
ses.rollback
|
31
|
+
|
23
32
|
end
|
24
33
|
end
|
25
34
|
end
|
data/lib/sahara/command/root.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'optparse'
|
2
|
-
|
3
1
|
module Sahara
|
4
2
|
module Command
|
5
3
|
class Status < Vagrant.plugin("2", :command)
|
@@ -19,10 +17,19 @@ module Sahara
|
|
19
17
|
argv = parse_options(opts)
|
20
18
|
return if !argv
|
21
19
|
|
22
|
-
ses = Sahara::Session::Command.new(@app, @env)
|
23
|
-
|
24
20
|
with_target_vms(argv, :reverse => true) do |machine|
|
25
|
-
|
21
|
+
|
22
|
+
ses = Sahara::Session::Factory.create(machine)
|
23
|
+
if !ses.is_vm_created? then
|
24
|
+
puts "[#{machine.name}] VM is not created"
|
25
|
+
next
|
26
|
+
end
|
27
|
+
if ses.is_snapshot_mode_on? then
|
28
|
+
puts "[#{machine.name}] Sandbox mode is on"
|
29
|
+
else
|
30
|
+
puts "[#{machine.name}] Sandbox mode is off"
|
31
|
+
end
|
32
|
+
|
26
33
|
end
|
27
34
|
end
|
28
35
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Sahara
|
2
|
+
module Errors
|
3
|
+
|
4
|
+
class Error < Vagrant::Errors::VagrantError
|
5
|
+
error_namespace("sahara.errors")
|
6
|
+
end
|
7
|
+
|
8
|
+
class ProviderNotSupported < Sahara::Errors::Error
|
9
|
+
error_key("provider_not_supported")
|
10
|
+
end
|
11
|
+
|
12
|
+
class LibvirtConnectionError < Sahara::Errors::Error
|
13
|
+
error_key("libvirt_connection_error")
|
14
|
+
end
|
15
|
+
|
16
|
+
class SnapshotMissing < Sahara::Errors::Error
|
17
|
+
error_key("snapshot_missing")
|
18
|
+
end
|
19
|
+
|
20
|
+
class SnapshotDeletionError < Sahara::Errors::Error
|
21
|
+
error_key("snapshot_deletion_error")
|
22
|
+
end
|
23
|
+
|
24
|
+
class SnapshotCreationError < Sahara::Errors::Error
|
25
|
+
error_key("snapshot_creation_error")
|
26
|
+
end
|
27
|
+
|
28
|
+
class SnapshotReversionError < Sahara::Errors::Error
|
29
|
+
error_key("snapshot_reversion_error")
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require "sahara/errors"
|
2
|
+
|
3
|
+
module Sahara
|
4
|
+
module Session
|
5
|
+
class Factory
|
6
|
+
def self.create(machine)
|
7
|
+
case machine.provider_name
|
8
|
+
when :virtualbox
|
9
|
+
require_relative "virtualbox"
|
10
|
+
Virtualbox.new(machine)
|
11
|
+
when :libvirt
|
12
|
+
require_relative "libvirt"
|
13
|
+
Libvirt.new(machine)
|
14
|
+
else
|
15
|
+
raise Sahara::Errors::ProviderNotSupported
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
require "fog"
|
2
|
+
|
3
|
+
module Sahara
|
4
|
+
module Session
|
5
|
+
class Libvirt
|
6
|
+
|
7
|
+
def initialize(machine)
|
8
|
+
@machine=machine
|
9
|
+
@sandboxname="sahara-sandbox"
|
10
|
+
@connection=connect_to_libvirt
|
11
|
+
@domain = @connection.client.lookup_domain_by_uuid(@machine.id)
|
12
|
+
end
|
13
|
+
|
14
|
+
# based on VagrantPlugins::ProviderLibvirt::Action::ConnectLibvirt
|
15
|
+
def connect_to_libvirt
|
16
|
+
# Get config options for libvirt provider.
|
17
|
+
config = @machine.provider_config
|
18
|
+
|
19
|
+
# Setup connection uri.
|
20
|
+
uri = config.driver
|
21
|
+
if config.connect_via_ssh
|
22
|
+
uri << '+ssh://'
|
23
|
+
if config.username
|
24
|
+
uri << config.username + '@'
|
25
|
+
end
|
26
|
+
|
27
|
+
if config.host
|
28
|
+
uri << config.host
|
29
|
+
else
|
30
|
+
uri << 'localhost'
|
31
|
+
end
|
32
|
+
else
|
33
|
+
uri << '://'
|
34
|
+
uri << config.host if config.host
|
35
|
+
end
|
36
|
+
|
37
|
+
uri << '/system?no_verify=1'
|
38
|
+
# set ssh key for access to libvirt host
|
39
|
+
home_dir = `echo ${HOME}`.chomp
|
40
|
+
uri << "&keyfile=#{home_dir}/.ssh/id_rsa"
|
41
|
+
|
42
|
+
conn_attr = {}
|
43
|
+
conn_attr[:provider] = 'libvirt'
|
44
|
+
conn_attr[:libvirt_uri] = uri
|
45
|
+
conn_attr[:libvirt_username] = config.username if config.username
|
46
|
+
conn_attr[:libvirt_password] = config.password if config.password
|
47
|
+
|
48
|
+
begin
|
49
|
+
Fog::Compute.new(conn_attr)
|
50
|
+
rescue Fog::Errors::Error => e
|
51
|
+
raise Sahara::Errors::LibvirtConnectionError,
|
52
|
+
:error_message => e.message
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def get_snapshot_if_exists
|
57
|
+
# if we can get snapshot description without exception it exists
|
58
|
+
begin
|
59
|
+
snapshot = @domain.lookup_snapshot_by_name(@sandboxname)
|
60
|
+
snapshot_desc = snapshot.xml_desc
|
61
|
+
rescue
|
62
|
+
raise Sahara::Errors::SnapshotMissing
|
63
|
+
end
|
64
|
+
return snapshot
|
65
|
+
end
|
66
|
+
|
67
|
+
def is_snapshot_mode_on?
|
68
|
+
begin
|
69
|
+
snapshot = get_snapshot_if_exists
|
70
|
+
rescue Sahara::Errors::SnapshotMissing
|
71
|
+
return false
|
72
|
+
end
|
73
|
+
return true
|
74
|
+
end
|
75
|
+
|
76
|
+
def off
|
77
|
+
snapshot = get_snapshot_if_exists
|
78
|
+
begin
|
79
|
+
snapshot.delete
|
80
|
+
rescue Fog::Errors::Error => e
|
81
|
+
raise Sahara::Errors::SnapshotDeletionError,
|
82
|
+
:error_message => e.message
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def on
|
87
|
+
snapshot_desc = <<-EOF
|
88
|
+
<domainsnapshot>
|
89
|
+
<name>sahara-sandbox</name>
|
90
|
+
<description>Snapshot for vagrant sandbox</description>
|
91
|
+
</domainsnapshot>
|
92
|
+
EOF
|
93
|
+
begin
|
94
|
+
@domain.snapshot_create_xml(snapshot_desc)
|
95
|
+
rescue Fog::Errors::Error => e
|
96
|
+
raise Sahara::Errors::SnapshotCreationError,
|
97
|
+
:error_message => e.message
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def commit
|
102
|
+
off
|
103
|
+
on
|
104
|
+
end
|
105
|
+
|
106
|
+
def rollback
|
107
|
+
snapshot = get_snapshot_if_exists
|
108
|
+
begin
|
109
|
+
# 4 is VIR_DOMAIN_SNAPSHOT_REVERT_FORCE
|
110
|
+
# needed due to https://bugzilla.redhat.com/show_bug.cgi?id=1006886
|
111
|
+
@domain.revert_to_snapshot(snapshot, 4)
|
112
|
+
rescue Fog::Errors::Error => e
|
113
|
+
raise Sahara::Errors::SnapshotReversionError,
|
114
|
+
:error_message => e.message
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def is_vm_created?
|
119
|
+
return !@machine.id.nil?
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
module Sahara
|
2
|
+
module Session
|
3
|
+
class Virtualbox
|
4
|
+
|
5
|
+
def initialize(machine)
|
6
|
+
@machine=machine
|
7
|
+
@instance_id = @machine.id
|
8
|
+
@vboxcmd=determine_vboxcmd
|
9
|
+
@sandboxname="sahara-sandbox"
|
10
|
+
end
|
11
|
+
|
12
|
+
def determine_vboxcmd
|
13
|
+
if windows?
|
14
|
+
# On Windows, we use the VBOX_INSTALL_PATH environmental
|
15
|
+
if ENV.has_key?("VBOX_INSTALL_PATH")
|
16
|
+
# The path usually ends with a \ but we make sure here
|
17
|
+
path = File.join(ENV["VBOX_INSTALL_PATH"], "VBoxManage.exe")
|
18
|
+
return "\"#{path}\""
|
19
|
+
end
|
20
|
+
else
|
21
|
+
# for other platforms assume it is on the PATH
|
22
|
+
return "VBoxManage"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def windows?
|
27
|
+
%W[mingw mswin].each do |text|
|
28
|
+
return true if RbConfig::CONFIG["host_os"].downcase.include?(text)
|
29
|
+
end
|
30
|
+
false
|
31
|
+
end
|
32
|
+
|
33
|
+
def list_snapshots
|
34
|
+
snapshotlist=Array.new
|
35
|
+
output = `#{@vboxcmd} showvminfo --machinereadable "#{@instance_id}"`
|
36
|
+
snapshotresult=output.scan(/SnapshotName.*=(.*)/).flatten
|
37
|
+
snapshotresult.each do |result|
|
38
|
+
clean=result.gsub(/\"/,'').chomp
|
39
|
+
snapshotlist << clean
|
40
|
+
end
|
41
|
+
snapshotlist
|
42
|
+
end
|
43
|
+
|
44
|
+
def is_snapshot_mode_on?
|
45
|
+
snapshots=self.list_snapshots
|
46
|
+
return snapshots.include?(@sandboxname)
|
47
|
+
end
|
48
|
+
|
49
|
+
def off
|
50
|
+
`#{@vboxcmd} snapshot "#{@instance_id}" delete "#{@sandboxname}" `
|
51
|
+
end
|
52
|
+
|
53
|
+
def on
|
54
|
+
`#{@vboxcmd} snapshot "#{@instance_id}" take "#{@sandboxname}" --pause`
|
55
|
+
end
|
56
|
+
|
57
|
+
def commit
|
58
|
+
`#{@vboxcmd} snapshot "#{@instance_id}" delete "#{@sandboxname}"`
|
59
|
+
`#{@vboxcmd} snapshot "#{@instance_id}" take "#{@sandboxname}" --pause`
|
60
|
+
end
|
61
|
+
|
62
|
+
def rollback
|
63
|
+
`#{@vboxcmd} controlvm "#{@instance_id}" poweroff `
|
64
|
+
sleep 2
|
65
|
+
`#{@vboxcmd} snapshot "#{@instance_id}" restore "#{@sandboxname}"`
|
66
|
+
|
67
|
+
gui_boot = @machine.provider_config.gui
|
68
|
+
if gui_boot
|
69
|
+
boot_mode = "gui"
|
70
|
+
else
|
71
|
+
boot_mode = "headless"
|
72
|
+
end
|
73
|
+
# restore boot mode
|
74
|
+
`#{@vboxcmd} startvm --type #{boot_mode} "#{@instance_id}" `
|
75
|
+
end
|
76
|
+
|
77
|
+
def is_vm_created?
|
78
|
+
return !@machine.id.nil?
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
data/lib/sahara/version.rb
CHANGED
data/locales/en.yml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
en:
|
2
|
+
sahara:
|
3
|
+
errors:
|
4
|
+
provider_not_supported: |-
|
5
|
+
Sahara does not support this provider.
|
6
|
+
libvirt_connection_error: |-
|
7
|
+
Error while connecting to libvirt: %{error_message}
|
8
|
+
snapshot_missing: |-
|
9
|
+
Snapshot used for sandbox had unexpectedly gone missing.
|
10
|
+
snapshot_deletion_error: |-
|
11
|
+
Error while deleting snapshot: %{error_message}
|
12
|
+
snapshot_creation_error: |-
|
13
|
+
Error while creating snapshot: %{error_message}
|
14
|
+
snapshot_reversion_error: |-
|
15
|
+
Error while reverting snapshot: %{error_message}
|
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.16
|
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: 2013-
|
12
|
+
date: 2013-10-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: popen4
|
@@ -77,8 +77,12 @@ files:
|
|
77
77
|
- lib/sahara/command/rollback.rb
|
78
78
|
- lib/sahara/command/root.rb
|
79
79
|
- lib/sahara/command/status.rb
|
80
|
-
- lib/sahara/
|
80
|
+
- lib/sahara/errors.rb
|
81
|
+
- lib/sahara/session/factory.rb
|
82
|
+
- lib/sahara/session/libvirt.rb
|
83
|
+
- lib/sahara/session/virtualbox.rb
|
81
84
|
- lib/sahara/version.rb
|
85
|
+
- locales/en.yml
|
82
86
|
- sahara.gemspec
|
83
87
|
homepage: http://github.com/jedi4ever/sahara/
|
84
88
|
licenses: []
|
@@ -94,7 +98,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
94
98
|
version: '0'
|
95
99
|
segments:
|
96
100
|
- 0
|
97
|
-
hash:
|
101
|
+
hash: -2734223008788270957
|
98
102
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
103
|
none: false
|
100
104
|
requirements:
|
data/lib/sahara/session.rb
DELETED
@@ -1,135 +0,0 @@
|
|
1
|
-
require 'pp'
|
2
|
-
|
3
|
-
module Sahara
|
4
|
-
module Session
|
5
|
-
class Command
|
6
|
-
|
7
|
-
def initialize(app, env)
|
8
|
-
@app = app
|
9
|
-
@env = env
|
10
|
-
@vboxcmd=determine_vboxcmd
|
11
|
-
@sandboxname="sahara-sandbox"
|
12
|
-
end
|
13
|
-
|
14
|
-
def determine_vboxcmd
|
15
|
-
if windows?
|
16
|
-
# On Windows, we use the VBOX_INSTALL_PATH environmental
|
17
|
-
if ENV.has_key?("VBOX_INSTALL_PATH")
|
18
|
-
# The path usually ends with a \ but we make sure here
|
19
|
-
path = File.join(ENV["VBOX_INSTALL_PATH"], "VBoxManage.exe")
|
20
|
-
return "\"#{path}\""
|
21
|
-
end
|
22
|
-
else
|
23
|
-
# for other platforms assume it is on the PATH
|
24
|
-
return "VBoxManage"
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def windows?
|
29
|
-
%W[mingw mswin].each do |text|
|
30
|
-
return true if RbConfig::CONFIG["host_os"].downcase.include?(text)
|
31
|
-
end
|
32
|
-
false
|
33
|
-
end
|
34
|
-
|
35
|
-
def list_snapshots(machine)
|
36
|
-
snapshotlist=Array.new
|
37
|
-
instance_id = machine.id
|
38
|
-
output = `#{@vboxcmd} showvminfo --machinereadable "#{instance_id}"`
|
39
|
-
snapshotresult=output.scan(/SnapshotName.*=(.*)/).flatten
|
40
|
-
snapshotresult.each do |result|
|
41
|
-
clean=result.gsub(/\"/,'').chomp
|
42
|
-
snapshotlist << clean
|
43
|
-
end
|
44
|
-
snapshotlist
|
45
|
-
end
|
46
|
-
|
47
|
-
def status(machine)
|
48
|
-
if !self.is_vm_created?(machine) then
|
49
|
-
puts "[#{machine.name}] VM is not created"
|
50
|
-
return
|
51
|
-
end
|
52
|
-
if self.is_snapshot_mode_on?(machine) then
|
53
|
-
puts "[#{machine.name}] Sandbox mode is on"
|
54
|
-
else
|
55
|
-
puts "[#{machine.name}] Sandbox mode is off"
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def is_snapshot_mode_on?(machine)
|
60
|
-
snapshots=self.list_snapshots(machine)
|
61
|
-
return snapshots.include?(@sandboxname)
|
62
|
-
end
|
63
|
-
|
64
|
-
def off(machine)
|
65
|
-
if !self.is_vm_created?(machine) then
|
66
|
-
puts "[#{machine.name}] VM is not created"
|
67
|
-
return
|
68
|
-
end
|
69
|
-
if self.is_snapshot_mode_on?(machine) then
|
70
|
-
instance_id = machine.id
|
71
|
-
`#{@vboxcmd} snapshot "#{instance_id}" delete "#{@sandboxname}" `
|
72
|
-
else
|
73
|
-
puts "[#{machine.name}] Not sandbox mode now"
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
def on(machine)
|
78
|
-
if !self.is_vm_created?(machine) then
|
79
|
-
puts "[#{machine.name}] VM is not created"
|
80
|
-
return
|
81
|
-
end
|
82
|
-
if !self.is_snapshot_mode_on?(machine) then
|
83
|
-
instance_id = machine.id
|
84
|
-
`#{@vboxcmd} snapshot "#{instance_id}" take "#{@sandboxname}" --pause`
|
85
|
-
else
|
86
|
-
puts "[#{machine.name}] Already sandbox mode"
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
def commit(machine)
|
91
|
-
if !self.is_vm_created?(machine) then
|
92
|
-
puts "[#{machine.name}] VM is not created"
|
93
|
-
return
|
94
|
-
end
|
95
|
-
if self.is_snapshot_mode_on?(machine) then
|
96
|
-
instance_id = machine.id
|
97
|
-
`#{@vboxcmd} snapshot "#{instance_id}" delete "#{@sandboxname}"`
|
98
|
-
`#{@vboxcmd} snapshot "#{instance_id}" take "#{@sandboxname}" --pause`
|
99
|
-
else
|
100
|
-
puts "[#{machine.name}] Not sandbox mode now"
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
def rollback(machine)
|
105
|
-
if !self.is_vm_created?(machine) then
|
106
|
-
puts "[#{machine.name}] VM is not created"
|
107
|
-
return
|
108
|
-
end
|
109
|
-
if !self.is_snapshot_mode_on?(machine) then
|
110
|
-
puts "[#{machine.name}] Not sandbox mode now"
|
111
|
-
return
|
112
|
-
end
|
113
|
-
|
114
|
-
instance_id = machine.id
|
115
|
-
`#{@vboxcmd} controlvm "#{instance_id}" poweroff `
|
116
|
-
sleep 2
|
117
|
-
`#{@vboxcmd} snapshot "#{instance_id}" restore "#{@sandboxname}"`
|
118
|
-
|
119
|
-
gui_boot = machine.provider_config.gui
|
120
|
-
if gui_boot
|
121
|
-
boot_mode = "gui"
|
122
|
-
else
|
123
|
-
boot_mode = "headless"
|
124
|
-
end
|
125
|
-
# restore boot mode
|
126
|
-
`#{@vboxcmd} startvm --type #{boot_mode} "#{instance_id}" `
|
127
|
-
end
|
128
|
-
|
129
|
-
def is_vm_created?(machine)
|
130
|
-
return !machine.id.nil?
|
131
|
-
end
|
132
|
-
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|