def create_v4(self, peer_group, user): """Create PeerGroup.""" routemap_model = get_model('api_route_map', 'RouteMap') route_map_in_id = peer_group.get('route_map_in') route_map_out_id = peer_group.get('route_map_out') self.route_map_in = routemap_model.get_by_pk(route_map_in_id) self.route_map_out = routemap_model.get_by_pk(route_map_out_id) self.name = peer_group.get('name') # Validation self.check_route_map_in_and_out_are_equal() self.check_route_maps_already_in_other_peer_groups() self.save() # Save relationships with environments environment_peergroup_model = get_model('api_peer_group', 'EnvironmentPeerGroup') for id_environment in peer_group.get('environments'): environment_peergroup_model().create_v4({ 'peer_group': self.id, 'environment': id_environment }) # Permissions object_group_perm_model = get_model('api_ogp', 'ObjectGroupPermission') object_group_perm_model().create_perms( peer_group, self.id, AdminPermission.OBJ_TYPE_PEER_GROUP, user)
def update_v4(self, peer_group, user): """Update PeerGroup.""" self.name = peer_group.get('name') # Validation self.check_peer_group_is_in_deployed_neighbors() self.save() environment_ids = peer_group.get('environments') # Get current associates current = self.environmentpeergroup_set \ .filter(environment__in=environment_ids) \ .values_list('environment', flat=True) # Creates new associate for id_environment in environment_ids: if id_environment not in current: EnvironmentPeerGroup().create_v4({ 'peer_group': self.id, 'environment': id_environment }) # Removes old associates for environment_peer_group in self.environmentpeergroup_set\ .exclude(environment__in=environment_ids): environment_peer_group.delete_v4() # Permissions object_group_perm_model = get_model('api_ogp', 'ObjectGroupPermission') object_group_perm_model().update_perms( peer_group, self.id, AdminPermission.OBJ_TYPE_PEER_GROUP, user)
def check_permissions_in_peer_group(neighbor, user): obj_group_perm_general = get_model('api_ogp', 'ObjectGroupPermissionGeneral') obj_group_perm = get_model('api_ogp', 'ObjectGroupPermission') # Peer Group General perms_general = obj_group_perm_general.objects.filter( Q(write=True), Q(user_group__id__in=user.grupos.all()), Q(object_type__name=AdminPermission.OBJ_TYPE_PEER_GROUP)) # Peer Group Specific perms_specific = obj_group_perm.objects.filter( Q(write=True), Q(object_value=neighbor.peer_group.id), Q(user_group__id__in=user.grupos.all()), Q(object_type__name=AdminPermission.OBJ_TYPE_PEER_GROUP)) if not perms_general and not perms_specific: raise DontHavePermissionForPeerGroupException(neighbor)
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()
def deploy(self): """Deploy NeighborV6.""" self.created = True self.save() EquipmentRouteMap = get_model('api_route_map', 'EquipmentRouteMap') EquipmentListConfig = get_model('api_list_config_bgp', 'EquipmentListConfig') equipment = self.local_ip.equipments[0] route_map_out = self.peer_group.route_map_out route_map_in = self.peer_group.route_map_in eqpt_route_map = EquipmentRouteMap.objects.filter( equipment=equipment, route_map=route_map_in) if not eqpt_route_map: EquipmentRouteMap().create_v4({ 'equipment': equipment.id, 'route_map': route_map_in.id }) eqpt_route_map = EquipmentRouteMap.objects.filter( equipment=equipment, route_map=route_map_out) if not eqpt_route_map: EquipmentRouteMap().create_v4({ 'equipment': equipment.id, 'route_map': route_map_out.id }) entries = route_map_out.route_map_entries | route_map_in.route_map_entries for entry in entries: eqpt_list_config = EquipmentListConfig.objects.filter( equipment=equipment, route_map=entry.list_config_bgp) if not eqpt_list_config: EquipmentListConfig().create_v4({ 'equipment': equipment.id, 'list_config_bgp': entry.list_config_bgp.id })
def update_v4(self, route_map_entry): """Update RouteMapEntry.""" listconfigbgp_model = get_model('api_list_config_bgp', 'ListConfigBGP') self.action = route_map_entry.get('action') self.action_reconfig = route_map_entry.get('action_reconfig') self.order = route_map_entry.get('order') self.check_route_map_already_deployed() self.save()
def create_v4(self, environment_peergroup): """Create EnvironmentPeerGroup.""" environment_model = get_model('ambiente', 'Ambiente') environment_id = environment_peergroup.get('environment') peer_group_id = environment_peergroup.get('peer_group') self.environment = environment_model.get_by_pk(environment_id) self.peer_group = PeerGroup.get_by_pk(peer_group_id) self.save()
def create_v4(self, environment_peergroup): """Create EnvironmentPeerGroup.""" environment_model = get_model('ambiente', 'Ambiente') environment_id = environment_peergroup.get('environment') peer_group_id = environment_peergroup.get('peer_group') self.environment = environment_model.get_by_pk(environment_id) self.peer_group = PeerGroup.get_by_pk(peer_group_id) self.save()
def undeploy(self): """Deploy NeighborV6.""" self.created = False self.save() EquipmentRouteMap = get_model('api_route_map', 'EquipmentRouteMap') EquipmentListConfig = get_model('api_list_config_bgp', 'EquipmentListConfig') route_map_out = self.peer_group.route_map_out route_map_in = self.peer_group.route_map_in equipment = self.local_ip.equipments[0] neighbor_v4, neighbor_v6 = get_neighbors_route_map( route_map_in, equipment) neighbor_v6 = neighbor_v6.exclude(id=self.id) if not neighbor_v4 and not neighbor_v6: EquipmentRouteMap.objects.filter(equipment=equipment, route_map=route_map_in).delete() neighbor_v4, neighbor_v6 = get_neighbors_route_map( route_map_out, equipment) neighbor_v6 = neighbor_v6.exclude(id=self.id) if not neighbor_v4 and not neighbor_v6: EquipmentRouteMap.objects.filter(equipment=equipment, route_map=route_map_out).delete() entries = route_map_out.route_map_entries | route_map_in.route_map_entries for entry in entries: neighbor_v4, neighbor_v6 = get_neighbors_list_config_bgp( entry.list_config_bgp, equipment) neighbor_v6 = neighbor_v6.exclude(id=self.id) if not neighbor_v4 and not neighbor_v6: EquipmentListConfig.objects.filter( equipment=equipment, route_map=entry.list_config_bgp).delete()
def create_v4(self, peer_group, user): """Create PeerGroup.""" routemap_model = get_model('api_route_map', 'RouteMap') route_map_in_id = peer_group.get('route_map_in') route_map_out_id = peer_group.get('route_map_out') self.route_map_in = routemap_model.get_by_pk( route_map_in_id) if route_map_in_id else None self.route_map_out = routemap_model.get_by_pk( route_map_out_id) if route_map_out_id else None self.name = peer_group.get('name') # Validation if route_map_in_id and route_map_out_id: self.check_route_map_in_and_out_are_equal() # self.check_route_maps_already_in_other_peer_groups() self.save() # Save relationships with environments environment_peergroup_model = get_model('api_peer_group', 'EnvironmentPeerGroup') for id_environment in peer_group.get('environments'): environment_peergroup_model().create_v4({ 'peer_group': self.id, 'environment': id_environment }) # Permissions object_group_perm_model = get_model('api_ogp', 'ObjectGroupPermission') object_group_perm_model().create_perms( peer_group, self.id, AdminPermission.OBJ_TYPE_PEER_GROUP, user)
def delete_v4(self): """Delete PeerGroup.""" self.check_peer_group_associated_to_neighbors() # Deletes Permissions object_group_perm_model = get_model('api_ogp', 'ObjectGroupPermission') object_group_perm_model.objects.filter( object_type__name=AdminPermission.OBJ_TYPE_PEER_GROUP, object_value=self.id).delete() for environment_peergroup in self.environmentpeergroup_set.all(): environment_peergroup.delete_v4() super(PeerGroup, self).delete()
def create_v4(self, route_map_entry): """Create RouteMapEntry.""" listconfigbgp_model = get_model('api_list_config_bgp', 'ListConfigBGP') self.action = route_map_entry.get('action') self.action_reconfig = route_map_entry.get('action_reconfig') self.order = route_map_entry.get('order') self.list_config_bgp = listconfigbgp_model.get_by_pk( route_map_entry.get('list_config_bgp')) self.route_map = RouteMap.get_by_pk(route_map_entry.get('route_map')) self.check_list_config_bgp_already_in_route_map_entries() self.check_route_map_already_deployed() self.save()
def delete_v4(self): """Delete PeerGroup.""" self.check_peer_group_associated_to_neighbors() # Deletes Permissions object_group_perm_model = get_model('api_ogp', 'ObjectGroupPermission') object_group_perm_model.objects.filter( object_type__name=AdminPermission.OBJ_TYPE_PEER_GROUP, object_value=self.id ).delete() for environment_peergroup in self.environmentpeergroup_set.all(): environment_peergroup.delete_v4() super(PeerGroup, self).delete()
def update_v4(self, neighbor_map): """Update Neighbor.""" vi_model = get_model('api_virtual_interface', 'VirtualInterface') self.remote_as = neighbor_map.get('remote_as') self.remote_ip = neighbor_map.get('remote_ip') self.password = neighbor_map.get('password') self.maximum_hops = neighbor_map.get('maximum_hops') self.timer_keepalive = neighbor_map.get('timer_keepalive') self.timer_timeout = neighbor_map.get('timer_timeout') self.description = neighbor_map.get('description') self.soft_reconfiguration = neighbor_map.get('soft_reconfiguration') self.community = neighbor_map.get('community') self.remove_private_as = neighbor_map.get('remove_private_as') self.next_hop_self = neighbor_map.get('next_hop_self') self.kind = neighbor_map.get('kind') # self.created = neighbor_map.get('created') self.virtual_interface = vi_model.get_by_pk( neighbor_map.get('virtual_interface')) self.save()