fabric-testbed / InformationModel

FABRIC Information Model library
MIT License
7 stars 1 forks source link

Modify - Removing a node does not remove the corresponding interfaces from the Network Services #134

Closed kthare10 closed 1 year ago

kthare10 commented 1 year ago

Scenario

Observation

2022-09-08 09:17:45,172 - orchestrator - {orchestrator_handler.py:440} - [waitress-1] - ERROR - Traceback (most recent call last):
  File "/Users/kthare10/renci/code/fabric/1.3/ControlFramework/fabric_cf/orchestrator/core/orchestrator_handler.py", line 401, in modify_slice
    topology.validate()
  File "/Users/kthare10/.virtualenvs/ControlFramework1.3/lib/python3.9/site-packages/fim/user/topology.py", line 546, in validate
    raise TopologyException(f'Interface {si} of Network Service {s} has unexpected '
fim.user.model_element.TopologyException: Interface {'name': 'n1-n1-nic1-p1', 'type': 'ServicePort'} of Network Service {'layer': 'L2', 'name': 'bridge1', 'node_map': "('36f98583-3ae3-4720-889a-fa5b66e7b7b8', 'node+renc-data-sw:ip+192.168.11.3-ns')", 'reservation_info': '{"error_message": "", "reservation_id": "c29fb40f-86ff-416d-8ca3-5b822ae8c80f", "reservation_state": "Active"}', 'site': 'RENC', 'type': 'L2Bridge'}['n3-n3-nic1-p1', 'n1-n1-nic1-p1', 'n2-n2-nic1-p1'] has unexpected number of peer interfaces

Create Slice

        import fim.user as f
        t = f.ExperimentTopology()
        n1 = t.add_node(name='n1', site='RENC', ntype=f.NodeType.VM)
        n2 = t.add_node(name='n2', site='RENC')

        cap = f.Capacities(core=2, ram=8, disk=100)
        n1.set_properties(capacities=cap, image_type='qcow2', image_ref='default_centos_8')
        n2.set_properties(capacities=cap, image_type='qcow2', image_ref='default_centos_8')

        n1.add_component(model_type=f.ComponentModelType.SmartNIC_ConnectX_6, name='n1-nic1')
        n2.add_component(model_type=f.ComponentModelType.SmartNIC_ConnectX_6, name='n2-nic1')
        ns = t.add_network_service(name='bridge1', nstype=f.ServiceType.L2Bridge, interfaces=[n1.interface_list[0], n2.interface_list[0]])

        slice_graph = t.serialize()

Modify Slice

        topology.remove_node(name='n1')
        n3 = topology.add_node(name='n3', site='RENC')
        cap = fu.Capacities(core=2, ram=6, disk=10)
        n3.set_properties(capacities=cap, image_type='qcow2', image_ref='default_centos_8')
        n3.add_component(model_type=fu.ComponentModelType.SharedNIC_ConnectX_6, name='n3-nic1')

        topology.network_services['bridge1'].connect_interface(interface=n3.interface_list[0])

        slice_graph = topology.serialize()