Skip to content

Commit d573031

Browse files
committed
vmware: Encrypt vmotion if flavor requires it, or don't
Vmotions should be encrypted, but not for really large RAM sizes because encryption impacts vmotion performance too much. So let the flavor define one of "required", "disabled" or "opportunistic". If not set, null/None defaults to "opportunistic". Change-Id: Iba0fd2f2edc8fae210f6c4bab0218703e87ecfbc
1 parent fd10af1 commit d573031

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed

nova/tests/unit/virt/vmwareapi/test_vm_util.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -883,6 +883,7 @@ def _create_vm_config_spec(self):
883883
spec.name = self._instance.uuid
884884
spec.instanceUuid = self._instance.uuid
885885
spec.deviceChange = []
886+
spec.migrateEncryption = None
886887
spec.numCPUs = 2
887888

888889
spec.version = None
@@ -963,6 +964,7 @@ def test_get_vm_create_spec_with_allocations(self):
963964
extra_specs)
964965
expected = fake_factory.create('ns0:VirtualMachineConfigSpec')
965966
expected.deviceChange = []
967+
expected.migrateEncryption = None
966968
expected.guestId = constants.DEFAULT_OS_TYPE
967969
expected.instanceUuid = self._instance.uuid
968970
expected.memoryMB = self._instance.memory_mb
@@ -1018,6 +1020,7 @@ def test_get_vm_create_spec_with_limit(self):
10181020
expected.instanceUuid = self._instance.uuid
10191021
expected.name = self._instance.uuid
10201022
expected.deviceChange = []
1023+
expected.migrateEncryption = None
10211024
expected.extraConfig = []
10221025

10231026
extra_config = fake_factory.create("ns0:OptionValue")
@@ -1072,6 +1075,7 @@ def test_get_vm_create_spec_with_share(self):
10721075
expected.instanceUuid = self._instance.uuid
10731076
expected.name = self._instance.uuid
10741077
expected.deviceChange = []
1078+
expected.migrateEncryption = None
10751079

10761080
expected.extraConfig = []
10771081
extra_config = fake_factory.create('ns0:OptionValue')
@@ -1125,6 +1129,7 @@ def test_get_vm_create_spec_with_share_custom(self):
11251129
expected.instanceUuid = self._instance.uuid
11261130
expected.name = self._instance.uuid
11271131
expected.deviceChange = []
1132+
expected.migrateEncryption = None
11281133

11291134
expected.extraConfig = []
11301135
extra_config = fake_factory.create('ns0:OptionValue')
@@ -1173,6 +1178,7 @@ def test_get_vm_create_spec_with_metadata(self):
11731178
expected.name = self._instance.uuid
11741179
expected.instanceUuid = self._instance.uuid
11751180
expected.deviceChange = []
1181+
expected.migrateEncryption = None
11761182
expected.numCPUs = 2
11771183

11781184
expected.version = None
@@ -1216,6 +1222,7 @@ def test_get_vm_create_spec_with_firmware(self):
12161222
expected.name = self._instance.uuid
12171223
expected.instanceUuid = self._instance.uuid
12181224
expected.deviceChange = []
1225+
expected.migrateEncryption = None
12191226
expected.numCPUs = 2
12201227

12211228
expected.version = None
@@ -2058,6 +2065,7 @@ def test_get_vm_create_spec_with_console_delay(self):
20582065
expected.name = self._instance.uuid
20592066
expected.instanceUuid = self._instance.uuid
20602067
expected.deviceChange = []
2068+
expected.migrateEncryption = None
20612069
expected.numCPUs = 2
20622070

20632071
expected.version = None
@@ -2102,6 +2110,7 @@ def test_get_vm_create_spec_with_cores_per_socket(self):
21022110
extra_specs)
21032111
expected = fake_factory.create('ns0:VirtualMachineConfigSpec')
21042112
expected.deviceChange = []
2113+
expected.migrateEncryption = None
21052114
expected.guestId = 'otherGuest'
21062115
expected.instanceUuid = self._instance.uuid
21072116
expected.memoryMB = self._instance.memory_mb
@@ -2147,6 +2156,7 @@ def test_get_vm_create_spec_with_memory_allocations(self):
21472156
extra_specs)
21482157
expected = fake_factory.create('ns0:VirtualMachineConfigSpec')
21492158
expected.deviceChange = []
2159+
expected.migrateEncryption = None
21502160
expected.guestId = 'otherGuest'
21512161
expected.instanceUuid = self._instance.uuid
21522162
expected.memoryMB = self._instance.memory_mb

nova/virt/vmwareapi/vm_util.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ def __init__(self, cpu_limits=None, hw_version=None,
114114
vif_limits=None, hv_enabled=None, firmware=None,
115115
hw_video_ram=None, numa_prefer_ht=None,
116116
numa_vcpu_max_per_virtual_node=None,
117-
migration_data_timeout=None):
117+
migration_data_timeout=None, vmotion_encryption=None):
118118
"""ExtraSpecs object holds extra_specs for the instance."""
119119
self.cpu_limits = cpu_limits or Limits()
120120
self.memory_limits = memory_limits or Limits()
@@ -129,6 +129,7 @@ def __init__(self, cpu_limits=None, hw_version=None,
129129
self.numa_prefer_ht = numa_prefer_ht
130130
self.numa_vcpu_max_per_virtual_node = numa_vcpu_max_per_virtual_node
131131
self.migration_data_timeout = migration_data_timeout
132+
self.vmotion_encryption = vmotion_encryption
132133

133134

134135
class HistoryCollectorItems(six.Iterator):
@@ -419,6 +420,8 @@ def get_vm_create_spec(client_factory, instance, data_store_name,
419420

420421
config_spec.deviceChange = devices
421422

423+
config_spec.migrateEncryption = extra_specs.vmotion_encryption
424+
422425
# add vm-uuid and iface-id.x values for Neutron
423426
extra_config = []
424427
opt = client_factory.create('ns0:OptionValue')
@@ -612,6 +615,8 @@ def get_vm_resize_spec(client_factory, vcpus, memory_mb, extra_specs,
612615

613616
resize_spec.extraConfig = extra_config
614617

618+
resize_spec.migrateEncryption = extra_specs.vmotion_encryption
619+
615620
if metadata:
616621
resize_spec.annotation = metadata
617622
return resize_spec

nova/virt/vmwareapi/vmops.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -476,6 +476,12 @@ def _get_extra_specs(self, flavor, image_meta=None):
476476
str(extra_specs.cores_per_socket)
477477
if utils.is_numa_aligned_flavor(flavor)
478478
else '')
479+
480+
vmotion_encryption = flavor.extra_specs.get(
481+
"vmware:vmotion_encryption", "opportunistic")
482+
if vmotion_encryption in ["disabled", "opportunistic", "required"]:
483+
extra_specs.vmotion_encryption = vmotion_encryption
484+
479485
return extra_specs
480486

481487
def _get_storage_policy(self, flavor):

0 commit comments

Comments
 (0)