blob: 456019af9e8993479370815fa0e0bc7b94a534a4 [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;
Ray Milkey86ad7bb2018-09-27 12:32:28 -070021import org.apache.karaf.shell.api.action.Command;
Ray Milkey7a2dee52018-09-28 10:58:28 -070022import org.apache.karaf.shell.api.action.lifecycle.Service;
Hyunsun Moon44aac662017-02-18 02:07:01 +090023import 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
Jian Lidea0fdb2018-04-02 19:02:48 +090033import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.modelEntityToJson;
Jian Lif1efbe52018-07-17 23:20:16 +090034import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.prettyJson;
Hyunsun Moon44aac662017-02-18 02:07:01 +090035
36/**
37 * Lists OpenStack networks.
38 */
Ray Milkey7a2dee52018-09-28 10:58:28 -070039@Service
Hyunsun Moon44aac662017-02-18 02:07:01 +090040@Command(scope = "onos", name = "openstack-networks",
41 description = "Lists all OpenStack networks")
42public class OpenstackNetworkListCommand extends AbstractShellCommand {
43
Daniel Park04f9ffe2018-06-26 12:34:29 +090044 private static final String FORMAT = "%-40s%-20s%-20s%-20s%-16s%-8s";
Hyunsun Moon44aac662017-02-18 02:07:01 +090045
46 @Override
Ray Milkey86ad7bb2018-09-27 12:32:28 -070047 protected void doExecute() {
Jian Li5ecfd1a2018-12-10 11:41:03 +090048 OpenstackNetworkService service = get(OpenstackNetworkService.class);
Hyunsun Moon44aac662017-02-18 02:07:01 +090049 List<Network> networks = Lists.newArrayList(service.networks());
50 networks.sort(Comparator.comparing(Network::getName));
51
52 if (outputJson()) {
Jian Lif1efbe52018-07-17 23:20:16 +090053 print("%s", json(networks));
54 } else {
SONA Project6bc5c4a2018-12-14 23:49:52 +090055 print(FORMAT, "ID", "Name", "Type", "SegId", "Subnets", "HostRoutes");
Jian Lif1efbe52018-07-17 23:20:16 +090056 for (Network net: networks) {
57 List<Subnet> subnets = service.subnets().stream()
58 .filter(subnet -> subnet.getNetworkId().equals(net.getId()))
59 .collect(Collectors.toList());
60
61 List<String> subnetsString = subnets.stream()
62 .map(Subnet::getCidr)
63 .collect(Collectors.toList());
64
65 List<String> hostRoutes = Lists.newArrayList();
66
67 subnets.forEach(subnet -> {
68 subnet.getHostRoutes().forEach(h -> hostRoutes.add(h.toString()));
69 });
70
71 print(FORMAT, net.getId(),
72 net.getName(),
SONA Project6bc5c4a2018-12-14 23:49:52 +090073 service.networkType(net.getId()).toString(),
Jian Lif1efbe52018-07-17 23:20:16 +090074 net.getProviderSegID(),
75 subnets.isEmpty() ? "" : subnetsString,
76 hostRoutes.isEmpty() ? "" : hostRoutes);
Hyunsun Moon44aac662017-02-18 02:07:01 +090077 }
Hyunsun Moon44aac662017-02-18 02:07:01 +090078 }
79 }
80
Jian Lif1efbe52018-07-17 23:20:16 +090081 private String json(List<Network> networks) {
82 ObjectMapper mapper = new ObjectMapper();
83 ArrayNode result = mapper.createArrayNode();
Hyunsun Moon44aac662017-02-18 02:07:01 +090084 for (Network net: networks) {
Jian Lieb9f77d2018-02-20 11:25:45 +090085 result.add(modelEntityToJson(net, NeutronNetwork.class));
Hyunsun Moon44aac662017-02-18 02:07:01 +090086 }
Jian Lif1efbe52018-07-17 23:20:16 +090087 return prettyJson(mapper, result.toString());
Hyunsun Moon44aac662017-02-18 02:07:01 +090088 }
Hyunsun Moon44aac662017-02-18 02:07:01 +090089}