From a03a2cb26606a9099f2ea8cfd589f7ef503f0374 Mon Sep 17 00:00:00 2001 From: Jozef Gloncak Date: Tue, 2 Feb 2016 08:35:12 +0100 Subject: Adding named augmentation + prepare naked application. Named augmentation of node topology-types was added for better readibility of generated code. Running application was created. It is possible to start via installing feature odl-vbd-rest. Change-Id: I2d919cd20d962ff9b28143794f6984137331c51a Signed-off-by: Jozef Gloncak --- vbd/api/src/main/yang/vbridge-topology.yang | 3 ++ vbd/artifacts/pom.xml | 7 ++++ vbd/features/pom.xml | 6 ++-- vbd/features/src/main/features/features.xml | 8 ++--- vbd/impl/pom.xml | 34 ++++++++++++++++++++ .../io/fd/honeycomb/vbd/impl/BridgeDomain.java | 21 ++++++------ .../io/fd/honeycomb/vbd/impl/TopologyMonitor.java | 7 ++-- .../vbd/impl/VirtualBridgeDomainManager.java | 9 +++--- .../xml/ns/yang/vbd/impl/rev160202/VbdModule.java | 32 +++++++++++++++++++ .../yang/vbd/impl/rev160202/VbdModuleFactory.java | 13 ++++++++ .../ns/yang/vbd/impl/rev160202/VbdProvider.java | 22 +++++++++++++ vbd/impl/src/main/resources/config/vbd.xml | 37 ++++++++++++++++++++++ vbd/impl/src/main/yang/vbd-impl.yang | 35 ++++++++++++++++++++ 13 files changed, 213 insertions(+), 21 deletions(-) create mode 100644 vbd/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vbd/impl/rev160202/VbdModule.java create mode 100644 vbd/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vbd/impl/rev160202/VbdModuleFactory.java create mode 100644 vbd/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vbd/impl/rev160202/VbdProvider.java create mode 100644 vbd/impl/src/main/resources/config/vbd.xml create mode 100644 vbd/impl/src/main/yang/vbd-impl.yang (limited to 'vbd') diff --git a/vbd/api/src/main/yang/vbridge-topology.yang b/vbd/api/src/main/yang/vbridge-topology.yang index 36e50aea0..f105b5e41 100644 --- a/vbd/api/src/main/yang/vbridge-topology.yang +++ b/vbd/api/src/main/yang/vbridge-topology.yang @@ -37,6 +37,7 @@ module vbridge-topology { import network-topology { prefix nt; revision-date 2013-10-21; } import odl-external-reference { prefix extref; } import v3po { prefix "v3po"; } + import yang-ext { prefix ext; revision-date "2013-07-09"; } identity tunnel-type { description "Type of tunneling technology"; @@ -56,12 +57,14 @@ module vbridge-topology { } augment "/nt:network-topology/nt:topology/nt:topology-types" { + ext:augment-identifier "topology-types-vbridge-augment"; container vbridge-topology { presence "Indicates a virtual bridge domain topology"; } } augment "/nt:network-topology/nt:topology" { + ext:augment-identifier "topology-vbridge-augment"; when "./nt:topology-types/vbridge-topology"; // Pointer to the NETCONF topology which supports this bridge domain diff --git a/vbd/artifacts/pom.xml b/vbd/artifacts/pom.xml index b52fa71dd..6b926a4dd 100644 --- a/vbd/artifacts/pom.xml +++ b/vbd/artifacts/pom.xml @@ -34,6 +34,13 @@ vbd-impl 1.0.0-SNAPSHOT + + ${project.groupId} + vbd-impl + xml + config + 1.0.0-SNAPSHOT + ${project.groupId} vbd-features diff --git a/vbd/features/pom.xml b/vbd/features/pom.xml index 0640372cb..ec852ba82 100644 --- a/vbd/features/pom.xml +++ b/vbd/features/pom.xml @@ -119,12 +119,14 @@ ${project.groupId} vbd-impl - + + ${project.groupId} vbd-api diff --git a/vbd/features/src/main/features/features.xml b/vbd/features/src/main/features/features.xml index b35290211..b47ee1b16 100644 --- a/vbd/features/src/main/features/features.xml +++ b/vbd/features/src/main/features/features.xml @@ -33,16 +33,16 @@ odl-vbd-api odl-netconf-connector-ssh odl-netconf-mdsal - - + mvn:io.fd.honeycomb.vbd/vbd-impl/{{VERSION}} + mvn:io.fd.honeycomb.vbd/vbd-impl/{{VERSION}}/xml/config - + + + + org.codehaus.mojo + build-helper-maven-plugin + + + attach-artifacts + + attach-artifact + + package + + + + ${project.build.directory}/classes/config/vbd.xml + xml + config + + + + + + + + + diff --git a/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/BridgeDomain.java b/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/BridgeDomain.java index aff03b2a6..9cea6589f 100644 --- a/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/BridgeDomain.java +++ b/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/BridgeDomain.java @@ -18,9 +18,10 @@ import org.opendaylight.controller.md.sal.binding.api.DataObjectModification.Mod import org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener; import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; +import org.opendaylight.controller.md.sal.binding.api.MountPointService; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.Topology1; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.TopologyVbridgeAugment; 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; @@ -41,19 +42,21 @@ final class BridgeDomain implements DataTreeChangeListener { @GuardedBy("this") private final BindingTransactionChain chain; private final ListenerRegistration reg; - private Topology1 config; + private final MountPointService mountService; + private TopologyVbridgeAugment config; - private BridgeDomain(final DataBroker dataBroker, final KeyedInstanceIdentifier topology, + private BridgeDomain(final DataBroker dataBroker, final MountPointService mountService, final KeyedInstanceIdentifier topology, final BindingTransactionChain chain) { this.topology = Preconditions.checkNotNull(topology); this.chain = Preconditions.checkNotNull(chain); + this.mountService = mountService; reg = dataBroker.registerDataTreeChangeListener( new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, topology), this); } static BridgeDomain create(final DataBroker dataBroker, - final KeyedInstanceIdentifier topology, final BindingTransactionChain chain) { + MountPointService mountService, final KeyedInstanceIdentifier topology, final BindingTransactionChain chain) { LOG.debug("Wiping operational state of {}", topology); @@ -61,7 +64,7 @@ final class BridgeDomain implements DataTreeChangeListener { tx.delete(LogicalDatastoreType.OPERATIONAL, topology); tx.submit(); - return new BridgeDomain(dataBroker, topology, chain); + return new BridgeDomain(dataBroker, mountService, topology, chain); } synchronized void forceStop() { @@ -92,7 +95,7 @@ final class BridgeDomain implements DataTreeChangeListener { break; case SUBTREE_MODIFIED: // First check if the configuration has changed - final DataObjectModification newConfig = mod.getModifiedAugmentation(Topology1.class); + final DataObjectModification newConfig = mod.getModifiedAugmentation(TopologyVbridgeAugment.class); if (newConfig != null) { if (newConfig.getModificationType() != ModificationType.DELETE) { LOG.debug("Topology {} modified configuration {}", topology, newConfig); @@ -116,7 +119,7 @@ final class BridgeDomain implements DataTreeChangeListener { final Topology data = mod.getDataAfter(); // Read configuration - final Topology1 config = data.getAugmentation(Topology1.class); + final TopologyVbridgeAugment config = data.getAugmentation(TopologyVbridgeAugment.class); if (config != null) { setConfiguration(config); } else { @@ -153,14 +156,14 @@ final class BridgeDomain implements DataTreeChangeListener { } } - private void setConfiguration(final Topology1 config) { + private void setConfiguration(final TopologyVbridgeAugment config) { LOG.debug("Topology {} configuration set to {}", topology, config); this.config = config; } @GuardedBy("this") - private void updateConfiguration(final DataObjectModification mod) { + private void updateConfiguration(final DataObjectModification mod) { LOG.debug("Topology {} configuration changed", topology); // FIXME: do something smarter diff --git a/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/TopologyMonitor.java b/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/TopologyMonitor.java index b2e52c37e..213ff6685 100644 --- a/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/TopologyMonitor.java +++ b/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/TopologyMonitor.java @@ -19,6 +19,7 @@ import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.DataObjectModification; import org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener; import org.opendaylight.controller.md.sal.binding.api.DataTreeModification; +import org.opendaylight.controller.md.sal.binding.api.MountPointService; import org.opendaylight.controller.md.sal.common.api.data.AsyncTransaction; import org.opendaylight.controller.md.sal.common.api.data.TransactionChain; import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener; @@ -39,9 +40,11 @@ final class TopologyMonitor implements DataTreeChangeListener, @GuardedBy("this") private final Map domains = new HashMap<>(); private final DataBroker dataBroker; + private final MountPointService mountService; - TopologyMonitor(final DataBroker dataBroker) { + public TopologyMonitor(DataBroker dataBroker, MountPointService mountService) { this.dataBroker = Preconditions.checkNotNull(dataBroker); + this.mountService = Preconditions.checkNotNull(mountService); } @Override @@ -115,7 +118,7 @@ final class TopologyMonitor implements DataTreeChangeListener, } }); - final BridgeDomain domain = BridgeDomain.create(dataBroker, topology, chain); + final BridgeDomain domain = BridgeDomain.create(dataBroker, mountService, topology, chain); domains.put(topology.getKey(), domain); LOG.debug("Bridge domain {} for {} started", domain, topology); diff --git a/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/VirtualBridgeDomainManager.java b/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/VirtualBridgeDomainManager.java index 37da73159..0c1d08faa 100644 --- a/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/VirtualBridgeDomainManager.java +++ b/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/VirtualBridgeDomainManager.java @@ -12,8 +12,9 @@ import com.google.common.base.Preconditions; import javax.annotation.Nonnull; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier; +import org.opendaylight.controller.md.sal.binding.api.MountPointService; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.TopologyTypes1; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.TopologyTypesVbridgeAugment; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.network.topology.topology.topology.types.VbridgeTopology; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology; @@ -32,7 +33,7 @@ public final class VirtualBridgeDomainManager implements AutoCloseable { private static final DataTreeIdentifier LISTEN_TREE = new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.builder(NetworkTopology.class).child(Topology.class).child(TopologyTypes.class) - .augmentation(TopologyTypes1.class).child(VbridgeTopology.class).build()); + .augmentation(TopologyTypesVbridgeAugment.class).child(VbridgeTopology.class).build()); private final ListenerRegistration reg; private boolean closed; @@ -41,9 +42,9 @@ public final class VirtualBridgeDomainManager implements AutoCloseable { this.reg = Preconditions.checkNotNull(reg); } - public static VirtualBridgeDomainManager create(@Nonnull final DataBroker dataBroker) { + public static VirtualBridgeDomainManager create(@Nonnull final DataBroker dataBroker,@Nonnull MountPointService mountService) { final ListenerRegistration reg = - dataBroker.registerDataTreeChangeListener(LISTEN_TREE, new TopologyMonitor(dataBroker)); + dataBroker.registerDataTreeChangeListener(LISTEN_TREE, new TopologyMonitor(dataBroker, mountService)); return new VirtualBridgeDomainManager(reg); } diff --git a/vbd/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vbd/impl/rev160202/VbdModule.java b/vbd/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vbd/impl/rev160202/VbdModule.java new file mode 100644 index 000000000..6157320d6 --- /dev/null +++ b/vbd/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vbd/impl/rev160202/VbdModule.java @@ -0,0 +1,32 @@ +package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbd.impl.rev160202; + +import io.fd.honeycomb.vbd.impl.VirtualBridgeDomainManager; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.MountPointService; +import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; + +public class VbdModule extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbd.impl.rev160202.AbstractVbdModule { + public VbdModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) { + super(identifier, dependencyResolver); + } + + public VbdModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbd.impl.rev160202.VbdModule oldModule, java.lang.AutoCloseable oldInstance) { + super(identifier, dependencyResolver, oldModule, oldInstance); + } + + @Override + public void customValidation() { + // add custom validation form module attributes here. + } + + @Override + public java.lang.AutoCloseable createInstance() { + final BindingAwareBroker brokerDependency = getBrokerDependency(); + BindingAwareBroker.ProviderContext session = brokerDependency.registerProvider(new VbdProvider()); + + DataBroker dataBroker = session.getSALService(DataBroker.class); + MountPointService mountService = session.getSALService(MountPointService.class); + return VirtualBridgeDomainManager.create(dataBroker, mountService); + } + +} diff --git a/vbd/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vbd/impl/rev160202/VbdModuleFactory.java b/vbd/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vbd/impl/rev160202/VbdModuleFactory.java new file mode 100644 index 000000000..4f87fe6a1 --- /dev/null +++ b/vbd/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vbd/impl/rev160202/VbdModuleFactory.java @@ -0,0 +1,13 @@ +/* +* Generated file +* +* Generated from: yang module name: vbd-impl yang module local name: vbd +* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator +* Generated at: Tue Feb 02 10:45:40 CET 2016 +* +* Do not modify this file unless it is present under src/main directory +*/ +package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbd.impl.rev160202; +public class VbdModuleFactory extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbd.impl.rev160202.AbstractVbdModuleFactory { + +} diff --git a/vbd/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vbd/impl/rev160202/VbdProvider.java b/vbd/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vbd/impl/rev160202/VbdProvider.java new file mode 100644 index 000000000..a27aa1e5e --- /dev/null +++ b/vbd/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vbd/impl/rev160202/VbdProvider.java @@ -0,0 +1,22 @@ +/** + * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + *

+ * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbd.impl.rev160202; + +import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; +import org.opendaylight.controller.sal.binding.api.BindingAwareProvider; + +/** + * Created by joe on 2.2.2016. + */ +public class VbdProvider implements BindingAwareProvider { + + @Override + public void onSessionInitiated(BindingAwareBroker.ProviderContext session) { + // Intentional NOOP + } +} diff --git a/vbd/impl/src/main/resources/config/vbd.xml b/vbd/impl/src/main/resources/config/vbd.xml new file mode 100644 index 000000000..c3f4c665b --- /dev/null +++ b/vbd/impl/src/main/resources/config/vbd.xml @@ -0,0 +1,37 @@ + + + + + + urn:opendaylight:params:xml:ns:yang:vbd:impl?module=vbd-impl&revision=2016-02-02 + urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding?module=opendaylight-md-sal-binding&revision=2013-10-28 + + + + + + + prefix:vbd + vbd-name + + binding:binding-broker-osgi-registry + binding-osgi-broker + + + + + + diff --git a/vbd/impl/src/main/yang/vbd-impl.yang b/vbd/impl/src/main/yang/vbd-impl.yang new file mode 100644 index 000000000..d0c259500 --- /dev/null +++ b/vbd/impl/src/main/yang/vbd-impl.yang @@ -0,0 +1,35 @@ +module vbd-impl { + yang-version 1; + namespace "urn:opendaylight:params:xml:ns:yang:vbd:impl"; + prefix "vbd-impl"; + + import config { prefix config; revision-date 2013-04-05; } + import opendaylight-md-sal-binding { prefix md-sal-binding; revision-date 2013-10-28;} + + description + "Service definition for vbd project"; + + revision "2016-02-02" { + description + "Initial revision"; + } + + identity vbd { + base config:module-type; + config:java-name-prefix Vbd; + } + + augment "/config:modules/config:module/config:configuration" { + case vbd { + when "/config:modules/config:module/config:type = 'vbd'"; + container broker { + uses config:service-ref { + refine type { + mandatory true; + config:required-identity md-sal-binding:binding-broker-osgi-registry; + } + } + } + } + } +} -- cgit 1.2.3-korg