[ONOS-6632] Add REST APIs for configuring compute and gateway nodes.
- network configuration is not working any more.
Change-Id: I24e4d8b7b8cc33d839328887b9c6190d714baeba
diff --git a/apps/openstacknetworking/BUCK b/apps/openstacknetworking/BUCK
index a3c8489..3810d31 100644
--- a/apps/openstacknetworking/BUCK
+++ b/apps/openstacknetworking/BUCK
@@ -5,7 +5,7 @@
'//lib:javax.ws.rs-api',
'//utils/rest:onlab-rest',
'//cli:onos-cli',
- '//apps/openstacknode:onos-apps-openstacknode',
+ '//apps/openstacknode/api:onos-apps-openstacknode-api',
'//lib:openstack4j-core',
]
diff --git a/apps/openstacknetworking/pom.xml b/apps/openstacknetworking/pom.xml
index e3c5815..501a190 100644
--- a/apps/openstacknetworking/pom.xml
+++ b/apps/openstacknetworking/pom.xml
@@ -111,7 +111,7 @@
</dependency>
<dependency>
<groupId>org.onosproject</groupId>
- <artifactId>onos-apps-openstacknode</artifactId>
+ <artifactId>onos-apps-openstacknode-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
diff --git a/apps/openstacknode/BUCK b/apps/openstacknode/BUCK
index e3a14bd..704f016 100644
--- a/apps/openstacknode/BUCK
+++ b/apps/openstacknode/BUCK
@@ -1,27 +1,13 @@
-COMPILE_DEPS = [
- '//lib:CORE_DEPS',
- '//lib:org.apache.karaf.shell.console',
- '//cli:onos-cli',
- '//protocols/ovsdb/api:onos-protocols-ovsdb-api',
- '//protocols/ovsdb/rfc:onos-protocols-ovsdb-rfc',
- '//core/store/serializers:onos-core-serializers',
+BUNDLES = [
+ '//apps/openstacknode/api:onos-apps-openstacknode-api',
+ '//apps/openstacknode/app:onos-apps-openstacknode-app',
]
-TEST_DEPS = [
- '//lib:TEST_ADAPTERS',
- '//core/api:onos-api-tests',
- '//core/common:onos-core-common-tests',
-]
-
-osgi_jar_with_tests (
- deps = COMPILE_DEPS,
- test_deps = TEST_DEPS,
-)
-
onos_app (
title = 'OpenStack Node Bootstrap App',
category = 'Utility',
url = 'http://onosproject.org',
+ included_bundles = BUNDLES,
description = 'SONA Openstack Node Bootstrap Application.',
required_apps = [ 'org.onosproject.ovsdb-base', 'org.onosproject.drivers.ovsdb' ]
)
diff --git a/apps/openstacknode/api/BUCK b/apps/openstacknode/api/BUCK
new file mode 100644
index 0000000..1099c27
--- /dev/null
+++ b/apps/openstacknode/api/BUCK
@@ -0,0 +1,19 @@
+COMPILE_DEPS = [
+ '//lib:CORE_DEPS',
+ '//lib:org.apache.karaf.shell.console',
+ '//cli:onos-cli',
+ '//protocols/ovsdb/api:onos-protocols-ovsdb-api',
+ '//protocols/ovsdb/rfc:onos-protocols-ovsdb-rfc',
+ '//core/store/serializers:onos-core-serializers',
+]
+
+TEST_DEPS = [
+ '//lib:TEST_ADAPTERS',
+ '//core/api:onos-api-tests',
+ '//core/common:onos-core-common-tests',
+]
+
+osgi_jar_with_tests (
+ deps = COMPILE_DEPS,
+ test_deps = TEST_DEPS
+)
diff --git a/apps/openstacknode/api/pom.xml b/apps/openstacknode/api/pom.xml
new file mode 100644
index 0000000..a48e296
--- /dev/null
+++ b/apps/openstacknode/api/pom.xml
@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright 2016-present Open Networking Laboratory
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-apps-openstacknode</artifactId>
+ <version>1.11.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>onos-apps-openstacknode-api</artifactId>
+ <packaging>bundle</packaging>
+
+ <description>SONA Openstack Node Bootstrap Application</description>
+
+
+ <properties>
+ <onos.app.name>org.onosproject.openstacknode</onos.app.name>
+ <onos.app.title>OpenStack Node Bootstrap App</onos.app.title>
+ <onos.app.category>Utility</onos.app.category>
+ <onos.app.url>http://onosproject.org</onos.app.url>
+ <onos.app.readme>SONA Openstack Node Bootstrap Application</onos.app.readme>
+ <onos.app.requires>
+ org.onosproject.ovsdb-base,
+ org.onosproject.drivers.ovsdb
+ </onos.app.requires>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-rest</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-core-serializers</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-cli</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-protocols-ovsdb-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-databind</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-annotations</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.karaf.shell</groupId>
+ <artifactId>org.apache.karaf.shell.console</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-api</artifactId>
+ <classifier>tests</classifier>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava-testlib</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onlab-junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.easymock</groupId>
+ <artifactId>easymock</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+</project>
diff --git a/apps/openstacknode/src/main/java/org/onosproject/openstacknode/api/Constants.java b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/Constants.java
similarity index 100%
rename from apps/openstacknode/src/main/java/org/onosproject/openstacknode/api/Constants.java
rename to apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/Constants.java
diff --git a/apps/openstacknode/src/main/java/org/onosproject/openstacknode/api/NodeState.java b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/NodeState.java
similarity index 100%
rename from apps/openstacknode/src/main/java/org/onosproject/openstacknode/api/NodeState.java
rename to apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/NodeState.java
diff --git a/apps/openstacknode/src/main/java/org/onosproject/openstacknode/api/OpenstackNode.java b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNode.java
similarity index 100%
rename from apps/openstacknode/src/main/java/org/onosproject/openstacknode/api/OpenstackNode.java
rename to apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNode.java
diff --git a/apps/openstacknode/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeAdminService.java b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeAdminService.java
similarity index 100%
rename from apps/openstacknode/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeAdminService.java
rename to apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeAdminService.java
diff --git a/apps/openstacknode/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeEvent.java b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeEvent.java
similarity index 100%
rename from apps/openstacknode/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeEvent.java
rename to apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeEvent.java
diff --git a/apps/openstacknode/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeHandler.java b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeHandler.java
similarity index 100%
rename from apps/openstacknode/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeHandler.java
rename to apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeHandler.java
diff --git a/apps/openstacknode/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeListener.java b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeListener.java
similarity index 100%
rename from apps/openstacknode/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeListener.java
rename to apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeListener.java
diff --git a/apps/openstacknode/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeService.java b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeService.java
similarity index 100%
rename from apps/openstacknode/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeService.java
rename to apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeService.java
diff --git a/apps/openstacknode/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeStore.java b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeStore.java
similarity index 100%
rename from apps/openstacknode/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeStore.java
rename to apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeStore.java
diff --git a/apps/openstacknode/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeStoreDelegate.java b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeStoreDelegate.java
similarity index 100%
rename from apps/openstacknode/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeStoreDelegate.java
rename to apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeStoreDelegate.java
diff --git a/apps/openstacknode/src/main/java/org/onosproject/openstacknode/api/package-info.java b/apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/package-info.java
similarity index 100%
rename from apps/openstacknode/src/main/java/org/onosproject/openstacknode/api/package-info.java
rename to apps/openstacknode/api/src/main/java/org/onosproject/openstacknode/api/package-info.java
diff --git a/apps/openstacknode/app/BUCK b/apps/openstacknode/app/BUCK
new file mode 100644
index 0000000..821cb71
--- /dev/null
+++ b/apps/openstacknode/app/BUCK
@@ -0,0 +1,28 @@
+COMPILE_DEPS = [
+ '//lib:CORE_DEPS',
+ '//lib:org.apache.karaf.shell.console',
+ '//cli:onos-cli',
+ '//lib:javax.ws.rs-api',
+ '//utils/rest:onlab-rest',
+ '//protocols/ovsdb/api:onos-protocols-ovsdb-api',
+ '//protocols/ovsdb/rfc:onos-protocols-ovsdb-rfc',
+ '//core/store/serializers:onos-core-serializers',
+ '//apps/openstacknode/api:onos-apps-openstacknode-api',
+]
+
+TEST_DEPS = [
+ '//lib:TEST_ADAPTERS',
+ '//core/api:onos-api-tests',
+ '//core/common:onos-core-common-tests',
+]
+
+osgi_jar_with_tests (
+ deps = COMPILE_DEPS,
+ test_deps = TEST_DEPS,
+ web_context = '/onos/openstacknode',
+ api_title = 'OpenStack Node App API',
+ api_version = '1.0',
+ api_description = 'REST API for OpenStack Node App',
+ api_package = 'org.onosproject.openstacknode.web',
+)
+
diff --git a/apps/openstacknode/app/pom.xml b/apps/openstacknode/app/pom.xml
new file mode 100644
index 0000000..33bbfee
--- /dev/null
+++ b/apps/openstacknode/app/pom.xml
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright 2016-present Open Networking Laboratory
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-apps-openstacknode</artifactId>
+ <version>1.11.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>onos-apps-openstacknode-app</artifactId>
+ <packaging>bundle</packaging>
+
+ <description>SONA Openstack Node Bootstrap Application</description>
+
+ <properties>
+ <onos.app.name>org.onosproject.openstacknode</onos.app.name>
+ <onos.app.title>OpenStack Node Bootstrap App</onos.app.title>
+ <onos.app.category>Utility</onos.app.category>
+ <onos.app.url>http://onosproject.org</onos.app.url>
+ <onos.app.readme>SONA Openstack Node Bootstrap Application</onos.app.readme>
+ <onos.app.requires>
+ org.onosproject.ovsdb-base,
+ org.onosproject.drivers.ovsdb
+ </onos.app.requires>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-rest</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-apps-openstacknode-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onlab-rest</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.ws.rs</groupId>
+ <artifactId>javax.ws.rs-api</artifactId>
+ <version>2.0.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-core-serializers</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-cli</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-protocols-ovsdb-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-databind</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-annotations</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.karaf.shell</groupId>
+ <artifactId>org.apache.karaf.shell.console</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onos-api</artifactId>
+ <classifier>tests</classifier>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava-testlib</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.onosproject</groupId>
+ <artifactId>onlab-junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.easymock</groupId>
+ <artifactId>easymock</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+</project>
diff --git a/apps/openstacknode/src/main/java/org/onosproject/openstacknode/cli/OpenstackNodeCheckCommand.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/cli/OpenstackNodeCheckCommand.java
similarity index 100%
rename from apps/openstacknode/src/main/java/org/onosproject/openstacknode/cli/OpenstackNodeCheckCommand.java
rename to apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/cli/OpenstackNodeCheckCommand.java
diff --git a/apps/openstacknode/src/main/java/org/onosproject/openstacknode/cli/OpenstackNodeInitCommand.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/cli/OpenstackNodeInitCommand.java
similarity index 100%
rename from apps/openstacknode/src/main/java/org/onosproject/openstacknode/cli/OpenstackNodeInitCommand.java
rename to apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/cli/OpenstackNodeInitCommand.java
diff --git a/apps/openstacknode/src/main/java/org/onosproject/openstacknode/cli/OpenstackNodeListCommand.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/cli/OpenstackNodeListCommand.java
similarity index 100%
rename from apps/openstacknode/src/main/java/org/onosproject/openstacknode/cli/OpenstackNodeListCommand.java
rename to apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/cli/OpenstackNodeListCommand.java
diff --git a/apps/openstacknode/src/main/java/org/onosproject/openstacknode/cli/package-info.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/cli/package-info.java
similarity index 100%
rename from apps/openstacknode/src/main/java/org/onosproject/openstacknode/cli/package-info.java
rename to apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/cli/package-info.java
diff --git a/apps/openstacknode/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNode.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNode.java
similarity index 100%
rename from apps/openstacknode/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNode.java
rename to apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNode.java
diff --git a/apps/openstacknode/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java
similarity index 100%
rename from apps/openstacknode/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java
rename to apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandler.java
diff --git a/apps/openstacknode/src/main/java/org/onosproject/openstacknode/impl/DistributedOpenstackNodeStore.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DistributedOpenstackNodeStore.java
similarity index 100%
rename from apps/openstacknode/src/main/java/org/onosproject/openstacknode/impl/DistributedOpenstackNodeStore.java
rename to apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/DistributedOpenstackNodeStore.java
diff --git a/apps/openstacknode/src/main/java/org/onosproject/openstacknode/impl/OpenstackNodeManager.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/OpenstackNodeManager.java
similarity index 70%
rename from apps/openstacknode/src/main/java/org/onosproject/openstacknode/impl/OpenstackNodeManager.java
rename to apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/OpenstackNodeManager.java
index 65d565a..ddd583e 100644
--- a/apps/openstacknode/src/main/java/org/onosproject/openstacknode/impl/OpenstackNodeManager.java
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/OpenstackNodeManager.java
@@ -30,12 +30,6 @@
import org.onosproject.core.CoreService;
import org.onosproject.event.ListenerRegistry;
import org.onosproject.net.DeviceId;
-import org.onosproject.net.config.ConfigFactory;
-import org.onosproject.net.config.NetworkConfigEvent;
-import org.onosproject.net.config.NetworkConfigListener;
-import org.onosproject.net.config.NetworkConfigRegistry;
-import org.onosproject.net.config.basics.SubjectFactories;
-import org.onosproject.openstacknode.api.OpenstackNodeConfig;
import org.onosproject.openstacknode.api.OpenstackNode;
import org.onosproject.openstacknode.api.OpenstackNodeAdminService;
import org.onosproject.openstacknode.api.OpenstackNodeEvent;
@@ -87,22 +81,9 @@
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected LeadershipService leadershipService;
- @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
- protected NetworkConfigRegistry configRegistry;
-
private final ExecutorService eventExecutor = newSingleThreadExecutor(
groupedThreads(this.getClass().getSimpleName(), "event-handler", log));
- private final ConfigFactory configFactory =
- new ConfigFactory<ApplicationId, OpenstackNodeConfig>(
- SubjectFactories.APP_SUBJECT_FACTORY, OpenstackNodeConfig.class, "openstacknode") {
- @Override
- public OpenstackNodeConfig createConfig() {
- return new OpenstackNodeConfig();
- }
- };
-
- private final NetworkConfigListener configListener = new InternalConfigListener();
private final OpenstackNodeStoreDelegate delegate = new InternalNodeStoreDelegate();
private ApplicationId appId;
@@ -116,18 +97,12 @@
localNode = clusterService.getLocalNode().id();
leadershipService.runForLeadership(appId.name());
- configRegistry.registerConfigFactory(configFactory);
- configRegistry.addListener(configListener);
-
- readConfiguration();
log.info("Started");
}
@Deactivate
protected void deactivate() {
osNodeStore.unsetDelegate(delegate);
- configRegistry.removeListener(configListener);
- configRegistry.unregisterConfigFactory(configFactory);
leadershipService.withdraw(appId.name());
eventExecutor.shutdown();
@@ -212,53 +187,4 @@
}
}
}
-
- private void readConfiguration() {
- OpenstackNodeConfig config = configRegistry.getConfig(appId, OpenstackNodeConfig.class);
- if (config == null) {
- log.debug("No configuration found");
- return;
- }
-
- log.info("Read openstack node configurations...");
- Set<String> hostnames = config.openstackNodes().stream()
- .map(OpenstackNode::hostname)
- .collect(Collectors.toSet());
- nodes().stream().filter(osNode -> !hostnames.contains(osNode.hostname()))
- .forEach(osNode -> removeNode(osNode.hostname()));
-
- config.openstackNodes().forEach(osNode -> {
- OpenstackNode existing = node(osNode.hostname());
- if (existing == null) {
- createNode(osNode);
- } else if (!existing.equals(osNode)) {
- updateNode(osNode);
- }
- });
- }
-
- private class InternalConfigListener implements NetworkConfigListener {
-
- @Override
- public void event(NetworkConfigEvent event) {
- NodeId leaderNodeId = leadershipService.getLeader(appId.name());
- if (!Objects.equals(localNode, leaderNodeId)) {
- // do not allow to proceed without leadership
- return;
- }
-
- if (!event.configClass().equals(OpenstackNodeConfig.class)) {
- return;
- }
-
- switch (event.type()) {
- case CONFIG_ADDED:
- case CONFIG_UPDATED:
- eventExecutor.execute(OpenstackNodeManager.this::readConfiguration);
- break;
- default:
- break;
- }
- }
- }
}
diff --git a/apps/openstacknode/src/main/java/org/onosproject/openstacknode/impl/package-info.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/package-info.java
similarity index 100%
rename from apps/openstacknode/src/main/java/org/onosproject/openstacknode/impl/package-info.java
rename to apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/impl/package-info.java
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/web/OpenstackNodeWebResource.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/web/OpenstackNodeWebResource.java
new file mode 100644
index 0000000..cce5134
--- /dev/null
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/web/OpenstackNodeWebResource.java
@@ -0,0 +1,164 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * 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.onosproject.openstacknode.web;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.google.common.collect.Sets;
+import org.onlab.osgi.DefaultServiceDirectory;
+import org.onlab.packet.IpAddress;
+import org.onosproject.net.DeviceId;
+import org.onosproject.openstacknode.api.NodeState;
+import org.onosproject.openstacknode.api.OpenstackNode;
+import org.onosproject.openstacknode.api.OpenstackNodeAdminService;
+import org.onosproject.openstacknode.api.OpenstackNodeService;
+import org.onosproject.openstacknode.impl.DefaultOpenstackNode;
+import org.onosproject.rest.AbstractWebResource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.POST;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriBuilder;
+import javax.ws.rs.core.UriInfo;
+import java.io.InputStream;
+import java.util.Set;
+
+import static com.fasterxml.jackson.databind.SerializationFeature.INDENT_OUTPUT;
+import static javax.ws.rs.core.Response.created;
+
+@Path("configure")
+public class OpenstackNodeWebResource extends AbstractWebResource {
+ private final Logger log = LoggerFactory.getLogger(getClass());
+
+ private static final String MESSAGE_NODE = "Received node %s request";
+ private static final String NODES = "nodes";
+
+ private final OpenstackNodeAdminService osNodeAdminService =
+ DefaultServiceDirectory.getService(OpenstackNodeAdminService.class);
+ private final OpenstackNodeService osNodeService =
+ DefaultServiceDirectory.getService(OpenstackNodeService.class);
+
+ @Context
+ private UriInfo uriInfo;
+
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response createNodes(InputStream input) {
+ log.trace(String.format(MESSAGE_NODE, "CREATE"));
+
+ readNodeConfiguration(input).forEach(osNode -> {
+ OpenstackNode existing = osNodeService.node(osNode.hostname());
+ if (existing == null) {
+ osNodeAdminService.createNode(osNode);
+ }
+ });
+
+ UriBuilder locationBuilder = uriInfo.getBaseUriBuilder()
+ .path(NODES)
+ .path("NODE_ID");
+
+ return created(locationBuilder.build()).build();
+ }
+
+ @PUT
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response updateNodes(InputStream input) {
+ log.trace(String.format(MESSAGE_NODE, "UPDATE"));
+
+ Set<OpenstackNode> nodes = readNodeConfiguration(input);
+ for (OpenstackNode osNode: nodes) {
+ OpenstackNode existing = osNodeService.node(osNode.hostname());
+ if (existing == null) {
+ log.warn("There is no node configuration to update : {}", osNode.hostname());
+ return Response.notModified().build();
+ } else if (!existing.equals(osNode)) {
+ osNodeAdminService.updateNode(osNode);
+ }
+ }
+
+ return Response.ok().build();
+ }
+
+ @DELETE
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ public Response deleteNodes(InputStream input) {
+ log.trace(String.format(MESSAGE_NODE, "DELETE"));
+
+ Set<OpenstackNode> nodes = readNodeConfiguration(input);
+ for (OpenstackNode osNode: nodes) {
+ OpenstackNode existing = osNodeService.node(osNode.hostname());
+ if (existing == null) {
+ log.warn("There is no node configuration to delete : {}", osNode.hostname());
+ return Response.notModified().build();
+ } else {
+ osNodeAdminService.removeNode(osNode.hostname());
+ }
+ }
+
+ return Response.ok().build();
+ }
+
+ private Set<OpenstackNode> readNodeConfiguration(InputStream input) {
+ Set<OpenstackNode> nodeSet = Sets.newHashSet();
+ try {
+ JsonNode jsonTree = mapper().enable(INDENT_OUTPUT).readTree(input);
+ ArrayNode nodes = (ArrayNode) jsonTree.path("nodes");
+ nodes.forEach(node -> {
+ try {
+ String hostname = node.get("hostname").asText();
+ String type = node.get("type").asText();
+ String mIp = node.get("managementIp").asText();
+ String dIp = node.get("dataIp").asText();
+ String iBridge = node.get("integrationBridge").asText();
+ String rBridge = null;
+ if (node.get("routerBridge") != null) {
+ rBridge = node.get("routerBridge").asText();
+ }
+ DefaultOpenstackNode.Builder nodeBuilder = DefaultOpenstackNode.builder()
+ .hostname(hostname)
+ .type(OpenstackNode.NodeType.valueOf(type))
+ .managementIp(IpAddress.valueOf(mIp))
+ .dataIp(IpAddress.valueOf(dIp))
+ .intgBridge(DeviceId.deviceId(iBridge))
+ .state(NodeState.INIT);
+ if (rBridge != null) {
+ nodeBuilder.routerBridge(DeviceId.deviceId(rBridge));
+ }
+ log.trace("node is {}", nodeBuilder.build().toString());
+ nodeSet.add(nodeBuilder.build());
+ } catch (Exception e) {
+ log.error(e.toString());
+ throw new IllegalArgumentException();
+ }
+ });
+ } catch (Exception e) {
+ throw new IllegalArgumentException(e);
+ }
+
+ return nodeSet;
+ }
+}
diff --git a/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/web/package-info.java b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/web/package-info.java
new file mode 100644
index 0000000..85d6a61
--- /dev/null
+++ b/apps/openstacknode/app/src/main/java/org/onosproject/openstacknode/web/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2017-present Open Networking Laboratory
+ *
+ * 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.
+ */
+
+/**
+ * Application for bootstrapping Compute/Gateway Node in OpenStack.
+ */
+package org.onosproject.openstacknode.web;
\ No newline at end of file
diff --git a/apps/openstacknode/src/main/resources/OSGI-INF/blueprint/shell-config.xml b/apps/openstacknode/app/src/main/resources/OSGI-INF/blueprint/shell-config.xml
similarity index 100%
rename from apps/openstacknode/src/main/resources/OSGI-INF/blueprint/shell-config.xml
rename to apps/openstacknode/app/src/main/resources/OSGI-INF/blueprint/shell-config.xml
diff --git a/apps/openstacknode/app/src/main/webapp/WEB-INF/web.xml b/apps/openstacknode/app/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..583cd55
--- /dev/null
+++ b/apps/openstacknode/app/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Copyright 2017-present Open Networking Laboratory
+ ~
+ ~ 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.
+ -->
+<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+ id="ONOS" version="2.5">
+ <display-name>Openstack Node REST API v1.0</display-name>
+
+ <servlet>
+ <servlet-name>JAX-RS Service</servlet-name>
+ <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
+ <init-param>
+ <param-name>jersey.config.server.provider.classnames</param-name>
+ <param-value>
+ org.onosproject.openstacknode.web.OpenstackNodeWebResource
+ </param-value>
+ </init-param>
+ <load-on-startup>1</load-on-startup>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>JAX-RS Service</servlet-name>
+ <url-pattern>/*</url-pattern>
+ </servlet-mapping>
+</web-app>
diff --git a/apps/openstacknode/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandlerTest.java b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandlerTest.java
similarity index 100%
rename from apps/openstacknode/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandlerTest.java
rename to apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeHandlerTest.java
diff --git a/apps/openstacknode/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeTest.java b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeTest.java
similarity index 100%
rename from apps/openstacknode/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeTest.java
rename to apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/DefaultOpenstackNodeTest.java
diff --git a/apps/openstacknode/src/test/java/org/onosproject/openstacknode/impl/OpenstackNodeManagerTest.java b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/OpenstackNodeManagerTest.java
similarity index 95%
rename from apps/openstacknode/src/test/java/org/onosproject/openstacknode/impl/OpenstackNodeManagerTest.java
rename to apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/OpenstackNodeManagerTest.java
index 6dd481d..69a0f9d 100644
--- a/apps/openstacknode/src/test/java/org/onosproject/openstacknode/impl/OpenstackNodeManagerTest.java
+++ b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/OpenstackNodeManagerTest.java
@@ -29,7 +29,6 @@
import org.onosproject.core.DefaultApplicationId;
import org.onosproject.event.Event;
import org.onosproject.net.Device;
-import org.onosproject.net.config.NetworkConfigRegistryAdapter;
import org.onosproject.openstacknode.api.NodeState;
import org.onosproject.openstacknode.api.OpenstackNode;
import org.onosproject.openstacknode.api.OpenstackNodeEvent;
@@ -43,7 +42,11 @@
import static org.junit.Assert.assertTrue;
import static org.onosproject.openstacknode.api.OpenstackNode.NodeType.COMPUTE;
import static org.onosproject.openstacknode.api.OpenstackNode.NodeType.GATEWAY;
-import static org.onosproject.openstacknode.api.OpenstackNodeEvent.Type.*;
+import static org.onosproject.openstacknode.api.OpenstackNodeEvent.Type.OPENSTACK_NODE_COMPLETE;
+import static org.onosproject.openstacknode.api.OpenstackNodeEvent.Type.OPENSTACK_NODE_CREATED;
+import static org.onosproject.openstacknode.api.OpenstackNodeEvent.Type.OPENSTACK_NODE_INCOMPLETE;
+import static org.onosproject.openstacknode.api.OpenstackNodeEvent.Type.OPENSTACK_NODE_REMOVED;
+import static org.onosproject.openstacknode.api.OpenstackNodeEvent.Type.OPENSTACK_NODE_UPDATED;
/**
* Unit tests for OpenStack node manager.
@@ -114,11 +117,10 @@
osNodeStore.createNode(COMPUTE_3);
osNodeStore.createNode(GATEWAY_1);
- target = new OpenstackNodeManager();
+ target = new org.onosproject.openstacknode.impl.OpenstackNodeManager();
target.coreService = new TestCoreService();
target.clusterService = new TestClusterService();
target.leadershipService = new TestLeadershipService();
- target.configRegistry = new TestConfigService();
target.osNodeStore = osNodeStore;
target.addListener(testListener);
target.activate();
@@ -317,10 +319,6 @@
}
}
- private class TestConfigService extends NetworkConfigRegistryAdapter {
-
- }
-
private class TestClusterService extends ClusterServiceAdapter {
}
diff --git a/apps/openstacknode/src/test/java/org/onosproject/openstacknode/impl/OpenstackNodeTest.java b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/OpenstackNodeTest.java
similarity index 94%
rename from apps/openstacknode/src/test/java/org/onosproject/openstacknode/impl/OpenstackNodeTest.java
rename to apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/OpenstackNodeTest.java
index d551efb..3cb336a 100644
--- a/apps/openstacknode/src/test/java/org/onosproject/openstacknode/impl/OpenstackNodeTest.java
+++ b/apps/openstacknode/app/src/test/java/org/onosproject/openstacknode/impl/OpenstackNodeTest.java
@@ -46,7 +46,7 @@
protected static OpenstackNode createNode(String hostname, NodeType type,
Device intgBridge, IpAddress ipAddr,
NodeState state) {
- return DefaultOpenstackNode.builder()
+ return org.onosproject.openstacknode.impl.DefaultOpenstackNode.builder()
.hostname(hostname)
.type(type)
.intgBridge(intgBridge.id())
@@ -59,7 +59,7 @@
protected static OpenstackNode createNode(String hostname, NodeType type,
Device intgBridge, Device routerBridge,
IpAddress ipAddr, NodeState state) {
- return DefaultOpenstackNode.builder()
+ return org.onosproject.openstacknode.impl.DefaultOpenstackNode.builder()
.hostname(hostname)
.type(type)
.intgBridge(intgBridge.id())
diff --git a/apps/openstacknode/pom.xml b/apps/openstacknode/pom.xml
index cfb5e07..c2ab487 100644
--- a/apps/openstacknode/pom.xml
+++ b/apps/openstacknode/pom.xml
@@ -26,83 +26,14 @@
</parent>
<artifactId>onos-apps-openstacknode</artifactId>
- <packaging>bundle</packaging>
+ <packaging>pom</packaging>
<description>SONA Openstack Node Bootstrap Application</description>
+ <modules>
+ <module>api</module>
+ <module>app</module>
+ </modules>
- <properties>
- <onos.app.name>org.onosproject.openstacknode</onos.app.name>
- <onos.app.title>OpenStack Node Bootstrap App</onos.app.title>
- <onos.app.category>Utility</onos.app.category>
- <onos.app.url>http://onosproject.org</onos.app.url>
- <onos.app.readme>SONA Openstack Node Bootstrap Application</onos.app.readme>
- <onos.app.requires>
- org.onosproject.ovsdb-base,
- org.onosproject.drivers.ovsdb
- </onos.app.requires>
- </properties>
- <dependencies>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.compendium</artifactId>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-api</artifactId>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-core-serializers</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-cli</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-ovsdb-api</artifactId>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-annotations</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.karaf.shell</groupId>
- <artifactId>org.apache.karaf.shell.console</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-api</artifactId>
- <classifier>tests</classifier>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>com.google.guava</groupId>
- <artifactId>guava-testlib</artifactId>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.onosproject</groupId>
- <artifactId>onlab-junit</artifactId>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.easymock</groupId>
- <artifactId>easymock</artifactId>
- <scope>test</scope>
- </dependency>
-
- </dependencies>
</project>
diff --git a/apps/openstacknode/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeConfig.java b/apps/openstacknode/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeConfig.java
deleted file mode 100644
index 774342a..0000000
--- a/apps/openstacknode/src/main/java/org/onosproject/openstacknode/api/OpenstackNodeConfig.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Laboratory
- *
- * 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.onosproject.openstacknode.api;
-
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.Sets;
-import org.onlab.packet.IpAddress;
-import org.onosproject.core.ApplicationId;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.config.Config;
-import org.onosproject.openstacknode.impl.DefaultOpenstackNode;
-
-import java.util.Set;
-
-import static org.onosproject.net.config.Config.FieldPresence.MANDATORY;
-import static org.onosproject.net.config.Config.FieldPresence.OPTIONAL;
-import static org.onosproject.openstacknode.api.OpenstackNode.NodeType.GATEWAY;
-
-/**
- * Configuration object for OpensatckNode service.
- */
-public final class OpenstackNodeConfig extends Config<ApplicationId> {
-
- private static final String NODES = "nodes";
- private static final String HOST_NAME = "hostname";
- private static final String TYPE = "type";
- private static final String MANAGEMENT_IP = "managementIp";
- private static final String DATA_IP = "dataIp";
- private static final String INTEGRATION_BRIDGE = "integrationBridge";
-
- // GATEWAY node specific fields
- private static final String ROUTER_BRIDGE = "routerBridge";
- private static final String VLAN_INTF_NAME = "vlanPort";
-
- @Override
- public boolean isValid() {
- boolean result = hasOnlyFields(NODES);
- if (object.get(NODES) == null || object.get(NODES).size() < 1) {
- return true;
- }
-
- for (JsonNode node : object.get(NODES)) {
- if (get(node, DATA_IP) == null && get(node, VLAN_INTF_NAME) == null) {
- final String msg = "There is neither tunnel interface nor vlan port";
- throw new IllegalArgumentException(msg);
- }
- ObjectNode osNode = (ObjectNode) node;
- result &= hasOnlyFields(osNode,
- HOST_NAME,
- TYPE,
- MANAGEMENT_IP,
- DATA_IP,
- INTEGRATION_BRIDGE,
- ROUTER_BRIDGE,
- VLAN_INTF_NAME
- );
-
- result &= isString(osNode, HOST_NAME, MANDATORY);
- result &= isString(osNode, TYPE, MANDATORY);
- result &= isIpAddress(osNode, MANAGEMENT_IP, MANDATORY);
- result &= isString(osNode, INTEGRATION_BRIDGE, MANDATORY);
- result &= isString(osNode, VLAN_INTF_NAME, OPTIONAL);
- result &= isIpAddress(osNode, DATA_IP, OPTIONAL);
-
- DeviceId.deviceId(osNode.get(INTEGRATION_BRIDGE).asText());
- OpenstackNode.NodeType.valueOf(osNode.get(TYPE).asText());
-
- if (osNode.get(TYPE).asText().equals(GATEWAY.name())) {
- result &= isString(osNode, ROUTER_BRIDGE, MANDATORY);
- DeviceId.deviceId(osNode.get(ROUTER_BRIDGE).asText());
- }
- }
- return result;
- }
-
- /**
- * Returns the set of nodes read from network config.
- *
- * @return set of openstack nodes
- */
- public Set<OpenstackNode> openstackNodes() {
- Set<OpenstackNode> nodes = Sets.newHashSet();
- for (JsonNode node : object.get(NODES)) {
- OpenstackNode.NodeType type = OpenstackNode.NodeType.valueOf(get(node, TYPE));
- OpenstackNode.Builder nodeBuilder = DefaultOpenstackNode.builder()
- .intgBridge(DeviceId.deviceId(get(node, INTEGRATION_BRIDGE)))
- .managementIp(IpAddress.valueOf(get(node, MANAGEMENT_IP)))
- .type(type)
- .hostname(get(node, HOST_NAME))
- .state(NodeState.INIT);
-
- if (get(node, DATA_IP) != null) {
- nodeBuilder.dataIp(IpAddress.valueOf(get(node, DATA_IP)));
- }
- if (get(node, VLAN_INTF_NAME) != null) {
- nodeBuilder.vlanIntf(get(node, VLAN_INTF_NAME));
- }
- if (type.equals(GATEWAY)) {
- nodeBuilder.routerBridge(DeviceId.deviceId(get(node, ROUTER_BRIDGE)));
- }
- nodes.add(nodeBuilder.build());
- }
- return nodes;
- }
-
- private String get(JsonNode jsonNode, String path) {
- JsonNode jNode = jsonNode.get(path);
- if (jNode == null || jNode.isMissingNode()) {
- return null;
- }
- return jNode.asText();
- }
-}