def create_bridge_vport_iface_for_pnet(restproxy_serv, pg_obj, params):
    l2domain_id = params.get('l2domain_id')
    nuage_subnet_id = params.get('nuage_subnet_id')
    gw_type = params.get('gw_type')
    nuage_vlan_id = params.get('nuage_vlan_id')

    # Create vport of type bridge and attach vlan
    vport_params = {
        'vlan': nuage_vlan_id,
        'type': 'BRIDGE',
        'name': 'Bridge Vport ' + nuage_vlan_id,
        'externalID': params.get('neutron_subnet_id')
    }

    if l2domain_id:
        nuagel2domain = nuagelib.NuageL2Domain()
        vport_response = restproxy_serv.rest_call(
            'POST',
            nuagel2domain.vport_post(l2domain_id),
            nuagel2domain.vport_post_data(vport_params))

        if not nuagel2domain.validate(vport_response):
            raise restproxy.RESTProxyError(nuagel2domain.error_msg)

        if vport_response[VSD_RESP_OBJ]:
            vport_id = vport_response[VSD_RESP_OBJ][0]['ID']
        # Create Bridge interface in the vport
        nuage_vport = nuagelib.NuageVPort()

        bridge_iface = restproxy_serv.rest_call(
            'POST', nuage_vport.post_bridge_interface(vport_id),
            nuage_vport.post_bridge_iface_data(
                constants.L2DOMAIN.upper(),
                "BRIDGE INTERFACE(" + vport_id + ")",
                params.get('neutron_subnet_id')))
        if not nuage_vport.validate(bridge_iface):
            raise restproxy.RESTProxyError(nuage_vport.error_msg)

        # Create a policygroup for this bridge vport and create default rules
        nuage_policygroup_id = \
            pg_obj.create_policygroup_default_allow_any_rule(
                l2domain_id, None, params.get('neutron_subnet_id'), gw_type)
        # Add vport to the policygroup
        pg_obj.update_vport_policygroups(vport_id, [nuage_policygroup_id])
    else:
        nuage_subnet = nuagelib.NuageSubnet()
        vport_response = restproxy_serv.rest_call(
            'POST',
            nuage_subnet.vport_post(nuage_subnet_id),
            nuage_subnet.vport_post_data(vport_params))

        if not nuage_subnet.validate(vport_response):
            raise restproxy.RESTProxyError(nuage_subnet.error_msg)

        if vport_response[VSD_RESP_OBJ]:
            vport_id = vport_response[VSD_RESP_OBJ][0]['ID']
        # Create Bridge interface in the vport
        nuage_vport = nuagelib.NuageVPort()
        bridge_iface = restproxy_serv.rest_call(
            'POST', nuage_vport.post_bridge_interface(vport_id),
            nuage_vport.post_bridge_iface_data(
                "SUBNET",
                "BRIDGE INTERFACE(" + vport_id + ")",
                params.get('neutron_subnet_id')))
        if not nuage_vport.validate(bridge_iface):
            raise restproxy.RESTProxyError(nuage_vport.error_msg)

        # Get rtr id from nuage_subnet_id
        nuage_rtr_id = helper._get_nuage_domain_id_from_subnet(
            restproxy_serv, nuage_subnet_id)
        # Create a policygroup for this bridge vport and create default rules
        nuage_policygroup_id = \
            pg_obj.create_policygroup_default_allow_any_rule(
                None, nuage_rtr_id, params.get('neutron_subnet_id'), gw_type)
        # Add vport to the policygroup
        pg_obj.update_vport_policygroups(vport_id, [nuage_policygroup_id])
Пример #2
0
def _create_vport_interface(subnet_id, pg_obj, restproxy_serv,
                            subn_type, vport_type, params):
    gw_type = params.get('gw_type')
    nuage_vlan_id = params.get('nuage_vlan_id')

    req_params = dict()
    extra_params = {
        'vlan': nuage_vlan_id,
        'externalID': get_vsd_external_id(params.get('externalid'))
    }

    if vport_type == constants.BRIDGE_VPORT_TYPE:
        extra_params['type'] = constants.BRIDGE_VPORT_TYPE
        extra_params['name'] = 'Bridge Vport ' + nuage_vlan_id
        extra_params['externalID'] = get_vsd_external_id(
            params['neutron_subnet_id'])
    else:
        extra_params['type'] = constants.HOST_VPORT_TYPE
        extra_params['name'] = 'Host Vport ' + nuage_vlan_id
        extra_params[constants.PORTSECURITY] = params[constants.PORTSECURITY]

    nuage_vport = nuagelib.NuageVPort(create_params=req_params,
                                      extra_params=extra_params)
    if subn_type == constants.SUBNET:
        req_params['subnet_id'] = subnet_id
        extra_params['net_type'] = constants.SUBNET.upper()
        resource_url = nuage_vport.post_vport_for_subnet()
    else:
        req_params['l2domain_id'] = subnet_id
        extra_params['net_type'] = constants.L2DOMAIN.upper()
        resource_url = nuage_vport.post_vport_for_l2domain()

    # create the vport
    vport = restproxy_serv.post(
        resource_url,
        nuage_vport.post_vport_data(),
        on_res_exists=restproxy_serv.retrieve_by_external_id,
        ignore_err_codes=[restproxy.REST_VLAN_IN_USE_ERR_CODE])[0]

    # create the interface
    nuage_vport_id = vport['ID']
    req_params['vport_id'] = nuage_vport_id

    if vport_type == constants.BRIDGE_VPORT_TYPE:
        # Setting the intf name as "BRIDGE INTERFACE(<vport_id>)"
        extra_params['name'] = "BRIDGE INTERFACE(" + nuage_vport_id + ")"
        nuage_interface = nuagelib.NuageBridgeInterface(
            create_params=req_params,
            extra_params=extra_params)
        resource_url = nuage_interface.post_resource_by_vport()
    else:
        extra_params['ipaddress'] = params['ipaddress']
        extra_params['mac'] = params['mac']
        extra_params['externalID'] = get_vsd_external_id(params['externalid'])

        nuage_interface = nuagelib.NuageHostInterface(
            create_params=req_params,
            extra_params=extra_params)
        resource_url = nuage_interface.post_resource_by_vport()

    vport_intf = restproxy_serv.post(
        resource_url,
        nuage_interface.post_iface_data(),
        on_res_exists=restproxy_serv.retrieve_by_external_id,
        ignore_err_codes=[restproxy.REST_IFACE_EXISTS_ERR_CODE])[0]

    if (not params.get('nuage_managed_subnet') and
            params.get('port_security_enabled')):
        if subn_type == constants.SUBNET:
            # Get rtr id from nuage_subnet_id
            nuage_rtr_id = helper._get_nuage_domain_id_from_subnet(
                restproxy_serv,
                subnet_id)
            _create_policygroup_for_vport(gw_type, None, nuage_rtr_id,
                                          params.get('neutron_subnet_id'),
                                          pg_obj, restproxy_serv, vport,
                                          subn_type)
        else:
            _create_policygroup_for_vport(gw_type, subnet_id, None,
                                          params.get('neutron_subnet_id'),
                                          pg_obj, restproxy_serv, vport,
                                          subn_type)
    if (not params.get('nuage_managed_subnet') and
            not params.get('port_security_enabled')):
        if subn_type == constants.SUBNET:
            nuage_rtr_id = helper._get_nuage_domain_id_from_subnet(
                restproxy_serv,
                subnet_id)
            _add_policy_group_for_port_sec(gw_type, None, nuage_rtr_id, pg_obj,
                                           nuage_vport_id)
        else:
            _add_policy_group_for_port_sec(gw_type, subnet_id, None, pg_obj,
                                           nuage_vport_id)

    ret = {
        'vport': vport,
        'interface': vport_intf
    }
    return ret
Пример #3
0
 def get_nuage_domain_id_from_subnet(self, dom_subn_id):
     return helper._get_nuage_domain_id_from_subnet(self.restproxy,
                                                    dom_subn_id)