lab 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|