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.
@@ -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