Refactor enabled_services for roles

This refactors get_enabled_services() utility functions for us
to get the {{role.name}}Sevices parameters that can be used
to filter the services during deployment and cip.

Change-Id: I7805c9eceec5d85fac9298ce5776542f977417ca
This commit is contained in:
ramishra 2021-06-19 09:42:16 +05:30
parent 1fa0990327
commit 21710a412c
2 changed files with 45 additions and 26 deletions

View File

@ -64,15 +64,26 @@ if os.path.isfile(DEFAULT_PREPARE_FILE):
LOG = logging.getLogger(__name__ + '.KollaImageBuilder')
def _filter_services(service_list, resource_registry):
if resource_registry:
for service in service_list.copy():
env_path = resource_registry.get(service)
if env_path == 'OS::Heat::None':
service_list.remove(service)
def get_enabled_services(environment, roles_data):
"""Build list of enabled services
"""Build a map of role name and default enabled services
:param environment: Heat environment for deployment
:param roles_data: Roles file data used to filter services
:returns: set of resource types representing enabled services
"""
enabled_services = set()
enabled_services = {}
parameter_defaults = environment.get('parameter_defaults', {})
resource_registry = environment.get('resource_registry', {})
for role in roles_data:
count = parameter_defaults.get('%sCount' % role['name'],
role.get('CountDefault', 0))
@ -82,10 +93,16 @@ def get_enabled_services(environment, roles_data):
raise ValueError('Unable to convert %sCount to an int: %s' %
(role['name'], count))
param = '%sServices' % role['name']
if count > 0:
enabled_services.update(
parameter_defaults.get('%sServices' % role['name'],
role.get('ServicesDefault', [])))
if param in parameter_defaults:
enabled_services[param] = parameter_defaults[param]
else:
default_services = role.get('ServicesDefault', [])
_filter_services(default_services, resource_registry)
enabled_services[param] = default_services
else:
enabled_services[param] = []
return enabled_services
@ -98,15 +115,19 @@ def build_service_filter(environment, roles_data):
"""
if not roles_data:
return None
filtered_services = set()
enabled_services = get_enabled_services(environment, roles_data)
resource_registry = environment.get('resource_registry')
if resource_registry:
for service in enabled_services.copy():
env_path = resource_registry.get(service)
if env_path == 'OS::Heat::None':
enabled_services.remove(service)
return enabled_services
for role in roles_data:
role_services = enabled_services.get(
'%sServices' % role['name'], set())
# This filtering is probably not required, but filter if the
# {{role.name}}Services has services mapped to OS::Heat::None
_filter_services(role_services, resource_registry)
filtered_services.update(role_services)
return filtered_services
def set_neutron_driver(pd, mapping_args):
@ -166,7 +187,8 @@ def container_images_prepare_multi(environment, roles_data, dry_run=False,
multi_arch = len(pd.get('AdditionalArchitectures', []))
env_params = {}
service_filter = build_service_filter(environment, roles_data)
service_filter = build_service_filter(
environment, roles_data)
for cip_entry in cip:
mapping_args = cip_entry.get('set', {})

View File

@ -737,17 +737,18 @@ class TestPrepare(base.TestCase):
def test_get_enabled_services_empty(self):
self.assertEqual(
set([]),
{},
kb.get_enabled_services({}, [])
)
def test_get_enabled_services_default_count(self):
self.assertEqual(
set([
{'ControllerServices': [
'OS::TripleO::Services::NeutronApi',
'OS::TripleO::Services::NovaApi',
'OS::TripleO::Services::NovaCompute'
]),
'OS::TripleO::Services::NovaApi'],
'ComputeServices': [
'OS::TripleO::Services::NovaCompute'],
'BlockStorageServices': []},
kb.get_enabled_services({
'parameter_defaults': {}
}, [
@ -775,21 +776,17 @@ class TestPrepare(base.TestCase):
def test_get_enabled_services(self):
self.assertEqual(
set([
{'ControllerServices': [
'OS::TripleO::Services::NeutronApi',
'OS::TripleO::Services::NovaApi',
'OS::TripleO::Services::NovaCompute',
'OS::TripleO::Services::NovaLibvirt'
]),
'OS::TripleO::Services::NovaApi'],
'ComputeServices': [
'OS::TripleO::Services::NovaCompute'],
'BlockStorageServices': []},
kb.get_enabled_services({
'parameter_defaults': {
'ControllerCount': 1,
'ComputeCount': 1,
'BlockStorageCount': 0,
'ComputeServices': [
'OS::TripleO::Services::NovaCompute',
'OS::TripleO::Services::NovaLibvirt'
]
}
}, [
{