vi_api_lib 0.1.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/COPYING +340 -0
- data/History.txt +4 -0
- data/Manifest.txt +22 -0
- data/README +28 -0
- data/examples/enumerate_test.rb +43 -0
- data/lib/vi_api_lib.rb +3 -0
- data/lib/vmware/connection.rb +68 -0
- data/lib/vmware/objects/compute_resource.rb +25 -0
- data/lib/vmware/objects/data_object.rb +70 -0
- data/lib/vmware/objects/datacenter.rb +23 -0
- data/lib/vmware/objects/datastore.rb +9 -0
- data/lib/vmware/objects/folder.rb +18 -0
- data/lib/vmware/objects/host_system.rb +21 -0
- data/lib/vmware/objects/managed_entity.rb +87 -0
- data/lib/vmware/objects/network.rb +15 -0
- data/lib/vmware/objects/virtual_machine.rb +19 -0
- data/lib/vmware/session.rb +67 -0
- data/lib/vmware/soap/vim25.rb +44260 -0
- data/lib/vmware/soap/vim25Driver.rb +3039 -0
- data/lib/vmware/soap/vim25MappingRegistry.rb +53878 -0
- data/lib/vmware.rb +20 -0
- data/rakefile +41 -0
- metadata +99 -0
@@ -0,0 +1,21 @@
|
|
1
|
+
class VMware::HostSystem < VMware::ManagedEntity
|
2
|
+
|
3
|
+
def networks
|
4
|
+
self["network"].collect do |network|
|
5
|
+
@session.managed_object_wrapper_factory("Network", network)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def datastores
|
10
|
+
self["datastore"].collect do |datastore|
|
11
|
+
@session.managed_object_wrapper_factory("Datastore", datastore)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def vms
|
16
|
+
self["vm"].collect do |vm|
|
17
|
+
@session.managed_object_wrapper_factory("VirtualMachine", vm)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
#
|
2
|
+
# Wrapper for managed object references.
|
3
|
+
#
|
4
|
+
class VMware::ManagedEntity
|
5
|
+
|
6
|
+
attr_reader :object_reference
|
7
|
+
|
8
|
+
#
|
9
|
+
# Create a wrapper for managed object based on a ManagedObjectReference
|
10
|
+
#
|
11
|
+
def initialize(session, object_reference)
|
12
|
+
@session, @object_reference = session, object_reference
|
13
|
+
|
14
|
+
# We cache properties for more efficient access.
|
15
|
+
@cached_properties = nil
|
16
|
+
end
|
17
|
+
|
18
|
+
#
|
19
|
+
# Retrieve a set of properties from the object as a hash. Specify individual
|
20
|
+
# property names as a list, or leave empty to get all properties.
|
21
|
+
#
|
22
|
+
def properties(prop_list = [])
|
23
|
+
if prop_list.empty? and @cached_properties
|
24
|
+
return @cached_properties
|
25
|
+
end
|
26
|
+
|
27
|
+
# Object at which filter starts.
|
28
|
+
object_spec = ObjectSpec.new
|
29
|
+
object_spec.obj = @object_reference
|
30
|
+
object_spec.skip = false
|
31
|
+
|
32
|
+
# Which properties to return.
|
33
|
+
prop_spec = PropertySpec.new
|
34
|
+
prop_spec.type = self.class.to_s.gsub(/^.*::/, "")
|
35
|
+
prop_spec.pathSet = prop_list
|
36
|
+
prop_spec.all = prop_list.empty?
|
37
|
+
|
38
|
+
# Create the filter.
|
39
|
+
prop_filter_spec = PropertyFilterSpec.new
|
40
|
+
prop_filter_spec.objectSet = [object_spec]
|
41
|
+
prop_filter_spec.propSet = prop_spec
|
42
|
+
|
43
|
+
# Create the request.
|
44
|
+
request = RetrievePropertiesRequestType.new(@session.sic.propertyCollector)
|
45
|
+
request.specSet = prop_filter_spec
|
46
|
+
|
47
|
+
prop_hash = {}
|
48
|
+
begin
|
49
|
+
object_list = @session.retrieveProperties(request)
|
50
|
+
if object_list.length > 1
|
51
|
+
raise "Unexpected number of objects returned when fetching properties for #{self.class}:\n#{object_list.inspect}\n"
|
52
|
+
end
|
53
|
+
if object_list.empty?
|
54
|
+
puts "WARNING: #{self.class} has no properties"
|
55
|
+
return {}
|
56
|
+
end
|
57
|
+
|
58
|
+
# Convert the properties into a hash and wrap data objects.
|
59
|
+
prop_set = object_list[0].propSet
|
60
|
+
prop_set.each do |prop|
|
61
|
+
prop_hash[prop.name] = VMware::DataObject::soap_to_data_object(prop.val)
|
62
|
+
end
|
63
|
+
rescue SOAP::FaultError => e
|
64
|
+
puts e.inspect
|
65
|
+
end
|
66
|
+
|
67
|
+
# Only cache the properties if we retrieved all of them.
|
68
|
+
if prop_list.empty?
|
69
|
+
@cached_properties = prop_hash
|
70
|
+
end
|
71
|
+
|
72
|
+
return prop_hash
|
73
|
+
end
|
74
|
+
|
75
|
+
#
|
76
|
+
# Return a specific property.
|
77
|
+
#
|
78
|
+
def [](key)
|
79
|
+
if @cached_properties
|
80
|
+
p = properties
|
81
|
+
else
|
82
|
+
p = properties(key)
|
83
|
+
end
|
84
|
+
return p[key.to_s]
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class VMware::Network < VMware::ManagedEntity
|
2
|
+
|
3
|
+
def hosts
|
4
|
+
self["host"].collect do |host|
|
5
|
+
@session.managed_object_wrapper_factory("HostSystem", host)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def vms
|
10
|
+
self["vm"].collect do |vm|
|
11
|
+
@session.managed_object_wrapper_factory("VirtualMachine", vm)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class VMware::VirtualMachine < VMware::ManagedEntity
|
2
|
+
|
3
|
+
def networks
|
4
|
+
self["network"].collect do |network|
|
5
|
+
@session.managed_object_wrapper_factory("Network", network)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def datastores
|
10
|
+
self["datastore"].collect do |datastore|
|
11
|
+
@session.managed_object_wrapper_factory("Datastore", datastore)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def resource_pool
|
16
|
+
@session.managed_object_wrapper_factory("ResourcePool", self["resourcePool"])
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
|
2
|
+
#
|
3
|
+
# A session incorporates the API specific state of the server
|
4
|
+
# connection.
|
5
|
+
#
|
6
|
+
class VMware::Session
|
7
|
+
|
8
|
+
#
|
9
|
+
# Service content object provides our root to the object hierarchy.
|
10
|
+
#
|
11
|
+
attr_reader :sic
|
12
|
+
|
13
|
+
#
|
14
|
+
# Create a new session by connecting to the server, getting the
|
15
|
+
# service instance and logging in.
|
16
|
+
#
|
17
|
+
def initialize(connection)
|
18
|
+
@connection = connection
|
19
|
+
|
20
|
+
svcref = ManagedObjectReference.new("ServiceInstance")
|
21
|
+
svcref.xmlattr_type = "ServiceInstance"
|
22
|
+
retrieveServiceContent = RetrieveServiceContentRequestType.new(svcref)
|
23
|
+
@sic = connection.retrieveServiceContent(retrieveServiceContent).returnval
|
24
|
+
|
25
|
+
login
|
26
|
+
end
|
27
|
+
|
28
|
+
#
|
29
|
+
# Return the root folder of the inventory hierarchy.
|
30
|
+
#
|
31
|
+
def root_folder
|
32
|
+
managed_object_wrapper_factory("Folder", @sic.rootFolder)
|
33
|
+
end
|
34
|
+
|
35
|
+
#
|
36
|
+
# Login to the server.
|
37
|
+
#
|
38
|
+
def login
|
39
|
+
loginRequest = LoginRequestType.new(@sic.sessionManager)
|
40
|
+
loginRequest.userName = @connection.username
|
41
|
+
loginRequest.password = @connection.password
|
42
|
+
@connection.login(loginRequest);
|
43
|
+
end
|
44
|
+
|
45
|
+
#
|
46
|
+
# Based on the type of a ManagedObjectReference, generate the
|
47
|
+
# appropriate wrapper instance.
|
48
|
+
#
|
49
|
+
def managed_object_wrapper_factory(type, reference)
|
50
|
+
#
|
51
|
+
# If we know about the type try to instantiate it.
|
52
|
+
#
|
53
|
+
begin
|
54
|
+
eval("VMware::#{type}.new(self, reference)")
|
55
|
+
rescue
|
56
|
+
puts "WARNING: Unknown managed object type: #{type}"
|
57
|
+
VMware::ManagedEntity.new(self, reference)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
#
|
62
|
+
# Catch any function call and send it over the soap connection.
|
63
|
+
#
|
64
|
+
def method_missing(methodSymbol, *params)
|
65
|
+
@connection.send(methodSymbol, *params)
|
66
|
+
end
|
67
|
+
end
|