blob: 401dddc1fe8405f31a57e5b4c447841ccc1e53d9 [file] [log] [blame]
Hyunsun Moon44aac662017-02-18 02:07:01 +09001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2017-present Open Networking Foundation
Hyunsun Moon44aac662017-02-18 02:07:01 +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.openstacknetworking.cli;
17
18import com.fasterxml.jackson.core.JsonProcessingException;
19import com.fasterxml.jackson.databind.JsonNode;
20import com.fasterxml.jackson.databind.node.ArrayNode;
Hyunsun Moon44aac662017-02-18 02:07:01 +090021import com.google.common.collect.Lists;
22import org.apache.karaf.shell.commands.Command;
23import org.onosproject.cli.AbstractShellCommand;
24import org.onosproject.openstacknetworking.api.OpenstackNetworkService;
Hyunsun Moon44aac662017-02-18 02:07:01 +090025import org.openstack4j.model.network.Network;
26import org.openstack4j.model.network.Subnet;
27import org.openstack4j.openstack.networking.domain.NeutronNetwork;
28
29import java.util.Comparator;
30import java.util.List;
31import java.util.stream.Collectors;
32
33import static com.fasterxml.jackson.databind.SerializationFeature.INDENT_OUTPUT;
Jian Lieb9f77d2018-02-20 11:25:45 +090034import static org.onosproject.openstacknetworking.util.OpenstackUtil.modelEntityToJson;
Hyunsun Moon44aac662017-02-18 02:07:01 +090035
36/**
37 * Lists OpenStack networks.
38 */
39@Command(scope = "onos", name = "openstack-networks",
40 description = "Lists all OpenStack networks")
41public class OpenstackNetworkListCommand extends AbstractShellCommand {
42
daniel parka792cf72017-04-14 16:25:35 +090043 private static final String FORMAT = "%-40s%-20s%-20s%-20s%-8s";
Hyunsun Moon44aac662017-02-18 02:07:01 +090044
45 @Override
46 protected void execute() {
47 OpenstackNetworkService service = AbstractShellCommand.get(OpenstackNetworkService.class);
48 List<Network> networks = Lists.newArrayList(service.networks());
49 networks.sort(Comparator.comparing(Network::getName));
50
51 if (outputJson()) {
52 try {
53 print("%s", mapper().writeValueAsString(json(networks)));
54 } catch (JsonProcessingException e) {
55 print("Failed to list networks in JSON format");
56 }
57 return;
58 }
59
daniel parka792cf72017-04-14 16:25:35 +090060 print(FORMAT, "ID", "Name", "Network Mode", "VNI", "Subnets");
Hyunsun Moon44aac662017-02-18 02:07:01 +090061 for (Network net: networks) {
62 List<String> subnets = service.subnets().stream()
63 .filter(subnet -> subnet.getNetworkId().equals(net.getId()))
64 .map(Subnet::getCidr)
65 .collect(Collectors.toList());
66 print(FORMAT, net.getId(),
67 net.getName(),
daniel parka792cf72017-04-14 16:25:35 +090068 net.getNetworkType().toString(),
Hyunsun Moon44aac662017-02-18 02:07:01 +090069 net.getProviderSegID(),
70 subnets.isEmpty() ? "" : subnets);
71 }
72 }
73
74 private JsonNode json(List<Network> networks) {
75 ArrayNode result = mapper().enable(INDENT_OUTPUT).createArrayNode();
76 for (Network net: networks) {
Jian Lieb9f77d2018-02-20 11:25:45 +090077 result.add(modelEntityToJson(net, NeutronNetwork.class));
Hyunsun Moon44aac662017-02-18 02:07:01 +090078 }
79 return result;
80 }
Hyunsun Moon44aac662017-02-18 02:07:01 +090081}