machines 0.5.1
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 +11 -0
- data/EXAMPLES.md +18 -0
- data/Gemfile +4 -0
- data/Guardfile +14 -0
- data/INSTALL.md +25 -0
- data/LICENSE +23 -0
- data/README.md +271 -0
- data/Rakefile +60 -0
- data/TODO.md +92 -0
- data/bin/machines +6 -0
- data/lib/machines/app_settings.rb +54 -0
- data/lib/machines/base.rb +13 -0
- data/lib/machines/checks.rb +63 -0
- data/lib/machines/cloud_machine.rb +33 -0
- data/lib/machines/command.rb +86 -0
- data/lib/machines/commandline.rb +148 -0
- data/lib/machines/configuration.rb +49 -0
- data/lib/machines/core.rb +117 -0
- data/lib/machines/database.rb +17 -0
- data/lib/machines/file_operations.rb +104 -0
- data/lib/machines/help.rb +30 -0
- data/lib/machines/installation.rb +151 -0
- data/lib/machines/log_command.rb +22 -0
- data/lib/machines/logger.rb +65 -0
- data/lib/machines/machinesfile.rb +25 -0
- data/lib/machines/named_buffer.rb +9 -0
- data/lib/machines/questions.rb +15 -0
- data/lib/machines/services.rb +24 -0
- data/lib/machines/upload.rb +29 -0
- data/lib/machines/version.rb +4 -0
- data/lib/machines.rb +19 -0
- data/lib/packages/abiword.rb +11 -0
- data/lib/packages/amazon_mp3.rb +4 -0
- data/lib/packages/awstats.rb +16 -0
- data/lib/packages/base.rb +14 -0
- data/lib/packages/chrome.rb +12 -0
- data/lib/packages/cruisecontrol.rb +22 -0
- data/lib/packages/dependencies.rb +10 -0
- data/lib/packages/docky.rb +36 -0
- data/lib/packages/dotfiles.rb +26 -0
- data/lib/packages/file_roller.rb +12 -0
- data/lib/packages/finalise.rb +4 -0
- data/lib/packages/firefox.rb +4 -0
- data/lib/packages/gedit.rb +11 -0
- data/lib/packages/git.rb +4 -0
- data/lib/packages/gmate.rb +33 -0
- data/lib/packages/gnome.rb +10 -0
- data/lib/packages/gnumeric.rb +11 -0
- data/lib/packages/hosts.rb +13 -0
- data/lib/packages/load_machines.rb +38 -0
- data/lib/packages/monit.rb +10 -0
- data/lib/packages/mysql.rb +46 -0
- data/lib/packages/nginx.rb +22 -0
- data/lib/packages/nginx_logrotate.rb +26 -0
- data/lib/packages/openbox.rb +35 -0
- data/lib/packages/passenger.rb +14 -0
- data/lib/packages/passenger_nginx.rb +8 -0
- data/lib/packages/postfix.rb +10 -0
- data/lib/packages/questions.rb +5 -0
- data/lib/packages/rbenv.rb +27 -0
- data/lib/packages/rvm.rb +20 -0
- data/lib/packages/save_machines.rb +4 -0
- data/lib/packages/slim.rb +6 -0
- data/lib/packages/sqlserver.rb +5 -0
- data/lib/packages/subtle.rb +29 -0
- data/lib/packages/sudo_mods.rb +6 -0
- data/lib/packages/time.rb +6 -0
- data/lib/packages/time_daily.rb +5 -0
- data/lib/packages/timezone.rb +10 -0
- data/lib/packages/unison.rb +5 -0
- data/lib/packages/virtualbox.rb +11 -0
- data/lib/packages/virtualbox_guest.rb +7 -0
- data/lib/packages/webapps.rb +36 -0
- data/lib/template/Machinesfile +48 -0
- data/lib/template/certificates/example.com.crt +0 -0
- data/lib/template/certificates/example.com.key +0 -0
- data/lib/template/certificates/selfsigned.crt +14 -0
- data/lib/template/certificates/selfsigned.key +16 -0
- data/lib/template/config.yml +98 -0
- data/lib/template/logrotate/app.erb +10 -0
- data/lib/template/logrotate/nginx.erb +12 -0
- data/lib/template/machines.yml +179 -0
- data/lib/template/misc/awstats.conf.erb +7 -0
- data/lib/template/misc/ntp.conf +7 -0
- data/lib/template/monit/conf.d/delayed_job.erb +11 -0
- data/lib/template/monit/conf.d/mysql.erb +7 -0
- data/lib/template/monit/conf.d/nginx +5 -0
- data/lib/template/monit/conf.d/postfix +7 -0
- data/lib/template/monit/conf.d/ssh +6 -0
- data/lib/template/monit/conf.d/system.erb +14 -0
- data/lib/template/monit/monitrc.erb +10 -0
- data/lib/template/monit/upstart.conf +16 -0
- data/lib/template/mysql/dbmaster.cnf +7 -0
- data/lib/template/mysql/dbslave.cnf +3 -0
- data/lib/template/nginx/app_server.conf.erb +87 -0
- data/lib/template/nginx/nginx.conf.erb +46 -0
- data/lib/template/nginx/upstart.conf.erb +21 -0
- data/lib/template/packages/custom.rb +17 -0
- data/lib/template/packages/productivity.rb +18 -0
- data/lib/template/slim/themes/dark/background.jpg +0 -0
- data/lib/template/slim/themes/dark/panel.png +0 -0
- data/lib/template/slim/themes/dark/slim.theme +39 -0
- data/lib/template/users/phil/dotfiles/bash_aliases +45 -0
- data/lib/template/users/phil/dotfiles/config/Trolltech.conf +4 -0
- data/lib/template/users/phil/dotfiles/config/gtk-3.0/settings.ini +9 -0
- data/lib/template/users/phil/dotfiles/config/openbox/autostart.sh +14 -0
- data/lib/template/users/phil/dotfiles/config/openbox/rc.xml +482 -0
- data/lib/template/users/phil/dotfiles/config/terminator/config +10 -0
- data/lib/template/users/phil/dotfiles/fonts.conf +15 -0
- data/lib/template/users/phil/dotfiles/gitconfig +27 -0
- data/lib/template/users/phil/dotfiles/gtkrc-2.0 +16 -0
- data/lib/template/users/phil/dotfiles/local/share/applications/mimeapps.list +4 -0
- data/lib/template/users/phil/dotfiles/unison/default.prf +33 -0
- data/lib/template/users/www/authorized_keys +0 -0
- data/lib/template/users/www/dotfiles/bash_aliases +40 -0
- data/lib/template/webapps.yml +75 -0
- data/machines.gemspec +44 -0
- data/spec/acceptance/dev_machine_spec.rb +22 -0
- data/spec/lib/machines/app_settings_spec.rb +106 -0
- data/spec/lib/machines/checks_spec.rb +105 -0
- data/spec/lib/machines/cloud_machine_spec.rb +36 -0
- data/spec/lib/machines/command_spec.rb +184 -0
- data/spec/lib/machines/commandline_spec.rb +299 -0
- data/spec/lib/machines/configuration_spec.rb +61 -0
- data/spec/lib/machines/core_spec.rb +299 -0
- data/spec/lib/machines/database_spec.rb +51 -0
- data/spec/lib/machines/file_operations_spec.rb +124 -0
- data/spec/lib/machines/help_spec.rb +22 -0
- data/spec/lib/machines/installation_spec.rb +176 -0
- data/spec/lib/machines/log_command_spec.rb +16 -0
- data/spec/lib/machines/logger_spec.rb +70 -0
- data/spec/lib/machines/machinesfile_spec.rb +34 -0
- data/spec/lib/machines/questions_spec.rb +73 -0
- data/spec/lib/machines/services_spec.rb +26 -0
- data/spec/lib/machines/upload_spec.rb +86 -0
- data/spec/lib/packages/abiword_spec.rb +20 -0
- data/spec/lib/packages/amazon_mp3_spec.rb +17 -0
- data/spec/lib/packages/awstats_spec.rb +26 -0
- data/spec/lib/packages/base_spec.rb +21 -0
- data/spec/lib/packages/chrome_spec.rb +30 -0
- data/spec/lib/packages/cruisecontrol_spec.rb +33 -0
- data/spec/lib/packages/dependencies_spec.rb +20 -0
- data/spec/lib/packages/docky_spec.rb +32 -0
- data/spec/lib/packages/dotfiles_spec.rb +44 -0
- data/spec/lib/packages/file_roller_spec.rb +69 -0
- data/spec/lib/packages/firefox_spec.rb +16 -0
- data/spec/lib/packages/gedit_spec.rb +20 -0
- data/spec/lib/packages/git_spec.rb +16 -0
- data/spec/lib/packages/gmate_spec.rb +39 -0
- data/spec/lib/packages/gnome_spec.rb +22 -0
- data/spec/lib/packages/gnumeric_spec.rb +21 -0
- data/spec/lib/packages/hosts_spec.rb +41 -0
- data/spec/lib/packages/load_machines_spec.rb +118 -0
- data/spec/lib/packages/monit_spec.rb +34 -0
- data/spec/lib/packages/mysql_spec.rb +69 -0
- data/spec/lib/packages/nginx_logrotate_spec.rb +80 -0
- data/spec/lib/packages/nginx_spec.rb +46 -0
- data/spec/lib/packages/openbox_spec.rb +41 -0
- data/spec/lib/packages/passenger_nginx_spec.rb +20 -0
- data/spec/lib/packages/passenger_spec.rb +26 -0
- data/spec/lib/packages/postfix_spec.rb +19 -0
- data/spec/lib/packages/questions_spec.rb +29 -0
- data/spec/lib/packages/rbenv_spec.rb +32 -0
- data/spec/lib/packages/rvm_spec.rb +31 -0
- data/spec/lib/packages/save_machines_spec.rb +51 -0
- data/spec/lib/packages/slim_spec.rb +22 -0
- data/spec/lib/packages/sqlserver_spec.rb +17 -0
- data/spec/lib/packages/timezone_spec.rb +27 -0
- data/spec/lib/packages/unison_spec.rb +17 -0
- data/spec/lib/packages/virtualbox_guest_spec.rb +25 -0
- data/spec/lib/packages/virtualbox_spec.rb +23 -0
- data/spec/lib/packages/webapps_spec.rb +70 -0
- data/spec/spec_helper.rb +103 -0
- data/spec/support/coverage.rb +8 -0
- data/spec/support/fake_out.rb +22 -0
- data/spec/support/fakefs_additions.rb +10 -0
- data/spec/support/minitest.rb +69 -0
- data/spec/support/vm_control.rb +54 -0
- data/tmp/.gitkeep +0 -0
- metadata +581 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe 'packages/webapps' do
|
|
4
|
+
before(:each) do
|
|
5
|
+
load_package('webapps')
|
|
6
|
+
|
|
7
|
+
$conf.from_hash(:user => {:name => 'username', :home => 'home_dir'}, :ruby => {:version => 'ruby_version'})
|
|
8
|
+
$conf.webapps = {'application' =>
|
|
9
|
+
AppBuilder.new(
|
|
10
|
+
'scm' => 'github.com/project',
|
|
11
|
+
'branch' => 'master',
|
|
12
|
+
'name' => 'application',
|
|
13
|
+
'url' => 'github url',
|
|
14
|
+
'path' => '/home/users/application',
|
|
15
|
+
'db_password' => 'pa55',
|
|
16
|
+
'server_name' => 'app.dev'
|
|
17
|
+
)
|
|
18
|
+
}
|
|
19
|
+
$conf.from_hash(:awstats => {:path => 'stats_path'})
|
|
20
|
+
$conf.from_hash(:webserver => {:name => 'nginx', :path => 'nginx_path', :servers_dir => 'servers'})
|
|
21
|
+
$conf.from_hash(:db_server => {:address => 'db_master'})
|
|
22
|
+
FileUtils.mkdir_p 'nginx'
|
|
23
|
+
File.open('nginx/app_server.conf.erb', 'w') {|f| f.puts 'the template' }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it 'adds the following commands' do
|
|
27
|
+
$conf.environment = 'production'
|
|
28
|
+
eval_package
|
|
29
|
+
$conf.commands.map(&:info).join("\n").must_equal [
|
|
30
|
+
"TASK webapps - Sets up Web apps in config/webapps.yml using app_server.conf.erb. Copies SSL certs.",
|
|
31
|
+
"SUDO mkdir -p nginx_path/servers",
|
|
32
|
+
"RUN mkdir -p /home/users/application/releases",
|
|
33
|
+
"RUN mkdir -p /home/users/application/shared/config",
|
|
34
|
+
"RUN mkdir -p /home/users/application/shared/system",
|
|
35
|
+
"RUN mkdir -p /home/users/application/shared/log",
|
|
36
|
+
"UPLOAD buffer from nginx/app_server.conf.erb to /tmp/application.conf",
|
|
37
|
+
"SUDO cp -rf /tmp/application.conf nginx_path/servers/application.conf",
|
|
38
|
+
"RUN rm -rf /tmp/application.conf",
|
|
39
|
+
"SUDO mkdir -p /var/log/nginx",
|
|
40
|
+
'SUDO grep "127.0.0.1 app.dev" /etc/hosts || echo "127.0.0.1 app.dev" >> /etc/hosts'
|
|
41
|
+
].join("\n")
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it 'creates a database.yml when requested' do
|
|
45
|
+
$conf.environment = 'production'
|
|
46
|
+
$conf.webapps['application'].write_yml = true
|
|
47
|
+
eval_package
|
|
48
|
+
$conf.commands.map(&:info).join("\n").must_match 'UPLOAD buffer from database.yml to /home/users/application/shared/config/database.yml'
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it "doesn't make app structure when target is a development machine" do
|
|
52
|
+
$conf.from_hash(:ruby => {:gems_path => '.rbenv'})
|
|
53
|
+
$conf.environment = 'development'
|
|
54
|
+
eval_package
|
|
55
|
+
commandline = $conf.commands.map(&:info).join("\n")
|
|
56
|
+
commandline.must_equal [
|
|
57
|
+
"TASK webapps - Sets up Web apps in config/webapps.yml using app_server.conf.erb. Copies SSL certs.",
|
|
58
|
+
"SUDO mkdir -p nginx_path/servers",
|
|
59
|
+
"RUN git clone --quiet --branch master github.com/project /home/users/application",
|
|
60
|
+
"RUN cd /home/users/application && $HOME/.rbenv/bin/rbenv exec bundle",
|
|
61
|
+
"RUN cd /home/users/application && $HOME/.rbenv/bin/rbenv exec bundle --binstubs=.bin",
|
|
62
|
+
"UPLOAD buffer from nginx/app_server.conf.erb to /tmp/application.conf",
|
|
63
|
+
"SUDO cp -rf /tmp/application.conf nginx_path/servers/application.conf",
|
|
64
|
+
"RUN rm -rf /tmp/application.conf",
|
|
65
|
+
"SUDO mkdir -p /var/log/nginx",
|
|
66
|
+
'SUDO grep "127.0.0.1 app.dev" /etc/hosts || echo "127.0.0.1 app.dev" >> /etc/hosts'
|
|
67
|
+
].join("\n")
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
$LOAD_PATH << 'lib'
|
|
2
|
+
|
|
3
|
+
require 'bundler/setup'
|
|
4
|
+
require 'minitest/spec'
|
|
5
|
+
require 'mocha'
|
|
6
|
+
require 'stringio'
|
|
7
|
+
require 'fakefs/safe'
|
|
8
|
+
|
|
9
|
+
Dir['spec/support/*.rb'].each {|file| require File.join('./spec', 'support', File.basename(file)) }
|
|
10
|
+
require 'machines'
|
|
11
|
+
application_dir = $conf.application_dir
|
|
12
|
+
|
|
13
|
+
include Machines::AppSettings
|
|
14
|
+
|
|
15
|
+
# This is done so that Machines::Core.run doesn't collide with MiniTest::Unit::TestCase.run when included
|
|
16
|
+
module Machines::Core
|
|
17
|
+
alias :run_command :run
|
|
18
|
+
remove_method :run
|
|
19
|
+
end
|
|
20
|
+
MiniTest::Spec.add_setup_hook do |klass|
|
|
21
|
+
klass.instance_eval do
|
|
22
|
+
alias :run :run_command if respond_to?(:run_command)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
MiniTest::Spec.add_setup_hook do
|
|
27
|
+
include Machines::Checks
|
|
28
|
+
|
|
29
|
+
$conf.clear
|
|
30
|
+
$conf.passwords = []
|
|
31
|
+
$conf.commands = []
|
|
32
|
+
$conf.tasks = {}
|
|
33
|
+
$conf.application_dir = application_dir
|
|
34
|
+
|
|
35
|
+
$input = StringIO.new
|
|
36
|
+
$output = StringIO.new
|
|
37
|
+
$terminal = HighLine.new($input, $output)
|
|
38
|
+
|
|
39
|
+
$debug = FakeOut.new
|
|
40
|
+
$file = FakeOut.new
|
|
41
|
+
$console = FakeOut.new
|
|
42
|
+
Machines::Command.debug = Machines::Logger.new $debug
|
|
43
|
+
Machines::Command.file = Machines::Logger.new $file
|
|
44
|
+
Machines::Command.console = Machines::Logger.new $console, :truncate => true
|
|
45
|
+
|
|
46
|
+
FakeFS.activate!
|
|
47
|
+
FileUtils.mkdir_p 'tmp'
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
MiniTest::Spec.add_teardown_hook do
|
|
51
|
+
FakeFS.deactivate!
|
|
52
|
+
FakeFS::FileSystem.clear
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
module MiniTest
|
|
56
|
+
module Assertions
|
|
57
|
+
def capture_io
|
|
58
|
+
yield
|
|
59
|
+
return $output.string
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
class MiniTest::Spec::Package < MiniTest::Spec
|
|
65
|
+
include Machines
|
|
66
|
+
include AppSettings, CloudMachine, Commandline, Configuration, Core, Database
|
|
67
|
+
include FileOperations, Installation, Machinesfile, Questions, Services
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
MiniTest::Spec.register_spec_type(/packages\//, MiniTest::Spec::Package)
|
|
71
|
+
|
|
72
|
+
def RealFS &block
|
|
73
|
+
FakeFS.deactivate!
|
|
74
|
+
yield block
|
|
75
|
+
ensure
|
|
76
|
+
FakeFS.activate!
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def load_package name
|
|
80
|
+
RealFS do
|
|
81
|
+
@package_path = File.join($conf.application_dir, File.join('packages', "#{name}.rb"))
|
|
82
|
+
@package = File.read(@package_path)
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def eval_package
|
|
87
|
+
eval @package, nil, @package_path
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def save_yaml contents, path
|
|
91
|
+
File.open(path, 'w') do |f|
|
|
92
|
+
YAML.dump(contents, f)
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def colored string, color
|
|
97
|
+
ending = string.scan(/(\n|\r)$/).flatten.first
|
|
98
|
+
string.sub!(/(\n|\r)$/, '')
|
|
99
|
+
$terminal.color(string, color.to_sym) + ending.to_s
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
require 'minitest/autorun'
|
|
103
|
+
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Standard minitest diff calls the OS's diff command. FakeFS breaks diff because
|
|
2
|
+
# diff is looking for the files on disk but the files are written by Tempfile
|
|
3
|
+
# while FakeFS is still active. The following modules provide a pure ruby diff
|
|
4
|
+
# and override MiniTest::Assertions::diff to utilitize it.
|
|
5
|
+
|
|
6
|
+
module Diff
|
|
7
|
+
attr_accessor :diffs, :sequences
|
|
8
|
+
|
|
9
|
+
def self.diffs(old, new)
|
|
10
|
+
new, old, @diffs = new.lines.to_a, old.lines.to_a, []
|
|
11
|
+
build_sequences(old, new)
|
|
12
|
+
find_diffs(old, new, old.size, new.size)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
private
|
|
16
|
+
|
|
17
|
+
def self.find_diffs(old, new, row, col)
|
|
18
|
+
if row > 0 && col > 0 && old[row-1] == new[col-1]
|
|
19
|
+
find_diffs(old, new, row-1, col-1)
|
|
20
|
+
@diffs << { :line => row, :change => :same, :string => old[row-1].strip }
|
|
21
|
+
elsif col > 0 && (row == 0 || @sequences[row][col-1] >= @sequences[row-1][col])
|
|
22
|
+
find_diffs(old, new, row, col-1)
|
|
23
|
+
@diffs << { :line => col, :change => :add, :string => new[col-1].strip }
|
|
24
|
+
elsif row > 0 && (col == 0 || @sequences[row][col-1] < @sequences[row-1][col])
|
|
25
|
+
find_diffs(old, new, row-1, col)
|
|
26
|
+
@diffs << { :line => row, :change => :delete, :string => old[row-1].strip }
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def self.build_sequences(old, new)
|
|
31
|
+
rows, cols = old.size+1, new.size+1
|
|
32
|
+
@sequences = rows.times.map{|x|[0]*(x+1)}
|
|
33
|
+
rows.times.each do |row|
|
|
34
|
+
cols.times.each do |col|
|
|
35
|
+
@sequences[row][col] = if old[row-1] == new[col-1]
|
|
36
|
+
@sequences[row-1][col-1] + 1
|
|
37
|
+
else
|
|
38
|
+
[@sequences[row][col-1].to_i, @sequences[row-1][col].to_i].max
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
module MiniTest
|
|
46
|
+
module Assertions
|
|
47
|
+
SYMBOLS = {:add => '+', :delete => '-', :same => ' '}
|
|
48
|
+
|
|
49
|
+
def diff exp, act
|
|
50
|
+
expect = mu_pp_for_diff exp
|
|
51
|
+
butwas = mu_pp_for_diff act
|
|
52
|
+
result = nil
|
|
53
|
+
|
|
54
|
+
need_to_diff =
|
|
55
|
+
(expect.include?("\n") ||
|
|
56
|
+
butwas.include?("\n") ||
|
|
57
|
+
expect.size > 30 ||
|
|
58
|
+
butwas.size > 30 ||
|
|
59
|
+
expect == butwas)
|
|
60
|
+
|
|
61
|
+
return "Expected: #{mu_pp exp}\n Actual: #{mu_pp act}" unless need_to_diff
|
|
62
|
+
|
|
63
|
+
Diff.diffs(expect, butwas).map do |diff|
|
|
64
|
+
SYMBOLS[diff[:change]] + diff[:string]
|
|
65
|
+
end.join("\n")
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
require 'net/ssh'
|
|
2
|
+
|
|
3
|
+
class VmControl
|
|
4
|
+
def initialize
|
|
5
|
+
@name = 'machinesvm'
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def start
|
|
9
|
+
vboxmanage "startvm #{@name} --type headless"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def stop
|
|
13
|
+
vboxmanage "controlvm #{@name} savestate"
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def kill
|
|
17
|
+
return unless state =~ /running/
|
|
18
|
+
vboxmanage "controlvm #{@name} poweroff"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def restore
|
|
22
|
+
vboxmanage "snapshot #{@name} restorecurrent"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def state
|
|
26
|
+
string = "showvminfo #{@name}"
|
|
27
|
+
output = vboxmanage string
|
|
28
|
+
output.scan(/State:\s+(.*)/).first.first
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def vboxmanage command
|
|
32
|
+
send File.read('.vmcontrol').gsub("\n", ''), command
|
|
33
|
+
rescue Errno::ENOENT
|
|
34
|
+
raise '.vmcontrol does not exist. Add `local` to test using VMs on a Linux host or add `remote` to test on a VM running on Windows.'
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
private
|
|
38
|
+
def local command
|
|
39
|
+
output = `VBoxManage #{command}`
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def remote command
|
|
43
|
+
output = ''
|
|
44
|
+
begin
|
|
45
|
+
Net::SSH.start('winhost', 'vbuser', :timeout => 10) do |ssh|
|
|
46
|
+
output = ssh.exec!("C:\\Program Files\\Oracle\\VirtualBox\\VBoxManage #{command}")
|
|
47
|
+
end
|
|
48
|
+
rescue Timeout::Error => e
|
|
49
|
+
raise 'Connection timed out. Did you start your SSH server on the host?'
|
|
50
|
+
end
|
|
51
|
+
output
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
data/tmp/.gitkeep
ADDED
|
File without changes
|