From: Juraj Veverka Date: Fri, 7 Jun 2019 07:22:49 +0000 (+0200) Subject: lighty.io initializer X-Git-Tag: 0.4.0~72 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=transportpce.git;a=commitdiff_plain;h=266a8a29e6eb6d5e21d779ed53daf2c5e1f2a07d lighty.io initializer JIRA: TRNSPRTPCE-126 Change-Id: I3169c24220fe64221b2633a2cb9a9e71134b0b2e Signed-off-by: Juraj Veverka --- diff --git a/lighty/.gitignore b/lighty/.gitignore new file mode 100644 index 000000000..5e373f1ed --- /dev/null +++ b/lighty/.gitignore @@ -0,0 +1,6 @@ +.idea +*.iml +cache +journal +snapshots +target diff --git a/lighty/README.md b/lighty/README.md new file mode 100644 index 000000000..e1c5d475d --- /dev/null +++ b/lighty/README.md @@ -0,0 +1,103 @@ +# Lighty-TransportPCE Controller + +This project starts [TransportPCE](https://git.opendaylight.org/gerrit/#/admin/projects/transportpce) without karaf framework. + +## Build & Run +* Make sure you have JDK8 or later installed +* Make sure you have [maven 3.5.0](https://maven.apache.org/download.cgi) or later installed. +* Make sure you have proper [settings.xml](https://github.com/opendaylight/odlparent/blob/master/settings.xml) in your ``~/.m2`` directory. + +#### Before compiling Lighty-TransportPCE +Make sure upstream projects are compiled locally and stored in local ``~/.m2/repository``: +1. compile __transportpce/master__ +``` +git clone https://git.opendaylight.org/gerrit/transportpce && (cd transportpce && curl -kLo `git rev-parse --git-dir`/hooks/commit-msg https://git.opendaylight.org/gerrit/tools/hooks/commit-msg; chmod +x `git rev-parse --git-dir`/hooks/commit-msg) +cd transportpce +``` +Before compilation, make sure that deviations are not present in models: +``` +transportpce/ordmodels/network/src/main/yang/org-openroadm-otn-network-topology@2018-11-30.yang +transportpce/ordmodels/network/src/main/yang/org-openroadm-network-topology@2018-11-30.yang +transportpce/ordmodels/network/src/main/yang/org-openroadm-network@2018-11-30.yang +``` +After deviations are removed from models, compile the project. +``` +mvn clean install -DskipTests +``` +2. compile __lighty-core/10.0.x__ +``` +git clone https://github.com/PantheonTechnologies/lighty-core.git +cd lighty-core +git checkout 10.0.x +mvn clean install -DskipTests +``` +#### Compile Lighty-TransportPCE +* Project is build using maven command: +``` +cd ../lighty +mvn clean install +``` +* After project build is done, use binary package to run the TransportPCE controller. +``` +cd target +unzip lighty-transportpce-10.0.1-SNAPSHOT-bin.zip +cd lighty-transportpce-10.0.1-SNAPSHOT +./start-controller.sh +``` + +## TransportPCE lighty.io - karaf comparison + +### Application Boot test +This test compares TransportPCE application on lighty.io and karaf. +After TransportPCE is started, performance is measured using [visualvm](https://visualvm.github.io/) tool. + +| Property Name | ODL/Karaf * | lighty.io ** | +|-----------------------------------|----------------|--------------| +| Build size | 225M | 64M | +| Startup Time | ~15s | ~6s | +| Shutdown Time | ~5s | ~100ms | +| Process memory allocated (RSS)*** | 1236 MB | 353 MB | +| HEAP memory (used/allocated) | 135 / 1008 MB | 58 / 128 MB | +| Metaspace (used/allocated) | 115 / 132 MB | 62 / 65 MB | +| Threads (live/daemon) | 111 / 48 | 70 / 11 | +| Classes loaded | 22027 | 12019 | +| No. of jars | 680 | 244 | + +### test_end2end_lighty.py +This test compares TransportPCE application on lighty.io and karaf while running __test_end2end_lighty.py__ (4 connected netconf devices). + +| Property Name | ODL/Karaf * | lighty.io ** | +|-----------------------------------|----------------|--------------| +| Build size | 225M | 64M | +| Startup Time | ~15s | ~6s | +| Shutdown Time | ~5s | ~100ms | +| Process memory allocated (RSS)*** | 1185 MB | 440 MB | +| HEAP memory (used/allocated) | 158 / 960 MB | 85 / 128 MB | +| Metaspace (used/allocated) | 128 / 146 MB | 83 / 87 MB | +| Threads (live/daemon) | 148 / 60 | 129 / 26 | +| Classes loaded | 24326 | 16155 | +| No. of jars | 680 | 244 | + +`* JVM parameters: -Xms128M -Xmx2048m ...` +`** JVM parameters: -Xms128m -Xmx128m -XX:MaxMetaspaceSize=128m` +`*** sudo ps -o pid,rss,user,command ax | grep java | grep transportpce` + +### Integration Test results +| Test Name | Failed | All | Comment | +|---------------------------------------|--------|-----|----------------------------| +| test_portmapping.py | 0 | 18 | | +| test_topoPortMapping.py | 1 | 6 | (same results with karaf) | +| test_topology.py | 0 | 33 | | +| test_renderer_service_path_nominal.py | 0 | 24 | | +| test_pce.py | 0 | 22 | | +| test_olm.py | 1 | 40 | (same results with karaf) | +| test_end2end_lighty.py | 18 | 52 | (same as karaf, need check)| + +`karaf: executable = "../karaf/target/assembly/bin/karaf"` +`lighty.io executable = "../lighty/target/lighty-transportpce-10.0.1-SNAPSHOT/start-controller.sh": ` + +* __Total Success: 175__ +* __Total Failed: 20__ + +### Postman collection +Check this [postman collection](docs/TransportPCE.postman_collection.json) for RESTCONF examples. diff --git a/lighty/docs/TransportPCE.postman_collection.json b/lighty/docs/TransportPCE.postman_collection.json new file mode 100644 index 000000000..7e4effd20 --- /dev/null +++ b/lighty/docs/TransportPCE.postman_collection.json @@ -0,0 +1,467 @@ +{ + "variables": [], + "info": { + "name": "TransportPCE", + "_postman_id": "2a8c7902-5793-e48c-ebab-72256fcac793", + "description": "", + "schema": "https://schema.getpostman.com/json/collection/v2.0.0/collection.json" + }, + "item": [ + { + "name": "test_portmapping", + "description": "", + "item": [ + { + "name": "test_01_rdm_device_connected", + "request": { + "auth": { + "type": "basic", + "basic": { + "username": "admin", + "password": "admin", + "saveHelperData": true, + "showPassword": false + } + }, + "url": "http://localhost:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/ROADMA", + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "" + }, + { + "key": "Authorization", + "value": "Basic YWRtaW46YWRtaW4=", + "description": "" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"node\" : {\n \"node-id\": \"ROADMA\",\n \"host\": \"127.0.0.1\",\n \"port\": 17830,\n \"username\": \"admin\",\n \"password\": \"admin\",\n \"tcp-only\": false,\n \"keepalive-delay\": 0,\n \"pass-through\": {}\n }\n}\n" + }, + "description": "connect device 01" + }, + "response": [] + }, + { + "name": "test_02_rdm_device_connected", + "request": { + "url": "http://localhost:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/node/ROADMA", + "method": "GET", + "header": [], + "body": {}, + "description": "" + }, + "response": [] + }, + { + "name": "test_03_rdm_portmapping_DEG1_TTP_TXRX", + "request": { + "url": "http://localhost:8181/restconf/config/transportpce-portmapping:network/nodes/ROADMA/mapping/DEG1-TTP-TXRX", + "method": "GET", + "header": [], + "body": {}, + "description": "" + }, + "response": [] + }, + { + "name": "test_04_rdm_portmapping_SRG1_PP7_TXRX", + "request": { + "url": "http://localhost:8181/restconf/config/transportpce-portmapping:network/nodes/ROADMA/mapping/SRG1-PP7-TXRX", + "method": "GET", + "header": [], + "body": {}, + "description": "" + }, + "response": [] + }, + { + "name": "test_05_rdm_portmapping_SRG3_PP1_TXRX", + "request": { + "url": "http://localhost:8181/restconf/config/transportpce-portmapping:network/nodes/ROADMA/mapping/SRG3-PP1-TXRX", + "method": "GET", + "header": [], + "body": {}, + "description": "" + }, + "response": [] + }, + { + "name": "test_06_xpdr_device_connected", + "request": { + "url": "http://localhost:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/XPDRA", + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"node\" : {\n \"node-id\": \"XPDRA\",\n \"host\": \"127.0.0.1\",\n \"port\": 17831,\n \"username\": \"admin\",\n \"password\": \"admin\",\n \"tcp-only\": false,\n \"keepalive-delay\": 0,\n \"pass-through\": {}\n }\n}" + }, + "description": "" + }, + "response": [] + }, + { + "name": "test_07_xpdr_device_connected", + "request": { + "url": "http://localhost:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/node/XPDRA", + "method": "GET", + "header": [], + "body": {}, + "description": "" + }, + "response": [] + }, + { + "name": "test_08_xpdr_portmapping_NETWORK1", + "request": { + "url": "http://localhost:8181/restconf/config/transportpce-portmapping:network/nodes/XPDRA/mapping/XPDR1-NETWORK1", + "method": "GET", + "header": [], + "body": {}, + "description": "" + }, + "response": [] + }, + { + "name": "test_09_xpdr_portmapping_NETWORK2", + "request": { + "url": "http://localhost:8181/restconf/config/transportpce-portmapping:network/nodes/XPDRA/mapping/XPDR1-NETWORK2", + "method": "GET", + "header": [], + "body": {}, + "description": "" + }, + "response": [] + }, + { + "name": "test_10_xpdr_portmapping_CLIENT1", + "request": { + "url": "http://localhost:8181/restconf/config/transportpce-portmapping:network/nodes/XPDRA/mapping/XPDR1-CLIENT1", + "method": "GET", + "header": [], + "body": {}, + "description": "" + }, + "response": [] + }, + { + "name": "test_11_xpdr_portmapping_CLIENT2", + "request": { + "url": "http://localhost:8181/restconf/config/transportpce-portmapping:network/nodes/XPDRA/mapping/XPDR1-CLIENT2", + "method": "GET", + "header": [], + "body": {}, + "description": "" + }, + "response": [] + }, + { + "name": "test_12_xpdr_portmapping_CLIENT4", + "request": { + "url": "http://localhost:8181/restconf/config/transportpce-portmapping:network/nodes/XPDRA/mapping/XPDR1-CLIENT4", + "method": "GET", + "header": [], + "body": {}, + "description": "" + }, + "response": [] + }, + { + "name": "test_13_xpdr_device_disconnected", + "request": { + "url": "http://localhost:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/XPDRA", + "method": "DELETE", + "header": [], + "body": {}, + "description": "" + }, + "response": [] + }, + { + "name": "test_14_xpdr_device_disconnected", + "request": { + "url": "http://localhost:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/node/XPDRA", + "method": "GET", + "header": [], + "body": {}, + "description": "" + }, + "response": [] + }, + { + "name": "test_15_xpdr_device_disconnected", + "request": { + "url": "http://localhost:8181/restconf/config/transportpce-portmapping:network/nodes/XPDRA", + "method": "GET", + "header": [], + "body": {}, + "description": "" + }, + "response": [] + }, + { + "name": "test_16_rdm_device_disconnected", + "request": { + "url": "http://localhost:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/ROADMA", + "method": "DELETE", + "header": [], + "body": {}, + "description": "" + }, + "response": [] + }, + { + "name": "test_17_rdm_device_disconnected", + "request": { + "url": "http://localhost:8181/restconf/operational/network-topology:network-topology/topology/topology-netconf/node/ROADMA", + "method": "GET", + "header": [], + "body": {}, + "description": "" + }, + "response": [] + }, + { + "name": "test_18_rdm_device_disconnected", + "request": { + "url": "http://localhost:8181/restconf/config/transportpce-portmapping:network/nodes/ROADMA", + "method": "GET", + "header": [], + "body": {}, + "description": "" + }, + "response": [] + } + ] + }, + { + "name": "Get Modules", + "request": { + "auth": { + "type": "basic", + "basic": { + "username": "admin", + "password": "admin", + "saveHelperData": true, + "showPassword": false + } + }, + "url": "http://localhost:8181/restconf/modules", + "method": "GET", + "header": [ + { + "key": "Authorization", + "value": "Basic YWRtaW46YWRtaW4=", + "description": "" + } + ], + "body": { + "mode": "raw", + "raw": "" + }, + "description": "Get installed yang models " + }, + "response": [] + }, + { + "name": "Get List Of Network Topologies", + "request": { + "auth": { + "type": "basic", + "basic": { + "username": "admin", + "password": "admin", + "saveHelperData": true, + "showPassword": false + } + }, + "url": "http://localhost:8181/restconf/config/network-topology:network-topology", + "method": "GET", + "header": [ + { + "key": "Authorization", + "value": "Basic YWRtaW46YWRtaW4=", + "description": "" + } + ], + "body": {}, + "description": "Get List Of Network Topologies" + }, + "response": [] + }, + { + "name": "Create NetConf device ", + "request": { + "auth": { + "type": "basic", + "basic": { + "username": "admin", + "password": "admin", + "saveHelperData": true, + "showPassword": false + } + }, + "url": "http://localhost:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/new-netconf-device", + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "" + }, + { + "key": "Authorization", + "value": "Basic YWRtaW46YWRtaW4=", + "description": "" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"node\" : {\n \"node-id\": \"new-netconf-device\",\n \"host\": \"127.0.0.1\",\n \"port\": 17830,\n \"username\": \"admin\",\n \"password\": \"admin\",\n \"tcp-only\": false,\n \"keepalive-delay\": 0\n }\n}\n" + }, + "description": "Create NetConf device " + }, + "response": [] + }, + { + "name": "disconnect device 01", + "request": { + "url": "http://localhost:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/ROADMA", + "method": "DELETE", + "header": [], + "body": {}, + "description": "Delete NetConf device" + }, + "response": [] + }, + { + "name": "disconnect device 02", + "request": { + "auth": { + "type": "basic", + "basic": { + "username": "admin", + "password": "admin", + "saveHelperData": true, + "showPassword": false + } + }, + "url": "http://localhost:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/XPDRA", + "method": "DELETE", + "header": [ + { + "key": "Authorization", + "value": "Basic YWRtaW46YWRtaW4=", + "description": "" + } + ], + "body": {}, + "description": "Delete NetConf device" + }, + "response": [] + }, + { + "name": "Get Topologies Operational", + "request": { + "auth": { + "type": "basic", + "basic": { + "username": "admin", + "password": "admin", + "saveHelperData": true, + "showPassword": false + } + }, + "url": "http://localhost:8181/restconf/operational/network-topology:network-topology", + "method": "GET", + "header": [ + { + "key": "Authorization", + "value": "Basic YWRtaW46YWRtaW4=", + "description": "" + } + ], + "body": {}, + "description": "Get Topologies Operational" + }, + "response": [] + }, + { + "name": "connect device 01", + "request": { + "auth": { + "type": "basic", + "basic": { + "username": "admin", + "password": "admin", + "saveHelperData": true, + "showPassword": false + } + }, + "url": "http://localhost:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/ROADMA", + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "" + }, + { + "key": "Authorization", + "value": "Basic YWRtaW46YWRtaW4=", + "description": "" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"node\" : {\n \"node-id\": \"ROADMA\",\n \"host\": \"127.0.0.1\",\n \"port\": 17830,\n \"username\": \"admin\",\n \"password\": \"admin\",\n \"tcp-only\": false,\n \"keepalive-delay\": 0,\n \"pass-through\": {}\n }\n}\n" + }, + "description": "connect device 01" + }, + "response": [] + }, + { + "name": "connect device 02", + "request": { + "auth": { + "type": "basic", + "basic": { + "username": "admin", + "password": "admin", + "saveHelperData": true, + "showPassword": false + } + }, + "url": "http://localhost:8181/restconf/config/network-topology:network-topology/topology/topology-netconf/node/ROADMA", + "method": "PUT", + "header": [ + { + "key": "Content-Type", + "value": "application/json", + "description": "" + }, + { + "key": "Authorization", + "value": "Basic YWRtaW46YWRtaW4=", + "description": "" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"node\" : {\n \"node-id\": \"XPDRA\",\n \"host\": \"127.0.0.1\",\n \"port\": 17831,\n \"username\": \"admin\",\n \"password\": \"admin\",\n \"tcp-only\": false,\n \"keepalive-delay\": 0,\n \"pass-through\": {}\n }\n}\n" + }, + "description": "connect device 02" + }, + "response": [] + } + ] +} \ No newline at end of file diff --git a/lighty/pom.xml b/lighty/pom.xml new file mode 100644 index 000000000..b9d04e1c6 --- /dev/null +++ b/lighty/pom.xml @@ -0,0 +1,148 @@ + + + + 4.0.0 + + + io.lighty.core + lighty-app-parent + 10.0.1-SNAPSHOT + + + + io.lighty.examples.controllers + lighty-transportpce + 10.0.1-SNAPSHOT + jar + + + io.lighty.controllers.tpce.Main + true + true + + + + + + + org.opendaylight.transportpce + transportpce-api + 0.4.0-SNAPSHOT + + + org.opendaylight.transportpce.ordmodels + transportpce-ordmodels-common + 0.4.0-SNAPSHOT + + + org.opendaylight.transportpce.ordmodels + transportpce-ordmodels-device + 0.4.0-SNAPSHOT + + + org.opendaylight.transportpce.ordmodels + transportpce-ordmodels-network + 0.4.0-SNAPSHOT + + + org.opendaylight.transportpce.ordmodels + transportpce-ordmodels-service + 0.4.0-SNAPSHOT + + + + + + org.opendaylight.transportpce + transportpce-pce + 0.4.0-SNAPSHOT + + + org.opendaylight.transportpce + transportpce-olm + 0.4.0-SNAPSHOT + + + org.opendaylight.transportpce + transportpce-servicehandler + 0.4.0-SNAPSHOT + + + + + org.opendaylight.mdsal + yang-binding + 1.0.8 + + + + io.lighty.modules + lighty-netconf-sb + + + io.lighty.modules + lighty-restconf-nb-community + + + + javax.ws.rs + javax.ws.rs-api + + + + + + io.lighty.resources + singlenode-configuration + + + io.lighty.resources + log4j-properties + + + + org.eclipse.jetty + jetty-server + + + javax.servlet + javax.servlet-api + + + org.eclipse.jetty + jetty-webapp + + + org.eclipse.jetty + jetty-servlets + + + org.glassfish.jersey.core + jersey-server + + + org.glassfish.jersey.containers + jersey-container-jetty-http + + + org.glassfish.jersey.inject + jersey-hk2 + + + javax.ws.rs + javax.ws.rs-api + + + + org.eclipse.jetty + jetty-client + test + + + diff --git a/lighty/src/main/assembly/resources/start-controller.sh b/lighty/src/main/assembly/resources/start-controller.sh new file mode 100755 index 000000000..146822e46 --- /dev/null +++ b/lighty/src/main/assembly/resources/start-controller.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +BASEDIR=$(dirname "$0") +#echo "${BASEDIR}" +cd ${BASEDIR} + +#start controller +java -ms128m -mx128m -XX:MaxMetaspaceSize=128m -jar lighty-transportpce-10.0.1-SNAPSHOT.jar diff --git a/lighty/src/main/java/io/lighty/controllers/tpce/Main.java b/lighty/src/main/java/io/lighty/controllers/tpce/Main.java new file mode 100644 index 000000000..19316784b --- /dev/null +++ b/lighty/src/main/java/io/lighty/controllers/tpce/Main.java @@ -0,0 +1,178 @@ +/* + * Copyright (c) 2018 Pantheon Technologies s.r.o. 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 https://www.eclipse.org/legal/epl-v10.html + */ +package io.lighty.controllers.tpce; + +import io.lighty.controllers.tpce.module.TransportPCE; +import io.lighty.controllers.tpce.module.TransportPCEImpl; +import io.lighty.controllers.tpce.utils.TPCEUtils; +import io.lighty.core.controller.api.LightyController; +import io.lighty.core.controller.api.LightyModule; +import io.lighty.core.controller.impl.LightyControllerBuilder; +import io.lighty.core.controller.impl.config.ConfigurationException; +import io.lighty.core.controller.impl.config.ControllerConfiguration; +import io.lighty.core.controller.impl.util.ControllerConfigUtils; +import io.lighty.modules.northbound.restconf.community.impl.CommunityRestConf; +import io.lighty.modules.northbound.restconf.community.impl.CommunityRestConfBuilder; +import io.lighty.modules.northbound.restconf.community.impl.config.JsonRestConfServiceType; +import io.lighty.modules.northbound.restconf.community.impl.config.RestConfConfiguration; +import io.lighty.modules.northbound.restconf.community.impl.util.RestConfConfigUtils; +import io.lighty.modules.southbound.netconf.impl.NetconfSBPlugin; +import io.lighty.modules.southbound.netconf.impl.NetconfTopologyPluginBuilder; +import io.lighty.modules.southbound.netconf.impl.config.NetconfConfiguration; +import io.lighty.modules.southbound.netconf.impl.util.NetconfConfigUtils; +import io.lighty.server.LightyServerBuilder; +import java.net.InetSocketAddress; +import java.util.concurrent.ExecutionException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class Main { + + private static final Logger LOG = LoggerFactory.getLogger(Main.class); + + private ShutdownHook shutdownHook; + + public void start() { + start(new String[] {}, false); + } + + public void start(String[] args, boolean registerShutdownHook) { + long startTime = System.nanoTime(); + LOG.info(" ___________ ___________________ ___________"); + LOG.info(" \\__ ___/ \\______ \\_ ___ \\\\_ _____/"); + LOG.info(" | | ______ | ___/ \\ \\/ | __)_"); + LOG.info(" | | /_____/ | | \\ \\____| \\"); + LOG.info(" |____| |____| \\______ /_______ /"); + LOG.info(" \\/ \\/"); + LOG.info(".__ .__ .__ __ .__ "); + LOG.info("| | |__| ____ | |___/ |_ ___.__. |__| ____ "); + LOG.info("| | | |/ ___\\| | \\ __< | | | |/ _ \\"); + LOG.info("| |_| / /_/ > Y \\ | \\___ | | ( <_> )"); + LOG.info("|____/__\\___ /|___| /__| / ____| /\\ |__|\\____/"); + LOG.info(" /_____/ \\/ \\/ \\/ "); + LOG.info("Starting lighty.io TransportPCE application ..."); + LOG.info("https://lighty.io/"); + LOG.info("https://github.com/PantheonTechnologies/lighty-core"); + try { + LOG.info("using default configuration ..."); + //1. get controller configuration + ControllerConfiguration defaultSingleNodeConfiguration = + ControllerConfigUtils.getDefaultSingleNodeConfiguration(TPCEUtils.yangModels); + //2. get RESTCONF NBP configuration + RestConfConfiguration restConfConfig = + RestConfConfigUtils.getDefaultRestConfConfiguration(); + restConfConfig.setJsonRestconfServiceType(JsonRestConfServiceType.DRAFT_02); + restConfConfig.setHttpPort(8181); + //3. NETCONF SBP configuration + NetconfConfiguration netconfSBPConfig = NetconfConfigUtils.createDefaultNetconfConfiguration(); + startLighty(defaultSingleNodeConfiguration, restConfConfig, netconfSBPConfig, registerShutdownHook); + float duration = (System.nanoTime() - startTime) / 1_000_000f; + LOG.info("lighty.io and RESTCONF-NETCONF started in {}ms", duration); + } catch (Exception e) { + LOG.error("Main RESTCONF-NETCONF application exception: ", e); + } + } + + private void startLighty(ControllerConfiguration controllerConfiguration, + RestConfConfiguration restConfConfiguration, + NetconfConfiguration netconfSBPConfiguration, boolean registerShutdownHook) + throws ConfigurationException, ExecutionException, InterruptedException { + + //1. initialize and start Lighty controller (MD-SAL, Controller, YangTools, Akka) + LightyControllerBuilder lightyControllerBuilder = new LightyControllerBuilder(); + LightyController lightyController = lightyControllerBuilder.from(controllerConfiguration).build(); + lightyController.start().get(); + + //2. start RestConf server + CommunityRestConfBuilder communityRestConfBuilder = new CommunityRestConfBuilder(); + LightyServerBuilder jettyServerBuilder = new LightyServerBuilder(new InetSocketAddress( + restConfConfiguration.getInetAddress(), restConfConfiguration.getHttpPort())); + CommunityRestConf communityRestConf = communityRestConfBuilder.from(RestConfConfigUtils + .getRestConfConfiguration(restConfConfiguration, lightyController.getServices())) + .withLightyServer(jettyServerBuilder) + .build(); + communityRestConf.start().get(); + communityRestConf.startServer(); + + //3. start NetConf SBP + NetconfSBPlugin netconfSouthboundPlugin; + netconfSBPConfiguration = NetconfConfigUtils.injectServicesToTopologyConfig( + netconfSBPConfiguration, lightyController.getServices()); + NetconfTopologyPluginBuilder netconfSBPBuilder = new NetconfTopologyPluginBuilder(); + netconfSouthboundPlugin = netconfSBPBuilder + .from(netconfSBPConfiguration, lightyController.getServices()) + .build(); + netconfSouthboundPlugin.start().get(); + + //4. start TransportPCE beans + TransportPCE transportPCE = new TransportPCEImpl(lightyController.getServices()); + transportPCE.start().get(); + + //5. Register shutdown hook for graceful shutdown. + shutdownHook = new ShutdownHook(lightyController, communityRestConf, netconfSouthboundPlugin, transportPCE); + if (registerShutdownHook) { + Runtime.getRuntime().addShutdownHook(shutdownHook); + } + } + + public void shutdown() { + shutdownHook.run(); + } + + public static void main(String[] args) { + Main app = new Main(); + app.start(args, true); + } + + private static class ShutdownHook extends Thread { + + private static final Logger LOG = LoggerFactory.getLogger(ShutdownHook.class); + private final LightyController lightyController; + private final CommunityRestConf communityRestConf; + private final LightyModule netconfSouthboundPlugin; + private final TransportPCE transportPCE; + + ShutdownHook(LightyController lightyController, CommunityRestConf communityRestConf, + LightyModule netconfSouthboundPlugin, TransportPCE transportPCE) { + this.lightyController = lightyController; + this.communityRestConf = communityRestConf; + this.netconfSouthboundPlugin = netconfSouthboundPlugin; + this.transportPCE = transportPCE; + } + + @Override + public void run() { + LOG.info("lighty.io and RESTCONF-NETCONF shutting down ..."); + long startTime = System.nanoTime(); + try { + transportPCE.shutdown().get(); + } catch (Exception e) { + LOG.error("Exception while shutting down TransportPCE: ", e); + } + try { + communityRestConf.shutdown().get(); + } catch (Exception e) { + LOG.error("Exception while shutting down RESTCONF: ", e); + } + try { + netconfSouthboundPlugin.shutdown().get(); + } catch (Exception e) { + LOG.error("Exception while shutting down NETCONF: ", e); + } + try { + lightyController.shutdown().get(); + } catch (Exception e) { + LOG.error("Exception while shutting down lighty.io controller:", e); + } + float duration = (System.nanoTime() - startTime)/1_000_000f; + LOG.info("lighty.io and RESTCONF-NETCONF stopped in {}ms", duration); + } + + } + +} diff --git a/lighty/src/main/java/io/lighty/controllers/tpce/module/TransportPCE.java b/lighty/src/main/java/io/lighty/controllers/tpce/module/TransportPCE.java new file mode 100644 index 000000000..e43041f5b --- /dev/null +++ b/lighty/src/main/java/io/lighty/controllers/tpce/module/TransportPCE.java @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2018 Pantheon Technologies s.r.o. 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 https://www.eclipse.org/legal/epl-v10.html + */ + +package io.lighty.controllers.tpce.module; + +import io.lighty.core.controller.api.LightyModule; + +public interface TransportPCE extends LightyModule { +} diff --git a/lighty/src/main/java/io/lighty/controllers/tpce/module/TransportPCEImpl.java b/lighty/src/main/java/io/lighty/controllers/tpce/module/TransportPCEImpl.java new file mode 100644 index 000000000..6431cb894 --- /dev/null +++ b/lighty/src/main/java/io/lighty/controllers/tpce/module/TransportPCEImpl.java @@ -0,0 +1,201 @@ +/* + * Copyright (c) 2018 Pantheon Technologies s.r.o. 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 https://www.eclipse.org/legal/epl-v10.html + */ + +package io.lighty.controllers.tpce.module; + +import io.lighty.core.controller.api.AbstractLightyModule; +import io.lighty.core.controller.api.LightyServices; +import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl; +import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl121; +import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl221; +import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl; +import org.opendaylight.transportpce.common.fixedflex.FixedFlexImpl; +import org.opendaylight.transportpce.common.mapping.MappingUtilsImpl; +import org.opendaylight.transportpce.common.mapping.PortMappingImpl; +import org.opendaylight.transportpce.common.mapping.PortMappingVersion121; +import org.opendaylight.transportpce.common.mapping.PortMappingVersion221; +import org.opendaylight.transportpce.common.network.NetworkTransactionImpl; +import org.opendaylight.transportpce.common.network.RequestProcessor; +import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl; +import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl121; +import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl221; +import org.opendaylight.transportpce.networkmodel.NetConfTopologyListener; +import org.opendaylight.transportpce.networkmodel.NetworkModelProvider; +import org.opendaylight.transportpce.networkmodel.NetworkUtilsImpl; +import org.opendaylight.transportpce.networkmodel.R2RLinkDiscovery; +import org.opendaylight.transportpce.networkmodel.service.NetworkModelServiceImpl; +import org.opendaylight.transportpce.networkmodel.util.OpenRoadmFactory; +import org.opendaylight.transportpce.networkmodel.util.OpenRoadmTopology121; +import org.opendaylight.transportpce.networkmodel.util.OpenRoadmTopology22; +import org.opendaylight.transportpce.olm.OlmPowerServiceRpcImpl; +import org.opendaylight.transportpce.olm.OlmProvider; +import org.opendaylight.transportpce.olm.power.PowerMgmt; +import org.opendaylight.transportpce.olm.power.PowerMgmtImpl; +import org.opendaylight.transportpce.olm.service.OlmPowerServiceImpl; +import org.opendaylight.transportpce.pce.impl.PceProvider; +import org.opendaylight.transportpce.pce.service.PathComputationServiceImpl; +import org.opendaylight.transportpce.renderer.NetworkModelWavelengthServiceImpl; +import org.opendaylight.transportpce.renderer.RendererProvider; +import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterface121; +import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterface221; +import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterfaceFactory; +import org.opendaylight.transportpce.renderer.provisiondevice.DeviceRendererServiceImpl; +import org.opendaylight.transportpce.renderer.provisiondevice.RendererServiceOperationsImpl; +import org.opendaylight.transportpce.renderer.rpcs.DeviceRendererRPCImpl; +import org.opendaylight.transportpce.servicehandler.impl.ServicehandlerProvider; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class TransportPCEImpl extends AbstractLightyModule implements TransportPCE { + + private static final Logger LOG = LoggerFactory.getLogger(TransportPCEImpl.class); + private static final long MaxDurationToSubmitTransaction = 1500; + + // common beans + private final DeviceTransactionManagerImpl deviceTransactionManager; + private final MappingUtilsImpl mappingUtils; + private final OpenRoadmInterfacesImpl121 openRoadmInterfacesImpl121; + private final OpenRoadmInterfacesImpl221 openRoadmInterfacesImpl221; + private final OpenRoadmInterfacesImpl openRoadmInterfaces; + private final PortMappingVersion221 portMappingVersion221; + private final RequestProcessor requestProcessor; + private final NetworkTransactionImpl networkTransaction; + private final PortMappingVersion121 portMappingVersion121; + private final PortMappingImpl portMapping; + private final CrossConnectImpl121 crossConnectImpl121; + private final CrossConnectImpl221 crossConnectImpl221; + private final CrossConnectImpl crossConnect; + private final FixedFlexImpl fixedFlex; + + // pce beans + private final PathComputationServiceImpl pathComputationService; + private final PceProvider pceProvider; + + // network model beans + private final OpenRoadmTopology121 openRoadmTopology121; + private final OpenRoadmTopology22 openRoadmTopology22; + private final OpenRoadmFactory openRoadmFactory; + private final R2RLinkDiscovery linkDiscoveryImpl; + private final NetworkUtilsImpl networkutilsServiceImpl; + private final NetworkModelServiceImpl networkModelService; + private final NetConfTopologyListener netConfTopologyListener; + private final NetworkModelProvider networkModelProvider; + + // OLM beans + private final PowerMgmt powerMgmt; + private final OlmPowerServiceImpl olmPowerService; + private final OlmProvider olmProvider; + private final OlmPowerServiceRpcImpl olmPowerServiceRpc; + + // renderer beans + private final OpenRoadmInterface121 openRoadmInterface121; + private final OpenRoadmInterface221 openRoadmInterface22; + private final OpenRoadmInterfaceFactory openRoadmInterfaceFactory; + private final DeviceRendererServiceImpl deviceRendererService; + private final DeviceRendererRPCImpl deviceRendererRPC; + private final NetworkModelWavelengthServiceImpl networkModelWavelengthService; + private final RendererServiceOperationsImpl rendererServiceOperations; + private final RendererProvider rendererProvider; + + // service-handler beans + private final ServicehandlerProvider servicehandlerProvider; + + public TransportPCEImpl(LightyServices lightyServices) { + LOG.info("Creating common beans ..."); + deviceTransactionManager = new DeviceTransactionManagerImpl(lightyServices.getControllerBindingMountPointService(), MaxDurationToSubmitTransaction); + mappingUtils = new MappingUtilsImpl(lightyServices.getControllerBindingPingPongDataBroker()); + openRoadmInterfacesImpl121 = new OpenRoadmInterfacesImpl121(deviceTransactionManager); + openRoadmInterfacesImpl221 = new OpenRoadmInterfacesImpl221(deviceTransactionManager); + openRoadmInterfaces = new OpenRoadmInterfacesImpl(deviceTransactionManager, mappingUtils, openRoadmInterfacesImpl121, openRoadmInterfacesImpl221); + portMappingVersion221 = new PortMappingVersion221(lightyServices.getControllerBindingPingPongDataBroker(), deviceTransactionManager, openRoadmInterfaces); + requestProcessor = new RequestProcessor(lightyServices.getControllerBindingPingPongDataBroker()); + networkTransaction = new NetworkTransactionImpl(requestProcessor); + portMappingVersion121 = new PortMappingVersion121(lightyServices.getControllerBindingPingPongDataBroker(), deviceTransactionManager, openRoadmInterfaces); + portMapping = new PortMappingImpl(lightyServices.getControllerBindingPingPongDataBroker(), portMappingVersion221, mappingUtils, portMappingVersion121); + crossConnectImpl121 = new CrossConnectImpl121(deviceTransactionManager); + crossConnectImpl221 = new CrossConnectImpl221(deviceTransactionManager); + crossConnect = new CrossConnectImpl(deviceTransactionManager, mappingUtils, crossConnectImpl121, crossConnectImpl221); + fixedFlex = new FixedFlexImpl(); + + LOG.info("Creating PCE beans ..."); + pathComputationService = new PathComputationServiceImpl(lightyServices.getControllerBindingPingPongDataBroker(), lightyServices.getControllerBindingNotificationPublishService()); + pceProvider = new PceProvider(lightyServices.getControllerRpcProviderRegistry(), pathComputationService); + + LOG.info("Creating network-model beans ..."); + openRoadmTopology121 = new OpenRoadmTopology121(networkTransaction, deviceTransactionManager); + openRoadmTopology22 = new OpenRoadmTopology22(networkTransaction, deviceTransactionManager); + openRoadmFactory = new OpenRoadmFactory(mappingUtils, openRoadmTopology121, openRoadmTopology22); + linkDiscoveryImpl = new R2RLinkDiscovery(lightyServices.getControllerBindingPingPongDataBroker(), deviceTransactionManager, openRoadmFactory, networkTransaction); + networkutilsServiceImpl = new NetworkUtilsImpl(lightyServices.getControllerBindingPingPongDataBroker(), openRoadmFactory); + networkModelService = new NetworkModelServiceImpl(networkTransaction, linkDiscoveryImpl, deviceTransactionManager, openRoadmFactory, portMapping); + netConfTopologyListener = new NetConfTopologyListener(networkModelService, lightyServices.getControllerBindingPingPongDataBroker(), deviceTransactionManager); + networkModelProvider = new NetworkModelProvider(networkTransaction, lightyServices.getControllerBindingPingPongDataBroker(), lightyServices.getControllerRpcProviderRegistry(), networkutilsServiceImpl, netConfTopologyListener, openRoadmFactory); + + LOG.info("Creating OLM beans ..."); + powerMgmt = new PowerMgmtImpl(lightyServices.getControllerBindingPingPongDataBroker(), openRoadmInterfaces, crossConnect, deviceTransactionManager); + olmPowerService = new OlmPowerServiceImpl(lightyServices.getControllerBindingPingPongDataBroker(), powerMgmt, deviceTransactionManager, portMapping, mappingUtils, openRoadmInterfaces); + olmProvider = new OlmProvider(lightyServices.getControllerRpcProviderRegistry(), olmPowerService); + olmPowerServiceRpc = new OlmPowerServiceRpcImpl(olmPowerService); + + LOG.info("Creating renderer beans ..."); + openRoadmInterface121 = new OpenRoadmInterface121(portMapping, openRoadmInterfaces); + openRoadmInterface22 = new OpenRoadmInterface221(portMapping, openRoadmInterfaces, fixedFlex); + openRoadmInterfaceFactory = new OpenRoadmInterfaceFactory(mappingUtils, openRoadmInterface121, openRoadmInterface22); + deviceRendererService = new DeviceRendererServiceImpl(lightyServices.getControllerBindingPingPongDataBroker(), deviceTransactionManager, openRoadmInterfaceFactory, openRoadmInterfaces, crossConnect, portMapping); + deviceRendererRPC = new DeviceRendererRPCImpl(deviceRendererService); + networkModelWavelengthService = new NetworkModelWavelengthServiceImpl(lightyServices.getControllerBindingPingPongDataBroker()); + rendererServiceOperations = new RendererServiceOperationsImpl(deviceRendererService, olmPowerServiceRpc, lightyServices.getControllerBindingPingPongDataBroker(), networkModelWavelengthService, lightyServices.getControllerBindingNotificationPublishService()); + rendererProvider = new RendererProvider(lightyServices.getControllerRpcProviderRegistry(), deviceRendererRPC, rendererServiceOperations); + + LOG.info("Creating service-handler beans ..."); + servicehandlerProvider = new ServicehandlerProvider(lightyServices.getControllerBindingPingPongDataBroker(), lightyServices.getControllerRpcProviderRegistry(), lightyServices.getControllerBindingNotificationService(), + pathComputationService, rendererServiceOperations, networkModelWavelengthService, lightyServices.getControllerBindingNotificationPublishService()); + + } + + @Override + protected boolean initProcedure() { + LOG.info("Initializing common beans ..."); + LOG.info("Initializing PCE beans ..."); + pathComputationService.init(); + pceProvider.init(); + LOG.info("Initializing network-model beans ..."); + networkModelProvider.init(); + LOG.info("Initializing OLM beans ..."); + olmPowerService.init(); + olmProvider.init(); + LOG.info("Initializing renderer beans ..."); + rendererProvider.init(); + LOG.info("Initializing service-handler beans ..."); + servicehandlerProvider.init(); + LOG.info("Init done."); + return true; + } + + @Override + protected boolean stopProcedure() { + LOG.info("Shutting down service-handler beans ..."); + servicehandlerProvider.close(); + LOG.info("Shutting down renderer beans ..."); + rendererProvider.close(); + LOG.info("Shutting down OLM beans ..."); + olmProvider.close(); + olmPowerService.close(); + LOG.info("Shutting down network-model beans ..."); + networkModelProvider.close(); + LOG.info("Shutting down PCE beans ..."); + pathComputationService.close(); + pceProvider.close(); + LOG.info("Shutting down common beans ..."); + networkTransaction.close(); + deviceTransactionManager.preDestroy(); + LOG.info("Shutdown done."); + return true; + } + +} diff --git a/lighty/src/main/java/io/lighty/controllers/tpce/utils/TPCEUtils.java b/lighty/src/main/java/io/lighty/controllers/tpce/utils/TPCEUtils.java new file mode 100644 index 000000000..3ed61f9e4 --- /dev/null +++ b/lighty/src/main/java/io/lighty/controllers/tpce/utils/TPCEUtils.java @@ -0,0 +1,178 @@ +/* + * Copyright (c) 2018 Pantheon Technologies s.r.o. 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 https://www.eclipse.org/legal/epl-v10.html + */ + +package io.lighty.controllers.tpce.utils; + +import com.google.common.collect.ImmutableSet; +import io.lighty.modules.northbound.restconf.community.impl.util.RestConfConfigUtils; +import io.lighty.modules.southbound.netconf.impl.util.NetconfConfigUtils; +import org.opendaylight.yangtools.yang.binding.YangModuleInfo; + +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public final class TPCEUtils { + + public static final Set TPCE_MODELS = ImmutableSet.of( + + // common models + org.opendaylight.yang.gen.v1.http.org.openroadm.alarm.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.alarm.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.common.amplifier.types.rev181130.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.common.equipment.types.rev181130.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.common.link.types.rev181130.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev181130.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.common.optical.channel.types.rev181130.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev181130.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev170929.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev181130.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev171215.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev181130.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.layerrate.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.maintenance.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.maintenance.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev170929.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev171215.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.types.rev181130.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.pm.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.pm.types.rev171215.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev170929.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.port.types.rev181130.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.probablecause.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.probablecause.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.resource.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.resource.types.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.resource.types.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.switching.pool.types.rev171215.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.switching.pool.types.rev181130.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.tca.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.tca.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.user.mgmt.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.user.mgmt.rev171215.$YangModuleInfoImpl.getInstance(), + + // device models + org.opendaylight.yang.gen.v1.http.org.openroadm.database.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.database.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.de.device.resource.types.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.de.operations.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.de.operations.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.de.swdl.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.de.swdl.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.ethernet.interfaces.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.ethernet.interfaces.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.file.transfer.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.file.transfer.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.fwdl.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.fwdl.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.interfaces.rev170626.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.maintenance.loopback.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.maintenance.loopback.rev171215.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.maintenance.testsignal.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.maintenance.testsignal.rev171215.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.media.channel.interfaces.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.network.media.channel.interfaces.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.optical.multiplex.interfaces.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.otn.common.rev170626.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.otn.odu.interfaces.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.otn.otu.interfaces.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.physical.types.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.physical.types.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.pluggable.optics.holder.capability.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.port.capability.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.prot.otn.linear.aps.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.rstp.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.rstp.rev181019.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.syslog.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.syslog.rev171215.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.wavelength.map.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.wavelength.map.rev171215.$YangModuleInfoImpl.getInstance(), + + // network models + org.opendaylight.yang.gen.v1.http.org.openroadm.amplifier.rev181130.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.clli.network.rev181130.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev181130.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.external.pluggable.rev181130.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev181130.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.network.rev181130.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev181130.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev181130.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.roadm.rev181130.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev181130.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev181130.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.$YangModuleInfoImpl.getInstance(), + + // service models + org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.routing.constrains.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev161014.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.openroadm.topology.rev161014.$YangModuleInfoImpl.getInstance(), + + // API models / opendaylight + org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.alarmsuppression.rev171102.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev170426.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev171017.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.device.rev170228.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev171017.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev170930.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.servicehandler.rev171017.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev170907.$YangModuleInfoImpl.getInstance(), + + org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev170426.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev171017.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev170426.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.routing.constraints.rev171017.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev170426.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev171016.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev170426.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.servicepath.rev171017.$YangModuleInfoImpl.getInstance(), + + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev170119.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.$YangModuleInfoImpl.getInstance() + + ); + + public static final Set yangModels = Stream.concat( + Stream.concat( + RestConfConfigUtils.YANG_MODELS.stream(), + NetconfConfigUtils.NETCONF_TOPOLOGY_MODELS.stream()) + .collect(Collectors.toSet()).stream(), TPCE_MODELS.stream()) + .collect(Collectors.toSet()); + + private TPCEUtils() { + throw new UnsupportedOperationException("Please do not instantiate utility class."); + } + +} diff --git a/lighty/src/main/resources/log4j.properties b/lighty/src/main/resources/log4j.properties new file mode 100644 index 000000000..641aaf7c1 --- /dev/null +++ b/lighty/src/main/resources/log4j.properties @@ -0,0 +1,4 @@ +log4j.rootLogger=INFO, STDOUT +log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender +log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout +log4j.appender.STDOUT.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n