lab-manager 1.0.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.
- data/lib/lab_manager/machine.rb +31 -0
- data/lib/lab_manager.rb +181 -0
- metadata +78 -0
@@ -0,0 +1,31 @@
|
|
1
|
+
class Machine
|
2
|
+
|
3
|
+
def self.fromList(data)
|
4
|
+
return [] if data.nil?
|
5
|
+
return [] if data["ListMachinesResult"].nil?
|
6
|
+
return [] if data["ListMachinesResult"]["Machine"].nil?
|
7
|
+
|
8
|
+
data["ListMachinesResult"]["Machine"].collect { |machine|
|
9
|
+
Machine.new(machine)
|
10
|
+
}
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.to_csv(machines)
|
14
|
+
machines.each do |machine|
|
15
|
+
puts machine.to_csv
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
attr_reader :name, :internal_ip, :external_ip
|
20
|
+
|
21
|
+
def initialize(machine)
|
22
|
+
@name = machine["name"]
|
23
|
+
@internal_ip = machine["internalIP"]
|
24
|
+
@external_ip = machine["externalIP"]
|
25
|
+
end
|
26
|
+
|
27
|
+
def to_csv
|
28
|
+
"#{name},#{internal_ip},#{external_ip}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
data/lib/lab_manager.rb
ADDED
@@ -0,0 +1,181 @@
|
|
1
|
+
require 'net/https'
|
2
|
+
require 'soap/wsdlDriver'
|
3
|
+
require 'soap/header/simplehandler'
|
4
|
+
require 'soap/element'
|
5
|
+
require 'xsd/datatypes'
|
6
|
+
|
7
|
+
require 'soap/netHttpClient'
|
8
|
+
|
9
|
+
require 'lab_manager/machine'
|
10
|
+
|
11
|
+
#
|
12
|
+
# Monkey Patch HTTP Client
|
13
|
+
# Sets SSL verify mode to NONE so that we can connect to an SSL server
|
14
|
+
# that does not have a trusted certificate.
|
15
|
+
#
|
16
|
+
# The 1.8.7 patch adds a new constructor.
|
17
|
+
# The 1.9.3 patch intercepts the existing constructor now that the class
|
18
|
+
# name has changed.
|
19
|
+
if RUBY_VERSION == "1.8.7"
|
20
|
+
class HTTPAccess2::Client
|
21
|
+
def initialize(*args)
|
22
|
+
super(args[0], args[1])
|
23
|
+
@session_manager.ssl_config.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
24
|
+
#@session_manager.debug_dev = STDOUT
|
25
|
+
end
|
26
|
+
end
|
27
|
+
else # > 1.8.7
|
28
|
+
class HTTPClient
|
29
|
+
alias_method :original_initialize, :initialize
|
30
|
+
def initialize(*args)
|
31
|
+
original_initialize(args[0], args[1])
|
32
|
+
@session_manager.ssl_config.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
33
|
+
#@session_manager.debug_dev = STDOUT
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
#
|
39
|
+
# Lab Manager API
|
40
|
+
#
|
41
|
+
# Configure using configure method:
|
42
|
+
#
|
43
|
+
# LabManager.url = "YOUR URL"
|
44
|
+
#
|
45
|
+
class LabManager
|
46
|
+
|
47
|
+
@@url = nil
|
48
|
+
def self.url
|
49
|
+
@@url
|
50
|
+
end
|
51
|
+
def self.url=(value)
|
52
|
+
@@url = value
|
53
|
+
end
|
54
|
+
|
55
|
+
attr_accessor :workspace
|
56
|
+
|
57
|
+
def initialize(organization, username, password, url = nil)
|
58
|
+
raise "Missing url" if @@url.nil?
|
59
|
+
|
60
|
+
@organization = organization
|
61
|
+
@username = username
|
62
|
+
@password = password
|
63
|
+
@@url = url
|
64
|
+
end
|
65
|
+
|
66
|
+
#<GetConfigurationByName xmlns="http://vmware.com/labmanager">
|
67
|
+
# <name>string</name>
|
68
|
+
#</GetConfigurationByName>
|
69
|
+
#
|
70
|
+
#<GetConfigurationByNameResponse xmlns="http://vmware.com/labmanager">
|
71
|
+
# <GetConfigurationByNameResult>
|
72
|
+
# <Configuration>
|
73
|
+
# <id>int</id>
|
74
|
+
# <name>string</name>
|
75
|
+
# <description>string</description>
|
76
|
+
# <isPublic>boolean</isPublic>
|
77
|
+
# <isDeployed>boolean</isDeployed>
|
78
|
+
# <fenceMode>int</fenceMode>
|
79
|
+
# <type>int</type>
|
80
|
+
# <owner>string</owner>
|
81
|
+
# <dateCreated>dateTime</dateCreated>
|
82
|
+
# <autoDeleteInMilliSeconds>double</autoDeleteInMilliSeconds>
|
83
|
+
# <bucketName>string</bucketName>
|
84
|
+
# <mustBeFenced>NotSpecified or True or False</mustBeFenced>
|
85
|
+
# <autoDeleteDateTime>dateTime</autoDeleteDateTime>
|
86
|
+
# </Configuration>
|
87
|
+
#
|
88
|
+
def configuration(name)
|
89
|
+
proxy.GetConfigurationByName(:name => name)
|
90
|
+
end
|
91
|
+
|
92
|
+
# <ListMachines xmlns="http://vmware.com/labmanager">
|
93
|
+
# <configurationId>int</configurationId>
|
94
|
+
# </ListMachines>
|
95
|
+
#
|
96
|
+
# <ListMachinesResponse xmlns="http://vmware.com/labmanager">
|
97
|
+
# <ListMachinesResult>
|
98
|
+
# <Machine>
|
99
|
+
# <id>int</id>
|
100
|
+
# <name>string</name>
|
101
|
+
# <description>string</description>
|
102
|
+
# <internalIP>string</internalIP>
|
103
|
+
# <externalIP>string</externalIP>
|
104
|
+
# <macAddress>string</macAddress>
|
105
|
+
# <memory>int</memory>
|
106
|
+
# <status>int</status>
|
107
|
+
# <isDeployed>boolean</isDeployed>
|
108
|
+
# <configID>int</configID>
|
109
|
+
# <DatastoreNameResidesOn>string</DatastoreNameResidesOn>
|
110
|
+
# <HostNameDeployedOn>string</HostNameDeployedOn>
|
111
|
+
# <OwnerFullName>string</OwnerFullName>
|
112
|
+
# </Machine>
|
113
|
+
#
|
114
|
+
# lab_manager.machines("CONFIG NAME")
|
115
|
+
# lab_manager.machines("CONFIG NAME", :exclude => ["machine name"])
|
116
|
+
#
|
117
|
+
def machines(configurationName, options = {})
|
118
|
+
configuration = proxy.GetConfigurationByName(:name => configurationName)
|
119
|
+
configurationId = configuration["GetConfigurationByNameResult"]["Configuration"]["id"]
|
120
|
+
|
121
|
+
data = proxy.ListMachines(:configurationId => configurationId)
|
122
|
+
|
123
|
+
machines = Machine.fromList(data)
|
124
|
+
|
125
|
+
if (!options[:exclude].nil?)
|
126
|
+
machines = machines.find_all { |machine|
|
127
|
+
!options[:exclude].include?(machine.name)
|
128
|
+
}
|
129
|
+
end
|
130
|
+
|
131
|
+
machines
|
132
|
+
end
|
133
|
+
|
134
|
+
def machine(configurationName, machineName)
|
135
|
+
machines(configurationName).find { |machine|
|
136
|
+
machine.name == machineName
|
137
|
+
}
|
138
|
+
end
|
139
|
+
|
140
|
+
private
|
141
|
+
def proxy
|
142
|
+
factory = SOAP::WSDLDriverFactory.new("#{@@url}?WSDL")
|
143
|
+
proxy = factory.create_rpc_driver
|
144
|
+
#proxy.wiredump_dev = STDOUT
|
145
|
+
proxy.generate_explicit_type = false # No datatype with request
|
146
|
+
proxy.headerhandler << LabManagerHeader.new(@organization, @workspace, @username, @password)
|
147
|
+
|
148
|
+
proxy
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
# <soap:Header>
|
153
|
+
# <AuthenticationHeader xmlns="http://vmware.com/labmanager">
|
154
|
+
# <username>string</username>
|
155
|
+
# <password>string</password>
|
156
|
+
# <organizationname>string</organizationname>
|
157
|
+
# <workspacename>string</workspacename>
|
158
|
+
# </AuthenticationHeader>
|
159
|
+
# </soap:Header>
|
160
|
+
class LabManagerHeader < SOAP::Header::Handler
|
161
|
+
|
162
|
+
def initialize(organization, workspace, username, password)
|
163
|
+
super(XSD::QName.new("http://vmware.com/labmanager", ""))
|
164
|
+
@organization = organization
|
165
|
+
@workspace = workspace
|
166
|
+
@username = username
|
167
|
+
@password = password
|
168
|
+
end
|
169
|
+
|
170
|
+
def on_outbound
|
171
|
+
authentication = SOAP::SOAPElement.new('AuthenticationHeader')
|
172
|
+
authentication.extraattr['xmlns'] = 'http://vmware.com/labmanager'
|
173
|
+
|
174
|
+
authentication.add(SOAP::SOAPElement.new('username', @username))
|
175
|
+
authentication.add(SOAP::SOAPElement.new('password', @password))
|
176
|
+
authentication.add(SOAP::SOAPElement.new('organizationname', @organization))
|
177
|
+
authentication.add(SOAP::SOAPElement.new('workspacename', @workspace)) if @workspace
|
178
|
+
|
179
|
+
SOAP::SOAPHeaderItem.new(authentication, true)
|
180
|
+
end
|
181
|
+
end
|
metadata
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: lab-manager
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Ed Sumerfield
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-10-30 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: mumboe-soap4r
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rspec
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
description: Access information about your Lab Manager configurations.
|
47
|
+
email: esumerfield@ipcoop.com
|
48
|
+
executables: []
|
49
|
+
extensions: []
|
50
|
+
extra_rdoc_files: []
|
51
|
+
files:
|
52
|
+
- lib/lab_manager/machine.rb
|
53
|
+
- lib/lab_manager.rb
|
54
|
+
homepage:
|
55
|
+
licenses: []
|
56
|
+
post_install_message:
|
57
|
+
rdoc_options: []
|
58
|
+
require_paths:
|
59
|
+
- lib
|
60
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
68
|
+
requirements:
|
69
|
+
- - ! '>='
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '0'
|
72
|
+
requirements: []
|
73
|
+
rubyforge_project:
|
74
|
+
rubygems_version: 1.8.23
|
75
|
+
signing_key:
|
76
|
+
specification_version: 3
|
77
|
+
summary: Client for VMWare Lab Manager
|
78
|
+
test_files: []
|