41
41
from fim .slivers .instance_catalog import InstanceCatalog
42
42
from fim .slivers .network_node import NodeSliver , NodeType
43
43
from fim .slivers .network_service import NetworkServiceSliver
44
- from fim .slivers .topology_diff import WhatsModifiedFlag
44
+ from fim .slivers .topology_diff import WhatsModifiedFlag , TopologyDiff
45
45
from fim .user import ServiceType , ExperimentTopology , InterfaceType
46
46
47
47
from fabric_cf .actor .core .common .constants import ErrorCodes , Constants
@@ -460,7 +460,7 @@ def __build_network_node_reservations(self, *, slice_graph: ABCASMPropertyGraph)
460
460
sliver_to_res_mapping [nn_id ] = reservation .get_reservation_id ()
461
461
return reservations , sliver_to_res_mapping
462
462
463
- def modify (self , * , new_slice_graph : ABCASMPropertyGraph ) -> List [LeaseReservationAvro ]:
463
+ def modify (self , * , new_slice_graph : ABCASMPropertyGraph ) -> Tuple [ TopologyDiff , List [LeaseReservationAvro ] ]:
464
464
"""
465
465
Modify an existing slice
466
466
:param new_slice_graph New Slice Graph
@@ -478,8 +478,8 @@ def modify(self, *, new_slice_graph: ABCASMPropertyGraph) -> List[LeaseReservati
478
478
ns_peered_reservations = []
479
479
ns_mapping = {}
480
480
481
- if topology_diff is None :
482
- return reservations
481
+ if not topology_diff :
482
+ return topology_diff , reservations
483
483
484
484
node_res_mapping = {}
485
485
@@ -624,7 +624,7 @@ def modify(self, *, new_slice_graph: ABCASMPropertyGraph) -> List[LeaseReservati
624
624
for x in modified_reservations :
625
625
self .computed_reservations .append (x )
626
626
627
- return self .computed_reservations
627
+ return topology_diff , self .computed_reservations
628
628
629
629
def __check_modify_on_fabnetv4ext (self , * , rid : str , req_sliver : NetworkServiceSliver ) -> NetworkServiceSliver :
630
630
if req_sliver .get_type () != ServiceType .FABNetv4Ext :
@@ -704,21 +704,47 @@ def __check_modify_on_fabnetv4ext(self, *, rid: str, req_sliver: NetworkServiceS
704
704
705
705
return req_sliver
706
706
707
- def update_topology (self , * , topology : ExperimentTopology ):
708
- for x in self .computed_reservations :
709
- sliver = x .get_sliver ()
710
- node_name = sliver .get_name ()
711
- if isinstance (sliver , NodeSliver ) and node_name in topology .nodes :
712
- node = topology .nodes [node_name ]
713
- node .set_properties (labels = sliver .labels ,
714
- label_allocations = sliver .label_allocations ,
715
- capacity_allocations = sliver .capacity_allocations ,
716
- reservation_info = sliver .reservation_info ,
717
- node_map = sliver .node_map ,
718
- management_ip = sliver .management_ip ,
719
- capacity_hints = sliver .capacity_hints ,
720
- capacities = sliver .capacities )
707
+ def update_topology (self , * , topology : ExperimentTopology = None ,
708
+ asm_graph : ABCASMPropertyGraph = None ):
709
+ if topology :
710
+ for x in self .computed_reservations :
711
+ sliver = x .get_sliver ()
712
+ node_name = sliver .get_name ()
713
+ if isinstance (sliver , NodeSliver ) and node_name in topology .nodes :
714
+ node = topology .nodes [node_name ]
715
+ node .set_properties (labels = sliver .labels ,
716
+ label_allocations = sliver .label_allocations ,
717
+ capacity_allocations = sliver .capacity_allocations ,
718
+ reservation_info = sliver .reservation_info ,
719
+ node_map = sliver .node_map ,
720
+ management_ip = sliver .management_ip ,
721
+ capacity_hints = sliver .capacity_hints ,
722
+ capacities = sliver .capacities )
721
723
722
724
def has_sliver_updates_at_authority (self ):
723
725
return len (self .computed_reservations ) or len (self .computed_remove_reservations ) or \
724
726
len (self .computed_modify_reservations ) or len (self .computed_modify_properties_reservations )
727
+
728
+ def has_topology_diffs (self , * , topology_diff : TopologyDiff ) -> bool :
729
+ """
730
+ Check if there any updates in topology
731
+ :param topology_diff: topology difference object
732
+ """
733
+ ret_val = False
734
+ if not topology_diff :
735
+ ret_val = False
736
+
737
+ if len (topology_diff .added .nodes ) or len (topology_diff .added .components ) or \
738
+ len (topology_diff .added .services ) or len (topology_diff .added .interfaces ):
739
+ ret_val = True
740
+
741
+ if len (topology_diff .removed .nodes ) or len (topology_diff .removed .components ) or \
742
+ len (topology_diff .removed .services ) or len (topology_diff .removed .interfaces ):
743
+ ret_val = True
744
+
745
+ if len (topology_diff .modified .nodes ) or len (topology_diff .modified .components ) or \
746
+ len (topology_diff .modified .services ) or len (topology_diff .modified .interfaces ):
747
+ ret_val = True
748
+
749
+ self .logger .debug (f"Topology diff found: { ret_val } " )
750
+ return ret_val
0 commit comments