Revert "CORD-130 Configuraton validation check"
This reverts commit 23db418c0c13cb225528486a51da1bfa63a327ab.
Change-Id: Iac56cce003acd87c2c7b30fc1ab13af7a8fa78f6
diff --git a/src/main/java/org/opencord/cordvtn/api/CordVtnConfig.java b/src/main/java/org/opencord/cordvtn/api/CordVtnConfig.java
index c76f90c..29ffaea 100644
--- a/src/main/java/org/opencord/cordvtn/api/CordVtnConfig.java
+++ b/src/main/java/org/opencord/cordvtn/api/CordVtnConfig.java
@@ -16,7 +16,6 @@
package org.opencord.cordvtn.api;
import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.base.Strings;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
@@ -32,8 +31,6 @@
import java.util.Map;
import java.util.Set;
-import static org.onosproject.net.config.Config.FieldPresence.MANDATORY;
-import static org.onosproject.net.config.Config.FieldPresence.OPTIONAL;
import static org.slf4j.LoggerFactory.getLogger;
/**
@@ -72,84 +69,6 @@
private static final String PASSWORD = "password";
// TODO implement isValid
- @Override
- public boolean isValid() {
- // check only allowed fields are present
- boolean result = hasOnlyFields(
- PRIVATE_GATEWAY_MAC,
- PUBLIC_GATEWAYS,
- LOCAL_MANAGEMENT_IP,
- OVSDB_PORT,
- SSH,
- OPENSTACK,
- XOS,
- CORDVTN_NODES);
-
- if (object.get(CORDVTN_NODES) == null || object.get(CORDVTN_NODES).size() < 1) {
- final String msg = "No node is present";
- throw new IllegalArgumentException(msg);
- }
-
- // check all mandatory fields are present and valid
- result = result && isMacAddress(PRIVATE_GATEWAY_MAC, MANDATORY);
- result = result && isIpPrefix(LOCAL_MANAGEMENT_IP, MANDATORY);
-
- for (JsonNode node : object.get(CORDVTN_NODES)) {
- ObjectNode vtnNode = (ObjectNode) node;
- result = result && hasFields(
- vtnNode,
- HOSTNAME,
- HOST_MANAGEMENT_IP,
- DATA_IP,
- DATA_IFACE,
- INTEGRATION_BRIDGE_ID);
- result = result && isIpPrefix(vtnNode, HOST_MANAGEMENT_IP, MANDATORY);
- result = result && isIpPrefix(vtnNode, DATA_IP, MANDATORY);
-
- NetworkAddress localMgmt = NetworkAddress.valueOf(get(LOCAL_MANAGEMENT_IP, ""));
- NetworkAddress hostsMgmt = NetworkAddress.valueOf(getConfig(vtnNode, HOST_MANAGEMENT_IP));
- if (hostsMgmt.prefix().contains(localMgmt.prefix()) ||
- localMgmt.prefix().contains(hostsMgmt.prefix())) {
- final String msg = "Host and local management IP conflict";
- throw new IllegalArgumentException(msg);
- }
- }
-
- result = result && hasFields(
- (ObjectNode) object.get(SSH),
- SSH_PORT,
- SSH_USER,
- SSH_KEY_FILE);
- result = result && isTpPort(
- (ObjectNode) object.get(SSH),
- SSH_PORT,
- MANDATORY);
-
- result = result && hasFields(
- (ObjectNode) object.get(OPENSTACK),
- ENDPOINT,
- TENANT,
- USER,
- PASSWORD);
-
- result = result && hasFields(
- (ObjectNode) object.get(XOS),
- ENDPOINT,
- USER,
- PASSWORD);
-
- // check all optional fields are valid
- result = result && isTpPort(OVSDB_PORT, OPTIONAL);
-
- if (object.get(PUBLIC_GATEWAYS) != null && object.get(PUBLIC_GATEWAYS).isArray()) {
- for (JsonNode node : object.get(PUBLIC_GATEWAYS)) {
- ObjectNode gateway = (ObjectNode) node;
- result = result && isIpAddress(gateway, GATEWAY_IP, MANDATORY);
- result = result && isMacAddress(gateway, GATEWAY_MAC, MANDATORY);
- }
- }
- return result;
- }
/**
* Returns the set of nodes read from network config.
@@ -157,64 +76,97 @@
* @return set of CordVtnNodeConfig or empty set
*/
public Set<CordVtnNode> cordVtnNodes() {
+
Set<CordVtnNode> nodes = Sets.newHashSet();
+
+ // TODO implement isValid and move these blocks to it
+ JsonNode cordvtnNodes = object.get(CORDVTN_NODES);
+ if (cordvtnNodes == null) {
+ log.debug("No CORD VTN nodes found");
+ return nodes;
+ }
+
JsonNode sshNode = object.get(SSH);
- String ovsdbPort = getConfig(object, OVSDB_PORT);
+ if (sshNode == null) {
+ log.warn("SSH information not found");
+ return nodes;
+ }
- object.get(CORDVTN_NODES).forEach(vtnNode -> {
- NetworkAddress localMgmt = NetworkAddress.valueOf(get(LOCAL_MANAGEMENT_IP, ""));
- NetworkAddress hostsMgmt = NetworkAddress.valueOf(getConfig(vtnNode, HOST_MANAGEMENT_IP));
+ for (JsonNode cordvtnNode : cordvtnNodes) {
+ // TODO implement isValid and move this block to it
+ NetworkAddress hostMgmt = NetworkAddress.valueOf(getConfig(cordvtnNode, HOST_MANAGEMENT_IP));
+ NetworkAddress localMgmt = NetworkAddress.valueOf(getConfig(object, LOCAL_MANAGEMENT_IP));
+ if (hostMgmt.prefix().contains(localMgmt.prefix()) ||
+ localMgmt.prefix().contains(hostMgmt.prefix())) {
+ log.error("hostMamt and localMgmt cannot be overlapped, skip this node");
+ continue;
+ }
+ String hostname = getConfig(cordvtnNode, HOSTNAME);
SshAccessInfo sshInfo = new SshAccessInfo(
- hostsMgmt.ip().getIp4Address(),
+ hostMgmt.ip().getIp4Address(),
TpPort.tpPort(Integer.parseInt(getConfig(sshNode, SSH_PORT))),
- getConfig(sshNode, SSH_USER),
- getConfig(sshNode, SSH_KEY_FILE));
+ getConfig(sshNode, SSH_USER), getConfig(sshNode, SSH_KEY_FILE));
CordVtnNode.Builder nodeBuilder = CordVtnNode.builder()
- .hostname(getConfig(vtnNode, HOSTNAME))
- .hostMgmtIp(hostsMgmt)
+ .hostname(hostname)
+ .hostMgmtIp(hostMgmt)
.localMgmtIp(localMgmt)
- .dataIp(getConfig(vtnNode, DATA_IP))
+ .dataIp(getConfig(cordvtnNode, DATA_IP))
.sshInfo(sshInfo)
- .integrationBridgeId(getConfig(vtnNode, INTEGRATION_BRIDGE_ID))
- .dataIface(getConfig(vtnNode, DATA_IFACE));
+ .integrationBridgeId(getConfig(cordvtnNode, INTEGRATION_BRIDGE_ID))
+ .dataIface(getConfig(cordvtnNode, DATA_IFACE));
+ String ovsdbPort = getConfig(object, OVSDB_PORT);
if (!Strings.isNullOrEmpty(ovsdbPort)) {
nodeBuilder.ovsdbPort(Integer.parseInt(ovsdbPort));
}
- String hostMgmtIface = getConfig(vtnNode, HOST_MANAGEMENT_IFACE);
+ String hostMgmtIface = getConfig(cordvtnNode, HOST_MANAGEMENT_IFACE);
if (!Strings.isNullOrEmpty(hostMgmtIface)) {
nodeBuilder.hostMgmtIface(hostMgmtIface);
}
nodes.add(nodeBuilder.build());
- });
-
+ }
return nodes;
}
/**
- * Gets the specified property as a string.
+ * Returns value of a given path. If the path is missing, show log and return
+ * null.
*
- * @param jsonNode node whose fields to get
- * @param path property to get
- * @return value as a string
+ * @param path path
+ * @return value or null
*/
private String getConfig(JsonNode jsonNode, String path) {
jsonNode = jsonNode.path(path);
- return jsonNode.asText();
+
+ if (jsonNode.isMissingNode()) {
+ log.debug("{} is not configured", path);
+ return null;
+ } else {
+ return jsonNode.asText();
+ }
}
/**
* Returns private network gateway MAC address.
*
- * @return mac address
+ * @return mac address, or null
*/
public MacAddress privateGatewayMac() {
JsonNode jsonNode = object.get(PRIVATE_GATEWAY_MAC);
- return MacAddress.valueOf(jsonNode.asText());
+ if (jsonNode == null) {
+ return null;
+ }
+
+ try {
+ return MacAddress.valueOf(jsonNode.asText());
+ } catch (IllegalArgumentException e) {
+ log.error("Wrong MAC address format {}", jsonNode.asText());
+ return null;
+ }
}
/**
@@ -224,15 +176,21 @@
*/
public Map<IpAddress, MacAddress> publicGateways() {
JsonNode jsonNodes = object.get(PUBLIC_GATEWAYS);
- Map<IpAddress, MacAddress> publicGateways = Maps.newHashMap();
-
if (jsonNodes == null) {
- return publicGateways;
+ return Maps.newHashMap();
}
- jsonNodes.forEach(jsonNode -> publicGateways.put(
- IpAddress.valueOf(jsonNode.path(GATEWAY_IP).asText()),
- MacAddress.valueOf(jsonNode.path(GATEWAY_MAC).asText())));
+ Map<IpAddress, MacAddress> publicGateways = Maps.newHashMap();
+ jsonNodes.forEach(jsonNode -> {
+ try {
+ publicGateways.put(
+ IpAddress.valueOf(jsonNode.path(GATEWAY_IP).asText()),
+ MacAddress.valueOf(jsonNode.path(GATEWAY_MAC).asText()));
+ } catch (IllegalArgumentException | NullPointerException e) {
+ log.error("Wrong address format {}", e.toString());
+ }
+ });
+
return publicGateways;
}
@@ -243,9 +201,18 @@
*/
public XosAccess xosAccess() {
JsonNode jsonNode = object.get(XOS);
- return new XosAccess(getConfig(jsonNode, ENDPOINT),
- getConfig(jsonNode, USER),
- getConfig(jsonNode, PASSWORD));
+ if (jsonNode == null) {
+ return null;
+ }
+
+ try {
+ return new XosAccess(getConfig(jsonNode, ENDPOINT),
+ getConfig(jsonNode, USER),
+ getConfig(jsonNode, PASSWORD));
+ } catch (NullPointerException e) {
+ log.error("Failed to get XOS access");
+ return null;
+ }
}
/**
@@ -255,9 +222,20 @@
*/
public OpenStackAccess openstackAccess() {
JsonNode jsonNode = object.get(OPENSTACK);
- return new OpenStackAccess(jsonNode.path(ENDPOINT).asText(),
- jsonNode.path(TENANT).asText(),
- jsonNode.path(USER).asText(),
- jsonNode.path(PASSWORD).asText());
+ if (jsonNode == null) {
+ log.error("Failed to get OpenStack configurations");
+ return null;
+ }
+
+ try {
+ return new OpenStackAccess(
+ jsonNode.path(ENDPOINT).asText(),
+ jsonNode.path(TENANT).asText(),
+ jsonNode.path(USER).asText(),
+ jsonNode.path(PASSWORD).asText());
+ } catch (IllegalArgumentException | NullPointerException e) {
+ log.error("Failed to get OpenStack configurations");
+ return null;
+ }
}
}