Merge "Enable SFC scenarios for Gambia"
authorTim Rozet <trozet@redhat.com>
Wed, 22 Aug 2018 21:31:53 +0000 (21:31 +0000)
committerGerrit Code Review <gerrit@opnfv.org>
Wed, 22 Aug 2018 21:31:53 +0000 (21:31 +0000)
1  2 
apex/overcloud/deploy.py
apex/tests/test_apex_overcloud_deploy.py

diff --combined apex/overcloud/deploy.py
@@@ -72,8 -72,6 +72,6 @@@ OVS_PERF_MAP = 
      'NeutronDpdkMemoryChannels': 'memory_channels'
  }
  
- OVS_NSH_KMOD_RPM = "openvswitch-kmod-2.6.1-1.el7.centos.x86_64.rpm"
- OVS_NSH_RPM = "openvswitch-2.6.1-1.el7.centos.x86_64.rpm"
  ODL_NETVIRT_VPP_RPM = "/root/opendaylight-7.0.0-0.1.20170531snap665.el7" \
                        ".noarch.rpm"
  
@@@ -361,27 -359,8 +359,8 @@@ def prep_image(ds, ns, img, tmp_dir, ro
  
      if dataplane == 'ovs':
          if ds_opts['sfc']:
-             virt_cmds.extend([
-                 {con.VIRT_RUN_CMD: "yum -y install "
-                                    "/root/ovs/rpm/rpmbuild/RPMS/x86_64/"
-                                    "{}".format(OVS_NSH_KMOD_RPM)},
-                 {con.VIRT_RUN_CMD: "yum downgrade -y "
-                                    "/root/ovs/rpm/rpmbuild/RPMS/x86_64/"
-                                    "{}".format(OVS_NSH_RPM)}
-             ])
-         elif sdn == 'opendaylight':
-             # FIXME(trozet) remove this after RDO is updated with fix for
-             # https://bugzilla.redhat.com/show_bug.cgi?id=1544892
-             ovs_file = os.path.basename(con.CUSTOM_OVS)
-             ovs_url = con.CUSTOM_OVS.replace(ovs_file, '')
-             utils.fetch_upstream_and_unpack(dest=tmp_dir, url=ovs_url,
-                                             targets=[ovs_file])
-             virt_cmds.extend([
-                 {con.VIRT_UPLOAD: "{}:/root/".format(os.path.join(tmp_dir,
-                                                                   ovs_file))},
-                 {con.VIRT_RUN_CMD: "yum downgrade -y /root/{}".format(
-                     ovs_file)}
-             ])
+             oc_builder.inject_ovs_nsh(tmp_oc_image, tmp_dir)
      if dataplane == 'fdio':
          # Patch neutron with using OVS external interface for router
          # and add generic linux NS interface driver
@@@ -718,10 -697,6 +697,10 @@@ def prep_env(ds, ns, inv, opnfv_env, ne
                           "services")
  
      logging.info("opnfv-environment file written to {}".format(tmp_opnfv_env))
 +    with open(tmp_opnfv_env, 'r') as fh:
 +        logging.debug("opnfv-environment content is : {}".format(
 +            pprint.pformat(yaml.safe_load(fh.read()))
 +        ))
  
  
  def generate_ceph_key():
@@@ -875,7 -850,8 +854,7 @@@ def external_network_cmds(ns, ds)
                   "--allocation-pool start={},end={} --subnet-range " \
                   "{}".format(gateway, pool_start, pool_end, str(cidr))
      if external and cidr.version == 6:
 -        subnet_cmd += ' --ip-version 6 --ipv6-ra-mode slaac ' \
 -                      '--ipv6-address-mode slaac'
 +        subnet_cmd += ' --ip-version 6'
      cmds.append(subnet_cmd)
      logging.debug("Neutron external network commands determined "
                    "as: {}".format(cmds))
@@@ -242,6 -242,7 +242,7 @@@ class TestOvercloudDeploy(unittest.Test
          ds_opts = {'dataplane': 'ovs',
                     'sdn_controller': 'opendaylight',
                     'vpn': False,
+                    'sfc': False,
                     'odl_version': con.DEFAULT_ODL_VERSION,
                     'odl_vpp_netvirt': True}
          ds = {'deploy_options': MagicMock(),
                                  mock_virt_utils):
          ds_opts = {'dataplane': 'ovs',
                     'vpn': False,
+                    'sfc': False,
                     'sdn_controller': 'ovn'}
          ds = {'deploy_options': MagicMock(),
                'global_params': MagicMock()}
          ds_opts = {'dataplane': 'ovs',
                     'sdn_controller': 'opendaylight',
                     'vpn': True,
+                    'sfc': False,
                     'odl_version': con.DEFAULT_ODL_VERSION,
                     'odl_vpp_netvirt': True}
          ds = {'deploy_options': MagicMock(),
          mock_inject_odl.assert_called()
          mock_inject_quagga.assert_called()
  
+         @patch('apex.builders.overcloud_builder.inject_ovs_nsh')
+         @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_sfc(self, mock_os_path, mock_shutil,
+                                         mock_virt_utils, mock_inject_odl,
+                                         mock_inject_ovs_nsh):
+             ds_opts = {'dataplane': 'ovs',
+                        'sdn_controller': 'opendaylight',
+                        'vpn': False,
+                        'sfc': True,
+                        'odl_version': con.DEFAULT_ODL_VERSION,
+                        'odl_vpp_netvirt': True}
+             ds = {'deploy_options': MagicMock(),
+                   'global_params': MagicMock()}
+             ds['deploy_options'].__getitem__.side_effect = \
+                 lambda i: ds_opts.get(i, MagicMock())
+             ds['deploy_options'].__contains__.side_effect = \
+                 lambda i: True if i in ds_opts else MagicMock()
+             ns = MagicMock()
+             prep_image(ds, ns, 'undercloud.qcow2', '/tmp', root_pw='test')
+             mock_virt_utils.virt_customize.assert_called()
+             mock_inject_odl.assert_called()
+             mock_inject_ovs_nsh.assert_called()
      @patch('apex.overcloud.deploy.os.path.isfile')
      def test_prep_image_no_image(self, mock_isfile):
          mock_isfile.return_value = False
  
      @patch('apex.overcloud.deploy.fileinput')
      @patch('apex.overcloud.deploy.shutil')
 +    @patch('builtins.open', mock_open())
      def test_prep_env_round_two(self, mock_shutil, mock_fileinput):
          mock_fileinput.input.return_value = \
              ['NeutronVPPAgentPhysnets']
  
      @patch('apex.overcloud.deploy.fileinput')
      @patch('apex.overcloud.deploy.shutil')
 +    @patch('builtins.open', mock_open())
      def test_prep_env_round_three(self, mock_shutil, mock_fileinput):
          mock_fileinput.input.return_value = \
              ['OS::TripleO::Services::NeutronDhcpAgent',
  
      @patch('apex.overcloud.deploy.fileinput')
      @patch('apex.overcloud.deploy.shutil')
 +    @patch('builtins.open', mock_open())
      def test_prep_env_tenant_vlan(self, mock_shutil, mock_fileinput):
          mock_fileinput.input.return_value = \
              ['NeutronNetworkVLANRanges',
  
      @patch('apex.overcloud.deploy.fileinput')
      @patch('apex.overcloud.deploy.shutil')
 +    @patch('builtins.open', mock_open())
      def test_prep_env_tenant_vlan_odl(self, mock_shutil, mock_fileinput):
          mock_fileinput.input.return_value = \
              ['NeutronNetworkVLANRanges',