Commit 18f7cc97 authored by Mohammad Ismaeel's avatar Mohammad Ismaeel
Browse files

Delete oband

parent 1524d8bb
Loading
Loading
Loading
Loading
+22 −11
Original line number Diff line number Diff line
@@ -88,6 +88,8 @@ service ContextService {
  rpc GetOpticalLink          (LinkId            )    returns (        OpticalLink         ) {}
  rpc DeleteOpticalLink       (LinkId            )    returns (        Empty               ) {}
  rpc GetOpticalLinkList      (Empty             )    returns (        OpticalLinkList     ) {}

  rpc DeleteServiceConfigRule (ServiceConfigRule )    returns (         Empty              ) {}
 }

// ----- Generic -------------------------------------------------------------------------------------------------------
@@ -687,3 +689,12 @@ message OpticalLink {
  LinkId link_id = 3;
 repeated EndPointId link_endpoint_ids=4;
}



////////////////// Config Rule Delete ////////////

message ServiceConfigRule {
  ServiceId service_id =1;
  ConfigRule_Custom configrule_custom =2;
}
 No newline at end of file
+6 −2
Original line number Diff line number Diff line
@@ -15,8 +15,12 @@
FROM python:3.9-slim

# Install dependencies
RUN apt-get --yes --quiet --quiet update && \
    apt-get --yes --quiet --quiet install wget g++ git && \
# RUN apt-get --yes --quiet --quiet update && \
#     apt-get --yes --quiet --quiet install wget g++ git && \
#     rm -rf /var/lib/apt/lists/*

RUN apt-get --yes  update && \
    apt-get --yes   install wget g++ git && \
    rm -rf /var/lib/apt/lists/*

# Set Python to show logs as they occur
+11 −1
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@ from common.proto.context_pb2 import (
    Service, ServiceEvent, ServiceFilter, ServiceId, ServiceIdList, ServiceList,
    Slice, SliceEvent, SliceFilter, SliceId, SliceIdList, SliceList,
    Topology, TopologyDetails, TopologyEvent, TopologyId, TopologyIdList, TopologyList,
    OpticalConfig, OpticalConfigId, OpticalConfigList , OpticalLink ,OpticalLinkList
    OpticalConfig, OpticalConfigId, OpticalConfigList , OpticalLink ,OpticalLinkList,ServiceConfigRule
)
from common.proto.context_pb2_grpc import ContextServiceStub
from common.proto.context_policy_pb2_grpc import ContextPolicyServiceStub
@@ -511,3 +511,13 @@ class ContextClient:
        response = self.stub.DeleteOpticalLink(request)
        LOGGER.debug('RemoveOpticalLink result: {:s}'.format(grpc_message_to_json_string(response)))
        return response
    
    
    # --------------------------------- Service ConfigRule Deletion ------------------
    
    @RETRY_DECORATOR
    def DeleteServiceConfigRule(self, request: ServiceConfigRule) -> Empty:
        LOGGER.debug('ServiceConfigRule Delete request: {:s}'.format(grpc_message_to_json_string(request)))
        response = self.stub.DeleteServiceConfigRule(request)
        LOGGER.debug('ServiceConfigRule Delete result: {:s}'.format(grpc_message_to_json_string(response)))
        return response
 No newline at end of file
+7 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ from common.proto.context_pb2 import (
    Slice, SliceEvent, SliceFilter, SliceId, SliceIdList, SliceList,
    Topology, TopologyDetails, TopologyEvent, TopologyId, TopologyIdList, TopologyList,
    OpticalConfigList, OpticalConfigId, OpticalConfig ,OpticalLink , OpticalLinkList, 
    ServiceConfigRule
)
from common.proto.policy_pb2 import PolicyRuleIdList, PolicyRuleId, PolicyRuleList, PolicyRule
from common.proto.context_pb2_grpc import ContextServiceServicer
@@ -49,6 +50,7 @@ from .database.OpticalConfig import (set_opticalconfig, select_opticalconfig, ge
                                     ,delete_opticalconfig ,update_opticalconfig ,delete_opticalchannel
)
from .database.OpticalLink import optical_link_delete,optical_link_get,optical_link_list_objs,optical_link_set
from .database.ConfigRule import delete_config_rule
LOGGER = logging.getLogger(__name__)

METRICS_POOL = MetricsPool('Context', 'RPC')
@@ -358,3 +360,8 @@ class ContextServiceServicerImpl(ContextServiceServicer, ContextPolicyServiceSer
    def DeleteOpticalLink(self, request : LinkId, context : grpc.ServicerContext) -> Empty:
        return optical_link_delete(self.db_engine, self.messagebroker, request)


    @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
    def DeleteServiceConfigRule(self, request : ServiceConfigRule, context : grpc.ServicerContext) -> Empty:
     
        return delete_config_rule(self.db_engine,  request)
+29 −1
Original line number Diff line number Diff line
@@ -17,14 +17,17 @@ from sqlalchemy import delete
#from sqlalchemy.dialects import postgresql
from sqlalchemy.dialects.postgresql import insert
from sqlalchemy.orm import Session
from sqlalchemy.engine import Engine
from typing import Dict, List, Optional, Set
from common.proto.context_pb2 import ConfigRule
from common.proto.context_pb2 import ConfigRule ,ServiceId ,ServiceConfigRule ,Empty
from common.tools.grpc.Tools import grpc_message_to_json_string
from .models.enums.ConfigAction import ORM_ConfigActionEnum, grpc_to_enum__config_action
from .models.ConfigRuleModel import (
    ConfigRuleKindEnum, DeviceConfigRuleModel, ServiceConfigRuleModel, SliceConfigRuleModel)
from .uuids._Builder import get_uuid_from_string
from .uuids.EndPoint import endpoint_get_uuid
from sqlalchemy_cockroachdb import run_transaction
from sqlalchemy.orm import Session, selectinload, sessionmaker

LOGGER = logging.getLogger(__name__)

@@ -33,8 +36,10 @@ def compose_config_rules_data(
    device_uuid : Optional[str] = None, service_uuid : Optional[str] = None, slice_uuid : Optional[str] = None
) -> List[Dict]:
    dict_config_rules : List[Dict] = list()
 
    for position,config_rule in enumerate(config_rules):
        str_kind = config_rule.WhichOneof('config_rule')
  
        kind = ConfigRuleKindEnum._member_map_.get(str_kind.upper()) # pylint: disable=no-member
        dict_config_rule = {
            'position'  : position,
@@ -63,6 +68,7 @@ def compose_config_rules_data(

        configrule_name = None
        if kind == ConfigRuleKindEnum.CUSTOM:
          
            configrule_name = '{:s}:{:s}:{:s}'.format(parent_kind, kind.value, config_rule.custom.resource_key)
        elif kind == ConfigRuleKindEnum.ACL:
            _, _, endpoint_uuid = endpoint_get_uuid(config_rule.acl.endpoint_id, allow_random=False)
@@ -149,3 +155,25 @@ def upsert_config_rules(
        upsert_affected = any([(updated_at > created_at) for created_at,updated_at in configrule_updates])

    return delete_affected or upsert_affected


def delete_config_rule (db_engine : Engine,request:ServiceConfigRule):

        config_rule=request.configrule_custom
        service_id= request.service_id
        parent_uuid = service_id.service_uuid.uuid
        configrule_name = 'service:custom:{:s}'.format( config_rule.resource_key)
        configrule_uuid = get_uuid_from_string(configrule_name, prefix_for_name=parent_uuid)

        
        def callback(session : Session) -> bool:
          
            num_deleted = session.query(ServiceConfigRuleModel).filter_by(configrule_uuid=configrule_uuid).delete()
            return num_deleted > 0
        
        deleted = run_transaction(sessionmaker(bind=db_engine), callback)

        return Empty()
            
    
    
 No newline at end of file
Loading