X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=apex%2Fovercloud%2Fdeploy.py;h=33641ed5aeeff537c8fb6b8678c9a3f7d68bcf27;hb=974993a17188f10acd6a1f9b2f48002b9c77ef24;hp=5bbcaedef710545c4321295c764b9a0e6c51f802;hpb=67e7b3c76402445d7e62d5953d661794ec1f7c6d;p=apex.git diff --git a/apex/overcloud/deploy.py b/apex/overcloud/deploy.py index 5bbcaede..33641ed5 100644 --- a/apex/overcloud/deploy.py +++ b/apex/overcloud/deploy.py @@ -39,6 +39,7 @@ SDN_FILE_MAP = { 'default': 'neutron-opendaylight-honeycomb.yaml' }, 'l2gw': 'neutron-l2gw-opendaylight.yaml', + 'sriov': 'neutron-opendaylight-sriov.yaml', 'default': 'neutron-opendaylight.yaml', }, 'onos': { @@ -137,6 +138,9 @@ def create_deploy_cmd(ds, ns, inv, tmp_dir, prep_storage_env(ds, tmp_dir) deploy_options.append(os.path.join(con.THT_ENV_DIR, 'storage-environment.yaml')) + if ds_opts['sriov']: + prep_sriov_env(ds, tmp_dir) + if ds['global_params']['ha_enabled']: deploy_options.append(os.path.join(con.THT_ENV_DIR, 'puppet-pacemaker.yaml')) @@ -459,6 +463,13 @@ def prep_env(ds, ns, inv, opnfv_env, net_env, tmp_dir): elif 'ComputeServices' in line: output_line = (" ComputeServices:\n" " - OS::TripleO::Services::NeutronDhcpAgent") + # SRIOV networks are VLAN based provider networks. In order to simplify + # the deployment, nfv_sriov will be the default physnet. VLANs are not + # needed in advance, and the user will have to create the network + # specifying the segmentation-id. + if ds_opts['sriov']: + if 'NeutronNetworkVLANRanges' in line: + output_line = ("{},nfv_sriov'".format(line[:-1])) if perf: for role in 'NovaCompute', 'Controller': @@ -569,6 +580,46 @@ def prep_storage_env(ds, tmp_dir): )) +def prep_sriov_env(ds, tmp_dir): + """ + Creates SRIOV environment file for deployment. Source file is copied by + undercloud playbook to host. + :param ds: + :param tmp_dir: + :return: + """ + ds_opts = ds['deploy_options'] + sriov_iface = ds_opts['sriov'] + sriov_file = os.path.join(tmp_dir, 'neutron-opendaylight-sriov.yaml') + if not os.path.isfile(sriov_file): + logging.error("sriov-environment file is not in tmp directory: {}. " + "Check if file was copied from " + "undercloud".format(tmp_dir)) + raise ApexDeployException("sriov-environment file not copied from " + "undercloud") + # TODO(rnoriega): Instead of line editing, refactor this code to load + # yaml file into a dict, edit it and write the file back. + for line in fileinput.input(sriov_file, inplace=True): + line = line.strip('\n') + if 'NovaSchedulerDefaultFilters' in line: + print(" {}".format(line[3:])) + elif 'NovaSchedulerAvailableFilters' in line: + print(" {}".format(line[3:])) + elif 'NeutronPhysicalDevMappings' in line: + print(" NeutronPhysicalDevMappings: \"nfv_sriov:{}\"" + .format(sriov_iface)) + elif 'NeutronSriovNumVFs' in line: + print(" NeutronSriovNumVFs: \"{}:8\"".format(sriov_iface)) + elif 'NovaPCIPassthrough' in line: + print(" NovaPCIPassthrough:") + elif 'devname' in line: + print(" - devname: \"{}\"".format(sriov_iface)) + elif 'physical_network' in line: + print(" physical_network: \"nfv_sriov\"") + else: + print(line) + + def external_network_cmds(ns): """ Generates external network openstack commands