lab 0.0.3 → 0.0.4

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.
@@ -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: []