diff options
-rw-r--r-- | apex/overcloud/deploy.py | 23 | ||||
-rw-r--r-- | apex/tests/test_apex_overcloud_deploy.py | 10 |
2 files changed, 33 insertions, 0 deletions
diff --git a/apex/overcloud/deploy.py b/apex/overcloud/deploy.py index 809afc13..5c957965 100644 --- a/apex/overcloud/deploy.py +++ b/apex/overcloud/deploy.py @@ -71,14 +71,37 @@ ODL_NETVIRT_VPP_RPM = "/root/opendaylight-7.0.0-0.1.20170531snap665.el7" \ def build_sdn_env_list(ds, sdn_map, env_list=None): + """ + Builds a list of SDN environment files to be used in the deploy cmd. + + This function recursively searches an sdn_map. First the sdn controller is + matched and then the function looks for enabled features for that + controller to determine which environment files should be used. By + default the feature will be checked if set to true in deploy settings to be + added to the list. If a feature does not have a boolean value, then the + key and value pair to compare with are checked as a tuple (k,v). + + :param ds: deploy settings + :param sdn_map: SDN map to recursively search + :param env_list: recursive var to hold previously found env_list + :return: A list of env files + """ if env_list is None: env_list = list() for k, v in sdn_map.items(): if ds['sdn_controller'] == k or (k in ds and ds[k] is True): if isinstance(v, dict): + # Append default SDN env file first + # The assumption is that feature-enabled SDN env files + # override and do not conflict with previously set default + # settings + if ds['sdn_controller'] == k and 'default' in v: + env_list.append(os.path.join(con.THT_ENV_DIR, + v['default'])) env_list.extend(build_sdn_env_list(ds, v)) else: env_list.append(os.path.join(con.THT_ENV_DIR, v)) + # check if the value is not a boolean elif isinstance(v, tuple): if ds[k] == v[0]: env_list.append(os.path.join(con.THT_ENV_DIR, v[1])) diff --git a/apex/tests/test_apex_overcloud_deploy.py b/apex/tests/test_apex_overcloud_deploy.py index 59e9048f..8ff98a8d 100644 --- a/apex/tests/test_apex_overcloud_deploy.py +++ b/apex/tests/test_apex_overcloud_deploy.py @@ -7,6 +7,7 @@ # http://www.apache.org/licenses/LICENSE-2.0 ############################################################################## +import os import sys import unittest @@ -26,6 +27,7 @@ from apex.overcloud.deploy import generate_ceph_key from apex.overcloud.deploy import prep_storage_env from apex.overcloud.deploy import external_network_cmds from apex.overcloud.deploy import create_congress_cmds +from apex.overcloud.deploy import SDN_FILE_MAP from nose.tools import ( assert_regexp_matches, @@ -70,6 +72,14 @@ class TestOvercloudDeploy(unittest.TestCase): res = '/usr/share/openstack-tripleo-heat-templates/environments/test' assert_equal(build_sdn_env_list(ds, sdn_map), [res]) + def test_build_sdn_env_list_with_default(self): + ds = {'sdn_controller': 'opendaylight', + 'vpn': True} + prefix = '/usr/share/openstack-tripleo-heat-templates/environments' + res = [os.path.join(prefix, 'neutron-opendaylight.yaml'), + os.path.join(prefix, 'neutron-bgpvpn-opendaylight.yaml')] + assert_equal(build_sdn_env_list(ds, SDN_FILE_MAP), res) + @patch('apex.overcloud.deploy.prep_storage_env') @patch('apex.overcloud.deploy.build_sdn_env_list') @patch('builtins.open', mock_open()) |