vi_api_lib 0.1.1 → 0.1.2
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/History.txt +16 -0
- data/lib/vmware/objects/folder.rb +9 -1
- data/lib/vmware/objects/managed_entity.rb +3 -19
- data/lib/vmware/objects/virtual_machine.rb +48 -4
- data/lib/vmware/session.rb +61 -1
- metadata +2 -2
data/History.txt
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
=== 0.1.2 / 2009-06-07
|
|
2
|
+
|
|
3
|
+
* 1 bug fix:
|
|
4
|
+
* Fix powerOff for VitualMachibe
|
|
5
|
+
|
|
6
|
+
* 2 minor enhancements:
|
|
7
|
+
* Add find_entities method to Session
|
|
8
|
+
* Added shortcut to managed object wrapper in session
|
|
9
|
+
|
|
10
|
+
* 5 additional entity methods:
|
|
11
|
+
* Add markAsVirtualMachine function to VirtualMachine
|
|
12
|
+
* Add migrate function to VirtualMachine
|
|
13
|
+
* Added rename methods to folder and virtual machine
|
|
14
|
+
* Added destroy methods to folder and virtual machine
|
|
15
|
+
* Added clone methods to virtual machine
|
|
16
|
+
|
|
1
17
|
=== 0.1.1 / 2009-04-21
|
|
2
18
|
|
|
3
19
|
* 3 bug fixes:
|
|
@@ -14,5 +14,13 @@ class VMware::Folder < VMware::ManagedEntity
|
|
|
14
14
|
|
|
15
15
|
result
|
|
16
16
|
end
|
|
17
|
+
def rename_Task name
|
|
18
|
+
rt = RenameRequestType.new self.object_reference
|
|
19
|
+
rt.newName = name
|
|
20
|
+
@session.rename_Task rt
|
|
21
|
+
end
|
|
22
|
+
def destroy_Task
|
|
23
|
+
@session.destroy_Task DestroyRequestType.new self.object_reference
|
|
24
|
+
end
|
|
17
25
|
|
|
18
|
-
end
|
|
26
|
+
end
|
|
@@ -25,25 +25,9 @@ class VMware::ManagedEntity
|
|
|
25
25
|
return @cached_properties
|
|
26
26
|
end
|
|
27
27
|
|
|
28
|
-
# Object at which filter starts.
|
|
29
|
-
object_spec = ObjectSpec.new
|
|
30
|
-
object_spec.obj = @object_reference
|
|
31
|
-
object_spec.skip = false
|
|
32
|
-
|
|
33
|
-
# Which properties to return.
|
|
34
|
-
prop_spec = PropertySpec.new
|
|
35
|
-
prop_spec.type = @managed_type || self.class.to_s.gsub(/^.*::/, "")
|
|
36
|
-
prop_spec.pathSet = prop_list
|
|
37
|
-
prop_spec.all = prop_list.empty?
|
|
38
|
-
|
|
39
|
-
# Create the filter.
|
|
40
|
-
prop_filter_spec = PropertyFilterSpec.new
|
|
41
|
-
prop_filter_spec.objectSet = [object_spec]
|
|
42
|
-
prop_filter_spec.propSet = prop_spec
|
|
43
|
-
|
|
44
28
|
# Create the request.
|
|
45
|
-
|
|
46
|
-
request
|
|
29
|
+
type = @managed_type || self.class.to_s.gsub(/^.*::/, "")
|
|
30
|
+
request = @session.create_prop_request type, prop_list, @object_reference
|
|
47
31
|
|
|
48
32
|
prop_hash = {}
|
|
49
33
|
begin
|
|
@@ -85,4 +69,4 @@ class VMware::ManagedEntity
|
|
|
85
69
|
return p[key.to_s]
|
|
86
70
|
end
|
|
87
71
|
|
|
88
|
-
end
|
|
72
|
+
end
|
|
@@ -18,11 +18,13 @@ class VMware::VirtualMachine < VMware::ManagedEntity
|
|
|
18
18
|
@session.managed_object_wrapper_factory("ResourcePool", self["resourcePool"])
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
def powerOnVM_Task
|
|
22
|
-
|
|
21
|
+
def powerOnVM_Task host=nil
|
|
22
|
+
rt = PowerOnVMRequestType.new self.object_reference
|
|
23
|
+
rt.host = host
|
|
24
|
+
@session.powerOnVM_Task rt
|
|
23
25
|
end
|
|
24
26
|
def powerOffVM
|
|
25
|
-
@session.
|
|
27
|
+
@session.powerOffVM_Task PowerOffVMRequestType.new self.object_reference
|
|
26
28
|
end
|
|
27
29
|
def shutdownGuest
|
|
28
30
|
@session.shutdownGuest ShutdownGuestRequestType.new self.object_reference
|
|
@@ -39,4 +41,46 @@ class VMware::VirtualMachine < VMware::ManagedEntity
|
|
|
39
41
|
def rebootGuest
|
|
40
42
|
@session.rebootGuest RebootGuestRequestType.new self.object_reference
|
|
41
43
|
end
|
|
42
|
-
|
|
44
|
+
def migrateVM_Task host
|
|
45
|
+
rt = MigrateVMRequestType.new self.object_reference
|
|
46
|
+
rt.priority = VirtualMachineMovePriority.new("defaultPriority")
|
|
47
|
+
rt.host = host
|
|
48
|
+
@session.migrateVM_Task rt
|
|
49
|
+
end
|
|
50
|
+
def markAsVirtualMachine pool
|
|
51
|
+
rt = MarkAsVirtualMachineRequestType.new self.object_reference
|
|
52
|
+
rt.pool = pool
|
|
53
|
+
@session.markAsVirtualMachine rt
|
|
54
|
+
end
|
|
55
|
+
def rename_Task name
|
|
56
|
+
rt = RenameRequestType.new self.object_reference
|
|
57
|
+
rt.newName = name
|
|
58
|
+
@session.rename_Task rt
|
|
59
|
+
end
|
|
60
|
+
def destroy_Task
|
|
61
|
+
@session.destroy_Task DestroyRequestType.new self.object_reference
|
|
62
|
+
end
|
|
63
|
+
def cloneVMToTemplate folder, name, pool
|
|
64
|
+
location = VirtualMachineRelocateSpec.new
|
|
65
|
+
location.pool = pool
|
|
66
|
+
spec = VirtualMachineCloneSpec.new
|
|
67
|
+
spec.template = true
|
|
68
|
+
spec.powerOn = false
|
|
69
|
+
spec.location = location
|
|
70
|
+
cloneVM_Task folder, name, spec
|
|
71
|
+
end
|
|
72
|
+
def cloneVM folder, name, power_on=false
|
|
73
|
+
spec = VirtualMachineCloneSpec.new
|
|
74
|
+
spec.template = false
|
|
75
|
+
spec.powerOn = power_on
|
|
76
|
+
spec.location = VirtualMachineRelocateSpec.new
|
|
77
|
+
cloneVM_Task folder, name, spec
|
|
78
|
+
end
|
|
79
|
+
def cloneVM_Task folder, name, spec
|
|
80
|
+
rt = CloneVMRequestType.new self.object_reference
|
|
81
|
+
rt.folder = folder
|
|
82
|
+
rt.name = name
|
|
83
|
+
rt.spec = spec
|
|
84
|
+
@session.cloneVM_Task rt
|
|
85
|
+
end
|
|
86
|
+
end
|
data/lib/vmware/session.rb
CHANGED
|
@@ -34,6 +34,63 @@ class VMware::Session
|
|
|
34
34
|
def task_manager
|
|
35
35
|
managed_object_wrapper_factory("TaskManager", @sic.taskManager)
|
|
36
36
|
end
|
|
37
|
+
def find_entities type, begin_entity=nil
|
|
38
|
+
begin_entity ||= @sic.rootFolder
|
|
39
|
+
request = create_prop_request type, [], begin_entity, traversal_specs
|
|
40
|
+
begin
|
|
41
|
+
retrieveProperties(request).collect { |obj| obj.obj }
|
|
42
|
+
rescue SOAP::FaultError => e
|
|
43
|
+
puts e.inspect
|
|
44
|
+
[]
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def traversal_specs
|
|
49
|
+
specs = []
|
|
50
|
+
spec = selection_spec ['folder_spec','host_folder_spec','vm_folder_spec','host_spec','resource_spec','cr_spec','hosts_spec']
|
|
51
|
+
specs.push(traversal_spec 'folder_spec', 'Folder', 'childEntity', spec)
|
|
52
|
+
spec = selection_spec ['folder_spec']
|
|
53
|
+
specs.push(traversal_spec 'host_folder_spec', 'Datacenter', 'hostFolder', spec)
|
|
54
|
+
specs.push(traversal_spec 'vm_folder_spec', 'Datacenter', 'vmFolder', spec)
|
|
55
|
+
specs.push(traversal_spec 'host_spec', 'HostSystem', 'vm', spec)
|
|
56
|
+
spec = selection_spec ['resource_spec']
|
|
57
|
+
specs.push(traversal_spec 'resource_spec', 'ResourcePool', 'resourcePool', spec)
|
|
58
|
+
specs.push(traversal_spec 'cr_spec', 'ComputeResource', 'resourcePool', spec)
|
|
59
|
+
spec = selection_spec ['host_spec']
|
|
60
|
+
specs.push(traversal_spec 'hosts_spec', 'ComputeResource', 'host', spec)
|
|
61
|
+
specs
|
|
62
|
+
end
|
|
63
|
+
def traversal_spec name, type, path, select_set
|
|
64
|
+
TraversalSpec.new nil, [], name, type, path, false, select_set
|
|
65
|
+
end
|
|
66
|
+
def selection_spec names
|
|
67
|
+
names.collect do |name|
|
|
68
|
+
spec = SelectionSpec.new
|
|
69
|
+
spec.name = name
|
|
70
|
+
spec
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
def create_prop_request type, path_set, begin_entity, select_set=nil
|
|
74
|
+
# Which properties to return.
|
|
75
|
+
prop_spec = PropertySpec.new
|
|
76
|
+
prop_spec.type = type
|
|
77
|
+
prop_spec.pathSet = path_set
|
|
78
|
+
prop_spec.all = path_set.empty?
|
|
79
|
+
|
|
80
|
+
# Object at which filter starts.
|
|
81
|
+
object_spec = ObjectSpec.new
|
|
82
|
+
object_spec.obj = begin_entity
|
|
83
|
+
object_spec.skip = false
|
|
84
|
+
object_spec.selectSet = select_set unless select_set.nil?
|
|
85
|
+
|
|
86
|
+
# Create the filter.
|
|
87
|
+
prop_filter_spec = PropertyFilterSpec.new
|
|
88
|
+
prop_filter_spec.propSet = prop_spec
|
|
89
|
+
prop_filter_spec.objectSet = [object_spec]
|
|
90
|
+
|
|
91
|
+
# Create the request.
|
|
92
|
+
RetrievePropertiesRequestType.new @sic.propertyCollector, prop_filter_spec
|
|
93
|
+
end
|
|
37
94
|
|
|
38
95
|
#
|
|
39
96
|
# Login to the server.
|
|
@@ -56,10 +113,13 @@ class VMware::Session
|
|
|
56
113
|
begin
|
|
57
114
|
eval("VMware::#{type}.new(self, reference)")
|
|
58
115
|
rescue
|
|
59
|
-
puts "WARNING: Unknown managed object type: #{type}"
|
|
116
|
+
STDERR.puts "WARNING: Unknown managed object type: #{type}"
|
|
60
117
|
VMware::ManagedEntity.new(self, reference, type)
|
|
61
118
|
end
|
|
62
119
|
end
|
|
120
|
+
def wrap ref
|
|
121
|
+
managed_object_wrapper_factory ref.xmlattr_type, ref
|
|
122
|
+
end
|
|
63
123
|
|
|
64
124
|
#
|
|
65
125
|
# Catch any function call and send it over the soap connection.
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: vi_api_lib
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Chris Waters
|
|
@@ -10,7 +10,7 @@ autorequire:
|
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
12
|
|
|
13
|
-
date: 2009-
|
|
13
|
+
date: 2009-06-07 00:00:00 +02:00
|
|
14
14
|
default_executable:
|
|
15
15
|
dependencies:
|
|
16
16
|
- !ruby/object:Gem::Dependency
|