blob: 54ed75a9963adfd76bedd60aba1e4969744b3256 [file] [log] [blame]
Hyunsun Moon6066bd32016-10-24 15:35:34 -07001/*
Brian O'Connor80dff972017-08-03 22:46:30 -07002 * Copyright 2016-present Open Networking Foundation
Hyunsun Moon6066bd32016-10-24 15:35:34 -07003 *
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.opencord.cordvtn.cli;
17
18import com.fasterxml.jackson.core.JsonProcessingException;
19import com.fasterxml.jackson.databind.JsonNode;
20import com.fasterxml.jackson.databind.node.ArrayNode;
21import com.google.common.base.Strings;
22import com.google.common.collect.Lists;
23import org.apache.karaf.shell.commands.Argument;
24import org.apache.karaf.shell.commands.Command;
25import org.onosproject.cli.AbstractShellCommand;
Hyunsun Moon187bf532017-01-19 10:57:40 +090026import org.opencord.cordvtn.api.core.ServiceNetworkService;
27import org.opencord.cordvtn.api.net.ServicePort;
Hyunsun Moon6066bd32016-10-24 15:35:34 -070028
Hyunsun Moon851e57f2017-02-23 19:38:40 +090029import java.util.Comparator;
Hyunsun Moon6066bd32016-10-24 15:35:34 -070030import java.util.List;
31import java.util.stream.Collectors;
32
33import static com.fasterxml.jackson.databind.SerializationFeature.INDENT_OUTPUT;
34
35/**
36 * Lists VTN networks.
37 */
38@Command(scope = "onos", name = "cordvtn-ports",
39 description = "Lists all VTN ports")
40public class CordVtnPortListCommand extends AbstractShellCommand {
41
Jonathan Hart72630b82017-10-13 10:43:32 -070042 private static final String FORMAT = "%-40s%-40s%-30s%-20s%-18s%-10s%s";
Hyunsun Moon6066bd32016-10-24 15:35:34 -070043
44 @Argument(name = "networkId", description = "Network ID")
45 private String networkId = null;
46
47 @Override
48 protected void execute() {
Hyunsun Moon187bf532017-01-19 10:57:40 +090049 ServiceNetworkService service = AbstractShellCommand.get(ServiceNetworkService.class);
Hyunsun Moon6066bd32016-10-24 15:35:34 -070050
Hyunsun Moon187bf532017-01-19 10:57:40 +090051 List<ServicePort> ports = Lists.newArrayList(service.servicePorts());
Hyunsun Moon851e57f2017-02-23 19:38:40 +090052 ports.sort(Comparator.comparing(port -> port.networkId().id()));
Hyunsun Moona0e8b662016-11-21 12:32:01 -080053 if (!Strings.isNullOrEmpty(networkId)) {
Hyunsun Moon187bf532017-01-19 10:57:40 +090054 ports.removeIf(port -> !port.networkId().id().equals(networkId));
Hyunsun Moon6066bd32016-10-24 15:35:34 -070055 }
56
57 if (outputJson()) {
58 try {
59 print("%s", mapper().writeValueAsString(json(ports)));
60 } catch (JsonProcessingException e) {
61 print("Failed to list networks in JSON format");
62 }
63 } else {
Jonathan Hart72630b82017-10-13 10:43:32 -070064 print(FORMAT, "ID", "Network ID", "Name", "MAC", "IP", "VLAN", "WAN IPs");
Hyunsun Moon187bf532017-01-19 10:57:40 +090065 for (ServicePort port: ports) {
Hyunsun Moon6066bd32016-10-24 15:35:34 -070066 List<String> floatingIps = port.addressPairs().stream()
67 .map(ip -> ip.ip().toString())
68 .collect(Collectors.toList());
69 print(FORMAT, port.id(),
Jonathan Hart72630b82017-10-13 10:43:32 -070070 port.networkId(),
Hyunsun Moon5510e342017-02-23 19:41:00 +090071 port.name(),
72 port.mac(),
73 port.ip(),
74 port.vlanId() != null ? port.vlanId() : "",
75 floatingIps.isEmpty() ? "" : floatingIps);
Hyunsun Moon6066bd32016-10-24 15:35:34 -070076 }
77 }
78 }
79
Hyunsun Moon187bf532017-01-19 10:57:40 +090080 private JsonNode json(List<ServicePort> ports) {
Hyunsun Moon6066bd32016-10-24 15:35:34 -070081 ArrayNode result = mapper().enable(INDENT_OUTPUT).createArrayNode();
Hyunsun Moon187bf532017-01-19 10:57:40 +090082 for (ServicePort port: ports) {
Hyunsun Moon6066bd32016-10-24 15:35:34 -070083 ArrayNode addrPairs = mapper().createArrayNode();
84 port.addressPairs().forEach(pair -> addrPairs.add(
85 mapper().createObjectNode()
86 .put("ip", pair.ip().toString())
87 .put("mac", pair.mac().toString())));
88
89 result.add(mapper().createObjectNode()
Hyunsun Moon5510e342017-02-23 19:41:00 +090090 .put("id", port.id().id())
91 .put("name", port.name())
92 .put("networkId", port.networkId().id())
93 .put("mac", port.mac().toString())
94 .put("ip", port.ip().toString())
95 .put("vlan", port.vlanId() != null ?
96 port.vlanId().toString() : null)
97 .set("addressPairs", addrPairs));
Hyunsun Moon6066bd32016-10-24 15:35:34 -070098 }
99 return result;
100 }
101}