From 4c5eb31bb56471bc2d97e47236607a0c0eaabfb7 Mon Sep 17 00:00:00 2001 From: errea Date: Fri, 19 Nov 2021 17:12:29 +0100 Subject: [PATCH] Fix tapi get-topology-details functional test - Replace databroker with networkTransactionService in R2RTapiLinkDiscovery - Add specific LOG message to enable tapi tests to know when the device has been successfully connected and translated in the TAPI topology - Add connect_xpdr_to_rdm_tapi_request and mount_tapi_device tests in test_utils which will be called from test12_tapi_full_multi_layer JIRA: TRNSPRTPCE-553 Signed-off-by: errea Change-Id: Iff6811d19861521733de1667c49ba4793fa35b2c --- .../tpce/module/TransportPCEImpl.java | 2 +- .../tapi/R2RTapiLinkDiscovery.java | 45 +++++----- .../topology/TapiNetworkModelServiceImpl.java | 3 +- .../OSGI-INF/blueprint/tapi-blueprint.xml | 2 +- .../2.2.1/test13_tapi_full_multi_layer.py | 84 ++++++++++++------- tests/transportpce_tests/common/test_utils.py | 34 ++++++++ 6 files changed, 119 insertions(+), 51 deletions(-) diff --git a/lighty/src/main/java/io/lighty/controllers/tpce/module/TransportPCEImpl.java b/lighty/src/main/java/io/lighty/controllers/tpce/module/TransportPCEImpl.java index aafa07535..f9d6a02d9 100644 --- a/lighty/src/main/java/io/lighty/controllers/tpce/module/TransportPCEImpl.java +++ b/lighty/src/main/java/io/lighty/controllers/tpce/module/TransportPCEImpl.java @@ -208,7 +208,7 @@ public class TransportPCEImpl extends AbstractLightyModule implements TransportP networkModelListenerImpl, servicehandler); LOG.info("Creating tapi beans ..."); - R2RTapiLinkDiscovery tapilinkDiscoveryImpl = new R2RTapiLinkDiscovery(lightyServices.getBindingDataBroker(), + R2RTapiLinkDiscovery tapilinkDiscoveryImpl = new R2RTapiLinkDiscovery(networkTransaction, deviceTransactionManager); TapiRendererListenerImpl tapiRendererListenerImpl = new TapiRendererListenerImpl(lightyServices .getBindingDataBroker()); diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/R2RTapiLinkDiscovery.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/R2RTapiLinkDiscovery.java index 1f1d762ae..becd14a4c 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/R2RTapiLinkDiscovery.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/R2RTapiLinkDiscovery.java @@ -19,12 +19,11 @@ import java.util.concurrent.ExecutionException; import java.util.stream.Collectors; import java.util.stream.Stream; import org.eclipse.jdt.annotation.Nullable; -import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.mdsal.binding.api.MountPoint; -import org.opendaylight.mdsal.binding.api.ReadTransaction; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.transportpce.common.Timeouts; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; +import org.opendaylight.transportpce.common.network.NetworkTransactionService; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.Network; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.cp.to.degree.CpToDegree; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.mapping.Mapping; @@ -84,12 +83,13 @@ public class R2RTapiLinkDiscovery { private static final Logger LOG = LoggerFactory.getLogger(R2RTapiLinkDiscovery.class); - private final DataBroker dataBroker; + private final NetworkTransactionService networkTransactionService; private final DeviceTransactionManager deviceTransactionManager; private static final String PHTNC_MEDIA = "PHOTONIC_MEDIA"; - public R2RTapiLinkDiscovery(final DataBroker dataBroker, DeviceTransactionManager deviceTransactionManager) { - this.dataBroker = dataBroker; + public R2RTapiLinkDiscovery(NetworkTransactionService networkTransactionService, + DeviceTransactionManager deviceTransactionManager) { + this.networkTransactionService = networkTransactionService; this.deviceTransactionManager = deviceTransactionManager; } @@ -368,8 +368,10 @@ public class R2RTapiLinkDiscovery { private Integer getDegFromInterface(NodeId nodeId, String interfaceName) { InstanceIdentifier nodesIID = InstanceIdentifier.builder(Network.class) .child(Nodes.class, new NodesKey(nodeId.getValue())).build(); - try (ReadTransaction readTx = this.dataBroker.newReadOnlyTransaction()) { - Optional nodesObject = readTx.read(LogicalDatastoreType.CONFIGURATION, nodesIID).get(); + try { + + Optional nodesObject = this.networkTransactionService.read(LogicalDatastoreType.CONFIGURATION, + nodesIID).get(); if (nodesObject.isEmpty() || (nodesObject.get().getCpToDegree() == null)) { LOG.warn("Could not find mapping for Interface {} for nodeId {}", interfaceName, nodeId.getValue()); @@ -399,8 +401,9 @@ public class R2RTapiLinkDiscovery { public Direction getDegreeDirection(Integer degreeCounter, NodeId nodeId) { InstanceIdentifier nodesIID = InstanceIdentifier.builder(Network.class) .child(Nodes.class, new NodesKey(nodeId.getValue())).build(); - try (ReadTransaction readTx = this.dataBroker.newReadOnlyTransaction()) { - Optional nodesObject = readTx.read(LogicalDatastoreType.CONFIGURATION, nodesIID).get(); + try { + Optional nodesObject = this.networkTransactionService.read(LogicalDatastoreType.CONFIGURATION, + nodesIID).get(); if (nodesObject.isPresent() && (nodesObject.get().getMapping() != null)) { Collection mappingList = nodesObject.get().nonnullMapping().values(); mappingList = mappingList.stream().filter(mp -> mp.getLogicalConnectionPoint().contains("DEG" @@ -423,12 +426,14 @@ public class R2RTapiLinkDiscovery { .child(Topology.class, new TopologyKey(tapiTopoUuid)).child(Node.class, new NodeKey(nodeUuid)) .child(OwnedNodeEdgePoint.class, new OwnedNodeEdgePointKey(nepUuid)) .build(); - try (ReadTransaction readTx = this.dataBroker.newReadOnlyTransaction()) { - Optional optionalOnep = readTx.read(LogicalDatastoreType.OPERATIONAL, onepIID).get(); - if (optionalOnep.isPresent()) { - return optionalOnep.get().getOperationalState(); + try { + Optional optionalOnep = this.networkTransactionService.read( + LogicalDatastoreType.OPERATIONAL, onepIID).get(); + if (!optionalOnep.isPresent()) { + LOG.error("No NEP {} object present in datastore", nepUuid); + return null; } - return null; + return optionalOnep.get().getOperationalState(); } catch (InterruptedException | ExecutionException e) { LOG.error("Failed getting Mapping data from portMapping",e); return null; @@ -441,12 +446,14 @@ public class R2RTapiLinkDiscovery { .child(Topology.class, new TopologyKey(tapiTopoUuid)).child(Node.class, new NodeKey(nodeUuid)) .child(OwnedNodeEdgePoint.class, new OwnedNodeEdgePointKey(nepUuid)) .build(); - try (ReadTransaction readTx = this.dataBroker.newReadOnlyTransaction()) { - Optional optionalOnep = readTx.read(LogicalDatastoreType.OPERATIONAL, onepIID).get(); - if (optionalOnep.isPresent()) { - return optionalOnep.get().getAdministrativeState(); + try { + Optional optionalOnep = this.networkTransactionService.read( + LogicalDatastoreType.OPERATIONAL, onepIID).get(); + if (!optionalOnep.isPresent()) { + LOG.error("No NEP {} object present in datastore", nepUuid); + return null; } - return null; + return optionalOnep.get().getAdministrativeState(); } catch (InterruptedException | ExecutionException e) { LOG.error("Failed getting Mapping data from portMapping",e); return null; diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiNetworkModelServiceImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiNetworkModelServiceImpl.java index eee0ba1fb..767030a9d 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiNetworkModelServiceImpl.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiNetworkModelServiceImpl.java @@ -219,7 +219,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService { if (!rdm2rdmLinks.isEmpty()) { mergeLinkinTopology(rdm2rdmLinks); } - + LOG.info("TAPI node for or node {} successfully merged", orNodeId); } else if (NodeTypes.Xpdr.getIntValue() == node.getNodeInfo().getNodeType().getIntValue()) { List networkMappings = node.nonnullMapping().values() .stream().filter(k -> k.getLogicalConnectionPoint() @@ -249,6 +249,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService { mergeSipsinContext(this.sipMap); } } + LOG.info("TAPI node for or node {} successfully merged", orNodeId); } // Device not managed yet } diff --git a/tapi/src/main/resources/OSGI-INF/blueprint/tapi-blueprint.xml b/tapi/src/main/resources/OSGI-INF/blueprint/tapi-blueprint.xml index 10fe76ca8..e92e99cfa 100644 --- a/tapi/src/main/resources/OSGI-INF/blueprint/tapi-blueprint.xml +++ b/tapi/src/main/resources/OSGI-INF/blueprint/tapi-blueprint.xml @@ -86,7 +86,7 @@ Author: Gilles Thouenon - + diff --git a/tests/transportpce_tests/2.2.1/test13_tapi_full_multi_layer.py b/tests/transportpce_tests/2.2.1/test13_tapi_full_multi_layer.py index 348610107..85323c94d 100644 --- a/tests/transportpce_tests/2.2.1/test13_tapi_full_multi_layer.py +++ b/tests/transportpce_tests/2.2.1/test13_tapi_full_multi_layer.py @@ -132,22 +132,27 @@ class TransportPCEtesting(unittest.TestCase): time.sleep(5) def test_01_connect_spdrA(self): - response = test_utils.mount_device("SPDR-SA1", ('spdra', self.NODE_VERSION)) + print("Connecting SPDRA") + response = test_utils.mount_tapi_device("SPDR-SA1", ('spdra', self.NODE_VERSION)) self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201) def test_02_connect_spdrC(self): - response = test_utils.mount_device("SPDR-SC1", ('spdrc', self.NODE_VERSION)) + print("Connecting SPDRC") + response = test_utils.mount_tapi_device("SPDR-SC1", ('spdrc', self.NODE_VERSION)) self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201) def test_03_connect_rdmA(self): - response = test_utils.mount_device("ROADM-A1", ('roadma', self.NODE_VERSION)) + print("Connecting ROADMA") + response = test_utils.mount_tapi_device("ROADM-A1", ('roadma', self.NODE_VERSION)) self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201) + time.sleep(2) def test_04_connect_rdmC(self): - response = test_utils.mount_device("ROADM-C1", ('roadmc', self.NODE_VERSION)) + print("Connecting ROADMC") + response = test_utils.mount_tapi_device("ROADM-C1", ('roadmc', self.NODE_VERSION)) self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201) @@ -169,7 +174,16 @@ class TransportPCEtesting(unittest.TestCase): res["output"]["result"]) time.sleep(2) - def test_07_connect_sprdC_1_N1_to_roadmC_PP1(self): + def test_07_connect_roadmA_PP1_to_spdrA_1_N1_tapi(self): + response = test_utils.connect_xpdr_to_rdm_tapi_request("SPDR-SA1-XPDR1", "XPDR1-NETWORK1", + "ROADM-A1", "SRG1-PP1-TXRX") + self.assertEqual(response.status_code, requests.codes.ok) + res = response.json() + self.assertIn('Link created in tapi topology', + res["output"]["result"]) + time.sleep(2) + + def test_08_connect_sprdC_1_N1_to_roadmC_PP1(self): response = test_utils.connect_xpdr_to_rdm_request("SPDR-SC1", "1", "1", "ROADM-C1", "1", "SRG1-PP1-TXRX") self.assertEqual(response.status_code, requests.codes.ok) @@ -178,7 +192,7 @@ class TransportPCEtesting(unittest.TestCase): res["output"]["result"]) time.sleep(2) - def test_08_connect_roadmC_PP1_to_spdrC_1_N1(self): + def test_09_connect_roadmC_PP1_to_spdrC_1_N1(self): response = test_utils.connect_rdm_to_xpdr_request("SPDR-SC1", "1", "1", "ROADM-C1", "1", "SRG1-PP1-TXRX") self.assertEqual(response.status_code, requests.codes.ok) @@ -187,7 +201,16 @@ class TransportPCEtesting(unittest.TestCase): res["output"]["result"]) time.sleep(2) - def test_09_add_omsAttributes_ROADMA_ROADMC(self): + def test_10_connect_roadmC_PP1_to_spdrC_1_N1_tapi(self): + response = test_utils.connect_xpdr_to_rdm_tapi_request("SPDR-SC1-XPDR1", "XPDR1-NETWORK1", + "ROADM-C1", "SRG1-PP1-TXRX") + self.assertEqual(response.status_code, requests.codes.ok) + res = response.json() + self.assertIn('Link created in tapi topology', + res["output"]["result"]) + time.sleep(2) + + def test_11_add_omsAttributes_ROADMA_ROADMC(self): # Config ROADMA-ROADMC oms-attributes data = {"span": { "auto-spanloss": "true", @@ -204,7 +227,7 @@ class TransportPCEtesting(unittest.TestCase): self.assertEqual(response.status_code, requests.codes.created) time.sleep(2) - def test_10_add_omsAttributes_ROADMC_ROADMA(self): + def test_12_add_omsAttributes_ROADMC_ROADMA(self): # Config ROADMC-ROADMA oms-attributes data = {"span": { "auto-spanloss": "true", @@ -221,7 +244,7 @@ class TransportPCEtesting(unittest.TestCase): self.assertEqual(response.status_code, requests.codes.created) time.sleep(2) - def test_11_check_otn_topology(self): + def test_13_check_otn_topology(self): response = test_utils.get_otn_topo_request() self.assertEqual(response.status_code, requests.codes.ok) res = response.json() @@ -230,7 +253,7 @@ class TransportPCEtesting(unittest.TestCase): self.assertNotIn('ietf-network-topology:link', res['network'][0]) time.sleep(2) - def test_12_check_openroadm_topology(self): + def test_14_check_openroadm_topology(self): response = test_utils.get_ordm_topo_request("") self.assertEqual(response.status_code, requests.codes.ok) res = response.json() @@ -240,7 +263,7 @@ class TransportPCEtesting(unittest.TestCase): self.assertEqual(nbLink, 22, 'There should be 22 openroadm links') time.sleep(2) - def test_13_get_tapi_topology_details(self): + def test_15_get_tapi_topology_details(self): response = test_utils.tapi_get_topology_details_request( "T0 - Full Multi-layer topology") time.sleep(2) @@ -249,10 +272,10 @@ class TransportPCEtesting(unittest.TestCase): nbNode = len(res['output']['topology']['node']) nbLink = len(res['output']['topology']['link']) self.assertEqual(nbNode, 14, 'There should be 14 TAPI nodes') - self.assertEqual(nbLink, 13, 'There should be 13 TAPI links') + self.assertEqual(nbLink, 15, 'There should be 15 TAPI links') time.sleep(2) - def test_14_check_sip_details(self): + def test_16_check_sip_details(self): response = test_utils.tapi_get_sip_details_request() self.assertEqual(response.status_code, requests.codes.ok) res = response.json() @@ -261,7 +284,7 @@ class TransportPCEtesting(unittest.TestCase): time.sleep(2) # test create connectivity service from spdrA to spdrC for Photonic_media - def test_15_create_connectivity_service_PhotonicMedia(self): + def test_17_create_connectivity_service_PhotonicMedia(self): response = test_utils.tapi_create_connectivity_request(self.cr_serv_sample_data) time.sleep(self.WAITING) self.assertEqual(response.status_code, requests.codes.ok) @@ -288,9 +311,10 @@ class TransportPCEtesting(unittest.TestCase): res['output']['service']['end-point'][0]['name'][0]) self.assertDictEqual(dict(input_dict_3, **res['output']['service']['end-point'][1]['name'][0]), res['output']['service']['end-point'][1]['name'][0]) + # If the gate fails is because of the waiting time not being enough time.sleep(self.WAITING) - def test_16_get_service_PhotonicMedia(self): + def test_18_get_service_PhotonicMedia(self): response = test_utils.get_service_list_request( "services/" + str(self.uuid_services.pm)) self.assertEqual(response.status_code, requests.codes.ok) @@ -306,7 +330,7 @@ class TransportPCEtesting(unittest.TestCase): time.sleep(2) # test create connectivity service from spdrA to spdrC for odu - def test_17_create_connectivity_service_ODU(self): + def test_19_create_connectivity_service_ODU(self): # pylint: disable=line-too-long self.cr_serv_sample_data["input"]["end-point"][0]["layer-protocol-name"] = "ODU" self.cr_serv_sample_data["input"]["end-point"][0]["service-interface-point"]["service-interface-point-uuid"] = "eecbfa6e-57ab-3651-9606-c22c8ce73f18" @@ -340,9 +364,10 @@ class TransportPCEtesting(unittest.TestCase): res['output']['service']['end-point'][0]['name'][0]) self.assertDictEqual(dict(input_dict_3, **res['output']['service']['end-point'][1]['name'][0]), res['output']['service']['end-point'][1]['name'][0]) + # If the gate fails is because of the waiting time not being enough time.sleep(self.WAITING) - def test_18_get_service_ODU(self): + def test_20_get_service_ODU(self): response = test_utils.get_service_list_request( "services/" + str(self.uuid_services.odu)) self.assertEqual(response.status_code, requests.codes.ok) @@ -358,7 +383,7 @@ class TransportPCEtesting(unittest.TestCase): time.sleep(2) # test create connectivity service from spdrA to spdrC for dsr - def test_19_create_connectivity_service_DSR(self): + def test_21_create_connectivity_service_DSR(self): # pylint: disable=line-too-long self.cr_serv_sample_data["input"]["end-point"][0]["layer-protocol-name"] = "DSR" self.cr_serv_sample_data["input"]["end-point"][0]["service-interface-point"]["service-interface-point-uuid"] = "c14797a0-adcc-3875-a1fe-df8949d1a2d7" @@ -396,9 +421,10 @@ class TransportPCEtesting(unittest.TestCase): self.assertDictEqual(dict(input_dict_3, **res['output']['service']['end-point'][1]['name'][0]), res['output']['service']['end-point'][1]['name'][0]) + # The sleep here is okey as the DSR service creation is very fast time.sleep(self.WAITING) - def test_20_get_service_DSR(self): + def test_22_get_service_DSR(self): response = test_utils.get_service_list_request( "services/" + str(self.uuid_services.dsr)) self.assertEqual(response.status_code, requests.codes.ok) @@ -413,7 +439,7 @@ class TransportPCEtesting(unittest.TestCase): res['services'][0]['lifecycle-state'], 'planned') time.sleep(2) - def test_21_get_connectivity_service_list(self): + def test_23_get_connectivity_service_list(self): response = test_utils.tapi_get_service_list_request() self.assertEqual(response.status_code, requests.codes.ok) res = response.json() @@ -438,22 +464,22 @@ class TransportPCEtesting(unittest.TestCase): self.fail("get connectivity service failed") time.sleep(2) - def test_22_delete_connectivity_service_DSR(self): + def test_24_delete_connectivity_service_DSR(self): response = test_utils.tapi_delete_connectivity_request(self.uuid_services.dsr) self.assertEqual(response.status_code, requests.codes.no_content) time.sleep(self.WAITING) - def test_23_delete_connectivity_service_ODU(self): + def test_25_delete_connectivity_service_ODU(self): response = test_utils.tapi_delete_connectivity_request(self.uuid_services.odu) self.assertEqual(response.status_code, requests.codes.no_content) time.sleep(self.WAITING) - def test_24_delete_connectivity_service_PhotonicMedia(self): + def test_26_delete_connectivity_service_PhotonicMedia(self): response = test_utils.tapi_delete_connectivity_request(self.uuid_services.pm) self.assertEqual(response.status_code, requests.codes.no_content) time.sleep(self.WAITING) - def test_25_get_no_tapi_services(self): + def test_27_get_no_tapi_services(self): response = test_utils.tapi_get_service_list_request() res = response.json() self.assertIn( @@ -463,7 +489,7 @@ class TransportPCEtesting(unittest.TestCase): res['errors']['error']) time.sleep(2) - def test_26_get_no_openroadm_services(self): + def test_28_get_no_openroadm_services(self): response = test_utils.get_service_list_request("") self.assertEqual(response.status_code, requests.codes.conflict) res = response.json() @@ -473,22 +499,22 @@ class TransportPCEtesting(unittest.TestCase): res['errors']['error']) time.sleep(2) - def test_27_disconnect_spdrA(self): + def test_29_disconnect_spdrA(self): response = test_utils.unmount_device("SPDR-SA1") self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200) - def test_28_disconnect_spdrC(self): + def test_30_disconnect_spdrC(self): response = test_utils.unmount_device("SPDR-SC1") self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200) - def test_29_disconnect_roadmA(self): + def test_31_disconnect_roadmA(self): response = test_utils.unmount_device("ROADM-A1") self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200) - def test_30_disconnect_roadmC(self): + def test_32_disconnect_roadmC(self): response = test_utils.unmount_device("ROADM-C1") self.assertEqual(response.status_code, requests.codes.ok, test_utils.CODE_SHOULD_BE_200) diff --git a/tests/transportpce_tests/common/test_utils.py b/tests/transportpce_tests/common/test_utils.py index cfb5f92e0..ca3ef103f 100644 --- a/tests/transportpce_tests/common/test_utils.py +++ b/tests/transportpce_tests/common/test_utils.py @@ -261,6 +261,27 @@ def mount_device(node_id, sim): return response +def mount_tapi_device(node_id, sim): + url = URL_CONFIG_NETCONF_TOPO + "node/" + node_id + body = {"node": [{ + "node-id": node_id, + "netconf-node-topology:username": NODES_LOGIN, + "netconf-node-topology:password": NODES_PWD, + "netconf-node-topology:host": "127.0.0.1", + "netconf-node-topology:port": SIMS[sim]['port'], + "netconf-node-topology:tcp-only": "false", + "netconf-node-topology:pass-through": {}}]} + response = put_request(url, body) + if wait_until_log_contains(TPCE_LOG, re.escape(f"TAPI node for or node {node_id} successfully merged"), 200): + print("Node " + node_id + " correctly added to tpce topology", end='... ', flush=True) + else: + print("Node " + node_id + " still not added to tpce topology", end='... ', flush=True) + if response.status_code == requests.codes.ok: + print("It was probably loaded at start-up", end='... ', flush=True) + # TODO an else-clause to abort test would probably be nice here + return response + + def unmount_device(node_id): url = URL_CONFIG_NETCONF_TOPO + "node/" + node_id response = delete_request(url) @@ -307,6 +328,19 @@ def connect_rdm_to_xpdr_request(xpdr_node: str, xpdr_num: str, network_num: str, return post_request(url, data) +def connect_xpdr_to_rdm_tapi_request(xpdr_node: str, xpdr_num: str, rdm_node: str, srg_num: str): + url = "{}/operations/transportpce-tapinetworkutils:init-xpdr-rdm-tapi-link" + data = { + "input": { + "xpdr-node": xpdr_node, + "network-tp": xpdr_num, + "rdm-node": rdm_node, + "add-drop-tp": srg_num + } + } + return post_request(url, data) + + def check_netconf_node_request(node: str, suffix: str): url = URL_CONFIG_NETCONF_TOPO + ( "node/" + node + "/yang-ext:mount/org-openroadm-device:org-openroadm-device/" + suffix -- 2.36.6