Exemple #1
0
    def _disassociate_floatingip(self, context, id):
        l3db_fip = self._get_floatingip(context, id)
        db_namespace = fortinet_db.query_record(context,
                                    fortinet_db.Fortinet_ML2_Namespace,
                                    tenant_id=l3db_fip.tenant_id)
        db_fip = fortinet_db.query_record(context,
                            fortinet_db.Fortinet_FloatingIP_Allocation,
                            floating_ip_address=l3db_fip.floating_ip_address,
                            allocated=True)
        int_intf, ext_intf = utils.get_vlink_intf(self, context,
                                               vdom=db_namespace.vdom)
        db_ip = fortinet_db.query_record(context, models_v2.IPAllocation,
                                         port_id=l3db_fip.fixed_port_id)
        vlan_inf = utils.get_intf(context, db_ip.network_id)
        mappedip = utils.get_ipaddr(db_fip.ip_subnet, 0)
        utils.delete_fwpolicy(self, context,
                              vdom=db_namespace.vdom,
                              srcintf=vlan_inf,
                              srcaddr=l3db_fip.fixed_ip_address,
                              dstintf=int_intf,
                              poolname=mappedip)

        utils.delete_fwaddress(self, context,
                               name=l3db_fip.fixed_ip_address,
                               vdom=db_namespace.vdom)

        utils.delete_fwpolicy(self, context,
                              vdom=db_namespace.vdom,
                              dstaddr=db_fip.floating_ip_address)

        utils.delete_vip(self, context,
                         vdom=db_namespace.vdom,
                         name=db_fip.floating_ip_address)
Exemple #2
0
    def _associate_floatingip(self, context, id, floatingip):
        try:
            l3db_fip = self._get_floatingip(context, id)
            db_namespace = fortinet_db.query_record(context,
                                    fortinet_db.Fortinet_ML2_Namespace,
                                    tenant_id=l3db_fip.tenant_id)

            db_fip = fortinet_db.query_record(context,
                            fortinet_db.Fortinet_FloatingIP_Allocation,
                            floating_ip_address=l3db_fip.floating_ip_address,
                            allocated=True)
            int_intf, ext_intf = utils.get_vlink_intf(self, context,
                                                      vdom=db_namespace.vdom)
            mappedip = utils.get_ipaddr(db_fip.ip_subnet, 0)
            fixed_ip_address = floatingip['floatingip']['fixed_ip_address']
            utils.add_vip(self, context,
                          vdom=db_namespace.vdom,
                          name=db_fip.floating_ip_address,
                          extip=mappedip,
                          extintf=int_intf,
                          mappedip=fixed_ip_address)

            db_ip = fortinet_db.query_record(context, models_v2.IPAllocation,
                                port_id=floatingip['floatingip']['port_id'])
            vlan_inf = utils.get_intf(context, db_ip.network_id)
            utils.add_fwpolicy(self, context,
                               vdom=db_namespace.vdom,
                               srcintf=int_intf,
                               dstintf=vlan_inf,
                               dstaddr=db_fip.floating_ip_address,
                               nat='enable')

            utils.add_fwaddress(self, context,
                                name=fixed_ip_address,
                                vdom=db_namespace.vdom,
                                subnet="%s 255.255.255.255" % fixed_ip_address,
                                associated_interface=vlan_inf)

            db_fwpolicy = utils.add_fwpolicy(self, context,
                               vdom=db_namespace.vdom,
                               srcintf=vlan_inf,
                               srcaddr=fixed_ip_address,
                               dstintf=int_intf,
                               poolname=mappedip)
            utils.head_firewall_policy(self, context,
                                       vdom=db_namespace.vdom,
                                       id=db_fwpolicy.edit_id)
        except Exception as e:
            utils._rollback_on_err(self, context, e)
            raise e
        utils.update_status(self, context, t_consts.TaskStatus.COMPLETED)
Exemple #3
0
    def _disassociate_floatingip(self, context, id):
        l3db_fip = self._get_floatingip(context, id)
        db_namespace = fortinet_db.query_record(
            context,
            fortinet_db.Fortinet_ML2_Namespace,
            tenant_id=l3db_fip.tenant_id)
        db_fip = fortinet_db.query_record(
            context,
            fortinet_db.Fortinet_FloatingIP_Allocation,
            floating_ip_address=l3db_fip.floating_ip_address,
            allocated=True)
        int_intf, ext_intf = utils.get_vlink_intf(self,
                                                  context,
                                                  vdom=db_namespace.vdom)
        db_ip = fortinet_db.query_record(context,
                                         models_v2.IPAllocation,
                                         port_id=l3db_fip.fixed_port_id)
        vlan_inf = utils.get_intf(context, db_ip.network_id)
        mappedip = utils.get_ipaddr(db_fip.ip_subnet, 0)
        utils.delete_fwpolicy(self,
                              context,
                              vdom=db_namespace.vdom,
                              srcintf=vlan_inf,
                              srcaddr=l3db_fip.fixed_ip_address,
                              dstintf=int_intf,
                              poolname=mappedip)

        utils.delete_fwaddress(self,
                               context,
                               name=l3db_fip.fixed_ip_address,
                               vdom=db_namespace.vdom)

        utils.delete_fwpolicy(self,
                              context,
                              vdom=db_namespace.vdom,
                              dstaddr=db_fip.floating_ip_address)

        utils.delete_vip(self,
                         context,
                         vdom=db_namespace.vdom,
                         name=db_fip.floating_ip_address)
Exemple #4
0
    def _release_floatingip(self, context, id):
        """
        :param context:
        :param id: the floatingip id in neutron.db.l3_db.FloatingIP.
        {
                tenant_id=u'3998b33381fb48f694369689065a3760',
                id=u'25e1588a-5ec5-4fbc-bdef-eff8713da8f8',
                floating_ip_address=u'10.160.37.111',
                floating_network_id=u'1c1dbecc-9dac-4311-a346-f147a04c8dc8',
                floating_port_id=u'4b4120d4-77f9-4f82-b823-05876929a1c4',
                fixed_port_id=None,
                fixed_ip_address=None,
                router_id=None,
                last_known_router_id=None,
                status=u'DOWN'
        }
        :return:
        """
        l3db_fip = self._get_floatingip(context, id)
        db_namespace = fortinet_db.query_record(
            context,
            fortinet_db.Fortinet_ML2_Namespace,
            tenant_id=l3db_fip.tenant_id)

        db_fip = fortinet_db.query_record(
            context,
            fortinet_db.Fortinet_FloatingIP_Allocation,
            floating_ip_address=l3db_fip.floating_ip_address,
            allocated=True)
        if not db_fip or not db_namespace:
            return

        int_intf, ext_intf = utils.get_vlink_intf(self,
                                                  context,
                                                  vdom=db_namespace.vdom)
        mappedip = utils.get_ipaddr(db_fip.ip_subnet, 0)

        utils.delete_fwippool(self,
                              context,
                              name=mappedip,
                              vdom=db_namespace.vdom,
                              startip=mappedip)

        utils.delete_fwpolicy(self,
                              context,
                              vdom=const.EXT_VDOM,
                              srcintf=ext_intf,
                              srcaddr=mappedip,
                              dstintf=self._fortigate['ext_interface'],
                              poolname=db_fip.floating_ip_address)

        utils.delete_fwaddress(self,
                               context,
                               name=mappedip,
                               vdom=const.EXT_VDOM,
                               subnet="%s 255.255.255.255" % mappedip)

        utils.delete_fwippool(self,
                              context,
                              name=db_fip.floating_ip_address,
                              vdom=const.EXT_VDOM,
                              startip=db_fip.floating_ip_address)

        utils.delete_routerstatic(self,
                                  context,
                                  vdom=const.EXT_VDOM,
                                  dst="%s 255.255.255.255" % mappedip,
                                  device=ext_intf,
                                  gateway=const.DEF_GW)

        utils.delete_fwpolicy(self,
                              context,
                              vdom=const.EXT_VDOM,
                              dstintf=ext_intf,
                              dstaddr=l3db_fip.floating_ip_address)

        #utils.delete_secondaryip(self, context,
        #                         name=ext_inf,
        #                         vdom=const.EXT_VDOM,
        #                         ip=utils.getip(db_fip.ip_subnet, 1))

        utils.delete_vip(self,
                         context,
                         vdom=const.EXT_VDOM,
                         name=db_fip.vip_name,
                         extip=db_fip.floating_ip_address,
                         extintf='any',
                         mappedip=mappedip)

        fortinet_db.delete_record(
            context,
            fortinet_db.Fortinet_FloatingIP_Allocation,
            vdom=db_namespace.vdom,
            floating_ip_address=db_fip.floating_ip_address,
            vip_name=db_fip.floating_ip_address)
Exemple #5
0
    def _allocate_floatingip(self, context, obj):
        """
        1. mapping floatingip to the one of a pair of internal ips based on
           the vip function.
        2. add another ip of the ip pair to the secondaryip list of
           the external interface.

        obj example:
        {
            'floating_network_id': u'1c1dbecc-9dac-4311-a346-f147a04c8dc8',
            'router_id': None,
            'fixed_ip_address': None,
            'floating_ip_address': u'10.160.37.113',
            'tenant_id': u'3998b33381fb48f694369689065a3760',
            'status': 'DOWN',
            'port_id': None,
            'id': '5ec1b08b-77c1-4e39-80ac-224ee937ee9f'
        }

        The floatingip is a instance of neutron.db.l3_db.FloatingIP, example:
        {
            tenant_id=u'3998b33381fb48f694369689065a3760',
            id=u'25e1588a-5ec5-4fbc-bdef-eff8713da8f8',
            floating_ip_address=u'10.160.37.111',
            floating_network_id=u'1c1dbecc-9dac-4311-a346-f147a04c8dc8',
            floating_port_id=u'4b4120d4-77f9-4f82-b823-05876929a1c4',
            fixed_port_id=None,
            fixed_ip_address=None,
            router_id=None,
            last_known_router_id=None,
            status=u'DOWN'
        }
        """
        try:
            db_namespace = fortinet_db.query_record(
                context,
                fortinet_db.Fortinet_ML2_Namespace,
                tenant_id=obj['tenant_id'])

            db_fip = utils.add_record(
                self,
                context,
                fortinet_db.Fortinet_FloatingIP_Allocation,
                vdom=db_namespace.vdom,
                floating_ip_address=obj['floating_ip_address'],
                vip_name=obj['floating_ip_address'])
            mappedip = utils.get_ipaddr(db_fip.ip_subnet, 0)
            utils.add_vip(self,
                          context,
                          vdom=const.EXT_VDOM,
                          name=db_fip.vip_name,
                          extip=db_fip.floating_ip_address,
                          extintf='any',
                          mappedip=mappedip)

            int_intf, ext_intf = utils.get_vlink_intf(self,
                                                      context,
                                                      vdom=db_namespace.vdom)

            #utils.add_secondaryip(self, context,
            #                      name=ext_inf,
            #                      vdom=db_namespace.vdom,
            #                      ip=utils.getip(db_fip.ip_subnet, 1))

            utils.add_fwpolicy(self,
                               context,
                               vdom=const.EXT_VDOM,
                               srcintf=self._fortigate['ext_interface'],
                               dstintf=ext_intf,
                               dstaddr=db_fip.vip_name,
                               nat='enable')

            utils.add_routerstatic(self,
                                   context,
                                   vdom=const.EXT_VDOM,
                                   dst="%s 255.255.255.255" % mappedip,
                                   device=ext_intf,
                                   gateway=const.DEF_GW)

            utils.add_fwippool(self,
                               context,
                               name=db_fip.floating_ip_address,
                               vdom=const.EXT_VDOM,
                               startip=db_fip.floating_ip_address)

            #ipaddr = utils.get_ipaddr(db_fip.ip_subnet, 2)
            utils.add_fwaddress(self,
                                context,
                                name=mappedip,
                                vdom=const.EXT_VDOM,
                                subnet="%s 255.255.255.255" % mappedip)

            db_fwpolicy = utils.add_fwpolicy(
                self,
                context,
                vdom=const.EXT_VDOM,
                srcintf=ext_intf,
                srcaddr=mappedip,
                dstintf=self._fortigate['ext_interface'],
                poolname=db_fip.floating_ip_address)
            utils.head_firewall_policy(self,
                                       context,
                                       vdom=const.EXT_VDOM,
                                       id=db_fwpolicy.edit_id)

            utils.add_fwippool(self,
                               context,
                               name=mappedip,
                               vdom=db_namespace.vdom,
                               startip=mappedip)
        except Exception as e:
            utils._rollback_on_err(self, context, e)
            raise e
        utils.update_status(self, context, t_consts.TaskStatus.COMPLETED)
Exemple #6
0
    def _associate_floatingip(self, context, id, floatingip):
        try:
            l3db_fip = self._get_floatingip(context, id)
            db_namespace = fortinet_db.query_record(
                context,
                fortinet_db.Fortinet_ML2_Namespace,
                tenant_id=l3db_fip.tenant_id)

            db_fip = fortinet_db.query_record(
                context,
                fortinet_db.Fortinet_FloatingIP_Allocation,
                floating_ip_address=l3db_fip.floating_ip_address,
                allocated=True)
            int_intf, ext_intf = utils.get_vlink_intf(self,
                                                      context,
                                                      vdom=db_namespace.vdom)
            mappedip = utils.get_ipaddr(db_fip.ip_subnet, 0)
            fixed_ip_address = floatingip['floatingip']['fixed_ip_address']
            utils.add_vip(self,
                          context,
                          vdom=db_namespace.vdom,
                          name=db_fip.floating_ip_address,
                          extip=mappedip,
                          extintf=int_intf,
                          mappedip=fixed_ip_address)

            db_ip = fortinet_db.query_record(
                context,
                models_v2.IPAllocation,
                port_id=floatingip['floatingip']['port_id'])
            vlan_inf = utils.get_intf(context, db_ip.network_id)
            utils.add_fwpolicy(self,
                               context,
                               vdom=db_namespace.vdom,
                               srcintf=int_intf,
                               dstintf=vlan_inf,
                               dstaddr=db_fip.floating_ip_address,
                               nat='enable')

            utils.add_fwaddress(self,
                                context,
                                name=fixed_ip_address,
                                vdom=db_namespace.vdom,
                                subnet="%s 255.255.255.255" % fixed_ip_address,
                                associated_interface=vlan_inf)

            db_fwpolicy = utils.add_fwpolicy(self,
                                             context,
                                             vdom=db_namespace.vdom,
                                             srcintf=vlan_inf,
                                             srcaddr=fixed_ip_address,
                                             dstintf=int_intf,
                                             poolname=mappedip)
            utils.head_firewall_policy(self,
                                       context,
                                       vdom=db_namespace.vdom,
                                       id=db_fwpolicy.edit_id)
        except Exception as e:
            utils._rollback_on_err(self, context, e)
            raise e
        utils.update_status(self, context, t_consts.TaskStatus.COMPLETED)
Exemple #7
0
    def _release_floatingip(self, context, id):
        """
        :param context:
        :param id: the floatingip id in neutron.db.l3_db.FloatingIP.
        {
                tenant_id=u'3998b33381fb48f694369689065a3760',
                id=u'25e1588a-5ec5-4fbc-bdef-eff8713da8f8',
                floating_ip_address=u'10.160.37.111',
                floating_network_id=u'1c1dbecc-9dac-4311-a346-f147a04c8dc8',
                floating_port_id=u'4b4120d4-77f9-4f82-b823-05876929a1c4',
                fixed_port_id=None,
                fixed_ip_address=None,
                router_id=None,
                last_known_router_id=None,
                status=u'DOWN'
        }
        :return:
        """
        l3db_fip = self._get_floatingip(context, id)
        db_namespace = fortinet_db.query_record(context,
                                fortinet_db.Fortinet_ML2_Namespace,
                                tenant_id=l3db_fip.tenant_id)

        db_fip = fortinet_db.query_record(context,
                            fortinet_db.Fortinet_FloatingIP_Allocation,
                            floating_ip_address=l3db_fip.floating_ip_address,
                            allocated=True)
        if not db_fip or not db_namespace:
            return

        int_intf, ext_intf = utils.get_vlink_intf(self, context,
                                                 vdom=db_namespace.vdom)
        mappedip = utils.get_ipaddr(db_fip.ip_subnet, 0)

        utils.delete_fwippool(self, context,
                              name=mappedip,
                              vdom=db_namespace.vdom,
                              startip=mappedip)

        utils.delete_fwpolicy(self, context,
                              vdom=const.EXT_VDOM,
                              srcintf=ext_intf,
                              srcaddr=mappedip,
                              dstintf=self._fortigate['ext_interface'],
                              poolname=db_fip.floating_ip_address)

        utils.delete_fwaddress(self, context,
                               name=mappedip,
                               vdom=const.EXT_VDOM,
                               subnet="%s 255.255.255.255" % mappedip)

        utils.delete_fwippool(self, context,
                              name=db_fip.floating_ip_address,
                              vdom=const.EXT_VDOM,
                              startip=db_fip.floating_ip_address)

        utils.delete_routerstatic(self, context,
                                  vdom=const.EXT_VDOM,
                                  dst="%s 255.255.255.255" % mappedip,
                                  device=ext_intf,
                                  gateway=const.DEF_GW)

        utils.delete_fwpolicy(self, context,
                              vdom=const.EXT_VDOM,
                              dstintf=ext_intf,
                              dstaddr=l3db_fip.floating_ip_address)

        #utils.delete_secondaryip(self, context,
        #                         name=ext_inf,
        #                         vdom=const.EXT_VDOM,
        #                         ip=utils.getip(db_fip.ip_subnet, 1))


        utils.delete_vip(self, context,
                         vdom=const.EXT_VDOM,
                         name=db_fip.vip_name,
                         extip=db_fip.floating_ip_address,
                         extintf='any',
                         mappedip=mappedip)

        fortinet_db.delete_record(context,
                        fortinet_db.Fortinet_FloatingIP_Allocation,
                        vdom=db_namespace.vdom,
                        floating_ip_address=db_fip.floating_ip_address,
                        vip_name=db_fip.floating_ip_address)
Exemple #8
0
    def _allocate_floatingip(self, context, obj):
        """
        1. mapping floatingip to the one of a pair of internal ips based on
           the vip function.
        2. add another ip of the ip pair to the secondaryip list of
           the external interface.

        obj example:
        {
            'floating_network_id': u'1c1dbecc-9dac-4311-a346-f147a04c8dc8',
            'router_id': None,
            'fixed_ip_address': None,
            'floating_ip_address': u'10.160.37.113',
            'tenant_id': u'3998b33381fb48f694369689065a3760',
            'status': 'DOWN',
            'port_id': None,
            'id': '5ec1b08b-77c1-4e39-80ac-224ee937ee9f'
        }

        The floatingip is a instance of neutron.db.l3_db.FloatingIP, example:
        {
            tenant_id=u'3998b33381fb48f694369689065a3760',
            id=u'25e1588a-5ec5-4fbc-bdef-eff8713da8f8',
            floating_ip_address=u'10.160.37.111',
            floating_network_id=u'1c1dbecc-9dac-4311-a346-f147a04c8dc8',
            floating_port_id=u'4b4120d4-77f9-4f82-b823-05876929a1c4',
            fixed_port_id=None,
            fixed_ip_address=None,
            router_id=None,
            last_known_router_id=None,
            status=u'DOWN'
        }
        """
        try:
            db_namespace = fortinet_db.query_record(context,
                                        fortinet_db.Fortinet_ML2_Namespace,
                                        tenant_id=obj['tenant_id'])

            db_fip = utils.add_record(self, context,
                            fortinet_db.Fortinet_FloatingIP_Allocation,
                            vdom=db_namespace.vdom,
                            floating_ip_address=obj['floating_ip_address'],
                            vip_name=obj['floating_ip_address'])
            mappedip = utils.get_ipaddr(db_fip.ip_subnet, 0)
            utils.add_vip(self, context,
                          vdom=const.EXT_VDOM,
                          name=db_fip.vip_name,
                          extip=db_fip.floating_ip_address,
                          extintf='any',
                          mappedip=mappedip)

            int_intf, ext_intf = utils.get_vlink_intf(self, context,
                                                   vdom=db_namespace.vdom)

            #utils.add_secondaryip(self, context,
            #                      name=ext_inf,
            #                      vdom=db_namespace.vdom,
            #                      ip=utils.getip(db_fip.ip_subnet, 1))

            utils.add_fwpolicy(self, context,
                               vdom=const.EXT_VDOM,
                               srcintf=self._fortigate['ext_interface'],
                               dstintf=ext_intf,
                               dstaddr=db_fip.vip_name,
                               nat='enable')

            utils.add_routerstatic(self, context,
                                   vdom=const.EXT_VDOM,
                                   dst="%s 255.255.255.255" % mappedip,
                                   device=ext_intf,
                                   gateway=const.DEF_GW)

            utils.add_fwippool(self, context,
                               name=db_fip.floating_ip_address,
                               vdom=const.EXT_VDOM,
                               startip=db_fip.floating_ip_address)

            #ipaddr = utils.get_ipaddr(db_fip.ip_subnet, 2)
            utils.add_fwaddress(self, context,
                                name=mappedip,
                                vdom=const.EXT_VDOM,
                                subnet="%s 255.255.255.255" % mappedip)

            db_fwpolicy = utils.add_fwpolicy(self, context,
                               vdom=const.EXT_VDOM,
                               srcintf=ext_intf,
                               srcaddr=mappedip,
                               dstintf=self._fortigate['ext_interface'],
                               poolname=db_fip.floating_ip_address)
            utils.head_firewall_policy(self, context,
                                       vdom=const.EXT_VDOM,
                                       id=db_fwpolicy.edit_id)

            utils.add_fwippool(self, context,
                               name=mappedip,
                               vdom=db_namespace.vdom,
                               startip=mappedip)
        except Exception as e:
            utils._rollback_on_err(self, context, e)
            raise e
        utils.update_status(self, context, t_consts.TaskStatus.COMPLETED)