blob: e9bb84fbcc8d815f9661f50d0f568748147d4abb [file] [log] [blame]
Jian Licaa03922021-02-26 18:15:20 +09001/*
2 * Copyright 2021-present Open Networking Foundation
3 *
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.kubevirtnetworking.api;
17
18import org.onosproject.event.AbstractEvent;
19
Jian Lib636f702021-03-03 14:46:50 +090020import java.util.Set;
21
Jian Li073f1ba2021-02-28 03:50:15 +090022import static com.google.common.base.MoreObjects.toStringHelper;
23
Jian Licaa03922021-02-26 18:15:20 +090024/**
25 * Kubevirt router event class.
26 */
27public class KubevirtRouterEvent extends AbstractEvent<KubevirtRouterEvent.Type, KubevirtRouter> {
28
Jian Li073f1ba2021-02-28 03:50:15 +090029 private final KubevirtFloatingIp floatingIp;
30 private final String podName;
Jian Lib636f702021-03-03 14:46:50 +090031 private final Set<String> internal;
32 private final String externalIp;
33 private final String externalNet;
34 private final String peerRouterIp;
Daniel Park2884b232021-03-04 18:58:47 +090035 private final String gateway;
Jian Li073f1ba2021-02-28 03:50:15 +090036
Jian Licaa03922021-02-26 18:15:20 +090037 /**
38 * Creates an event of a given type for the specified kubevirt router.
39 *
40 * @param type kubevirt router event type
41 * @param subject kubevirt router
42 */
Jian Li810f58c2021-02-27 01:10:50 +090043 public KubevirtRouterEvent(Type type, KubevirtRouter subject) {
Jian Licaa03922021-02-26 18:15:20 +090044 super(type, subject);
Jian Li073f1ba2021-02-28 03:50:15 +090045 this.floatingIp = null;
46 this.podName = null;
Jian Lib636f702021-03-03 14:46:50 +090047 this.internal = null;
48 this.externalIp = null;
49 this.externalNet = null;
50 this.peerRouterIp = null;
Daniel Park2884b232021-03-04 18:58:47 +090051 this.gateway = null;
Jian Li073f1ba2021-02-28 03:50:15 +090052 }
53
54 /**
55 * Creates an event of a given type for the specified kubevirt router.
56 *
57 * @param type kubevirt router event type
58 * @param subject kubevirt router
59 * @param floatingIp kubevirt floating IP
60 */
61 public KubevirtRouterEvent(Type type, KubevirtRouter subject, KubevirtFloatingIp floatingIp) {
62 super(type, subject);
63 this.floatingIp = floatingIp;
64 this.podName = null;
Jian Lib636f702021-03-03 14:46:50 +090065 this.internal = null;
66 this.externalIp = null;
67 this.externalNet = null;
68 this.peerRouterIp = null;
Daniel Park2884b232021-03-04 18:58:47 +090069 this.gateway = null;
70
Jian Li073f1ba2021-02-28 03:50:15 +090071 }
72
73 /**
74 * Creates an event of a given type for the specified kubevirt router.
75 *
76 * @param type kubevirt router event type
77 * @param subject kubevirt router
78 * @param floatingIp kubevirt floating IP
79 * @param podName kubevirt POD name
80 */
81 public KubevirtRouterEvent(Type type, KubevirtRouter subject, KubevirtFloatingIp floatingIp, String podName) {
82 super(type, subject);
83 this.floatingIp = floatingIp;
84 this.podName = podName;
Jian Lib636f702021-03-03 14:46:50 +090085 this.internal = null;
86 this.externalIp = null;
87 this.externalNet = null;
88 this.peerRouterIp = null;
Daniel Park2884b232021-03-04 18:58:47 +090089 this.gateway = null;
Jian Lib636f702021-03-03 14:46:50 +090090 }
91
92 /**
93 * Creates an event of a given type for the specified kubevirt router.
94 *
95 * @param type kubevirt router event type
96 * @param subject kubevirt router
97 * @param internal internal networks attached to the router
98 */
99 public KubevirtRouterEvent(Type type, KubevirtRouter subject, Set<String> internal) {
100 super(type, subject);
101 this.internal = internal;
102 this.podName = null;
103 this.floatingIp = null;
104 this.externalIp = null;
105 this.externalNet = null;
106 this.peerRouterIp = null;
Daniel Park2884b232021-03-04 18:58:47 +0900107 this.gateway = null;
Jian Lib636f702021-03-03 14:46:50 +0900108 }
109
110 /**
111 * Creates an event of a given type for the specified kubevirt router.
112 *
113 * @param type kubevirt router event type
114 * @param subject kubevirt router
115 * @param externalIp virtual router's IP address included in external network
116 * @param externalNet external network name
117 * @param peerRouterIp external peer router IP address
118 */
119 public KubevirtRouterEvent(Type type, KubevirtRouter subject,
120 String externalIp, String externalNet,
121 String peerRouterIp) {
122 super(type, subject);
123 this.internal = null;
124 this.podName = null;
125 this.floatingIp = null;
126 this.externalIp = externalIp;
127 this.externalNet = externalNet;
128 this.peerRouterIp = peerRouterIp;
Daniel Park2884b232021-03-04 18:58:47 +0900129 this.gateway = null;
130 }
131
132 public KubevirtRouterEvent(Type type, KubevirtRouter subject,
133 String gateway) {
134 super(type, subject);
135 this.gateway = gateway;
136 this.floatingIp = null;
137 this.podName = null;
138 this.internal = null;
139 this.externalIp = null;
140 this.externalNet = null;
141 this.peerRouterIp = null;
Jian Licaa03922021-02-26 18:15:20 +0900142 }
143
144 public enum Type {
145 /**
146 * Signifies that a new kubevirt router is created.
147 */
148 KUBEVIRT_ROUTER_CREATED,
149
150 /**
151 * Signifies that the kubevirt router is updated.
152 */
153 KUBEVIRT_ROUTER_UPDATED,
154
155 /**
156 * Signifies that the kubevirt router is removed.
157 */
158 KUBEVIRT_ROUTER_REMOVED,
Jian Li073f1ba2021-02-28 03:50:15 +0900159
160 /**
Jian Lib636f702021-03-03 14:46:50 +0900161 * Signifies that a new external network is added to the router.
162 */
163 KUBEVIRT_ROUTER_EXTERNAL_NETWORK_ATTACHED,
164
165 /**
166 * Signifies that the existing external network is removed from the router.
167 */
168 KUBEVIRT_ROUTER_EXTERNAL_NETWORK_DETACHED,
169
170 /**
171 * Signifies that a new internal network is added to the router.
172 */
173 KUBEVIRT_ROUTER_INTERNAL_NETWORKS_ATTACHED,
174
175 /**
176 * Signifies that the existing internal network is removed from the router.
177 */
178 KUBEVIRT_ROUTER_INTERNAL_NETWORKS_DETACHED,
179
180 /**
Jian Li073f1ba2021-02-28 03:50:15 +0900181 * Signifies that a new kubevirt floating IP is created.
182 */
183 KUBEVIRT_FLOATING_IP_CREATED,
184
185 /**
186 * Signifies that the kubevirt floating IP is updated.
187 */
188 KUBEVIRT_FLOATING_IP_UPDATED,
189
190 /**
191 * Signifies that the kubevirt floating IP is removed.
192 */
193 KUBEVIRT_FLOATING_IP_REMOVED,
194
195 /**
196 * Signifies that the floating IP is associated to a fixed IP.
197 */
198 KUBEVIRT_FLOATING_IP_ASSOCIATED,
199
200 /**
201 * Signifies that the floating IP disassociated from the fixed IP.
202 */
Daniel Park2884b232021-03-04 18:58:47 +0900203 KUBEVIRT_FLOATING_IP_DISASSOCIATED,
204
205 /**
206 * Signified that the gateway node associated for this router.
207 */
208 KUBEVIRT_GATEWAY_NODE_ATTACHED,
209 /**
210 * Signified that the gateway node disassociated for this router.
211 */
212 KUBEVIRT_GATEWAY_NODE_DETACHED,
213 /**
214 * Signified that the gateway node changed for this router.
215 */
216 KUBEVIRT_GATEWAY_NODE_CHANGED
Jian Li073f1ba2021-02-28 03:50:15 +0900217 }
218
219 /**
220 * Returns the floating IP of the router event.
221 *
222 * @return kubevirt floating IP; null if the event is not relevant to the floating IP
223 */
224 public KubevirtFloatingIp floatingIp() {
225 return floatingIp;
226 }
227
228 /**
229 * Returns the pod name of the router event.
230 *
231 * @return kubevirt pod name; null if the event is not relevant to the pod name
232 */
233 public String podName() {
234 return podName;
235 }
236
Jian Lida7ec152021-03-05 12:21:50 +0900237 /**
238 * Returns the internal of the router event.
239 *
240 * @return kubevirt internal network set, null if the event is not relevant to the internal
241 */
242 public Set<String> internal() {
243 return internal;
244 }
245
246 /**
247 * Returns the external IP address of the router event.
248 *
249 * @return external IP address, null if the event is not relevant to the external
250 */
251 public String externalIp() {
252 return externalIp;
253 }
254
255 /**
256 * Returns the external network of the router event.
257 *
258 * @return external network, null if the event is not relevant ot the external
259 */
260 public String externalNet() {
261 return externalNet;
262 }
263
Daniel Park2884b232021-03-04 18:58:47 +0900264 /**
265 * Returns the gateway of the router event.
266 *
267 * @return gateway if exists, null otherwise
268 */
269 public String gateway() {
270 return gateway;
271 }
272
Jian Li073f1ba2021-02-28 03:50:15 +0900273 @Override
274 public String toString() {
275 if (floatingIp == null) {
276 return super.toString();
277 }
278 return toStringHelper(this)
279 .add("type", type())
280 .add("router", subject())
281 .add("floatingIp", floatingIp)
282 .add("podName", podName)
Jian Lib636f702021-03-03 14:46:50 +0900283 .add("internal", internal)
284 .add("externalIp", externalIp)
285 .add("externalNet", externalNet)
286 .add("peerRouterIp", peerRouterIp)
Daniel Park2884b232021-03-04 18:58:47 +0900287 .add("gatewayNodeHostName", gateway)
Jian Li073f1ba2021-02-28 03:50:15 +0900288 .toString();
Jian Licaa03922021-02-26 18:15:20 +0900289 }
290}