From 149a1664fcb40e1ad83f48878a13d2aff0f65b75 Mon Sep 17 00:00:00 2001 From: Marco Platania Date: Thu, 18 Apr 2019 18:02:47 -0400 Subject: Update Honeycomb to Rel1810 for vFW - Update Honeycomb version to 1810 to support ODL Fluorine - Migrate existing stream-count plugin to 1810 - Update POM structure - Update vPacketGen install file (including ARM64) Change-Id: I2866c80876550cb149cdb5fee3193d453643639c Issue-ID: INT-1035 Signed-off-by: Marco Platania --- vnfs/honeycomb_plugin/parent-pom/pom.xml | 19 ++-- .../stream-count/asciidoc/Readme.adoc | 3 + vnfs/honeycomb_plugin/stream-count/pom.xml | 24 +++-- .../stream-count-api/asciidoc/Readme.adoc | 3 + .../stream-count/stream-count-api/pom.xml | 19 +--- .../stream-count-distribution/asciidoc/Readme.adoc | 3 + .../stream-count/stream-count-distribution/pom.xml | 100 ++++++++++++++++++++ .../stream-count/stream-count-impl/Readme.adoc | 3 - .../stream-count-impl/asciidoc/Readme.adoc | 3 + .../stream-count/stream-count-impl/pom.xml | 22 +++-- .../java/io/fd/honeycomb/lcmapi/CrudService.java | 64 ------------- .../io/fd/honeycomb/lcmapi/ElementCrudService.java | 103 --------------------- .../main/java/io/fd/honeycomb/lcmapi/Module.java | 70 -------------- .../fd/honeycomb/lcmapi/ModuleConfiguration.java | 46 --------- .../lcmapi/init/ConfigDataInitializer.java | 54 ----------- .../honeycomb/lcmapi/write/ElementCustomizer.java | 100 -------------------- .../lcmapi/write/ModuleWriterFactory.java | 57 ------------ .../main/java/org/onap/vnf/vfw/CrudService.java | 64 +++++++++++++ .../java/org/onap/vnf/vfw/ElementCrudService.java | 103 +++++++++++++++++++++ .../src/main/java/org/onap/vnf/vfw/Module.java | 63 +++++++++++++ .../java/org/onap/vnf/vfw/ModuleConfiguration.java | 46 +++++++++ .../org/onap/vnf/vfw/write/ElementCustomizer.java | 96 +++++++++++++++++++ .../onap/vnf/vfw/write/ModuleWriterFactory.java | 57 ++++++++++++ vnfs/vFW/scripts/enable_disable_streams.sh | 21 +++++ vnfs/vFW/scripts/v_packetgen_install.sh | 6 +- vnfs/vFW/scripts/v_packetgen_install_arm64.sh | 5 +- 26 files changed, 610 insertions(+), 544 deletions(-) create mode 100644 vnfs/honeycomb_plugin/stream-count/asciidoc/Readme.adoc create mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-api/asciidoc/Readme.adoc create mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-distribution/asciidoc/Readme.adoc create mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-distribution/pom.xml delete mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-impl/Readme.adoc create mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-impl/asciidoc/Readme.adoc delete mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/CrudService.java delete mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/ElementCrudService.java delete mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/Module.java delete mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/ModuleConfiguration.java delete mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/init/ConfigDataInitializer.java delete mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/write/ElementCustomizer.java delete mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/write/ModuleWriterFactory.java create mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/org/onap/vnf/vfw/CrudService.java create mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/org/onap/vnf/vfw/ElementCrudService.java create mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/org/onap/vnf/vfw/Module.java create mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/org/onap/vnf/vfw/ModuleConfiguration.java create mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/org/onap/vnf/vfw/write/ElementCustomizer.java create mode 100644 vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/org/onap/vnf/vfw/write/ModuleWriterFactory.java create mode 100644 vnfs/vFW/scripts/enable_disable_streams.sh diff --git a/vnfs/honeycomb_plugin/parent-pom/pom.xml b/vnfs/honeycomb_plugin/parent-pom/pom.xml index eb841042..d331f68e 100644 --- a/vnfs/honeycomb_plugin/parent-pom/pom.xml +++ b/vnfs/honeycomb_plugin/parent-pom/pom.xml @@ -52,15 +52,15 @@ done -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 4.1.0 1.2.0 - 1.3.2-Beryllium-SR2 - 1.0.2-Beryllium-SR2 + + 1.19.1 9.3.11.v20160721 3.1.0 - 0.8.2-Beryllium-SR2 - 1.3.2-Beryllium-SR2 + + - 5.0.0 + 4.0.0 @@ -69,11 +69,12 @@ done - ../sample_plugin/sample-plugin-api - ../sample_plugin/sample-plugin-impl + + ../stream-count/stream-count-api ../stream-count/stream-count-impl - ../sample-distribution + ../stream-count/stream-count-distribution + @@ -219,7 +220,7 @@ done io.fd.honeycomb.common minimal-assembly-descriptor - 1.16.9 + 1.18.10 diff --git a/vnfs/honeycomb_plugin/stream-count/asciidoc/Readme.adoc b/vnfs/honeycomb_plugin/stream-count/asciidoc/Readme.adoc new file mode 100644 index 00000000..648b59e3 --- /dev/null +++ b/vnfs/honeycomb_plugin/stream-count/asciidoc/Readme.adoc @@ -0,0 +1,3 @@ += stream-count-aggregator + +Overview of stream-count-aggregator \ No newline at end of file diff --git a/vnfs/honeycomb_plugin/stream-count/pom.xml b/vnfs/honeycomb_plugin/stream-count/pom.xml index e8bdcb9c..8754dab5 100644 --- a/vnfs/honeycomb_plugin/stream-count/pom.xml +++ b/vnfs/honeycomb_plugin/stream-count/pom.xml @@ -12,27 +12,31 @@ 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. ---> +--> + + + + + + org.onap.vnf.vfw - org.opendaylight.odlparent - odlparent - 1.6.2-Beryllium-SR2 + honeycomb-aggregator + io.fd.honeycomb + 1.18.10.1-SNAPSHOT - - io.fd.honeycomb.lcmapi stream-count-aggregator - 1.16.9-SNAPSHOT + 1.18.10 stream-count-aggregator pom 4.0.0 - - 3.1.1 - stream-count-api stream-count-impl + stream-count-distribution diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-api/asciidoc/Readme.adoc b/vnfs/honeycomb_plugin/stream-count/stream-count-api/asciidoc/Readme.adoc new file mode 100644 index 00000000..dee2e71f --- /dev/null +++ b/vnfs/honeycomb_plugin/stream-count/stream-count-api/asciidoc/Readme.adoc @@ -0,0 +1,3 @@ += stream-count-api + +Overview of stream-count-api \ No newline at end of file diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-api/pom.xml b/vnfs/honeycomb_plugin/stream-count/stream-count-api/pom.xml index 3bc79adc..75acf47e 100644 --- a/vnfs/honeycomb_plugin/stream-count/stream-count-api/pom.xml +++ b/vnfs/honeycomb_plugin/stream-count/stream-count-api/pom.xml @@ -16,27 +16,16 @@ io.fd.honeycomb.common api-parent - 1.16.9 + 1.18.10 4.0.0 - io.fd.honeycomb.lcmapi + org.onap.vnf.vfw stream-count-api - 1.16.9 + stream-count-api + 1.18.10 bundle - - - - org.opendaylight.mdsal.model - mdsal-model-artifacts - 0.8.2-Beryllium-SR2 - pom - import - - - - org.opendaylight.mdsal.model diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-distribution/asciidoc/Readme.adoc b/vnfs/honeycomb_plugin/stream-count/stream-count-distribution/asciidoc/Readme.adoc new file mode 100644 index 00000000..6479b112 --- /dev/null +++ b/vnfs/honeycomb_plugin/stream-count/stream-count-distribution/asciidoc/Readme.adoc @@ -0,0 +1,3 @@ += sample-distribution + +Overview of sample-distribution \ No newline at end of file diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-distribution/pom.xml b/vnfs/honeycomb_plugin/stream-count/stream-count-distribution/pom.xml new file mode 100644 index 00000000..ac75a008 --- /dev/null +++ b/vnfs/honeycomb_plugin/stream-count/stream-count-distribution/pom.xml @@ -0,0 +1,100 @@ + + + + + + + + + + io.fd.honeycomb.common + minimal-distribution-parent + 1.18.10 + + + 4.0.0 + org.onap.vnf.vfw + sample-distribution + 1.4.0-SNAPSHOT + + + + + -Xms256m -Xmx256m + io.fd.honeycomb.infra.distro.Main + 1.18.10 + 1.18.10 + + + org.onap.vnf.vfw.Module + + + + + + + maven-compiler-plugin + + + org.codehaus.gmaven + groovy-maven-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + org.apache.maven.plugins + maven-dependency-plugin + + + maven-assembly-plugin + + + org.apache.maven.plugins + maven-deploy-plugin + + false + + + + org.apache.maven.plugins + maven-install-plugin + + false + + + + + + + + + org.onap.vnf.vfw + stream-count-impl + ${interfaces.mapping.version} + + + + io.fd.honeycomb + minimal-distribution + ${honeycomb.min.distro.version} + + + + diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/Readme.adoc b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/Readme.adoc deleted file mode 100644 index 5e347d27..00000000 --- a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/Readme.adoc +++ /dev/null @@ -1,3 +0,0 @@ ---Documentation for stream-count -- - -TODO Replace with general description whats the purpose of stream-count and how it works diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/asciidoc/Readme.adoc b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/asciidoc/Readme.adoc new file mode 100644 index 00000000..98561bb1 --- /dev/null +++ b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/asciidoc/Readme.adoc @@ -0,0 +1,3 @@ += stream-count-impl + +Overview of stream-count-impl \ No newline at end of file diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/pom.xml b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/pom.xml index 25d6d765..1ccd5c14 100644 --- a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/pom.xml +++ b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/pom.xml @@ -12,21 +12,28 @@ 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. ---> +--> + + + + io.fd.honeycomb.common impl-parent - 1.16.9 + 1.18.10 4.0.0 - io.fd.honeycomb.lcmapi + org.onap.vnf.vfw stream-count-impl - 1.16.9 + stream-count-impl + 1.18.10 bundle - 1.16.9 + 1.18.10 @@ -59,21 +66,18 @@ com.google.inject guice - ${guice.version} net.jmob guice.conf - ${guice.config.version} com.google.inject.extensions guice-multibindings - ${guice.version} - + org.apache.maven.plugins diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/CrudService.java b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/CrudService.java deleted file mode 100644 index b9d7f1bb..00000000 --- a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/CrudService.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * 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.lcmapi; - -import io.fd.honeycomb.translate.read.ReadFailedException; -import io.fd.honeycomb.translate.write.WriteFailedException; -import java.util.List; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -/** - * Example of an aggregated access interface. - *

- * Shared by all the customizers hiding the ugly details of our data management. - * - * TODO update javadoc - */ -public interface CrudService { - - /** - * Perform write of provided data. - */ - void writeData(@Nonnull final InstanceIdentifier identifier, @Nonnull final T data) - throws WriteFailedException; - - - /** - * Perform delete of existing data. - */ - void deleteData(@Nonnull final InstanceIdentifier identifier, @Nonnull final T data) - throws WriteFailedException; - - /** - * Perform update of existing data. - */ - void updateData(@Nonnull final InstanceIdentifier identifier, @Nonnull final T dataOld, - @Nonnull final T dataNew) - throws WriteFailedException; - - /** - * Read data identified by provided identifier. - */ - T readSpecific(@Nonnull final InstanceIdentifier identifier) throws ReadFailedException; - - /** - * Read all nodes of type {@link T}. - */ - List readAll() throws ReadFailedException; -} diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/ElementCrudService.java b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/ElementCrudService.java deleted file mode 100644 index fa6a31d5..00000000 --- a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/ElementCrudService.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * 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. - */ - -/* - * Modifications copyright (c) 2019 AT&T Intellectual Property - */ - -package io.fd.honeycomb.lcmapi; - -import io.fd.honeycomb.translate.read.ReadFailedException; -import io.fd.honeycomb.translate.write.WriteFailedException; -import java.util.Collections; -import java.util.List; -import javax.annotation.Nonnull; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.StreamCountState; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.stream.count.params.Streams; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.stream.count.params.StreamsBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.StreamNum; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Simple example of class handling Crud operations for plugin. - *

- * No real handling, serves just as an illustration. - * - * TODO update javadoc - */ -final class ElementCrudService implements CrudService { - - private static final Logger LOG = LoggerFactory.getLogger(ElementCrudService.class); - - @Override - public void writeData(@Nonnull final InstanceIdentifier identifier, @Nonnull final Streams data) - throws WriteFailedException { - if (data != null) { - - // Performs any logic needed for persisting such data - LOG.info("Writing path[{}] / data [{}]", identifier, data); - } else { - throw new WriteFailedException.CreateFailedException(identifier, data, - new NullPointerException("Provided data are null")); - } - } - - @Override - public void deleteData(@Nonnull final InstanceIdentifier identifier, @Nonnull final Streams data) - throws WriteFailedException { - if (data != null) { - - // Performs any logic needed for persisting such data - LOG.info("Removing path[{}] / data [{}]", identifier, data); - } else { - throw new WriteFailedException.DeleteFailedException(identifier, - new NullPointerException("Provided data are null")); - } - } - - @Override - public void updateData(@Nonnull final InstanceIdentifier identifier, @Nonnull final Streams dataOld, - @Nonnull final Streams dataNew) throws WriteFailedException { - if (dataOld != null && dataNew != null) { - - // Performs any logic needed for persisting such data - LOG.info("Update path[{}] from [{}] to [{}]", identifier, dataOld, dataNew); - } else { - throw new WriteFailedException.DeleteFailedException(identifier, - new NullPointerException("Provided data are null")); - } - } - - @Override - public Streams readSpecific(@Nonnull final InstanceIdentifier identifier) throws ReadFailedException { - - // load data by this key - // *Key class will always contain key of entity, in this case long value - - return new StreamsBuilder() - .setActiveStreams(new StreamNum(1L)) - .build(); - } - - @Override - public List readAll() throws ReadFailedException { - // read all data under parent node,in this case {@link ModuleState} - return Collections.singletonList( - readSpecific(InstanceIdentifier.create(StreamCountState.class).child(Streams.class))); - } -} diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/Module.java b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/Module.java deleted file mode 100644 index 05109db3..00000000 --- a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/Module.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * 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. - */ - -/* - * Modifications copyright (c) 2019 AT&T Intellectual Property - */ - -package io.fd.honeycomb.lcmapi; - -import static io.fd.honeycomb.lcmapi.ModuleConfiguration.ELEMENT_SERVICE_NAME; - -import com.google.inject.AbstractModule; -import com.google.inject.TypeLiteral; -import com.google.inject.multibindings.Multibinder; -import com.google.inject.name.Names; -import io.fd.honeycomb.lcmapi.init.ConfigDataInitializer; -import io.fd.honeycomb.lcmapi.write.ModuleWriterFactory; -import io.fd.honeycomb.data.init.DataTreeInitializer; -import io.fd.honeycomb.translate.write.WriterFactory; -import net.jmob.guice.conf.core.ConfigurationModule; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.stream.count.params.Streams; - -/** - * Module class instantiating stream-count plugin components. - */ -public final class Module extends AbstractModule { - - // TODO This initiates all the plugin components, but it still needs to be registered/wired into an integration - // module producing runnable distributions. There is one such distribution in honeycomb project: - // vpp-integration/minimal-distribution - // In order to integrate this plugin with the distribution: - // 1. Add a dependency on this maven module to the the distribution's pom.xml - // 2. Add an instance of this module into the distribution in its Main class - - @Override - protected void configure() { - // requests injection of properties - install(ConfigurationModule.create()); - requestInjection(ModuleConfiguration.class); - - // creates binding for interface implementation by name - bind(new TypeLiteral>(){}) - .annotatedWith(Names.named(ELEMENT_SERVICE_NAME)) - .to(ElementCrudService.class); - - // create writer factory binding - // can hold multiple binding for separate yang modules - final Multibinder writerFactoryBinder = Multibinder.newSetBinder(binder(), WriterFactory.class); - writerFactoryBinder.addBinding().to(ModuleWriterFactory.class); - - // create initializer binding - // can hold multiple binding for separate yang modules - final Multibinder initializerBinder = - Multibinder.newSetBinder(binder(), DataTreeInitializer.class); - initializerBinder.addBinding().to(ConfigDataInitializer.class); - } -} diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/ModuleConfiguration.java b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/ModuleConfiguration.java deleted file mode 100644 index c574b3ef..00000000 --- a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/ModuleConfiguration.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * 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.lcmapi; - -import net.jmob.guice.conf.core.BindConfig; -import net.jmob.guice.conf.core.InjectConfig; -import net.jmob.guice.conf.core.Syntax; - -/** - * Class containing static configuration for stream-count module,
- * either loaded from property file stream-count.json from classpath. - *

- * Further documentation for the configuration injection can be found at: - * https://github.com/yyvess/gconf - */ -@BindConfig(value = "stream-count", syntax = Syntax.JSON) -public final class ModuleConfiguration { - - // TODO change the sample property to real plugin configuration - // If there is no such configuration, remove this, stream-count.json resource and its wiring from Module class - - /** - * Sample property that's injected from external json configuration file. - */ - @InjectConfig("sample-prop") - public String sampleProp; - - /** - * Constant name used to identify stream-count plugin specific components during dependency injection. - */ - public static final String ELEMENT_SERVICE_NAME = "element-service"; -} diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/init/ConfigDataInitializer.java b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/init/ConfigDataInitializer.java deleted file mode 100644 index 16edd1bc..00000000 --- a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/init/ConfigDataInitializer.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * 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. - */ - -/* - * Modifications copyright (c) 2019 AT&T Intellectual Property - */ - -package io.fd.honeycomb.lcmapi.init; - -import io.fd.honeycomb.data.init.AbstractDataTreeConverter; -import com.google.inject.Inject; -import com.google.inject.name.Named; -import javax.annotation.Nonnull; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.StreamCount; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.StreamCountBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.StreamCountState; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -/** - * Initialize configuration data based on operational data. - *

- * Very useful when a plugin is initiated but the underlying layer already contains some operation state. - * Deriving the configuration from existing operational state enables reconciliation in case when Honeycomb's persistence - * is not available to do the work for us. - */ -public final class ConfigDataInitializer extends AbstractDataTreeConverter { - - @Inject - public ConfigDataInitializer(@Named("honeycomb-initializer") @Nonnull final DataBroker bindingDataBroker) { - super(bindingDataBroker, InstanceIdentifier.create(StreamCountState.class), InstanceIdentifier.create(StreamCount.class)); - } - - @Override - public StreamCount convert(final StreamCountState operationalData) { - // Transfer all the operational data into configuration - return new StreamCountBuilder() - .setStreams(operationalData.getStreams()) - .build(); - } -} diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/write/ElementCustomizer.java b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/write/ElementCustomizer.java deleted file mode 100644 index 740ffdf7..00000000 --- a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/write/ElementCustomizer.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * 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. - */ - -/* - * Modifications copyright (c) 2019 AT&T Intellectual Property - */ - -package io.fd.honeycomb.lcmapi.write; - -import io.fd.honeycomb.lcmapi.CrudService; -import io.fd.honeycomb.translate.spi.write.WriterCustomizer; -import io.fd.honeycomb.translate.write.WriteContext; -import io.fd.honeycomb.translate.write.WriteFailedException; - -import java.io.IOException; - -import javax.annotation.Nonnull; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.stream.count.params.Streams; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -/** - * Writer for {@link Element} list node from our YANG model. - */ - -public final class ElementCustomizer implements WriterCustomizer { - - private static final Logger LOG = LoggerFactory.getLogger(ElementCustomizer.class); - - private final CrudService crudService; - - public ElementCustomizer(@Nonnull final CrudService crudService) { - this.crudService = crudService; - } - - @Override - public void writeCurrentAttributes(@Nonnull final InstanceIdentifier id, @Nonnull final Streams dataAfter, - @Nonnull final WriteContext writeContext) throws WriteFailedException { - //perform write of data,or throw exception - //invoked by PUT operation,if provided data doesn't exist in Config data - crudService.writeData(id, dataAfter); - try { - runScript(dataAfter.getActiveStreams().getValue()); - } - catch (IOException e) { - String message = "Write operation failed " + e; - LOG.error(message); - } - } - - @Override - public void updateCurrentAttributes(@Nonnull final InstanceIdentifier id, - @Nonnull final Streams dataBefore, - @Nonnull final Streams dataAfter, @Nonnull final WriteContext writeContext) - throws WriteFailedException { - //invoked by PUT operation,if provided data does exist in Config data - crudService.updateData(id, dataBefore, dataAfter); - try { - runScript(dataAfter.getActiveStreams().getValue()); - } - catch (IOException e) { - String message = "Write operation failed " + e; - LOG.error(message); - } - } - - @Override - public void deleteCurrentAttributes(@Nonnull final InstanceIdentifier id, - @Nonnull final Streams dataBefore, - @Nonnull final WriteContext writeContext) throws WriteFailedException { - //perform delete of data,or throw exception - // Not supported, throw exception - throw new WriteFailedException.DeleteFailedException(id, - new UnsupportedOperationException("Delete operation not supported")); - } - - //Update the number of running streams running a custom script that uses the old vPacketGen REST APIs - private void runScript(long streams) throws IOException { - - String script = new String("bash /opt/update_running_streams.sh " + streams); - Runtime.getRuntime().exec(script); - String message = "Number of running streams updated to " + streams; - LOG.info(message); - } -} diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/write/ModuleWriterFactory.java b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/write/ModuleWriterFactory.java deleted file mode 100644 index 1de39761..00000000 --- a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/io/fd/honeycomb/lcmapi/write/ModuleWriterFactory.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * 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. - */ - -/* - * Modifications copyright (c) 2019 AT&T Intellectual Property - */ - -package io.fd.honeycomb.lcmapi.write; - -import static io.fd.honeycomb.lcmapi.ModuleConfiguration.ELEMENT_SERVICE_NAME; - -import com.google.inject.Inject; -import com.google.inject.name.Named; -import io.fd.honeycomb.lcmapi.CrudService; -import io.fd.honeycomb.translate.impl.write.GenericWriter; -import io.fd.honeycomb.translate.write.WriterFactory; -import io.fd.honeycomb.translate.write.registry.ModifiableWriterRegistryBuilder; -import javax.annotation.Nonnull; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.StreamCount; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.stream.count.params.Streams; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -/** - * Factory producing writers for stream-count plugin's data. - */ -public final class ModuleWriterFactory implements WriterFactory { - - private static final InstanceIdentifier ROOT_CONTAINER_ID = InstanceIdentifier.create(StreamCount.class); - - /** - * Injected crud service to be passed to customizers instantiated in this factory. - */ - @Inject - @Named(ELEMENT_SERVICE_NAME) - private CrudService crudService; - - @Override - public void init(@Nonnull final ModifiableWriterRegistryBuilder registry) { - - //adds writer for child node - //no need to add writers for empty nodes - registry.add(new GenericWriter<>(ROOT_CONTAINER_ID.child(Streams.class), new ElementCustomizer(crudService))); - } -} diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/org/onap/vnf/vfw/CrudService.java b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/org/onap/vnf/vfw/CrudService.java new file mode 100644 index 00000000..33b2e18f --- /dev/null +++ b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/org/onap/vnf/vfw/CrudService.java @@ -0,0 +1,64 @@ +/* + * 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 org.onap.vnf.vfw; + +import io.fd.honeycomb.translate.read.ReadFailedException; +import io.fd.honeycomb.translate.write.WriteFailedException; +import java.util.List; +import javax.annotation.Nonnull; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +/** + * Example of an aggregated access interface. + *

+ * Shared by all the customizers hiding the ugly details of our data management. + * + * TODO update javadoc + */ +public interface CrudService { + + /** + * Perform write of provided data. + */ + void writeData(@Nonnull final InstanceIdentifier identifier, @Nonnull final T data) + throws WriteFailedException; + + + /** + * Perform delete of existing data. + */ + void deleteData(@Nonnull final InstanceIdentifier identifier, @Nonnull final T data) + throws WriteFailedException; + + /** + * Perform update of existing data. + */ + void updateData(@Nonnull final InstanceIdentifier identifier, @Nonnull final T dataOld, + @Nonnull final T dataNew) + throws WriteFailedException; + + /** + * Read data identified by provided identifier. + */ + T readSpecific(@Nonnull final InstanceIdentifier identifier) throws ReadFailedException; + + /** + * Read all nodes of type {@link T}. + */ + List readAll() throws ReadFailedException; +} diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/org/onap/vnf/vfw/ElementCrudService.java b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/org/onap/vnf/vfw/ElementCrudService.java new file mode 100644 index 00000000..945f992c --- /dev/null +++ b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/org/onap/vnf/vfw/ElementCrudService.java @@ -0,0 +1,103 @@ +/* + * 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. + */ + +/* + * Modifications copyright (c) 2019 AT&T Intellectual Property + */ + +package org.onap.vnf.vfw; + +import io.fd.honeycomb.translate.read.ReadFailedException; +import io.fd.honeycomb.translate.write.WriteFailedException; +import java.util.Collections; +import java.util.List; +import javax.annotation.Nonnull; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.StreamCountState; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.stream.count.params.Streams; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.stream.count.params.StreamsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.StreamNum; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Simple example of class handling Crud operations for plugin. + *

+ * No real handling, serves just as an illustration. + * + * TODO update javadoc + */ +final class ElementCrudService implements CrudService { + + private static final Logger LOG = LoggerFactory.getLogger(ElementCrudService.class); + + @Override + public void writeData(@Nonnull final InstanceIdentifier identifier, @Nonnull final Streams data) + throws WriteFailedException { + if (data != null) { + + // Performs any logic needed for persisting such data + LOG.info("Writing path[{}] / data [{}]", identifier, data); + } else { + throw new WriteFailedException.CreateFailedException(identifier, data, + new NullPointerException("Provided data are null")); + } + } + + @Override + public void deleteData(@Nonnull final InstanceIdentifier identifier, @Nonnull final Streams data) + throws WriteFailedException { + if (data != null) { + + // Performs any logic needed for persisting such data + LOG.info("Removing path[{}] / data [{}]", identifier, data); + } else { + throw new WriteFailedException.DeleteFailedException(identifier, + new NullPointerException("Provided data are null")); + } + } + + @Override + public void updateData(@Nonnull final InstanceIdentifier identifier, @Nonnull final Streams dataOld, + @Nonnull final Streams dataNew) throws WriteFailedException { + if (dataOld != null && dataNew != null) { + + // Performs any logic needed for persisting such data + LOG.info("Update path[{}] from [{}] to [{}]", identifier, dataOld, dataNew); + } else { + throw new WriteFailedException.DeleteFailedException(identifier, + new NullPointerException("Provided data are null")); + } + } + + @Override + public Streams readSpecific(@Nonnull final InstanceIdentifier identifier) throws ReadFailedException { + + // load data by this key + // *Key class will always contain key of entity, in this case long value + + return new StreamsBuilder() + .setActiveStreams(new StreamNum(1L)) + .build(); + } + + @Override + public List readAll() throws ReadFailedException { + // read all data under parent node,in this case {@link ModuleState} + return Collections.singletonList( + readSpecific(InstanceIdentifier.create(StreamCountState.class).child(Streams.class))); + } +} diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/org/onap/vnf/vfw/Module.java b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/org/onap/vnf/vfw/Module.java new file mode 100644 index 00000000..31ba56e1 --- /dev/null +++ b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/org/onap/vnf/vfw/Module.java @@ -0,0 +1,63 @@ +/* + * 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. + */ + +/* + * Modifications copyright (c) 2019 AT&T Intellectual Property + */ + +package org.onap.vnf.vfw; + +import static org.onap.vnf.vfw.ModuleConfiguration.ELEMENT_SERVICE_NAME; + +import com.google.inject.AbstractModule; +import com.google.inject.TypeLiteral; +import com.google.inject.multibindings.Multibinder; +import com.google.inject.name.Names; +import org.onap.vnf.vfw.write.ModuleWriterFactory; +import io.fd.honeycomb.data.init.DataTreeInitializer; +import io.fd.honeycomb.translate.write.WriterFactory; +import net.jmob.guice.conf.core.ConfigurationModule; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.stream.count.params.Streams; + +/** + * Module class instantiating stream-count plugin components. + */ +public final class Module extends AbstractModule { + + // TODO This initiates all the plugin components, but it still needs to be registered/wired into an integration + // module producing runnable distributions. There is one such distribution in honeycomb project: + // vpp-integration/minimal-distribution + // In order to integrate this plugin with the distribution: + // 1. Add a dependency on this maven module to the the distribution's pom.xml + // 2. Add an instance of this module into the distribution in its Main class + + @Override + protected void configure() { + // requests injection of properties + install(ConfigurationModule.create()); + requestInjection(ModuleConfiguration.class); + + // creates binding for interface implementation by name + bind(new TypeLiteral>(){}) + .annotatedWith(Names.named(ELEMENT_SERVICE_NAME)) + .to(ElementCrudService.class); + + // create writer factory binding + // can hold multiple binding for separate yang modules + final Multibinder writerFactoryBinder = Multibinder.newSetBinder(binder(), WriterFactory.class); + writerFactoryBinder.addBinding().to(ModuleWriterFactory.class); + } +} diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/org/onap/vnf/vfw/ModuleConfiguration.java b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/org/onap/vnf/vfw/ModuleConfiguration.java new file mode 100644 index 00000000..c229c5ad --- /dev/null +++ b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/org/onap/vnf/vfw/ModuleConfiguration.java @@ -0,0 +1,46 @@ +/* + * 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 org.onap.vnf.vfw; + +import net.jmob.guice.conf.core.BindConfig; +import net.jmob.guice.conf.core.InjectConfig; +import net.jmob.guice.conf.core.Syntax; + +/** + * Class containing static configuration for stream-count module,
+ * either loaded from property file stream-count.json from classpath. + *

+ * Further documentation for the configuration injection can be found at: + * https://github.com/yyvess/gconf + */ +@BindConfig(value = "stream-count", syntax = Syntax.JSON) +public final class ModuleConfiguration { + + // TODO change the sample property to real plugin configuration + // If there is no such configuration, remove this, stream-count.json resource and its wiring from Module class + + /** + * Sample property that's injected from external json configuration file. + */ + @InjectConfig("sample-prop") + public String sampleProp; + + /** + * Constant name used to identify stream-count plugin specific components during dependency injection. + */ + public static final String ELEMENT_SERVICE_NAME = "element-service"; +} diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/org/onap/vnf/vfw/write/ElementCustomizer.java b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/org/onap/vnf/vfw/write/ElementCustomizer.java new file mode 100644 index 00000000..18329e84 --- /dev/null +++ b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/org/onap/vnf/vfw/write/ElementCustomizer.java @@ -0,0 +1,96 @@ +/* + * 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. + */ + +/* + * Modifications copyright (c) 2019 AT&T Intellectual Property + */ + +package org.onap.vnf.vfw.write; + +import org.onap.vnf.vfw.CrudService; +import io.fd.honeycomb.translate.spi.write.WriterCustomizer; +import io.fd.honeycomb.translate.write.WriteContext; +import io.fd.honeycomb.translate.write.WriteFailedException; +import javax.annotation.Nonnull; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.stream.count.params.Streams; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import java.io.IOException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Writer for {@link Element} list node from our YANG model. + */ +public final class ElementCustomizer implements WriterCustomizer { + + private static final Logger LOG = LoggerFactory.getLogger(ElementCustomizer.class); + + private final CrudService crudService; + + public ElementCustomizer(@Nonnull final CrudService crudService) { + this.crudService = crudService; + } + + @Override + public void writeCurrentAttributes(@Nonnull final InstanceIdentifier id, @Nonnull final Streams dataAfter, + @Nonnull final WriteContext writeContext) throws WriteFailedException { + //perform write of data,or throw exception + //invoked by PUT operation,if provided data doesn't exist in Config data + crudService.writeData(id, dataAfter); + try { + runScript(dataAfter.getActiveStreams().getValue()); + } + catch (IOException e) { + String message = "Write operation failed " + e; + LOG.error(message); + } + } + + @Override + public void updateCurrentAttributes(@Nonnull final InstanceIdentifier id, + @Nonnull final Streams dataBefore, + @Nonnull final Streams dataAfter, @Nonnull final WriteContext writeContext) + throws WriteFailedException { + //invoked by PUT operation,if provided data does exist in Config data + crudService.updateData(id, dataBefore, dataAfter); + try { + runScript(dataAfter.getActiveStreams().getValue()); + } + catch (IOException e) { + String message = "Write operation failed " + e; + LOG.error(message); + } + } + + @Override + public void deleteCurrentAttributes(@Nonnull final InstanceIdentifier id, + @Nonnull final Streams dataBefore, + @Nonnull final WriteContext writeContext) throws WriteFailedException { + //perform delete of data,or throw exception + // Not supported, throw exception + throw new WriteFailedException.DeleteFailedException(id, + new UnsupportedOperationException("Delete operation not supported")); + } + + //Update the number of running streams running a custom script that uses the old vPacketGen REST APIs + private void runScript(long streams) throws IOException { + + String script = new String("bash /opt/enable_disable_streams.sh " + streams); + Runtime.getRuntime().exec(script); + String message = "Number of running streams updated to " + streams; + LOG.info(message); + } +} \ No newline at end of file diff --git a/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/org/onap/vnf/vfw/write/ModuleWriterFactory.java b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/org/onap/vnf/vfw/write/ModuleWriterFactory.java new file mode 100644 index 00000000..0bd7b8e1 --- /dev/null +++ b/vnfs/honeycomb_plugin/stream-count/stream-count-impl/src/main/java/org/onap/vnf/vfw/write/ModuleWriterFactory.java @@ -0,0 +1,57 @@ +/* + * 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. + */ + +/* + * Modifications copyright (c) 2019 AT&T Intellectual Property + */ + +package org.onap.vnf.vfw.write; + +import static org.onap.vnf.vfw.ModuleConfiguration.ELEMENT_SERVICE_NAME; + +import com.google.inject.Inject; +import com.google.inject.name.Named; +import org.onap.vnf.vfw.CrudService; +import io.fd.honeycomb.translate.impl.write.GenericWriter; +import io.fd.honeycomb.translate.write.WriterFactory; +import io.fd.honeycomb.translate.write.registry.ModifiableWriterRegistryBuilder; +import javax.annotation.Nonnull; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.StreamCount; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.stream.count.rev190118.stream.count.params.Streams; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +/** + * Factory producing writers for stream-count plugin's data. + */ +public final class ModuleWriterFactory implements WriterFactory { + + private static final InstanceIdentifier ROOT_CONTAINER_ID = InstanceIdentifier.create(StreamCount.class); + + /** + * Injected crud service to be passed to customizers instantiated in this factory. + */ + @Inject + @Named(ELEMENT_SERVICE_NAME) + private CrudService crudService; + + @Override + public void init(@Nonnull final ModifiableWriterRegistryBuilder registry) { + + //adds writer for child node + //no need to add writers for empty nodes + registry.add(new GenericWriter<>(ROOT_CONTAINER_ID.child(Streams.class), new ElementCustomizer(crudService))); + } +} diff --git a/vnfs/vFW/scripts/enable_disable_streams.sh b/vnfs/vFW/scripts/enable_disable_streams.sh new file mode 100644 index 00000000..d2551552 --- /dev/null +++ b/vnfs/vFW/scripts/enable_disable_streams.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +if [ -z $1 ]; then + echo "Missing number of streams to enable. Exit (1)" + exit +fi + +if [ "$1" -gt "10" ] || [ "$1" -lt "1" ]; then + echo "The number of streams to enable must be between 1 and 10. Exit(1)" + exit +fi + +STREAMS=$1 + +# Disable all the streams +vppctl packet-generator disable-stream + +# Enable streams based on client input +for((i=1; i <= $STREAMS; i++)); do + vppctl packet-generator enable-stream fw_udp$i +done \ No newline at end of file diff --git a/vnfs/vFW/scripts/v_packetgen_install.sh b/vnfs/vFW/scripts/v_packetgen_install.sh index ba809898..a26d5dcc 100755 --- a/vnfs/vFW/scripts/v_packetgen_install.sh +++ b/vnfs/vFW/scripts/v_packetgen_install.sh @@ -61,7 +61,7 @@ cd /opt unzip -p -j /opt/vfw-scripts-$INSTALL_SCRIPT_VERSION.zip v_packetgen_init.sh > /opt/v_packetgen_init.sh unzip -p -j /opt/vfw-scripts-$INSTALL_SCRIPT_VERSION.zip vpacketgen.sh > /opt/vpacketgen.sh unzip -p -j /opt/vfw-scripts-$INSTALL_SCRIPT_VERSION.zip run_traffic_fw_demo.sh > /opt/run_traffic_fw_demo.sh -unzip -p -j /opt/vfw-scripts-$INSTALL_SCRIPT_VERSION.zip update_running_streams.sh > /opt/update_running_streams.sh +unzip -p -j /opt/vfw-scripts-$INSTALL_SCRIPT_VERSION.zip enable_disable_streams.sh > /opt/enable_disable_streams.sh wget -O sample-distribution-$DEMO_ARTIFACTS_VERSION-hc.tar.gz "${NEXUS_ARTIFACT_REPO}/service/local/artifact/maven/redirect?r=${REPO}&g=org.onap.demo.vnf&a=sample-distribution&c=hc&e=tar.gz&v=$DEMO_ARTIFACTS_VERSION" wget -O vfw_pg_streams-$DEMO_ARTIFACTS_VERSION-demo.tar.gz "${NEXUS_ARTIFACT_REPO}/service/local/artifact/maven/redirect?r=${REPO}&g=org.onap.demo.vnf.vfw&a=vfw_pg_streams&c=demo&e=tar.gz&v=$DEMO_ARTIFACTS_VERSION" @@ -69,12 +69,12 @@ tar -zmxvf sample-distribution-$DEMO_ARTIFACTS_VERSION-hc.tar.gz tar -zmxvf vfw_pg_streams-$DEMO_ARTIFACTS_VERSION-demo.tar.gz mv vfw_pg_streams-$DEMO_ARTIFACTS_VERSION pg_streams mv sample-distribution-$DEMO_ARTIFACTS_VERSION honeycomb -sed -i 's/"restconf-binding-address": "127.0.0.1",/"restconf-binding-address": "0.0.0.0",/g' honeycomb/sample-distribution-$DEMO_ARTIFACTS_VERSION/config/honeycomb.json +sed -i 's/"restconf-binding-address": "127.0.0.1",/"restconf-binding-address": "0.0.0.0",/g' honeycomb/sample-distribution-$DEMO_ARTIFACTS_VERSION/config/restconf.json rm *.tar.gz chmod +x v_packetgen_init.sh chmod +x vpacketgen.sh chmod +x run_traffic_fw_demo.sh -chmod +x update_running_streams.sh +chmod +x enable_disable_streams.sh # Install VPP export UBUNTU="trusty" diff --git a/vnfs/vFW/scripts/v_packetgen_install_arm64.sh b/vnfs/vFW/scripts/v_packetgen_install_arm64.sh index 8dee6977..929e5365 100755 --- a/vnfs/vFW/scripts/v_packetgen_install_arm64.sh +++ b/vnfs/vFW/scripts/v_packetgen_install_arm64.sh @@ -62,6 +62,7 @@ cd /opt unzip -p -j /opt/vfw-scripts-$INSTALL_SCRIPT_VERSION.zip v_packetgen_init_arm64.sh > /opt/v_packetgen_init.sh unzip -p -j /opt/vfw-scripts-$INSTALL_SCRIPT_VERSION.zip vpacketgen.sh > /opt/vpacketgen.sh unzip -p -j /opt/vfw-scripts-$INSTALL_SCRIPT_VERSION.zip run_traffic_fw_demo.sh > /opt/run_traffic_fw_demo.sh +unzip -p -j /opt/vfw-scripts-$INSTALL_SCRIPT_VERSION.zip enable_disable_streams.sh > /opt/enable_disable_streams.sh wget -O sample-distribution-$DEMO_ARTIFACTS_VERSION-hc.tar.gz "${NEXUS_ARTIFACT_REPO}/service/local/artifact/maven/redirect?r=${REPO}&g=org.onap.demo.vnf&a=sample-distribution&c=hc&e=tar.gz&v=$DEMO_ARTIFACTS_VERSION" wget -O vfw_pg_streams-$DEMO_ARTIFACTS_VERSION-demo.tar.gz "${NEXUS_ARTIFACT_REPO}/service/local/artifact/maven/redirect?r=${REPO}&g=org.onap.demo.vnf.vfw&a=vfw_pg_streams&c=demo&e=tar.gz&v=$DEMO_ARTIFACTS_VERSION" @@ -69,10 +70,12 @@ tar -zmxvf sample-distribution-$DEMO_ARTIFACTS_VERSION-hc.tar.gz tar -zmxvf vfw_pg_streams-$DEMO_ARTIFACTS_VERSION-demo.tar.gz mv vfw_pg_streams-$DEMO_ARTIFACTS_VERSION pg_streams mv sample-distribution-$DEMO_ARTIFACTS_VERSION honeycomb -sed -i 's/"restconf-binding-address": "127.0.0.1",/"restconf-binding-address": "0.0.0.0",/g' honeycomb/sample-distribution-$DEMO_ARTIFACTS_VERSION/config/honeycomb.json +sed -i 's/"restconf-binding-address": "127.0.0.1",/"restconf-binding-address": "0.0.0.0",/g' honeycomb/sample-distribution-$DEMO_ARTIFACTS_VERSION/config/restconf.json rm *.tar.gz chmod +x v_packetgen_init.sh chmod +x vpacketgen.sh +chmod +x run_traffic_fw_demo.sh +chmod +x enable_disable_streams.sh # Install VPP rm /etc/apt/sources.list.d/99fd.io.list -- cgit 1.2.3-korg