From: Peter Suna Date: Thu, 7 Dec 2023 11:18:46 +0000 (+0100) Subject: Fix implementation of create-device RPC X-Git-Tag: v7.0.0~188 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=9f6b75a0f633e8b5c5c9a71e30fafa1b8088883b;p=netconf.git Fix implementation of create-device RPC Store NetconfNode instead of NetconfNodeTopology in createDevice method created from the parameter CreateDeviceInput. This modification allows storing data augmented from the netconf-node-optional model. Without this change, configuration from IgnoreMissingSchemaSources would be lost. JIRA: NETCONF-1192 Change-Id: Iff006fcfe2a41b40e8e41fca5c8a59fc9a55efcb Signed-off-by: Peter Suna --- diff --git a/apps/netconf-topology/src/main/java/org/opendaylight/netconf/topology/spi/NetconfTopologyRPCProvider.java b/apps/netconf-topology/src/main/java/org/opendaylight/netconf/topology/spi/NetconfTopologyRPCProvider.java index 554d563f2e..da2a7d2205 100644 --- a/apps/netconf-topology/src/main/java/org/opendaylight/netconf/topology/spi/NetconfTopologyRPCProvider.java +++ b/apps/netconf-topology/src/main/java/org/opendaylight/netconf/topology/spi/NetconfTopologyRPCProvider.java @@ -26,6 +26,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev231025.cr import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev231025.credentials.credentials.LoginPw; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev231025.credentials.credentials.LoginPwBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev231025.credentials.credentials.login.pw.LoginPasswordBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.optional.rev221225.NetconfNodeAugmentedOptionalBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev221225.CreateDevice; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev221225.CreateDeviceInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev221225.CreateDeviceOutput; @@ -42,6 +43,7 @@ import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology. import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey; import org.opendaylight.yangtools.concepts.Registration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; @@ -84,10 +86,17 @@ public final class NetconfTopologyRPCProvider implements AutoCloseable { } private ListenableFuture> createDevice(final CreateDeviceInput input) { - final NetconfNode node = encryptPassword(input); + final var netconfNode = encryptPassword(input); + final var nodeId = new NodeId(input.getNodeId()); + final var nodeBuilder = new NodeBuilder() + .setNodeId(nodeId) + .addAugmentation(netconfNode); + if (input.getIgnoreMissingSchemaSources() != null) { + final var netconfNodeOptionalBuilder = new NetconfNodeAugmentedOptionalBuilder(input); + nodeBuilder.addAugmentation(netconfNodeOptionalBuilder.build()); + } final SettableFuture> futureResult = SettableFuture.create(); - final NodeId nodeId = new NodeId(input.getNodeId()); - writeToConfigDS(node, nodeId, futureResult); + writeToConfigDS(nodeBuilder.build(), nodeId, futureResult); return futureResult; } @@ -144,12 +153,11 @@ public final class NetconfTopologyRPCProvider implements AutoCloseable { return credentials; } - private void writeToConfigDS(final NetconfNode node, final NodeId nodeId, + private void writeToConfigDS(final Node node, final NodeId nodeId, final SettableFuture> futureResult) { final WriteTransaction writeTransaction = dataBroker.newWriteOnlyTransaction(); - final InstanceIdentifier niid = topologyPath.child(Node.class, - new NodeKey(nodeId)).augmentation(NetconfNode.class); + final InstanceIdentifier niid = topologyPath.child(Node.class, new NodeKey(nodeId)); writeTransaction.mergeParentStructureMerge(LogicalDatastoreType.CONFIGURATION, niid, node); writeTransaction.commit().addCallback(new FutureCallback() {