blob: 65a77e63b7c3a60783fde67697a37d23d27d679f [file] [log] [blame]
Hyunsun Moon34bbe172016-06-28 19:18:40 -07001/*
2 * Copyright 2016-present 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
17package org.onosproject.openstacknode.cli;
18
19import com.fasterxml.jackson.databind.JsonNode;
20import com.fasterxml.jackson.databind.ObjectMapper;
21import com.fasterxml.jackson.databind.node.ArrayNode;
22import org.apache.karaf.shell.commands.Command;
23import org.onosproject.cli.AbstractShellCommand;
24import org.onosproject.openstacknode.OpenstackNode;
25import org.onosproject.openstacknode.OpenstackNodeService;
26
Hyunsun Moon34bbe172016-06-28 19:18:40 -070027import java.util.List;
28
29/**
30 * Lists all nodes registered to the service.
31 */
32@Command(scope = "onos", name = "openstack-nodes",
33 description = "Lists all nodes registered in OpenStack node service")
34public class OpenstackNodeListCommand extends AbstractShellCommand {
35
Hyunsun Moon36bb3582017-05-08 11:42:06 +090036 private static final String FORMAT = "%-20s%-15s%-24s%-24s%-20s%-20s%-15s%s";
37
Hyunsun Moon34bbe172016-06-28 19:18:40 -070038 @Override
39 protected void execute() {
40 OpenstackNodeService nodeService = AbstractShellCommand.get(OpenstackNodeService.class);
41 List<OpenstackNode> nodes = nodeService.nodes();
Hyunsun Moon36bb3582017-05-08 11:42:06 +090042 nodes.sort(OpenstackNode.OPENSTACK_NODE_COMPARATOR);
Hyunsun Moon34bbe172016-06-28 19:18:40 -070043
44 if (outputJson()) {
Hyunsun Moon05d9b262016-07-03 18:38:44 -070045 print("%s", json(nodes));
Hyunsun Moon34bbe172016-06-28 19:18:40 -070046 } else {
Hyunsun Moon36bb3582017-05-08 11:42:06 +090047 print(FORMAT, "Hostname", "Type", "Integration Bridge", "Router Bridge",
48 "Management IP", "Data IP", "VLAN Intf", "State");
Hyunsun Moon34bbe172016-06-28 19:18:40 -070049 for (OpenstackNode node : nodes) {
Hyunsun Moon36bb3582017-05-08 11:42:06 +090050 print(FORMAT,
Hyunsun Moon34bbe172016-06-28 19:18:40 -070051 node.hostname(),
52 node.type(),
Hyunsun Moon34bbe172016-06-28 19:18:40 -070053 node.intBridge(),
Hyunsun Moon36bb3582017-05-08 11:42:06 +090054 node.routerBridge().isPresent() ? node.routerBridge().get() : "",
55 node.managementIp(),
56 node.dataIp().isPresent() ? node.dataIp().get() : "",
57 node.vlanPort().isPresent() ? node.vlanPort().get() : "",
Hyunsun Moon05d9b262016-07-03 18:38:44 -070058 node.state());
Hyunsun Moon34bbe172016-06-28 19:18:40 -070059 }
60 print("Total %s nodes", nodeService.nodes().size());
61 }
62 }
63
Hyunsun Moon05d9b262016-07-03 18:38:44 -070064 private JsonNode json(List<OpenstackNode> nodes) {
Hyunsun Moon34bbe172016-06-28 19:18:40 -070065 ObjectMapper mapper = new ObjectMapper();
66 ArrayNode result = mapper.createArrayNode();
67 for (OpenstackNode node : nodes) {
68 result.add(mapper.createObjectNode()
69 .put("hostname", node.hostname())
70 .put("type", node.type().name())
Hyunsun Moon36bb3582017-05-08 11:42:06 +090071 .put("intBridge", node.intBridge().toString())
72 .put("routerBridge", node.routerBridge().toString())
Hyunsun Moon34bbe172016-06-28 19:18:40 -070073 .put("managementIp", node.managementIp().toString())
74 .put("dataIp", node.dataIp().toString())
daniel park917beb42017-03-16 18:07:15 +090075 .put("vlanPort", node.vlanPort().toString())
Hyunsun Moon05d9b262016-07-03 18:38:44 -070076 .put("state", node.state().name()));
Hyunsun Moon34bbe172016-06-28 19:18:40 -070077 }
78 return result;
79 }
Hyunsun Moon34bbe172016-06-28 19:18:40 -070080}