blob: ea2d30d54b4f31e2257dc02a25816a2cc7c53a03 [file] [log] [blame]
Daniel Parka7d6e9f2016-01-18 17:54:14 +09001/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2016-present Open Networking Laboratory
Daniel Parka7d6e9f2016-01-18 17:54:14 +09003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package org.onosproject.openstacknode;
17
18
19import com.fasterxml.jackson.databind.JsonNode;
Hyunsun Moon34bbe172016-06-28 19:18:40 -070020import com.fasterxml.jackson.databind.node.ObjectNode;
Daniel Parka7d6e9f2016-01-18 17:54:14 +090021import com.google.common.collect.Sets;
Hyunsun Moon34bbe172016-06-28 19:18:40 -070022import org.onlab.packet.IpAddress;
Daniel Parka7d6e9f2016-01-18 17:54:14 +090023import org.onosproject.core.ApplicationId;
24import org.onosproject.net.DeviceId;
Hyunsun Moon34bbe172016-06-28 19:18:40 -070025import org.onosproject.openstacknode.OpenstackNodeService.NodeType;
Daniel Parka7d6e9f2016-01-18 17:54:14 +090026import java.util.Set;
27import org.onosproject.net.config.Config;
Hyunsun Moon34bbe172016-06-28 19:18:40 -070028
29import static org.onosproject.net.config.Config.FieldPresence.MANDATORY;
30import static org.onosproject.openstacknode.OpenstackNodeService.NodeType.GATEWAY;
Daniel Parka7d6e9f2016-01-18 17:54:14 +090031
32/**
33 * Configuration object for OpensatckNode service.
34 */
Hyunsun Moon34bbe172016-06-28 19:18:40 -070035public final class OpenstackNodeConfig extends Config<ApplicationId> {
Daniel Parka7d6e9f2016-01-18 17:54:14 +090036
Hyunsun Moon34bbe172016-06-28 19:18:40 -070037 private static final String NODES = "nodes";
38 private static final String HOST_NAME = "hostname";
39 private static final String TYPE = "type";
40 private static final String MANAGEMENT_IP = "managementIp";
41 private static final String DATA_IP = "dataIp";
42 private static final String INTEGRATION_BRIDGE = "integrationBridge";
43 private static final String ROUTER_BRIDGE = "routerBridge";
Daniel Parka7d6e9f2016-01-18 17:54:14 +090044
Hyunsun Moon34bbe172016-06-28 19:18:40 -070045 @Override
46 public boolean isValid() {
47 boolean result = hasOnlyFields(NODES);
Daniel Parka7d6e9f2016-01-18 17:54:14 +090048
Hyunsun Moon34bbe172016-06-28 19:18:40 -070049 if (object.get(NODES) == null || object.get(NODES).size() < 1) {
50 final String msg = "No node is present";
51 throw new IllegalArgumentException(msg);
52 }
53
54 for (JsonNode node : object.get(NODES)) {
55 ObjectNode osNode = (ObjectNode) node;
56 result &= hasOnlyFields(osNode,
57 HOST_NAME,
58 TYPE,
59 MANAGEMENT_IP,
60 DATA_IP,
61 INTEGRATION_BRIDGE,
62 ROUTER_BRIDGE
63 );
64
65 result &= isString(osNode, HOST_NAME, MANDATORY);
66 result &= isString(osNode, TYPE, MANDATORY);
67 result &= isIpAddress(osNode, MANAGEMENT_IP, MANDATORY);
68 result &= result && isIpAddress(osNode, DATA_IP, MANDATORY);
69 result &= isString(osNode, INTEGRATION_BRIDGE, MANDATORY);
70
71 DeviceId.deviceId(osNode.get(INTEGRATION_BRIDGE).asText());
72 NodeType.valueOf(osNode.get(TYPE).asText());
73
74 if (osNode.get(TYPE).asText().equals(GATEWAY.name())) {
75 result &= isString(osNode, ROUTER_BRIDGE, MANDATORY);
76 DeviceId.deviceId(osNode.get(ROUTER_BRIDGE).asText());
77 }
78 }
79 return result;
80 }
Daniel Parka7d6e9f2016-01-18 17:54:14 +090081
82 /**
83 * Returns the set of nodes read from network config.
84 *
Hyunsun Moon34bbe172016-06-28 19:18:40 -070085 * @return set of openstack nodes
Daniel Parka7d6e9f2016-01-18 17:54:14 +090086 */
87 public Set<OpenstackNode> openstackNodes() {
Daniel Parka7d6e9f2016-01-18 17:54:14 +090088 Set<OpenstackNode> nodes = Sets.newHashSet();
89
Hyunsun Moon34bbe172016-06-28 19:18:40 -070090 for (JsonNode node : object.get(NODES)) {
91 NodeType type = NodeType.valueOf(get(node, TYPE));
92 OpenstackNode.Builder nodeBuilder = OpenstackNode.builder()
93 .integrationBridge(DeviceId.deviceId(get(node, INTEGRATION_BRIDGE)))
94 .dataIp(IpAddress.valueOf(get(node, DATA_IP)))
95 .managementIp(IpAddress.valueOf(get(node, MANAGEMENT_IP)))
96 .type(type)
97 .hostname(get(node, HOST_NAME));
Daniel Parka7d6e9f2016-01-18 17:54:14 +090098
Hyunsun Moon34bbe172016-06-28 19:18:40 -070099 if (type.equals(GATEWAY)) {
100 nodeBuilder.routerBridge(DeviceId.deviceId(get(node, ROUTER_BRIDGE)));
Daniel Parka7d6e9f2016-01-18 17:54:14 +0900101 }
Hyunsun Moon34bbe172016-06-28 19:18:40 -0700102 nodes.add(nodeBuilder.build());
103 }
Daniel Parka7d6e9f2016-01-18 17:54:14 +0900104 return nodes;
105 }
Hyunsun Moon34bbe172016-06-28 19:18:40 -0700106
107 private String get(JsonNode jsonNode, String path) {
108 return jsonNode.get(path).asText();
109 }
Daniel Parka7d6e9f2016-01-18 17:54:14 +0900110}