lab 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,238 @@
1
+ ##
2
+ ## $Id$
3
+ ##
4
+ ## This is the main lab controller. Require this controller to get all
5
+ ## lab functionality.
6
+ ##
7
+ ##
8
+
9
+ $:.unshift(File.expand_path(File.dirname(__FILE__)))
10
+ $:.unshift(File.expand_path(File.join(File.dirname(__FILE__), 'driver')))
11
+ $:.unshift(File.expand_path(File.join(File.dirname(__FILE__), 'controller')))
12
+ $:.unshift(File.expand_path(File.join(File.dirname(__FILE__), 'modifier')))
13
+
14
+ require 'find'
15
+ require 'yaml'
16
+ require 'enumerator'
17
+ require 'fileutils'
18
+
19
+ require 'vm'
20
+ require 'controllers'
21
+ require 'drivers'
22
+ require 'modifiers'
23
+
24
+ module Lab
25
+ module Controllers
26
+ class VmController
27
+
28
+ include Enumerable
29
+ include Lab::Controllers::WorkstationController
30
+ include Lab::Controllers::VirtualBoxController
31
+ include Lab::Controllers::FogController
32
+ include Lab::Controllers::DynagenController
33
+ include Lab::Controllers::RemoteEsxController
34
+ include Lab::Controllers::RemoteWorkstationController
35
+ #include Lab::Controllers::QemuController
36
+ #include Lab::Controllers::QemudoController
37
+ def initialize (labdef=nil)
38
+
39
+ # Start with an empty array of vm objects
40
+ @vms = []
41
+
42
+ # labdef is a just a big array of hashes
43
+ load_vms(labdef) if labdef
44
+ end
45
+
46
+ def clear!
47
+ @vms = []
48
+ end
49
+
50
+ def [](x)
51
+ # Support indexing by both names and number
52
+ if x.class == String
53
+ find_by_vmid(x)
54
+ else
55
+ return @vms[x]
56
+ end
57
+ end
58
+
59
+ def find_by_vmid(vmid)
60
+ @vms.each do |vm|
61
+ if (vm.hostname.to_s.downcase == vmid.to_s.downcase)
62
+ return vm
63
+ end
64
+ end
65
+ return nil
66
+ end
67
+
68
+ def add_vm(vmid, location=nil, os=nil, tools=nil, credentials=nil, user=nil, host=nil)
69
+ @vms << Vm.new( { 'vmid' => vmid,
70
+ 'driver' => type,
71
+ 'location' => location,
72
+ 'credentials' => credentials,
73
+ 'user' => user,
74
+ 'host' => host} )
75
+ end
76
+
77
+ def remove_by_vmid(vmid)
78
+ @vms.delete(self.find_by_vmid(vmid))
79
+ end
80
+
81
+ def from_file(file)
82
+ load_vms(YAML::load_file(file))
83
+ end
84
+
85
+ def load_vms(vms)
86
+ vms.each do |item|
87
+ vm = Vm.new(item)
88
+ @vms << vm unless includes_vmid? vm.vmid
89
+ end
90
+ end
91
+
92
+ def to_file(file)
93
+ File.open(file, 'w') { |f| @vms.each { |vm| f.puts vm.to_yaml } }
94
+ end
95
+
96
+ def each &block
97
+ @vms.each { |vm| yield vm }
98
+ end
99
+
100
+ def includes?(specified_vm)
101
+ @vms.each { |vm| if (vm == specified_vm) then return true end }
102
+ end
103
+
104
+ def includes_vmid?(vmid)
105
+ @vms.each do |vm|
106
+ return true if (vm.vmid == vmid)
107
+ end
108
+ false
109
+ end
110
+
111
+ def build_from_dir(driver_type, dir, clear=false)
112
+
113
+ if clear
114
+ @vms = []
115
+ end
116
+
117
+ if driver_type.downcase == "workstation"
118
+ vm_list = ::Lab::Controllers::WorkstationController::dir_list(dir)
119
+ elsif driver_type.downcase == "virtualbox"
120
+ vm_list = ::Lab::Controllers::VirtualBoxController::dir_list(dir)
121
+ elsif driver_type.downcase == "fog"
122
+ vm_list = ::Lab::Controllers::FogController::dir_list(dir)
123
+ elsif driver_type.downcase == "Dynagen"
124
+ vm_list = ::Lab::Controllers::DynagenController::dir_list(dir)
125
+ elsif driver_type.downcase == "remote_workstation"
126
+ vm_list = ::Lab::Controllers::RemoteWorkstationController::dir_list(dir)
127
+ elsif driver_type.downcase == "remote_esx"
128
+ vm_list =::Lab::Controllers::RemoteEsxController::dir_list(dir)
129
+ else
130
+ raise TypeError, "Unsupported VM Type"
131
+ end
132
+
133
+ vm_list.each_index do |index|
134
+ @vms << Vm.new( {'vmid' => "vm_#{index}", 'driver' => driver_type, 'location' => vm_list[index]} )
135
+ end
136
+ end
137
+
138
+ def build_from_running(driver_type=nil, user=nil, host=nil, clear=false)
139
+
140
+ if clear
141
+ @vms = []
142
+ end
143
+
144
+ case driver_type.intern
145
+ when :workstation
146
+ vm_list = ::Lab::Controllers::WorkstationController::running_list
147
+
148
+ vm_list.each do |item|
149
+
150
+ ## Name the VM
151
+ index = @vms.count + 1
152
+
153
+ ## Add it to the vm list
154
+ @vms << Vm.new( { 'vmid' => "vm_#{index}",
155
+ 'driver' => driver_type,
156
+ 'location' => item,
157
+ 'user' => user,
158
+ 'host' => host } )
159
+ end
160
+
161
+
162
+ when :virtualbox
163
+ vm_list = ::Lab::Controllers::VirtualBoxController::running_list
164
+ vm_list.each do |item|
165
+ ## Add it to the vm list
166
+ @vms << Vm.new( { 'vmid' => "#{item}",
167
+ 'driver' => driver_type,
168
+ 'location' => nil })
169
+ end
170
+ when :fog
171
+ raise "Unsupported" # TODO - figure out a way to allow this
172
+ when :dynagen
173
+ raise "Unsupported"
174
+ when :remote_workstation
175
+ vm_list = ::Lab::Controllers::RemoteWorkstationController::running_list(user, host)
176
+
177
+ vm_list.each do |item|
178
+
179
+ ## Name the VM
180
+ index = @vms.count + 1
181
+
182
+ ## Add it to the vm list
183
+ @vms << Vm.new( { 'vmid' => "vm_#{index}",
184
+ 'driver' => driver_type,
185
+ 'location' => item,
186
+ 'user' => user,
187
+ 'host' => host } )
188
+ end
189
+ when :remote_esx
190
+ vm_list = ::Lab::Controllers::RemoteEsxController::running_list(user,host)
191
+
192
+ vm_list.each do |item|
193
+ @vms << Vm.new( { 'vmid' => "#{item[:id]}",
194
+ 'name' => "#{item[:name]}",
195
+ 'driver' => driver_type,
196
+ 'user' => user,
197
+ 'host' => host } )
198
+ end
199
+
200
+ else
201
+ raise TypeError, "Unsupported VM Type"
202
+ end
203
+
204
+ end
205
+
206
+ def build_from_config(driver_type=nil, user=nil, host=nil, clear=false)
207
+ if clear
208
+ @vms = []
209
+ end
210
+
211
+ case driver_type.intern
212
+ when :virtualbox
213
+ vm_list = ::Lab::Controllers::VirtualBoxController::config_list
214
+
215
+ vm_list.each do |item|
216
+ ## Add it to the vm list
217
+ @vms << Vm.new( { 'vmid' => "#{item}",
218
+ 'driver' => driver_type,
219
+ 'location' => nil,
220
+ 'user' => user,
221
+ 'host' => host } )
222
+ end
223
+
224
+ else
225
+ raise TypeError, "Unsupported VM Type"
226
+ end
227
+
228
+ end
229
+
230
+ def running?(vmid)
231
+ if includes_vmid?(vmid)
232
+ return self.find_by_vmid(vmid).running?
233
+ end
234
+ return false
235
+ end
236
+ end
237
+ end
238
+ end
File without changes
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.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-15 00:00:00.000000000 Z
12
+ date: 2011-12-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
16
- requirement: &16885500 !ruby/object:Gem::Requirement
16
+ requirement: &7082080 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *16885500
24
+ version_requirements: *7082080
25
25
  description: Start/Stop/Revert and do other cool stuff w/ Vmware, Virtualbox, and
26
26
  ESXi vms
27
27
  email:
@@ -29,8 +29,41 @@ email:
29
29
  executables: []
30
30
  extensions: []
31
31
  extra_rdoc_files: []
32
- files: []
33
- homepage: http://www.pentestify.com/lab
32
+ files:
33
+ - Gemfile
34
+ - Gemfile.lock
35
+ - README
36
+ - Rakefile
37
+ - TODO
38
+ - lab.gemspec
39
+ - lib/lab.rb
40
+ - lib/lab/controller/dynagen_controller.rb
41
+ - lib/lab/controller/fog_controller.rb
42
+ - lib/lab/controller/remote_esx_controller.rb
43
+ - lib/lab/controller/remote_workstation_controller.rb
44
+ - lib/lab/controller/virtualbox_controller.rb
45
+ - lib/lab/controller/workstation_controller.rb
46
+ - lib/lab/controller/workstation_vixr_controller.rb
47
+ - lib/lab/controllers.rb
48
+ - lib/lab/driver/dynagen_driver.rb
49
+ - lib/lab/driver/fog_driver.rb
50
+ - lib/lab/driver/remote_esx_driver.rb
51
+ - lib/lab/driver/remote_workstation_driver.rb
52
+ - lib/lab/driver/virtualbox_driver.rb
53
+ - lib/lab/driver/vm_driver.rb
54
+ - lib/lab/driver/workstation_driver.rb
55
+ - lib/lab/driver/workstation_vixr_driver.rb
56
+ - lib/lab/drivers.rb
57
+ - lib/lab/modifier/backtrack5_modifier.rb
58
+ - lib/lab/modifier/dos_modifier.rb
59
+ - lib/lab/modifier/meterpreter_modifier.rb
60
+ - lib/lab/modifier/test_modifier.rb
61
+ - lib/lab/modifiers.rb
62
+ - lib/lab/version.rb
63
+ - lib/lab/vm.rb
64
+ - lib/lab/vm_controller.rb
65
+ - test/.gitkeep
66
+ homepage: http://www.pentestify.com/projects/lab
34
67
  licenses: []
35
68
  post_install_message:
36
69
  rdoc_options: []