2 * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.netvirt.neutronvpn.shell;
11 import org.apache.karaf.shell.commands.Command;
12 import org.apache.karaf.shell.commands.Option;
13 import org.apache.karaf.shell.console.OsgiCommandSupport;
14 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
15 import org.opendaylight.netvirt.neutronvpn.interfaces.INeutronVpnManager;
16 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.CreateL3VPNInputBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.CreateL3VPNOutput;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.DeleteL3VPNInputBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.DeleteL3VPNOutput;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.NeutronvpnService;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.createl3vpn.input.L3vpn;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.createl3vpn.input.L3vpnBuilder;
24 import org.opendaylight.yangtools.yang.common.RpcResult;
25 import org.slf4j.Logger;
26 import org.slf4j.LoggerFactory;
28 import java.util.ArrayList;
29 import java.util.Arrays;
30 import java.util.List;
31 import java.util.concurrent.ExecutionException;
32 import java.util.concurrent.Future;
34 @Command(scope = "vpnservice", name = "configure-l3vpn", description = "Create/Delete Neutron L3VPN")
35 public class ConfigureL3VpnCommand extends OsgiCommandSupport {
37 final Logger Logger = LoggerFactory.getLogger(ConfigureL3VpnCommand.class);
39 private INeutronVpnManager neutronVpnManager;
40 private RpcProviderRegistry rpcProviderRegistry;
41 private NeutronvpnService neutronvpnService;
43 public void setNeutronVpnManager(INeutronVpnManager neutronVpnManager) {
44 this.neutronVpnManager = neutronVpnManager;
47 public void setRpcRegistry(RpcProviderRegistry rpcProviderRegistry) {
48 this.rpcProviderRegistry = rpcProviderRegistry;
51 @Option(name = "-op", aliases = {"--operation"}, description = "create-l3-vpn/delete-l3-vpn",
52 required = false, multiValued = false)
55 @Option(name = "-vid", aliases = {"--vpnid"}, description = "VPN ID", required = false, multiValued = false)
58 @Option(name = "-n", aliases = {"--name"}, description = "VPN Name", required = false, multiValued = false)
61 @Option(name = "-tid", aliases = {"--tenantid"}, description = "Tenant ID", required = false, multiValued = false)
64 @Option(name = "-rd", aliases = {"--rd"}, description = "Route Distinguisher", required = false, multiValued =
68 @Option(name = "-irt", aliases = {"--import-rts"}, description = "List of Import RTs", required = false,
72 @Option(name = "-ert", aliases = {"--export-rts"}, description = "List of Export RTs", required = false,
76 @Option(name = "-sid", aliases = {"--subnet-uuid"}, description = "List of Subnet IDs", required = false,
81 protected Object doExecute() throws Exception {
83 if (rpcProviderRegistry != null) {
84 neutronvpnService = rpcProviderRegistry.getRpcService(NeutronvpnService.class);
85 if (neutronvpnService != null) {
95 session.getConsole().println("Invalid argument.");
96 session.getConsole().println(getHelp(""));
100 session.getConsole().println("Too few arguments");
101 session.getConsole().println(getHelp(""));
104 session.getConsole().println("neutronvpnservice not initialized");
107 session.getConsole().println("rpcProviderRegistryService not initialized");
112 public void createL3VpnCLI() {
115 session.getConsole().println("Please supply a valid VPN ID");
116 session.getConsole().println(getHelp("create"));
121 session.getConsole().println("Please supply a valid RD");
122 session.getConsole().println(getHelp("create"));
127 session.getConsole().println("Please supply a valid list of import RTs separated by {,}");
128 session.getConsole().println(getHelp("create"));
133 session.getConsole().println("Please supply a valid list of export RTs separated by {,}");
134 session.getConsole().println(getHelp("create"));
138 Uuid vuuid = new Uuid(vid);
141 ArrayList<String> rdList = new ArrayList<>(Arrays.asList(rd.split(",")));
142 ArrayList<String> irtList = new ArrayList<>(Arrays.asList(irt.split(",")));
143 ArrayList<String> ertList = new ArrayList<>(Arrays.asList(ert.split(",")));
147 tuuid = new Uuid(tid);
150 List<L3vpn> l3vpns = new ArrayList<>();
151 L3vpn l3vpn = new L3vpnBuilder().setId(vuuid).setName(name).setRouteDistinguisher(rdList).setImportRT
153 .setExportRT(ertList).setTenantId(tuuid).build();
155 Future<RpcResult<CreateL3VPNOutput>> result =
156 neutronvpnService.createL3VPN(new CreateL3VPNInputBuilder().setL3vpn(l3vpns).build());
157 RpcResult<CreateL3VPNOutput> rpcResult = result.get();
158 if (rpcResult.isSuccessful()) {
159 session.getConsole().println("L3VPN created successfully");
160 Logger.trace("createl3vpn: {}", result);
162 session.getConsole().println("error populating createL3VPN : " + result.get().getErrors());
163 session.getConsole().println(getHelp("create"));
165 } catch (InterruptedException | ExecutionException e) {
166 Logger.error("error populating createL3VPN", e);
167 session.getConsole().println("error populating createL3VPN : " + e.getMessage());
168 session.getConsole().println(getHelp("create"));
172 List<Uuid> sidList = new ArrayList<>();
175 for (String sidStr : sid.split(",")) {
176 Uuid suuid = new Uuid(sidStr);
180 for (Uuid subnet : sidList) {
181 neutronVpnManager.addSubnetToVpn(vuuid, subnet);
184 } catch (Exception e) {
185 Logger.error("error in adding subnet to VPN", e);
186 session.getConsole().println("error in adding subnet to VPN : " + e.getMessage());
190 public void deleteL3VpnCLI() {
193 session.getConsole().println("Please supply a valid VPN ID");
194 session.getConsole().println(getHelp("delete"));
197 Uuid vpnid = new Uuid(vid);
199 List<Uuid> sidList = neutronVpnManager.getSubnetsforVpn(vpnid);
200 if (sidList != null) {
201 for (Uuid subnet : sidList) {
202 neutronVpnManager.removeSubnetFromVpn(vpnid, subnet);
205 } catch (Exception e) {
206 Logger.error("error in deleting subnet from VPN", e);
207 session.getConsole().println("error in deleting subnet from VPN : " + e.getMessage());
211 List<Uuid> vpnIdList = new ArrayList<>();
212 vpnIdList.add(vpnid);
214 Future<RpcResult<DeleteL3VPNOutput>> result =
215 neutronvpnService.deleteL3VPN(new DeleteL3VPNInputBuilder().setId(vpnIdList).build());
216 RpcResult<DeleteL3VPNOutput> rpcResult = result.get();
217 if (rpcResult.isSuccessful()) {
218 session.getConsole().println("L3VPN deleted successfully");
219 Logger.trace("deletel3vpn: {}", result);
221 session.getConsole().println("error populating deleteL3VPN : " + result.get().getErrors());
222 session.getConsole().println(getHelp("delete"));
224 } catch (InterruptedException | ExecutionException e) {
225 Logger.error("error populating deleteL3VPN", e);
226 session.getConsole().println("error populating deleteL3VPN : " + e.getMessage());
227 session.getConsole().println(getHelp("delete"));
231 private String getHelp(String cmd) {
232 StringBuilder help = new StringBuilder("Usage:");
235 help.append("exec configure-vpn -op/--operation create-l3-vpn -vid/--vpnid <id>\n");
236 help.append("-rd/--rd <rd> -irt/--import-rts <irt1,irt2,..> -ert/--export-rts <ert1,ert2,..>\n");
237 help.append("[-sid/--subnet-uuid <subnet1,subnet2,..>]\n");
240 help.append("exec configure-vpn -op/--operation delete-l3-vpn -vid/--vpnid <id> \n");
243 help.append("exec configure-vpn -op/--operation create-l3-vpn -vid/--vpnid <id>\n");
244 help.append("-rd/--rd <rd> -irt/--import-rts <irt1,irt2,..> -ert/--export-rts <ert1,ert2,..>\n");
245 help.append("[-sid/--subnet-uuid <subnet1,subnet2,..>]\n");
246 help.append("exec configure-vpn -op/--operation delete-l3-vpn -vid/--vpnid <id> \n");
248 return help.toString();