lab 0.2.2 → 0.2.3
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/config/test_lab.yml +61 -0
- data/lab.gemspec +4 -1
- data/lib/lab/controller/vsphere_controller.rb +2 -46
- data/lib/lab/driver/vsphere_driver.rb +2 -2
- data/lib/lab/version.rb +1 -1
- data/lib/lab/vm_controller.rb +15 -4
- data/util/console.rb +10 -0
- metadata +21 -43
- data/src/Gemfile +0 -4
- data/src/Rakefile +0 -1
- data/src/TODO +0 -15
- data/src/config/test_lab.yml +0 -11
- data/src/config/test_targets.yml +0 -21
- data/src/lab.gemspec +0 -35
- data/src/lib/lab/controller/dynagen_controller.rb +0 -14
- data/src/lib/lab/controller/fog_controller.rb +0 -6
- data/src/lib/lab/controller/remote_esxi_controller.rb +0 -62
- data/src/lib/lab/controller/remote_workstation_controller.rb +0 -22
- data/src/lib/lab/controller/virtualbox_controller.rb +0 -25
- data/src/lib/lab/controller/vsphere_controller.rb +0 -18
- data/src/lib/lab/controller/workstation_controller.rb +0 -17
- data/src/lib/lab/controller/workstation_vixr_controller.rb +0 -19
- data/src/lib/lab/controllers.rb +0 -9
- data/src/lib/lab/driver/dynagen_driver.rb +0 -47
- data/src/lib/lab/driver/fog_driver.rb +0 -104
- data/src/lib/lab/driver/remote_esxi_driver.rb +0 -177
- data/src/lib/lab/driver/remote_workstation_driver.rb +0 -197
- data/src/lib/lab/driver/virtualbox_driver.rb +0 -142
- data/src/lib/lab/driver/vm_driver.rb +0 -195
- data/src/lib/lab/driver/vsphere_driver.rb +0 -120
- data/src/lib/lab/driver/workstation_driver.rb +0 -234
- data/src/lib/lab/driver/workstation_vixr_driver.rb +0 -126
- data/src/lib/lab/drivers.rb +0 -9
- data/src/lib/lab/modifier/backtrack5_modifier.rb +0 -16
- data/src/lib/lab/modifier/dos_modifier.rb +0 -14
- data/src/lib/lab/modifier/test_modifier.rb +0 -16
- data/src/lib/lab/modifiers.rb +0 -3
- data/src/lib/lab/version.rb +0 -3
- data/src/lib/lab/vm.rb +0 -269
- data/src/lib/lab/vm_controller.rb +0 -275
- data/src/lib/lab.rb +0 -2
- data/src/test/.gitkeep +0 -0
data/config/test_lab.yml
CHANGED
@@ -6,6 +6,67 @@
|
|
6
6
|
credentials:
|
7
7
|
- user: root
|
8
8
|
pass: toor
|
9
|
+
admin: true
|
9
10
|
os: linux
|
10
11
|
flavor: ubuntu
|
11
12
|
arch: 64
|
13
|
+
- vmid: backtrack_remote
|
14
|
+
driver: remote_workstation
|
15
|
+
user: root
|
16
|
+
host: vmhost
|
17
|
+
modifiers:
|
18
|
+
- Test
|
19
|
+
credentials:
|
20
|
+
- user: root
|
21
|
+
pass: toor
|
22
|
+
admin: true
|
23
|
+
os: linux
|
24
|
+
flavor: ubuntu
|
25
|
+
arch: 64
|
26
|
+
###
|
27
|
+
# Windows XP SP3 - Browser Autopwn Target
|
28
|
+
###
|
29
|
+
- vmid: 222
|
30
|
+
hostname: xp
|
31
|
+
description: Windows XP SP3 - Browser Autopwn Target
|
32
|
+
driver: remote_esxi
|
33
|
+
user: root
|
34
|
+
host: vmhost1
|
35
|
+
type: target
|
36
|
+
arch: 32
|
37
|
+
os: linux
|
38
|
+
credentials:
|
39
|
+
- user: msfadmin
|
40
|
+
pass: msfadmin
|
41
|
+
admin: true
|
42
|
+
tags:
|
43
|
+
- ie6
|
44
|
+
- ie7
|
45
|
+
- ie8
|
46
|
+
- firefox
|
47
|
+
- java
|
48
|
+
- flash
|
49
|
+
- quicktime
|
50
|
+
###
|
51
|
+
# Windows 7 SP1
|
52
|
+
###
|
53
|
+
- vmid: 1111
|
54
|
+
hostname: win7
|
55
|
+
description: Windows 7 SP1 - Browser Autopwn Target
|
56
|
+
driver: remote_esxi
|
57
|
+
user: root
|
58
|
+
host: vmhost1
|
59
|
+
pass: whatever
|
60
|
+
type: target
|
61
|
+
arch: 32
|
62
|
+
os: linux
|
63
|
+
credentials:
|
64
|
+
- user: msfadmin
|
65
|
+
pass: msfadmin
|
66
|
+
admin: true
|
67
|
+
tags:
|
68
|
+
- ie8
|
69
|
+
- firefox
|
70
|
+
- java
|
71
|
+
- flash
|
72
|
+
- quicktime
|
data/lab.gemspec
CHANGED
@@ -3,58 +3,14 @@
|
|
3
3
|
|
4
4
|
module Lab
|
5
5
|
module Controllers
|
6
|
-
module
|
7
|
-
|
8
|
-
# Note that 3.5 was different (vmware-vim-cmd)
|
9
|
-
VIM_CMD = 'vim-cmd'.freeze
|
6
|
+
module VsphereController
|
10
7
|
|
11
8
|
def self.dir_list(basepath=nil)
|
12
9
|
# Does this method really even make sense for esxi?
|
13
|
-
return "
|
10
|
+
return "Unimplemented"
|
14
11
|
end
|
15
12
|
|
16
13
|
def self.running_list(user, host)
|
17
|
-
user.gsub!(/(\W)*/, '')
|
18
|
-
host.gsub!(/(\W)*/, '')
|
19
|
-
|
20
|
-
# first get all registered vms
|
21
|
-
registered_vms = self.get_vms(user, host) || []
|
22
|
-
running_vms = []
|
23
|
-
|
24
|
-
# now let's see which ones are running
|
25
|
-
# TODO: this is ghetto, would be better not to connect repeatedly
|
26
|
-
registered_vms.each do |vm|
|
27
|
-
remote_cmd = "ssh #{user}@#{host} \"#{VIM_CMD} vmsvc/power.getstate #{vm[:id]}\""
|
28
|
-
raw = `#{remote_cmd}`
|
29
|
-
running_vms << vm if raw =~ /Powered on/
|
30
|
-
end
|
31
|
-
|
32
|
-
return running_vms
|
33
|
-
end
|
34
|
-
|
35
|
-
private
|
36
|
-
|
37
|
-
def self.get_vms(user, host)
|
38
|
-
user.gsub!(/(\W)*/, '')
|
39
|
-
host.gsub!(/(\W)*/, '')
|
40
|
-
|
41
|
-
vms = [] # array of VM hashes
|
42
|
-
remote_cmd = "ssh #{user}@#{host} \"#{VIM_CMD} vmsvc/getallvms | grep ^[0-9] | sed 's/[[:blank:]]\\{3,\\}/ /g'\""
|
43
|
-
raw = `#{remote_cmd}`.split("\n")
|
44
|
-
|
45
|
-
raw.each do |line|
|
46
|
-
# So effing ghetto
|
47
|
-
id_and_name = line.split('[datastore').first
|
48
|
-
id = id_and_name.split(' ').first
|
49
|
-
|
50
|
-
# TODO - there's surely a better way to do this.
|
51
|
-
name_array = id_and_name.split(' ')
|
52
|
-
name_array.shift
|
53
|
-
name = name_array.join(' ')
|
54
|
-
vms << {:id => id, :name => name}
|
55
|
-
end
|
56
|
-
|
57
|
-
return vms
|
58
14
|
end
|
59
15
|
|
60
16
|
end
|
@@ -15,7 +15,7 @@ class VsphereDriver < VmDriver
|
|
15
15
|
def initialize(config)
|
16
16
|
unless config['user'] then raise ArgumentError, "Must provide a username" end
|
17
17
|
unless config['host'] then raise ArgumentError, "Must provide a hostname" end
|
18
|
-
unless config[''] then raise ArgumentError, "Must provide a password" end
|
18
|
+
unless config['pass'] then raise ArgumentError, "Must provide a password" end
|
19
19
|
super(config)
|
20
20
|
|
21
21
|
@user = filter_command(config['user'])
|
@@ -28,7 +28,7 @@ class VsphereDriver < VmDriver
|
|
28
28
|
raise "WARNING: Library rbvmomi not found. Could not create driver!"
|
29
29
|
end
|
30
30
|
|
31
|
-
vim = RbVmomi::VIM.connect host: @host, user: @user, password: @pass
|
31
|
+
vim = RbVmomi::VIM.connect host: @host, user: @user, password: @pass, insecure: true
|
32
32
|
dc = vim.serviceInstance.find_datacenter("datacenter1") or fail "datacenter not found"
|
33
33
|
@vm = dc.find_vm("test") or fail "VM not found"
|
34
34
|
end
|
data/lib/lab/version.rb
CHANGED
data/lib/lab/vm_controller.rb
CHANGED
@@ -35,7 +35,7 @@ module Controllers
|
|
35
35
|
include Lab::Controllers::FogController
|
36
36
|
include Lab::Controllers::DynagenController
|
37
37
|
include Lab::Controllers::RemoteEsxiController
|
38
|
-
include Lab::Controllers::
|
38
|
+
include Lab::Controllers::VsphereController
|
39
39
|
#include Lab::Controllers::QemuController
|
40
40
|
#include Lab::Controllers::QemudoController
|
41
41
|
def initialize (labdef=nil)
|
@@ -62,15 +62,19 @@ module Controllers
|
|
62
62
|
|
63
63
|
def find_by_vmid(search)
|
64
64
|
@vms.each do |vm|
|
65
|
-
return vm if vm.hostname
|
65
|
+
return vm if vm.hostname == search
|
66
66
|
end
|
67
|
-
|
67
|
+
nil
|
68
|
+
end
|
69
|
+
|
70
|
+
def find_by_hostname(search)
|
71
|
+
self.find_by_vmid search
|
68
72
|
end
|
69
73
|
|
70
74
|
def find_by_tag(search)
|
71
75
|
@vms.each do |vm|
|
72
76
|
vm.tags.each do |tag|
|
73
|
-
return vm if tag
|
77
|
+
return vm if tag == search
|
74
78
|
end
|
75
79
|
end
|
76
80
|
return nil
|
@@ -121,6 +125,13 @@ module Controllers
|
|
121
125
|
false
|
122
126
|
end
|
123
127
|
|
128
|
+
def includes_hostname?(hostname)
|
129
|
+
@vms.each do |vm|
|
130
|
+
return true if (vm.hostname == hostname)
|
131
|
+
end
|
132
|
+
false
|
133
|
+
end
|
134
|
+
|
124
135
|
#
|
125
136
|
# Build a vm lab from a directory of files. Really only useful for file-based
|
126
137
|
# vm hosts. (vmware workstation)
|
data/util/console.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'pry'
|
3
|
+
require "#{File.expand_path(File.dirname(__FILE__))}/../lib/lab/vm_controller"
|
4
|
+
|
5
|
+
@controller = Lab::Controllers::VmController.new
|
6
|
+
@controller.from_file("#{File.expand_path(File.dirname(__FILE__))}/../config/test_lab.yml")
|
7
|
+
|
8
|
+
ENV['SSL_CERT_FILE'] = "/home/jcran/.cacert.pem"
|
9
|
+
|
10
|
+
Pry.start(self, :prompt => [proc{"lab (@controller) >"}])
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lab
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-04-03 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
16
|
-
requirement: &
|
16
|
+
requirement: &16389100 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *16389100
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: net-ssh
|
27
|
-
requirement: &
|
27
|
+
requirement: &16388080 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *16388080
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: net-scp
|
38
|
-
requirement: &
|
38
|
+
requirement: &16372100 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *16372100
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rbvmomi
|
49
|
-
requirement: &
|
49
|
+
requirement: &16371000 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,7 +54,18 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *16371000
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: pry
|
60
|
+
requirement: &16370260 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :runtime
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *16370260
|
58
69
|
description: ! 'Start/Stop/Revert and do other cool stuff w/ Vmware, Virtualbox, and
|
59
70
|
ESXi vms. This gem wraps common CLI utilities and other gems to create a common
|
60
71
|
inteface for vms. '
|
@@ -101,41 +112,8 @@ files:
|
|
101
112
|
- lib/lab/version.rb
|
102
113
|
- lib/lab/vm.rb
|
103
114
|
- lib/lab/vm_controller.rb
|
104
|
-
- src/Gemfile
|
105
|
-
- src/Rakefile
|
106
|
-
- src/TODO
|
107
|
-
- src/config/test_lab.yml
|
108
|
-
- src/config/test_targets.yml
|
109
|
-
- src/lab.gemspec
|
110
|
-
- src/lib/lab.rb
|
111
|
-
- src/lib/lab/controller/dynagen_controller.rb
|
112
|
-
- src/lib/lab/controller/fog_controller.rb
|
113
|
-
- src/lib/lab/controller/remote_esxi_controller.rb
|
114
|
-
- src/lib/lab/controller/remote_workstation_controller.rb
|
115
|
-
- src/lib/lab/controller/virtualbox_controller.rb
|
116
|
-
- src/lib/lab/controller/vsphere_controller.rb
|
117
|
-
- src/lib/lab/controller/workstation_controller.rb
|
118
|
-
- src/lib/lab/controller/workstation_vixr_controller.rb
|
119
|
-
- src/lib/lab/controllers.rb
|
120
|
-
- src/lib/lab/driver/dynagen_driver.rb
|
121
|
-
- src/lib/lab/driver/fog_driver.rb
|
122
|
-
- src/lib/lab/driver/remote_esxi_driver.rb
|
123
|
-
- src/lib/lab/driver/remote_workstation_driver.rb
|
124
|
-
- src/lib/lab/driver/virtualbox_driver.rb
|
125
|
-
- src/lib/lab/driver/vm_driver.rb
|
126
|
-
- src/lib/lab/driver/vsphere_driver.rb
|
127
|
-
- src/lib/lab/driver/workstation_driver.rb
|
128
|
-
- src/lib/lab/driver/workstation_vixr_driver.rb
|
129
|
-
- src/lib/lab/drivers.rb
|
130
|
-
- src/lib/lab/modifier/backtrack5_modifier.rb
|
131
|
-
- src/lib/lab/modifier/dos_modifier.rb
|
132
|
-
- src/lib/lab/modifier/test_modifier.rb
|
133
|
-
- src/lib/lab/modifiers.rb
|
134
|
-
- src/lib/lab/version.rb
|
135
|
-
- src/lib/lab/vm.rb
|
136
|
-
- src/lib/lab/vm_controller.rb
|
137
|
-
- src/test/.gitkeep
|
138
115
|
- test/.gitkeep
|
116
|
+
- util/console.rb
|
139
117
|
homepage: http://www.github.com/rapid7/lab/wiki
|
140
118
|
licenses: []
|
141
119
|
post_install_message:
|
data/src/Gemfile
DELETED
data/src/Rakefile
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require "bundler/gem_tasks"
|
data/src/TODO
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
This is a list of basic priorities for the lab code...
|
2
|
-
|
3
|
-
* Implement more technologies
|
4
|
-
|
5
|
-
a) finish amazon ec2 (via fog)
|
6
|
-
b) qemu
|
7
|
-
c) qemudo
|
8
|
-
d) kvm
|
9
|
-
e) other cloud technologies (newservers, slicehost/rackspace,etc)
|
10
|
-
|
11
|
-
* Implement a cloning function on each controller
|
12
|
-
|
13
|
-
* Support Windows as a host platform. Currently all the code assumes a linux host is running it. The same applies for the remote_* drivers -- they've not been tested on windows.
|
14
|
-
|
15
|
-
* Consolidate the remote_system_command code & provide a filter. Create an unsafe_system_command and unsafe_remote_system_command function call for when we control the entire string.
|
data/src/config/test_lab.yml
DELETED
data/src/config/test_targets.yml
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
- vmid: metasploitable
|
2
|
-
driver: workstation
|
3
|
-
location: /opt/vm/lab/user/Metasploitable/Metasploitable.vmx
|
4
|
-
tools: false
|
5
|
-
credentials:
|
6
|
-
- user: msfadmin
|
7
|
-
pass: msfadmin
|
8
|
-
- vmid: windows2000_target
|
9
|
-
driver: workstation
|
10
|
-
location: /opt/vm/lab/vuln/msf_Win2000SP4/Windows 2000 AS.vmx
|
11
|
-
tools: true
|
12
|
-
credentials:
|
13
|
-
- vmid: windowsxp_target
|
14
|
-
driver: remote_workstation
|
15
|
-
host: vmhost
|
16
|
-
user: root
|
17
|
-
location: /opt/vm/lab/vuln/msf_WinXPSP1/Windows XP Professional.vmx
|
18
|
-
tools: true
|
19
|
-
credentials:
|
20
|
-
- user: administrator
|
21
|
-
pass: administrator
|
data/src/lab.gemspec
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
lib = File.expand_path('../lib/', __FILE__)
|
3
|
-
$:.unshift lib unless $:.include?(lib)
|
4
|
-
require 'lab/version'
|
5
|
-
|
6
|
-
Gem::Specification.new do |s|
|
7
|
-
s.name = "lab"
|
8
|
-
s.version = Lab::VERSION
|
9
|
-
s.authors = ["Jonathan Cran"]
|
10
|
-
s.email = ["jcran@rapid7.com"]
|
11
|
-
s.homepage = "http://www.github.com/rapid7/lab/wiki"
|
12
|
-
s.summary = %q{Manage VMs like a boss}
|
13
|
-
s.description = %q{Start/Stop/Revert and do other cool stuff w/ Vmware, Virtualbox, and ESXi vms. This gem wraps common CLI utilities and other gems to create a common inteface for vms. }
|
14
|
-
|
15
|
-
s.rubyforge_project = "lab"
|
16
|
-
|
17
|
-
s.files = `git ls-files`.split("\n")
|
18
|
-
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
-
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
-
s.require_paths = ["lib"]
|
21
|
-
|
22
|
-
# specify any dependencies here; for example:
|
23
|
-
# s.add_development_dependency "rspec"
|
24
|
-
|
25
|
-
# ??
|
26
|
-
s.add_runtime_dependency "nokogiri"
|
27
|
-
|
28
|
-
# Multiple things - fallback execute / copy
|
29
|
-
s.add_runtime_dependency "net-ssh"
|
30
|
-
s.add_runtime_dependency "net-scp"
|
31
|
-
|
32
|
-
# Vmware ESX driver
|
33
|
-
s.add_runtime_dependency "rbvmomi"
|
34
|
-
|
35
|
-
end
|
@@ -1,62 +0,0 @@
|
|
1
|
-
# This controller was built against:
|
2
|
-
# VMware ESX Host Agent 4.1.0 build-348481
|
3
|
-
|
4
|
-
module Lab
|
5
|
-
module Controllers
|
6
|
-
module RemoteEsxiController
|
7
|
-
|
8
|
-
# Note that 3.5 was different (vmware-vim-cmd)
|
9
|
-
VIM_CMD = 'vim-cmd'.freeze
|
10
|
-
|
11
|
-
def self.dir_list(basepath=nil)
|
12
|
-
# Does this method really even make sense for esxi?
|
13
|
-
return "Unsupported :("
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.running_list(user, host)
|
17
|
-
user.gsub!(/(\W)*/, '')
|
18
|
-
host.gsub!(/(\W)*/, '')
|
19
|
-
|
20
|
-
# first get all registered vms
|
21
|
-
registered_vms = self.get_vms(user, host) || []
|
22
|
-
running_vms = []
|
23
|
-
|
24
|
-
# now let's see which ones are running
|
25
|
-
# TODO: this is ghetto, would be better not to connect repeatedly
|
26
|
-
registered_vms.each do |vm|
|
27
|
-
remote_cmd = "ssh #{user}@#{host} \"#{VIM_CMD} vmsvc/power.getstate #{vm[:id]}\""
|
28
|
-
raw = `#{remote_cmd}`
|
29
|
-
running_vms << vm if raw =~ /Powered on/
|
30
|
-
end
|
31
|
-
|
32
|
-
return running_vms
|
33
|
-
end
|
34
|
-
|
35
|
-
private
|
36
|
-
|
37
|
-
def self.get_vms(user, host)
|
38
|
-
user.gsub!(/(\W)*/, '')
|
39
|
-
host.gsub!(/(\W)*/, '')
|
40
|
-
|
41
|
-
vms = [] # array of VM hashes
|
42
|
-
remote_cmd = "ssh #{user}@#{host} \"#{VIM_CMD} vmsvc/getallvms | grep ^[0-9] | sed 's/[[:blank:]]\\{3,\\}/ /g'\""
|
43
|
-
raw = `#{remote_cmd}`.split("\n")
|
44
|
-
|
45
|
-
raw.each do |line|
|
46
|
-
# So effing ghetto
|
47
|
-
id_and_name = line.split('[datastore').first
|
48
|
-
id = id_and_name.split(' ').first
|
49
|
-
|
50
|
-
## TODO - there's surely a better way to do this.
|
51
|
-
name_array = id_and_name.split(' ')
|
52
|
-
name_array.shift
|
53
|
-
name = name_array.join(' ')
|
54
|
-
vms << {:id => id, :name => name}
|
55
|
-
end
|
56
|
-
|
57
|
-
return vms
|
58
|
-
end
|
59
|
-
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
module Lab
|
2
|
-
module Controllers
|
3
|
-
module RemoteWorkstationController
|
4
|
-
|
5
|
-
def self.running_list(user, host)
|
6
|
-
user.gsub!(/(\W)*/, '')
|
7
|
-
host.gsub!(/(\W)*/, '')
|
8
|
-
|
9
|
-
remote_cmd = "ssh #{user}@#{host} \"vmrun list nogui\""
|
10
|
-
vm_list = `#{remote_cmd}`.split("\n")
|
11
|
-
vm_list.shift
|
12
|
-
|
13
|
-
return vm_list
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.dir_list(basepath=nil)
|
17
|
-
vm_list = Find.find(basepath).select { |f| f =~ /\.vmx$/ }
|
18
|
-
return vm_list
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
module Lab
|
2
|
-
module Controllers
|
3
|
-
module VirtualBoxController
|
4
|
-
|
5
|
-
def self.running_list
|
6
|
-
vm_names_and_uuids = `VBoxManage list runningvms`
|
7
|
-
return vm_names_and_uuids.scan(/\"(.*)\" {.*}/).flatten
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.config_list
|
11
|
-
vm_names_and_uuids = `VBoxManage list vms`
|
12
|
-
return vm_names_and_uuids.scan(/\"(.*)\" {.*}/).flatten
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.config_list_uuid
|
16
|
-
vm_names_and_uuids = `VBoxManage list vms`
|
17
|
-
return vm_names_and_uuids.scan(/\".*\" {(.*)}/).flatten
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.dir_list(basepath=nil)
|
21
|
-
vm_list = Find.find(basepath).select { |f| f =~ /\.xml$/ }
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
# This controller was built against:
|
2
|
-
# VMware ESX Host Agent 4.1.0 build-348481
|
3
|
-
|
4
|
-
module Lab
|
5
|
-
module Controllers
|
6
|
-
module VsphereController
|
7
|
-
|
8
|
-
def self.dir_list(basepath=nil)
|
9
|
-
return "Unimplemented"
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.running_list(user, host)
|
13
|
-
return "Unimplemented"
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module Lab
|
2
|
-
module Controllers
|
3
|
-
module WorkstationController
|
4
|
-
|
5
|
-
def self.running_list
|
6
|
-
vm_list = `vmrun list`.split("\n")
|
7
|
-
vm_list.shift
|
8
|
-
return vm_list
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.dir_list(basepath=nil)
|
12
|
-
vm_list = Find.find(basepath).select { |f| f =~ /\.vmx$/ }
|
13
|
-
return vm_list
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
module Lab
|
2
|
-
module Controllers
|
3
|
-
module WorkstationVixrController
|
4
|
-
|
5
|
-
def self.running_list
|
6
|
-
vm_list = `vmrun list`.split("\n")
|
7
|
-
vm_list.shift
|
8
|
-
|
9
|
-
return vm_list
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.dir_list(basepath=nil)
|
13
|
-
vm_list = Find.find(basepath).select { |f| f =~ /\.vmx$/ }
|
14
|
-
|
15
|
-
return vm_list
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
data/src/lib/lab/controllers.rb
DELETED
@@ -1,9 +0,0 @@
|
|
1
|
-
require 'controller/workstation_controller'
|
2
|
-
require 'controller/virtualbox_controller'
|
3
|
-
require 'controller/fog_controller'
|
4
|
-
require 'controller/dynagen_controller'
|
5
|
-
require 'controller/remote_workstation_controller'
|
6
|
-
require 'controller/remote_esxi_controller'
|
7
|
-
require 'controller/vsphere_controller'
|
8
|
-
#require 'controller/qemu_controller'
|
9
|
-
#require 'controller/qemudo_controller'
|
@@ -1,47 +0,0 @@
|
|
1
|
-
require 'vm_driver'
|
2
|
-
|
3
|
-
#
|
4
|
-
# $Id$
|
5
|
-
#
|
6
|
-
|
7
|
-
#
|
8
|
-
# To use this driver, you have to have a lab which is preconfigured. The best / easiest
|
9
|
-
# way i've found to to set up a lab is GNS3
|
10
|
-
#
|
11
|
-
|
12
|
-
module Lab
|
13
|
-
module Drivers
|
14
|
-
class DynagenDriver < VmDriver
|
15
|
-
def initialize(config,dynagen_config)
|
16
|
-
super(config)
|
17
|
-
@running = false
|
18
|
-
@dynagen_platform = filter_command(dynagen_config['dynagen_platform'])
|
19
|
-
end
|
20
|
-
|
21
|
-
def start
|
22
|
-
# TODO - write the location-file to a temp-file
|
23
|
-
# and set the autostart property
|
24
|
-
|
25
|
-
## start background dynamips process
|
26
|
-
system_command("dynamips -H #{@dynagen_platform} &")
|
27
|
-
system_command("dynagen #{@location}")
|
28
|
-
@running = true
|
29
|
-
end
|
30
|
-
|
31
|
-
def stop
|
32
|
-
system_command("killall dynagen")
|
33
|
-
@running = false
|
34
|
-
end
|
35
|
-
|
36
|
-
def cleanup
|
37
|
-
`killall dynagen`
|
38
|
-
`killall dynamips`
|
39
|
-
@running = false
|
40
|
-
end
|
41
|
-
|
42
|
-
def running?
|
43
|
-
return @running
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|