diff options
-rw-r--r-- | apex/deploy.py | 90 | ||||
-rw-r--r-- | apex/overcloud/deploy.py | 33 | ||||
-rw-r--r-- | apex/tests/test_apex_deploy.py | 12 | ||||
-rw-r--r-- | apex/tests/test_apex_overcloud_deploy.py | 20 |
4 files changed, 68 insertions, 87 deletions
diff --git a/apex/deploy.py b/apex/deploy.py index cbecee8b..635a5d07 100644 --- a/apex/deploy.py +++ b/apex/deploy.py @@ -177,9 +177,11 @@ def create_deploy_parser(): default=False, help='Use tripleo-quickstart to deploy') deploy_parser.add_argument('--upstream', action='store_true', - default=False, + default=True, help='Force deployment to use upstream ' - 'artifacts') + 'artifacts. This option is now ' + 'deprecated and only upstream ' + 'deployments are supported.') deploy_parser.add_argument('--no-fetch', action='store_true', default=False, help='Ignore fetching latest upstream and ' @@ -341,39 +343,36 @@ def main(): else: root_pw = None - upstream = (os_version != constants.DEFAULT_OS_VERSION or - args.upstream) + if not args.upstream: + logging.warning("Using upstream is now required for Apex. " + "Forcing upstream to true") if os_version == 'master': branch = 'master' else: branch = "stable/{}".format(os_version) - if upstream: - logging.info("Deploying with upstream artifacts for OpenStack " - "{}".format(os_version)) - args.image_dir = os.path.join(args.image_dir, os_version) - upstream_url = constants.UPSTREAM_RDO.replace( - constants.DEFAULT_OS_VERSION, os_version) - upstream_targets = ['overcloud-full.tar', 'undercloud.qcow2'] - utils.fetch_upstream_and_unpack(args.image_dir, upstream_url, - upstream_targets, - fetch=not args.no_fetch) - sdn_image = os.path.join(args.image_dir, 'overcloud-full.qcow2') - # copy undercloud so we don't taint upstream fetch - uc_image = os.path.join(args.image_dir, 'undercloud_mod.qcow2') - uc_fetch_img = os.path.join(args.image_dir, 'undercloud.qcow2') - shutil.copyfile(uc_fetch_img, uc_image) - # prep undercloud with required packages - uc_builder.add_upstream_packages(uc_image) - # add patches from upstream to undercloud and overcloud - logging.info('Adding patches to undercloud') - patches = deploy_settings['global_params']['patches'] - c_builder.add_upstream_patches(patches['undercloud'], uc_image, - APEX_TEMP_DIR, branch) - else: - sdn_image = os.path.join(args.image_dir, SDN_IMAGE) - uc_image = 'undercloud.qcow2' - # patches are ignored in non-upstream deployments - patches = {'overcloud': [], 'undercloud': []} + + logging.info("Deploying with upstream artifacts for OpenStack " + "{}".format(os_version)) + args.image_dir = os.path.join(args.image_dir, os_version) + upstream_url = constants.UPSTREAM_RDO.replace( + constants.DEFAULT_OS_VERSION, os_version) + upstream_targets = ['overcloud-full.tar', 'undercloud.qcow2'] + utils.fetch_upstream_and_unpack(args.image_dir, upstream_url, + upstream_targets, + fetch=not args.no_fetch) + sdn_image = os.path.join(args.image_dir, 'overcloud-full.qcow2') + # copy undercloud so we don't taint upstream fetch + uc_image = os.path.join(args.image_dir, 'undercloud_mod.qcow2') + uc_fetch_img = os.path.join(args.image_dir, 'undercloud.qcow2') + shutil.copyfile(uc_fetch_img, uc_image) + # prep undercloud with required packages + uc_builder.add_upstream_packages(uc_image) + # add patches from upstream to undercloud and overcloud + logging.info('Adding patches to undercloud') + patches = deploy_settings['global_params']['patches'] + c_builder.add_upstream_patches(patches['undercloud'], uc_image, + APEX_TEMP_DIR, branch) + # Create/Start Undercloud VM undercloud = uc_lib.Undercloud(args.image_dir, args.deploy_dir, @@ -385,7 +384,7 @@ def main(): undercloud_admin_ip = net_settings['networks'][ constants.ADMIN_NETWORK]['installer_vm']['ip'] - if upstream and ds_opts['containers']: + if ds_opts['containers']: tag = constants.DOCKER_TAG else: tag = None @@ -408,24 +407,25 @@ def main(): net_data_file) else: net_data = False - if upstream and args.env_file == 'opnfv-environment.yaml': + + # TODO(trozet): Either fix opnfv env or default to use upstream env + if args.env_file == 'opnfv-environment.yaml': # Override the env_file if it is defaulted to opnfv # opnfv env file will not work with upstream args.env_file = 'upstream-environment.yaml' opnfv_env = os.path.join(args.deploy_dir, args.env_file) - if not upstream: - # TODO(trozet): Invoke with containers after Fraser migration - oc_deploy.prep_env(deploy_settings, net_settings, inventory, - opnfv_env, net_env_target, APEX_TEMP_DIR) - else: - shutil.copyfile( - opnfv_env, - os.path.join(APEX_TEMP_DIR, os.path.basename(opnfv_env)) - ) + + # TODO(trozet): Invoke with containers after Fraser migration + # oc_deploy.prep_env(deploy_settings, net_settings, inventory, + # opnfv_env, net_env_target, APEX_TEMP_DIR) + + shutil.copyfile( + opnfv_env, + os.path.join(APEX_TEMP_DIR, os.path.basename(opnfv_env)) + ) patched_containers = oc_deploy.prep_image( deploy_settings, net_settings, sdn_image, APEX_TEMP_DIR, - root_pw=root_pw, docker_tag=tag, patches=patches['overcloud'], - upstream=upstream) + root_pw=root_pw, docker_tag=tag, patches=patches['overcloud']) oc_deploy.create_deploy_cmd(deploy_settings, net_settings, inventory, APEX_TEMP_DIR, args.virtual, @@ -447,7 +447,6 @@ def main(): patched_containers) container_vars['container_tag'] = constants.DOCKER_TAG container_vars['stackrc'] = 'source /home/stack/stackrc' - container_vars['upstream'] = upstream container_vars['sdn'] = ds_opts['sdn_controller'] container_vars['undercloud_ip'] = undercloud_admin_ip container_vars['os_version'] = os_version @@ -487,7 +486,6 @@ def main(): deploy_vars['apex_env_file'] = os.path.basename(opnfv_env) deploy_vars['stackrc'] = 'source /home/stack/stackrc' deploy_vars['overcloudrc'] = 'source /home/stack/overcloudrc' - deploy_vars['upstream'] = upstream deploy_vars['undercloud_ip'] = undercloud_admin_ip deploy_vars['ha_enabled'] = ha_enabled deploy_vars['os_version'] = os_version diff --git a/apex/overcloud/deploy.py b/apex/overcloud/deploy.py index a45b3a9b..2f33183c 100644 --- a/apex/overcloud/deploy.py +++ b/apex/overcloud/deploy.py @@ -250,7 +250,7 @@ def create_deploy_cmd(ds, ns, inv, tmp_dir, def prep_image(ds, ns, img, tmp_dir, root_pw=None, docker_tag=None, - patches=None, upstream=False): + patches=None): """ Locates sdn image and preps for deployment. :param ds: deploy settings @@ -260,7 +260,6 @@ def prep_image(ds, ns, img, tmp_dir, root_pw=None, docker_tag=None, :param root_pw: password to configure for overcloud image :param docker_tag: Docker image tag for RDO version (default None) :param patches: List of patches to apply to overcloud image - :param upstream: (boolean) Indicates if upstream deployment or not :return: None """ # TODO(trozet): Come up with a better way to organize this logic in this @@ -367,35 +366,7 @@ def prep_image(ds, ns, img, tmp_dir, root_pw=None, docker_tag=None, logging.debug("Temporary overcloud image stored as: {}".format( tmp_oc_image)) - # TODO (trozet): remove this if block after Fraser - if sdn == 'opendaylight' and not upstream: - if ds_opts['odl_version'] != con.DEFAULT_ODL_VERSION: - virt_cmds.extend([ - {con.VIRT_RUN_CMD: "yum -y remove opendaylight"}, - {con.VIRT_RUN_CMD: "rm -rf /etc/puppet/modules/opendaylight"}, - {con.VIRT_RUN_CMD: "cd /etc/puppet/modules && tar xzf " - "/root/puppet-opendaylight-" - "{}.tar.gz".format(ds_opts['odl_version'])} - ]) - if ds_opts['odl_version'] == 'master': - virt_cmds.extend([ - {con.VIRT_RUN_CMD: "rpm -ivh --nodeps /root/{}/*".format( - ds_opts['odl_version'])} - ]) - else: - virt_cmds.extend([ - {con.VIRT_RUN_CMD: "yum -y install /root/{}/*".format( - ds_opts['odl_version'])} - ]) - - elif sdn == 'opendaylight' and 'odl_vpp_netvirt' in ds_opts \ - and ds_opts['odl_vpp_netvirt']: - virt_cmds.extend([ - {con.VIRT_RUN_CMD: "yum -y remove opendaylight"}, - {con.VIRT_RUN_CMD: "yum -y install /root/{}/*".format( - ODL_NETVIRT_VPP_RPM)} - ]) - elif sdn == 'opendaylight': + if sdn == 'opendaylight': undercloud_admin_ip = ns['networks'][con.ADMIN_NETWORK][ 'installer_vm']['ip'] oc_builder.inject_opendaylight( diff --git a/apex/tests/test_apex_deploy.py b/apex/tests/test_apex_deploy.py index 6c2a185d..b7941f6f 100644 --- a/apex/tests/test_apex_deploy.py +++ b/apex/tests/test_apex_deploy.py @@ -107,6 +107,7 @@ class TestDeploy(unittest.TestCase): args.virtual = True assert_raises(ApexDeployException, validate_deploy_args, args) + @patch('apex.deploy.uc_builder') @patch('apex.deploy.network_data.create_network_data') @patch('apex.deploy.shutil') @patch('apex.deploy.oc_deploy') @@ -132,7 +133,8 @@ class TestDeploy(unittest.TestCase): mock_deploy_sets, mock_net_sets, mock_net_env, mock_utils, mock_parsers, mock_oc_cfg, mock_virt_utils, mock_inv, mock_build_vms, mock_uc_lib, - mock_oc_deploy, mock_shutil, mock_network_data): + mock_oc_deploy, mock_shutil, mock_network_data, + mock_uc_builder): net_sets_dict = {'networks': MagicMock(), 'dns_servers': 'test'} ds_opts_dict = {'global_params': MagicMock(), @@ -149,7 +151,7 @@ class TestDeploy(unittest.TestCase): args.virtual = False args.quickstart = False args.debug = False - args.upstream = False + args.upstream = True net_sets = mock_net_sets.return_value net_sets.enabled_network_list = ['external'] net_sets.__getitem__.side_effect = net_sets_dict.__getitem__ @@ -179,6 +181,7 @@ class TestDeploy(unittest.TestCase): args.debug = True main() + @patch('apex.deploy.uc_builder') @patch('apex.deploy.network_data.create_network_data') @patch('apex.deploy.shutil') @patch('apex.deploy.oc_deploy') @@ -204,7 +207,8 @@ class TestDeploy(unittest.TestCase): mock_deploy_sets, mock_net_sets, mock_net_env, mock_utils, mock_parsers, mock_oc_cfg, mock_virt_utils, mock_inv, mock_build_vms, mock_uc_lib, - mock_oc_deploy, mock_shutil, mock_network_data): + mock_oc_deploy, mock_shutil, mock_network_data, + mock_uc_builder): # didn't work yet line 412 # net_sets_dict = {'networks': {'admin': {'cidr': MagicMock()}}, # 'dns_servers': 'test'} @@ -228,7 +232,7 @@ class TestDeploy(unittest.TestCase): args.virt_compute_nodes = 1 args.virt_compute_ram = None args.virt_default_ram = 12 - args.upstream = False + args.upstream = True net_sets = mock_net_sets.return_value net_sets.enabled_network_list = ['admin'] deploy_sets = mock_deploy_sets.return_value diff --git a/apex/tests/test_apex_overcloud_deploy.py b/apex/tests/test_apex_overcloud_deploy.py index f1db91ad..83e2b02d 100644 --- a/apex/tests/test_apex_overcloud_deploy.py +++ b/apex/tests/test_apex_overcloud_deploy.py @@ -207,11 +207,13 @@ class TestOvercloudDeploy(unittest.TestCase): assert_raises(ApexDeployException, create_deploy_cmd, ds, ns, inv, '/tmp', virt) + @patch('apex.builders.overcloud_builder.inject_opendaylight') @patch('apex.overcloud.deploy.virt_utils') @patch('apex.overcloud.deploy.shutil') @patch('apex.overcloud.deploy.os.path') @patch('builtins.open', mock_open()) - def test_prep_image(self, mock_os_path, mock_shutil, mock_virt_utils): + def test_prep_image(self, mock_os_path, mock_shutil, mock_virt_utils, + mock_inject_odl): ds_opts = {'dataplane': 'fdio', 'sdn_controller': 'opendaylight', 'odl_version': 'master', @@ -223,6 +225,7 @@ class TestOvercloudDeploy(unittest.TestCase): ns = MagicMock() prep_image(ds, ns, 'undercloud.qcow2', '/tmp', root_pw='test') mock_virt_utils.virt_customize.assert_called() + mock_inject_odl.assert_called() @patch('apex.overcloud.deploy.virt_utils') @patch('apex.overcloud.deploy.shutil') @@ -240,12 +243,13 @@ class TestOvercloudDeploy(unittest.TestCase): prep_image(ds, ns, 'undercloud.qcow2', '/tmp', root_pw='test') mock_virt_utils.virt_customize.assert_called() + @patch('apex.builders.overcloud_builder.inject_opendaylight') @patch('apex.overcloud.deploy.virt_utils') @patch('apex.overcloud.deploy.shutil') @patch('apex.overcloud.deploy.os.path') @patch('builtins.open', mock_open()) def test_prep_image_sdn_odl(self, mock_os_path, mock_shutil, - mock_virt_utils): + mock_virt_utils, mock_inject_odl): ds_opts = {'dataplane': 'ovs', 'sdn_controller': 'opendaylight', 'odl_version': con.DEFAULT_ODL_VERSION, @@ -259,6 +263,7 @@ class TestOvercloudDeploy(unittest.TestCase): ns = MagicMock() prep_image(ds, ns, 'undercloud.qcow2', '/tmp', root_pw='test') mock_virt_utils.virt_customize.assert_called() + mock_inject_odl.assert_called() @patch('apex.overcloud.deploy.c_builder') @patch('apex.overcloud.deploy.oc_builder') @@ -283,18 +288,20 @@ class TestOvercloudDeploy(unittest.TestCase): mock_c_builder.add_upstream_patches.return_value = ['nova-api'] patches = ['dummy_nova_patch'] rv = prep_image(ds, ns, 'undercloud.qcow2', '/tmp', root_pw='test', - docker_tag='latest', patches=patches, upstream=True) - mock_oc_builder.inject_opendaylight.assert_called + docker_tag='latest', patches=patches) + mock_oc_builder.inject_opendaylight.assert_called() mock_virt_utils.virt_customize.assert_called() - mock_c_builder.add_upstream_patches.assert_called + mock_c_builder.add_upstream_patches.assert_called() self.assertListEqual(sorted(rv), ['nova-api', 'opendaylight']) + @patch('apex.overcloud.deploy.oc_builder') @patch('apex.overcloud.deploy.virt_utils') @patch('apex.overcloud.deploy.shutil') @patch('apex.overcloud.deploy.os.path') @patch('builtins.open', mock_open()) def test_prep_image_sdn_odl_not_def(self, mock_os_path, - mock_shutil, mock_virt_utils): + mock_shutil, mock_virt_utils, + mock_oc_builder): ds_opts = {'dataplane': 'ovs', 'sdn_controller': 'opendaylight', 'odl_version': 'uncommon'} @@ -305,6 +312,7 @@ class TestOvercloudDeploy(unittest.TestCase): ns = MagicMock() prep_image(ds, ns, 'undercloud.qcow2', '/tmp', root_pw='test') mock_virt_utils.virt_customize.assert_called() + mock_oc_builder.inject_opendaylight.assert_called() @patch('apex.overcloud.deploy.virt_utils') @patch('apex.overcloud.deploy.shutil') |