lab 0.1.5 → 0.2.0

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.
Files changed (63) hide show
  1. data/.gitignore +4 -0
  2. data/config/test_lab.yml +11 -0
  3. data/config/test_targets.yml +21 -0
  4. data/lib/lab/controller/dynagen_controller.rb +6 -6
  5. data/lib/lab/controller/remote_esx_controller.rb +51 -51
  6. data/lib/lab/controller/remote_esxi_controller.rb +62 -0
  7. data/lib/lab/controller/remote_workstation_controller.rb +12 -12
  8. data/lib/lab/controller/virtualbox_controller.rb +16 -16
  9. data/lib/lab/controller/workstation_controller.rb +9 -9
  10. data/lib/lab/controller/workstation_vixr_controller.rb +9 -9
  11. data/lib/lab/controllers.rb +1 -3
  12. data/lib/lab/driver/dynagen_driver.rb +32 -32
  13. data/lib/lab/driver/fog_driver.rb +144 -144
  14. data/lib/lab/driver/remote_esxi_driver.rb +177 -0
  15. data/lib/lab/driver/remote_workstation_driver.rb +181 -181
  16. data/lib/lab/driver/virtualbox_driver.rb +132 -132
  17. data/lib/lab/driver/vm_driver.rb +177 -177
  18. data/lib/lab/driver/workstation_driver.rb +218 -218
  19. data/lib/lab/driver/workstation_vixr_driver.rb +108 -108
  20. data/lib/lab/drivers.rb +1 -1
  21. data/lib/lab/modifier/backtrack5_modifier.rb +8 -8
  22. data/lib/lab/modifier/dos_modifier.rb +3 -3
  23. data/lib/lab/modifier/test_modifier.rb +6 -6
  24. data/lib/lab/version.rb +1 -1
  25. data/lib/lab/vm.rb +242 -242
  26. data/lib/lab/vm_controller.rb +217 -211
  27. data/src/Gemfile +4 -0
  28. data/src/README.md +80 -0
  29. data/src/Rakefile +1 -0
  30. data/src/TODO +15 -0
  31. data/src/config/test_lab.yml +11 -0
  32. data/src/config/test_targets.yml +21 -0
  33. data/src/lab.gemspec +35 -0
  34. data/src/lib/lab.rb +2 -0
  35. data/src/lib/lab/controller/dynagen_controller.rb +14 -0
  36. data/src/lib/lab/controller/fog_controller.rb +6 -0
  37. data/src/lib/lab/controller/remote_esxi_controller.rb +62 -0
  38. data/src/lib/lab/controller/remote_workstation_controller.rb +22 -0
  39. data/src/lib/lab/controller/virtualbox_controller.rb +25 -0
  40. data/src/lib/lab/controller/vsphere_controller.rb +18 -0
  41. data/src/lib/lab/controller/workstation_controller.rb +17 -0
  42. data/src/lib/lab/controller/workstation_vixr_controller.rb +19 -0
  43. data/src/lib/lab/controllers.rb +9 -0
  44. data/src/lib/lab/driver/dynagen_driver.rb +47 -0
  45. data/src/lib/lab/driver/fog_driver.rb +104 -0
  46. data/src/lib/lab/driver/remote_esxi_driver.rb +177 -0
  47. data/src/lib/lab/driver/remote_workstation_driver.rb +197 -0
  48. data/src/lib/lab/driver/virtualbox_driver.rb +142 -0
  49. data/src/lib/lab/driver/vm_driver.rb +195 -0
  50. data/src/lib/lab/driver/vsphere_driver.rb +120 -0
  51. data/src/lib/lab/driver/workstation_driver.rb +234 -0
  52. data/src/lib/lab/driver/workstation_vixr_driver.rb +126 -0
  53. data/src/lib/lab/drivers.rb +9 -0
  54. data/src/lib/lab/modifier/backtrack5_modifier.rb +16 -0
  55. data/src/lib/lab/modifier/dos_modifier.rb +14 -0
  56. data/src/lib/lab/modifier/test_modifier.rb +16 -0
  57. data/src/lib/lab/modifiers.rb +3 -0
  58. data/src/lib/lab/version.rb +3 -0
  59. data/src/lib/lab/vm.rb +269 -0
  60. data/src/lib/lab/vm_controller.rb +275 -0
  61. data/src/test/.gitkeep +0 -0
  62. metadata +51 -12
  63. data/lib/lab/driver/remote_esx_driver.rb +0 -177
@@ -0,0 +1,275 @@
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
+ require 'net/scp'
25
+ require 'net/ssh'
26
+
27
+ module Lab
28
+ module Controllers
29
+ class VmController
30
+
31
+ include Enumerable
32
+ include Lab::Controllers::WorkstationController
33
+ include Lab::Controllers::RemoteWorkstationController
34
+ include Lab::Controllers::VirtualBoxController
35
+ include Lab::Controllers::FogController
36
+ include Lab::Controllers::DynagenController
37
+ include Lab::Controllers::RemoteEsxiController
38
+ include Lab::Controllers::VsphereController
39
+ #include Lab::Controllers::QemuController
40
+ #include Lab::Controllers::QemudoController
41
+ def initialize (labdef=nil)
42
+
43
+ # Start with an empty array of vm objects
44
+ @vms = []
45
+
46
+ # labdef is a just a big array of hashes
47
+ load_vms(labdef) if labdef
48
+ end
49
+
50
+ def clear!
51
+ @vms = []
52
+ end
53
+
54
+ def [](x)
55
+ # Support indexing by both names and number
56
+ if x.class == String
57
+ find_by_vmid(x)
58
+ else
59
+ return @vms[x]
60
+ end
61
+ end
62
+
63
+ def find_by_vmid(search)
64
+ @vms.each do |vm|
65
+ return vm if vm.hostname.to_s.downcase == search.to_s.downcase
66
+ end
67
+ return nil
68
+ end
69
+
70
+ def find_by_tag(search)
71
+ @vms.each do |vm|
72
+ vm.tags.each do |tag|
73
+ return vm if tag.downcase == search.to_s.downcase
74
+ end
75
+ end
76
+ return nil
77
+ end
78
+
79
+ def add_vm(vmid, location=nil, os=nil, tools=nil, credentials=nil, user=nil, host=nil)
80
+ @vms << Vm.new( {
81
+ 'vmid' => vmid,
82
+ 'driver' => type,
83
+ 'location' => location,
84
+ 'credentials' => credentials,
85
+ 'user' => user,
86
+ 'host' => host
87
+ })
88
+ end
89
+
90
+ def remove_by_vmid(vmid)
91
+ @vms.delete(self.find_by_vmid(vmid))
92
+ end
93
+
94
+ def from_file(file)
95
+ load_vms(YAML::load_file(file))
96
+ end
97
+
98
+ def load_vms(vms)
99
+ vms.each do |item|
100
+ vm = Vm.new(item)
101
+ @vms << vm unless includes_vmid? vm.vmid
102
+ end
103
+ end
104
+
105
+ def to_file(file)
106
+ File.open(file, 'w') { |f| @vms.each { |vm| f.puts vm.to_yaml } }
107
+ end
108
+
109
+ def each &block
110
+ @vms.each { |vm| yield vm }
111
+ end
112
+
113
+ def includes?(specified_vm)
114
+ @vms.each { |vm| if (vm == specified_vm) then return true end }
115
+ end
116
+
117
+ def includes_vmid?(vmid)
118
+ @vms.each do |vm|
119
+ return true if (vm.vmid == vmid)
120
+ end
121
+ false
122
+ end
123
+
124
+ #
125
+ # Build a vm lab from a directory of files. Really only useful for file-based
126
+ # vm hosts. (vmware workstation)
127
+ #
128
+ def build_from_dir(driver_type, dir, clear=false)
129
+
130
+ if clear
131
+ @vms = []
132
+ end
133
+
134
+ if driver_type.downcase == "workstation"
135
+ vm_list = ::Lab::Controllers::WorkstationController::dir_list(dir)
136
+ elsif driver_type.downcase == "remote_workstation"
137
+ vm_list = ::Lab::Controllers::RemoteWorkstationController::dir_list(dir)
138
+ elsif driver_type.downcase == "virtualbox"
139
+ vm_list = ::Lab::Controllers::VirtualBoxController::dir_list(dir)
140
+ elsif driver_type.downcase == "fog"
141
+ vm_list = ::Lab::Controllers::FogController::dir_list(dir)
142
+ elsif driver_type.downcase == "Dynagen"
143
+ vm_list = ::Lab::Controllers::DynagenController::dir_list(dir)
144
+ elsif driver_type.downcase == "remote_esxi"
145
+ vm_list =::Lab::Controllers::RemoteEsxiController::dir_list(dir)
146
+ elsif driver_type.downcase == "vsphere"
147
+ vm_list =::Lab::Controllers::VsphereController::dir_list(dir)
148
+ else
149
+ raise TypeError, "Unsupported VM Type"
150
+ end
151
+
152
+ vm_list.each_index do |index|
153
+ @vms << Vm.new( {'vmid' => "vm_#{index}", 'driver' => driver_type, 'location' => vm_list[index]} )
154
+ end
155
+ end
156
+
157
+
158
+ #
159
+ # Builds a vm lab from all running vms. Handy for connecting and saving out
160
+ # a config or just managing the currently running vms
161
+ #
162
+ def build_from_running(driver_type=nil, user=nil, host=nil, clear=false, pass=nil)
163
+
164
+ if clear
165
+ @vms = []
166
+ end
167
+
168
+ case driver_type.intern
169
+ when :workstation
170
+ vm_list = ::Lab::Controllers::WorkstationController::running_list
171
+ vm_list.each do |item|
172
+ # Name the VM
173
+ index = @vms.count + 1
174
+ # Add it to the vm list
175
+ @vms << Vm.new({
176
+ 'vmid' => "vm_#{index}",
177
+ 'driver' => driver_type,
178
+ 'location' => item
179
+ })
180
+ end
181
+ when :remote_workstation
182
+ vm_list = ::Lab::Controllers::RemoteWorkstationController::running_list(user, host)
183
+ vm_list.each do |item|
184
+ # Name the VM
185
+ index = @vms.count + 1
186
+ # Add it to the VM list
187
+ @vms << Vm.new({
188
+ 'vmid' => "vm_#{index}",
189
+ 'driver' => driver_type,
190
+ 'location' => item,
191
+ 'user' => user,
192
+ 'host' => host
193
+ })
194
+ end
195
+ when :virtualbox
196
+ vm_list = ::Lab::Controllers::VirtualBoxController::running_list
197
+ vm_list.each do |item|
198
+ # Add it to the vm list
199
+ @vms << Vm.new( {
200
+ 'vmid' => "#{item}",
201
+ 'driver' => driver_type,
202
+ 'location' => nil
203
+ })
204
+ end
205
+ when :fog
206
+ raise "Unsupported"
207
+ when :dynagen
208
+ raise "Unsupported"
209
+ when :remote_esxi
210
+ vm_list = ::Lab::Controllers::RemoteEsxiController::running_list(user,host)
211
+ vm_list.each do |item|
212
+ @vms << Vm.new( {
213
+ 'vmid' => "#{item[:id]}",
214
+ 'name' => "#{item[:name]}",
215
+ 'driver' => driver_type,
216
+ 'user' => user,
217
+ 'host' => host
218
+ })
219
+ end
220
+ when :vsphere
221
+ vm_list = ::Lab::Controllers::VsphereController::running_list(user,host,pass)
222
+ vm_list.each do |item|
223
+ @vms << Vm.new( {
224
+ 'vmid' => "#{item[:id]}",
225
+ 'name' => "#{item[:name]}",
226
+ 'driver' => driver_type,
227
+ 'user' => user,
228
+ 'host' => host,
229
+ 'pass' => pass
230
+ })
231
+ end
232
+ else
233
+ raise TypeError, "Unsupported VM Type"
234
+ end
235
+
236
+ end
237
+
238
+ #
239
+ # Applicable only to virtualbox. Reads the config file & parses / creates
240
+ # VM objects for each vm.
241
+ #
242
+ def build_from_config(driver_type=nil, user=nil, host=nil, clear=false)
243
+ if clear
244
+ @vms = []
245
+ end
246
+
247
+ case driver_type.intern
248
+ when :virtualbox
249
+ vm_list = ::Lab::Controllers::VirtualBoxController::config_list
250
+
251
+ vm_list.each do |item|
252
+ # Add it to the vm list
253
+ @vms << Vm.new( {
254
+ 'vmid' => "#{item}",
255
+ 'driver' => driver_type,
256
+ 'location' => nil,
257
+ 'user' => user,
258
+ 'host' => host } )
259
+ end
260
+
261
+ else
262
+ raise TypeError, "Unsupported VM Type"
263
+ end
264
+
265
+ end
266
+
267
+ def running?(vmid)
268
+ if includes_vmid?(vmid)
269
+ return self.find_by_vmid(vmid).running?
270
+ end
271
+ return false
272
+ end
273
+ end
274
+ end
275
+ end
data/src/test/.gitkeep ADDED
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.1.5
4
+ version: 0.2.0
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: 2012-03-14 00:00:00.000000000 Z
12
+ date: 2012-04-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
16
- requirement: &20127300 !ruby/object:Gem::Requirement
16
+ requirement: &14248700 !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: *20127300
24
+ version_requirements: *14248700
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: net-ssh
27
- requirement: &20126880 !ruby/object:Gem::Requirement
27
+ requirement: &14247980 !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: *20126880
35
+ version_requirements: *14247980
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: net-scp
38
- requirement: &20126460 !ruby/object:Gem::Requirement
38
+ requirement: &14229460 !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: *20126460
46
+ version_requirements: *14229460
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rbvmomi
49
- requirement: &20126040 !ruby/object:Gem::Requirement
49
+ requirement: &14228480 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *20126040
57
+ version_requirements: *14228480
58
58
  description: ! 'Start/Stop/Revert and do other cool stuff w/ Vmware, Virtualbox, and
59
59
  ESXi vms. This gem wraps common CLI utilities and other gems to create a common
60
60
  inteface for vms. '
@@ -64,16 +64,20 @@ executables: []
64
64
  extensions: []
65
65
  extra_rdoc_files: []
66
66
  files:
67
+ - .gitignore
67
68
  - Gemfile
68
69
  - Gemfile.lock
69
70
  - README.md
70
71
  - Rakefile
71
72
  - TODO
73
+ - config/test_lab.yml
74
+ - config/test_targets.yml
72
75
  - lab.gemspec
73
76
  - lib/lab.rb
74
77
  - lib/lab/controller/dynagen_controller.rb
75
78
  - lib/lab/controller/fog_controller.rb
76
79
  - lib/lab/controller/remote_esx_controller.rb
80
+ - lib/lab/controller/remote_esxi_controller.rb
77
81
  - lib/lab/controller/remote_workstation_controller.rb
78
82
  - lib/lab/controller/virtualbox_controller.rb
79
83
  - lib/lab/controller/workstation_controller.rb
@@ -81,7 +85,7 @@ files:
81
85
  - lib/lab/controllers.rb
82
86
  - lib/lab/driver/dynagen_driver.rb
83
87
  - lib/lab/driver/fog_driver.rb
84
- - lib/lab/driver/remote_esx_driver.rb
88
+ - lib/lab/driver/remote_esxi_driver.rb
85
89
  - lib/lab/driver/remote_workstation_driver.rb
86
90
  - lib/lab/driver/virtualbox_driver.rb
87
91
  - lib/lab/driver/vm_driver.rb
@@ -95,6 +99,41 @@ files:
95
99
  - lib/lab/version.rb
96
100
  - lib/lab/vm.rb
97
101
  - lib/lab/vm_controller.rb
102
+ - src/Gemfile
103
+ - src/README.md
104
+ - src/Rakefile
105
+ - src/TODO
106
+ - src/config/test_lab.yml
107
+ - src/config/test_targets.yml
108
+ - src/lab.gemspec
109
+ - src/lib/lab.rb
110
+ - src/lib/lab/controller/dynagen_controller.rb
111
+ - src/lib/lab/controller/fog_controller.rb
112
+ - src/lib/lab/controller/remote_esxi_controller.rb
113
+ - src/lib/lab/controller/remote_workstation_controller.rb
114
+ - src/lib/lab/controller/virtualbox_controller.rb
115
+ - src/lib/lab/controller/vsphere_controller.rb
116
+ - src/lib/lab/controller/workstation_controller.rb
117
+ - src/lib/lab/controller/workstation_vixr_controller.rb
118
+ - src/lib/lab/controllers.rb
119
+ - src/lib/lab/driver/dynagen_driver.rb
120
+ - src/lib/lab/driver/fog_driver.rb
121
+ - src/lib/lab/driver/remote_esxi_driver.rb
122
+ - src/lib/lab/driver/remote_workstation_driver.rb
123
+ - src/lib/lab/driver/virtualbox_driver.rb
124
+ - src/lib/lab/driver/vm_driver.rb
125
+ - src/lib/lab/driver/vsphere_driver.rb
126
+ - src/lib/lab/driver/workstation_driver.rb
127
+ - src/lib/lab/driver/workstation_vixr_driver.rb
128
+ - src/lib/lab/drivers.rb
129
+ - src/lib/lab/modifier/backtrack5_modifier.rb
130
+ - src/lib/lab/modifier/dos_modifier.rb
131
+ - src/lib/lab/modifier/test_modifier.rb
132
+ - src/lib/lab/modifiers.rb
133
+ - src/lib/lab/version.rb
134
+ - src/lib/lab/vm.rb
135
+ - src/lib/lab/vm_controller.rb
136
+ - src/test/.gitkeep
98
137
  - test/.gitkeep
99
138
  homepage: http://www.github.com/rapid7/lab/wiki
100
139
  licenses: []
@@ -116,7 +155,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
116
155
  version: '0'
117
156
  requirements: []
118
157
  rubyforge_project: lab
119
- rubygems_version: 1.8.10
158
+ rubygems_version: 1.8.15
120
159
  signing_key:
121
160
  specification_version: 3
122
161
  summary: Manage VMs like a boss
@@ -1,177 +0,0 @@
1
- require 'vm_driver'
2
-
3
- ##
4
- ## $Id$
5
- ##
6
-
7
- # This driver was built against:
8
- # VMware ESX Host Agent 4.1.0 build-348481
9
-
10
- module Lab
11
- module Drivers
12
-
13
- class RemoteEsxDriver < VmDriver
14
-
15
- def initialize(config)
16
- unless config['user'] then raise ArgumentError, "Must provide a username" end
17
- unless config['host'] then raise ArgumentError, "Must provide a hostname" end
18
-
19
- super(config)
20
-
21
- @user = filter_command(config['user'])
22
- @host = filter_command(config['host'])
23
- @port = config['port']
24
- end
25
-
26
- def start
27
- remote_system_command("vim-cmd vmsvc/power.on #{@vmid}")
28
- end
29
-
30
- def stop
31
- remote_system_command("vim-cmd vmsvc/power.off #{@vmid}")
32
- end
33
-
34
- def suspend
35
- remote_system_command("vim-cmd vmsvc/power.suspend #{@vmid}")
36
- end
37
-
38
- def pause
39
- remote_system_command("vim-cmd vmsvc/power.suspend #{@vmid}")
40
- end
41
-
42
- def resume
43
- remote_system_command("vim-cmd vmsvc/power.suspendResume #{@vmid}")
44
- end
45
-
46
- def reset
47
- remote_system_command("vim-cmd vmsvc/power.reset #{@vmid}")
48
- end
49
-
50
- def create_snapshot(snapshot)
51
- snapshot = filter_input(snapshot)
52
-
53
- remote_system_command("vim-cmd vmsvc/snapshot.create #{@vmid} #{snapshot} \'lab created snapshot\' 1 true")
54
- end
55
-
56
- def revert_snapshot(snapshot)
57
-
58
- snapshots = get_snapshots
59
-
60
- # Look through our snapshot list, choose the right one based on display_name
61
- snapshots.each do |snapshot_obj|
62
-
63
- #puts "DEBUG: checking #{snapshot_obj}"
64
-
65
- if snapshot_obj[:display_name].downcase == snapshot.downcase
66
- snapshot_identifier = snapshot_obj[:name].join(" ")
67
-
68
- #puts "DEBUG: I would revert to #{snapshot_obj}"
69
- remote_system_command("vim-cmd vmsvc/snapshot.revert #{@vmid} 0 #{snapshot_identifier}")
70
- return true
71
- end
72
- end
73
-
74
- # If we got here, the snapshot didn't exist
75
- raise "Invalid Snapshot Name"
76
- end
77
-
78
- def delete_snapshot(snapshot, remove_children=false)
79
- snapshots = get_snapshots
80
-
81
- # Look through our snapshot list, choose the right one based on display_name
82
- snapshots.each do |snapshot_obj|
83
-
84
- #puts "DEBUG: checking #{snapshot_obj}"
85
-
86
- if snapshot_obj[:display_name].downcase == snapshot.downcase
87
- snapshot_identifier = snapshot_obj[:name].join(" ")
88
- remote_system_command("vim-cmd vmsvc/snapshot.remove #{@vmid} #{remove_children} #{snapshot_identifier}")
89
- return true
90
- end
91
- end
92
-
93
- # If we got here, the snapshot didn't exist
94
- raise "Invalid Snapshot Name"
95
- end
96
-
97
- def delete_all_snapshots
98
- remote_system_command("vim-cmd vmsvc/snapshot.removeall #{@vmid}")
99
- end
100
-
101
- def run_command(command)
102
- raise "Not Implemented"
103
- end
104
-
105
- def copy_from(from, to)
106
- if @os == "linux"
107
- scp_from(from, to)
108
- else
109
- raise "Unimplemented"
110
- end
111
- end
112
-
113
- def copy_to(from, to)
114
- if @os == "linux"
115
- scp_to(from, to)
116
- else
117
- raise "Unimplemented"
118
- end
119
- end
120
-
121
- def check_file_exists(file)
122
- raise "Not Implemented"
123
- end
124
-
125
- def create_directory(directory)
126
- raise "Not Implemented"
127
- end
128
-
129
- def cleanup
130
-
131
- end
132
-
133
- def running?
134
- power_status_string = `ssh #{@user}@#{@host} \"vim-cmd vmsvc/power.getstate #{@vmid}\"`
135
- return true if power_status_string =~ /Powered on/
136
- false
137
- end
138
-
139
- def get_snapshots
140
- # Command take the format:
141
- # vmware-vim-cmd vmsvc/snapshot.revert [vmid: int] [snapshotlevel: int] [snapshotindex: int]
142
- output = `ssh #{@user}@#{@host} \"vim-cmd vmsvc/snapshot.get #{@vmid}\"`
143
-
144
- # this keeps track of the snapshots, takes the form:
145
- #[ {:name => [0,0], :display_name => "String containing the snapshotname},
146
- # {:name => [0,1], :display_name => "String containing the snapshotname}, ]
147
- # ...
148
- snapshots = []
149
-
150
- # Use these to keep track of the parsing...
151
- current_tree = -1
152
- current_num = 0
153
- count = 0
154
-
155
- # Do the parsing & stick the snapshots in the snapshots array
156
- output_lines = output.split("\n")
157
- output_lines.each do |line|
158
- if line.include?("|") # this is a new snapshot
159
- if line.include?("ROOT") # it's a root
160
- current_num = 0
161
- current_tree = current_tree + 1 # new tree
162
- snapshots << { :name => [current_num, current_tree], :display_name => output_lines[count+1].split(":").last.strip }
163
- else
164
- current_num = current_num + 1 # new snapshot in current tree
165
- snapshots << { :name => [current_num, current_tree], :display_name => output_lines[count+1].split(":").last.strip }
166
- end
167
- end
168
- count = count+1
169
- end
170
-
171
- snapshots
172
- end
173
-
174
- end
175
-
176
- end
177
- end