예제 #1
0
    def update_subnet(self, neutron_subnet, params):
        type = constants.NETWORK_TYPE_L3
        new_name = neutron_subnet.get('name')
        if params['type']:
            type = constants.NETWORK_TYPE_L2

        nuagedhcpoptions = dhcpoptions.NuageDhcpOptions(self.restproxy)
        nuagedhcpoptions.update_nuage_dhcp(neutron_subnet,
                                           parent_id=params['parent_id'],
                                           network_type=type)

        if type == constants.NETWORK_TYPE_L2 and 'dhcp_ip' in params:
            nuagel2domtemplate = nuagelib.NuageL2DomTemplate()
            if neutron_subnet.get('enable_dhcp'):
                # Enable dhcpmanaged on the l2domain template
                net = params['net']
                data = {
                    "DHCPManaged": neutron_subnet['enable_dhcp'],
                    "address": str(net.ip),
                    "netmask": str(net.netmask),
                    "gateway": params['dhcp_ip'],
                }
                response = self.restproxy.rest_call(
                    'PUT', nuagel2domtemplate.put_resource(params['type']),
                    data)
            else:
                # Disable dhcpmanaged on the l2domain template
                response = self.restproxy.rest_call(
                    'PUT', nuagel2domtemplate.put_resource(params['type']),
                    {'DHCPManaged': False})
            if not nuagel2domtemplate.validate(response):
                raise restproxy.RESTProxyError(nuagel2domtemplate.error_msg)
        if new_name:
            # update the description on the VSD for this subnet if required
            # If a subnet is updated from horizon, we get the name of the
            # subnet aswell in the subnet dict for update.
            if type == constants.NETWORK_TYPE_L2:
                nuagel2domain = nuagelib.NuageL2Domain()
                l2dom = self.restproxy.rest_call(
                    'GET', nuagel2domain.get_resource(params['parent_id']), '')
                if not nuagel2domain.validate(l2dom):
                    raise restproxy.RESTProxyError(nuagel2domain.error_msg)
                if nuagel2domain.get_description(l2dom) != new_name:
                    response = self.restproxy.rest_call(
                        'PUT', nuagel2domain.put_resource(params['parent_id']),
                        {'description': neutron_subnet['name']})
                    if not nuagel2domain.validate(response):
                        raise restproxy.RESTProxyError(nuagel2domain.error_msg)
            else:
                nuagesubn = nuagelib.NuageSubnet()
                l3dom = self.restproxy.rest_call(
                    'GET', nuagesubn.get_resource(params['parent_id']), '')
                if not nuagesubn.validate(l3dom):
                    raise restproxy.RESTProxyError(nuagesubn.error_msg)
                if nuagesubn.get_description(l3dom) != new_name:
                    response = self.restproxy.rest_call(
                        'PUT', nuagesubn.put_resource(params['parent_id']),
                        {'description': neutron_subnet['name']})
                    if not nuagesubn.validate(response):
                        raise restproxy.RESTProxyError(nuagesubn.error_msg)
예제 #2
0
 def update_l2domain_template(self, nuage_l2dom_tmplt_id, **kwargs):
     # Generate payload for the update
     data = self._gen_payload_l2domain_and_template(**kwargs)
     if data:
         nuage_l2domain_template = nuagelib.NuageL2DomTemplate()
         self.restproxy.put(
             nuage_l2domain_template.put_resource(nuage_l2dom_tmplt_id),
             data)
예제 #3
0
def get_l2domid_for_netpartition(restproxy_serv, np_id, name):
    req_params = {'net_partition_id': np_id, 'name': name}
    nuagel2domtemplate = nuagelib.NuageL2DomTemplate(create_params=req_params)
    l2_template = restproxy_serv.get(
        nuagel2domtemplate.list_resource(),
        extra_headers=nuagel2domtemplate.extra_headers_get(),
        required=True)
    return l2_template[0]['ID'] if l2_template else None
 def _create_default_l2template_for_netpart(self, np_id, name):
     req_params = {'net_partition_id': np_id, 'name': name}
     extra_params = {'externalID': np_id + '@openstack'}
     nuagel2domtemplate = nuagelib.NuageL2DomTemplate(
         create_params=req_params, extra_params=extra_params)
     l2_dom_temp = self.restproxy.post(nuagel2domtemplate.post_resource(),
                                       nuagel2domtemplate.post_data())[0]
     return l2_dom_temp['ID']
예제 #5
0
def get_l2domid_for_netpartition(restproxy_serv, np_id, name):
    req_params = {'net_partition_id': np_id, 'name': name}
    nuagel2domtemplate = \
        nuagelib.NuageL2DomTemplate(create_params=req_params)
    response = restproxy_serv.rest_call('GET',
                                        nuagel2domtemplate.list_resource(), '',
                                        nuagel2domtemplate.extra_headers_get())

    if not nuagel2domtemplate.validate(response):
        raise restproxy.RESTProxyError(nuagel2domtemplate.error_msg)
    return nuagel2domtemplate.get_templateid(response)
예제 #6
0
 def update_l2domain_for_stack_exchange(self, mapping, **data):
     nuagel2domtmplt = nuagelib.NuageL2DomTemplate()
     self.restproxy.put(
         nuagel2domtmplt.put_resource(mapping['nuage_l2dom_tmplt_id']),
         data)
     # update the description for l2domain
     nuagel2dom = nuagelib.NuageL2Domain()
     if data.get('description'):
         l2dom_data = {'description': data['description']}
         self.restproxy.put(
             nuagel2dom.put_resource(mapping['nuage_subnet_id']),
             l2dom_data)
예제 #7
0
 def _create_default_l2template_for_netpart(self, np_id, name):
     req_params = {'net_partition_id': np_id, 'name': name}
     extra_params = {'externalID': np_id + '@openstack'}
     nuagel2domtemplate = \
         nuagelib.NuageL2DomTemplate(create_params=req_params,
                                     extra_params=extra_params)
     response = self.restproxy.rest_call('POST',
                                         nuagel2domtemplate.post_resource(),
                                         nuagel2domtemplate.post_data())
     if not nuagel2domtemplate.validate(response):
         raise restproxy.RESTProxyError(nuagel2domtemplate.error_msg)
     return nuagel2domtemplate.get_templateid(response)
예제 #8
0
    def delete_subnet(self, id):
        params = {'externalID': get_vsd_external_id(id)}
        nuagel2domain = nuagelib.NuageL2Domain(create_params=params)
        response = self.restproxy.rest_call(
            'GET',
            nuagel2domain.get_resource_with_ext_id(),
            '',
            extra_headers=nuagel2domain.extra_headers_get())

        if nuagel2domain.get_validate(response):
            nuagel2domtemplates = nuagelib.NuageL2DomTemplate()
            template_id = nuagel2domain.get_template_id(response)
            resp_temp = self.restproxy.rest_call(
                'GET', nuagel2domtemplates.get_resource(template_id), '')
            if not nuagel2domtemplates.validate(resp_temp):
                raise restproxy.RESTProxyError(nuagel2domtemplates.error_msg)
            l2domain_id = nuagel2domain.get_domainid(response)

            try:
                # Delete bridge_interface and bridge vport if it is subnet
                # created for providernet
                pnet_helper.delete_resources_created_for_l2dom_providernet(
                    self.restproxy, l2domain_id)
                # delete subnet
                l2dom_delete_response = self.restproxy.rest_call(
                    'DELETE', nuagel2domain.delete_resource(l2domain_id), '')
                if not nuagel2domain.delete_validate(l2dom_delete_response):
                    code = nuagel2domain.get_error_code(l2dom_delete_response)
                    raise restproxy.RESTProxyError(nuagel2domain.error_msg,
                                                   error_code=code)
            except Exception:
                raise

            if response[3][0]['name'] == resp_temp[3][0]['name']:
                try:
                    self.restproxy.rest_call(
                        'DELETE',
                        nuagel2domtemplates.delete_resource(template_id), '')
                except Exception:
                    raise
예제 #9
0
    def delete_subnet(self, l2dom_id, mapping):
        nuagel2domain = nuagelib.NuageL2Domain()
        l2dom = self.restproxy.get(nuagel2domain.get_resource(l2dom_id))[0]
        nuagel2domtemplate = nuagelib.NuageL2DomTemplate()
        if l2dom:
            template_id = l2dom['templateID']
            template = self.restproxy.get(
                nuagel2domtemplate.get_resource(template_id))[0]
            l2domain_id = l2dom['ID']

            # delete subnet
            self.restproxy.delete(nuagel2domain.delete_resource(l2domain_id))

            if template and l2dom['name'] == template['name']:
                self.restproxy.delete(
                    nuagel2domtemplate.delete_resource(template_id))

        elif mapping and mapping['nuage_l2dom_tmplt_id']:
            # Delete hanging l2dom_template
            self.restproxy.delete(
                nuagel2domtemplate.delete_resource(
                    mapping['nuage_l2dom_tmplt_id']))
예제 #10
0
    def create_subnet(self, ipv4_subnet, ipv6_subnet, params):
        subnet = ipv4_subnet or ipv6_subnet
        req_params = {
            'net_partition_id': params['netpart_id'],
            'name': helper.get_subnet_name(subnet)
        }
        ext_params = {
            'externalID': helper.get_subnet_external_id(subnet),
            'DHCPManaged': True,
            'dualStackDynamicIPAllocation': False
        }

        if ipv4_subnet:
            net = netaddr.IPNetwork(ipv4_subnet['cidr'])
            ext_params.update({
                'address': str(net.ip),
                'netmask': str(net.netmask),
                'gateway': params['dhcp_ip'],
                'IPType': constants.IPV4,
                'enableDHCPv4': ipv4_subnet['enable_dhcp']
            })
        elif ipv6_subnet:
            net = netaddr.IPNetwork(ipv6_subnet['cidr'])
            ext_params.update({
                'IPv6Address': str(net.cidr),
                'IPv6Gateway': params['dhcpv6_ip'],
                'IPType': constants.IPV6,
                'enableDHCPv6': ipv6_subnet['enable_dhcp']
            })
        if ipv4_subnet and ipv6_subnet:
            params.update({'network_id': subnet['network_id']})
            ext_params.update(
                helper.get_subnet_update_data(ipv4_subnet=ipv4_subnet,
                                              ipv6_subnet=ipv6_subnet,
                                              params=params))
        if not ext_params.get('description'):
            ext_params['description'] = helper.get_subnet_description(subnet)

        nuagel2domtmplt = nuagelib.NuageL2DomTemplate(create_params=req_params,
                                                      extra_params=ext_params)
        nuagel2domtemplate = self.restproxy.post(
            nuagel2domtmplt.post_resource(),
            nuagel2domtmplt.post_data(),
            on_res_exists=self.restproxy.retrieve_by_ext_id_and_cidr)[0]

        l2dom_tmplt_id = nuagel2domtemplate['ID']

        req_params['template'] = l2dom_tmplt_id
        req_params['externalID'] = ext_params['externalID']

        ext_params = {
            'address': ext_params.get('address'),
            'IPv6Address': ext_params.get('IPv6Address'),
            'description': ext_params['description'],
            'IPType': ext_params['IPType'],
            'ingressReplicationEnabled': params['ingressReplicationEnabled']
        }

        if (params.get('tunnelType') == constants.VSD_TUNNEL_TYPES['MPLS']):
            ext_params['l2EncapType'] = constants.VSD_TUNNEL_TYPES['MPLS']

        nuagel2domain = nuagelib.NuageL2Domain(create_params=req_params,
                                               extra_params=ext_params)
        try:
            l2domain = self.restproxy.post(
                nuagel2domain.post_resource(),
                nuagel2domain.post_data(),
                on_res_exists=self.restproxy.retrieve_by_ext_id_and_cidr)[0]
        except Exception:
            self.restproxy.delete(
                nuagel2domtmplt.delete_resource(nuagel2domtemplate['ID']))
            raise

        l2domain_id = l2domain['ID']
        subnet_dict = {
            'nuage_l2template_id': l2dom_tmplt_id,
            'nuage_l2domain_id': l2domain_id,
            'nuage_external_id': strip_cms_id(l2domain['externalID']),
            'nuage_parent_id': l2domain['parentID']
        }

        nuagedhcpoptions = dhcpoptions.NuageDhcpOptions(self.restproxy)
        if ipv4_subnet:
            nuagedhcpoptions.create_nuage_dhcp(
                ipv4_subnet,
                parent_id=l2domain_id,
                network_type=constants.NETWORK_TYPE_L2)
        if ipv6_subnet:
            nuagedhcpoptions.create_nuage_dhcp(
                ipv6_subnet,
                parent_id=l2domain_id,
                network_type=constants.NETWORK_TYPE_L2)

        nuage_userid, nuage_groupid = helper.create_usergroup(
            self.restproxy, params['tenant_id'], params['netpart_id'],
            params.get('tenant_name'))
        subnet_dict['nuage_userid'] = nuage_userid
        subnet_dict['nuage_groupid'] = nuage_groupid

        self._attach_nuage_group_to_l2domain(nuage_groupid, l2domain_id,
                                             params['netpart_id'],
                                             params.get('shared'),
                                             params['tenant_id'])
        self._create_nuage_def_l2domain_acl(
            l2domain_id, subnet, allow_non_ip=params['allow_non_ip'])
        self._create_nuage_def_l2domain_adv_fwd_template(l2domain_id, subnet)

        return subnet_dict
예제 #11
0
    def create_subnet(self, os_subnet, params):
        net = netaddr.IPNetwork(os_subnet['cidr'])
        req_params = {
            'net_partition_id': params['netpart_id'],
            'name': os_subnet['id'],
        }
        ext_params = {
            "DHCPManaged": os_subnet['enable_dhcp'],
            "address": str(net.ip),
            "netmask": str(net.netmask),
            "gateway": params['dhcp_ip'],
            'externalID': get_vsd_external_id(os_subnet['id'])
        }
        nuagel2domtmplt = nuagelib.NuageL2DomTemplate(create_params=req_params,
                                                      extra_params=ext_params)
        nuagel2domtemplate = self.restproxy.post(
            nuagel2domtmplt.post_resource(),
            nuagel2domtmplt.post_data(),
            on_res_exists=self.restproxy.retrieve_by_name)[0]

        l2dom_tmplt_id = nuagel2domtemplate['ID']

        req_params = {
            'net_partition_id': params['netpart_id'],
            'name': os_subnet['id'],
            'template': l2dom_tmplt_id,
            'externalID': get_vsd_external_id(os_subnet['id'])
        }
        ext_params = {'description': os_subnet['name']}
        nuagel2domain = nuagelib.NuageL2Domain(create_params=req_params,
                                               extra_params=ext_params)
        try:
            l2domain = self.restproxy.post(nuagel2domain.post_resource(),
                                           nuagel2domain.post_data())[0]
        except Exception:
            self.restproxy.delete(
                nuagel2domtmplt.delete_resource(nuagel2domtemplate['ID']))
            raise

        l2domain_id = l2domain['ID']
        subnet_dict = {
            'nuage_l2template_id': l2dom_tmplt_id,
            'nuage_l2domain_id': l2domain_id,
            'nuage_external_id': strip_cms_id(l2domain['externalID']),
            'nuage_parent_id': l2domain['parentID']
        }

        nuagedhcpoptions = dhcpoptions.NuageDhcpOptions(self.restproxy)
        nuagedhcpoptions.create_nuage_dhcp(
            os_subnet,
            parent_id=l2domain_id,
            network_type=constants.NETWORK_TYPE_L2)

        nuage_userid, nuage_groupid = \
            helper.create_usergroup(self.restproxy,
                                    params['tenant_id'],
                                    params['netpart_id'])
        subnet_dict['nuage_userid'] = nuage_userid
        subnet_dict['nuage_groupid'] = nuage_groupid

        self._attach_nuage_group_to_l2domain(nuage_groupid, l2domain_id,
                                             params['netpart_id'],
                                             params.get('shared'),
                                             params['tenant_id'])
        self._create_nuage_def_l2domain_acl(l2domain_id, os_subnet['id'])
        self._create_nuage_def_l2domain_adv_fwd_template(
            l2domain_id, os_subnet['id'])

        pnet_binding = params.get('pnet_binding', None)
        if pnet_binding:
            pnet_params = {
                'pnet_binding': pnet_binding,
                'netpart_id': params['netpart_id'],
                'l2domain_id': l2domain_id,
                'neutron_subnet_id': os_subnet['id']
            }
            try:
                pnet_helper.process_provider_network(self.restproxy,
                                                     self.policygroups,
                                                     pnet_params)
            except Exception:
                self.delete_subnet(os_subnet['id'])
                raise

        return subnet_dict