Source code for networkapi.api_list_config_bgp.models

# -*- coding: utf-8 -*-
import logging

from _mysql_exceptions import OperationalError
from django.core.exceptions import ObjectDoesNotExist
from django.db import models
from django.db.models import Q

from networkapi.api_list_config_bgp.v4 import exceptions
from networkapi.api_list_config_bgp.v4.exceptions import \
    ListConfigBGPAssociatedToRouteMapEntryException
from networkapi.api_list_config_bgp.v4.exceptions import \
    ListConfigBGPIsDeployedException
from networkapi.api_neighbor.models import NeighborV4
from networkapi.api_neighbor.models import NeighborV6
from networkapi.models.BaseModel import BaseModel
from networkapi.util.geral import get_model


[docs]class ListConfigBGPType: p = ('P', 'P') a = ('A', 'A') c = ('C', 'C') list_type = (p, a, c)
[docs]class ListConfigBGP(BaseModel): id = models.AutoField( primary_key=True, db_column='id' ) name = models.CharField( blank=False, max_length=100, db_column='name' ) type = models.CharField( db_column='type', max_length=2, blank=False, choices=ListConfigBGPType.list_type ) config = models.TextField( blank=False, db_column='config' ) equipments = models.ManyToManyField( 'equipamento.Equipamento', through='EquipmentListConfig' ) log = logging.getLogger('ListConfigBGP') class Meta(BaseModel.Meta): db_table = u'list_config_bgp' managed = True def _get_route_map_entries(self): return self.routemapentry_set.all() route_map_entries = property(_get_route_map_entries) def _get_route_map_entries_id(self): return map(int, self.routemapentry_set.all().values_list('id', flat=True)) route_map_entries_id = property(_get_route_map_entries_id)
[docs] @classmethod def get_by_pk(cls, id): """Get ListConfigBGP by id. :return: ListConfigBGP. :raise ListConfigBGPNotFoundError: ListConfigBGP not registered. :raise ListConfigBGPError: Failed to search for the ListConfigBGP. :raise OperationalError: Lock wait timeout exceeded """ try: return ListConfigBGP.objects.get(id=id) except ObjectDoesNotExist: cls.log.error(u'ListConfigBGP not found. pk {}'.format(id)) raise exceptions.ListConfigBGPNotFoundError(id) except OperationalError: cls.log.error(u'Lock wait timeout exceeded') raise OperationalError() except Exception: cls.log.error(u'Failure to search the ListConfigBGP') raise exceptions.ListConfigBGPError( u'Failure to search the ListConfigBGP')
[docs] def create_v4(self, list_config_bgp): """Create ListConfigBGP.""" self.name = list_config_bgp.get('name') self.type = list_config_bgp.get('type') self.config = list_config_bgp.get('config') self.save()
[docs] def update_v4(self, list_config_bgp): """Update ListConfigBGP.""" self.name = list_config_bgp.get('name') self.type = list_config_bgp.get('type') self.config = list_config_bgp.get('config') # Validate self.validate_list_config_bgp() self.save()
[docs] def delete_v4(self): """Delete ListConfigBGP.""" if self.routemapentry_set.count() > 0: raise ListConfigBGPAssociatedToRouteMapEntryException(self) super(ListConfigBGP, self).delete()
[docs] def validate_list_config_bgp(self): routemapentry_set = self.routemapentry_set.all() neighbors_v4 = NeighborV4.objects.filter( Q(created=True), Q(peer_group__route_map_in__routemapentry__in=routemapentry_set) | Q(peer_group__route_map_out__routemapentry__in=routemapentry_set) ) neighbors_v6 = NeighborV6.objects.filter( Q(created=True), Q(peer_group__route_map_in__routemapentry__in=routemapentry_set) | Q(peer_group__route_map_out__routemapentry__in=routemapentry_set) ) if neighbors_v4 or neighbors_v6: raise ListConfigBGPIsDeployedException(self, neighbors_v4, neighbors_v6)
[docs]class EquipmentListConfig(BaseModel): id = models.AutoField( primary_key=True, db_column='id' ) equipment = models.ForeignKey( 'equipamento.Equipamento', db_column='id_equipment' ) list_config_bgp = models.ForeignKey( 'api_list_config_bgp.ListConfigBGP', db_column='id_list_config_bgp' ) class Meta(BaseModel.Meta): db_table = u'equipment_list_config_bgp' managed = True
[docs] def create_v4(self, list_config_bgp): eqpt_model = get_model('equipamento', 'Equipamento') self.equipment = eqpt_model.get_by_pk( list_config_bgp.get('equipment')) self.list_config_bgp = ListConfigBGP.get_by_pk( list_config_bgp.get('list_config_bgp')) self.save()