Hyunsun Moon
Committed by Gerrit Code Review

CORD-333 Minimized OVSDB provider dependency

With this patch, cordvtn doesn't need to care for OVSDB connection state
anymore. It will make a connection to OVSDB server like befor but just
for node init and disconnect the OVSDB right after init is done.
- Changed OvsdbNode to CordVtnNode
- Removed OVSDB connect/disconnect and added initNode instead
- Changed ovsdb* commands to cordvtn-node* command, and removed
  connect/disconnect command and added init instead
- Fixed to remove OVSDB device from the system after node init or before
  making a connection to work around OVSDB device re-connect issue

Change-Id: If69369a06526947122494b2f7e816e37aa931f2c
...@@ -32,77 +32,82 @@ import static com.google.common.base.Preconditions.checkNotNull; ...@@ -32,77 +32,82 @@ import static com.google.common.base.Preconditions.checkNotNull;
32 */ 32 */
33 public class CordVtnConfig extends Config<ApplicationId> { 33 public class CordVtnConfig extends Config<ApplicationId> {
34 34
35 - public static final String OVSDB_NODES = "ovsdbNodes"; 35 + public static final String CORDVTN_NODES = "nodes";
36 - public static final String HOST = "host"; 36 + public static final String HOSTNAME = "hostname";
37 - public static final String IP = "ip"; 37 + public static final String OVSDB_IP = "ovsdbIp";
38 - public static final String PORT = "port"; 38 + public static final String OVSDB_PORT = "ovsdbPort";
39 public static final String BRIDGE_ID = "bridgeId"; 39 public static final String BRIDGE_ID = "bridgeId";
40 40
41 /** 41 /**
42 - * Returns the set of ovsdb nodes read from network config. 42 + * Returns the set of nodes read from network config.
43 * 43 *
44 - * @return set of OvsdbNodeConfig or null 44 + * @return set of CordVtnNodeConfig or null
45 */ 45 */
46 - public Set<OvsdbNodeConfig> ovsdbNodes() { 46 + public Set<CordVtnNodeConfig> cordVtnNodes() {
47 - Set<OvsdbNodeConfig> ovsdbNodes = Sets.newHashSet(); 47 + Set<CordVtnNodeConfig> nodes = Sets.newHashSet();
48 48
49 - JsonNode nodes = object.get(OVSDB_NODES); 49 + JsonNode jsonNodes = object.get(CORDVTN_NODES);
50 - if (nodes == null) { 50 + if (jsonNodes == null) {
51 return null; 51 return null;
52 } 52 }
53 - nodes.forEach(jsonNode -> ovsdbNodes.add(new OvsdbNodeConfig( 53 + jsonNodes.forEach(jsonNode -> nodes.add(new CordVtnNodeConfig(
54 - jsonNode.path(HOST).asText(), 54 + jsonNode.path(HOSTNAME).asText(),
55 - IpAddress.valueOf(jsonNode.path(IP).asText()), 55 + IpAddress.valueOf(jsonNode.path(OVSDB_IP).asText()),
56 - TpPort.tpPort(jsonNode.path(PORT).asInt()), 56 + TpPort.tpPort(jsonNode.path(OVSDB_PORT).asInt()),
57 DeviceId.deviceId(jsonNode.path(BRIDGE_ID).asText())))); 57 DeviceId.deviceId(jsonNode.path(BRIDGE_ID).asText()))));
58 58
59 - return ovsdbNodes; 59 + return nodes;
60 } 60 }
61 61
62 /** 62 /**
63 - * Configuration for an ovsdb node. 63 + * Configuration for CordVtn node.
64 */ 64 */
65 - public static class OvsdbNodeConfig { 65 + public static class CordVtnNodeConfig {
66 66
67 - private final String host; 67 + private final String hostname;
68 - private final IpAddress ip; 68 + private final IpAddress ovsdbIp;
69 - private final TpPort port; 69 + private final TpPort ovsdbPort;
70 private final DeviceId bridgeId; 70 private final DeviceId bridgeId;
71 71
72 - public OvsdbNodeConfig(String host, IpAddress ip, TpPort port, DeviceId bridgeId) { 72 + public CordVtnNodeConfig(String hostname, IpAddress ovsdbIp, TpPort ovsdbPort, DeviceId bridgeId) {
73 - this.host = checkNotNull(host); 73 + this.hostname = checkNotNull(hostname);
74 - this.ip = checkNotNull(ip); 74 + this.ovsdbIp = checkNotNull(ovsdbIp);
75 - this.port = checkNotNull(port); 75 + this.ovsdbPort = checkNotNull(ovsdbPort);
76 this.bridgeId = checkNotNull(bridgeId); 76 this.bridgeId = checkNotNull(bridgeId);
77 } 77 }
78 78
79 /** 79 /**
80 - * Returns host information of the node. 80 + * Returns hostname of the node.
81 * 81 *
82 - * @return host 82 + * @return hostname
83 */ 83 */
84 - public String host() { 84 + public String hostname() {
85 - return this.host; 85 + return this.hostname;
86 } 86 }
87 87
88 /** 88 /**
89 - * Returns ip address to access ovsdb-server of the node. 89 + * Returns OVSDB ip address of the node.
90 * 90 *
91 - * @return ip address 91 + * @return OVSDB server IP address
92 */ 92 */
93 - public IpAddress ip() { 93 + public IpAddress ovsdbIp() {
94 - return this.ip; 94 + return this.ovsdbIp;
95 } 95 }
96 96
97 /** 97 /**
98 - * Returns port number to access ovsdb-server of the node. 98 + * Returns OVSDB port number of the node.
99 * 99 *
100 * @return port number 100 * @return port number
101 */ 101 */
102 - public TpPort port() { 102 + public TpPort ovsdbPort() {
103 - return this.port; 103 + return this.ovsdbPort;
104 } 104 }
105 105
106 + /**
107 + * Returns integration bridge id of the node.
108 + *
109 + * @return device id
110 + */
106 public DeviceId bridgeId() { 111 public DeviceId bridgeId() {
107 return this.bridgeId; 112 return this.bridgeId;
108 } 113 }
......
...@@ -88,10 +88,10 @@ public class CordVtnConfigManager { ...@@ -88,10 +88,10 @@ public class CordVtnConfigManager {
88 return; 88 return;
89 } 89 }
90 90
91 - config.ovsdbNodes().forEach(node -> { 91 + config.cordVtnNodes().forEach(node -> {
92 - DefaultOvsdbNode ovsdb = new DefaultOvsdbNode( 92 + CordVtnNode cordVtnNode = new CordVtnNode(
93 - node.host(), node.ip(), node.port(), node.bridgeId()); 93 + node.hostname(), node.ovsdbIp(), node.ovsdbPort(), node.bridgeId());
94 - cordVtnService.addNode(ovsdb); 94 + cordVtnService.addNode(cordVtnNode);
95 }); 95 });
96 } 96 }
97 97
......
1 +/*
2 + * Copyright 2014-2015 Open Networking Laboratory
3 + *
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 + */
16 +package org.onosproject.cordvtn;
17 +
18 +import com.google.common.base.MoreObjects;
19 +import org.onlab.packet.IpAddress;
20 +import org.onlab.packet.TpPort;
21 +import org.onosproject.net.DeviceId;
22 +
23 +import java.util.Comparator;
24 +import java.util.Objects;
25 +
26 +import static com.google.common.base.Preconditions.checkNotNull;
27 +
28 +/**
29 + * Representation of a compute infrastructure node for CORD VTN service.
30 + */
31 +public final class CordVtnNode {
32 +
33 + private final String hostname;
34 + private final IpAddress ovsdbIp;
35 + private final TpPort ovsdbPort;
36 + private final DeviceId bridgeId;
37 +
38 + public static final Comparator<CordVtnNode> CORDVTN_NODE_COMPARATOR =
39 + (node1, node2) -> node1.hostname().compareTo(node2.hostname());
40 +
41 + /**
42 + * Creates a new node.
43 + *
44 + * @param hostname hostname
45 + * @param ovsdbIp OVSDB server IP address
46 + * @param ovsdbPort OVSDB server port number
47 + * @param bridgeId integration bridge identifier
48 + */
49 + public CordVtnNode(String hostname, IpAddress ovsdbIp, TpPort ovsdbPort, DeviceId bridgeId) {
50 + this.hostname = checkNotNull(hostname);
51 + this.ovsdbIp = checkNotNull(ovsdbIp);
52 + this.ovsdbPort = checkNotNull(ovsdbPort);
53 + this.bridgeId = checkNotNull(bridgeId);
54 + }
55 +
56 + /**
57 + * Returns the OVSDB server IP address.
58 + *
59 + * @return ip address
60 + */
61 + public IpAddress ovsdbIp() {
62 + return this.ovsdbIp;
63 + }
64 +
65 + /**
66 + * Returns the OVSDB server port number.
67 + *
68 + * @return port number
69 + */
70 + public TpPort ovsdbPort() {
71 + return this.ovsdbPort;
72 + }
73 +
74 + /**
75 + * Returns the hostname.
76 + *
77 + * @return hostname
78 + */
79 + public String hostname() {
80 + return this.hostname;
81 + }
82 +
83 + /**
84 + * Returns the identifier of the integration bridge.
85 + *
86 + * @return device id
87 + */
88 + public DeviceId intBrId() {
89 + return this.bridgeId;
90 + }
91 +
92 + /**
93 + * Returns the identifier of the OVSDB device.
94 + *
95 + * @return device id
96 + */
97 + public DeviceId ovsdbId() {
98 + return DeviceId.deviceId("ovsdb:" + this.ovsdbIp.toString());
99 + }
100 +
101 + @Override
102 + public boolean equals(Object obj) {
103 + if (this == obj) {
104 + return true;
105 + }
106 +
107 + if (obj instanceof CordVtnNode) {
108 + CordVtnNode that = (CordVtnNode) obj;
109 + if (Objects.equals(hostname, that.hostname) &&
110 + Objects.equals(ovsdbIp, that.ovsdbIp) &&
111 + Objects.equals(ovsdbPort, that.ovsdbPort) &&
112 + Objects.equals(bridgeId, that.bridgeId)) {
113 + return true;
114 + }
115 + }
116 + return false;
117 + }
118 +
119 + @Override
120 + public int hashCode() {
121 + return Objects.hash(hostname, ovsdbIp, ovsdbPort);
122 + }
123 +
124 + @Override
125 + public String toString() {
126 + return MoreObjects.toStringHelper(getClass())
127 + .add("host", hostname)
128 + .add("ip", ovsdbIp)
129 + .add("port", ovsdbPort)
130 + .add("bridgeId", bridgeId)
131 + .toString();
132 + }
133 +}
...@@ -15,8 +15,6 @@ ...@@ -15,8 +15,6 @@
15 */ 15 */
16 package org.onosproject.cordvtn; 16 package org.onosproject.cordvtn;
17 17
18 -import org.onosproject.net.DeviceId;
19 -
20 import java.util.List; 18 import java.util.List;
21 19
22 /** 20 /**
...@@ -28,30 +26,23 @@ public interface CordVtnService { ...@@ -28,30 +26,23 @@ public interface CordVtnService {
28 /** 26 /**
29 * Adds a new node to the service. 27 * Adds a new node to the service.
30 * 28 *
31 - * @param ovsdb ovsdb node 29 + * @param node cordvtn node
32 */ 30 */
33 - void addNode(OvsdbNode ovsdb); 31 + void addNode(CordVtnNode node);
34 32
35 /** 33 /**
36 * Deletes a node from the service. 34 * Deletes a node from the service.
37 * 35 *
38 - * @param ovsdb ovsdb node 36 + * @param node cordvtn node
39 - */
40 - void deleteNode(OvsdbNode ovsdb);
41 -
42 - /**
43 - * Connect to a node.
44 - *
45 - * @param ovsdb ovsdb node
46 */ 37 */
47 - void connect(OvsdbNode ovsdb); 38 + void deleteNode(CordVtnNode node);
48 39
49 /** 40 /**
50 - * Disconnect a node. 41 + * Initiates node to serve virtual tenant network.
51 * 42 *
52 - * @param ovsdb ovsdb node 43 + * @param node cordvtn node
53 */ 44 */
54 - void disconnect(OvsdbNode ovsdb); 45 + void initNode(CordVtnNode node);
55 46
56 /** 47 /**
57 * Returns the number of the nodes known to the service. 48 * Returns the number of the nodes known to the service.
...@@ -61,25 +52,17 @@ public interface CordVtnService { ...@@ -61,25 +52,17 @@ public interface CordVtnService {
61 int getNodeCount(); 52 int getNodeCount();
62 53
63 /** 54 /**
64 - * Returns OvsdbNode with given device id. 55 + * Returns node initialization state.
65 - *
66 - * @param deviceId device id
67 - * @return ovsdb node
68 - */
69 - OvsdbNode getNode(DeviceId deviceId);
70 -
71 - /**
72 - * Returns connection state of the node.
73 * 56 *
74 - * @param ovsdb ovsdb node 57 + * @param node cordvtn node
75 - * @return true if the node is connected, false otherwise 58 + * @return true if initial node setup is completed, otherwise false
76 */ 59 */
77 - boolean isNodeConnected(OvsdbNode ovsdb); 60 + boolean getNodeInitState(CordVtnNode node);
78 61
79 /** 62 /**
80 * Returns all nodes known to the service. 63 * Returns all nodes known to the service.
81 * 64 *
82 * @return list of nodes 65 * @return list of nodes
83 */ 66 */
84 - List<OvsdbNode> getNodes(); 67 + List<CordVtnNode> getNodes();
85 } 68 }
......
1 -/*
2 - * Copyright 2014-2015 Open Networking Laboratory
3 - *
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 - */
16 -package org.onosproject.cordvtn;
17 -
18 -import com.google.common.base.MoreObjects;
19 -import org.onlab.packet.IpAddress;
20 -import org.onlab.packet.TpPort;
21 -import org.onosproject.net.DeviceId;
22 -
23 -import java.util.Objects;
24 -
25 -/**
26 - * OvsdbNode implementation.
27 - */
28 -public class DefaultOvsdbNode implements OvsdbNode {
29 -
30 - private final String host;
31 - private final IpAddress ip;
32 - private final TpPort port;
33 - private final DeviceId brId;
34 -
35 - public DefaultOvsdbNode(String host, IpAddress ip, TpPort port, DeviceId brId) {
36 - this.host = host;
37 - this.ip = ip;
38 - this.port = port;
39 - this.brId = brId;
40 - }
41 -
42 - @Override
43 - public IpAddress ip() {
44 - return this.ip;
45 - }
46 -
47 - @Override
48 - public TpPort port() {
49 - return this.port;
50 - }
51 -
52 - @Override
53 - public String host() {
54 - return this.host;
55 - }
56 -
57 - @Override
58 - public DeviceId intBrId() {
59 - return this.brId;
60 - }
61 -
62 - @Override
63 - public DeviceId deviceId() {
64 - return DeviceId.deviceId("ovsdb:" + this.ip.toString());
65 - }
66 -
67 - @Override
68 - public boolean equals(Object o) {
69 - if (this == o) {
70 - return true;
71 - }
72 -
73 - if (o instanceof DefaultOvsdbNode) {
74 - DefaultOvsdbNode that = (DefaultOvsdbNode) o;
75 - if (this.host.equals(that.host) &&
76 - this.ip.equals(that.ip) &&
77 - this.port.equals(that.port) &&
78 - this.brId.equals(that.brId)) {
79 - return true;
80 - }
81 - }
82 - return false;
83 - }
84 -
85 - @Override
86 - public int hashCode() {
87 - return Objects.hash(host, ip, port);
88 - }
89 -
90 - @Override
91 - public String toString() {
92 - return MoreObjects.toStringHelper(getClass())
93 - .add("host", host)
94 - .add("ip", ip)
95 - .add("port", port)
96 - .add("bridgeId", brId)
97 - .toString();
98 - }
99 -}
1 -/*
2 - * Copyright 2014-2015 Open Networking Laboratory
3 - *
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 - */
16 -package org.onosproject.cordvtn;
17 -
18 -import org.onlab.packet.IpAddress;
19 -import org.onlab.packet.TpPort;
20 -import org.onosproject.net.DeviceId;
21 -
22 -import java.util.Comparator;
23 -
24 -/**
25 - * Representation of a node with ovsdb server.
26 - */
27 -public interface OvsdbNode {
28 -
29 - Comparator<OvsdbNode> OVSDB_NODE_COMPARATOR = new Comparator<OvsdbNode>() {
30 - @Override
31 - public int compare(OvsdbNode ovsdb1, OvsdbNode ovsdb2) {
32 - return ovsdb1.host().compareTo(ovsdb2.host());
33 - }
34 - };
35 -
36 - /**
37 - * Returns the IP address of the ovsdb server.
38 - *
39 - * @return ip address
40 - */
41 - IpAddress ip();
42 -
43 - /**
44 - * Returns the port number of the ovsdb server.
45 - *
46 - * @return port number
47 - */
48 - TpPort port();
49 -
50 - /**
51 - * Returns the host information of the ovsdb server.
52 - * It could be hostname or ip address.
53 - *
54 - * @return host
55 - */
56 - String host();
57 -
58 - /**
59 - * Returns the device id of the ovsdb server.
60 - *
61 - * @return device id
62 - */
63 - DeviceId deviceId();
64 -
65 - /**
66 - * Returns the device id of the integration bridge associated with the node.
67 - *
68 - * @return device id
69 - */
70 - DeviceId intBrId();
71 -}
...@@ -22,27 +22,26 @@ import org.onlab.packet.IpAddress; ...@@ -22,27 +22,26 @@ import org.onlab.packet.IpAddress;
22 import org.onlab.packet.TpPort; 22 import org.onlab.packet.TpPort;
23 import org.onosproject.cli.AbstractShellCommand; 23 import org.onosproject.cli.AbstractShellCommand;
24 import org.onosproject.cordvtn.CordVtnService; 24 import org.onosproject.cordvtn.CordVtnService;
25 -import org.onosproject.cordvtn.DefaultOvsdbNode; 25 +import org.onosproject.cordvtn.CordVtnNode;
26 -import org.onosproject.cordvtn.OvsdbNode;
27 import org.onosproject.net.DeviceId; 26 import org.onosproject.net.DeviceId;
28 27
29 import static com.google.common.base.Preconditions.checkArgument; 28 import static com.google.common.base.Preconditions.checkArgument;
30 29
31 /** 30 /**
32 - * Adds a new OVSDB nodes. 31 + * Adds a new node to the service.
33 */ 32 */
34 -@Command(scope = "onos", name = "ovsdb-add", 33 +@Command(scope = "onos", name = "cordvtn-node-add",
35 - description = "Adds a new OVSDB node to cordvtn") 34 + description = "Adds a new node to CORD VTN service")
36 -public class OvsdbNodeAddCommand extends AbstractShellCommand { 35 +public class CordVtnNodeAddCommand extends AbstractShellCommand {
37 36
38 - @Argument(index = 0, name = "host", description = "Hostname or IP", 37 + @Argument(index = 0, name = "hostname", description = "Hostname",
39 required = true, multiValued = false) 38 required = true, multiValued = false)
40 - private String host = null; 39 + private String hostname = null;
41 40
42 - @Argument(index = 1, name = "address", 41 + @Argument(index = 1, name = "ovsdb",
43 description = "OVSDB server listening address (ip:port)", 42 description = "OVSDB server listening address (ip:port)",
44 required = true, multiValued = false) 43 required = true, multiValued = false)
45 - private String address = null; 44 + private String ovsdb = null;
46 45
47 @Argument(index = 2, name = "bridgeId", 46 @Argument(index = 2, name = "bridgeId",
48 description = "Device ID of integration bridge", 47 description = "Device ID of integration bridge",
...@@ -51,15 +50,15 @@ public class OvsdbNodeAddCommand extends AbstractShellCommand { ...@@ -51,15 +50,15 @@ public class OvsdbNodeAddCommand extends AbstractShellCommand {
51 50
52 @Override 51 @Override
53 protected void execute() { 52 protected void execute() {
54 - checkArgument(address.contains(":"), "address should be ip:port format"); 53 + checkArgument(ovsdb.contains(":"), "OVSDB address should be ip:port format");
55 checkArgument(bridgeId.startsWith("of:"), "bridgeId should be of:dpid format"); 54 checkArgument(bridgeId.startsWith("of:"), "bridgeId should be of:dpid format");
56 55
57 CordVtnService service = AbstractShellCommand.get(CordVtnService.class); 56 CordVtnService service = AbstractShellCommand.get(CordVtnService.class);
58 - String[] ipPort = address.split(":"); 57 + String[] ipPort = ovsdb.split(":");
59 - OvsdbNode ovsdb = new DefaultOvsdbNode(host, 58 + CordVtnNode node = new CordVtnNode(hostname,
60 - IpAddress.valueOf(ipPort[0]), 59 + IpAddress.valueOf(ipPort[0]),
61 - TpPort.tpPort(Integer.parseInt(ipPort[1])), 60 + TpPort.tpPort(Integer.parseInt(ipPort[1])),
62 - DeviceId.deviceId(bridgeId)); 61 + DeviceId.deviceId(bridgeId));
63 - service.addNode(ovsdb); 62 + service.addNode(node);
64 } 63 }
65 } 64 }
......
...@@ -20,38 +20,38 @@ import org.apache.karaf.shell.commands.Argument; ...@@ -20,38 +20,38 @@ import org.apache.karaf.shell.commands.Argument;
20 import org.apache.karaf.shell.commands.Command; 20 import org.apache.karaf.shell.commands.Command;
21 import org.onosproject.cli.AbstractShellCommand; 21 import org.onosproject.cli.AbstractShellCommand;
22 import org.onosproject.cordvtn.CordVtnService; 22 import org.onosproject.cordvtn.CordVtnService;
23 -import org.onosproject.cordvtn.OvsdbNode; 23 +import org.onosproject.cordvtn.CordVtnNode;
24 24
25 import java.util.NoSuchElementException; 25 import java.util.NoSuchElementException;
26 26
27 /** 27 /**
28 - * Deletes OVSDB nodes from cordvtn. 28 + * Deletes nodes from the service.
29 */ 29 */
30 -@Command(scope = "onos", name = "ovsdb-delete", 30 +@Command(scope = "onos", name = "cordvtn-node-delete",
31 - description = "Deletes OVSDB nodes from cordvtn") 31 + description = "Deletes nodes from CORD VTN service")
32 -public class OvsdbNodeDeleteCommand extends AbstractShellCommand { 32 +public class CordVtnNodeDeleteCommand extends AbstractShellCommand {
33 33
34 - @Argument(index = 0, name = "hosts", description = "Hostname(s) or IP(s)", 34 + @Argument(index = 0, name = "hostnames", description = "Hostname(s)",
35 required = true, multiValued = true) 35 required = true, multiValued = true)
36 - private String[] hosts = null; 36 + private String[] hostnames = null;
37 37
38 @Override 38 @Override
39 protected void execute() { 39 protected void execute() {
40 CordVtnService service = AbstractShellCommand.get(CordVtnService.class); 40 CordVtnService service = AbstractShellCommand.get(CordVtnService.class);
41 41
42 - for (String host : hosts) { 42 + for (String hostname : hostnames) {
43 - OvsdbNode ovsdb; 43 + CordVtnNode node;
44 try { 44 try {
45 - ovsdb = service.getNodes().stream() 45 + node = service.getNodes()
46 - .filter(node -> node.host().equals(host)) 46 + .stream()
47 + .filter(n -> n.hostname().equals(hostname))
47 .findFirst().get(); 48 .findFirst().get();
48 -
49 } catch (NoSuchElementException e) { 49 } catch (NoSuchElementException e) {
50 - print("Unable to find %s", host); 50 + print("Unable to find %s", hostname);
51 continue; 51 continue;
52 } 52 }
53 53
54 - service.deleteNode(ovsdb); 54 + service.deleteNode(node);
55 } 55 }
56 } 56 }
57 } 57 }
......
...@@ -20,41 +20,38 @@ import org.apache.karaf.shell.commands.Argument; ...@@ -20,41 +20,38 @@ import org.apache.karaf.shell.commands.Argument;
20 import org.apache.karaf.shell.commands.Command; 20 import org.apache.karaf.shell.commands.Command;
21 import org.onosproject.cli.AbstractShellCommand; 21 import org.onosproject.cli.AbstractShellCommand;
22 import org.onosproject.cordvtn.CordVtnService; 22 import org.onosproject.cordvtn.CordVtnService;
23 -import org.onosproject.cordvtn.OvsdbNode; 23 +import org.onosproject.cordvtn.CordVtnNode;
24 24
25 import java.util.NoSuchElementException; 25 import java.util.NoSuchElementException;
26 26
27 /** 27 /**
28 - * Connects to OVSDBs. 28 + * Initializes nodes for CordVtn service.
29 */ 29 */
30 -@Command(scope = "onos", name = "ovsdb-connect", 30 +@Command(scope = "onos", name = "cordvtn-node-init",
31 - description = "Connects to OVSDBs") 31 + description = "Initializes nodes for CORD VTN service")
32 -public class OvsdbNodeConnectCommand extends AbstractShellCommand { 32 +public class CordVtnNodeInitCommand extends AbstractShellCommand {
33 33
34 - @Argument(index = 0, name = "hosts", description = "Hostname(s) or IP(s)", 34 + @Argument(index = 0, name = "hostnames", description = "Hostname(s)",
35 required = true, multiValued = true) 35 required = true, multiValued = true)
36 - private String[] hosts = null; 36 + private String[] hostnames = null;
37 37
38 @Override 38 @Override
39 protected void execute() { 39 protected void execute() {
40 CordVtnService service = AbstractShellCommand.get(CordVtnService.class); 40 CordVtnService service = AbstractShellCommand.get(CordVtnService.class);
41 41
42 - for (String host : hosts) { 42 + for (String hostname : hostnames) {
43 - OvsdbNode ovsdb; 43 + CordVtnNode node;
44 try { 44 try {
45 - ovsdb = service.getNodes().stream() 45 + node = service.getNodes()
46 - .filter(node -> node.host().equals(host)) 46 + .stream()
47 + .filter(n -> n.hostname().equals(hostname))
47 .findFirst().get(); 48 .findFirst().get();
48 } catch (NoSuchElementException e) { 49 } catch (NoSuchElementException e) {
49 - print("Unable to find %s", host); 50 + print("Unable to find %s", hostname);
50 continue; 51 continue;
51 } 52 }
52 53
53 - if (service.isNodeConnected(ovsdb)) { 54 + service.initNode(node);
54 - print("OVSDB %s is already in connected state, do nothing", host);
55 - } else {
56 - service.connect(ovsdb);
57 - }
58 } 55 }
59 } 56 }
60 } 57 }
......
...@@ -22,53 +22,53 @@ import com.fasterxml.jackson.databind.node.ArrayNode; ...@@ -22,53 +22,53 @@ import com.fasterxml.jackson.databind.node.ArrayNode;
22 import org.apache.karaf.shell.commands.Command; 22 import org.apache.karaf.shell.commands.Command;
23 import org.onosproject.cli.AbstractShellCommand; 23 import org.onosproject.cli.AbstractShellCommand;
24 import org.onosproject.cordvtn.CordVtnService; 24 import org.onosproject.cordvtn.CordVtnService;
25 -import org.onosproject.cordvtn.OvsdbNode; 25 +import org.onosproject.cordvtn.CordVtnNode;
26 26
27 import java.util.Collections; 27 import java.util.Collections;
28 import java.util.List; 28 import java.util.List;
29 29
30 /** 30 /**
31 - * Lists all OVSDB nodes. 31 + * Lists all nodes registered to the service.
32 */ 32 */
33 -@Command(scope = "onos", name = "ovsdbs", 33 +@Command(scope = "onos", name = "cordvtn-nodes",
34 - description = "Lists all OVSDB nodes registered in cordvtn application") 34 + description = "Lists all nodes registered in CORD VTN service")
35 -public class OvsdbNodeListCommand extends AbstractShellCommand { 35 +public class CordVtnNodeListCommand extends AbstractShellCommand {
36 36
37 @Override 37 @Override
38 protected void execute() { 38 protected void execute() {
39 CordVtnService service = AbstractShellCommand.get(CordVtnService.class); 39 CordVtnService service = AbstractShellCommand.get(CordVtnService.class);
40 - List<OvsdbNode> ovsdbs = service.getNodes(); 40 + List<CordVtnNode> nodes = service.getNodes();
41 - Collections.sort(ovsdbs, OvsdbNode.OVSDB_NODE_COMPARATOR); 41 + Collections.sort(nodes, CordVtnNode.CORDVTN_NODE_COMPARATOR);
42 42
43 if (outputJson()) { 43 if (outputJson()) {
44 - print("%s", json(service, ovsdbs)); 44 + print("%s", json(service, nodes));
45 } else { 45 } else {
46 - for (OvsdbNode ovsdb : ovsdbs) { 46 + for (CordVtnNode node : nodes) {
47 - print("host=%s, address=%s, br-int=%s, state=%s", 47 + print("hostname=%s, ovsdb=%s, br-int=%s, init=%s",
48 - ovsdb.host(), 48 + node.hostname(),
49 - ovsdb.ip().toString() + ":" + ovsdb.port().toString(), 49 + node.ovsdbIp().toString() + ":" + node.ovsdbPort().toString(),
50 - ovsdb.intBrId().toString(), 50 + node.intBrId().toString(),
51 - getState(service, ovsdb)); 51 + getState(service, node));
52 } 52 }
53 print("Total %s nodes", service.getNodeCount()); 53 print("Total %s nodes", service.getNodeCount());
54 } 54 }
55 } 55 }
56 56
57 - private JsonNode json(CordVtnService service, List<OvsdbNode> ovsdbs) { 57 + private JsonNode json(CordVtnService service, List<CordVtnNode> nodes) {
58 ObjectMapper mapper = new ObjectMapper(); 58 ObjectMapper mapper = new ObjectMapper();
59 ArrayNode result = mapper.createArrayNode(); 59 ArrayNode result = mapper.createArrayNode();
60 - for (OvsdbNode ovsdb : ovsdbs) { 60 + for (CordVtnNode node : nodes) {
61 - String ipPort = ovsdb.ip().toString() + ":" + ovsdb.port().toString(); 61 + String ipPort = node.ovsdbIp().toString() + ":" + node.ovsdbPort().toString();
62 result.add(mapper.createObjectNode() 62 result.add(mapper.createObjectNode()
63 - .put("host", ovsdb.host()) 63 + .put("hostname", node.hostname())
64 - .put("address", ipPort) 64 + .put("ovsdb", ipPort)
65 - .put("brInt", ovsdb.intBrId().toString()) 65 + .put("brInt", node.intBrId().toString())
66 - .put("state", getState(service, ovsdb))); 66 + .put("init", getState(service, node)));
67 } 67 }
68 return result; 68 return result;
69 } 69 }
70 70
71 - private String getState(CordVtnService service, OvsdbNode ovsdb) { 71 + private String getState(CordVtnService service, CordVtnNode node) {
72 - return service.isNodeConnected(ovsdb) ? "CONNECTED" : "DISCONNECTED"; 72 + return service.getNodeInitState(node) ? "COMPLETE" : "INCOMPLETE";
73 } 73 }
74 } 74 }
......
1 -/*
2 - * Copyright 2015 Open Networking Laboratory
3 - *
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 - */
16 -
17 -package org.onosproject.cordvtn.cli;
18 -
19 -import org.apache.karaf.shell.commands.Argument;
20 -import org.apache.karaf.shell.commands.Command;
21 -import org.onosproject.cli.AbstractShellCommand;
22 -import org.onosproject.cordvtn.CordVtnService;
23 -import org.onosproject.cordvtn.OvsdbNode;
24 -
25 -import java.util.NoSuchElementException;
26 -
27 -/**
28 - * Disconnects OVSDBs.
29 - */
30 -@Command(scope = "onos", name = "ovsdb-disconnect",
31 - description = "Disconnects OVSDBs")
32 -public class OvsdbNodeDisconnectCommand extends AbstractShellCommand {
33 -
34 - @Argument(index = 0, name = "hosts", description = "Hostname(s) or IP(s)",
35 - required = true, multiValued = true)
36 - private String[] hosts = null;
37 -
38 - @Override
39 - protected void execute() {
40 - CordVtnService service = AbstractShellCommand.get(CordVtnService.class);
41 -
42 - for (String host : hosts) {
43 - OvsdbNode ovsdb;
44 - try {
45 - ovsdb = service.getNodes().stream()
46 - .filter(node -> node.host().equals(host))
47 - .findFirst().get();
48 - } catch (NoSuchElementException e) {
49 - print("Unable to find %s", host);
50 - continue;
51 - }
52 -
53 - if (!service.isNodeConnected(ovsdb)) {
54 - print("OVSDB %s is already in disconnected state, do nothing", host);
55 - } else {
56 - service.disconnect(ovsdb);
57 - }
58 - }
59 - }
60 -}
...@@ -17,19 +17,16 @@ ...@@ -17,19 +17,16 @@
17 17
18 <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0"> 18 <command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0">
19 <command> 19 <command>
20 - <action class="org.onosproject.cordvtn.cli.OvsdbNodeListCommand"/> 20 + <action class="org.onosproject.cordvtn.cli.CordVtnNodeListCommand"/>
21 </command> 21 </command>
22 <command> 22 <command>
23 - <action class="org.onosproject.cordvtn.cli.OvsdbNodeAddCommand"/> 23 + <action class="org.onosproject.cordvtn.cli.CordVtnNodeAddCommand"/>
24 </command> 24 </command>
25 <command> 25 <command>
26 - <action class="org.onosproject.cordvtn.cli.OvsdbNodeDeleteCommand"/> 26 + <action class="org.onosproject.cordvtn.cli.CordVtnNodeDeleteCommand"/>
27 </command> 27 </command>
28 <command> 28 <command>
29 - <action class="org.onosproject.cordvtn.cli.OvsdbNodeConnectCommand"/> 29 + <action class="org.onosproject.cordvtn.cli.CordVtnNodeInitCommand"/>
30 - </command>
31 - <command>
32 - <action class="org.onosproject.cordvtn.cli.OvsdbNodeDisconnectCommand"/>
33 </command> 30 </command>
34 </command-bundle> 31 </command-bundle>
35 </blueprint> 32 </blueprint>
......