fog-vsphere 2.1.1 → 2.2.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 +4 -4
- data/.rubocop.yml +8 -0
- data/.rubocop_todo.yml +217 -0
- data/.travis.yml +1 -0
- data/CHANGELOG.md +4 -0
- data/Rakefile +10 -1
- data/fog-vsphere.gemspec +2 -2
- data/lib/fog/bin/vsphere.rb +1 -1
- data/lib/fog/vsphere/compute.rb +320 -301
- data/lib/fog/vsphere/models/compute/cdrom.rb +10 -10
- data/lib/fog/vsphere/models/compute/cdroms.rb +2 -2
- data/lib/fog/vsphere/models/compute/cluster.rb +20 -20
- data/lib/fog/vsphere/models/compute/clusters.rb +1 -1
- data/lib/fog/vsphere/models/compute/customfields.rb +4 -4
- data/lib/fog/vsphere/models/compute/customvalues.rb +8 -8
- data/lib/fog/vsphere/models/compute/datacenter.rb +16 -16
- data/lib/fog/vsphere/models/compute/datastores.rb +1 -1
- data/lib/fog/vsphere/models/compute/folder.rb +2 -2
- data/lib/fog/vsphere/models/compute/folders.rb +2 -2
- data/lib/fog/vsphere/models/compute/hosts.rb +4 -4
- data/lib/fog/vsphere/models/compute/interface.rb +12 -12
- data/lib/fog/vsphere/models/compute/interfaces.rb +14 -16
- data/lib/fog/vsphere/models/compute/interfacetype.rb +2 -2
- data/lib/fog/vsphere/models/compute/interfacetypes.rb +6 -8
- data/lib/fog/vsphere/models/compute/networks.rb +1 -1
- data/lib/fog/vsphere/models/compute/resource_pools.rb +1 -1
- data/lib/fog/vsphere/models/compute/rule.rb +8 -9
- data/lib/fog/vsphere/models/compute/rules.rb +9 -10
- data/lib/fog/vsphere/models/compute/scsicontroller.rb +1 -1
- data/lib/fog/vsphere/models/compute/server.rb +68 -80
- data/lib/fog/vsphere/models/compute/servers.rb +12 -13
- data/lib/fog/vsphere/models/compute/servertype.rb +6 -6
- data/lib/fog/vsphere/models/compute/servertypes.rb +2 -2
- data/lib/fog/vsphere/models/compute/snapshot.rb +5 -6
- data/lib/fog/vsphere/models/compute/snapshots.rb +1 -1
- data/lib/fog/vsphere/models/compute/ticket.rb +0 -1
- data/lib/fog/vsphere/models/compute/volume.rb +12 -14
- data/lib/fog/vsphere/models/compute/volumes.rb +10 -10
- data/lib/fog/vsphere/requests/compute/cloudinit_to_customspec.rb +8 -8
- data/lib/fog/vsphere/requests/compute/create_folder.rb +5 -5
- data/lib/fog/vsphere/requests/compute/create_group.rb +16 -16
- data/lib/fog/vsphere/requests/compute/create_rule.rb +13 -13
- data/lib/fog/vsphere/requests/compute/create_vm.rb +117 -119
- data/lib/fog/vsphere/requests/compute/destroy_group.rb +8 -8
- data/lib/fog/vsphere/requests/compute/destroy_rule.rb +8 -8
- data/lib/fog/vsphere/requests/compute/folder_destroy.rb +3 -3
- data/lib/fog/vsphere/requests/compute/get_cluster.rb +2 -2
- data/lib/fog/vsphere/requests/compute/get_compute_resource.rb +16 -16
- data/lib/fog/vsphere/requests/compute/get_datacenter.rb +7 -7
- data/lib/fog/vsphere/requests/compute/get_datastore.rb +1 -2
- data/lib/fog/vsphere/requests/compute/get_folder.rb +24 -24
- data/lib/fog/vsphere/requests/compute/get_host.rb +2 -3
- data/lib/fog/vsphere/requests/compute/get_interface_type.rb +6 -6
- data/lib/fog/vsphere/requests/compute/get_network.rb +7 -10
- data/lib/fog/vsphere/requests/compute/get_resource_pool.rb +1 -2
- data/lib/fog/vsphere/requests/compute/get_server_type.rb +14 -14
- data/lib/fog/vsphere/requests/compute/get_storage_pod.rb +2 -2
- data/lib/fog/vsphere/requests/compute/get_template.rb +1 -2
- data/lib/fog/vsphere/requests/compute/get_virtual_machine.rb +26 -26
- data/lib/fog/vsphere/requests/compute/get_vm_first_scsi_controller.rb +6 -7
- data/lib/fog/vsphere/requests/compute/host_finish_maintenance.rb +1 -1
- data/lib/fog/vsphere/requests/compute/host_shutdown.rb +1 -1
- data/lib/fog/vsphere/requests/compute/host_start_maintenance.rb +1 -1
- data/lib/fog/vsphere/requests/compute/list_child_snapshots.rb +37 -39
- data/lib/fog/vsphere/requests/compute/list_clusters.rb +8 -9
- data/lib/fog/vsphere/requests/compute/list_compute_resources.rb +57 -59
- data/lib/fog/vsphere/requests/compute/list_customfields.rb +5 -6
- data/lib/fog/vsphere/requests/compute/list_datacenters.rb +17 -17
- data/lib/fog/vsphere/requests/compute/list_datastores.rb +16 -15
- data/lib/fog/vsphere/requests/compute/list_folders.rb +4 -4
- data/lib/fog/vsphere/requests/compute/list_groups.rb +5 -5
- data/lib/fog/vsphere/requests/compute/list_hosts.rb +30 -14
- data/lib/fog/vsphere/requests/compute/list_interface_types.rb +7 -7
- data/lib/fog/vsphere/requests/compute/list_networks.rb +12 -16
- data/lib/fog/vsphere/requests/compute/list_processes.rb +14 -14
- data/lib/fog/vsphere/requests/compute/list_resource_pools.rb +13 -14
- data/lib/fog/vsphere/requests/compute/list_rules.rb +4 -4
- data/lib/fog/vsphere/requests/compute/list_server_types.rb +24 -26
- data/lib/fog/vsphere/requests/compute/list_storage_pods.rb +8 -8
- data/lib/fog/vsphere/requests/compute/list_templates.rb +4 -5
- data/lib/fog/vsphere/requests/compute/list_virtual_machines.rb +15 -15
- data/lib/fog/vsphere/requests/compute/list_vm_cdroms.rb +16 -12
- data/lib/fog/vsphere/requests/compute/list_vm_customvalues.rb +3 -4
- data/lib/fog/vsphere/requests/compute/list_vm_interfaces.rb +54 -56
- data/lib/fog/vsphere/requests/compute/list_vm_scsi_controllers.rb +7 -7
- data/lib/fog/vsphere/requests/compute/list_vm_snapshots.rb +36 -36
- data/lib/fog/vsphere/requests/compute/list_vm_volumes.rb +43 -36
- data/lib/fog/vsphere/requests/compute/modify_vm_cdrom.rb +4 -4
- data/lib/fog/vsphere/requests/compute/modify_vm_controller.rb +2 -2
- data/lib/fog/vsphere/requests/compute/modify_vm_interface.rb +26 -19
- data/lib/fog/vsphere/requests/compute/modify_vm_volume.rb +7 -7
- data/lib/fog/vsphere/requests/compute/revert_to_snapshot.rb +2 -2
- data/lib/fog/vsphere/requests/compute/set_vm_customvalue.rb +2 -2
- data/lib/fog/vsphere/requests/compute/update_vm.rb +111 -0
- data/lib/fog/vsphere/requests/compute/upload_iso.rb +10 -10
- data/lib/fog/vsphere/requests/compute/vm_acquire_ticket.rb +3 -3
- data/lib/fog/vsphere/requests/compute/vm_clone.rb +245 -247
- data/lib/fog/vsphere/requests/compute/vm_config_vnc.rb +15 -15
- data/lib/fog/vsphere/requests/compute/vm_destroy.rb +2 -2
- data/lib/fog/vsphere/requests/compute/vm_execute.rb +16 -16
- data/lib/fog/vsphere/requests/compute/vm_migrate.rb +11 -11
- data/lib/fog/vsphere/requests/compute/vm_power_off.rb +8 -8
- data/lib/fog/vsphere/requests/compute/vm_power_on.rb +2 -2
- data/lib/fog/vsphere/requests/compute/vm_reboot.rb +5 -5
- data/lib/fog/vsphere/requests/compute/vm_reconfig_cdrom.rb +11 -11
- data/lib/fog/vsphere/requests/compute/vm_reconfig_cpus.rb +8 -8
- data/lib/fog/vsphere/requests/compute/vm_reconfig_hardware.rb +6 -6
- data/lib/fog/vsphere/requests/compute/vm_reconfig_memory.rb +8 -8
- data/lib/fog/vsphere/requests/compute/vm_reconfig_volumes.rb +14 -16
- data/lib/fog/vsphere/requests/compute/vm_relocate.rb +8 -8
- data/lib/fog/vsphere/requests/compute/vm_remove_snapshot.rb +2 -2
- data/lib/fog/vsphere/requests/compute/vm_rename.rb +5 -5
- data/lib/fog/vsphere/requests/compute/vm_revert_snapshot.rb +1 -1
- data/lib/fog/vsphere/requests/compute/vm_take_snapshot.rb +8 -8
- data/lib/fog/vsphere/version.rb +1 -1
- data/tests/compute_tests.rb +16 -17
- data/tests/helpers/mock_helper.rb +3 -3
- data/tests/models/compute/cluster_tests.rb +4 -5
- data/tests/models/compute/hosts_tests.rb +2 -4
- data/tests/models/compute/rules_tests.rb +10 -16
- data/tests/models/compute/server_tests.rb +30 -31
- data/tests/models/compute/servers_tests.rb +2 -4
- data/tests/models/compute/ticket_tests.rb +4 -6
- data/tests/models/compute/tickets_tests.rb +1 -3
- data/tests/requests/compute/current_time_tests.rb +2 -4
- data/tests/requests/compute/folder_destroy_tests.rb +5 -7
- data/tests/requests/compute/get_network_tests.rb +20 -23
- data/tests/requests/compute/list_child_snapshots_tests.rb +1 -2
- data/tests/requests/compute/list_clusters_tests.rb +5 -6
- data/tests/requests/compute/list_datastores_tests.rb +6 -7
- data/tests/requests/compute/list_hosts_tests.rb +3 -4
- data/tests/requests/compute/list_networks_tests.rb +6 -7
- data/tests/requests/compute/list_storage_pods_test.rb +3 -4
- data/tests/requests/compute/list_virtual_machines_tests.rb +16 -20
- data/tests/requests/compute/list_vm_cdroms_tests.rb +1 -2
- data/tests/requests/compute/list_vm_snapshots_tests.rb +1 -2
- data/tests/requests/compute/modify_vm_cdrom_tests.rb +3 -4
- data/tests/requests/compute/revert_to_snapshot_tests.rb +2 -4
- data/tests/requests/compute/set_vm_customvalue_tests.rb +0 -2
- data/tests/requests/compute/update_vm_tests.rb +13 -0
- data/tests/requests/compute/vm_clone_tests.rb +20 -20
- data/tests/requests/compute/vm_config_vnc_tests.rb +3 -4
- data/tests/requests/compute/vm_destroy_tests.rb +1 -4
- data/tests/requests/compute/vm_migrate_tests.rb +1 -2
- data/tests/requests/compute/vm_power_off_tests.rb +2 -4
- data/tests/requests/compute/vm_power_on_tests.rb +1 -3
- data/tests/requests/compute/vm_reboot_tests.rb +2 -4
- data/tests/requests/compute/vm_reconfig_cdrom_tests.rb +2 -3
- data/tests/requests/compute/vm_reconfig_cpus_tests.rb +1 -3
- data/tests/requests/compute/vm_reconfig_hardware_tests.rb +2 -4
- data/tests/requests/compute/vm_reconfig_memory_tests.rb +1 -3
- data/tests/requests/compute/vm_take_snapshot_tests.rb +1 -3
- metadata +9 -4
@@ -14,14 +14,14 @@ module Fog
|
|
14
14
|
|
15
15
|
# 'folder' => '/Datacenters/vm/Jeff/Templates' will be MUCH faster.
|
16
16
|
# than simply listing everything.
|
17
|
-
def all(filters = {
|
17
|
+
def all(filters = {})
|
18
18
|
f = {
|
19
|
-
:
|
20
|
-
:
|
21
|
-
:
|
22
|
-
:
|
23
|
-
:
|
24
|
-
:
|
19
|
+
datacenter: datacenter,
|
20
|
+
cluster: cluster,
|
21
|
+
network: network,
|
22
|
+
resource_pool: resource_pool,
|
23
|
+
folder: folder,
|
24
|
+
recursive: recursive
|
25
25
|
}.merge(filters)
|
26
26
|
|
27
27
|
load service.list_virtual_machines(f)
|
@@ -32,17 +32,16 @@ module Fog
|
|
32
32
|
rescue Fog::Compute::Vsphere::NotFound
|
33
33
|
nil
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
# Pass attributes we know about down to any VM we're creating
|
37
37
|
def new(attributes = {})
|
38
38
|
super({
|
39
|
-
:
|
40
|
-
:
|
41
|
-
:
|
42
|
-
:
|
39
|
+
datacenter: datacenter,
|
40
|
+
path: folder,
|
41
|
+
cluster: cluster,
|
42
|
+
resource_pool: resource_pool
|
43
43
|
}.merge(attributes))
|
44
44
|
end
|
45
|
-
|
46
45
|
end
|
47
46
|
end
|
48
47
|
end
|
@@ -9,7 +9,7 @@ module Fog
|
|
9
9
|
attribute :datacenter
|
10
10
|
attribute :interfacetypes
|
11
11
|
|
12
|
-
def initialize(attributes={}
|
12
|
+
def initialize(attributes = {})
|
13
13
|
super defaults.merge(attributes)
|
14
14
|
end
|
15
15
|
|
@@ -17,17 +17,17 @@ module Fog
|
|
17
17
|
id
|
18
18
|
end
|
19
19
|
|
20
|
-
def interfacetypes
|
21
|
-
attributes[:interfacetypes] ||= service.interfacetypes({ :
|
20
|
+
def interfacetypes(filters = {})
|
21
|
+
attributes[:interfacetypes] ||= service.interfacetypes({ datacenter: datacenter, servertype: self }.merge(filters))
|
22
22
|
end
|
23
23
|
|
24
24
|
private
|
25
25
|
|
26
26
|
def defaults
|
27
27
|
{
|
28
|
-
:
|
29
|
-
:
|
30
|
-
:
|
28
|
+
id: 'otherGuest64',
|
29
|
+
family: 'otherGuestFamily',
|
30
|
+
interfacetypes: nil
|
31
31
|
}
|
32
32
|
end
|
33
33
|
end
|
@@ -7,8 +7,8 @@ module Fog
|
|
7
7
|
model Fog::Compute::Vsphere::Servertype
|
8
8
|
attr_accessor :datacenter, :id, :fullname
|
9
9
|
|
10
|
-
def all(filters = {
|
11
|
-
load service.list_server_types(filters.merge(
|
10
|
+
def all(filters = {})
|
11
|
+
load service.list_server_types(filters.merge(datacenter: datacenter))
|
12
12
|
end
|
13
13
|
|
14
14
|
def get(id)
|
@@ -4,15 +4,14 @@ module Fog
|
|
4
4
|
module Compute
|
5
5
|
class Vsphere
|
6
6
|
class Snapshot < Fog::Model
|
7
|
-
|
8
7
|
identity :ref
|
9
8
|
attribute :server_id
|
10
9
|
|
11
10
|
attribute :name
|
12
|
-
attribute :quiescedi, :
|
13
|
-
attribute :description, :
|
11
|
+
attribute :quiescedi, default: false
|
12
|
+
attribute :description, default: ''
|
14
13
|
attribute :create_time
|
15
|
-
attribute :power_state, :
|
14
|
+
attribute :power_state, default: 'none'
|
16
15
|
attribute :ref
|
17
16
|
attribute :mo_ref
|
18
17
|
attribute :tree_node
|
@@ -21,13 +20,13 @@ module Fog
|
|
21
20
|
|
22
21
|
def child_snapshots(filters = {})
|
23
22
|
service.snapshots(
|
24
|
-
{ :
|
23
|
+
{ server_id: server_id, parent_snapshot: self }.update(filters)
|
25
24
|
)
|
26
25
|
end
|
27
26
|
|
28
27
|
def get_child(snapshot_ref)
|
29
28
|
return self if ref == snapshot_ref
|
30
|
-
child_snapshots
|
29
|
+
child_snapshots.get(snapshot_ref)
|
31
30
|
end
|
32
31
|
|
33
32
|
def revert
|
@@ -2,7 +2,7 @@ module Fog
|
|
2
2
|
module Compute
|
3
3
|
class Vsphere
|
4
4
|
class Volume < Fog::Model
|
5
|
-
DISK_SIZE_TO_GB =
|
5
|
+
DISK_SIZE_TO_GB = 1_048_576
|
6
6
|
identity :id
|
7
7
|
|
8
8
|
has_one :server, Server
|
@@ -17,9 +17,9 @@ module Fog
|
|
17
17
|
attribute :size_gb
|
18
18
|
attribute :key
|
19
19
|
attribute :unit_number
|
20
|
-
attribute :controller_key, :
|
20
|
+
attribute :controller_key, type: :integer
|
21
21
|
|
22
|
-
def initialize(attributes={})
|
22
|
+
def initialize(attributes = {})
|
23
23
|
super defaults.merge(attributes)
|
24
24
|
end
|
25
25
|
|
@@ -27,7 +27,7 @@ module Fog
|
|
27
27
|
attributes[:size_gb] ||= attributes[:size].to_i / DISK_SIZE_TO_GB if attributes[:size]
|
28
28
|
end
|
29
29
|
|
30
|
-
def size_gb=
|
30
|
+
def size_gb=(s)
|
31
31
|
attributes[:size] = s.to_i * DISK_SIZE_TO_GB if s
|
32
32
|
attributes[:size_gb] = s.to_i if s
|
33
33
|
end
|
@@ -52,7 +52,7 @@ module Fog
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def save
|
55
|
-
raise Fog::Errors::Error
|
55
|
+
raise Fog::Errors::Error, 'Resaving an existing object may create a duplicate' if persisted?
|
56
56
|
requires :server_id, :size, :datastore
|
57
57
|
|
58
58
|
set_unit_number
|
@@ -60,9 +60,7 @@ module Fog
|
|
60
60
|
data = service.add_vm_volume(self)
|
61
61
|
|
62
62
|
if data['task_state'] == 'success'
|
63
|
-
|
64
|
-
self.unit_number += 1
|
65
|
-
end
|
63
|
+
self.unit_number += 1 if unit_number >= 7
|
66
64
|
|
67
65
|
# We have to query vSphere to get the volume attributes since the task handle doesn't include that info.
|
68
66
|
created = server.volumes.all.find { |volume| volume.unit_number == self.unit_number }
|
@@ -106,7 +104,7 @@ module Fog
|
|
106
104
|
if unit_number.nil?
|
107
105
|
self.unit_number = calculate_free_unit_number
|
108
106
|
else
|
109
|
-
if server.volumes.select { |vol| vol.controller_key == controller_key }.any? { |volume| volume.unit_number == self.unit_number && volume.id !=
|
107
|
+
if server.volumes.select { |vol| vol.controller_key == controller_key }.any? { |volume| volume.unit_number == self.unit_number && volume.id != id }
|
110
108
|
raise "A volume already exists with that unit_number, so we can't save the new volume"
|
111
109
|
end
|
112
110
|
end
|
@@ -127,10 +125,10 @@ module Fog
|
|
127
125
|
|
128
126
|
def defaults
|
129
127
|
{
|
130
|
-
:
|
131
|
-
:
|
132
|
-
:
|
133
|
-
:
|
128
|
+
thin: true,
|
129
|
+
name: 'Hard disk',
|
130
|
+
mode: 'persistent',
|
131
|
+
controller_key: 1000
|
134
132
|
}
|
135
133
|
end
|
136
134
|
|
@@ -139,7 +137,7 @@ module Fog
|
|
139
137
|
|
140
138
|
# Vsphere maps unit_numbers 7 and greater to a higher SCSI ID since the pvscsi driver reserves SCSI ID 7
|
141
139
|
used_unit_numbers = server.volumes
|
142
|
-
|
140
|
+
.select { |vol| vol.unit_number && vol.controller_key == controller_key }.map(&:unit_number) + [7]
|
143
141
|
free_unit_numbers = (0..15).to_a - used_unit_numbers
|
144
142
|
|
145
143
|
free_unit_numbers.first
|
@@ -8,19 +8,19 @@ module Fog
|
|
8
8
|
|
9
9
|
model Fog::Compute::Vsphere::Volume
|
10
10
|
|
11
|
-
def all(
|
11
|
+
def all(_filters = {})
|
12
12
|
requires :server_id
|
13
13
|
|
14
14
|
case server
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
15
|
+
when Fog::Compute::Vsphere::Server
|
16
|
+
load service.list_vm_volumes(server.id)
|
17
|
+
when Fog::Compute::Vsphere::Template
|
18
|
+
load service.list_template_volumes(server.id)
|
19
|
+
else
|
20
|
+
raise 'volumes should have vm or template'
|
21
21
|
end
|
22
22
|
|
23
|
-
|
23
|
+
each { |volume| volume.server = server }
|
24
24
|
self
|
25
25
|
end
|
26
26
|
|
@@ -31,9 +31,9 @@ module Fog
|
|
31
31
|
def new(attributes = {})
|
32
32
|
if server_id
|
33
33
|
# Default to the root volume datastore if one is not configured.
|
34
|
-
datastore = !
|
34
|
+
datastore = !attributes.key?(:datastore) && any? ? first.datastore : nil
|
35
35
|
|
36
|
-
super({ :
|
36
|
+
super({ server_id: server_id, datastore: datastore }.merge!(attributes))
|
37
37
|
else
|
38
38
|
super
|
39
39
|
end
|
@@ -4,8 +4,8 @@ module Fog
|
|
4
4
|
class Real
|
5
5
|
def cloudinit_to_customspec(user_data)
|
6
6
|
raise ArgumentError, "user_data can't be nil" if user_data.nil?
|
7
|
-
custom_spec = { 'customization_spec' =>
|
8
|
-
user_data = YAML.
|
7
|
+
custom_spec = { 'customization_spec' => {} }
|
8
|
+
user_data = YAML.safe_load(user_data)
|
9
9
|
# https://pubs.vmware.com/vsphere-55/index.jsp#com.vmware.wssdk.apiref.doc/vim.vm.customization.Specification.html
|
10
10
|
# encryptionKey expects an array
|
11
11
|
# globalIPSettings expects a hash, REQUIRED
|
@@ -16,10 +16,10 @@ module Fog
|
|
16
16
|
custom_spec['encryptionKey'] = user_data['encryptionKey'] if user_data.key?('encryptionKey')
|
17
17
|
custom_spec['globalIPSettings'] = user_data['globalIPSettings'] if user_data.key?('globalIPSettings')
|
18
18
|
custom_spec['identity'] = user_data['identity'] if user_data.key?('identity')
|
19
|
-
custom_spec['identity'] = {
|
19
|
+
custom_spec['identity'] = { 'Sysprep' => { 'guiRunOnce' => { 'commandList' => user_data['runcmd'] } } } if user_data.key?('runcmd') && !user_data.key?('identity')
|
20
20
|
custom_spec['nicSettingMap'] = user_data['nicSettingMap'] if user_data.key?('nicSettingMap')
|
21
21
|
custom_spec['options'] = user_data['options'] if user_data.key?('options')
|
22
|
-
|
22
|
+
|
23
23
|
# for backwards compatability
|
24
24
|
# hostname expects a string, REQUIRED
|
25
25
|
# netmask expects a string
|
@@ -36,15 +36,15 @@ module Fog
|
|
36
36
|
custom_spec['domain'] = user_data['domain'] if user_data.key?('domain')
|
37
37
|
custom_spec['dnsSuffixList'] = user_data['domainsuffixlist'] if user_data.key?('domainsuffixlist')
|
38
38
|
custom_spec['time_zone'] = user_data['timezone'] if user_data.key?('timezone')
|
39
|
-
custom_spec
|
39
|
+
custom_spec
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
43
|
class Mock
|
44
44
|
def cloudinit_to_customspec(user_data)
|
45
45
|
raise ArgumentError, "user_data can't be nil" if user_data.nil?
|
46
|
-
custom_spec = { 'customization_spec' =>
|
47
|
-
user_data = YAML.
|
46
|
+
custom_spec = { 'customization_spec' => {} }
|
47
|
+
user_data = YAML.safe_load(user_data)
|
48
48
|
custom_spec['encryptionKey'] = user_data['encryptionKey'] if user_data.key?('encryptionKey')
|
49
49
|
custom_spec['globalIPSettings'] = user_data['globalIPSettings'] if user_data.key?('globalIPSettings')
|
50
50
|
custom_spec['identity'] = user_data['identity'] if user_data.key?('identity')
|
@@ -58,7 +58,7 @@ module Fog
|
|
58
58
|
custom_spec['domain'] = user_data['domain'] if user_data.key?('domain')
|
59
59
|
custom_spec['dnsSuffixList'] = user_data['domainsuffixlist'] if user_data.key?('domainsuffixlist')
|
60
60
|
custom_spec['time_zone'] = user_data['timezone'] if user_data.key?('timezone')
|
61
|
-
custom_spec
|
61
|
+
custom_spec
|
62
62
|
end
|
63
63
|
end
|
64
64
|
end
|
@@ -3,21 +3,21 @@ module Fog
|
|
3
3
|
class Vsphere
|
4
4
|
class Real
|
5
5
|
def create_folder(datacenter, path, name)
|
6
|
-
#Path cannot be nil but it can be an empty string
|
7
|
-
raise ArgumentError,
|
6
|
+
# Path cannot be nil but it can be an empty string
|
7
|
+
raise ArgumentError, 'Path cannot be nil' if path.nil?
|
8
8
|
|
9
9
|
parent_folder = get_raw_vmfolder(path, datacenter)
|
10
10
|
begin
|
11
|
-
new_folder = parent_folder.CreateFolder(:
|
11
|
+
new_folder = parent_folder.CreateFolder(name: name)
|
12
12
|
# output is cleaned up to return the new path
|
13
13
|
# new path will be path/name, example: "Production/Pool1"
|
14
|
-
new_folder.path.reject { |a| a.first.class ==
|
14
|
+
new_folder.path.reject { |a| a.first.class == 'Folder' }.map { |a| a.first.name }.join('/').sub(/^\/?Datacenters\/#{datacenter}\/vm\/?/, '')
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
18
18
|
class Mock
|
19
19
|
def create_folder(datacenter, path, name)
|
20
|
-
|
20
|
+
data[:folders][name] = {
|
21
21
|
'name' => name,
|
22
22
|
'datacenter' => datacenter,
|
23
23
|
'path' => "#{path}/#{name}",
|
@@ -2,21 +2,21 @@ module Fog
|
|
2
2
|
module Compute
|
3
3
|
class Vsphere
|
4
4
|
class Real
|
5
|
-
def create_group(attributes={})
|
5
|
+
def create_group(attributes = {})
|
6
6
|
cluster = get_raw_cluster(attributes[:cluster], attributes[:datacenter])
|
7
|
-
group = cluster.configurationEx.group.find {|n| n[:name] == attributes[:name]}
|
7
|
+
group = cluster.configurationEx.group.find { |n| n[:name] == attributes[:name] }
|
8
8
|
if group
|
9
9
|
raise ArgumentError, "Group #{attributes[:name]} already exists!"
|
10
10
|
end
|
11
11
|
spec = get_group_spec attributes
|
12
12
|
cluster_spec = RbVmomi::VIM.ClusterConfigSpecEx(groupSpec: [
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
13
|
+
RbVmomi::VIM.ClusterGroupSpec(
|
14
|
+
operation: RbVmomi::VIM.ArrayUpdateOperation('add'),
|
15
|
+
info: spec
|
16
|
+
)
|
17
|
+
])
|
18
18
|
cluster.ReconfigureComputeResource_Task(spec: cluster_spec, modify: true).wait_for_completion
|
19
|
-
group = cluster.configurationEx.group.find {|n| n[:name] == attributes[:name]}
|
19
|
+
group = cluster.configurationEx.group.find { |n| n[:name] == attributes[:name] }
|
20
20
|
if group
|
21
21
|
return group[:name]
|
22
22
|
else
|
@@ -26,25 +26,25 @@ module Fog
|
|
26
26
|
|
27
27
|
private
|
28
28
|
|
29
|
-
def get_group_spec(attributes={})
|
29
|
+
def get_group_spec(attributes = {})
|
30
30
|
if attributes[:type].to_s == 'ClusterVmGroup'
|
31
|
-
vms = attributes[:vm_ids].to_a.map {|id| get_vm_ref(id, attributes[:datacenter])}
|
31
|
+
vms = attributes[:vm_ids].to_a.map { |id| get_vm_ref(id, attributes[:datacenter]) }
|
32
32
|
attributes[:type].new(
|
33
|
-
|
34
|
-
|
33
|
+
name: attributes[:name],
|
34
|
+
vm: vms
|
35
35
|
)
|
36
36
|
elsif attributes[:type].to_s == 'ClusterHostGroup'
|
37
37
|
attributes[:type].new(
|
38
|
-
|
39
|
-
|
38
|
+
name: attributes[:name],
|
39
|
+
host: attributes[:host_refs]
|
40
40
|
)
|
41
41
|
end
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
45
|
class Mock
|
46
|
-
def create_group(attributes={})
|
47
|
-
|
46
|
+
def create_group(attributes = {})
|
47
|
+
data[:groups][attributes[:name]] = attributes
|
48
48
|
end
|
49
49
|
end
|
50
50
|
end
|
@@ -2,22 +2,22 @@ module Fog
|
|
2
2
|
module Compute
|
3
3
|
class Vsphere
|
4
4
|
class Real
|
5
|
-
def create_rule(attributes={})
|
5
|
+
def create_rule(attributes = {})
|
6
6
|
cluster = get_raw_cluster(attributes[:cluster], attributes[:datacenter])
|
7
|
-
rule = cluster.configurationEx.rule.find {|n| n[:name] == attributes[:name]}
|
7
|
+
rule = cluster.configurationEx.rule.find { |n| n[:name] == attributes[:name] }
|
8
8
|
if rule
|
9
9
|
raise ArgumentError, "Rule #{attributes[:name]} already exists!"
|
10
10
|
end
|
11
11
|
spec = get_rule_spec attributes
|
12
12
|
# Now, attach it to the cluster
|
13
13
|
cluster_spec = RbVmomi::VIM.ClusterConfigSpecEx(rulesSpec: [
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
14
|
+
RbVmomi::VIM.ClusterRuleSpec(
|
15
|
+
operation: RbVmomi::VIM.ArrayUpdateOperation('add'),
|
16
|
+
info: spec
|
17
|
+
)
|
18
|
+
])
|
19
19
|
ret = cluster.ReconfigureComputeResource_Task(spec: cluster_spec, modify: true).wait_for_completion
|
20
|
-
rule = cluster.configurationEx.rule.find {|n| n[:name] == attributes[:name]}
|
20
|
+
rule = cluster.configurationEx.rule.find { |n| n[:name] == attributes[:name] }
|
21
21
|
if rule
|
22
22
|
return rule[:key]
|
23
23
|
else
|
@@ -27,9 +27,9 @@ module Fog
|
|
27
27
|
|
28
28
|
private
|
29
29
|
|
30
|
-
def get_rule_spec(attributes={})
|
31
|
-
if
|
32
|
-
vms = attributes[:vm_ids].to_a.map {|id| get_vm_ref(id, attributes[:datacenter])}
|
30
|
+
def get_rule_spec(attributes = {})
|
31
|
+
if attributes[:type].to_s == 'ClusterAntiAffinityRuleSpec' || attributes[:type].to_s == 'ClusterAffinityRuleSpec'
|
32
|
+
vms = attributes[:vm_ids].to_a.map { |id| get_vm_ref(id, attributes[:datacenter]) }
|
33
33
|
attributes[:type].new(
|
34
34
|
name: attributes[:name],
|
35
35
|
enabled: attributes[:enabled],
|
@@ -48,9 +48,9 @@ module Fog
|
|
48
48
|
end
|
49
49
|
|
50
50
|
class Mock
|
51
|
-
def create_rule(attributes={})
|
51
|
+
def create_rule(attributes = {})
|
52
52
|
attributes[:key] = rand(9999)
|
53
|
-
|
53
|
+
data[:rules][attributes[:name]] = attributes
|
54
54
|
attributes[:key]
|
55
55
|
end
|
56
56
|
end
|