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,45 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def vm_config_vnc(options = { })
|
|
6
|
+
raise ArgumentError, "instance_uuid is a required parameter" unless options.key? 'instance_uuid'
|
|
7
|
+
|
|
8
|
+
search_filter = { :uuid => options['instance_uuid'], 'vmSearch' => true, 'instanceUuid' => true }
|
|
9
|
+
vm_mob_ref = @connection.searchIndex.FindAllByUuid(search_filter).first
|
|
10
|
+
task = vm_mob_ref.ReconfigVM_Task(:spec => {
|
|
11
|
+
:extraConfig => [
|
|
12
|
+
{ :key => 'RemoteDisplay.vnc.enabled', :value => options[:enabled] ? 'true' : 'false' },
|
|
13
|
+
{ :key => 'RemoteDisplay.vnc.password', :value => options[:password].to_s },
|
|
14
|
+
{ :key => 'RemoteDisplay.vnc.port', :value => options[:port].to_s || '5910' }
|
|
15
|
+
]
|
|
16
|
+
})
|
|
17
|
+
task.wait_for_completion
|
|
18
|
+
{ 'task_state' => task.info.state }
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# return a hash of VNC attributes required to view the console
|
|
22
|
+
def vm_get_vnc uuid
|
|
23
|
+
search_filter = { :uuid => uuid, 'vmSearch' => true, 'instanceUuid' => true }
|
|
24
|
+
vm = @connection.searchIndex.FindAllByUuid(search_filter).first
|
|
25
|
+
Hash[vm.config.extraConfig.map do |config|
|
|
26
|
+
if config.key =~ /^RemoteDisplay\.vnc\.(\w+)$/
|
|
27
|
+
[$1.to_sym, config.value]
|
|
28
|
+
end
|
|
29
|
+
end.compact]
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
class Mock
|
|
34
|
+
def vm_config_vnc(options = { })
|
|
35
|
+
raise ArgumentError, "instance_uuid is a required parameter" unless options.key? 'instance_uuid'
|
|
36
|
+
{ 'task_state' => 'success' }
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def vm_get_vnc uuid
|
|
40
|
+
{:password => 'secret', :port => '5900', :enabled => 'true'}
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def vm_destroy(options = {})
|
|
6
|
+
raise ArgumentError, "instance_uuid is a required parameter" unless options.key? 'instance_uuid'
|
|
7
|
+
|
|
8
|
+
vm_mob_ref = get_vm_ref(options['instance_uuid'])
|
|
9
|
+
task = vm_mob_ref.Destroy_Task
|
|
10
|
+
task.wait_for_completion
|
|
11
|
+
{ 'task_state' => task.info.state }
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
class Mock
|
|
16
|
+
def vm_destroy(options = {})
|
|
17
|
+
raise ArgumentError, "instance_uuid is a required parameter" unless options.key? 'instance_uuid'
|
|
18
|
+
{ 'task_state' => 'success' }
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
# NOTE: you must be using vsphere_rev 5.0 or greater to use this functionality
|
|
6
|
+
# e.g. Fog::Compute.new(provider: "vsphere", vsphere_rev: "5.5", etc)
|
|
7
|
+
# * options<~Hash>:
|
|
8
|
+
# * 'instance_uuid'<~String> - *REQUIRED* the instance uuid you would like to operate on
|
|
9
|
+
# * 'command'<~String> *REQUIRED* the command to execute
|
|
10
|
+
# * 'args'<~String> arguments to pass the command
|
|
11
|
+
# * 'working_dir'<~String> path to the working directory
|
|
12
|
+
# * 'user'<~String> *REQUIRED* the ssh username you would like to login as
|
|
13
|
+
# * 'password'<~String> *REQUIRED* the ssh password for the user you would like to log in as
|
|
14
|
+
def vm_execute(options = {})
|
|
15
|
+
raise ArgumentError, "instance_uuid is a required parameter" unless options.key? 'instance_uuid'
|
|
16
|
+
raise ArgumentError, "command is a required parameter" unless options.key? 'command'
|
|
17
|
+
raise ArgumentError, "user is a required parameter" unless options.key? 'user'
|
|
18
|
+
raise ArgumentError, "password is a required parameter" unless options.key? 'password'
|
|
19
|
+
|
|
20
|
+
search_filter = { :uuid => options['instance_uuid'], 'vmSearch' => true, 'instanceUuid' => true }
|
|
21
|
+
vm_mob_ref = @connection.searchIndex.FindAllByUuid(search_filter).first
|
|
22
|
+
|
|
23
|
+
auth = RbVmomi::VIM::NamePasswordAuthentication(:interactiveSession => false,
|
|
24
|
+
:username => options['user'],
|
|
25
|
+
:password => options['password'])
|
|
26
|
+
|
|
27
|
+
spec = RbVmomi::VIM::GuestProgramSpec(:programPath => options['command'],
|
|
28
|
+
:arguments => options['args'],
|
|
29
|
+
:workingDirectory => options['working_dir'])
|
|
30
|
+
|
|
31
|
+
gom = @connection.serviceContent.guestOperationsManager
|
|
32
|
+
gom.processManager.StartProgramInGuest(:vm => vm_mob_ref, :auth => auth, :spec => spec)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
class Mock
|
|
37
|
+
def vm_execute(options = {})
|
|
38
|
+
raise ArgumentError, "instance_uuid is a required parameter" unless options.key? 'instance_uuid'
|
|
39
|
+
raise ArgumentError, "command is a required parameter" unless options.key? 'command'
|
|
40
|
+
raise ArgumentError, "user is a required parameter" unless options.key? 'user'
|
|
41
|
+
raise ArgumentError, "password is a required parameter" unless options.key? 'password'
|
|
42
|
+
return 12345
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def vm_migrate(options = {})
|
|
6
|
+
#priority is the only required option, and it has a sane default option.
|
|
7
|
+
priority = options['priority'].nil? ? 'defaultPriority' : options["priority"]
|
|
8
|
+
raise ArgumentError, "instance_uuid is a required parameter" unless options.key? 'instance_uuid'
|
|
9
|
+
|
|
10
|
+
# Find the VM Object
|
|
11
|
+
search_filter = { :uuid => options['instance_uuid'], 'vmSearch' => true, 'instanceUuid' => true }
|
|
12
|
+
vm_mob_ref = @connection.searchIndex.FindAllByUuid(search_filter).first
|
|
13
|
+
|
|
14
|
+
unless vm_mob_ref.kind_of? RbVmomi::VIM::VirtualMachine
|
|
15
|
+
raise Fog::Vsphere::Errors::NotFound,
|
|
16
|
+
"Could not find VirtualMachine with instance uuid #{options['instance_uuid']}"
|
|
17
|
+
end
|
|
18
|
+
task = vm_mob_ref.MigrateVM_Task(:pool => options['pool'], :host => options['host'], :priority => "#{priority}", :state => options['state'] )
|
|
19
|
+
task.wait_for_completion
|
|
20
|
+
{ 'task_state' => task.info.state }
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
class Mock
|
|
25
|
+
def vm_migrate(options = {})
|
|
26
|
+
priority = options['priority'].nil? ? 'defaultPriority' : options["priority"]
|
|
27
|
+
raise ArgumentError, "instance_uuid is a required parameter" unless options.key? 'instance_uuid'
|
|
28
|
+
{ 'task_state' => 'success' }
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def vm_power_off(options = {})
|
|
6
|
+
options = { 'force' => false }.merge(options)
|
|
7
|
+
raise ArgumentError, "instance_uuid is a required parameter" unless options.key? 'instance_uuid'
|
|
8
|
+
|
|
9
|
+
search_filter = { :uuid => options['instance_uuid'], 'vmSearch' => true, 'instanceUuid' => true }
|
|
10
|
+
vm_mob_ref = @connection.searchIndex.FindAllByUuid(search_filter).first
|
|
11
|
+
|
|
12
|
+
if options['force'] then
|
|
13
|
+
task = vm_mob_ref.PowerOffVM_Task
|
|
14
|
+
task.wait_for_completion
|
|
15
|
+
{ 'task_state' => task.info.result, 'power_off_type' => 'cut_power' }
|
|
16
|
+
else
|
|
17
|
+
vm_mob_ref.ShutdownGuest
|
|
18
|
+
{
|
|
19
|
+
'task_state' => "running",
|
|
20
|
+
'power_off_type' => 'shutdown_guest',
|
|
21
|
+
}
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
class Mock
|
|
27
|
+
def vm_power_off(options = {})
|
|
28
|
+
raise ArgumentError, "instance_uuid is a required parameter" unless options.key? 'instance_uuid'
|
|
29
|
+
vm = get_virtual_machine(options['instance_uuid'])
|
|
30
|
+
vm["power_state"] = "poweredOff"
|
|
31
|
+
{
|
|
32
|
+
'task_state' => "running",
|
|
33
|
+
'power_off_type' => options['force'] ? 'cut_power' : 'shutdown_guest',
|
|
34
|
+
}
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def vm_power_on(options = {})
|
|
6
|
+
raise ArgumentError, "instance_uuid is a required parameter" unless options.key? 'instance_uuid'
|
|
7
|
+
|
|
8
|
+
search_filter = { :uuid => options['instance_uuid'], 'vmSearch' => true, 'instanceUuid' => true }
|
|
9
|
+
vm_mob_ref = @connection.searchIndex.FindAllByUuid(search_filter).first
|
|
10
|
+
|
|
11
|
+
task = vm_mob_ref.PowerOnVM_Task
|
|
12
|
+
task.wait_for_completion
|
|
13
|
+
# 'success', 'running', 'queued', 'error'
|
|
14
|
+
{ 'task_state' => task.info.state }
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
class Mock
|
|
19
|
+
def vm_power_on(options = {})
|
|
20
|
+
raise ArgumentError, "instance_uuid is a required parameter" unless options.key? 'instance_uuid'
|
|
21
|
+
{ 'task_state' => 'success' }
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def vm_reboot(options = {})
|
|
6
|
+
options = { 'force' => false }.merge(options)
|
|
7
|
+
raise ArgumentError, "instance_uuid is a required parameter" unless options.key? 'instance_uuid'
|
|
8
|
+
|
|
9
|
+
search_filter = { :uuid => options['instance_uuid'], 'vmSearch' => true, 'instanceUuid' => true }
|
|
10
|
+
vm_mob_ref = @connection.searchIndex.FindAllByUuid(search_filter).first
|
|
11
|
+
|
|
12
|
+
if options['force'] then
|
|
13
|
+
task = vm_mob_ref.ResetVM_Task
|
|
14
|
+
task.wait_for_completion
|
|
15
|
+
{ 'task_state' => task.info.result, 'reboot_type' => 'reset_power' }
|
|
16
|
+
else
|
|
17
|
+
vm_mob_ref.RebootGuest
|
|
18
|
+
{ 'task_state' => "running", 'reboot_type' => 'reboot_guest' }
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
class Mock
|
|
24
|
+
def vm_reboot(options = {})
|
|
25
|
+
raise ArgumentError, "instance_uuid is a required parameter" unless options.key? 'instance_uuid'
|
|
26
|
+
{ 'task_state' => "running", 'reboot_type' => options['force'] ? 'reset_power' : 'reboot_guest' }
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def vm_reconfig_cpus(options = {})
|
|
6
|
+
raise ArgumentError, "cpus is a required parameter" unless options.key? 'cpus'
|
|
7
|
+
raise ArgumentError, "instance_uuid is a required parameter" unless options.key? 'instance_uuid'
|
|
8
|
+
hardware_spec={'numCPUs' => options['cpus'], 'numCoresPerSocket' => options['corespersocket']}
|
|
9
|
+
vm_reconfig_hardware('instance_uuid' => options['instance_uuid'], 'hardware_spec' => hardware_spec )
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
class Mock
|
|
14
|
+
def vm_reconfig_cpus(options = {})
|
|
15
|
+
raise ArgumentError, "cpus is a required parameter" unless options.key? 'cpus'
|
|
16
|
+
raise ArgumentError, "instance_uuid is a required parameter" unless options.key? 'instance_uuid'
|
|
17
|
+
hardware_spec={'numCPUs' => options['cpus'], 'numCoresPerSocket' => options['corespersocket']}
|
|
18
|
+
vm_reconfig_hardware('instance_uuid' => options['instance_uuid'], 'hardware_spec' => hardware_spec )
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def vm_reconfig_hardware(options = {})
|
|
6
|
+
raise ArgumentError, "hardware_spec is a required parameter" unless options.key? 'hardware_spec'
|
|
7
|
+
raise ArgumentError, "instance_uuid is a required parameter" unless options.key? 'instance_uuid'
|
|
8
|
+
vm_mob_ref = get_vm_ref(options['instance_uuid'])
|
|
9
|
+
task = vm_mob_ref.ReconfigVM_Task(:spec => RbVmomi::VIM.VirtualMachineConfigSpec(options['hardware_spec']))
|
|
10
|
+
task.wait_for_completion
|
|
11
|
+
{ 'task_state' => task.info.state }
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
class Mock
|
|
16
|
+
def vm_reconfig_hardware(options = {})
|
|
17
|
+
raise ArgumentError, "hardware_spec is a required parameter" unless options.key? 'hardware_spec'
|
|
18
|
+
raise ArgumentError, "instance_uuid is a required parameter" unless options.key? 'instance_uuid'
|
|
19
|
+
{ 'task_state' => 'success' }
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def vm_reconfig_memory(options = {})
|
|
6
|
+
raise ArgumentError, "memory is a required parameter" unless options.key? 'memory'
|
|
7
|
+
raise ArgumentError, "instance_uuid is a required parameter" unless options.key? 'instance_uuid'
|
|
8
|
+
hardware_spec={'memoryMB' => options['memory']}
|
|
9
|
+
vm_reconfig_hardware('instance_uuid' => options['instance_uuid'], 'hardware_spec' => hardware_spec )
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
class Mock
|
|
14
|
+
def vm_reconfig_memory(options = {})
|
|
15
|
+
raise ArgumentError, "memory is a required parameter" unless options.key? 'memory'
|
|
16
|
+
raise ArgumentError, "instance_uuid is a required parameter" unless options.key? 'instance_uuid'
|
|
17
|
+
hardware_spec={'memoryMB' => options['memory']}
|
|
18
|
+
vm_reconfig_hardware('instance_uuid' => options['instance_uuid'], 'hardware_spec' => hardware_spec )
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
module Fog
|
|
2
|
+
module Compute
|
|
3
|
+
class Vsphere
|
|
4
|
+
class Real
|
|
5
|
+
def vm_take_snapshot(options = {})
|
|
6
|
+
raise ArgumentError, "instance_uuid is a required parameter" unless options.key? 'instance_uuid'
|
|
7
|
+
raise ArgumentError, "name is a required parameter" unless options.key? 'name'
|
|
8
|
+
vm = get_vm_ref(options['instance_uuid'])
|
|
9
|
+
task = vm.CreateSnapshot_Task(
|
|
10
|
+
:name => options['name'],
|
|
11
|
+
:description => options['description'] || '',
|
|
12
|
+
:memory => options['memory'] || true,
|
|
13
|
+
:quiesce => options['quiesce'] || false
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
task.wait_for_completion
|
|
17
|
+
|
|
18
|
+
{
|
|
19
|
+
'task_state' => task.info.state,
|
|
20
|
+
'was_cancelled' => task.info.cancelled
|
|
21
|
+
}
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
class Mock
|
|
26
|
+
def vm_take_snapshot(options = {})
|
|
27
|
+
raise ArgumentError, "instance_uuid is a required parameter" unless options.key? 'instance_uuid'
|
|
28
|
+
raise ArgumentError, "name is a required parameter" unless options.key? 'name'
|
|
29
|
+
{
|
|
30
|
+
'task_state' => 'success',
|
|
31
|
+
'was_cancelled' => false
|
|
32
|
+
}
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
Shindo.tests('Fog::Compute[:vsphere]', ['vsphere']) do
|
|
2
|
+
|
|
3
|
+
compute = Fog::Compute[:vsphere]
|
|
4
|
+
|
|
5
|
+
tests("| convert_vm_mob_ref_to_attr_hash") do
|
|
6
|
+
# Mock the RbVmomi::VIM::ManagedObject class
|
|
7
|
+
class MockManagedObject
|
|
8
|
+
attr_reader :parent, :_ref
|
|
9
|
+
|
|
10
|
+
def initialize
|
|
11
|
+
@parent = @_ref = 'vm-123'
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def collect! *pathSet
|
|
15
|
+
{ '_ref' => 'vm-123', 'name' => 'fakevm' }
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
fake_vm_mob_ref = MockManagedObject.new
|
|
20
|
+
|
|
21
|
+
tests("When converting an incomplete vm object") do
|
|
22
|
+
test("it should return a Hash") do
|
|
23
|
+
compute.send(:convert_vm_mob_ref_to_attr_hash, fake_vm_mob_ref).kind_of? Hash
|
|
24
|
+
end
|
|
25
|
+
tests("The converted Hash should") do
|
|
26
|
+
attr_hash = compute.send(:convert_vm_mob_ref_to_attr_hash, fake_vm_mob_ref)
|
|
27
|
+
test("have a name") { attr_hash['name'] == 'fakevm' }
|
|
28
|
+
test("have a mo_ref") {attr_hash['mo_ref'] == 'vm-123' }
|
|
29
|
+
test("have an id") { attr_hash['id'] == 'vm-123' }
|
|
30
|
+
test("not have a instance_uuid") { attr_hash['instance_uuid'].nil? }
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
tests("When passed a nil object") do
|
|
35
|
+
attr_hash = compute.send :convert_vm_mob_ref_to_attr_hash, nil
|
|
36
|
+
test("it should return a nil object") do
|
|
37
|
+
attr_hash.nil?
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
tests("Compute attributes") do
|
|
43
|
+
%w{ vsphere_is_vcenter vsphere_rev vsphere_username vsphere_server }.each do |attr|
|
|
44
|
+
test("it should respond to #{attr}") { compute.respond_to? attr }
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
tests("Compute collections") do
|
|
49
|
+
%w{ servers }.each do |collection|
|
|
50
|
+
test("it should respond to #{collection}") { compute.respond_to? collection }
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
data/tests/helper.rb
ADDED