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,40 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def list_processes(vm_id, opts)
|
|
6
|
+
vm = get_vm_ref(vm_id)
|
|
7
|
+
|
|
8
|
+
auth = RbVmomi::VIM::NamePasswordAuthentication(
|
|
9
|
+
:username => opts[:user],
|
|
10
|
+
:password => opts[:password],
|
|
11
|
+
:interactiveSession => false
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
p_manager = @connection.serviceContent.guestOperationsManager.processManager
|
|
15
|
+
processes = p_manager.ListProcessesInGuest(:vm => vm, :auth => auth)
|
|
16
|
+
processes.map do |pi|
|
|
17
|
+
Process.new(
|
|
18
|
+
:cmd_line => pi.cmdLine,
|
|
19
|
+
:end_time => pi.endTime,
|
|
20
|
+
:exit_code => pi.exitCode,
|
|
21
|
+
:name => pi.name,
|
|
22
|
+
:owner => pi.owner,
|
|
23
|
+
:pid => pi.pid,
|
|
24
|
+
:start_time => pi.startTime
|
|
25
|
+
)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
class Mock
|
|
31
|
+
def list_processes(vm_id, opts = {})
|
|
32
|
+
[
|
|
33
|
+
Process.new(:name => 'winlogon'),
|
|
34
|
+
Process.new(:name => 'init')
|
|
35
|
+
]
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def list_resource_pools(filters = { })
|
|
6
|
+
datacenter_name = filters[:datacenter]
|
|
7
|
+
cluster_name = filters[:cluster]
|
|
8
|
+
cluster = get_raw_cluster(cluster_name, datacenter_name)
|
|
9
|
+
list_raw_resource_pools(cluster).map do |resource_pool|
|
|
10
|
+
resource_pool_attributes(resource_pool, cluster_name, datacenter_name)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
protected
|
|
15
|
+
|
|
16
|
+
# root ResourcePool + Children if they exists
|
|
17
|
+
def list_raw_resource_pools(cluster)
|
|
18
|
+
[cluster.resourcePool, cluster.resourcePool.resourcePool].flatten
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def resource_pool_attributes resource_pool, cluster, datacenter
|
|
22
|
+
{
|
|
23
|
+
:id => managed_obj_id(resource_pool),
|
|
24
|
+
:name => resource_pool.name,
|
|
25
|
+
:configured_memory_mb => resource_pool.summary.configuredMemoryMB,
|
|
26
|
+
:overall_status => resource_pool.overallStatus,
|
|
27
|
+
:cluster => cluster,
|
|
28
|
+
:datacenter => datacenter
|
|
29
|
+
}
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
class Mock
|
|
33
|
+
def list_resource_pools(filters = { })
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def list_server_types(filters={})
|
|
6
|
+
datacenter_name = filters[:datacenter]
|
|
7
|
+
servertypes=raw_server_types(datacenter_name)
|
|
8
|
+
if servertypes
|
|
9
|
+
servertypes.map do | servertype |
|
|
10
|
+
server_type_attributes(servertype, datacenter_name)
|
|
11
|
+
end.compact
|
|
12
|
+
else
|
|
13
|
+
nil
|
|
14
|
+
end
|
|
15
|
+
#select{ | guestdesc | guestdesc.select{ | k, v | filter.has_key?(k) and filter[k] == v }==filter }
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def raw_server_types(datacenter_name, filter={})
|
|
19
|
+
datacenter=find_raw_datacenter(datacenter_name)
|
|
20
|
+
environmentBrowser=datacenter.hostFolder.childEntity.grep(RbVmomi::VIM::ComputeResource).first.environmentBrowser
|
|
21
|
+
if environmentBrowser
|
|
22
|
+
environmentBrowser.QueryConfigOption[:guestOSDescriptor]
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
protected
|
|
27
|
+
|
|
28
|
+
def server_type_attributes(servertype, datacenter)
|
|
29
|
+
{
|
|
30
|
+
:id => servertype.id,
|
|
31
|
+
:name => servertype.id,
|
|
32
|
+
:family => servertype.family,
|
|
33
|
+
:fullname => servertype.fullName,
|
|
34
|
+
:datacenter => datacenter,
|
|
35
|
+
}
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
class Mock
|
|
39
|
+
def list_server_types(datacenter_name)
|
|
40
|
+
[{:id=>"rhel6Guest",
|
|
41
|
+
:name=>"rhel6Guest",
|
|
42
|
+
:family=>"linuxGuest",
|
|
43
|
+
:fullname=>"Red Hat Enterprise Linux 6 (32-Bit)",
|
|
44
|
+
:datacenter=>"Solutions"},
|
|
45
|
+
{:id=>"rhel5_64Guest",
|
|
46
|
+
:name=>"rhel5_64Guest",
|
|
47
|
+
:family=>"linuxGuest",
|
|
48
|
+
:fullname=>"Red Hat Enterprise Linux 5 (64-Bit)",
|
|
49
|
+
:datacenter=>"Solutions"}]
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def list_templates(options = { })
|
|
6
|
+
options[:folder] ||= options['folder']
|
|
7
|
+
if options[:folder] then
|
|
8
|
+
list_all_templates_in_folder(options[:folder], options[:datacenter])
|
|
9
|
+
else
|
|
10
|
+
list_all_templates(options)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
private
|
|
15
|
+
|
|
16
|
+
def list_all_templates_in_folder(path, datacenter_name)
|
|
17
|
+
folder = get_raw_vmfolder(path, datacenter_name)
|
|
18
|
+
|
|
19
|
+
vms = folder.children.grep(RbVmomi::VIM::VirtualMachine)
|
|
20
|
+
# remove all virtual machines that are not template
|
|
21
|
+
vms.delete_if { |v| v.config.nil? or not v.config.template }
|
|
22
|
+
|
|
23
|
+
vms.map(&method(:convert_vm_mob_ref_to_attr_hash))
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def list_all_templates(options = {})
|
|
27
|
+
datacenters = find_datacenters(options[:datacenter])
|
|
28
|
+
|
|
29
|
+
vms = datacenters.map do |dc|
|
|
30
|
+
@connection.serviceContent.viewManager.CreateContainerView({
|
|
31
|
+
:container => dc.vmFolder,
|
|
32
|
+
:type => ["VirtualMachine"],
|
|
33
|
+
:recursive => true
|
|
34
|
+
}).view
|
|
35
|
+
end.flatten
|
|
36
|
+
# remove all virtual machines that are not templates
|
|
37
|
+
vms.delete_if { |v| v.config.nil? or not v.config.template }
|
|
38
|
+
|
|
39
|
+
vms.map(&method(:convert_vm_mob_ref_to_attr_hash))
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
class Mock
|
|
43
|
+
def list_templates(filters = { })
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def list_virtual_machines(options = { })
|
|
6
|
+
# Listing all VM's can be quite slow and expensive. Try and optimize
|
|
7
|
+
# based on the available options we have. These conditions are in
|
|
8
|
+
# ascending order of time to complete for large deployments.
|
|
9
|
+
|
|
10
|
+
options[:folder] ||= options['folder']
|
|
11
|
+
if options['instance_uuid'] then
|
|
12
|
+
[get_virtual_machine(options['instance_uuid'])]
|
|
13
|
+
elsif options[:folder] && options[:datacenter] then
|
|
14
|
+
list_all_virtual_machines_in_folder(options[:folder], options[:datacenter])
|
|
15
|
+
else
|
|
16
|
+
list_all_virtual_machines(options)
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
def list_all_virtual_machines_in_folder(path, datacenter_name)
|
|
24
|
+
folder = get_raw_vmfolder(path, datacenter_name)
|
|
25
|
+
|
|
26
|
+
vms = folder.children.grep(RbVmomi::VIM::VirtualMachine)
|
|
27
|
+
# remove all template based virtual machines
|
|
28
|
+
vms.delete_if { |v| v.config.nil? or v.config.template }
|
|
29
|
+
vms.map(&method(:convert_vm_mob_ref_to_attr_hash))
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def list_all_virtual_machines(options = { })
|
|
33
|
+
raw_vms = raw_list_all_virtual_machines(options[:datacenter])
|
|
34
|
+
vms = convert_vm_view_to_attr_hash(raw_vms)
|
|
35
|
+
|
|
36
|
+
# remove all template based virtual machines
|
|
37
|
+
vms.delete_if { |v| v['template'] }
|
|
38
|
+
vms
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def raw_list_all_virtual_machines(datacenter_name = nil)
|
|
42
|
+
## Moved this to its own function since trying to get a list of all virtual machines
|
|
43
|
+
## to parse for a find function took way too long. The raw list returned will make it
|
|
44
|
+
## much faster to interact for some functions.
|
|
45
|
+
datacenters = find_datacenters(datacenter_name)
|
|
46
|
+
datacenters.map do |dc|
|
|
47
|
+
@connection.serviceContent.viewManager.CreateContainerView({
|
|
48
|
+
:container => dc.vmFolder,
|
|
49
|
+
:type => ["VirtualMachine"],
|
|
50
|
+
:recursive => true
|
|
51
|
+
}).view
|
|
52
|
+
end.flatten
|
|
53
|
+
end
|
|
54
|
+
def get_folder_path(folder, root = nil)
|
|
55
|
+
if (not folder.methods.include?('parent')) or (folder == root)
|
|
56
|
+
return
|
|
57
|
+
end
|
|
58
|
+
"#{get_folder_path(folder.parent)}/#{folder.name}"
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
class Mock
|
|
63
|
+
def get_folder_path(folder, root = nil)
|
|
64
|
+
nil
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def list_virtual_machines(options = { })
|
|
68
|
+
if options['instance_uuid'].nil? and options['mo_ref'].nil?
|
|
69
|
+
self.data[:servers].values
|
|
70
|
+
elsif !options['instance_uuid'].nil?
|
|
71
|
+
server = self.data[:servers][options['instance_uuid']]
|
|
72
|
+
server.nil? ? [] : [server]
|
|
73
|
+
else
|
|
74
|
+
self.data[:servers].values.select{|vm| vm['mo_ref'] == options['mo_ref']}
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def list_vm_customvalues(vm_id)
|
|
6
|
+
get_vm_ref(vm_id).summary.customValue.map do |customvalue|
|
|
7
|
+
{
|
|
8
|
+
:key => customvalue.key.to_i,
|
|
9
|
+
:value => customvalue.value,
|
|
10
|
+
}
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
class Mock
|
|
15
|
+
def list_vm_customfields(vm_id)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
# => VirtualE1000(
|
|
6
|
+
#addressType: "assigned",
|
|
7
|
+
#backing: VirtualEthernetCardNetworkBackingInfo(
|
|
8
|
+
# deviceName: "VM Network",
|
|
9
|
+
# dynamicProperty: [],
|
|
10
|
+
# network: Network("network-163"),
|
|
11
|
+
# useAutoDetect: false
|
|
12
|
+
#),
|
|
13
|
+
#connectable: VirtualDeviceConnectInfo(
|
|
14
|
+
# allowGuestControl: true,
|
|
15
|
+
# connected: true,
|
|
16
|
+
# dynamicProperty: [],
|
|
17
|
+
# startConnected: true,
|
|
18
|
+
# status: "ok"
|
|
19
|
+
#),
|
|
20
|
+
#controllerKey: 100,
|
|
21
|
+
#deviceInfo: Description(
|
|
22
|
+
# dynamicProperty: [],
|
|
23
|
+
# label: "Network adapter 1",
|
|
24
|
+
# summary: "VM Network"
|
|
25
|
+
#),
|
|
26
|
+
#dynamicProperty: [],
|
|
27
|
+
#key: 4000,
|
|
28
|
+
#macAddress: "00:50:56:a9:00:28",
|
|
29
|
+
#unitNumber: 7,
|
|
30
|
+
#
|
|
31
|
+
def list_vm_interfaces(vm_id, datacenter = nil)
|
|
32
|
+
get_vm_ref(vm_id, datacenter).config.hardware.device.grep(RbVmomi::VIM::VirtualEthernetCard).map do |nic|
|
|
33
|
+
{
|
|
34
|
+
:name => nic.deviceInfo.label,
|
|
35
|
+
:mac => nic.macAddress,
|
|
36
|
+
:network => nic.backing.respond_to?("network") ? nic.backing.network.name : nic.backing.port.portgroupKey,
|
|
37
|
+
:status => nic.connectable.status,
|
|
38
|
+
:summary => nic.deviceInfo.summary,
|
|
39
|
+
:type => nic.class,
|
|
40
|
+
:key => nic.key,
|
|
41
|
+
}
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def get_vm_interface(vm_id, options={})
|
|
46
|
+
raise ArgumentError, "instance id is a required parameter" unless vm_id
|
|
47
|
+
if options.is_a? Fog::Compute::Vsphere::Interface
|
|
48
|
+
options
|
|
49
|
+
else
|
|
50
|
+
raise ArgumentError, "Either key or name is a required parameter. options: #{options}" unless options.key? :key or options.key? :mac or options.key? :name
|
|
51
|
+
list_vm_interfaces(vm_id).find do | nic |
|
|
52
|
+
(options.key? :key and nic[:key]==options[:key].to_i) or (options.key? :mac and nic[:mac]==options[:mac]) or (options.key? :name and nic[:name]==options[:name])
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
class Mock
|
|
58
|
+
def list_vm_interfaces(vm_id)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def list_vm_snapshots(vm_id, opts = {})
|
|
6
|
+
root_snapshots = get_vm_ref(vm_id).snapshot.rootSnapshotList.map do |snap|
|
|
7
|
+
item = snapshot_info(snap, vm_id)
|
|
8
|
+
[
|
|
9
|
+
item,
|
|
10
|
+
opts[:recursive] ? list_child_snapshots(item, opts) : nil
|
|
11
|
+
]
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
root_snapshots.flatten.compact
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
protected
|
|
18
|
+
|
|
19
|
+
def snapshot_info(snap_tree, vm_id)
|
|
20
|
+
{
|
|
21
|
+
:name => snap_tree.name,
|
|
22
|
+
:quiesced => snap_tree.quiesced,
|
|
23
|
+
:description => snap_tree.description,
|
|
24
|
+
:create_time => snap_tree.createTime,
|
|
25
|
+
:power_state => snap_tree.state,
|
|
26
|
+
:ref => snap_tree.snapshot._ref,
|
|
27
|
+
:mo_ref => snap_tree.snapshot,
|
|
28
|
+
:tree_node => snap_tree,
|
|
29
|
+
:ref_chain => "#{vm_id}/#{snap_tree.snapshot._ref}",
|
|
30
|
+
:snapshot_name_chain => "#{vm_id}/#{snap_tree.name}"
|
|
31
|
+
}
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
class Mock
|
|
35
|
+
def list_vm_snapshots(vm_id, opts = {})
|
|
36
|
+
[
|
|
37
|
+
{
|
|
38
|
+
:name => 'clean',
|
|
39
|
+
:quiesced => false,
|
|
40
|
+
:description => '',
|
|
41
|
+
:create_time => Time.now.utc,
|
|
42
|
+
:power_state => 'poweredOn',
|
|
43
|
+
:ref => 'snapshot-0101',
|
|
44
|
+
:mo_ref => nil,
|
|
45
|
+
:tree_node => nil,
|
|
46
|
+
:snapshot_name_chain => '123/clean',
|
|
47
|
+
:ref_chain => "#{vm_id}/snapshot-0101"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
:name => 'dirty',
|
|
51
|
+
:quiesced => false,
|
|
52
|
+
:description => '',
|
|
53
|
+
:create_time => Time.now.utc,
|
|
54
|
+
:power_state => 'poweredOn',
|
|
55
|
+
:ref => 'snapshot-0102',
|
|
56
|
+
:mo_ref => nil,
|
|
57
|
+
:tree_node => nil,
|
|
58
|
+
:snapshot_name_chain => '123/dirty',
|
|
59
|
+
:ref_chain => "#{vm_id}/snapshot-0102"
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
# [VirtualDisk(
|
|
6
|
+
# backing: VirtualDiskFlatVer2BackingInfo(
|
|
7
|
+
# contentId: "a172d19487e878e17d6b16ff2505d7eb",
|
|
8
|
+
# datastore: Datastore("datastore-162"),
|
|
9
|
+
# diskMode: "persistent",
|
|
10
|
+
# dynamicProperty: [],
|
|
11
|
+
# fileName: "[Storage1] rhel6-mfojtik/rhel6-mfojtik.vmdk",
|
|
12
|
+
# split: false,
|
|
13
|
+
# thinProvisioned: true,
|
|
14
|
+
# uuid: "6000C29c-a47d-4cd9-5249-c371de775f06",
|
|
15
|
+
# writeThrough: false
|
|
16
|
+
# ),
|
|
17
|
+
# capacityInKB: 8388608,
|
|
18
|
+
# controllerKey: 1000,
|
|
19
|
+
# deviceInfo: Description(
|
|
20
|
+
# dynamicProperty: [],
|
|
21
|
+
# label: "Hard disk 1",
|
|
22
|
+
# summary: "8,388,608 KB"
|
|
23
|
+
# ),
|
|
24
|
+
# dynamicProperty: [],
|
|
25
|
+
# key: 2001,
|
|
26
|
+
# shares: SharesInfo( dynamicProperty: [], level: "normal", shares: 1000 ),
|
|
27
|
+
# unitNumber: 1
|
|
28
|
+
#)]
|
|
29
|
+
|
|
30
|
+
def list_vm_volumes(vm_id)
|
|
31
|
+
get_vm_ref(vm_id).disks.map do |vol|
|
|
32
|
+
{
|
|
33
|
+
:id => vol.backing.uuid,
|
|
34
|
+
:thin => (vol.backing.thinProvisioned rescue(nil)),
|
|
35
|
+
:mode => vol.backing.diskMode,
|
|
36
|
+
:filename => vol.backing.fileName,
|
|
37
|
+
:datastore => (vol.backing.datastore.name rescue(nil)),
|
|
38
|
+
:size => vol.capacityInKB,
|
|
39
|
+
:name => vol.deviceInfo.label,
|
|
40
|
+
:key => vol.key,
|
|
41
|
+
:unit_number => vol.unitNumber
|
|
42
|
+
}
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
class Mock
|
|
47
|
+
def list_vm_volumes(vm_id)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|