Merge "Fix bug preventing forbidden traits from working" into stable/stein

This commit is contained in:
Zuul 2019-04-15 11:29:36 +00:00 committed by Gerrit Code Review
commit 353985210b
3 changed files with 29 additions and 17 deletions

View File

@ -243,8 +243,8 @@ class ResourceRequest(object):
def _clean_empties(self):
"""Get rid of any empty ResourceGroup instances."""
for ident, rg in list(self._rg_by_id.items()):
# TODO(magnusbe) Fix bug #1821824
if not any((rg.resources, rg.required_traits)):
if not any((rg.resources, rg.required_traits,
rg.forbidden_traits)):
self._rg_by_id.pop(ident)
def strip_zeros(self):

View File

@ -4579,11 +4579,9 @@ class TraitsBasedSchedulingTest(integrated_helpers.ProviderUsageBaseTestCase):
server = self._wait_for_state_change(self.admin_api, server, 'ACTIVE')
# Temporarily pass until bug #1821824 is fixed
# Assert the server ended up on the expected compute host that doesn't
# have the forbidden trait.
# TODO(magnusbe) Uncomment when commiting fix for bug #1821824
# self.assertEqual(self.compute2.host, server['OS-EXT-SRV-ATTR:host'])
self.assertEqual(self.compute2.host, server['OS-EXT-SRV-ATTR:host'])
# Disable the compute node that doesn't have the forbidden trait
compute2_service_id = self.admin_api.get_services(
@ -4596,20 +4594,12 @@ class TraitsBasedSchedulingTest(integrated_helpers.ProviderUsageBaseTestCase):
self.image_id_without_trait
)
# Temporarily pass if server goes to ACTIVE STATE until bug #1821824
# is fixed.
# TODO(magnusbe) Remove when commiting fix for bug #1821824
server = self._wait_for_state_change(self.admin_api, server, 'ACTIVE')
# The server should go to ERROR state because there is no valid host.
# This is the expected behaviour. However, at this time bug #1821824
# prevents this from working.
# TODO(magnusbe) Uncomment when commiting fix for bug #1821824
# server = self._wait_for_state_change(self.admin_api, server, 'ERROR')
# self.assertIsNone(server['OS-EXT-SRV-ATTR:host'])
server = self._wait_for_state_change(self.admin_api, server, 'ERROR')
self.assertIsNone(server['OS-EXT-SRV-ATTR:host'])
# Make sure the failure was due to NoValidHost by checking the fault.
# self.assertIn('fault', server)
# self.assertIn('No valid host', server['fault']['message'])
self.assertIn('fault', server)
self.assertIn('No valid host', server['fault']['message'])
def test_image_traits_based_scheduling(self):
"""Tests that a server create request using a required trait on image

View File

@ -103,6 +103,28 @@ class TestUtils(test.NoDBTestCase):
self._test_resources_from_request_spec(expected_resources, flavor,
image)
def test_resources_from_request_spec_flavor_forbidden_trait(self):
flavor = objects.Flavor(vcpus=1,
memory_mb=1024,
root_gb=10,
ephemeral_gb=5,
swap=0,
extra_specs={
'trait:CUSTOM_FLAVOR_TRAIT': 'forbidden'})
expected_resources = utils.ResourceRequest()
expected_resources._rg_by_id[None] = objects.RequestGroup(
use_same_provider=False,
resources={
'VCPU': 1,
'MEMORY_MB': 1024,
'DISK_GB': 15,
},
forbidden_traits={
'CUSTOM_FLAVOR_TRAIT',
}
)
self._test_resources_from_request_spec(expected_resources, flavor)
def test_resources_from_request_spec_with_no_disk(self):
flavor = objects.Flavor(vcpus=1,
memory_mb=1024,