summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Gradzki <mgradzki@cisco.com>2016-04-07 20:42:26 +0200
committerMarek Gradzki <mgradzki@cisco.com>2016-04-12 10:56:47 +0200
commitba4b79f78d5cc7aa65660775b52f8a58eefc2472 (patch)
tree95690ae7c5cb2b7eb937d9c3ab6c5d5ae7362810
parent8ce64977a8be3a91a86d7a4b3a0d1bbc9f5dbb6f (diff)
HONEYCOMB-34: Initializers. Initial version
Change-Id: Id3e815773813c924e3e53dc3a92826d803848186 Signed-off-by: Marek Gradzki <mgradzki@cisco.com>
-rw-r--r--v3po/artifacts/pom.xml5
-rw-r--r--v3po/data-api/pom.xml14
-rw-r--r--v3po/data-impl/pom.xml14
-rw-r--r--v3po/features/pom.xml5
-rw-r--r--v3po/features/src/main/features/features.xml1
-rw-r--r--v3po/impl/pom.xml5
-rw-r--r--v3po/impl/src/main/config/default-config.xml19
-rw-r--r--v3po/pom.xml1
-rw-r--r--v3po/vpp-cfg-init/pom.xml44
-rw-r--r--v3po/vpp-cfg-init/src/main/java/io/fd/honeycomb/v3po/vpp/data/init/InitializerRegistry.java24
-rw-r--r--v3po/vpp-cfg-init/src/main/java/io/fd/honeycomb/v3po/vpp/data/init/InitializerRegistryImpl.java90
-rw-r--r--v3po/vpp-cfg-init/src/main/java/org/opendaylight/yang/gen/v1/urn/honeycomb/params/xml/ns/yang/vpp/data/init/rev160407/VppConfigurationInitializerModule.java32
-rw-r--r--v3po/vpp-cfg-init/src/main/java/org/opendaylight/yang/gen/v1/urn/honeycomb/params/xml/ns/yang/vpp/data/init/rev160407/VppConfigurationInitializerModuleFactory.java13
-rw-r--r--v3po/vpp-cfg-init/src/main/yang/vpp-cfg-init.yang43
14 files changed, 310 insertions, 0 deletions
diff --git a/v3po/artifacts/pom.xml b/v3po/artifacts/pom.xml
index 909ca45ab..a915cb3b2 100644
--- a/v3po/artifacts/pom.xml
+++ b/v3po/artifacts/pom.xml
@@ -81,6 +81,11 @@
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
+ <artifactId>vpp-cfg-init</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
<artifactId>v3po-impl</artifactId>
<version>${project.version}</version>
</dependency>
diff --git a/v3po/data-api/pom.xml b/v3po/data-api/pom.xml
index 60073734d..846498c28 100644
--- a/v3po/data-api/pom.xml
+++ b/v3po/data-api/pom.xml
@@ -1,4 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2016 Cisco and/or its affiliates.
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at:
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
diff --git a/v3po/data-impl/pom.xml b/v3po/data-impl/pom.xml
index 59a5834ac..0df4f4cf9 100644
--- a/v3po/data-impl/pom.xml
+++ b/v3po/data-impl/pom.xml
@@ -1,4 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2016 Cisco and/or its affiliates.
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at:
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
diff --git a/v3po/features/pom.xml b/v3po/features/pom.xml
index 0ff43204b..ab0384226 100644
--- a/v3po/features/pom.xml
+++ b/v3po/features/pom.xml
@@ -157,6 +157,11 @@
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
+ <artifactId>vpp-cfg-init</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
<artifactId>translate-api</artifactId>
<version>${project.version}</version>
</dependency>
diff --git a/v3po/features/src/main/features/features.xml b/v3po/features/src/main/features/features.xml
index a10e9fe68..234e6fb5d 100644
--- a/v3po/features/src/main/features/features.xml
+++ b/v3po/features/src/main/features/features.xml
@@ -45,6 +45,7 @@
<bundle>wrap:mvn:io.fd.vpp/vppjapi/1.0.0-SNAPSHOT</bundle>
<bundle>mvn:io.fd.honeycomb.v3po/vpp-japi-cfg/${project.version}</bundle>
<bundle>mvn:io.fd.honeycomb.v3po/v3po2vpp/${project.version}</bundle>
+ <bundle>mvn:io.fd.honeycomb.v3po/vpp-cfg-init/${project.version}</bundle>
<configfile finalname="${configfile.directory}/vpp-japi.xml">mvn:io.fd.honeycomb.v3po/vpp-japi-cfg/${project.version}/xml/config</configfile>
<configfile finalname="${configfile.directory}/v3po.xml">mvn:io.fd.honeycomb.v3po/v3po-impl/${project.version}/xml/config</configfile>
<configfile finalname="${configfile.directory}/v3po-netconf.xml">mvn:io.fd.honeycomb.v3po/v3po-impl/${project.version}/xml/netconf</configfile>
diff --git a/v3po/impl/pom.xml b/v3po/impl/pom.xml
index 63eb1f442..c00c98396 100644
--- a/v3po/impl/pom.xml
+++ b/v3po/impl/pom.xml
@@ -49,6 +49,11 @@
<artifactId>data-impl</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>vpp-cfg-init</artifactId>
+ <version>${project.version}</version>
+ </dependency>
<dependency>
<groupId>io.fd.vpp</groupId>
diff --git a/v3po/impl/src/main/config/default-config.xml b/v3po/impl/src/main/config/default-config.xml
index f4b75efc7..5b8ef15da 100644
--- a/v3po/impl/src/main/config/default-config.xml
+++ b/v3po/impl/src/main/config/default-config.xml
@@ -19,6 +19,7 @@
<capability>urn:opendaylight:params:xml:ns:yang:v3po:impl?module=v3po-impl&amp;revision=2014-12-10</capability>
<capability>urn:honeycomb:params:xml:ns:yang:translate:utils?module=translate-utils&amp;revision=2016-04-06</capability>
<capability>urn:honeycomb:params:xml:ns:yang:vpp:japi:cfg?module=vpp-japi-cfg&amp;revision=2016-04-06</capability>
+ <capability>urn:honeycomb:params:xml:ns:yang:vpp:data:init?module=vpp-cfg-init&amp;revision=2016-04-07</capability>
<capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding?module=opendaylight-md-sal-binding&amp;revision=2013-10-28</capability>
</required-capabilities>
<configuration>
@@ -59,6 +60,16 @@
<name>write-registry</name>
</writer-registry>
</module>
+
+ <module>
+ <type xmlns:prefix="urn:honeycomb:params:xml:ns:yang:vpp:data:init">prefix:vpp-cfg-initializer-impl</type>
+ <name>vpp-cfg-initializer</name>
+ <reader-registry>
+ <type xmlns:prefix="urn:honeycomb:params:xml:ns:yang:translate:api">prefix:honeycomb-reader-registry</type>
+ <name>read-registry</name>
+ </reader-registry>
+ </module>
+
</modules>
<services xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
@@ -77,6 +88,14 @@
</instance>
</service>
<service>
+ <type xmlns:prefix="urn:honeycomb:params:xml:ns:yang:vpp:data:init">prefix:vpp-cfg-initializer</type>
+ <instance>
+ <name>vpp-cfg-initializer</name>
+ <provider>/modules/module[type='vpp-cfg-initializer-impl'][name='vpp-cfg-initializer']
+ </provider>
+ </instance>
+ </service>
+ <service>
<type xmlns:dom="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">
dom:dom-broker-osgi-registry
</type>
diff --git a/v3po/pom.xml b/v3po/pom.xml
index 050cf5b5a..6389fb29c 100644
--- a/v3po/pom.xml
+++ b/v3po/pom.xml
@@ -42,6 +42,7 @@
<module>vpp-translate-utils</module>
<module>vpp-japi-cfg</module>
<module>v3po2vpp</module>
+ <module>vpp-cfg-init</module>
<module>impl</module>
<module>karaf</module>
<module>features</module>
diff --git a/v3po/vpp-cfg-init/pom.xml b/v3po/vpp-cfg-init/pom.xml
new file mode 100644
index 000000000..a0c2dcb89
--- /dev/null
+++ b/v3po/vpp-cfg-init/pom.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright (c) 2015 Cisco and/or its affiliates.
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at:
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <groupId>io.fd.honeycomb.common</groupId>
+ <artifactId>impl-parent</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <relativePath>../../common/impl-parent</relativePath>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>io.fd.honeycomb.v3po</groupId>
+ <artifactId>vpp-cfg-init</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <packaging>bundle</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>v3po-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>translate-impl</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+
+</project>
diff --git a/v3po/vpp-cfg-init/src/main/java/io/fd/honeycomb/v3po/vpp/data/init/InitializerRegistry.java b/v3po/vpp-cfg-init/src/main/java/io/fd/honeycomb/v3po/vpp/data/init/InitializerRegistry.java
new file mode 100644
index 000000000..bdb633831
--- /dev/null
+++ b/v3po/vpp-cfg-init/src/main/java/io/fd/honeycomb/v3po/vpp/data/init/InitializerRegistry.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2016 Cisco and/or its affiliates.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.fd.honeycomb.v3po.vpp.data.init;
+
+public interface InitializerRegistry extends AutoCloseable {
+
+ void initialize();
+
+ void clean();
+}
diff --git a/v3po/vpp-cfg-init/src/main/java/io/fd/honeycomb/v3po/vpp/data/init/InitializerRegistryImpl.java b/v3po/vpp-cfg-init/src/main/java/io/fd/honeycomb/v3po/vpp/data/init/InitializerRegistryImpl.java
new file mode 100644
index 000000000..0feada4cb
--- /dev/null
+++ b/v3po/vpp-cfg-init/src/main/java/io/fd/honeycomb/v3po/vpp/data/init/InitializerRegistryImpl.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2016 Cisco and/or its affiliates.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.fd.honeycomb.v3po.vpp.data.init;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import com.google.common.base.Optional;
+import io.fd.honeycomb.v3po.translate.Context;
+import io.fd.honeycomb.v3po.translate.read.ReadContext;
+import io.fd.honeycomb.v3po.translate.read.ReadFailedException;
+import io.fd.honeycomb.v3po.translate.read.ReaderRegistry;
+import javax.annotation.Nonnull;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VppState;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.vpp.state.BridgeDomains;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class InitializerRegistryImpl implements InitializerRegistry, AutoCloseable {
+ private static final Logger LOG = LoggerFactory.getLogger(InitializerRegistryImpl.class);
+ private final ReaderRegistry readerRegistry;
+
+ public InitializerRegistryImpl(@Nonnull final ReaderRegistry readerRegistry) {
+ this.readerRegistry = checkNotNull(readerRegistry, "readerRegistry should not be null");
+ }
+
+
+ @Override
+ public void close() throws Exception {
+ LOG.debug("Initializer.close()");
+ // TODO remove data
+ }
+
+ public void initialize() {
+ try {
+ initializeBridgeDomains();
+ } catch (Exception e) {
+ LOG.error("Initialization failed", e);
+ }
+ }
+
+ @Override
+ public void clean() {
+
+ }
+
+ // TODO make configurable
+ private void initializeBridgeDomains() throws ReadFailedException {
+
+ final InstanceIdentifier<BridgeDomains> bdsID =
+ InstanceIdentifier.create(VppState.class).child(BridgeDomains.class);
+ final ReadContext ctx = new ReadContextImpl();
+ final Optional<? extends DataObject> data = readerRegistry.read(bdsID, ctx);
+
+ LOG.info("BridgeDomains data: {}", data);
+
+ }
+
+ // TODO move to utility module
+ private static final class ReadContextImpl implements ReadContext {
+ public final Context ctx = new Context();
+
+ @Nonnull
+ @Override
+ public Context getContext() {
+ return ctx;
+ }
+
+ @Override
+ public void close() {
+ // Make sure to clear the storage in case some customizer stored it to prevent memory leaks
+ ctx.close();
+ }
+ }
+}
diff --git a/v3po/vpp-cfg-init/src/main/java/org/opendaylight/yang/gen/v1/urn/honeycomb/params/xml/ns/yang/vpp/data/init/rev160407/VppConfigurationInitializerModule.java b/v3po/vpp-cfg-init/src/main/java/org/opendaylight/yang/gen/v1/urn/honeycomb/params/xml/ns/yang/vpp/data/init/rev160407/VppConfigurationInitializerModule.java
new file mode 100644
index 000000000..ecfbaa6d4
--- /dev/null
+++ b/v3po/vpp-cfg-init/src/main/java/org/opendaylight/yang/gen/v1/urn/honeycomb/params/xml/ns/yang/vpp/data/init/rev160407/VppConfigurationInitializerModule.java
@@ -0,0 +1,32 @@
+package org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.vpp.data.init.rev160407;
+
+import io.fd.honeycomb.v3po.translate.read.ReaderRegistry;
+import io.fd.honeycomb.v3po.vpp.data.init.InitializerRegistry;
+import io.fd.honeycomb.v3po.vpp.data.init.InitializerRegistryImpl;
+
+public class VppConfigurationInitializerModule extends org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.vpp.data.init.rev160407.AbstractVppConfigurationInitializerModule {
+ public VppConfigurationInitializerModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
+ super(identifier, dependencyResolver);
+ }
+
+ public VppConfigurationInitializerModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.vpp.data.init.rev160407.VppConfigurationInitializerModule 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 ReaderRegistry readerRegistry = getReaderRegistryDependency();
+
+ InitializerRegistry initializer = new InitializerRegistryImpl(readerRegistry);
+
+ initializer.initialize();
+
+ return initializer;
+ }
+
+}
diff --git a/v3po/vpp-cfg-init/src/main/java/org/opendaylight/yang/gen/v1/urn/honeycomb/params/xml/ns/yang/vpp/data/init/rev160407/VppConfigurationInitializerModuleFactory.java b/v3po/vpp-cfg-init/src/main/java/org/opendaylight/yang/gen/v1/urn/honeycomb/params/xml/ns/yang/vpp/data/init/rev160407/VppConfigurationInitializerModuleFactory.java
new file mode 100644
index 000000000..1e4609703
--- /dev/null
+++ b/v3po/vpp-cfg-init/src/main/java/org/opendaylight/yang/gen/v1/urn/honeycomb/params/xml/ns/yang/vpp/data/init/rev160407/VppConfigurationInitializerModuleFactory.java
@@ -0,0 +1,13 @@
+/*
+* Generated file
+*
+* Generated from: yang module name: vpp-cfg-init yang module local name: vpp-cfg-initializer-impl
+* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
+* Generated at: Fri Apr 08 07:44:53 CEST 2016
+*
+* Do not modify this file unless it is present under src/main directory
+*/
+package org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.vpp.data.init.rev160407;
+public class VppConfigurationInitializerModuleFactory extends org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.vpp.data.init.rev160407.AbstractVppConfigurationInitializerModuleFactory {
+
+}
diff --git a/v3po/vpp-cfg-init/src/main/yang/vpp-cfg-init.yang b/v3po/vpp-cfg-init/src/main/yang/vpp-cfg-init.yang
new file mode 100644
index 000000000..2f6822c6d
--- /dev/null
+++ b/v3po/vpp-cfg-init/src/main/yang/vpp-cfg-init.yang
@@ -0,0 +1,43 @@
+module vpp-cfg-init {
+ yang-version 1;
+ namespace "urn:honeycomb:params:xml:ns:yang:vpp:data:init";
+ prefix "init";
+
+ import config { prefix config; revision-date 2013-04-05; }
+ import translate-api { prefix tapi; revision-date 2016-04-06; }
+
+ description
+ "This module contains initializers for VPP config data tree";
+
+ revision "2016-04-07" {
+ description
+ "Initial revision";
+ }
+
+ identity vpp-cfg-initializer {
+ base "config:service-type";
+ config:java-class io.fd.honeycomb.v3po.vpp.data.init.InitializerRegistry;
+ }
+
+ identity vpp-cfg-initializer-impl {
+ base config:module-type;
+ config:provided-service vpp-cfg-initializer;
+ config:java-name-prefix VppConfigurationInitializer;
+ }
+
+ augment "/config:modules/config:module/config:configuration" {
+ case vpp-cfg-initializer-impl {
+ when "/config:modules/config:module/config:type = 'vpp-cfg-initializer-impl'";
+
+ container reader-registry {
+ uses config:service-ref {
+ refine type {
+ mandatory true;
+ config:required-identity tapi:honeycomb-reader-registry;
+ }
+ }
+ }
+ }
+ }
+
+} \ No newline at end of file