Deprecates the use of '--upstream' argument 11/59011/2
authorTim Rozet <trozet@redhat.com>
Mon, 25 Jun 2018 19:21:07 +0000 (15:21 -0400)
committerTim Rozet <trozet@redhat.com>
Mon, 25 Jun 2018 20:08:47 +0000 (20:08 +0000)
We only support the use of upstream deployments from Gambia onwards.
Therefore deprecating the parameter and forcing upstream to always be
used.

Change-Id: I7926a65a2c32bca2272855ba45fdb6005f67616f
Signed-off-by: Tim Rozet <trozet@redhat.com>
apex/deploy.py
apex/overcloud/deploy.py
apex/tests/test_apex_deploy.py
apex/tests/test_apex_overcloud_deploy.py

index cbecee8..635a5d0 100644 (file)
@@ -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
index a45b3a9..2f33183 100644 (file)
@@ -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(
index 6c2a185..b7941f6 100644 (file)
@@ -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
index f1db91a..83e2b02 100644 (file)
@@ -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')