mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-12-18 07:41:47 +01:00
ONOS-6039 Removed unused openstackinterface app
Change-Id: I783483b2b5c9dbc9a3937c78d97e80f2824f1a80
This commit is contained in:
parent
e0a98f5020
commit
bd1cd448a1
@ -1,12 +0,0 @@
|
|||||||
BUNDLES = [
|
|
||||||
'//apps/openstackinterface/api:onos-apps-openstackinterface-api',
|
|
||||||
'//apps/openstackinterface/app:onos-apps-openstackinterface-app',
|
|
||||||
]
|
|
||||||
|
|
||||||
onos_app (
|
|
||||||
title = 'OpenStack Interface App',
|
|
||||||
category = 'Utility',
|
|
||||||
url = 'http://onosproject.org',
|
|
||||||
description = 'Openstack Interface Application.',
|
|
||||||
included_bundles = BUNDLES,
|
|
||||||
)
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
COMPILE_DEPS = [
|
|
||||||
'//lib:CORE_DEPS',
|
|
||||||
'//lib:jersey-client',
|
|
||||||
'//lib:javax.ws.rs-api',
|
|
||||||
]
|
|
||||||
|
|
||||||
osgi_jar_with_tests (
|
|
||||||
deps = COMPILE_DEPS,
|
|
||||||
)
|
|
||||||
@ -1,48 +0,0 @@
|
|||||||
<?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-app-openstackinterface</artifactId>
|
|
||||||
<version>1.10.0-SNAPSHOT</version>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<artifactId>onos-app-openstackinterface-api</artifactId>
|
|
||||||
<packaging>bundle</packaging>
|
|
||||||
|
|
||||||
<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>
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
</project>
|
|
||||||
|
|
||||||
@ -1,145 +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.openstackinterface;
|
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
|
||||||
import com.google.common.collect.Maps;
|
|
||||||
import org.onlab.packet.Ip4Address;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A configurable external gateway modes extension model in openstack router.
|
|
||||||
*/
|
|
||||||
public final class OpenstackExternalGateway {
|
|
||||||
|
|
||||||
private final String networkId;
|
|
||||||
private final boolean enablePnat;
|
|
||||||
private final Map<String, Ip4Address> externalFixedIps;
|
|
||||||
|
|
||||||
private OpenstackExternalGateway(String networkId, boolean enablePnat,
|
|
||||||
Map<String, Ip4Address> externalFixedIps) {
|
|
||||||
this.networkId = networkId;
|
|
||||||
this.enablePnat = enablePnat;
|
|
||||||
this.externalFixedIps = externalFixedIps;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns network ID.
|
|
||||||
*
|
|
||||||
* @return Network ID
|
|
||||||
*/
|
|
||||||
public String networkId() {
|
|
||||||
return networkId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the PNAT status for external gateway.
|
|
||||||
*
|
|
||||||
* @return PNAT status
|
|
||||||
*/
|
|
||||||
public boolean isEnablePnat() {
|
|
||||||
return enablePnat;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns external fixed IP informations.
|
|
||||||
*
|
|
||||||
* @return External fixed IP informations
|
|
||||||
*/
|
|
||||||
public Map<String, Ip4Address> externalFixedIps() {
|
|
||||||
return ImmutableMap.copyOf(externalFixedIps);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if (this == o) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (o instanceof OpenstackExternalGateway) {
|
|
||||||
OpenstackExternalGateway that = (OpenstackExternalGateway) o;
|
|
||||||
|
|
||||||
return this.networkId.equals(that.networkId) &&
|
|
||||||
this.enablePnat == that.enablePnat &&
|
|
||||||
this.externalFixedIps.equals(that.externalFixedIps);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return Objects.hash(networkId, enablePnat, externalFixedIps);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An Openstack External Gateway Builder class.
|
|
||||||
*/
|
|
||||||
public static final class Builder {
|
|
||||||
private String networkId;
|
|
||||||
private boolean enablePnat;
|
|
||||||
private Map<String, Ip4Address> externalFixedIps;
|
|
||||||
|
|
||||||
public Builder() {
|
|
||||||
externalFixedIps = Maps.newHashMap();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets network ID.
|
|
||||||
*
|
|
||||||
* @param networkId Network ID
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder networkId(String networkId) {
|
|
||||||
this.networkId = networkId;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets whether PNAT status is enabled or not.
|
|
||||||
*
|
|
||||||
* @param enablePnat true if PNAT status is enabled, false otherwise
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder enablePnat(boolean enablePnat) {
|
|
||||||
this.enablePnat = enablePnat;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets external fixed IP address information.
|
|
||||||
*
|
|
||||||
* @param externalFixedIps External fixed IP information
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
|
|
||||||
public Builder externalFixedIps(Map<String, Ip4Address> externalFixedIps) {
|
|
||||||
this.externalFixedIps.putAll(externalFixedIps);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Builds an OpenstackExternalGateway object.
|
|
||||||
*
|
|
||||||
* @return OpenstackExternalGateway object
|
|
||||||
*/
|
|
||||||
public OpenstackExternalGateway build() {
|
|
||||||
return new OpenstackExternalGateway(networkId, enablePnat, ImmutableMap.copyOf(externalFixedIps));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,287 +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.openstackinterface;
|
|
||||||
|
|
||||||
import org.onlab.packet.Ip4Address;
|
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An Openstack Neutron Floating IP Model.
|
|
||||||
*/
|
|
||||||
public final class OpenstackFloatingIP {
|
|
||||||
|
|
||||||
public enum FloatingIpStatus {
|
|
||||||
UP,
|
|
||||||
DOWN,
|
|
||||||
ACTIVE,
|
|
||||||
}
|
|
||||||
|
|
||||||
private final String tenantId;
|
|
||||||
private final String networkId;
|
|
||||||
private final Ip4Address fixedIpAddress;
|
|
||||||
private String portId;
|
|
||||||
private String routerId;
|
|
||||||
private final String id;
|
|
||||||
private final Ip4Address floatingIpAddress;
|
|
||||||
private final FloatingIpStatus status;
|
|
||||||
|
|
||||||
private OpenstackFloatingIP(FloatingIpStatus status, String id, String tenantId,
|
|
||||||
String networkId, Ip4Address fixedIpAddress, String portId,
|
|
||||||
String routerId, Ip4Address floatingIpAddress) {
|
|
||||||
this.status = status;
|
|
||||||
this.id = id;
|
|
||||||
this.tenantId = tenantId;
|
|
||||||
this.networkId = networkId;
|
|
||||||
this.fixedIpAddress = fixedIpAddress;
|
|
||||||
this.portId = portId;
|
|
||||||
this.routerId = routerId;
|
|
||||||
this.floatingIpAddress = floatingIpAddress;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns floating IP status.
|
|
||||||
*
|
|
||||||
* @return floating IP status
|
|
||||||
*/
|
|
||||||
public FloatingIpStatus status() {
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns floating IP`s ID.
|
|
||||||
*
|
|
||||||
* @return floating IP`s ID
|
|
||||||
*/
|
|
||||||
public String id() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns tenant ID.
|
|
||||||
*
|
|
||||||
* @return tenant ID
|
|
||||||
*/
|
|
||||||
public String tenantId() {
|
|
||||||
return tenantId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns network ID.
|
|
||||||
*
|
|
||||||
* @return network ID
|
|
||||||
*/
|
|
||||||
public String networkId() {
|
|
||||||
return networkId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns fixed IP Address.
|
|
||||||
*
|
|
||||||
* @return fixed IP Address
|
|
||||||
*/
|
|
||||||
public Ip4Address fixedIpAddress() {
|
|
||||||
return fixedIpAddress;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns port ID.
|
|
||||||
*
|
|
||||||
* @return port ID
|
|
||||||
*/
|
|
||||||
public String portId() {
|
|
||||||
return portId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Updates port ID.
|
|
||||||
*
|
|
||||||
* @param portId Updated port ID
|
|
||||||
*/
|
|
||||||
public void updatePortId(String portId) {
|
|
||||||
this.portId = portId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns router ID.
|
|
||||||
*
|
|
||||||
* @return router ID
|
|
||||||
*/
|
|
||||||
public String routerId() {
|
|
||||||
return routerId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Updates router ID.
|
|
||||||
*
|
|
||||||
* @param routerId Updated router ID
|
|
||||||
*/
|
|
||||||
public void updateRouterId(String routerId) {
|
|
||||||
this.routerId = routerId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns floating IP address.
|
|
||||||
*
|
|
||||||
* @return Floating IP address
|
|
||||||
*/
|
|
||||||
public Ip4Address floatingIpAddress() {
|
|
||||||
return floatingIpAddress;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if (this == o) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (o instanceof OpenstackFloatingIP) {
|
|
||||||
OpenstackFloatingIP that = (OpenstackFloatingIP) o;
|
|
||||||
|
|
||||||
return this.status.equals(that.status) &&
|
|
||||||
this.id.equals(that.id) &&
|
|
||||||
this.tenantId.equals(that.tenantId) &&
|
|
||||||
this.networkId.equals(that.networkId) &&
|
|
||||||
this.fixedIpAddress.equals(that.fixedIpAddress) &&
|
|
||||||
this.floatingIpAddress.equals(that.floatingIpAddress) &&
|
|
||||||
this.portId.equals(that.portId) &&
|
|
||||||
this.routerId.equals(that.routerId);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return Objects.hash(status, id, tenantId, networkId, floatingIpAddress, fixedIpAddress, portId, routerId);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An Openstack Floating IP Builder class.
|
|
||||||
*/
|
|
||||||
public static final class Builder {
|
|
||||||
private String tenantId;
|
|
||||||
private String networkId;
|
|
||||||
private Ip4Address fixedIpAddress;
|
|
||||||
private String portId;
|
|
||||||
private String routerId;
|
|
||||||
private String id;
|
|
||||||
private Ip4Address floatingIpAddress;
|
|
||||||
private FloatingIpStatus status;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets tenant ID.
|
|
||||||
*
|
|
||||||
* @param tenantId tenant ID
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder tenantId(String tenantId) {
|
|
||||||
this.tenantId = tenantId;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets floating IP status.
|
|
||||||
*
|
|
||||||
* @param status Floating IP status
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder status(FloatingIpStatus status) {
|
|
||||||
this.status = status;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets Floating IP`s ID.
|
|
||||||
*
|
|
||||||
* @param id Floating IP`s ID
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder id(String id) {
|
|
||||||
this.id = id;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets network ID.
|
|
||||||
*
|
|
||||||
* @param networkId Network ID
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder networkId(String networkId) {
|
|
||||||
this.networkId = networkId;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets fixed IP address.
|
|
||||||
*
|
|
||||||
* @param fixedIpAddress Fixed IP address
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder fixedIpAddress(Ip4Address fixedIpAddress) {
|
|
||||||
this.fixedIpAddress = fixedIpAddress;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets port ID.
|
|
||||||
*
|
|
||||||
* @param portId port ID
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder portId(String portId) {
|
|
||||||
this.portId = portId;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets router ID.
|
|
||||||
*
|
|
||||||
* @param routerId router ID
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder routerId(String routerId) {
|
|
||||||
this.routerId = routerId;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets floating IP address.
|
|
||||||
*
|
|
||||||
* @param floatingIpAddress Floating IP address
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder floatingIpAddress(Ip4Address floatingIpAddress) {
|
|
||||||
this.floatingIpAddress = floatingIpAddress;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Builds an OpenstackFloatingIP object.
|
|
||||||
*
|
|
||||||
* @return OpenstackFloatingIP object
|
|
||||||
*/
|
|
||||||
public OpenstackFloatingIP build() {
|
|
||||||
return new OpenstackFloatingIP(checkNotNull(status), checkNotNull(id), checkNotNull(tenantId),
|
|
||||||
checkNotNull(networkId), fixedIpAddress, portId,
|
|
||||||
routerId, checkNotNull(floatingIpAddress));
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,116 +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.openstackinterface;
|
|
||||||
|
|
||||||
import org.onosproject.core.ApplicationId;
|
|
||||||
import org.onosproject.net.config.Config;
|
|
||||||
import org.onosproject.net.config.basics.BasicElementConfig;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handles configuration for OpenstackInterface app.
|
|
||||||
*/
|
|
||||||
public class OpenstackInterfaceConfig extends Config<ApplicationId> {
|
|
||||||
public static final String NEUTRON_SERVER = "neutronServer";
|
|
||||||
public static final String KEYSTONE_SERVER = "keystoneServer";
|
|
||||||
public static final String USER_NAME = "userName";
|
|
||||||
public static final String PASSWORD = "password";
|
|
||||||
public static final String PHYSICAL_ROUTER_MAC = "physicalRouterMac";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the Neutron server IP address.
|
|
||||||
*
|
|
||||||
* @return Neutron server IP
|
|
||||||
*/
|
|
||||||
public String neutronServer() {
|
|
||||||
return get(NEUTRON_SERVER, "");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the Keystone server IP address.
|
|
||||||
*
|
|
||||||
* @return Keystone server IP
|
|
||||||
*/
|
|
||||||
public String keystoneServer() {
|
|
||||||
return get(KEYSTONE_SERVER, "");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the username for openstack.
|
|
||||||
*
|
|
||||||
* @return username for openstack
|
|
||||||
*/
|
|
||||||
public String userName() {
|
|
||||||
return get(USER_NAME, "");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the password for openstack.
|
|
||||||
*
|
|
||||||
* @return password for openstack
|
|
||||||
*/
|
|
||||||
public String password() {
|
|
||||||
return get(PASSWORD, "");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the MacAddress for physical router.
|
|
||||||
*
|
|
||||||
* @return physical router mac
|
|
||||||
*/
|
|
||||||
public String physicalRouterMac() {
|
|
||||||
return get(PHYSICAL_ROUTER_MAC, "");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the neutron server IP address.
|
|
||||||
*
|
|
||||||
* @param url neutron server IP address
|
|
||||||
* @return itself
|
|
||||||
*/
|
|
||||||
public BasicElementConfig neutronServer(String url) {
|
|
||||||
return (BasicElementConfig) setOrClear(NEUTRON_SERVER, url);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the keystone server IP address.
|
|
||||||
*
|
|
||||||
* @param url keystone server IP address
|
|
||||||
* @return itself
|
|
||||||
*/
|
|
||||||
public BasicElementConfig keystoneServer(String url) {
|
|
||||||
return (BasicElementConfig) setOrClear(KEYSTONE_SERVER, url);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the username for openstack.
|
|
||||||
*
|
|
||||||
* @param username user name for openstack
|
|
||||||
* @return itself
|
|
||||||
*/
|
|
||||||
public BasicElementConfig userName(String username) {
|
|
||||||
return (BasicElementConfig) setOrClear(USER_NAME, username);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the password for openstack.
|
|
||||||
*
|
|
||||||
* @param password password for openstack
|
|
||||||
* @return itself
|
|
||||||
*/
|
|
||||||
public BasicElementConfig password(String password) {
|
|
||||||
return (BasicElementConfig) setOrClear(PASSWORD, password);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,131 +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.openstackinterface;
|
|
||||||
|
|
||||||
import org.onlab.packet.Ip4Address;
|
|
||||||
import org.onosproject.net.Port;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handles port management REST API from Openstack for VMs.
|
|
||||||
*/
|
|
||||||
public interface OpenstackInterfaceService {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns port information list for the network ID given.
|
|
||||||
*
|
|
||||||
* @param networkId Network ID of the ports
|
|
||||||
* @return port information list
|
|
||||||
*/
|
|
||||||
Collection<OpenstackPort> ports(String networkId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns port information list.
|
|
||||||
*
|
|
||||||
* @return port information list
|
|
||||||
*/
|
|
||||||
Collection<OpenstackPort> ports();
|
|
||||||
/**
|
|
||||||
* Returns port information for the port given.
|
|
||||||
*
|
|
||||||
* @param port port reference
|
|
||||||
* @return port information
|
|
||||||
*/
|
|
||||||
OpenstackPort port(Port port);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns port information for the port ID given.
|
|
||||||
*
|
|
||||||
* @param portId port id
|
|
||||||
* @return port information
|
|
||||||
*/
|
|
||||||
OpenstackPort port(String portId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns network information list for the network ID given.
|
|
||||||
*
|
|
||||||
* @param networkId network id
|
|
||||||
* @return network information, or null if not present
|
|
||||||
*/
|
|
||||||
OpenstackNetwork network(String networkId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the information of all openstack networks.
|
|
||||||
*
|
|
||||||
* @return collection of network information
|
|
||||||
*/
|
|
||||||
Collection<OpenstackNetwork> networks();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns subnet information for the subnet ID give.
|
|
||||||
*
|
|
||||||
* @param subnetId subnet id
|
|
||||||
* @return subnet information, or null if not present
|
|
||||||
*/
|
|
||||||
OpenstackSubnet subnet(String subnetId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns collection of openstack subnet information.
|
|
||||||
*
|
|
||||||
* @return collection of openststack subnet information
|
|
||||||
*/
|
|
||||||
Collection<OpenstackSubnet> subnets();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the router information list.
|
|
||||||
*
|
|
||||||
* @return router information list
|
|
||||||
*/
|
|
||||||
Collection<OpenstackRouter> routers();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the router information for the router ID given.
|
|
||||||
*
|
|
||||||
* @param routerId router id
|
|
||||||
* @return router information
|
|
||||||
*/
|
|
||||||
OpenstackRouter router(String routerId);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns Security Group information of the security groupd id given.
|
|
||||||
*
|
|
||||||
* @param id security group id
|
|
||||||
* @return security group information
|
|
||||||
*/
|
|
||||||
OpenstackSecurityGroup securityGroup(String id);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns collection of OpenStack floating IP information.
|
|
||||||
*
|
|
||||||
* @return collection of OpenStack floating IP information
|
|
||||||
*/
|
|
||||||
Collection<OpenstackFloatingIP> floatingIps();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Updates a floating IP and its association with an internal port.
|
|
||||||
*
|
|
||||||
* @param id floating ip id
|
|
||||||
* @param portId port id
|
|
||||||
* @param fixedIpAddress fixed ip address of the port
|
|
||||||
* @return true if the update succeed
|
|
||||||
*/
|
|
||||||
boolean updateFloatingIp(String id, String portId, Optional<Ip4Address> fixedIpAddress);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,138 +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.openstackinterface;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents the network information given by Neutron.
|
|
||||||
*/
|
|
||||||
public final class OpenstackNetwork {
|
|
||||||
|
|
||||||
private String name;
|
|
||||||
private String tenantId;
|
|
||||||
private String segmentId;
|
|
||||||
private String id;
|
|
||||||
private NetworkType networkType;
|
|
||||||
private Collection<OpenstackSubnet> subnets;
|
|
||||||
|
|
||||||
public enum NetworkType {
|
|
||||||
/**
|
|
||||||
* Currently only VXLAN moded is supported.
|
|
||||||
*/
|
|
||||||
VXLAN
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the builder object of the OpenstackNetwork class.
|
|
||||||
*
|
|
||||||
* @return OpenstackNetwork builder object
|
|
||||||
*/
|
|
||||||
public static OpenstackNetwork.Builder builder() {
|
|
||||||
return new Builder();
|
|
||||||
}
|
|
||||||
|
|
||||||
private OpenstackNetwork(String name, String tenantId, String id, String sid,
|
|
||||||
NetworkType type, Collection<OpenstackSubnet> subnets) {
|
|
||||||
this.name = checkNotNull(name);
|
|
||||||
this.tenantId = checkNotNull(tenantId);
|
|
||||||
this.segmentId = checkNotNull(sid);
|
|
||||||
this.id = checkNotNull(id);
|
|
||||||
this.networkType = type;
|
|
||||||
this.subnets = subnets;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String name() {
|
|
||||||
return this.name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String tenantId() {
|
|
||||||
return this.tenantId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String id() {
|
|
||||||
return this.id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String segmentId() {
|
|
||||||
return this.segmentId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public NetworkType networkType() {
|
|
||||||
return this.networkType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Collection<OpenstackSubnet> subnets() {
|
|
||||||
return this.subnets;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Object clone() throws CloneNotSupportedException {
|
|
||||||
return super.clone();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final class Builder {
|
|
||||||
private String name;
|
|
||||||
private String tenantId;
|
|
||||||
private String id;
|
|
||||||
private String sid;
|
|
||||||
private NetworkType networkType;
|
|
||||||
private Collection<OpenstackSubnet> subnets;
|
|
||||||
|
|
||||||
public Builder name(String name) {
|
|
||||||
this.name = name;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Builder tenantId(String tenantId) {
|
|
||||||
this.tenantId = tenantId;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Builder id(String id) {
|
|
||||||
this.id = id;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Builder segmentId(String sid) {
|
|
||||||
this.sid = sid;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Builder networkType(NetworkType type) {
|
|
||||||
this.networkType = type;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Builder subnets(Collection<OpenstackSubnet> subnets) {
|
|
||||||
this.subnets = subnets;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public OpenstackNetwork build() {
|
|
||||||
return new OpenstackNetwork(name, tenantId, id, sid, networkType, subnets);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,361 +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.openstackinterface;
|
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
|
||||||
import com.google.common.collect.Maps;
|
|
||||||
import org.onlab.packet.Ip4Address;
|
|
||||||
import org.onlab.packet.IpAddress;
|
|
||||||
import org.onlab.packet.MacAddress;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* It represents the Openstack Port information.
|
|
||||||
*/
|
|
||||||
public final class OpenstackPort {
|
|
||||||
|
|
||||||
public enum PortStatus {
|
|
||||||
UP,
|
|
||||||
DOWN,
|
|
||||||
ACTIVE,
|
|
||||||
NA,
|
|
||||||
}
|
|
||||||
|
|
||||||
private PortStatus status;
|
|
||||||
private String name;
|
|
||||||
private ImmutableMap<IpAddress, MacAddress> allowedAddressPairs;
|
|
||||||
private boolean adminStateUp;
|
|
||||||
private String networkId;
|
|
||||||
private String tenantId;
|
|
||||||
private String deviceOwner;
|
|
||||||
private MacAddress macAddress;
|
|
||||||
// <subnet id, ip address>
|
|
||||||
private ImmutableMap<String, Ip4Address> fixedIps;
|
|
||||||
private String id;
|
|
||||||
private Collection<String> securityGroups;
|
|
||||||
private String deviceId;
|
|
||||||
|
|
||||||
private OpenstackPort(PortStatus status, String name, Map<IpAddress, MacAddress> allowedAddressPairs,
|
|
||||||
boolean adminStateUp, String networkId, String tenantId,
|
|
||||||
String deviceOwner, MacAddress macAddress, Map<String, Ip4Address> fixedIps,
|
|
||||||
String id, Collection<String> securityGroups, String deviceId) {
|
|
||||||
this.status = status;
|
|
||||||
this.name = name;
|
|
||||||
this.allowedAddressPairs = checkNotNull(ImmutableMap.copyOf(allowedAddressPairs));
|
|
||||||
this.adminStateUp = adminStateUp;
|
|
||||||
this.networkId = checkNotNull(networkId);
|
|
||||||
this.tenantId = checkNotNull(tenantId);
|
|
||||||
this.deviceOwner = deviceOwner;
|
|
||||||
this.macAddress = checkNotNull(macAddress);
|
|
||||||
this.fixedIps = checkNotNull(ImmutableMap.copyOf(fixedIps));
|
|
||||||
this.id = checkNotNull(id);
|
|
||||||
this.securityGroups = securityGroups;
|
|
||||||
this.deviceId = deviceId;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns OpenstackPort builder object.
|
|
||||||
*
|
|
||||||
* @return OpenstackPort builder
|
|
||||||
*/
|
|
||||||
public static OpenstackPort.Builder builder() {
|
|
||||||
return new Builder();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns port status.
|
|
||||||
*
|
|
||||||
* @return port status
|
|
||||||
*/
|
|
||||||
public PortStatus status() {
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns port name.
|
|
||||||
*
|
|
||||||
* @return port name
|
|
||||||
*/
|
|
||||||
public String name() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns allowed address pairs.
|
|
||||||
*
|
|
||||||
* @return map of ip address and mac address, or empty map
|
|
||||||
*/
|
|
||||||
public Map<IpAddress, MacAddress> allowedAddressPairs() {
|
|
||||||
return allowedAddressPairs;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns whether admin state up or not.
|
|
||||||
*
|
|
||||||
* @return true if admin state up, false otherwise
|
|
||||||
*/
|
|
||||||
public boolean isAdminStateUp() {
|
|
||||||
return adminStateUp;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns network ID.
|
|
||||||
*
|
|
||||||
* @return network ID
|
|
||||||
*/
|
|
||||||
public String networkId() {
|
|
||||||
return networkId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns device owner.
|
|
||||||
*
|
|
||||||
* @return device owner
|
|
||||||
*/
|
|
||||||
public String deviceOwner() {
|
|
||||||
return deviceOwner;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns mac address.
|
|
||||||
*
|
|
||||||
* @return mac address
|
|
||||||
*/
|
|
||||||
public MacAddress macAddress() {
|
|
||||||
return macAddress;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the fixed IP information.
|
|
||||||
*
|
|
||||||
* @return fixed IP info
|
|
||||||
*/
|
|
||||||
public Map<String, Ip4Address> fixedIps() {
|
|
||||||
return fixedIps;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns port ID.
|
|
||||||
*
|
|
||||||
* @return port ID
|
|
||||||
*/
|
|
||||||
public String id() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns security group information.
|
|
||||||
*
|
|
||||||
* @return security group info
|
|
||||||
*/
|
|
||||||
public Collection<String> securityGroups() {
|
|
||||||
return securityGroups;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns device ID.
|
|
||||||
*
|
|
||||||
* @return device ID
|
|
||||||
*/
|
|
||||||
public String deviceId() {
|
|
||||||
return deviceId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* OpenstackPort Builder class.
|
|
||||||
*/
|
|
||||||
public static final class Builder {
|
|
||||||
|
|
||||||
private PortStatus status;
|
|
||||||
private String name;
|
|
||||||
private Map<IpAddress, MacAddress> allowedAddressPairs;
|
|
||||||
private boolean adminStateUp;
|
|
||||||
private String networkId;
|
|
||||||
private String tenantId;
|
|
||||||
private String deviceOwner;
|
|
||||||
private MacAddress macAddress;
|
|
||||||
// list of hash map <subnet id, ip address>
|
|
||||||
private Map<String, Ip4Address> fixedIps;
|
|
||||||
private String id;
|
|
||||||
private Collection<String> securityGroups;
|
|
||||||
private String deviceId;
|
|
||||||
|
|
||||||
Builder() {
|
|
||||||
fixedIps = Maps.newHashMap();
|
|
||||||
allowedAddressPairs = Maps.newHashMap();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets port status.
|
|
||||||
*
|
|
||||||
* @param status port status
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder portStatus(PortStatus status) {
|
|
||||||
this.status = status;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets port name.
|
|
||||||
*
|
|
||||||
* @param name port name
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder name(String name) {
|
|
||||||
this.name = name;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets allowed address pairs.
|
|
||||||
*
|
|
||||||
* @param addrPairs map of ip address and mac address
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder allowedAddressPairs(Map<IpAddress, MacAddress> addrPairs) {
|
|
||||||
this.allowedAddressPairs.putAll(addrPairs);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets whether admin state up or not.
|
|
||||||
*
|
|
||||||
* @param isAdminStateUp true if admin state is up, false otherwise
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder adminState(boolean isAdminStateUp) {
|
|
||||||
this.adminStateUp = isAdminStateUp;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets network ID.
|
|
||||||
*
|
|
||||||
* @param networkId network ID
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder netwrokId(String networkId) {
|
|
||||||
this.networkId = networkId;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets tenant ID.
|
|
||||||
*
|
|
||||||
* @param tenantId tenant ID
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder tenantId(String tenantId) {
|
|
||||||
this.tenantId = tenantId;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets device owner.
|
|
||||||
*
|
|
||||||
* @param owner device owner
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder deviceOwner(String owner) {
|
|
||||||
this.deviceOwner = owner;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets MAC address of the port.
|
|
||||||
*
|
|
||||||
* @param mac MAC address
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder macAddress(MacAddress mac) {
|
|
||||||
this.macAddress = mac;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets Fixed IP address information.
|
|
||||||
*
|
|
||||||
* @param fixedIpList Fixed IP info
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder fixedIps(Map<String, Ip4Address> fixedIpList) {
|
|
||||||
fixedIps.putAll(fixedIpList);
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets ID of the port.
|
|
||||||
*
|
|
||||||
* @param id ID of the port
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder id(String id) {
|
|
||||||
this.id = id;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets security group of the port.
|
|
||||||
*
|
|
||||||
* @param securityGroupList security group list of the port
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder securityGroup(Collection<String> securityGroupList) {
|
|
||||||
this.securityGroups = securityGroupList;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets device ID of the port.
|
|
||||||
*
|
|
||||||
* @param deviceId device ID
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder deviceId(String deviceId) {
|
|
||||||
this.deviceId = deviceId;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Builds an OpenstackPort object.
|
|
||||||
*
|
|
||||||
* @return OpenstackPort objecet
|
|
||||||
*/
|
|
||||||
public OpenstackPort build() {
|
|
||||||
return new OpenstackPort(status, name, allowedAddressPairs, adminStateUp,
|
|
||||||
networkId, tenantId, deviceOwner, macAddress, fixedIps,
|
|
||||||
id, securityGroups, deviceId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@ -1,219 +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.openstackinterface;
|
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An Openstack Neutron Router Model.
|
|
||||||
*/
|
|
||||||
public final class OpenstackRouter {
|
|
||||||
|
|
||||||
public enum RouterStatus {
|
|
||||||
UP,
|
|
||||||
DOWN,
|
|
||||||
ACTIVE,
|
|
||||||
}
|
|
||||||
|
|
||||||
private final String tenantId;
|
|
||||||
private final String id;
|
|
||||||
private final String name;
|
|
||||||
private RouterStatus status;
|
|
||||||
private boolean adminStateUp;
|
|
||||||
private OpenstackExternalGateway gatewayExternalInfo;
|
|
||||||
|
|
||||||
private OpenstackRouter(String id, String tenantId, String name, RouterStatus status,
|
|
||||||
boolean adminStateUp, OpenstackExternalGateway gatewayExternalInfo) {
|
|
||||||
this.id = id;
|
|
||||||
this.tenantId = tenantId;
|
|
||||||
this.name = name;
|
|
||||||
this.status = status;
|
|
||||||
this.adminStateUp = adminStateUp;
|
|
||||||
this.gatewayExternalInfo = gatewayExternalInfo;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns tenant ID.
|
|
||||||
*
|
|
||||||
* @return tenant ID
|
|
||||||
*/
|
|
||||||
public String tenantId() {
|
|
||||||
return tenantId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns router ID.
|
|
||||||
*
|
|
||||||
* @return router ID
|
|
||||||
*/
|
|
||||||
public String id() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns router name.
|
|
||||||
*
|
|
||||||
* @return router name
|
|
||||||
*/
|
|
||||||
public String name() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns router status.
|
|
||||||
*
|
|
||||||
* @return router stauts
|
|
||||||
*/
|
|
||||||
public RouterStatus status() {
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns whether admin state up or not.
|
|
||||||
*
|
|
||||||
* @return true if admin state up, false otherwise
|
|
||||||
*/
|
|
||||||
public boolean adminStateUp() {
|
|
||||||
return adminStateUp;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns external gateway information.
|
|
||||||
*
|
|
||||||
* @return external gateway information
|
|
||||||
*/
|
|
||||||
public OpenstackExternalGateway gatewayExternalInfo() {
|
|
||||||
return gatewayExternalInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if (this == o) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (o instanceof OpenstackRouter) {
|
|
||||||
OpenstackRouter that = (OpenstackRouter) o;
|
|
||||||
|
|
||||||
return this.adminStateUp == that.adminStateUp &&
|
|
||||||
this.gatewayExternalInfo.equals(that.gatewayExternalInfo) &&
|
|
||||||
this.id.equals(that.id) &&
|
|
||||||
this.name.equals(that.name) &&
|
|
||||||
this.status.equals(that.status) &&
|
|
||||||
this.tenantId.equals(that.tenantId);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return Objects.hash(adminStateUp, gatewayExternalInfo, id, name, status, tenantId);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An Openstack Router Builder class.
|
|
||||||
*/
|
|
||||||
public static final class Builder {
|
|
||||||
|
|
||||||
private String tenantId;
|
|
||||||
private String id;
|
|
||||||
private String name;
|
|
||||||
private RouterStatus status;
|
|
||||||
private Boolean adminStateUp;
|
|
||||||
private OpenstackExternalGateway gatewayExternalInfo;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets router ID.
|
|
||||||
*
|
|
||||||
* @param id router ID
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder id(String id) {
|
|
||||||
this.id = id;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets router name.
|
|
||||||
*
|
|
||||||
* @param name router name
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder name(String name) {
|
|
||||||
this.name = name;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets router status.
|
|
||||||
*
|
|
||||||
* @param status router status
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder status(RouterStatus status) {
|
|
||||||
this.status = status;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets tenant ID.
|
|
||||||
*
|
|
||||||
* @param tenantId Tenant ID
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder tenantId(String tenantId) {
|
|
||||||
this.tenantId = tenantId;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets whether admin state up or not.
|
|
||||||
*
|
|
||||||
* @param adminStateUp true if admin state is up, false otherwise
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder adminStateUp(boolean adminStateUp) {
|
|
||||||
this.adminStateUp = adminStateUp;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets external gateway information.
|
|
||||||
*
|
|
||||||
* @param gatewayExternalInfo external gateway information
|
|
||||||
* @return Builder object
|
|
||||||
*/
|
|
||||||
public Builder gatewayExternalInfo(OpenstackExternalGateway gatewayExternalInfo) {
|
|
||||||
this.gatewayExternalInfo = gatewayExternalInfo;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Builds an OpenstackRouter object.
|
|
||||||
*
|
|
||||||
* @return OpenstasckRouter object
|
|
||||||
*/
|
|
||||||
public OpenstackRouter build() {
|
|
||||||
return new OpenstackRouter(checkNotNull(id), checkNotNull(tenantId), name, checkNotNull(status),
|
|
||||||
checkNotNull(adminStateUp), gatewayExternalInfo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,170 +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.openstackinterface;
|
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An OpenStack Neutron router interface model.
|
|
||||||
*/
|
|
||||||
public final class OpenstackRouterInterface {
|
|
||||||
private final String id;
|
|
||||||
private final String tenantId;
|
|
||||||
private final String subnetId;
|
|
||||||
private final String portId;
|
|
||||||
|
|
||||||
private OpenstackRouterInterface(String id, String tenantId,
|
|
||||||
String subnetId, String portId) {
|
|
||||||
this.id = checkNotNull(id);
|
|
||||||
this.tenantId = checkNotNull(tenantId);
|
|
||||||
this.subnetId = checkNotNull(subnetId);
|
|
||||||
this.portId = checkNotNull(portId);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns router interface ID.
|
|
||||||
*
|
|
||||||
* @return router interface id
|
|
||||||
*/
|
|
||||||
public String id() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns tenant ID.
|
|
||||||
*
|
|
||||||
* @return tenant id
|
|
||||||
*/
|
|
||||||
public String tenantId() {
|
|
||||||
return tenantId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns subnet ID.
|
|
||||||
*
|
|
||||||
* @return subnet id
|
|
||||||
*/
|
|
||||||
public String subnetId() {
|
|
||||||
return subnetId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns port ID.
|
|
||||||
*
|
|
||||||
* @return port id
|
|
||||||
*/
|
|
||||||
public String portId() {
|
|
||||||
return portId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if (this == o) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (o instanceof OpenstackRouterInterface) {
|
|
||||||
OpenstackRouterInterface that = (OpenstackRouterInterface) o;
|
|
||||||
|
|
||||||
return this.id.equals(that.id) &&
|
|
||||||
this.portId.equals(that.portId) &&
|
|
||||||
this.subnetId.equals(that.subnetId) &&
|
|
||||||
this.tenantId.equals(that.tenantId);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return Objects.hash(id, portId, subnetId, tenantId);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns OpenStack router interface builder.
|
|
||||||
*
|
|
||||||
* @return openstack router interface builder
|
|
||||||
*/
|
|
||||||
public static Builder builder() {
|
|
||||||
return new Builder();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An OpenStack Router interface builder class.
|
|
||||||
*/
|
|
||||||
public static final class Builder {
|
|
||||||
private String id;
|
|
||||||
private String tenantId;
|
|
||||||
private String subnetId;
|
|
||||||
private String portId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets router interface ID.
|
|
||||||
*
|
|
||||||
* @param id router interface id
|
|
||||||
* @return builder object
|
|
||||||
*/
|
|
||||||
public Builder id(String id) {
|
|
||||||
this.id = id;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets tenant ID.
|
|
||||||
*
|
|
||||||
* @param tenantId tenant ID
|
|
||||||
* @return builder object
|
|
||||||
*/
|
|
||||||
public Builder tenantId(String tenantId) {
|
|
||||||
this.tenantId = tenantId;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets subnet ID.
|
|
||||||
*
|
|
||||||
* @param subnetId subnet ID
|
|
||||||
* @return builder object
|
|
||||||
*/
|
|
||||||
public Builder subnetId(String subnetId) {
|
|
||||||
this.subnetId = subnetId;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets port ID.
|
|
||||||
*
|
|
||||||
* @param portId port ID
|
|
||||||
* @return builder object
|
|
||||||
*/
|
|
||||||
public Builder portId(String portId) {
|
|
||||||
this.portId = portId;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Builds an OpenStack router interface object.
|
|
||||||
*
|
|
||||||
* @return openstack router interface object
|
|
||||||
*/
|
|
||||||
public OpenstackRouterInterface build() {
|
|
||||||
return new OpenstackRouterInterface(checkNotNull(id), checkNotNull(tenantId),
|
|
||||||
checkNotNull(subnetId), checkNotNull(portId));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,207 +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.openstackinterface;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents Openstack Security Group information.
|
|
||||||
*/
|
|
||||||
public final class OpenstackSecurityGroup {
|
|
||||||
|
|
||||||
private String description;
|
|
||||||
private String id;
|
|
||||||
private String name;
|
|
||||||
private Collection<OpenstackSecurityGroupRule> rules;
|
|
||||||
private String tenantId;
|
|
||||||
|
|
||||||
private OpenstackSecurityGroup(String description, String id, String name,
|
|
||||||
Collection<OpenstackSecurityGroupRule> rules,
|
|
||||||
String tenantId) {
|
|
||||||
this.description = description;
|
|
||||||
this.id = id;
|
|
||||||
this.name = name;
|
|
||||||
this.tenantId = tenantId;
|
|
||||||
this.rules = rules;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the description of the security group.
|
|
||||||
*
|
|
||||||
* @return description
|
|
||||||
*/
|
|
||||||
public String description() {
|
|
||||||
return this.description;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns ID of the security group.
|
|
||||||
*
|
|
||||||
* @return ID
|
|
||||||
*/
|
|
||||||
public String id() {
|
|
||||||
return this.id;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the name of the security group.
|
|
||||||
*
|
|
||||||
* @return name
|
|
||||||
*/
|
|
||||||
public String name() {
|
|
||||||
return this.name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the list of the security group rules.
|
|
||||||
*
|
|
||||||
* @return Collection of OpenstackSecurityGroupRule objects
|
|
||||||
*/
|
|
||||||
public Collection<OpenstackSecurityGroupRule> rules() {
|
|
||||||
return Collections.unmodifiableCollection(rules);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the Tenant ID.
|
|
||||||
*
|
|
||||||
* @return tenant ID
|
|
||||||
*/
|
|
||||||
public String tenantId() {
|
|
||||||
return this.tenantId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
StringBuilder sbuilder = new StringBuilder("Security Group :")
|
|
||||||
.append(description + ",")
|
|
||||||
.append(id + ",")
|
|
||||||
.append(name + ",");
|
|
||||||
rules.forEach(rule -> sbuilder.append(rule.toString()));
|
|
||||||
sbuilder.append(tenantId);
|
|
||||||
|
|
||||||
return sbuilder.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if (this == o) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (o instanceof OpenstackSecurityGroup) {
|
|
||||||
OpenstackSecurityGroup that = (OpenstackSecurityGroup) o;
|
|
||||||
|
|
||||||
return this.description.equals(that.description) &&
|
|
||||||
this.tenantId.equals(that.tenantId) &&
|
|
||||||
this.id.equals(that.id) &&
|
|
||||||
this.name.equals(that.name) &&
|
|
||||||
this.rules.containsAll(that.rules);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return Objects.hash(description, tenantId, id, name, rules);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the SecurityGroupRule builder object.
|
|
||||||
*
|
|
||||||
* @return builder object
|
|
||||||
*/
|
|
||||||
public static Builder builder() {
|
|
||||||
return new Builder();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents the builder of the SecurityGroupRule.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public static final class Builder {
|
|
||||||
private String description;
|
|
||||||
private String id;
|
|
||||||
private String name;
|
|
||||||
private Collection<OpenstackSecurityGroupRule> rules;
|
|
||||||
private String tenantId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the description of the security group.
|
|
||||||
*
|
|
||||||
* @param description description
|
|
||||||
* @return builder object
|
|
||||||
*/
|
|
||||||
public Builder description(String description) {
|
|
||||||
this.description = description;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the ID of the security group.
|
|
||||||
*
|
|
||||||
* @param id ID
|
|
||||||
* @return builder object
|
|
||||||
*/
|
|
||||||
public Builder id(String id) {
|
|
||||||
this.id = id;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the name of the security group.
|
|
||||||
*
|
|
||||||
* @param name name
|
|
||||||
* @return builder object
|
|
||||||
*/
|
|
||||||
public Builder name(String name) {
|
|
||||||
this.name = name;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets Security Group rules.
|
|
||||||
*
|
|
||||||
* @param rules security group rules
|
|
||||||
* @return builder object
|
|
||||||
*/
|
|
||||||
public Builder rules(Collection<OpenstackSecurityGroupRule> rules) {
|
|
||||||
this.rules = rules;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the tenant ID of the security group.
|
|
||||||
*
|
|
||||||
* @param tenantId tenant ID
|
|
||||||
* @return builder object
|
|
||||||
*/
|
|
||||||
public Builder tenantId(String tenantId) {
|
|
||||||
this.tenantId = tenantId;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates the OpenstackSecurityGroup object.
|
|
||||||
*
|
|
||||||
* @return OpenstackSecurityGroup object
|
|
||||||
*/
|
|
||||||
public OpenstackSecurityGroup build() {
|
|
||||||
return new OpenstackSecurityGroup(description, id, name, rules, tenantId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,360 +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.openstackinterface;
|
|
||||||
|
|
||||||
import org.onlab.packet.IpPrefix;
|
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents Openstack Security Group Rules.
|
|
||||||
*/
|
|
||||||
public final class OpenstackSecurityGroupRule {
|
|
||||||
|
|
||||||
private final Direction direction;
|
|
||||||
private final String ethertype;
|
|
||||||
private final String id;
|
|
||||||
private final int portRangeMax;
|
|
||||||
private final int portRangeMin;
|
|
||||||
private final String protocol;
|
|
||||||
private final String remoteGroupId;
|
|
||||||
private final IpPrefix remoteIpPrefix;
|
|
||||||
private final String secuityGroupId;
|
|
||||||
private final String tenantId;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Direction of the Security Group.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public enum Direction {
|
|
||||||
INGRESS,
|
|
||||||
EGRESS
|
|
||||||
}
|
|
||||||
|
|
||||||
private OpenstackSecurityGroupRule(Direction direction,
|
|
||||||
String ethertype,
|
|
||||||
String id,
|
|
||||||
int portRangeMax,
|
|
||||||
int portRangeMin,
|
|
||||||
String protocol,
|
|
||||||
String remoteGroupId,
|
|
||||||
IpPrefix remoteIpPrefix,
|
|
||||||
String securityGroupId,
|
|
||||||
String tenantId) {
|
|
||||||
this.direction = direction;
|
|
||||||
this.ethertype = ethertype;
|
|
||||||
this.id = checkNotNull(id);
|
|
||||||
this.portRangeMax = portRangeMax;
|
|
||||||
this.portRangeMin = portRangeMin;
|
|
||||||
this.protocol = protocol;
|
|
||||||
this.remoteGroupId = remoteGroupId;
|
|
||||||
this.remoteIpPrefix = remoteIpPrefix;
|
|
||||||
this.secuityGroupId = securityGroupId;
|
|
||||||
this.tenantId = tenantId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the builder object for the OpenstackSecurityGroupRule.
|
|
||||||
*
|
|
||||||
* @return OpenstackSecurityGroupRule builder object
|
|
||||||
*/
|
|
||||||
public static OpenstackSecurityGroupRule.Builder builder() {
|
|
||||||
return new Builder();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the direction.
|
|
||||||
*
|
|
||||||
* @return direction
|
|
||||||
*/
|
|
||||||
public Direction direction() {
|
|
||||||
return direction;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the Ethernet type.
|
|
||||||
*
|
|
||||||
* @return Ethernet type
|
|
||||||
*/
|
|
||||||
public String ethertype() {
|
|
||||||
return ethertype;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the Security Group ID.
|
|
||||||
*
|
|
||||||
* @return Security Group ID
|
|
||||||
*/
|
|
||||||
public String id() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the max of the port range.
|
|
||||||
*
|
|
||||||
* @return max of the port range
|
|
||||||
*/
|
|
||||||
public int portRangeMax() {
|
|
||||||
return portRangeMax;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the min of the port range.
|
|
||||||
*
|
|
||||||
* @return min of the port range
|
|
||||||
*/
|
|
||||||
public int portRangeMin() {
|
|
||||||
return portRangeMin;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the IP protocol.
|
|
||||||
*
|
|
||||||
* @return IP protocol
|
|
||||||
*/
|
|
||||||
public String protocol() {
|
|
||||||
return protocol;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the remote group ID.
|
|
||||||
*
|
|
||||||
* @return remote group ID
|
|
||||||
*/
|
|
||||||
public String remoteGroupId() {
|
|
||||||
return remoteGroupId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the remote IP address.
|
|
||||||
*
|
|
||||||
* @return remote IP address
|
|
||||||
*/
|
|
||||||
public IpPrefix remoteIpPrefix() {
|
|
||||||
return this.remoteIpPrefix;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the Security Group ID.
|
|
||||||
*
|
|
||||||
* @return security group ID
|
|
||||||
*/
|
|
||||||
public String secuityGroupId() {
|
|
||||||
return secuityGroupId;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the tenant ID.
|
|
||||||
*
|
|
||||||
* @return tenant ID
|
|
||||||
*/
|
|
||||||
public String tenantId() {
|
|
||||||
return tenantId;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return new StringBuilder(" [")
|
|
||||||
.append(direction + ",")
|
|
||||||
.append(ethertype + ",")
|
|
||||||
.append(id + ",")
|
|
||||||
.append(portRangeMax + ",")
|
|
||||||
.append(portRangeMin + ",")
|
|
||||||
.append(protocol + ",'")
|
|
||||||
.append(remoteGroupId + ",")
|
|
||||||
.append(remoteIpPrefix + ",")
|
|
||||||
.append(secuityGroupId + ",")
|
|
||||||
.append(tenantId + "] ")
|
|
||||||
.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if (this == o) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (o instanceof OpenstackSecurityGroupRule) {
|
|
||||||
OpenstackSecurityGroupRule that = (OpenstackSecurityGroupRule) o;
|
|
||||||
return this.direction.equals(that.direction) &&
|
|
||||||
this.ethertype.equals(that.ethertype) &&
|
|
||||||
this.id.equals(that.id) &&
|
|
||||||
this.portRangeMax == that.portRangeMax &&
|
|
||||||
this.portRangeMin == that.portRangeMin &&
|
|
||||||
this.protocol.equals(that.protocol) &&
|
|
||||||
this.remoteGroupId.equals(that.remoteGroupId) &&
|
|
||||||
this.secuityGroupId.equals(that.secuityGroupId) &&
|
|
||||||
this.remoteIpPrefix.equals(that.remoteIpPrefix) &&
|
|
||||||
this.tenantId.equals(that.tenantId);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return Objects.hash(direction, ethertype, id, portRangeMax, portRangeMin, protocol,
|
|
||||||
remoteGroupId, remoteIpPrefix, secuityGroupId, tenantId);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a security group rule builder object.
|
|
||||||
*/
|
|
||||||
public static final class Builder {
|
|
||||||
|
|
||||||
private String direction;
|
|
||||||
private String etherType;
|
|
||||||
private String id;
|
|
||||||
private String portRangeMax;
|
|
||||||
private String portRangeMin;
|
|
||||||
private String protocol;
|
|
||||||
private String remoteGroupId;
|
|
||||||
private String remoteIpPrefix;
|
|
||||||
private String secuityGroupId;
|
|
||||||
private String tenantId;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the direction of the security group rule.
|
|
||||||
*
|
|
||||||
* @param direction direction (ingress or egress)
|
|
||||||
* @return builder object
|
|
||||||
*/
|
|
||||||
public Builder direction(String direction) {
|
|
||||||
this.direction = direction;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the Ethernet Type.
|
|
||||||
*
|
|
||||||
* @param etherType Ethernet Type
|
|
||||||
* @return builder object
|
|
||||||
*/
|
|
||||||
public Builder etherType(String etherType) {
|
|
||||||
this.etherType = etherType;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the Security Group Rule ID.
|
|
||||||
*
|
|
||||||
* @param id security group rule ID
|
|
||||||
* @return builder object
|
|
||||||
*/
|
|
||||||
public Builder id(String id) {
|
|
||||||
this.id = id;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the port range max value.
|
|
||||||
*
|
|
||||||
* @param portRangeMax port range max value
|
|
||||||
* @return builder object
|
|
||||||
*/
|
|
||||||
public Builder portRangeMax(String portRangeMax) {
|
|
||||||
this.portRangeMax = portRangeMax;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the port range min value.
|
|
||||||
*
|
|
||||||
* @param portRangeMin port range min value
|
|
||||||
* @return builder object
|
|
||||||
*/
|
|
||||||
public Builder portRangeMin(String portRangeMin) {
|
|
||||||
this.portRangeMin = portRangeMin;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the protocol.
|
|
||||||
*
|
|
||||||
* @param protocol protocol
|
|
||||||
* @return builder object
|
|
||||||
*/
|
|
||||||
public Builder protocol(String protocol) {
|
|
||||||
this.protocol = protocol;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the remote security group ID.
|
|
||||||
*
|
|
||||||
* @param remoteGroupId remote security group ID
|
|
||||||
* @return builder
|
|
||||||
*/
|
|
||||||
public Builder remoteGroupId(String remoteGroupId) {
|
|
||||||
this.remoteGroupId = remoteGroupId;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the remote IP address as prefix.
|
|
||||||
*
|
|
||||||
* @param remoteIpPrefix remote IP address
|
|
||||||
* @return builder object
|
|
||||||
*/
|
|
||||||
public Builder remoteIpPrefix(String remoteIpPrefix) {
|
|
||||||
this.remoteIpPrefix = remoteIpPrefix;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the Security Group ID.
|
|
||||||
*
|
|
||||||
* @param securityGroupId security group ID
|
|
||||||
* @return builder object
|
|
||||||
*/
|
|
||||||
public Builder securityGroupId(String securityGroupId) {
|
|
||||||
this.secuityGroupId = securityGroupId;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the tenant ID.
|
|
||||||
*
|
|
||||||
* @param tenantId tenant ID
|
|
||||||
* @return builder object
|
|
||||||
*/
|
|
||||||
public Builder tenantId(String tenantId) {
|
|
||||||
this.tenantId = tenantId;
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a OpenstackSecurityGroupRule instance.
|
|
||||||
*
|
|
||||||
* @return OpenstackSecurityGroupRule object
|
|
||||||
*/
|
|
||||||
public OpenstackSecurityGroupRule build() {
|
|
||||||
|
|
||||||
int portRangeMinInt = (portRangeMin == null || portRangeMin.equals("null")) ?
|
|
||||||
-1 : Integer.parseInt(portRangeMin);
|
|
||||||
int portRangeMaxInt = (portRangeMax == null || portRangeMax.equals("null")) ?
|
|
||||||
-1 : Integer.parseInt(portRangeMax);
|
|
||||||
IpPrefix ipPrefix = (remoteIpPrefix == null || remoteIpPrefix.equals("null")) ?
|
|
||||||
null : IpPrefix.valueOf(remoteIpPrefix);
|
|
||||||
|
|
||||||
return new OpenstackSecurityGroupRule(Direction.valueOf(direction.toUpperCase()), etherType, id,
|
|
||||||
portRangeMaxInt, portRangeMinInt, protocol, remoteGroupId, ipPrefix, secuityGroupId, tenantId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,176 +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.openstackinterface;
|
|
||||||
|
|
||||||
import org.onlab.packet.Ip4Address;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents the subnet information given by Neutron.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public final class OpenstackSubnet {
|
|
||||||
private String name;
|
|
||||||
private boolean enableHhcp;
|
|
||||||
private String networkId;
|
|
||||||
private String tenantId;
|
|
||||||
private List<Ip4Address> dnsNameservers;
|
|
||||||
private String gatewayIp;
|
|
||||||
private String cidr;
|
|
||||||
private String id;
|
|
||||||
private Collection<String> securityGroups;
|
|
||||||
|
|
||||||
private OpenstackSubnet(String name, boolean enableHhcp, String networkId,
|
|
||||||
String tenantId, List<Ip4Address> dnsNameservers, String gatewayIp,
|
|
||||||
String cidr, String id, Collection<String> securityGroups) {
|
|
||||||
this.name = name;
|
|
||||||
this.enableHhcp = enableHhcp;
|
|
||||||
this.networkId = checkNotNull(networkId);
|
|
||||||
this.tenantId = checkNotNull(tenantId);
|
|
||||||
this.dnsNameservers = dnsNameservers;
|
|
||||||
this.gatewayIp = gatewayIp;
|
|
||||||
this.cidr = checkNotNull(cidr);
|
|
||||||
this.id = checkNotNull(id);
|
|
||||||
this.securityGroups = securityGroups;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns OpenstackSubnet builder object.
|
|
||||||
*
|
|
||||||
* @return OpenstackSubnet builder
|
|
||||||
*/
|
|
||||||
public static OpenstackSubnet.Builder builder() {
|
|
||||||
return new Builder();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String name() {
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean enableHhcp() {
|
|
||||||
return enableHhcp;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String networkId() {
|
|
||||||
return networkId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String tenantId() {
|
|
||||||
return tenantId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Ip4Address> dnsNameservers() {
|
|
||||||
return dnsNameservers;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String gatewayIp() {
|
|
||||||
return gatewayIp;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String cidr() {
|
|
||||||
return cidr;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String id() {
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Collection<String> securityGroups() {
|
|
||||||
return Collections.unmodifiableCollection(this.securityGroups);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* OpenstackSubnet Builder class.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public static final class Builder {
|
|
||||||
private String name;
|
|
||||||
private boolean enableDhcp;
|
|
||||||
private String networkId;
|
|
||||||
private String tenantId;
|
|
||||||
private List<Ip4Address> dnsNameservers;
|
|
||||||
private String gatewayIp;
|
|
||||||
private String cidr;
|
|
||||||
private String id;
|
|
||||||
private Collection<String> securityGroups;
|
|
||||||
|
|
||||||
Builder() {}
|
|
||||||
|
|
||||||
public Builder setName(String name) {
|
|
||||||
this.name = name;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Builder setEnableDhcp(boolean enableDhcp) {
|
|
||||||
this.enableDhcp = enableDhcp;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Builder setNetworkId(String networkId) {
|
|
||||||
this.networkId = networkId;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Builder setTenantId(String tenantId) {
|
|
||||||
this.tenantId = tenantId;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Builder setDnsNameservers(List<Ip4Address> dnsNameservers) {
|
|
||||||
this.dnsNameservers = dnsNameservers;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Builder setGatewayIp(String gatewayIp) {
|
|
||||||
this.gatewayIp = gatewayIp;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Builder setCidr(String cidr) {
|
|
||||||
this.cidr = cidr;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Builder setId(String id) {
|
|
||||||
this.id = id;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Builder securityGroups(Collection<String> securityGroups) {
|
|
||||||
this.securityGroups = securityGroups;
|
|
||||||
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public OpenstackSubnet build() {
|
|
||||||
return new OpenstackSubnet(name, enableDhcp, networkId, tenantId,
|
|
||||||
dnsNameservers, gatewayIp, cidr, id, securityGroups);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,20 +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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Application that handles OpenStack Neutron REST calls.
|
|
||||||
*/
|
|
||||||
package org.onosproject.openstackinterface;
|
|
||||||
@ -1,11 +0,0 @@
|
|||||||
COMPILE_DEPS = [
|
|
||||||
'//lib:CORE_DEPS',
|
|
||||||
'//lib:jersey-client',
|
|
||||||
'//lib:javax.ws.rs-api',
|
|
||||||
'//apps/openstackinterface/api:onos-apps-openstackinterface-api',
|
|
||||||
]
|
|
||||||
|
|
||||||
osgi_jar_with_tests (
|
|
||||||
deps = COMPILE_DEPS,
|
|
||||||
)
|
|
||||||
|
|
||||||
@ -1,24 +0,0 @@
|
|||||||
<?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.
|
|
||||||
-->
|
|
||||||
<app name="org.onosproject.openstackinterface" origin="ON.Lab" version="${project.version}"
|
|
||||||
category="Utility" url="http://onosproject.org" title="OpenStack Interface App"
|
|
||||||
featuresRepo="mvn:${project.groupId}/${project.artifactId}/${project.version}/xml/features"
|
|
||||||
features="${project.artifactId}">
|
|
||||||
<description>${project.description}</description>
|
|
||||||
<artifact>mvn:${project.groupId}/onos-app-openstackinterface-api/${project.version}</artifact>
|
|
||||||
<artifact>mvn:${project.groupId}/onos-app-openstackinterface-app/${project.version}</artifact>
|
|
||||||
</app>
|
|
||||||
@ -1,24 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
|
||||||
<!--
|
|
||||||
~ 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.
|
|
||||||
-->
|
|
||||||
<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="${project.artifactId}-${project.version}">
|
|
||||||
<feature name="${project.artifactId}" version="${project.version}"
|
|
||||||
description="${project.description}">
|
|
||||||
<feature>onos-api</feature>
|
|
||||||
<bundle>mvn:${project.groupId}/onos-app-openstackinterface-api/${project.version}</bundle>
|
|
||||||
<bundle>mvn:${project.groupId}/onos-app-openstackinterface-app/${project.version}</bundle>
|
|
||||||
</feature>
|
|
||||||
</features>
|
|
||||||
@ -1,92 +0,0 @@
|
|||||||
<?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/maven-v4_0_0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
|
||||||
|
|
||||||
<parent>
|
|
||||||
<groupId>org.onosproject</groupId>
|
|
||||||
<artifactId>onos-app-openstackinterface</artifactId>
|
|
||||||
<version>1.10.0-SNAPSHOT</version>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<artifactId>onos-app-openstackinterface-app</artifactId>
|
|
||||||
<packaging>bundle</packaging>
|
|
||||||
|
|
||||||
<description>Openstack Interface Application</description>
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
<onos.app.readme>Openstack Interface Application.</onos.app.readme>
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.onosproject</groupId>
|
|
||||||
<artifactId>onos-app-openstackinterface-api</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.onosproject</groupId>
|
|
||||||
<artifactId>onos-rest</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.onosproject</groupId>
|
|
||||||
<artifactId>onlab-rest</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.glassfish.jersey.containers</groupId>
|
|
||||||
<artifactId>jersey-container-servlet</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.osgi</groupId>
|
|
||||||
<artifactId>org.osgi.compendium</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.osgi</groupId>
|
|
||||||
<artifactId>org.osgi.core</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.onosproject</groupId>
|
|
||||||
<artifactId>onos-app-dhcp-api</artifactId>
|
|
||||||
<version>${project.version}</version>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.glassfish.jersey.core</groupId>
|
|
||||||
<artifactId>jersey-client</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.onosproject</groupId>
|
|
||||||
<artifactId>onlab-misc</artifactId>
|
|
||||||
</dependency>
|
|
||||||
<dependency>
|
|
||||||
<groupId>commons-io</groupId>
|
|
||||||
<artifactId>commons-io</artifactId>
|
|
||||||
<version>2.4</version>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
|
||||||
</project>
|
|
||||||
@ -1,582 +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.openstackinterface.impl;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
||||||
import com.fasterxml.jackson.databind.node.ArrayNode;
|
|
||||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
||||||
import com.google.common.base.Strings;
|
|
||||||
import com.google.common.collect.ImmutableSet;
|
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
import org.apache.commons.io.IOUtils;
|
|
||||||
import org.apache.felix.scr.annotations.Activate;
|
|
||||||
import org.apache.felix.scr.annotations.Component;
|
|
||||||
import org.apache.felix.scr.annotations.Deactivate;
|
|
||||||
import org.apache.felix.scr.annotations.Reference;
|
|
||||||
import org.apache.felix.scr.annotations.ReferenceCardinality;
|
|
||||||
import org.apache.felix.scr.annotations.Service;
|
|
||||||
import org.glassfish.jersey.client.ClientProperties;
|
|
||||||
import org.onlab.packet.Ip4Address;
|
|
||||||
import org.onosproject.core.ApplicationId;
|
|
||||||
import org.onosproject.core.CoreService;
|
|
||||||
import org.onosproject.net.Port;
|
|
||||||
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.openstackinterface.OpenstackFloatingIP;
|
|
||||||
import org.onosproject.openstackinterface.OpenstackInterfaceService;
|
|
||||||
import org.onosproject.openstackinterface.OpenstackNetwork;
|
|
||||||
import org.onosproject.openstackinterface.OpenstackInterfaceConfig;
|
|
||||||
import org.onosproject.openstackinterface.OpenstackPort;
|
|
||||||
import org.onosproject.openstackinterface.OpenstackRouter;
|
|
||||||
import org.onosproject.openstackinterface.OpenstackSecurityGroup;
|
|
||||||
import org.onosproject.openstackinterface.OpenstackSubnet;
|
|
||||||
import org.onosproject.openstackinterface.web.OpenstackFloatingIpCodec;
|
|
||||||
import org.onosproject.openstackinterface.web.OpenstackNetworkCodec;
|
|
||||||
import org.onosproject.openstackinterface.web.OpenstackPortCodec;
|
|
||||||
import org.onosproject.openstackinterface.web.OpenstackRouterCodec;
|
|
||||||
import org.onosproject.openstackinterface.web.OpenstackSecurityGroupCodec;
|
|
||||||
import org.onosproject.openstackinterface.web.OpenstackSubnetCodec;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
|
|
||||||
import javax.ws.rs.client.Client;
|
|
||||||
import javax.ws.rs.client.ClientBuilder;
|
|
||||||
import javax.ws.rs.client.Entity;
|
|
||||||
import javax.ws.rs.client.Invocation;
|
|
||||||
import javax.ws.rs.client.WebTarget;
|
|
||||||
import javax.ws.rs.core.MediaType;
|
|
||||||
import javax.ws.rs.core.Response;
|
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.text.ParseException;
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.ExecutorService;
|
|
||||||
import java.util.concurrent.Executors;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
|
||||||
import static com.google.common.net.MediaType.JSON_UTF_8;
|
|
||||||
import static org.onlab.util.Tools.groupedThreads;
|
|
||||||
import static org.onosproject.net.AnnotationKeys.PORT_NAME;
|
|
||||||
import static org.onosproject.net.config.basics.SubjectFactories.APP_SUBJECT_FACTORY;
|
|
||||||
import static org.slf4j.LoggerFactory.getLogger;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handles REST Calls to Openstack Neutron.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@Service
|
|
||||||
@Component(immediate = true)
|
|
||||||
public class OpenstackInterfaceManager implements OpenstackInterfaceService {
|
|
||||||
|
|
||||||
private static final String URI_NETWORKS = "networks";
|
|
||||||
private static final String URI_PORTS = "ports";
|
|
||||||
private static final String URI_SUBNETS = "subnets";
|
|
||||||
private static final String URI_SECURITY_GROUPS = "security-groups";
|
|
||||||
private static final String URI_FLOATINGIPS = "floatingips";
|
|
||||||
private static final String URI_TOKENS = "tokens";
|
|
||||||
private static final String FLOATINGIP = "floatingip";
|
|
||||||
private static final String PORT_ID = "port_id";
|
|
||||||
private static final String FIXED_IP_ADDRESS = "fixed_ip_address";
|
|
||||||
|
|
||||||
private static final String PATH_ROUTERS = "routers";
|
|
||||||
private static final String PATH_NETWORKS = "networks";
|
|
||||||
private static final String PATH_PORTS = "ports";
|
|
||||||
private static final String PATH_SUBNETS = "subnets";
|
|
||||||
private static final String PATH_FLOATINGIPS = "floatingips";
|
|
||||||
private static final String PATH_ACCESS = "access";
|
|
||||||
private static final String PATH_TOKEN = "token";
|
|
||||||
private static final String PATH_ID = "id";
|
|
||||||
private static final String PATH_EXPIRES = "expires";
|
|
||||||
|
|
||||||
private static final String HEADER_AUTH_TOKEN = "X-Auth-Token";
|
|
||||||
private static final String TOKEN_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'";
|
|
||||||
private static final int DEFAULT_TIMEOUT_MS = 2000;
|
|
||||||
|
|
||||||
private final Logger log = getLogger(getClass());
|
|
||||||
private final Client client = ClientBuilder.newClient();
|
|
||||||
|
|
||||||
private String neutronUrl;
|
|
||||||
private String keystoneUrl;
|
|
||||||
private String tokenId;
|
|
||||||
private String tokenExpires;
|
|
||||||
private String userName;
|
|
||||||
private String pass;
|
|
||||||
|
|
||||||
private ApplicationId appId;
|
|
||||||
|
|
||||||
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
|
|
||||||
protected CoreService coreService;
|
|
||||||
|
|
||||||
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
|
|
||||||
protected NetworkConfigRegistry cfgService;
|
|
||||||
|
|
||||||
private InternalConfigListener internalConfigListener = new InternalConfigListener();
|
|
||||||
private ExecutorService networkEventExcutorService =
|
|
||||||
Executors.newSingleThreadExecutor(groupedThreads("onos/openstackinterface", "config-event", log));
|
|
||||||
|
|
||||||
private final Set<ConfigFactory> factories = ImmutableSet.of(
|
|
||||||
new ConfigFactory<ApplicationId, OpenstackInterfaceConfig>(APP_SUBJECT_FACTORY,
|
|
||||||
OpenstackInterfaceConfig.class,
|
|
||||||
"openstackinterface") {
|
|
||||||
@Override
|
|
||||||
public OpenstackInterfaceConfig createConfig() {
|
|
||||||
return new OpenstackInterfaceConfig();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
@Activate
|
|
||||||
protected void activate() {
|
|
||||||
appId = coreService
|
|
||||||
.registerApplication("org.onosproject.openstackinterface");
|
|
||||||
|
|
||||||
factories.forEach(cfgService::registerConfigFactory);
|
|
||||||
cfgService.addListener(internalConfigListener);
|
|
||||||
|
|
||||||
client.property(ClientProperties.CONNECT_TIMEOUT, DEFAULT_TIMEOUT_MS);
|
|
||||||
client.property(ClientProperties.READ_TIMEOUT, DEFAULT_TIMEOUT_MS);
|
|
||||||
|
|
||||||
configureNetwork();
|
|
||||||
log.info("started");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Deactivate
|
|
||||||
protected void deactivate() {
|
|
||||||
cfgService.removeListener(internalConfigListener);
|
|
||||||
factories.forEach(cfgService::unregisterConfigFactory);
|
|
||||||
log.info("stopped");
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns network information stored in Neutron.
|
|
||||||
*
|
|
||||||
* @return List of OpenstackNetwork
|
|
||||||
*/
|
|
||||||
public Collection<OpenstackNetwork> getNetworks() {
|
|
||||||
Invocation.Builder builder = getClientBuilder(neutronUrl, URI_NETWORKS);
|
|
||||||
if (builder == null) {
|
|
||||||
log.warn("Failed to get networks");
|
|
||||||
return Collections.EMPTY_LIST;
|
|
||||||
}
|
|
||||||
|
|
||||||
String response = builder.accept(MediaType.APPLICATION_JSON_TYPE).
|
|
||||||
header(HEADER_AUTH_TOKEN, getToken()).get(String.class);
|
|
||||||
log.debug("networks response:" + response);
|
|
||||||
|
|
||||||
ObjectMapper mapper = new ObjectMapper();
|
|
||||||
List<OpenstackNetwork> openstackNetworks = Lists.newArrayList();
|
|
||||||
try {
|
|
||||||
ObjectNode node = (ObjectNode) mapper.readTree(response);
|
|
||||||
ArrayNode networkList = (ArrayNode) node.path(PATH_NETWORKS);
|
|
||||||
OpenstackNetworkCodec networkCodec = new OpenstackNetworkCodec();
|
|
||||||
networkList.forEach(n -> openstackNetworks.add(networkCodec.decode((ObjectNode) n, null)));
|
|
||||||
} catch (IOException e) {
|
|
||||||
log.warn("getNetworks()", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
openstackNetworks.removeAll(Collections.singleton(null));
|
|
||||||
openstackNetworks.forEach(n -> log.debug("network ID: {}", n.id()));
|
|
||||||
|
|
||||||
return openstackNetworks;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns port information stored in Neutron.
|
|
||||||
*
|
|
||||||
* @return List of OpenstackPort
|
|
||||||
*/
|
|
||||||
public Collection<OpenstackPort> getPorts() {
|
|
||||||
Invocation.Builder builder = getClientBuilder(neutronUrl, URI_PORTS);
|
|
||||||
if (builder == null) {
|
|
||||||
log.warn("Failed to get ports");
|
|
||||||
return Collections.EMPTY_LIST;
|
|
||||||
}
|
|
||||||
|
|
||||||
String response = builder.accept(MediaType.APPLICATION_JSON_TYPE).
|
|
||||||
header(HEADER_AUTH_TOKEN, getToken()).get(String.class);
|
|
||||||
|
|
||||||
ObjectMapper mapper = new ObjectMapper();
|
|
||||||
List<OpenstackPort> openstackPorts = Lists.newArrayList();
|
|
||||||
try {
|
|
||||||
ObjectNode node = (ObjectNode) mapper.readTree(response);
|
|
||||||
ArrayNode portList = (ArrayNode) node.path(PATH_PORTS);
|
|
||||||
OpenstackPortCodec portCodec = new OpenstackPortCodec();
|
|
||||||
portList.forEach(p -> openstackPorts.add(portCodec.decode((ObjectNode) p, null)));
|
|
||||||
} catch (IOException e) {
|
|
||||||
log.warn("getPorts()", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
log.debug("port response:" + response);
|
|
||||||
openstackPorts.forEach(n -> log.debug("port ID: {}", n.id()));
|
|
||||||
|
|
||||||
return openstackPorts;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Collection<OpenstackRouter> getRouters() {
|
|
||||||
Invocation.Builder builder = getClientBuilder(neutronUrl, PATH_ROUTERS);
|
|
||||||
if (builder == null) {
|
|
||||||
log.warn("Failed to get routers");
|
|
||||||
return Collections.EMPTY_LIST;
|
|
||||||
}
|
|
||||||
|
|
||||||
String response = builder.accept(MediaType.APPLICATION_JSON_TYPE).
|
|
||||||
header(HEADER_AUTH_TOKEN, getToken()).get(String.class);
|
|
||||||
|
|
||||||
ObjectMapper mapper = new ObjectMapper();
|
|
||||||
List<OpenstackRouter> openstackRouters = Lists.newArrayList();
|
|
||||||
|
|
||||||
try {
|
|
||||||
ObjectNode node = (ObjectNode) mapper.readTree(response);
|
|
||||||
ArrayNode routerList = (ArrayNode) node.path(PATH_ROUTERS);
|
|
||||||
OpenstackRouterCodec openstackRouterCodec = new OpenstackRouterCodec();
|
|
||||||
routerList.forEach(r -> openstackRouters
|
|
||||||
.add(openstackRouterCodec.decode((ObjectNode) r, null)));
|
|
||||||
} catch (IOException e) {
|
|
||||||
log.warn("getRouters()", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
log.debug("router response:" + response);
|
|
||||||
openstackRouters.forEach(r -> log.debug("router ID: {}", r.id()));
|
|
||||||
|
|
||||||
return openstackRouters;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns Subnet information in Neutron.
|
|
||||||
*
|
|
||||||
* @return List of OpenstackSubnet
|
|
||||||
*/
|
|
||||||
public Collection<OpenstackSubnet> getSubnets() {
|
|
||||||
Invocation.Builder builder = getClientBuilder(neutronUrl, URI_SUBNETS);
|
|
||||||
if (builder == null) {
|
|
||||||
log.warn("Failed to get subnets");
|
|
||||||
return Collections.EMPTY_LIST;
|
|
||||||
}
|
|
||||||
|
|
||||||
String response = builder.accept(MediaType.APPLICATION_JSON_TYPE).
|
|
||||||
header(HEADER_AUTH_TOKEN, getToken()).get(String.class);
|
|
||||||
|
|
||||||
ObjectMapper mapper = new ObjectMapper();
|
|
||||||
List<OpenstackSubnet> subnets = Lists.newArrayList();
|
|
||||||
try {
|
|
||||||
ObjectNode node = (ObjectNode) mapper.readTree(response);
|
|
||||||
ArrayNode subnetList = (ArrayNode) node.path(PATH_SUBNETS);
|
|
||||||
OpenstackSubnetCodec subnetCodec = new OpenstackSubnetCodec();
|
|
||||||
subnetList.forEach(s -> subnets.add(subnetCodec.decode((ObjectNode) s, null)));
|
|
||||||
} catch (IOException e) {
|
|
||||||
log.warn("getSubnets()", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
log.debug("subnets response:" + response);
|
|
||||||
subnets.forEach(s -> log.debug("subnet ID: {}", s.id()));
|
|
||||||
|
|
||||||
return subnets;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Extracts OpenstackSecurityGroup information for the ID.
|
|
||||||
*
|
|
||||||
* @param id Security Group ID
|
|
||||||
* @return OpenstackSecurityGroup object or null if fails
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public OpenstackSecurityGroup securityGroup(String id) {
|
|
||||||
Invocation.Builder builder = getClientBuilder(neutronUrl, URI_SECURITY_GROUPS + "/" + id);
|
|
||||||
if (builder == null) {
|
|
||||||
log.warn("Failed to get security group {}", id);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
String response = builder.accept(MediaType.APPLICATION_JSON_TYPE).
|
|
||||||
header(HEADER_AUTH_TOKEN, getToken()).get(String.class);
|
|
||||||
|
|
||||||
ObjectMapper mapper = new ObjectMapper();
|
|
||||||
OpenstackSecurityGroup securityGroup = null;
|
|
||||||
try {
|
|
||||||
ObjectNode node = (ObjectNode) mapper.readTree(response);
|
|
||||||
OpenstackSecurityGroupCodec sgCodec = new OpenstackSecurityGroupCodec();
|
|
||||||
securityGroup = sgCodec.decode(node, null);
|
|
||||||
} catch (IOException e) {
|
|
||||||
log.warn("securityGroup()", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
return securityGroup;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Invocation.Builder getClientBuilder(String baseUrl, String path) {
|
|
||||||
if (Strings.isNullOrEmpty(baseUrl)) {
|
|
||||||
log.warn("Keystone or Neutron URL is not set");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
WebTarget wt = client.target(baseUrl + path);
|
|
||||||
return wt.request(JSON_UTF_8.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getToken() {
|
|
||||||
if (!isTokenValid()) {
|
|
||||||
String request = "{\"auth\": {\"tenantName\": \"admin\", " +
|
|
||||||
"\"passwordCredentials\": {\"username\": \"" +
|
|
||||||
userName + "\",\"password\": \"" + pass + "\"}}}";
|
|
||||||
Invocation.Builder builder = getClientBuilder(keystoneUrl, URI_TOKENS);
|
|
||||||
if (builder == null) {
|
|
||||||
log.warn("Failed to get token");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
String response = builder.accept(MediaType.APPLICATION_JSON).post(Entity.json(request), String.class);
|
|
||||||
ObjectMapper mapper = new ObjectMapper();
|
|
||||||
try {
|
|
||||||
ObjectNode node = (ObjectNode) mapper.readTree(response);
|
|
||||||
tokenId = node.path(PATH_ACCESS).path(PATH_TOKEN).path(PATH_ID).asText();
|
|
||||||
tokenExpires = node.path(PATH_ACCESS).path(PATH_TOKEN).path(PATH_EXPIRES).asText();
|
|
||||||
} catch (IOException e) {
|
|
||||||
log.warn("getToken()", e);
|
|
||||||
}
|
|
||||||
log.debug("token response:" + response);
|
|
||||||
}
|
|
||||||
|
|
||||||
return tokenId;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isTokenValid() {
|
|
||||||
|
|
||||||
if (tokenExpires == null || tokenId == null || tokenExpires.isEmpty()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
SimpleDateFormat dateFormat = new SimpleDateFormat(TOKEN_DATE_FORMAT);
|
|
||||||
Date exireDate = dateFormat.parse(tokenExpires);
|
|
||||||
|
|
||||||
Calendar today = Calendar.getInstance();
|
|
||||||
if (exireDate.after(today.getTime())) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
} catch (ParseException e) {
|
|
||||||
log.error("Token parse exception error : {}", e.getMessage());
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
log.debug("token is Invalid");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<OpenstackPort> ports(String networkId) {
|
|
||||||
return getPorts().stream()
|
|
||||||
.filter(port -> port.networkId().equals(networkId))
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<OpenstackPort> ports() {
|
|
||||||
return getPorts();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public OpenstackPort port(Port port) {
|
|
||||||
String uuid = port.annotations().value(PORT_NAME).substring(3);
|
|
||||||
return getPorts().stream()
|
|
||||||
.filter(p -> p.id().startsWith(uuid))
|
|
||||||
.findAny().orElse(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public OpenstackPort port(String portId) {
|
|
||||||
return getPorts().stream()
|
|
||||||
.filter(p -> p.id().equals(portId))
|
|
||||||
.findAny().orElse(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public OpenstackNetwork network(String networkId) {
|
|
||||||
Collection<OpenstackSubnet> subnets = getSubnets().stream()
|
|
||||||
.filter(s -> s.networkId().equals(networkId))
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
|
|
||||||
OpenstackNetwork openstackNetwork = getNetworks().stream()
|
|
||||||
.filter(n -> n.id().equals(networkId))
|
|
||||||
.findAny().orElse(null);
|
|
||||||
|
|
||||||
if (openstackNetwork == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return OpenstackNetwork.builder()
|
|
||||||
.id(openstackNetwork.id())
|
|
||||||
.name(openstackNetwork.name())
|
|
||||||
.networkType(openstackNetwork.networkType())
|
|
||||||
.segmentId(openstackNetwork.segmentId())
|
|
||||||
.tenantId(openstackNetwork.tenantId())
|
|
||||||
.subnets(subnets)
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<OpenstackNetwork> networks() {
|
|
||||||
return getNetworks();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public OpenstackSubnet subnet(String subnetId) {
|
|
||||||
return getSubnets().stream()
|
|
||||||
.filter(subnet -> subnet.id().equals(subnetId))
|
|
||||||
.findAny().orElse(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<OpenstackSubnet> subnets() {
|
|
||||||
return getSubnets();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<OpenstackRouter> routers() {
|
|
||||||
return getRouters();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public OpenstackRouter router(String routerId) {
|
|
||||||
return getRouters().stream()
|
|
||||||
.filter(router -> router.id().equals(routerId))
|
|
||||||
.findAny().orElse(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Collection<OpenstackFloatingIP> floatingIps() {
|
|
||||||
Invocation.Builder builder = getClientBuilder(neutronUrl, URI_FLOATINGIPS);
|
|
||||||
if (builder == null) {
|
|
||||||
log.warn("Failed to get floating IPs");
|
|
||||||
return Collections.EMPTY_LIST;
|
|
||||||
}
|
|
||||||
|
|
||||||
String response = builder.accept(MediaType.APPLICATION_JSON_TYPE).
|
|
||||||
header(HEADER_AUTH_TOKEN, getToken()).get(String.class);
|
|
||||||
|
|
||||||
log.debug("floatingIps response:" + response);
|
|
||||||
|
|
||||||
ObjectMapper mapper = new ObjectMapper();
|
|
||||||
List<OpenstackFloatingIP> openstackFloatingIPs = Lists.newArrayList();
|
|
||||||
try {
|
|
||||||
ObjectNode node = (ObjectNode) mapper.readTree(response);
|
|
||||||
ArrayNode floatingIpList = (ArrayNode) node.path(PATH_FLOATINGIPS);
|
|
||||||
OpenstackFloatingIpCodec fipCodec = new OpenstackFloatingIpCodec();
|
|
||||||
floatingIpList.forEach(f -> openstackFloatingIPs.add(fipCodec.decode((ObjectNode) f, null)));
|
|
||||||
} catch (IOException e) {
|
|
||||||
log.warn("floatingIps()", e);
|
|
||||||
}
|
|
||||||
|
|
||||||
openstackFloatingIPs.removeAll(Collections.singleton(null));
|
|
||||||
|
|
||||||
return openstackFloatingIPs;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean updateFloatingIp(String id, String portId, Optional<Ip4Address> fixedIpAddress) {
|
|
||||||
Invocation.Builder builder = getClientBuilder(neutronUrl, URI_FLOATINGIPS + "/" + id);
|
|
||||||
|
|
||||||
if (builder == null || (portId != null && !fixedIpAddress.isPresent())) {
|
|
||||||
log.warn("Failed to update floating IP");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
ObjectNode objectNode = createFloatingIpObject(portId, fixedIpAddress);
|
|
||||||
|
|
||||||
InputStream inputStream = new ByteArrayInputStream(objectNode.toString().getBytes());
|
|
||||||
|
|
||||||
try {
|
|
||||||
Response response = builder.header(HEADER_AUTH_TOKEN, getToken())
|
|
||||||
.put(Entity.entity(IOUtils.toString(inputStream, StandardCharsets.UTF_8),
|
|
||||||
MediaType.APPLICATION_JSON));
|
|
||||||
log.debug("updateFloatingIp called: {}, status: {}", response.readEntity(String.class),
|
|
||||||
String.valueOf(response.getStatus()));
|
|
||||||
|
|
||||||
return checkReply(response);
|
|
||||||
} catch (IOException e) {
|
|
||||||
log.error("Cannot do PUT {} request");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private ObjectNode createFloatingIpObject(String portId, Optional<Ip4Address> fixedIpAddress) {
|
|
||||||
ObjectMapper mapper = new ObjectMapper();
|
|
||||||
ObjectNode objectNode = mapper.createObjectNode();
|
|
||||||
|
|
||||||
objectNode.putObject(FLOATINGIP)
|
|
||||||
.put(PORT_ID, portId);
|
|
||||||
|
|
||||||
if (portId != null) {
|
|
||||||
objectNode.put(FIXED_IP_ADDRESS, fixedIpAddress.get().toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
return objectNode;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean checkReply(Response response) {
|
|
||||||
if (response != null) {
|
|
||||||
return checkStatusCode(response.getStatus());
|
|
||||||
}
|
|
||||||
|
|
||||||
log.warn("Null floating IP response from openstack");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean checkStatusCode(int statusCode) {
|
|
||||||
if (statusCode == Response.Status.OK.getStatusCode()) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
private void configureNetwork() {
|
|
||||||
OpenstackInterfaceConfig cfg =
|
|
||||||
cfgService.getConfig(appId, OpenstackInterfaceConfig.class);
|
|
||||||
if (cfg == null) {
|
|
||||||
log.error("There is no openstack server information in config.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
neutronUrl = checkNotNull(cfg.neutronServer());
|
|
||||||
keystoneUrl = checkNotNull(cfg.keystoneServer());
|
|
||||||
userName = checkNotNull(cfg.userName());
|
|
||||||
pass = checkNotNull(cfg.password());
|
|
||||||
}
|
|
||||||
|
|
||||||
private class InternalConfigListener implements NetworkConfigListener {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void event(NetworkConfigEvent event) {
|
|
||||||
if (((event.type() == NetworkConfigEvent.Type.CONFIG_ADDED ||
|
|
||||||
event.type() == NetworkConfigEvent.Type.CONFIG_UPDATED)) &&
|
|
||||||
event.configClass().equals(OpenstackInterfaceConfig.class)) {
|
|
||||||
|
|
||||||
log.info("Network configuration changed");
|
|
||||||
networkEventExcutorService.execute(() -> configureNetwork());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,20 +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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Implementation classes for OpenStack interface that handles Neutron REST calls.
|
|
||||||
*/
|
|
||||||
package org.onosproject.openstackinterface.impl;
|
|
||||||
@ -1,111 +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.openstackinterface.web;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
|
||||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
||||||
import org.onlab.packet.Ip4Address;
|
|
||||||
import org.onosproject.codec.CodecContext;
|
|
||||||
import org.onosproject.codec.JsonCodec;
|
|
||||||
import org.onosproject.openstackinterface.OpenstackFloatingIP;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Implementation of the OpenstackFloatingIP Codec.
|
|
||||||
*/
|
|
||||||
public class OpenstackFloatingIpCodec extends JsonCodec<OpenstackFloatingIP> {
|
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
|
||||||
|
|
||||||
private static final String FLOATINGIP = "floatingip";
|
|
||||||
private static final String FLOATING_NETWORK_ID = "floating_network_id";
|
|
||||||
private static final String ROUTER_ID = "router_id";
|
|
||||||
private static final String FIXED_IP_ADDRESS = "fixed_ip_address";
|
|
||||||
private static final String FLOATING_IP_ADDRESS = "floating_ip_address";
|
|
||||||
private static final String TENANT_ID = "tenant_id";
|
|
||||||
private static final String STATUS = "status";
|
|
||||||
private static final String PORT_ID = "port_id";
|
|
||||||
private static final String ID = "id";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Decodes the OpenstackFloatingIP.
|
|
||||||
*
|
|
||||||
* @param json JSON to decode
|
|
||||||
* @param context decoding context
|
|
||||||
* @return OpenstackFloatingIP
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public OpenstackFloatingIP decode(ObjectNode json, CodecContext context) {
|
|
||||||
if (json == null || !json.isObject()) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
JsonNode floatingIpInfo = json.get(FLOATINGIP);
|
|
||||||
if (floatingIpInfo == null) {
|
|
||||||
floatingIpInfo = json;
|
|
||||||
}
|
|
||||||
|
|
||||||
String networkId = floatingIpInfo.path(FLOATING_NETWORK_ID).asText();
|
|
||||||
String routerId = floatingIpInfo.path(ROUTER_ID).asText();
|
|
||||||
String fixedIpAddressStr = floatingIpInfo.path(FIXED_IP_ADDRESS).asText();
|
|
||||||
String floatingIpAddressStr = floatingIpInfo.path(FLOATING_IP_ADDRESS).asText();
|
|
||||||
String tenantId = floatingIpInfo.path(TENANT_ID).asText();
|
|
||||||
String statusStr = floatingIpInfo.path(STATUS).asText();
|
|
||||||
String portId = floatingIpInfo.path(PORT_ID).asText();
|
|
||||||
String id = floatingIpInfo.path(ID).asText();
|
|
||||||
|
|
||||||
checkNotNull(networkId);
|
|
||||||
checkNotNull(floatingIpAddressStr);
|
|
||||||
checkNotNull(tenantId);
|
|
||||||
checkNotNull(statusStr);
|
|
||||||
checkNotNull(id);
|
|
||||||
|
|
||||||
if (routerId != null && routerId.equals("null")) {
|
|
||||||
routerId = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
Ip4Address fixedIpAddress = null;
|
|
||||||
if (fixedIpAddressStr != null && !fixedIpAddressStr.equals("null")) {
|
|
||||||
fixedIpAddress = Ip4Address.valueOf(fixedIpAddressStr);
|
|
||||||
}
|
|
||||||
|
|
||||||
Ip4Address floatingIpAddress = Ip4Address.valueOf(floatingIpAddressStr);
|
|
||||||
|
|
||||||
OpenstackFloatingIP.FloatingIpStatus status =
|
|
||||||
OpenstackFloatingIP.FloatingIpStatus.valueOf(statusStr);
|
|
||||||
|
|
||||||
if (portId != null && portId.equals("null")) {
|
|
||||||
portId = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
OpenstackFloatingIP.Builder osFloatingIpBuilder =
|
|
||||||
new OpenstackFloatingIP.Builder();
|
|
||||||
|
|
||||||
return osFloatingIpBuilder.networkId(networkId)
|
|
||||||
.routerId(routerId)
|
|
||||||
.fixedIpAddress(fixedIpAddress)
|
|
||||||
.floatingIpAddress(floatingIpAddress)
|
|
||||||
.tenantId(tenantId)
|
|
||||||
.status(status)
|
|
||||||
.portId(portId)
|
|
||||||
.id(id)
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,76 +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.openstackinterface.web;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
|
||||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
||||||
import org.onosproject.codec.CodecContext;
|
|
||||||
import org.onosproject.codec.JsonCodec;
|
|
||||||
import org.onosproject.openstackinterface.OpenstackNetwork;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Implementation of the OpenstackNetwork Codec.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class OpenstackNetworkCodec extends JsonCodec<OpenstackNetwork> {
|
|
||||||
|
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
|
||||||
|
|
||||||
private static final String NETWORK = "network";
|
|
||||||
private static final String NAME = "name";
|
|
||||||
private static final String TENANT_ID = "tenant_id";
|
|
||||||
private static final String SEGMENTATION_ID = "provider:segmentation_id";
|
|
||||||
private static final String NETWORK_TYPE = "provider:network_type";
|
|
||||||
private static final String ID = "id";
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public OpenstackNetwork decode(ObjectNode json, CodecContext context) {
|
|
||||||
|
|
||||||
JsonNode networkInfo = json.get(NETWORK);
|
|
||||||
if (networkInfo == null) {
|
|
||||||
networkInfo = json;
|
|
||||||
}
|
|
||||||
|
|
||||||
String name = networkInfo.path(NAME).asText();
|
|
||||||
String tenantId = networkInfo.path(TENANT_ID).asText();
|
|
||||||
String id = networkInfo.path(ID).asText();
|
|
||||||
|
|
||||||
OpenstackNetwork.Builder onb = OpenstackNetwork.builder();
|
|
||||||
onb.name(name)
|
|
||||||
.tenantId(tenantId)
|
|
||||||
.id(id);
|
|
||||||
|
|
||||||
if (networkInfo.path(NETWORK_TYPE).isMissingNode()) {
|
|
||||||
log.debug("Network {} has no network type, ignore it.", name);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
String networkType = networkInfo.path(NETWORK_TYPE).asText();
|
|
||||||
try {
|
|
||||||
onb.networkType(OpenstackNetwork.NetworkType.valueOf(networkType.toUpperCase()));
|
|
||||||
} catch (IllegalArgumentException e) {
|
|
||||||
log.debug("Network {} has unsupported network type {}, ignore it.",
|
|
||||||
name, networkType);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
onb.segmentId(networkInfo.path(SEGMENTATION_ID).asText());
|
|
||||||
|
|
||||||
return onb.build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,130 +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.openstackinterface.web;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
|
||||||
import com.fasterxml.jackson.databind.node.ArrayNode;
|
|
||||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
import com.google.common.collect.Maps;
|
|
||||||
import org.onlab.packet.Ip4Address;
|
|
||||||
import org.onlab.packet.IpAddress;
|
|
||||||
import org.onlab.packet.MacAddress;
|
|
||||||
import org.onosproject.codec.CodecContext;
|
|
||||||
import org.onosproject.codec.JsonCodec;
|
|
||||||
import org.onosproject.openstackinterface.OpenstackPort;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Encodes and decodes the OpenstackPort.
|
|
||||||
*/
|
|
||||||
public class OpenstackPortCodec extends JsonCodec<OpenstackPort> {
|
|
||||||
|
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
|
||||||
|
|
||||||
// JSON field names
|
|
||||||
private static final String PORT = "port";
|
|
||||||
private static final String STATUS = "status";
|
|
||||||
private static final String NAME = "name";
|
|
||||||
private static final String ADDRESS_PAIR = "allowed_address_pairs";
|
|
||||||
private static final String ADMIN_STATUS = "admin_status";
|
|
||||||
private static final String NETWORK_ID = "network_id";
|
|
||||||
private static final String TENANT_ID = "tenant_id";
|
|
||||||
private static final String DEVICE_OWNER = "device_owner";
|
|
||||||
private static final String MAC_ADDRESS = "mac_address";
|
|
||||||
private static final String FIXED_IPS = "fixed_ips";
|
|
||||||
private static final String SUBNET_ID = "subnet_id";
|
|
||||||
private static final String IP_ADDRESS = "ip_address";
|
|
||||||
private static final String ID = "id";
|
|
||||||
private static final String SECURITY_GROUPS = "security_groups";
|
|
||||||
private static final String DEVICE_ID = "device_id";
|
|
||||||
private static final String NA = "N/A";
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public OpenstackPort decode(ObjectNode json, CodecContext context) {
|
|
||||||
|
|
||||||
checkNotNull(json);
|
|
||||||
Map<String, Ip4Address> fixedIpMap = Maps.newHashMap();
|
|
||||||
JsonNode portInfo = json.get(PORT);
|
|
||||||
if (portInfo == null) {
|
|
||||||
portInfo = json;
|
|
||||||
}
|
|
||||||
|
|
||||||
String status = portInfo.path(STATUS).asText();
|
|
||||||
String name = portInfo.path(NAME).asText();
|
|
||||||
boolean adminStateUp = portInfo.path(ADMIN_STATUS).asBoolean();
|
|
||||||
String networkId = portInfo.path(NETWORK_ID).asText();
|
|
||||||
String tenantId = portInfo.path(TENANT_ID).asText();
|
|
||||||
String deviceOwner = portInfo.path(DEVICE_OWNER).asText();
|
|
||||||
String macStr = portInfo.path(MAC_ADDRESS).asText();
|
|
||||||
ArrayNode fixedIpList = (ArrayNode) portInfo.path(FIXED_IPS);
|
|
||||||
for (JsonNode fixedIpInfo: fixedIpList) {
|
|
||||||
String subnetId = fixedIpInfo.path(SUBNET_ID).asText();
|
|
||||||
String ipAddressStr = fixedIpInfo.path(IP_ADDRESS).asText();
|
|
||||||
if (!fixedIpInfo.path(IP_ADDRESS).isMissingNode() && ipAddressStr != null) {
|
|
||||||
Ip4Address ipAddress = Ip4Address.valueOf(ipAddressStr);
|
|
||||||
fixedIpMap.put(subnetId, ipAddress);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
String id = portInfo.path(ID).asText();
|
|
||||||
ArrayNode securityGroupList = (ArrayNode) portInfo.path(SECURITY_GROUPS);
|
|
||||||
Collection<String> securityGroupIdList = Lists.newArrayList();
|
|
||||||
securityGroupList.forEach(securityGroup -> securityGroupIdList.add(securityGroup.asText()));
|
|
||||||
String deviceId = portInfo.path(DEVICE_ID).asText();
|
|
||||||
|
|
||||||
Map<IpAddress, MacAddress> addressPairs = Maps.newHashMap();
|
|
||||||
for (JsonNode addrPair : (ArrayNode) portInfo.path(ADDRESS_PAIR)) {
|
|
||||||
try {
|
|
||||||
addressPairs.put(IpAddress.valueOf(addrPair.path(IP_ADDRESS).asText()),
|
|
||||||
MacAddress.valueOf(addrPair.path(MAC_ADDRESS).asText()));
|
|
||||||
} catch (IllegalArgumentException e) {
|
|
||||||
log.debug("Invalid address pair {}", addrPair.toString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
OpenstackPort.Builder openstackPortBuilder = OpenstackPort.builder();
|
|
||||||
OpenstackPort.PortStatus portStatus =
|
|
||||||
status.equals(NA) ? OpenstackPort.PortStatus.NA :
|
|
||||||
OpenstackPort.PortStatus.valueOf(status);
|
|
||||||
|
|
||||||
openstackPortBuilder.portStatus(portStatus)
|
|
||||||
.name(name)
|
|
||||||
.adminState(adminStateUp)
|
|
||||||
.netwrokId(networkId)
|
|
||||||
.tenantId(tenantId)
|
|
||||||
.deviceOwner(deviceOwner)
|
|
||||||
.macAddress(MacAddress.valueOf(macStr))
|
|
||||||
.fixedIps(fixedIpMap)
|
|
||||||
.id(id)
|
|
||||||
.deviceId(deviceId)
|
|
||||||
.securityGroup(securityGroupIdList);
|
|
||||||
|
|
||||||
if (!addressPairs.isEmpty()) {
|
|
||||||
openstackPortBuilder.allowedAddressPairs(addressPairs);
|
|
||||||
}
|
|
||||||
|
|
||||||
OpenstackPort openstackPort = openstackPortBuilder.build();
|
|
||||||
|
|
||||||
return openstackPort;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,106 +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.openstackinterface.web;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
|
||||||
import com.fasterxml.jackson.databind.node.ArrayNode;
|
|
||||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
||||||
import com.google.common.collect.Maps;
|
|
||||||
import org.onlab.packet.Ip4Address;
|
|
||||||
import org.onosproject.codec.CodecContext;
|
|
||||||
import org.onosproject.codec.JsonCodec;
|
|
||||||
import org.onosproject.openstackinterface.OpenstackExternalGateway;
|
|
||||||
import org.onosproject.openstackinterface.OpenstackRouter;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
/**
|
|
||||||
* Implementation of the OpenstackRouter Codec.
|
|
||||||
*/
|
|
||||||
public class OpenstackRouterCodec extends JsonCodec<OpenstackRouter> {
|
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
|
||||||
|
|
||||||
private static final String ROUTER = "router";
|
|
||||||
private static final String TENANT_ID = "tenant_id";
|
|
||||||
private static final String NETWORK_ID = "network_id";
|
|
||||||
private static final String ID = "id";
|
|
||||||
private static final String NAME = "name";
|
|
||||||
private static final String STATUS = "status";
|
|
||||||
private static final String ADMIN_STATE_UP = "admin_state_up";
|
|
||||||
private static final String EXTERNAL_GW_INFO = "external_gateway_info";
|
|
||||||
private static final String EXTERNAL_FIXED_IPS = "external_fixed_ips";
|
|
||||||
private static final String SUBNET_ID = "subnet_id";
|
|
||||||
private static final String IP_ADDRESS = "ip_address";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Decodes the OpenstackRouter.
|
|
||||||
*
|
|
||||||
* @param json JSON to decode
|
|
||||||
* @param context decoding context
|
|
||||||
* @return OpenstackRouter
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public OpenstackRouter decode(ObjectNode json, CodecContext context) {
|
|
||||||
|
|
||||||
if (json == null || !json.isObject()) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
JsonNode routerInfo = json.get(ROUTER);
|
|
||||||
if (routerInfo == null) {
|
|
||||||
routerInfo = json;
|
|
||||||
}
|
|
||||||
|
|
||||||
String tenantId = checkNotNull(routerInfo.path(TENANT_ID).asText());
|
|
||||||
String id = checkNotNull(routerInfo.path(ID).asText());
|
|
||||||
String name = checkNotNull(routerInfo.path(NAME).asText());
|
|
||||||
String adminStateUp = checkNotNull(routerInfo.path(ADMIN_STATE_UP).asText());
|
|
||||||
|
|
||||||
OpenstackExternalGateway.Builder osExtBuiler = new OpenstackExternalGateway.Builder();
|
|
||||||
|
|
||||||
if (!routerInfo.path(EXTERNAL_GW_INFO).isMissingNode()) {
|
|
||||||
String externalGatewayNetId = checkNotNull(routerInfo.path(EXTERNAL_GW_INFO).path(NETWORK_ID).asText());
|
|
||||||
Map<String, Ip4Address> fixedIpMap = Maps.newHashMap();
|
|
||||||
|
|
||||||
|
|
||||||
if (!routerInfo.path(EXTERNAL_GW_INFO).path(EXTERNAL_FIXED_IPS).isMissingNode()) {
|
|
||||||
ArrayNode fixedIpList = (ArrayNode) routerInfo.path(EXTERNAL_GW_INFO).path(EXTERNAL_FIXED_IPS);
|
|
||||||
|
|
||||||
for (JsonNode fixedIpInfo : fixedIpList) {
|
|
||||||
String subnetId = checkNotNull(fixedIpInfo.path(SUBNET_ID).asText());
|
|
||||||
String ipAddressStr = checkNotNull(fixedIpInfo.path(IP_ADDRESS).asText());
|
|
||||||
if (!fixedIpInfo.path(IP_ADDRESS).isMissingNode() && ipAddressStr != null) {
|
|
||||||
fixedIpMap.put(subnetId, Ip4Address.valueOf(ipAddressStr));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
osExtBuiler.networkId(externalGatewayNetId)
|
|
||||||
.enablePnat(true)
|
|
||||||
.externalFixedIps(fixedIpMap);
|
|
||||||
}
|
|
||||||
OpenstackRouter.Builder osBuilder = new OpenstackRouter.Builder()
|
|
||||||
.tenantId(tenantId)
|
|
||||||
.id(id)
|
|
||||||
.name(name)
|
|
||||||
.status(OpenstackRouter.RouterStatus.ACTIVE)
|
|
||||||
.adminStateUp(Boolean.valueOf(adminStateUp))
|
|
||||||
.gatewayExternalInfo(osExtBuiler.build());
|
|
||||||
|
|
||||||
return osBuilder.build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,64 +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.openstackinterface.web;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
|
||||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
||||||
import org.onosproject.codec.CodecContext;
|
|
||||||
import org.onosproject.codec.JsonCodec;
|
|
||||||
import org.onosproject.openstackinterface.OpenstackRouterInterface;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
|
||||||
/**
|
|
||||||
* Implementation of the OpenstackRouterInterface Codec.
|
|
||||||
*/
|
|
||||||
public class OpenstackRouterInterfaceCodec extends JsonCodec<OpenstackRouterInterface> {
|
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
|
||||||
|
|
||||||
private static final String ID = "id";
|
|
||||||
private static final String TENANT_ID = "tenant_id";
|
|
||||||
private static final String SUBNET_ID = "subnet_id";
|
|
||||||
private static final String PORT_ID = "port_id";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Decodes the OpenstackRouterInterface.
|
|
||||||
*
|
|
||||||
* @param json JSON to decode
|
|
||||||
* @param context decoding context
|
|
||||||
* @return OpenstackRouterInterface
|
|
||||||
*/
|
|
||||||
@Override
|
|
||||||
public OpenstackRouterInterface decode(ObjectNode json, CodecContext context) {
|
|
||||||
if (json == null || !json.isObject()) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
JsonNode routerIfInfo = json;
|
|
||||||
|
|
||||||
String id = checkNotNull(routerIfInfo.path(ID).asText());
|
|
||||||
String tenantId = checkNotNull(routerIfInfo.path(TENANT_ID).asText());
|
|
||||||
String subnetId = checkNotNull(routerIfInfo.path(SUBNET_ID).asText());
|
|
||||||
String portId = checkNotNull(routerIfInfo.path(PORT_ID).asText());
|
|
||||||
|
|
||||||
OpenstackRouterInterface.Builder osBuilder = new OpenstackRouterInterface.Builder()
|
|
||||||
.id(id)
|
|
||||||
.tenantId(tenantId)
|
|
||||||
.subnetId(subnetId)
|
|
||||||
.portId(portId);
|
|
||||||
|
|
||||||
return osBuilder.build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,95 +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.openstackinterface.web;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
|
||||||
import com.fasterxml.jackson.databind.node.ArrayNode;
|
|
||||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
import org.onosproject.codec.CodecContext;
|
|
||||||
import org.onosproject.codec.JsonCodec;
|
|
||||||
import org.onosproject.openstackinterface.OpenstackSecurityGroup;
|
|
||||||
import org.onosproject.openstackinterface.OpenstackSecurityGroupRule;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Encodes and decodes the Openstack Security Group.
|
|
||||||
*/
|
|
||||||
public class OpenstackSecurityGroupCodec extends JsonCodec<OpenstackSecurityGroup> {
|
|
||||||
|
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
|
||||||
|
|
||||||
private static final String SECURITY_GROUP = "security_group";
|
|
||||||
private static final String DESCRIPTION = "description";
|
|
||||||
private static final String ID = "id";
|
|
||||||
private static final String NAME = "name";
|
|
||||||
private static final String SECURITY_GROUP_RULES = "security_group_rules";
|
|
||||||
private static final String DIRECTION = "direction";
|
|
||||||
private static final String EHTERTYPE = "ethertype";
|
|
||||||
private static final String PORT_RANGE_MAX = "port_range_max";
|
|
||||||
private static final String PORT_RANGE_MIN = "port_range_min";
|
|
||||||
private static final String PROTOCOL = "protocol";
|
|
||||||
private static final String REMOTE_GROUP_ID = "remote_group_id";
|
|
||||||
private static final String REMOTE_IP_PREFIX = "remote_ip_prefix";
|
|
||||||
private static final String SECURITY_GROUP_ID = "security_group_id";
|
|
||||||
private static final String TENANT_ID = "tenant_id";
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public OpenstackSecurityGroup decode(ObjectNode json, CodecContext context) {
|
|
||||||
JsonNode securityGroupNode = json.get(SECURITY_GROUP);
|
|
||||||
if (securityGroupNode == null) {
|
|
||||||
log.warn("SecurityGroup Json data is null");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
String description = securityGroupNode.path(DESCRIPTION).asText();
|
|
||||||
String id = securityGroupNode.path(ID).asText();
|
|
||||||
String name = securityGroupNode.path(NAME).asText();
|
|
||||||
ArrayNode ruleInfoList = (ArrayNode) securityGroupNode.path(SECURITY_GROUP_RULES);
|
|
||||||
Collection<OpenstackSecurityGroupRule> rules = Lists.newArrayList();
|
|
||||||
for (JsonNode ruleInfo: ruleInfoList) {
|
|
||||||
OpenstackSecurityGroupRule openstackSecurityGroupRule =
|
|
||||||
new OpenstackSecurityGroupRule.Builder()
|
|
||||||
.direction(ruleInfo.path(DIRECTION).asText())
|
|
||||||
.etherType(ruleInfo.path(EHTERTYPE).asText())
|
|
||||||
.id(ruleInfo.path(ID).asText())
|
|
||||||
.portRangeMax(ruleInfo.path(PORT_RANGE_MAX).asText())
|
|
||||||
.portRangeMin(ruleInfo.path(PORT_RANGE_MIN).asText())
|
|
||||||
.protocol(ruleInfo.path(PROTOCOL).asText())
|
|
||||||
.remoteGroupId(ruleInfo.path(REMOTE_GROUP_ID).asText())
|
|
||||||
.remoteIpPrefix(ruleInfo.path(REMOTE_IP_PREFIX).asText())
|
|
||||||
.securityGroupId(ruleInfo.path(SECURITY_GROUP_ID).asText())
|
|
||||||
.tenantId(ruleInfo.path(TENANT_ID).asText())
|
|
||||||
.build();
|
|
||||||
|
|
||||||
rules.add(openstackSecurityGroupRule);
|
|
||||||
}
|
|
||||||
String tenantId = securityGroupNode.path(TENANT_ID).asText();
|
|
||||||
|
|
||||||
OpenstackSecurityGroup openstackSecurityGroup = OpenstackSecurityGroup.builder()
|
|
||||||
.description(description)
|
|
||||||
.id(id)
|
|
||||||
.name(name)
|
|
||||||
.rules(rules)
|
|
||||||
.tenantId(tenantId)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
return openstackSecurityGroup;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,85 +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.openstackinterface.web;
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
|
||||||
|
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.node.ArrayNode;
|
|
||||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
import org.onlab.packet.Ip4Address;
|
|
||||||
import org.onosproject.codec.CodecContext;
|
|
||||||
import org.onosproject.codec.JsonCodec;
|
|
||||||
import org.onosproject.openstackinterface.OpenstackSubnet;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Encodes and decodes the OpenstackSubnet.
|
|
||||||
*/
|
|
||||||
public class OpenstackSubnetCodec extends JsonCodec<OpenstackSubnet> {
|
|
||||||
private final Logger log = LoggerFactory.getLogger(getClass());
|
|
||||||
|
|
||||||
// JSON Field names
|
|
||||||
private static final String SUBNET = "subnet";
|
|
||||||
private static final String NAME = "name";
|
|
||||||
private static final String ENABLE_DHCP = "enable_dhcp";
|
|
||||||
private static final String NETWORK_ID = "network_id";
|
|
||||||
private static final String TENANT_ID = "tenant_id";
|
|
||||||
private static final String DNS_NAMESERVERS = "dns_nameservers";
|
|
||||||
private static final String GATEWAY_IP = "gateway_ip";
|
|
||||||
private static final String CIDR = "cidr";
|
|
||||||
private static final String ID = "id";
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public OpenstackSubnet decode(ObjectNode json, CodecContext context) {
|
|
||||||
checkNotNull(json);
|
|
||||||
JsonNode subnetInfo = json.get(SUBNET);
|
|
||||||
if (subnetInfo == null) {
|
|
||||||
subnetInfo = json;
|
|
||||||
}
|
|
||||||
|
|
||||||
String name = subnetInfo.path(NAME).asText();
|
|
||||||
boolean enableDhcp = subnetInfo.path(ENABLE_DHCP).asBoolean();
|
|
||||||
String networkId = subnetInfo.path(NETWORK_ID).asText();
|
|
||||||
String tenantId = subnetInfo.path(TENANT_ID).asText();
|
|
||||||
ArrayNode dnsNameservsers = (ArrayNode) subnetInfo.path(DNS_NAMESERVERS);
|
|
||||||
List<Ip4Address> dnsList = Lists.newArrayList();
|
|
||||||
if (dnsNameservsers != null && !dnsNameservsers.isMissingNode()) {
|
|
||||||
dnsNameservsers.forEach(dns -> dnsList.add(Ip4Address.valueOf(dns.asText())));
|
|
||||||
}
|
|
||||||
String gatewayIp = subnetInfo.path(GATEWAY_IP).asText();
|
|
||||||
String cidr = subnetInfo.path(CIDR).asText();
|
|
||||||
String id = subnetInfo.path(ID).asText();
|
|
||||||
|
|
||||||
OpenstackSubnet openstackSubnet = OpenstackSubnet.builder()
|
|
||||||
.setName(name)
|
|
||||||
.setEnableDhcp(enableDhcp)
|
|
||||||
.setNetworkId(networkId)
|
|
||||||
.setTenantId(tenantId)
|
|
||||||
.setDnsNameservers(dnsList)
|
|
||||||
.setGatewayIp(gatewayIp)
|
|
||||||
.setCidr(cidr)
|
|
||||||
.setId(id)
|
|
||||||
.build();
|
|
||||||
return openstackSubnet;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,20 +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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* OpenStack networking implementation.
|
|
||||||
*/
|
|
||||||
package org.onosproject.openstackinterface.web;
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
{
|
|
||||||
"apps" : {
|
|
||||||
"org.onosproject.openstackinterface" : {
|
|
||||||
"openstackinterface" : {
|
|
||||||
"neutron_server" : "http://10.40.101.209:9696/v2.0/",
|
|
||||||
"keystone_server" : "http://10.40.101.209:5000/v2.0/",
|
|
||||||
"user_name" : "admin",
|
|
||||||
"password" : "nova"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,37 +0,0 @@
|
|||||||
<?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</artifactId>
|
|
||||||
<version>1.10.0-SNAPSHOT</version>
|
|
||||||
</parent>
|
|
||||||
|
|
||||||
<artifactId>onos-app-openstackinterface</artifactId>
|
|
||||||
<packaging>pom</packaging>
|
|
||||||
|
|
||||||
<modules>
|
|
||||||
<module>api</module>
|
|
||||||
<module>app</module>
|
|
||||||
</modules>
|
|
||||||
|
|
||||||
</project>
|
|
||||||
|
|
||||||
@ -69,7 +69,6 @@
|
|||||||
<module>vpls</module>
|
<module>vpls</module>
|
||||||
<module>openstacknode</module>
|
<module>openstacknode</module>
|
||||||
<module>openstacknetworking</module>
|
<module>openstacknetworking</module>
|
||||||
<module>openstackinterface</module>
|
|
||||||
<module>influxdbmetrics</module>
|
<module>influxdbmetrics</module>
|
||||||
<module>gangliametrics</module>
|
<module>gangliametrics</module>
|
||||||
<module>graphitemetrics</module>
|
<module>graphitemetrics</module>
|
||||||
|
|||||||
@ -143,7 +143,6 @@ ONOS_APPS = [
|
|||||||
'//apps/metrics:onos-apps-metrics-oar',
|
'//apps/metrics:onos-apps-metrics-oar',
|
||||||
'//apps/mfwd:onos-apps-mfwd-oar',
|
'//apps/mfwd:onos-apps-mfwd-oar',
|
||||||
'//apps/mlb:onos-apps-mlb-oar',
|
'//apps/mlb:onos-apps-mlb-oar',
|
||||||
'//apps/openstackinterface:onos-apps-openstackinterface-oar',
|
|
||||||
'//apps/openstacknetworking:onos-apps-openstacknetworking-oar',
|
'//apps/openstacknetworking:onos-apps-openstacknetworking-oar',
|
||||||
'//apps/mobility:onos-apps-mobility-oar',
|
'//apps/mobility:onos-apps-mobility-oar',
|
||||||
'//apps/optical:onos-apps-optical-oar',
|
'//apps/optical:onos-apps-optical-oar',
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user