8bdfa6bf33194ba3a322dc5f9ecac1484d65618d
[groupbasedpolicy.git] / neutron-mapper / src / main / java / org / opendaylight / groupbasedpolicy / neutron / mapper / EndpointRegistrator.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
3  *
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
7  */
8
9 package org.opendaylight.groupbasedpolicy.neutron.mapper;
10
11 import java.util.ArrayList;
12 import java.util.List;
13 import java.util.concurrent.ExecutionException;
14
15 import javax.annotation.Nullable;
16
17 import org.opendaylight.groupbasedpolicy.neutron.mapper.util.MappingUtils;
18 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.BaseEndpointService;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.RegisterEndpointInput;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.RegisterEndpointInputBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.UnregisterEndpointInput;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.UnregisterEndpointInputBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.common.endpoint.fields.NetworkContainmentBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.common.endpoint.fields.network.containment.containment.NetworkDomainContainmentBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.AddressEndpointReg;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.AddressEndpointRegBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.ContainmentEndpointReg;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.register.endpoint.input.ContainmentEndpointRegBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.unregister.endpoint.input.AddressEndpointUnreg;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.base_endpoint.rev160427.unregister.endpoint.input.AddressEndpointUnregBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.ContextId;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L3ContextId;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.NetworkDomainId;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.TenantId;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.EndpointService;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInput;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterL3PrefixEndpointInputBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3AddressBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.l3.prefix.fields.EndpointL3Gateways;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.l3.prefix.fields.EndpointL3GatewaysBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.forwarding.l2_l3.rev160427.IpPrefixType;
44 import org.opendaylight.yangtools.yang.common.RpcResult;
45 import org.slf4j.Logger;
46 import org.slf4j.LoggerFactory;
47
48 import com.google.common.base.Preconditions;
49 import com.google.common.collect.ImmutableList;
50
51 public class EndpointRegistrator {
52
53     private static final Logger LOG = LoggerFactory.getLogger(EndpointRegistrator.class);
54     private final EndpointService epService;
55     private final BaseEndpointService baseEpService;
56
57     public EndpointRegistrator(EndpointService epService, BaseEndpointService baseEpService) {
58         this.epService = Preconditions.checkNotNull(epService);
59         this.baseEpService = Preconditions.checkNotNull(baseEpService);
60     }
61
62     public boolean registerEndpoint(AddressEndpointReg regEndpointInput) {
63         RegisterEndpointInput regBaseEpInput = new RegisterEndpointInputBuilder().setAddressEndpointReg(
64                 ImmutableList.<AddressEndpointReg>of(regEndpointInput))
65             .build();
66         return registerEndpoint(regBaseEpInput);
67     }
68
69     public boolean registerEndpoint(RegisterEndpointInput regBaseEpInput) {
70         try {
71             RpcResult<Void> rpcResult = baseEpService.registerEndpoint(regBaseEpInput).get();
72             if (!rpcResult.isSuccessful()) {
73                 LOG.warn("Illegal state - registerEndpoint was not successful. Input of RPC: {}", regBaseEpInput);
74                 return false;
75             }
76             return true;
77         } catch (InterruptedException | ExecutionException e) {
78             LOG.error("Base endpoint registration failed. {}", regBaseEpInput, e);
79             return false;
80         }
81     }
82
83     public boolean unregisterEndpoint(AddressEndpointUnreg addrEpUnreg) {
84         UnregisterEndpointInput input = new UnregisterEndpointInputBuilder().setAddressEndpointUnreg(
85                 ImmutableList.<AddressEndpointUnreg>of(new AddressEndpointUnregBuilder().setKey(addrEpUnreg.getKey())
86                     .build())).build();
87         return unregisterEndpoint(input);
88     }
89
90     public boolean unregisterEndpoint(UnregisterEndpointInput input) {
91         try {
92             RpcResult<Void> rpcResult = baseEpService.unregisterEndpoint(input).get();
93             if (!rpcResult.isSuccessful()) {
94                 LOG.warn("Illegal state - unregisterEndpoint was not successful. Input of RPC: {}", input);
95                 return false;
96             }
97             return true;
98         } catch (InterruptedException | ExecutionException e) {
99             LOG.error("unregisterEndpoint failed. {}", input, e);
100             return false;
101         }
102     }
103
104     @Deprecated
105     public boolean registerEndpoint(org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput regEndpointInput) {
106         try {
107             RpcResult<Void> rpcResult = epService.registerEndpoint(regEndpointInput).get();
108             if (!rpcResult.isSuccessful()) {
109                 LOG.warn("Illegal state - registerEndpoint was not successful. Input of RPC: {}", regEndpointInput);
110                 return false;
111             }
112             return true;
113         } catch (InterruptedException | ExecutionException e) {
114             LOG.error("registerEndpoint failed. {}", regEndpointInput, e);
115             return false;
116         }
117     }
118
119     @Deprecated
120     public boolean unregisterEndpoint(org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.UnregisterEndpointInput unregEndpointInput) {
121         try {
122             RpcResult<Void> rpcResult = epService.unregisterEndpoint(unregEndpointInput).get();
123             if (!rpcResult.isSuccessful()) {
124                 LOG.warn("Illegal state - unregisterEndpoint was not successful. Input of RPC: {}", unregEndpointInput);
125                 return false;
126             }
127             return true;
128         } catch (InterruptedException | ExecutionException e) {
129             LOG.error("unregisterEndpoint failed. {}", unregEndpointInput, e);
130             return false;
131         }
132     }
133
134     @Deprecated
135     public boolean registerExternalL3PrefixEndpoint(IpPrefix ipPrefix, L3ContextId l3Context,
136             @Nullable IpAddress gatewayIp, TenantId tenantId) {
137         List<EndpointL3Gateways> l3Gateways = new ArrayList<EndpointL3Gateways>();
138         if (gatewayIp != null) {
139             EndpointL3Gateways l3Gateway =
140                     new EndpointL3GatewaysBuilder().setIpAddress(gatewayIp).setL3Context(l3Context).build();
141             l3Gateways.add(l3Gateway);
142         }
143         RegisterL3PrefixEndpointInput registerL3PrefixEpRpcInput = new RegisterL3PrefixEndpointInputBuilder()
144             .setL3Context(l3Context)
145             .setIpPrefix(ipPrefix)
146             .setEndpointGroup(MappingUtils.EPG_EXTERNAL_ID)
147             .setTenant(tenantId)
148             .setEndpointL3Gateways(l3Gateways)
149             .setTimestamp(System.currentTimeMillis())
150             .build();
151         try {
152             RpcResult<Void> rpcResult = epService.registerL3PrefixEndpoint(registerL3PrefixEpRpcInput).get();
153             if (!rpcResult.isSuccessful()) {
154                 LOG.warn("Illegal state - registerExternalL3PrefixEndpoint was not successful. Input of RPC: {}",
155                         registerL3PrefixEpRpcInput);
156                 return false;
157             }
158             return true;
159         } catch (InterruptedException | ExecutionException e) {
160             LOG.error("registerExternalL3PrefixEndpoint failed. {}", registerL3PrefixEpRpcInput, e);
161             return false;
162         }
163     }
164
165     @Deprecated
166     public boolean registerL3EpAsExternalGateway(TenantId tenantId, IpAddress ipAddress, L3ContextId l3Context,
167             NetworkDomainId networkContainment) {
168         org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput registerEndpointInput =
169                 new org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInputBuilder()
170                     .setL3Address(ImmutableList
171                         .of(new L3AddressBuilder().setL3Context(l3Context).setIpAddress(ipAddress).build()))
172                     .setTenant(tenantId)
173                     .setNetworkContainment(networkContainment)
174                     .setEndpointGroups(ImmutableList.of(MappingUtils.EPG_EXTERNAL_ID))
175                     .setTimestamp(System.currentTimeMillis())
176                     .build();
177         try {
178             RpcResult<Void> rpcResult = epService.registerEndpoint(registerEndpointInput).get();
179             if (!rpcResult.isSuccessful()) {
180                 LOG.warn("Illegal state - registerL3EndpointAsExternalGateway was not successful. Input of RPC: {}",
181                         registerEndpointInput);
182                 return false;
183             }
184         } catch (InterruptedException | ExecutionException e) {
185             LOG.error("registerL3EndpointAsExternalGateway failed. {}", registerEndpointInput, e);
186             return false;
187         }
188         return true;
189     }
190
191 }