fog-vsphere 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.
- checksums.yaml +7 -0
- data/.gitignore +23 -0
- data/.travis.yml +32 -0
- data/CONTRIBUTING.md +18 -0
- data/CONTRIBUTORS.md +59 -0
- data/Gemfile +5 -0
- data/LICENSE.md +20 -0
- data/README.md +31 -0
- data/Rakefile +8 -0
- data/fog-vsphere.gemspec +32 -0
- data/gemfiles/Gemfile.1.9.2+ +8 -0
- data/gemfiles/Gemfile.1.9.2- +11 -0
- data/lib/fog/vsphere.rb +41 -0
- data/lib/fog/vsphere/compute.rb +473 -0
- data/lib/fog/vsphere/models/compute/cluster.rb +28 -0
- data/lib/fog/vsphere/models/compute/clusters.rb +22 -0
- data/lib/fog/vsphere/models/compute/customfield.rb +16 -0
- data/lib/fog/vsphere/models/compute/customfields.rb +23 -0
- data/lib/fog/vsphere/models/compute/customvalue.rb +14 -0
- data/lib/fog/vsphere/models/compute/customvalues.rb +33 -0
- data/lib/fog/vsphere/models/compute/datacenter.rb +44 -0
- data/lib/fog/vsphere/models/compute/datacenters.rb +19 -0
- data/lib/fog/vsphere/models/compute/datastore.rb +21 -0
- data/lib/fog/vsphere/models/compute/datastores.rb +21 -0
- data/lib/fog/vsphere/models/compute/folder.rb +24 -0
- data/lib/fog/vsphere/models/compute/folders.rb +23 -0
- data/lib/fog/vsphere/models/compute/interface.rb +91 -0
- data/lib/fog/vsphere/models/compute/interfaces.rb +66 -0
- data/lib/fog/vsphere/models/compute/interfacetype.rb +22 -0
- data/lib/fog/vsphere/models/compute/interfacetypes.rb +34 -0
- data/lib/fog/vsphere/models/compute/network.rb +18 -0
- data/lib/fog/vsphere/models/compute/networks.rb +22 -0
- data/lib/fog/vsphere/models/compute/process.rb +17 -0
- data/lib/fog/vsphere/models/compute/resource_pool.rb +19 -0
- data/lib/fog/vsphere/models/compute/resource_pools.rb +22 -0
- data/lib/fog/vsphere/models/compute/scsicontroller.rb +16 -0
- data/lib/fog/vsphere/models/compute/server.rb +325 -0
- data/lib/fog/vsphere/models/compute/servers.rb +36 -0
- data/lib/fog/vsphere/models/compute/servertype.rb +36 -0
- data/lib/fog/vsphere/models/compute/servertypes.rb +23 -0
- data/lib/fog/vsphere/models/compute/snapshot.rb +35 -0
- data/lib/fog/vsphere/models/compute/snapshots.rb +27 -0
- data/lib/fog/vsphere/models/compute/template.rb +11 -0
- data/lib/fog/vsphere/models/compute/templates.rb +19 -0
- data/lib/fog/vsphere/models/compute/volume.rb +99 -0
- data/lib/fog/vsphere/models/compute/volumes.rb +53 -0
- data/lib/fog/vsphere/requests/compute/cloudinit_to_customspec.rb +65 -0
- data/lib/fog/vsphere/requests/compute/create_folder.rb +22 -0
- data/lib/fog/vsphere/requests/compute/create_vm.rb +169 -0
- data/lib/fog/vsphere/requests/compute/current_time.rb +18 -0
- data/lib/fog/vsphere/requests/compute/get_cluster.rb +25 -0
- data/lib/fog/vsphere/requests/compute/get_compute_resource.rb +41 -0
- data/lib/fog/vsphere/requests/compute/get_datacenter.rb +31 -0
- data/lib/fog/vsphere/requests/compute/get_datastore.rb +30 -0
- data/lib/fog/vsphere/requests/compute/get_folder.rb +74 -0
- data/lib/fog/vsphere/requests/compute/get_interface_type.rb +15 -0
- data/lib/fog/vsphere/requests/compute/get_network.rb +59 -0
- data/lib/fog/vsphere/requests/compute/get_resource_pool.rb +26 -0
- data/lib/fog/vsphere/requests/compute/get_server_type.rb +32 -0
- data/lib/fog/vsphere/requests/compute/get_template.rb +16 -0
- data/lib/fog/vsphere/requests/compute/get_virtual_machine.rb +57 -0
- data/lib/fog/vsphere/requests/compute/get_vm_first_scsi_controller.rb +26 -0
- data/lib/fog/vsphere/requests/compute/list_child_snapshots.rb +71 -0
- data/lib/fog/vsphere/requests/compute/list_clusters.rb +72 -0
- data/lib/fog/vsphere/requests/compute/list_compute_resources.rb +92 -0
- data/lib/fog/vsphere/requests/compute/list_customfields.rb +21 -0
- data/lib/fog/vsphere/requests/compute/list_datacenters.rb +53 -0
- data/lib/fog/vsphere/requests/compute/list_datastores.rb +40 -0
- data/lib/fog/vsphere/requests/compute/list_folders.rb +44 -0
- data/lib/fog/vsphere/requests/compute/list_interface_types.rb +25 -0
- data/lib/fog/vsphere/requests/compute/list_networks.rb +38 -0
- data/lib/fog/vsphere/requests/compute/list_processes.rb +40 -0
- data/lib/fog/vsphere/requests/compute/list_resource_pools.rb +38 -0
- data/lib/fog/vsphere/requests/compute/list_server_types.rb +54 -0
- data/lib/fog/vsphere/requests/compute/list_templates.rb +48 -0
- data/lib/fog/vsphere/requests/compute/list_virtual_machines.rb +80 -0
- data/lib/fog/vsphere/requests/compute/list_vm_customvalues.rb +20 -0
- data/lib/fog/vsphere/requests/compute/list_vm_interfaces.rb +63 -0
- data/lib/fog/vsphere/requests/compute/list_vm_snapshots.rb +66 -0
- data/lib/fog/vsphere/requests/compute/list_vm_volumes.rb +52 -0
- data/lib/fog/vsphere/requests/compute/modify_vm_interface.rb +59 -0
- data/lib/fog/vsphere/requests/compute/modify_vm_volume.rb +25 -0
- data/lib/fog/vsphere/requests/compute/revert_to_snapshot.rb +30 -0
- data/lib/fog/vsphere/requests/compute/set_vm_customvalue.rb +17 -0
- data/lib/fog/vsphere/requests/compute/vm_clone.rb +727 -0
- data/lib/fog/vsphere/requests/compute/vm_config_vnc.rb +45 -0
- data/lib/fog/vsphere/requests/compute/vm_destroy.rb +23 -0
- data/lib/fog/vsphere/requests/compute/vm_execute.rb +47 -0
- data/lib/fog/vsphere/requests/compute/vm_migrate.rb +33 -0
- data/lib/fog/vsphere/requests/compute/vm_power_off.rb +39 -0
- data/lib/fog/vsphere/requests/compute/vm_power_on.rb +26 -0
- data/lib/fog/vsphere/requests/compute/vm_reboot.rb +31 -0
- data/lib/fog/vsphere/requests/compute/vm_reconfig_cpus.rb +23 -0
- data/lib/fog/vsphere/requests/compute/vm_reconfig_hardware.rb +24 -0
- data/lib/fog/vsphere/requests/compute/vm_reconfig_memory.rb +23 -0
- data/lib/fog/vsphere/requests/compute/vm_take_snapshot.rb +37 -0
- data/lib/fog/vsphere/version.rb +5 -0
- data/tests/compute_tests.rb +53 -0
- data/tests/helper.rb +8 -0
- data/tests/helpers/mock_helper.rb +9 -0
- data/tests/helpers/succeeds_helper.rb +9 -0
- data/tests/models/compute/server_tests.rb +70 -0
- data/tests/models/compute/servers_tests.rb +15 -0
- data/tests/requests/compute/current_time_tests.rb +12 -0
- data/tests/requests/compute/get_network_tests.rb +50 -0
- data/tests/requests/compute/list_child_snapshots_tests.rb +10 -0
- data/tests/requests/compute/list_clusters_tests.rb +11 -0
- data/tests/requests/compute/list_virtual_machines_tests.rb +38 -0
- data/tests/requests/compute/list_vm_snapshots_tests.rb +10 -0
- data/tests/requests/compute/revert_to_snapshot_tests.rb +15 -0
- data/tests/requests/compute/set_vm_customvalue_tests.rb +20 -0
- data/tests/requests/compute/vm_clone_tests.rb +50 -0
- data/tests/requests/compute/vm_config_vnc_tests.rb +19 -0
- data/tests/requests/compute/vm_destroy_tests.rb +17 -0
- data/tests/requests/compute/vm_migrate_tests.rb +16 -0
- data/tests/requests/compute/vm_power_off_tests.rb +26 -0
- data/tests/requests/compute/vm_power_on_tests.rb +17 -0
- data/tests/requests/compute/vm_reboot_tests.rb +26 -0
- data/tests/requests/compute/vm_reconfig_cpus_tests.rb +19 -0
- data/tests/requests/compute/vm_reconfig_hardware_tests.rb +19 -0
- data/tests/requests/compute/vm_reconfig_memory_tests.rb +19 -0
- data/tests/requests/compute/vm_take_snapshot_tests.rb +19 -0
- metadata +289 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def current_time
|
|
6
|
+
current_time = @connection.serviceInstance.CurrentTime
|
|
7
|
+
{ 'current_time' => current_time }
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class Mock
|
|
12
|
+
def current_time
|
|
13
|
+
{ 'current_time' => Time.now.utc }
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def get_cluster(name, datacenter_name)
|
|
6
|
+
cluster = get_raw_cluster(name, datacenter_name)
|
|
7
|
+
raise(Fog::Compute::Vsphere::NotFound) unless cluster
|
|
8
|
+
cluster_attributes(cluster, datacenter_name)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
protected
|
|
12
|
+
|
|
13
|
+
def get_raw_cluster(name, datacenter_name)
|
|
14
|
+
dc = find_raw_datacenter(datacenter_name)
|
|
15
|
+
dc.find_compute_resource(name)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
class Mock
|
|
20
|
+
def get_cluster(id)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def get_compute_resource(name, datacenter_name)
|
|
6
|
+
compute_resource = get_raw_compute_resource(name, datacenter_name)
|
|
7
|
+
raise(Fog::Compute::Vsphere::NotFound) unless compute_resource
|
|
8
|
+
compute_resource_attributes(compute_resource, datacenter_name)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
protected
|
|
12
|
+
|
|
13
|
+
def get_raw_compute_resource(name, datacenter_name)
|
|
14
|
+
find_raw_datacenter(datacenter_name).find_compute_resource(name)
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
class Mock
|
|
19
|
+
def get_compute_resource(name, datacenter_name)
|
|
20
|
+
{
|
|
21
|
+
:id=>"domain-s7",
|
|
22
|
+
:name=>"fake-host",
|
|
23
|
+
:totalCpu=>33504,
|
|
24
|
+
:totalMemory=>154604142592,
|
|
25
|
+
:numCpuCores=>12,
|
|
26
|
+
:numCpuThreads=>24,
|
|
27
|
+
:effectiveCpu=>32247,
|
|
28
|
+
:effectiveMemory=>135733,
|
|
29
|
+
:numHosts=>1,
|
|
30
|
+
:numEffectiveHosts=>1,
|
|
31
|
+
:overallStatus=>"gray",
|
|
32
|
+
:overallCpuUsage=>15682,
|
|
33
|
+
:overallMemoryUsage=>132755,
|
|
34
|
+
:effective=>true,
|
|
35
|
+
:isSingleHost=>true
|
|
36
|
+
}
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def get_datacenter name
|
|
6
|
+
dc = find_raw_datacenter(name)
|
|
7
|
+
raise(Fog::Compute::Vsphere::NotFound) unless dc
|
|
8
|
+
{:name => dc.name, :status => dc.overallStatus, :path => raw_getpathmo(dc) }
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
protected
|
|
12
|
+
|
|
13
|
+
def find_raw_datacenter name
|
|
14
|
+
raw_datacenters.find {|d| d.name == name} || get_raw_datacenter(name)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def get_raw_datacenter name
|
|
18
|
+
@connection.serviceInstance.find_datacenter(name)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
class Mock
|
|
23
|
+
def get_datacenter name
|
|
24
|
+
dc = self.data[:datacenters][name]
|
|
25
|
+
raise(Fog::Compute::Vsphere::NotFound) unless dc
|
|
26
|
+
dc
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def get_datastore(name, datacenter_name)
|
|
6
|
+
datastore = get_raw_datastore(name, datacenter_name)
|
|
7
|
+
raise(Fog::Compute::Vsphere::NotFound) unless datastore
|
|
8
|
+
datastore_attributes(datastore, datacenter_name)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
protected
|
|
12
|
+
|
|
13
|
+
def get_raw_datastore(name, datacenter_name)
|
|
14
|
+
dc = find_raw_datacenter(datacenter_name)
|
|
15
|
+
|
|
16
|
+
@connection.serviceContent.viewManager.CreateContainerView({
|
|
17
|
+
:container => dc.datastoreFolder,
|
|
18
|
+
:type => ["Datastore"],
|
|
19
|
+
:recursive => true
|
|
20
|
+
}).view.select{|ds| ds.name == name}.first
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
class Mock
|
|
25
|
+
def get_datastore(name, datacenter_name)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def get_folder(path, datacenter_name, type = nil)
|
|
6
|
+
type ||= 'vm'
|
|
7
|
+
|
|
8
|
+
# Cycle through all types of folders.
|
|
9
|
+
case type
|
|
10
|
+
when 'vm', :vm
|
|
11
|
+
# if you're a vm then grab the VM.
|
|
12
|
+
folder = get_raw_vmfolder(path, datacenter_name)
|
|
13
|
+
raise(Fog::Compute::Vsphere::NotFound) unless folder
|
|
14
|
+
folder_attributes(folder, datacenter_name)
|
|
15
|
+
when 'network', :network
|
|
16
|
+
raise "not implemented"
|
|
17
|
+
when 'datastore', :datastore
|
|
18
|
+
raise "not implemented"
|
|
19
|
+
else
|
|
20
|
+
raise ArgumentError, "#{type} is unknown"
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
protected
|
|
25
|
+
|
|
26
|
+
def get_raw_vmfolder(path, datacenter_name)
|
|
27
|
+
# The required path syntax - 'topfolder/subfolder
|
|
28
|
+
|
|
29
|
+
# Clean up path to be relative since we're providing datacenter name
|
|
30
|
+
dc = find_raw_datacenter(datacenter_name)
|
|
31
|
+
dc_root_folder = dc.vmFolder
|
|
32
|
+
# Filter the root path for this datacenter not to be used."
|
|
33
|
+
dc_root_folder_path=dc_root_folder.path.map { | id, name | name }.join("/")
|
|
34
|
+
paths = path.sub(/^\/?#{Regexp.quote(dc_root_folder_path)}\/?/, '').split('/')
|
|
35
|
+
|
|
36
|
+
return dc_root_folder if paths.empty?
|
|
37
|
+
# Walk the tree resetting the folder pointer as we go
|
|
38
|
+
paths.reduce(dc_root_folder) do |last_returned_folder, sub_folder|
|
|
39
|
+
# JJM VIM::Folder#find appears to be quite efficient as it uses the
|
|
40
|
+
# searchIndex It certainly appears to be faster than
|
|
41
|
+
# VIM::Folder#inventory since that returns _all_ managed objects of
|
|
42
|
+
# a certain type _and_ their properties.
|
|
43
|
+
sub = last_returned_folder.find(sub_folder, RbVmomi::VIM::Folder)
|
|
44
|
+
raise ArgumentError, "Could not descend into #{sub_folder}. Please check your path. #{path}" unless sub
|
|
45
|
+
sub
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def folder_attributes(folder, datacenter_name)
|
|
50
|
+
{
|
|
51
|
+
:id => managed_obj_id(folder),
|
|
52
|
+
:name => folder.name,
|
|
53
|
+
:parent => folder.parent.name,
|
|
54
|
+
:datacenter => datacenter_name,
|
|
55
|
+
:type => folder_type(folder),
|
|
56
|
+
:path => "/"+folder.path.map(&:last).join('/'),
|
|
57
|
+
}
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def folder_type(folder)
|
|
61
|
+
types = folder.childType
|
|
62
|
+
return :vm if types.include?('VirtualMachine')
|
|
63
|
+
return :network if types.include?('Network')
|
|
64
|
+
return :datastore if types.include?('Datastore')
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
class Mock
|
|
69
|
+
def get_folder(path, filters = { })
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def get_interface_type(id, servertype, datacenter, filter={})
|
|
6
|
+
interfacetype=list_interface_types(filters={:id => id,
|
|
7
|
+
:datacenter => datacenter,
|
|
8
|
+
:servertype => servertype.id }).first
|
|
9
|
+
raise(Fog::Compute::Vsphere::NotFound) unless interfacetype
|
|
10
|
+
interfacetype
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def get_network(name, datacenter_name)
|
|
6
|
+
network = get_raw_network(name, datacenter_name)
|
|
7
|
+
raise(Fog::Compute::Vsphere::NotFound) unless network
|
|
8
|
+
network_attributes(network, datacenter_name)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
protected
|
|
12
|
+
|
|
13
|
+
def get_raw_network(name, datacenter_name, distributedswitch=nil)
|
|
14
|
+
finder = choose_finder(name, distributedswitch)
|
|
15
|
+
networks = get_all_raw_networks(datacenter_name)
|
|
16
|
+
networks.find { |n| finder.call(n) }
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
module Shared
|
|
21
|
+
|
|
22
|
+
protected
|
|
23
|
+
|
|
24
|
+
def get_all_raw_networks(datacenter_name)
|
|
25
|
+
dc = find_raw_datacenter(datacenter_name)
|
|
26
|
+
@connection.serviceContent.viewManager.
|
|
27
|
+
CreateContainerView({
|
|
28
|
+
:container => dc.networkFolder,
|
|
29
|
+
:type => ["Network"],
|
|
30
|
+
:recursive => true
|
|
31
|
+
}).view
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def choose_finder(name, distributedswitch)
|
|
35
|
+
case distributedswitch
|
|
36
|
+
when String
|
|
37
|
+
# only the one will do
|
|
38
|
+
Proc.new { |n| (n.name == name) &&
|
|
39
|
+
(n.class.to_s == "DistributedVirtualPortgroup") &&
|
|
40
|
+
(n.config.distributedVirtualSwitch.name == distributedswitch)
|
|
41
|
+
}
|
|
42
|
+
when :dvs
|
|
43
|
+
# the first distributed virtual switch will do - selected by network - gives control to vsphere
|
|
44
|
+
Proc.new { |n| (n.name == name) && (n.class.to_s == "DistributedVirtualPortgroup") }
|
|
45
|
+
else
|
|
46
|
+
# the first matching network will do, seems like the non-distributed networks come first
|
|
47
|
+
Proc.new { |n| (n.name == name) }
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
class Mock
|
|
54
|
+
def get_network(id)
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def get_resource_pool(name, cluster_name, datacenter_name)
|
|
6
|
+
resource_pool = get_raw_resource_pool(name, cluster_name, datacenter_name)
|
|
7
|
+
raise(Fog::Compute::Vsphere::NotFound) unless resource_pool
|
|
8
|
+
resource_pool_attributes(resource_pool, cluster_name, datacenter_name)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
protected
|
|
12
|
+
|
|
13
|
+
def get_raw_resource_pool(name, cluster_name, datacenter_name)
|
|
14
|
+
dc = find_raw_datacenter(datacenter_name)
|
|
15
|
+
cluster = dc.find_compute_resource(cluster_name)
|
|
16
|
+
name.nil? ? cluster.resourcePool : cluster.resourcePool.traverse(name)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class Mock
|
|
21
|
+
def get_resource_pool(name, cluster_name, datacenter_name)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def get_server_type(id, datacenter, filter={})
|
|
6
|
+
server_type=get_raw_server_type(id, datacenter)
|
|
7
|
+
raise(Fog::Compute::Vsphere::NotFound) unless server_type
|
|
8
|
+
server_type_attributes(server_type, datacenter)
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
protected
|
|
12
|
+
|
|
13
|
+
def get_raw_server_type(id, datacenter, filter={})
|
|
14
|
+
types=raw_server_types(datacenter)
|
|
15
|
+
raise(Fog::Compute::Vsphere::NotFound) unless types
|
|
16
|
+
types=types.select{ | servertype | servertype.id == id }.first
|
|
17
|
+
raise(Fog::Compute::Vsphere::NotFound) unless types
|
|
18
|
+
types
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
class Mock
|
|
22
|
+
def get_server_type(id)
|
|
23
|
+
{:id=>"rhel6Guest",
|
|
24
|
+
:name=>"rhel6Guest",
|
|
25
|
+
:family=>"linuxGuest",
|
|
26
|
+
:fullname=>"Red Hat Enterprise Linux 6 (32-Bit)",
|
|
27
|
+
:datacenter=>"Solutions"}
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def get_template(id, datacenter_name = nil)
|
|
6
|
+
convert_vm_mob_ref_to_attr_hash(get_vm_ref(id, datacenter_name))
|
|
7
|
+
end
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
class Mock
|
|
11
|
+
def get_template(id, datacenter_name = nil)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def get_virtual_machine(id, datacenter_name = nil)
|
|
6
|
+
# The larger the VM list the longer it will take if not searching based on UUID.
|
|
7
|
+
convert_vm_mob_ref_to_attr_hash(get_vm_ref(id, datacenter_name))
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
protected
|
|
11
|
+
|
|
12
|
+
def get_vm_ref(id, dc = nil)
|
|
13
|
+
raw_datacenter = find_raw_datacenter(dc) if dc
|
|
14
|
+
vm = case is_uuid?(id)
|
|
15
|
+
# UUID based
|
|
16
|
+
when true
|
|
17
|
+
params = {:uuid => id, :vmSearch => true, :instanceUuid => true}
|
|
18
|
+
params[:datacenter] = raw_datacenter if dc
|
|
19
|
+
@connection.searchIndex.FindByUuid(params)
|
|
20
|
+
else
|
|
21
|
+
# try to find based on VM name
|
|
22
|
+
if dc
|
|
23
|
+
get_vm_by_name(id, dc)
|
|
24
|
+
else
|
|
25
|
+
raw_datacenters.map { |d| get_vm_by_name(id, d["name"])}.compact.first
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
vm ? vm : raise(Fog::Compute::Vsphere::NotFound, "#{id} was not found")
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def get_vm_by_name(name, dc)
|
|
32
|
+
vms = raw_list_all_virtual_machines(dc)
|
|
33
|
+
|
|
34
|
+
if name.include?('/')
|
|
35
|
+
folder = File.dirname(name)
|
|
36
|
+
basename = File.basename(name)
|
|
37
|
+
vms.keep_if { |v| v["name"] == basename && v.parent.pretty_path.include?(folder) }.first
|
|
38
|
+
else
|
|
39
|
+
vms.keep_if { |v| v["name"] == name }.first
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
class Mock
|
|
45
|
+
def get_virtual_machine(id, datacenter_name = nil)
|
|
46
|
+
if is_uuid?(id)
|
|
47
|
+
vm = list_virtual_machines({ 'instance_uuid' => id, 'datacenter' => datacenter_name }).first
|
|
48
|
+
else
|
|
49
|
+
# try to find based on VM name. May need to handle the path of the VM
|
|
50
|
+
vm = list_virtual_machines({ 'name' => id, 'datacenter' => datacenter_name }).first
|
|
51
|
+
end
|
|
52
|
+
vm ? vm : raise(Fog::Compute::Vsphere::NotFound, "#{id} was not found")
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
|
|
2
|
+
module Fog
|
|
3
|
+
module Compute
|
|
4
|
+
class Vsphere
|
|
5
|
+
class Real
|
|
6
|
+
def get_vm_first_scsi_controller(vm_id)
|
|
7
|
+
Fog::Compute::Vsphere::SCSIController.new(get_vm_first_scsi_controller_raw(vm_id))
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def get_vm_first_scsi_controller_raw(vm_id)
|
|
11
|
+
ctrl=get_vm_ref(vm_id).config.hardware.device.grep(RbVmomi::VIM::VirtualSCSIController).select{ | ctrl | ctrl.key == 1000 }.first
|
|
12
|
+
{
|
|
13
|
+
:type => ctrl.class.to_s,
|
|
14
|
+
:shared_bus => ctrl.sharedBus.to_s,
|
|
15
|
+
:unit_number => ctrl.scsiCtlrUnitNumber,
|
|
16
|
+
:key => ctrl.key,
|
|
17
|
+
}
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
class Mock
|
|
21
|
+
def get_vm_first_scsi_controller(vm_id)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|