blob: 3a683562f7316aae6e2144be162ff706431f1c80 [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
Jian Lif1efbe52018-07-17 23:20:16 +090018import com.fasterxml.jackson.databind.ObjectMapper;
Hyunsun Moon44aac662017-02-18 02:07:01 +090019import com.fasterxml.jackson.databind.node.ArrayNode;
Hyunsun Moon44aac662017-02-18 02:07:01 +090020import com.google.common.collect.Lists;
21import org.apache.karaf.shell.commands.Command;
22import org.onosproject.cli.AbstractShellCommand;
23import org.onosproject.openstacknetworking.api.OpenstackNetworkService;
Hyunsun Moon44aac662017-02-18 02:07:01 +090024import org.openstack4j.model.network.Network;
25import org.openstack4j.model.network.Subnet;
26import org.openstack4j.openstack.networking.domain.NeutronNetwork;
27
28import java.util.Comparator;
29import java.util.List;
30import java.util.stream.Collectors;
31
Jian Lidea0fdb2018-04-02 19:02:48 +090032import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.modelEntityToJson;
Jian Lif1efbe52018-07-17 23:20:16 +090033import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.prettyJson;
Hyunsun Moon44aac662017-02-18 02:07:01 +090034
35/**
36 * Lists OpenStack networks.
37 */
38@Command(scope = "onos", name = "openstack-networks",
39 description = "Lists all OpenStack networks")
40public class OpenstackNetworkListCommand extends AbstractShellCommand {
41
Daniel Park04f9ffe2018-06-26 12:34:29 +090042 private static final String FORMAT = "%-40s%-20s%-20s%-20s%-16s%-8s";
Hyunsun Moon44aac662017-02-18 02:07:01 +090043
44 @Override
45 protected void execute() {
46 OpenstackNetworkService service = AbstractShellCommand.get(OpenstackNetworkService.class);
47 List<Network> networks = Lists.newArrayList(service.networks());
48 networks.sort(Comparator.comparing(Network::getName));
49
50 if (outputJson()) {
Jian Lif1efbe52018-07-17 23:20:16 +090051 print("%s", json(networks));
52 } else {
Daniel Parkc009a892018-09-06 14:24:42 +090053 print(FORMAT, "ID", "Name", "Network Mode", "SegId", "Subnets", "HostRoutes");
Jian Lif1efbe52018-07-17 23:20:16 +090054 for (Network net: networks) {
55 List<Subnet> subnets = service.subnets().stream()
56 .filter(subnet -> subnet.getNetworkId().equals(net.getId()))
57 .collect(Collectors.toList());
58
59 List<String> subnetsString = subnets.stream()
60 .map(Subnet::getCidr)
61 .collect(Collectors.toList());
62
63 List<String> hostRoutes = Lists.newArrayList();
64
65 subnets.forEach(subnet -> {
66 subnet.getHostRoutes().forEach(h -> hostRoutes.add(h.toString()));
67 });
68
69 print(FORMAT, net.getId(),
70 net.getName(),
71 net.getNetworkType().toString(),
72 net.getProviderSegID(),
73 subnets.isEmpty() ? "" : subnetsString,
74 hostRoutes.isEmpty() ? "" : hostRoutes);
Hyunsun Moon44aac662017-02-18 02:07:01 +090075 }
Hyunsun Moon44aac662017-02-18 02:07:01 +090076 }
77 }
78
Jian Lif1efbe52018-07-17 23:20:16 +090079 private String json(List<Network> networks) {
80 ObjectMapper mapper = new ObjectMapper();
81 ArrayNode result = mapper.createArrayNode();
Hyunsun Moon44aac662017-02-18 02:07:01 +090082 for (Network net: networks) {
Jian Lieb9f77d2018-02-20 11:25:45 +090083 result.add(modelEntityToJson(net, NeutronNetwork.class));
Hyunsun Moon44aac662017-02-18 02:07:01 +090084 }
Jian Lif1efbe52018-07-17 23:20:16 +090085 return prettyJson(mapper, result.toString());
Hyunsun Moon44aac662017-02-18 02:07:01 +090086 }
Hyunsun Moon44aac662017-02-18 02:07:01 +090087}