Loading src/device/service/drivers/gnmi_openconfig/handlers/NetworkInstance.py +12 −0 Original line number Diff line number Diff line Loading @@ -108,6 +108,18 @@ class NetworkInstanceHandler(_Handler): entry_net_inst_key = '/network_instance[{:s}]'.format(ni_name) entries.append((entry_net_inst_key, _net_inst)) ni_interfaces = network_instance.get('interfaces', {}).get('interface', []) for ni_interface in ni_interfaces: #ni_if_id = ni_interface['id'] ni_if_config = ni_interface['config'] ni_if_name = ni_if_config['interface'] ni_sif_index = ni_if_config['subinterface'] ni_if_id = '{:s}.{:d}'.format(ni_if_name, ni_sif_index) _interface = {'name': ni_name, 'id': ni_if_id, 'if_name': ni_if_name, 'sif_index': ni_sif_index} entry_interface_key = '{:s}/interface[{:s}]'.format(entry_net_inst_key, ni_if_id) entries.append((entry_interface_key, _interface)) ni_protocols = network_instance.get('protocols', {}).get('protocol', []) for ni_protocol in ni_protocols: ni_protocol_id = ni_protocol['identifier'].split(':')[-1] Loading src/device/service/drivers/gnmi_openconfig/handlers/NetworkInstanceInterface.py +3 −5 Original line number Diff line number Diff line Loading @@ -32,10 +32,6 @@ class NetworkInstanceInterfaceHandler(_Handler): ni_name = get_str(resource_value, 'name' ) # test-svc if_name = get_str(resource_value, 'if_name' ) # ethernet-1/1 sif_index = get_int(resource_value, 'sif_index', 0) # 0 if IS_CEOS: if_id = if_name else: if_id = '{:s}.{:d}'.format(if_name, sif_index) if delete: Loading @@ -44,6 +40,8 @@ class NetworkInstanceInterfaceHandler(_Handler): str_data = json.dumps({}) return str_path, str_data if IS_CEOS: if_id = if_name str_path = '/network-instances/network-instance[name={:s}]/interfaces/interface[id={:s}]'.format(ni_name, if_id) #str_data = json.dumps({ # 'id': if_id, Loading src/device/tests/gnmi_openconfig/test_unitary_gnmi_openconfig.py +110 −68 Original line number Diff line number Diff line Loading @@ -141,7 +141,6 @@ def test_get_network_instances( num_diffs = len(diff_data) if num_diffs > 0: LOGGER.error('Differences[{:d}]:\n{:s}'.format(num_diffs, str(diff_data.pretty()))) assert num_diffs == 0 raise Exception() def test_set_network_instances( Loading Loading @@ -284,39 +283,80 @@ def test_add_interfaces_to_network_instance( results_setconfig = driver.SetConfig(resources_to_set) LOGGER.info('results_setconfig = {:s}'.format(str(results_setconfig))) #interfaces = sorted(['Ethernet1', 'Ethernet10']) #results = set(results_setconfig) #assert len(results) == len(interfaces) #for if_name in interfaces: # assert ('/interface[{:s}]'.format(if_name), True) in results interfaces = sorted([ '{:s}.{:d}'.format(if_name, sif_index) for if_name, sif_index, _, _, _ in NI_INTERFACES ]) results = set(results_setconfig) assert len(results) == len(interfaces) for if_name in interfaces: assert ('/network_instance[{:s}]/interface[{:s}]'.format(NI_NAME, if_name), True) in results #expected_getconfig = get_expected_interface_config(storage) #expected_getconfig.extend([ # ('/interface[Ethernet1]/subinterface[0]/ipv4[192.168.1.1]', { # 'ip': '192.168.1.1', 'origin': 'STATIC', 'prefix': 24 # }), # ('/interface[Ethernet10]/subinterface[0]/ipv4[192.168.10.1]', { # 'ip': '192.168.10.1', 'origin': 'STATIC', 'prefix': 24 # }) #]) #permitted_retries = 5 #while permitted_retries > 0: # resources_to_get = [RESOURCE_INTERFACES] # LOGGER.info('resources_to_get = {:s}'.format(str(resources_to_get))) # results_getconfig = driver.GetConfig(resources_to_get) # LOGGER.info('results_getconfig = {:s}'.format(str(results_getconfig))) # # diff_data = deepdiff.DeepDiff(sorted(expected_getconfig), sorted(results_getconfig)) # num_diffs = len(diff_data) # if num_diffs == 0: break # # let the device take some time to reconfigure # time.sleep(0.5) # permitted_retries -= 1 expected_getconfig = get_expected_interface_config(storage) expected_getconfig.extend([ ('/interface[{:s}]/subinterface[{:d}]/ipv4[{:s}]'.format(if_name, sif_index, ipv4_addr), { 'ip': ipv4_addr, 'origin': 'STATIC', 'prefix': ipv4_prefix }) for if_name, sif_index, ipv4_addr, ipv4_prefix, _ in NI_INTERFACES ]) LOGGER.info('expected_getconfig = {:s}'.format(str(sorted(expected_getconfig)))) #if num_diffs > 0: LOGGER.error('Differences[{:d}]:\n{:s}'.format(num_diffs, str(diff_data.pretty()))) #assert num_diffs == 0 raise Exception() permitted_retries = 5 while permitted_retries > 0: resources_to_get = [RESOURCE_INTERFACES] LOGGER.info('resources_to_get = {:s}'.format(str(resources_to_get))) results_getconfig = driver.GetConfig(resources_to_get) LOGGER.info('results_getconfig = {:s}'.format(str(results_getconfig))) diff_data = deepdiff.DeepDiff(sorted(expected_getconfig), sorted(results_getconfig)) num_diffs = len(diff_data) if num_diffs == 0: break # let the device take some time to reconfigure time.sleep(0.5) permitted_retries -= 1 if num_diffs > 0: LOGGER.error('Differences[{:d}]:\n{:s}'.format(num_diffs, str(diff_data.pretty()))) assert num_diffs == 0 expected_getconfig = get_expected_network_instance_config(storage) expected_getconfig.extend([ ('/network_instance[{:s}]'.format(NI_NAME), { 'name': NI_NAME, 'type': NI_TYPE }), ('/network_instance[{:s}]/protocol[DIRECTLY_CONNECTED]'.format(NI_NAME), { 'id': 'DIRECTLY_CONNECTED', 'name': 'DIRECTLY_CONNECTED' }), ('/network_instance[{:s}]/table[DIRECTLY_CONNECTED,IPV4]'.format(NI_NAME), { 'protocol': 'DIRECTLY_CONNECTED', 'address_family': 'IPV4' }), ('/network_instance[{:s}]/table[DIRECTLY_CONNECTED,IPV6]'.format(NI_NAME), { 'protocol': 'DIRECTLY_CONNECTED', 'address_family': 'IPV6' }) ]) LOGGER.info('expected_getconfig = {:s}'.format(str(sorted(expected_getconfig)))) permitted_retries = 5 while permitted_retries > 0: resources_to_get = [RESOURCE_NETWORK_INSTANCES] LOGGER.info('resources_to_get = {:s}'.format(str(resources_to_get))) results_getconfig = driver.GetConfig(resources_to_get) LOGGER.info('results_getconfig = {:s}'.format(str(results_getconfig))) for resource_key, resource_value in results_getconfig: match = re.match(r'^\/network\_instance\[([^\]]+)\]\/vlan\[([^\]]+)\]$', resource_key) if match is None: continue members = resource_value.get('members') if len(members) > 0: resource_value['members'] = sorted(members) diff_data = deepdiff.DeepDiff(sorted(expected_getconfig), sorted(results_getconfig)) num_diffs = len(diff_data) if num_diffs == 0: break # let the device take some time to reconfigure time.sleep(0.5) permitted_retries -= 1 if num_diffs > 0: LOGGER.error('Differences[{:d}]:\n{:s}'.format(num_diffs, str(diff_data.pretty()))) assert num_diffs == 0 def test_set_network_instance_static_routes( Loading @@ -336,43 +376,45 @@ def test_set_network_instance_static_routes( results_setconfig = driver.SetConfig(resources_to_set) LOGGER.info('results_setconfig = {:s}'.format(str(results_setconfig))) prefixes = sorted([ prefix for prefix, _, _ in NI_STATIC_ROUTES ]) results = set(results_setconfig) assert len(results) == len(prefixes) for prefix in prefixes: assert ('/network_instance[{:s}]/static_route[{:s}]'.format(NI_NAME, prefix), True) in results expected_getconfig = get_expected_network_instance_config(storage) expected_getconfig.extend([ ('/network_instance[{:s}]/static_route[{:s}]'.format(NI_NAME, prefix), { 'name': NI_NAME, 'prefix': prefix, 'next_hop': gateway, 'next_hop_index': 0, 'metric': metric }) for prefix, gateway, metric in NI_STATIC_ROUTES ]) permitted_retries = 5 while permitted_retries > 0: resources_to_get = [RESOURCE_NETWORK_INSTANCES] LOGGER.info('resources_to_get = {:s}'.format(str(resources_to_get))) results_getconfig = driver.GetConfig(resources_to_get) LOGGER.info('results_getconfig = {:s}'.format(str(results_getconfig))) for resource_key, resource_value in results_getconfig: match = re.match(r'^\/network\_instance\[([^\]]+)\]\/vlan\[([^\]]+)\]$', resource_key) if match is None: continue members = resource_value.get('members') if len(members) > 0: resource_value['members'] = sorted(members) #interfaces = sorted(['Ethernet1', 'Ethernet10']) #results = set(results_setconfig) #assert len(results) == len(interfaces) #for if_name in interfaces: # assert ('/interface[{:s}]'.format(if_name), True) in results diff_data = deepdiff.DeepDiff(sorted(expected_getconfig), sorted(results_getconfig)) num_diffs = len(diff_data) if num_diffs == 0: break # let the device take some time to reconfigure time.sleep(0.5) permitted_retries -= 1 #expected_getconfig = get_expected_interface_config(storage) #expected_getconfig.extend([ # ('/interface[Ethernet1]/subinterface[0]/ipv4[192.168.1.1]', { # 'ip': '192.168.1.1', 'origin': 'STATIC', 'prefix': 24 # }), # ('/interface[Ethernet10]/subinterface[0]/ipv4[192.168.10.1]', { # 'ip': '192.168.10.1', 'origin': 'STATIC', 'prefix': 24 # }) #]) #permitted_retries = 5 #while permitted_retries > 0: # resources_to_get = [RESOURCE_INTERFACES] # LOGGER.info('resources_to_get = {:s}'.format(str(resources_to_get))) # results_getconfig = driver.GetConfig(resources_to_get) # LOGGER.info('results_getconfig = {:s}'.format(str(results_getconfig))) # # diff_data = deepdiff.DeepDiff(sorted(expected_getconfig), sorted(results_getconfig)) # num_diffs = len(diff_data) # if num_diffs == 0: break # # let the device take some time to reconfigure # time.sleep(0.5) # permitted_retries -= 1 # #if num_diffs > 0: LOGGER.error('Differences[{:d}]:\n{:s}'.format(num_diffs, str(diff_data.pretty()))) #assert num_diffs == 0 raise Exception() if num_diffs > 0: LOGGER.error('Differences[{:d}]:\n{:s}'.format(num_diffs, str(diff_data.pretty()))) assert num_diffs == 0 def test_del_network_instance_static_routes( Loading Loading @@ -429,16 +471,16 @@ def test_del_interfaces_from_network_instance( LOGGER.info('results_getconfig = {:s}'.format(str(results_getconfig))) resources_to_delete = [ network_instance_interface(NI_NAME, ni_if_name, ni_sif_index) for ni_if_name, ni_sif_index in NI_INTERFACES network_instance_interface(NI_NAME, if_name, sif_index) for if_name, sif_index, _, _, _ in NI_INTERFACES ] LOGGER.info('resources_to_delete = {:s}'.format(str(resources_to_delete))) results_deleteconfig = driver.DeleteConfig(resources_to_delete) LOGGER.info('results_deleteconfig = {:s}'.format(str(results_deleteconfig))) interface_ids = sorted([ '{:s}.{:d}'.format(ni_if_name, ni_sif_index) for ni_if_name, ni_sif_index in NI_INTERFACES '{:s}.{:d}'.format(if_name, sif_index) for if_name, sif_index, _, _, _ in NI_INTERFACES ]) results = set(results_deleteconfig) assert len(results) == len(interface_ids) Loading Loading
src/device/service/drivers/gnmi_openconfig/handlers/NetworkInstance.py +12 −0 Original line number Diff line number Diff line Loading @@ -108,6 +108,18 @@ class NetworkInstanceHandler(_Handler): entry_net_inst_key = '/network_instance[{:s}]'.format(ni_name) entries.append((entry_net_inst_key, _net_inst)) ni_interfaces = network_instance.get('interfaces', {}).get('interface', []) for ni_interface in ni_interfaces: #ni_if_id = ni_interface['id'] ni_if_config = ni_interface['config'] ni_if_name = ni_if_config['interface'] ni_sif_index = ni_if_config['subinterface'] ni_if_id = '{:s}.{:d}'.format(ni_if_name, ni_sif_index) _interface = {'name': ni_name, 'id': ni_if_id, 'if_name': ni_if_name, 'sif_index': ni_sif_index} entry_interface_key = '{:s}/interface[{:s}]'.format(entry_net_inst_key, ni_if_id) entries.append((entry_interface_key, _interface)) ni_protocols = network_instance.get('protocols', {}).get('protocol', []) for ni_protocol in ni_protocols: ni_protocol_id = ni_protocol['identifier'].split(':')[-1] Loading
src/device/service/drivers/gnmi_openconfig/handlers/NetworkInstanceInterface.py +3 −5 Original line number Diff line number Diff line Loading @@ -32,10 +32,6 @@ class NetworkInstanceInterfaceHandler(_Handler): ni_name = get_str(resource_value, 'name' ) # test-svc if_name = get_str(resource_value, 'if_name' ) # ethernet-1/1 sif_index = get_int(resource_value, 'sif_index', 0) # 0 if IS_CEOS: if_id = if_name else: if_id = '{:s}.{:d}'.format(if_name, sif_index) if delete: Loading @@ -44,6 +40,8 @@ class NetworkInstanceInterfaceHandler(_Handler): str_data = json.dumps({}) return str_path, str_data if IS_CEOS: if_id = if_name str_path = '/network-instances/network-instance[name={:s}]/interfaces/interface[id={:s}]'.format(ni_name, if_id) #str_data = json.dumps({ # 'id': if_id, Loading
src/device/tests/gnmi_openconfig/test_unitary_gnmi_openconfig.py +110 −68 Original line number Diff line number Diff line Loading @@ -141,7 +141,6 @@ def test_get_network_instances( num_diffs = len(diff_data) if num_diffs > 0: LOGGER.error('Differences[{:d}]:\n{:s}'.format(num_diffs, str(diff_data.pretty()))) assert num_diffs == 0 raise Exception() def test_set_network_instances( Loading Loading @@ -284,39 +283,80 @@ def test_add_interfaces_to_network_instance( results_setconfig = driver.SetConfig(resources_to_set) LOGGER.info('results_setconfig = {:s}'.format(str(results_setconfig))) #interfaces = sorted(['Ethernet1', 'Ethernet10']) #results = set(results_setconfig) #assert len(results) == len(interfaces) #for if_name in interfaces: # assert ('/interface[{:s}]'.format(if_name), True) in results interfaces = sorted([ '{:s}.{:d}'.format(if_name, sif_index) for if_name, sif_index, _, _, _ in NI_INTERFACES ]) results = set(results_setconfig) assert len(results) == len(interfaces) for if_name in interfaces: assert ('/network_instance[{:s}]/interface[{:s}]'.format(NI_NAME, if_name), True) in results #expected_getconfig = get_expected_interface_config(storage) #expected_getconfig.extend([ # ('/interface[Ethernet1]/subinterface[0]/ipv4[192.168.1.1]', { # 'ip': '192.168.1.1', 'origin': 'STATIC', 'prefix': 24 # }), # ('/interface[Ethernet10]/subinterface[0]/ipv4[192.168.10.1]', { # 'ip': '192.168.10.1', 'origin': 'STATIC', 'prefix': 24 # }) #]) #permitted_retries = 5 #while permitted_retries > 0: # resources_to_get = [RESOURCE_INTERFACES] # LOGGER.info('resources_to_get = {:s}'.format(str(resources_to_get))) # results_getconfig = driver.GetConfig(resources_to_get) # LOGGER.info('results_getconfig = {:s}'.format(str(results_getconfig))) # # diff_data = deepdiff.DeepDiff(sorted(expected_getconfig), sorted(results_getconfig)) # num_diffs = len(diff_data) # if num_diffs == 0: break # # let the device take some time to reconfigure # time.sleep(0.5) # permitted_retries -= 1 expected_getconfig = get_expected_interface_config(storage) expected_getconfig.extend([ ('/interface[{:s}]/subinterface[{:d}]/ipv4[{:s}]'.format(if_name, sif_index, ipv4_addr), { 'ip': ipv4_addr, 'origin': 'STATIC', 'prefix': ipv4_prefix }) for if_name, sif_index, ipv4_addr, ipv4_prefix, _ in NI_INTERFACES ]) LOGGER.info('expected_getconfig = {:s}'.format(str(sorted(expected_getconfig)))) #if num_diffs > 0: LOGGER.error('Differences[{:d}]:\n{:s}'.format(num_diffs, str(diff_data.pretty()))) #assert num_diffs == 0 raise Exception() permitted_retries = 5 while permitted_retries > 0: resources_to_get = [RESOURCE_INTERFACES] LOGGER.info('resources_to_get = {:s}'.format(str(resources_to_get))) results_getconfig = driver.GetConfig(resources_to_get) LOGGER.info('results_getconfig = {:s}'.format(str(results_getconfig))) diff_data = deepdiff.DeepDiff(sorted(expected_getconfig), sorted(results_getconfig)) num_diffs = len(diff_data) if num_diffs == 0: break # let the device take some time to reconfigure time.sleep(0.5) permitted_retries -= 1 if num_diffs > 0: LOGGER.error('Differences[{:d}]:\n{:s}'.format(num_diffs, str(diff_data.pretty()))) assert num_diffs == 0 expected_getconfig = get_expected_network_instance_config(storage) expected_getconfig.extend([ ('/network_instance[{:s}]'.format(NI_NAME), { 'name': NI_NAME, 'type': NI_TYPE }), ('/network_instance[{:s}]/protocol[DIRECTLY_CONNECTED]'.format(NI_NAME), { 'id': 'DIRECTLY_CONNECTED', 'name': 'DIRECTLY_CONNECTED' }), ('/network_instance[{:s}]/table[DIRECTLY_CONNECTED,IPV4]'.format(NI_NAME), { 'protocol': 'DIRECTLY_CONNECTED', 'address_family': 'IPV4' }), ('/network_instance[{:s}]/table[DIRECTLY_CONNECTED,IPV6]'.format(NI_NAME), { 'protocol': 'DIRECTLY_CONNECTED', 'address_family': 'IPV6' }) ]) LOGGER.info('expected_getconfig = {:s}'.format(str(sorted(expected_getconfig)))) permitted_retries = 5 while permitted_retries > 0: resources_to_get = [RESOURCE_NETWORK_INSTANCES] LOGGER.info('resources_to_get = {:s}'.format(str(resources_to_get))) results_getconfig = driver.GetConfig(resources_to_get) LOGGER.info('results_getconfig = {:s}'.format(str(results_getconfig))) for resource_key, resource_value in results_getconfig: match = re.match(r'^\/network\_instance\[([^\]]+)\]\/vlan\[([^\]]+)\]$', resource_key) if match is None: continue members = resource_value.get('members') if len(members) > 0: resource_value['members'] = sorted(members) diff_data = deepdiff.DeepDiff(sorted(expected_getconfig), sorted(results_getconfig)) num_diffs = len(diff_data) if num_diffs == 0: break # let the device take some time to reconfigure time.sleep(0.5) permitted_retries -= 1 if num_diffs > 0: LOGGER.error('Differences[{:d}]:\n{:s}'.format(num_diffs, str(diff_data.pretty()))) assert num_diffs == 0 def test_set_network_instance_static_routes( Loading @@ -336,43 +376,45 @@ def test_set_network_instance_static_routes( results_setconfig = driver.SetConfig(resources_to_set) LOGGER.info('results_setconfig = {:s}'.format(str(results_setconfig))) prefixes = sorted([ prefix for prefix, _, _ in NI_STATIC_ROUTES ]) results = set(results_setconfig) assert len(results) == len(prefixes) for prefix in prefixes: assert ('/network_instance[{:s}]/static_route[{:s}]'.format(NI_NAME, prefix), True) in results expected_getconfig = get_expected_network_instance_config(storage) expected_getconfig.extend([ ('/network_instance[{:s}]/static_route[{:s}]'.format(NI_NAME, prefix), { 'name': NI_NAME, 'prefix': prefix, 'next_hop': gateway, 'next_hop_index': 0, 'metric': metric }) for prefix, gateway, metric in NI_STATIC_ROUTES ]) permitted_retries = 5 while permitted_retries > 0: resources_to_get = [RESOURCE_NETWORK_INSTANCES] LOGGER.info('resources_to_get = {:s}'.format(str(resources_to_get))) results_getconfig = driver.GetConfig(resources_to_get) LOGGER.info('results_getconfig = {:s}'.format(str(results_getconfig))) for resource_key, resource_value in results_getconfig: match = re.match(r'^\/network\_instance\[([^\]]+)\]\/vlan\[([^\]]+)\]$', resource_key) if match is None: continue members = resource_value.get('members') if len(members) > 0: resource_value['members'] = sorted(members) #interfaces = sorted(['Ethernet1', 'Ethernet10']) #results = set(results_setconfig) #assert len(results) == len(interfaces) #for if_name in interfaces: # assert ('/interface[{:s}]'.format(if_name), True) in results diff_data = deepdiff.DeepDiff(sorted(expected_getconfig), sorted(results_getconfig)) num_diffs = len(diff_data) if num_diffs == 0: break # let the device take some time to reconfigure time.sleep(0.5) permitted_retries -= 1 #expected_getconfig = get_expected_interface_config(storage) #expected_getconfig.extend([ # ('/interface[Ethernet1]/subinterface[0]/ipv4[192.168.1.1]', { # 'ip': '192.168.1.1', 'origin': 'STATIC', 'prefix': 24 # }), # ('/interface[Ethernet10]/subinterface[0]/ipv4[192.168.10.1]', { # 'ip': '192.168.10.1', 'origin': 'STATIC', 'prefix': 24 # }) #]) #permitted_retries = 5 #while permitted_retries > 0: # resources_to_get = [RESOURCE_INTERFACES] # LOGGER.info('resources_to_get = {:s}'.format(str(resources_to_get))) # results_getconfig = driver.GetConfig(resources_to_get) # LOGGER.info('results_getconfig = {:s}'.format(str(results_getconfig))) # # diff_data = deepdiff.DeepDiff(sorted(expected_getconfig), sorted(results_getconfig)) # num_diffs = len(diff_data) # if num_diffs == 0: break # # let the device take some time to reconfigure # time.sleep(0.5) # permitted_retries -= 1 # #if num_diffs > 0: LOGGER.error('Differences[{:d}]:\n{:s}'.format(num_diffs, str(diff_data.pretty()))) #assert num_diffs == 0 raise Exception() if num_diffs > 0: LOGGER.error('Differences[{:d}]:\n{:s}'.format(num_diffs, str(diff_data.pretty()))) assert num_diffs == 0 def test_del_network_instance_static_routes( Loading Loading @@ -429,16 +471,16 @@ def test_del_interfaces_from_network_instance( LOGGER.info('results_getconfig = {:s}'.format(str(results_getconfig))) resources_to_delete = [ network_instance_interface(NI_NAME, ni_if_name, ni_sif_index) for ni_if_name, ni_sif_index in NI_INTERFACES network_instance_interface(NI_NAME, if_name, sif_index) for if_name, sif_index, _, _, _ in NI_INTERFACES ] LOGGER.info('resources_to_delete = {:s}'.format(str(resources_to_delete))) results_deleteconfig = driver.DeleteConfig(resources_to_delete) LOGGER.info('results_deleteconfig = {:s}'.format(str(results_deleteconfig))) interface_ids = sorted([ '{:s}.{:d}'.format(ni_if_name, ni_sif_index) for ni_if_name, ni_sif_index in NI_INTERFACES '{:s}.{:d}'.format(if_name, sif_index) for if_name, sif_index, _, _, _ in NI_INTERFACES ]) results = set(results_deleteconfig) assert len(results) == len(interface_ids) Loading