Skip to content

Commit

Permalink
replace the "hide_hypervisor_id" to "hw:hide_hypervisor_id"
Browse files Browse the repository at this point in the history
When we use the flavor extra_specs "hide_hypervisor_id" in
AggregateInstanceExtraSpecsFilter, then will retrun False.
So we need correct the extra_specs.

Change-Id: I9d8d8c3a30cf6da7e8fb48374347e069ab075df2
Closes-Bug: 1841932
  • Loading branch information
ramboman authored and stephenfin committed May 8, 2020
1 parent 8a2ed8a commit bf488a8
Show file tree
Hide file tree
Showing 7 changed files with 59 additions and 11 deletions.
6 changes: 5 additions & 1 deletion doc/source/user/flavors.rst
Original file line number Diff line number Diff line change
Expand Up @@ -738,10 +738,14 @@ Hiding hypervisor signature
As of the 18.0.0 Rocky release, this is only supported by the libvirt
driver.

Prior to the 21.0.0 Ussuri release, this was called
``hide_hypervisor_id``. An alias is provided to provide backwards
compatibility.

.. code:: console
$ openstack flavor set FLAVOR-NAME \
--property hide_hypervisor_id=VALUE
--property hw:hide_hypervisor_id=VALUE
Where:

Expand Down
15 changes: 15 additions & 0 deletions nova/api/validation/extra_specs/hw.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,20 @@
),
]

hide_hypervisor_id_validator = [
base.ExtraSpecValidator(
name='hw:hide_hypervisor_id',
description=(
'Determine whether the hypervisor ID should be hidden from the '
'guest. Only supported by the libvirt driver.'
),
value={
'type': bool,
'description': 'Whether to hide the hypervisor ID.',
},
)
]

cpu_policy_validators = [
base.ExtraSpecValidator(
name='hw:cpu_policy',
Expand Down Expand Up @@ -362,6 +376,7 @@
def register():
return (
realtime_validators +
hide_hypervisor_id_validator +
cpu_policy_validators +
hugepage_validators +
numa_validators +
Expand Down
8 changes: 6 additions & 2 deletions nova/api/validation/extra_specs/null.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,23 @@
from nova.api.validation.extra_specs import base


# TODO(stephenfin): These should be moved to a namespace
EXTRA_SPEC_VALIDATORS = [
base.ExtraSpecValidator(
name='hide_hypervisor_id',
description=(
'Determine whether the hypervisor ID should be hidden from the '
'guest. Only supported by the libvirt driver.'
'guest. Only supported by the libvirt driver. This extra spec is '
'not compatible with the AggregateInstanceExtraSpecsFilter '
'scheduler filter. The ``hw:hide_hypervisor_id`` extra spec '
'should be used instead.'
),
value={
'type': bool,
'description': 'Whether to hide the hypervisor ID.',
},
deprecated=True,
),
# TODO(stephenfin): This should be moved to a namespace
base.ExtraSpecValidator(
name='group_policy',
description=(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,7 @@ def test_create_invalid_unknown_namespace(self):
def test_create_valid_specs(self, mock_flavor_extra_specs):
valid_specs = {
'hide_hypervisor_id': 'true',
'hw:hide_hypervisor_id': 'true',
'hw:numa_nodes': '1',
'hw:numa_cpus.0': '0-3,8-9,11,10',
'resources:VCPU': '4',
Expand Down
27 changes: 20 additions & 7 deletions nova/tests/unit/virt/libvirt/test_driver.py
Original file line number Diff line number Diff line change
Expand Up @@ -4489,6 +4489,19 @@ def test_get_guest_config_windows_hyperv_feature2(self):
self._test_get_guest_config_windows_hyperv()

def test_get_guest_config_windows_hyperv_all_hide_flv(self):
# Similar to test_get_guest_config_windows_hyperv_feature2
# but also test hiding the HyperV signature with the flavor
# extra_spec "hw:hide_hypervisor_id"
flavor_hide_id = fake_flavor.fake_flavor_obj(self.context,
extra_specs={"hw:hide_hypervisor_id": "true"},
expected_attrs={"extra_specs"})
# this works for kvm (the default, tested below) and qemu
self.flags(virt_type='qemu', group='libvirt')

self._test_get_guest_config_windows_hyperv(
flavor=flavor_hide_id, hvid_hidden=True)

def test_get_guest_config_windows_hyperv_all_hide_flv_old(self):
# Similar to test_get_guest_config_windows_hyperv_feature2
# but also test hiding the HyperV signature with the flavor
# extra_spec "hide_hypervisor_id"
Expand All @@ -4515,10 +4528,10 @@ def test_get_guest_config_windows_hyperv_all_hide_img(self):
def test_get_guest_config_windows_hyperv_all_hide_flv_img(self):
# Similar to test_get_guest_config_windows_hyperv_feature2
# but also test hiding the HyperV signature with both the flavor
# extra_spec "hide_hypervisor_id" and the image property
# extra_spec "hw:hide_hypervisor_id" and the image property
# "img_hide_hypervisor_id"
flavor_hide_id = fake_flavor.fake_flavor_obj(self.context,
extra_specs={"hide_hypervisor_id": "true"},
extra_specs={"hw:hide_hypervisor_id": "true"},
expected_attrs={"extra_specs"})
self.flags(virt_type='qemu', group='libvirt')

Expand Down Expand Up @@ -6591,7 +6604,7 @@ def test_get_guest_config_with_hiding_hypervisor_id_flavor_extra_specs(
self):
# Input to the test: flavor extra_specs
flavor_hide_id = fake_flavor.fake_flavor_obj(self.context,
extra_specs={"hide_hypervisor_id": "true"},
extra_specs={"hw:hide_hypervisor_id": "true"},
expected_attrs={"extra_specs"})

self.flags(virt_type='kvm', group='libvirt')
Expand All @@ -6617,7 +6630,7 @@ def test_get_guest_config_with_hiding_hypervisor_id_img_and_flavor(
# Input to the test: image metadata (true) and flavor
# extra_specs (true)
flavor_hide_id = fake_flavor.fake_flavor_obj(self.context,
extra_specs={"hide_hypervisor_id": "true"},
extra_specs={"hw:hide_hypervisor_id": "true"},
expected_attrs={"extra_specs"})
image_meta = objects.ImageMeta.from_dict({
"disk_format": "raw",
Expand All @@ -6644,7 +6657,7 @@ def test_get_guest_config_with_hiding_hypervisor_id_img_or_flavor(
# Input to the test: image metadata (false) and flavor
# extra_specs (true)
flavor_hide_id = fake_flavor.fake_flavor_obj(self.context,
extra_specs={"hide_hypervisor_id": "true"},
extra_specs={"hw:hide_hypervisor_id": "true"},
expected_attrs={"extra_specs"})
image_meta = objects.ImageMeta.from_dict({
"disk_format": "raw",
Expand All @@ -6669,7 +6682,7 @@ def test_get_guest_config_with_hiding_hypervisor_id_img_or_flavor(
# Input to the test: image metadata (true) and flavor
# extra_specs (false)
flavor_hide_id = fake_flavor.fake_flavor_obj(self.context,
extra_specs={"hide_hypervisor_id": "false"},
extra_specs={"hw:hide_hypervisor_id": "false"},
expected_attrs={"extra_specs"})
image_meta = objects.ImageMeta.from_dict({
"disk_format": "raw",
Expand Down Expand Up @@ -6716,7 +6729,7 @@ def test_get_guest_config_without_hiding_hypervisor_id(self):
def test_get_guest_config_without_hiding_hypervisor_id_flavor_extra_specs(
self):
flavor_hide_id = fake_flavor.fake_flavor_obj(self.context,
extra_specs={"hide_hypervisor_id": "false"},
extra_specs={"hw:hide_hypervisor_id": "false"},
expected_attrs={"extra_specs"})

self.flags(virt_type='qemu', group='libvirt')
Expand Down
4 changes: 3 additions & 1 deletion nova/virt/libvirt/driver.py
Original file line number Diff line number Diff line change
Expand Up @@ -5186,7 +5186,9 @@ def _set_features(self, guest, os_type, caps, virt_type, image_meta,
flavor):
hide_hypervisor_id = (strutils.bool_from_string(
flavor.extra_specs.get('hide_hypervisor_id')) or
image_meta.properties.get('img_hide_hypervisor_id'))
strutils.bool_from_string(
flavor.extra_specs.get('hw:hide_hypervisor_id')) or
image_meta.properties.get('img_hide_hypervisor_id'))

if virt_type == "xen":
# PAE only makes sense in X86
Expand Down
9 changes: 9 additions & 0 deletions releasenotes/notes/bug-1841932-c871ac7b3b05d67e.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
fixes:
- |
Add support for the ``hw:hide_hypervisor_id`` extra spec. This is an
alias for the ``hide_hypervisor_id`` extra spec, which was not
compatible with the ``AggregateInstanceExtraSpecsFilter`` scheduler
filter. See
`bug 1841932 <https://bugs.launchpad.net/nova/+bug/1841932>`_ for more
details.

0 comments on commit bf488a8

Please sign in to comment.