Make placement a required interface as of train

Make placement a required interface for train and above as
placement is required in order to schedule instances.

Change-Id: If2472ec24df4c3d90b14189f8c4d3cceee5edc97
Closes-Bug: #1849893
This commit is contained in:
Corey Bryant 2019-10-25 18:28:55 +00:00
parent d565a0204b
commit 45988df1ed
3 changed files with 33 additions and 0 deletions

View File

@ -115,6 +115,18 @@ class CloudComputeContext(ch_context.OSContextGenerator):
return ctxt
class PlacementContext(ch_context.OSContextGenerator):
"Dummy context used by service status to check relation exists"
interfaces = ['placement']
def __call__(self):
ctxt = {}
rids = [rid for rid in hookenv.relation_ids('placement')]
if rids:
ctxt['rids'] = rids
return ctxt
class NeutronAPIContext(ch_context.OSContextGenerator):
interfaces = ['neutron-api']

View File

@ -53,6 +53,10 @@ REQUIRED_INTERFACES = {
'compute': ['nova-compute', 'nova-cell-api'],
}
REQUIRED_INTERFACES_TRAIN = {
'placement': ['placement'],
}
# removed from original: charm-helper-sh
BASE_PACKAGES = [
'apache2',
@ -180,6 +184,7 @@ def get_base_resource_map():
nova_cc_context.InstanceConsoleContext(),
nova_cc_context.ConsoleSSLContext(),
nova_cc_context.CloudComputeContext(),
nova_cc_context.PlacementContext(),
ch_context.InternalEndpointContext(),
ch_context.VolumeAPIContext('nova-common'),
nova_cc_context.NeutronAPIContext(),
@ -1731,7 +1736,11 @@ def assess_status_func(configs):
@param configs: a templating.OSConfigRenderer() object
@return f() -> None : a function that assesses the unit's workload status
"""
release = ch_utils.os_release('nova-common')
cmp_os_release = ch_utils.CompareOpenStackReleases(release)
required_interfaces = REQUIRED_INTERFACES.copy()
if cmp_os_release >= 'train':
required_interfaces.update(REQUIRED_INTERFACES_TRAIN)
required_interfaces.update(get_optional_interfaces())
return ch_utils.make_assess_status_func(
configs, required_interfaces,

View File

@ -1260,13 +1260,16 @@ class NovaCCUtilsTests(CharmTestCase):
@patch.object(utils, 'services')
@patch.object(utils, 'determine_ports')
@patch.object(utils.ch_utils, 'make_assess_status_func')
@patch.object(utils.ch_utils, 'CompareOpenStackReleases')
def test_assess_status_func(self,
compare_releases,
make_assess_status_func,
determine_ports,
services,
REQUIRED_INTERFACES,
check_optional_relations,
get_optional_interfaces):
compare_releases.return_value = 'stein'
services.return_value = 's1'
REQUIRED_INTERFACES.copy.return_value = {'int': ['test 1']}
get_optional_interfaces.return_value = {'opt': ['test 2']}
@ -1279,6 +1282,15 @@ class NovaCCUtilsTests(CharmTestCase):
charm_func=check_optional_relations, services='s1',
ports=None)
make_assess_status_func.reset_mock()
compare_releases.return_value = 'train'
utils.assess_status_func('test-config')
make_assess_status_func.assert_called_once_with(
'test-config',
{'int': ['test 1'], 'placement': ['placement'], 'opt': ['test 2']},
charm_func=check_optional_relations, services='s1',
ports=None)
def test_pause_unit_helper(self):
with patch.object(utils, '_pause_resume_helper') as prh:
utils.pause_unit_helper('random-config')