blob: 488ef8dc7eb841322cf118e250025e9d4e34124b [file] [log] [blame]
Jian Li073f1ba2021-02-28 03:50:15 +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 com.google.common.base.MoreObjects;
19import org.onlab.packet.IpAddress;
20
21import java.util.Objects;
22
23import static com.google.common.base.Preconditions.checkArgument;
24
25/**
26 * Default implementation class of kubevirt floating IP.
27 */
28public final class DefaultKubevirtFloatingIp implements KubevirtFloatingIp {
29
30 private static final String NOT_NULL_MSG = "Floating IP % cannot be null";
31
32 private final String id;
33 private final String routerName;
34 private final String podName;
Jian Lid1650c22022-02-03 15:08:31 +090035 private final String vmName;
Jian Lib636f702021-03-03 14:46:50 +090036 private final String networkName;
Jian Li073f1ba2021-02-28 03:50:15 +090037 private final IpAddress floatingIp;
38 private final IpAddress fixedIp;
39
40 /**
41 * A default constructor.
42 *
43 * @param id floating IP identifier
44 * @param routerName router name
45 * @param podName POD name
Jian Lid1650c22022-02-03 15:08:31 +090046 * @param vmName VM name
Jian Lib636f702021-03-03 14:46:50 +090047 * @param networkName network name
Jian Li073f1ba2021-02-28 03:50:15 +090048 * @param floatingIp floating IP address
49 * @param fixedIp fixed IP address
50 */
Jian Lid1650c22022-02-03 15:08:31 +090051 public DefaultKubevirtFloatingIp(String id, String routerName, String podName, String vmName,
Jian Lib636f702021-03-03 14:46:50 +090052 String networkName, IpAddress floatingIp, IpAddress fixedIp) {
Jian Li073f1ba2021-02-28 03:50:15 +090053 this.id = id;
54 this.routerName = routerName;
55 this.podName = podName;
Jian Lid1650c22022-02-03 15:08:31 +090056 this.vmName = vmName;
Jian Lib636f702021-03-03 14:46:50 +090057 this.networkName = networkName;
Jian Li073f1ba2021-02-28 03:50:15 +090058 this.floatingIp = floatingIp;
59 this.fixedIp = fixedIp;
60 }
61
62 @Override
63 public String id() {
64 return id;
65 }
66
67 @Override
68 public String routerName() {
69 return routerName;
70 }
71
72 @Override
Jian Lib636f702021-03-03 14:46:50 +090073 public String networkName() {
74 return networkName;
75 }
76
77 @Override
Jian Li073f1ba2021-02-28 03:50:15 +090078 public IpAddress floatingIp() {
79 return floatingIp;
80 }
81
82 @Override
83 public IpAddress fixedIp() {
84 return fixedIp;
85 }
86
87 @Override
Jian Lid1650c22022-02-03 15:08:31 +090088 public String vmName() {
89 return vmName;
90 }
91
92 @Override
Jian Li073f1ba2021-02-28 03:50:15 +090093 public String podName() {
94 return podName;
95 }
96
97 @Override
98 public KubevirtFloatingIp updateFixedIp(IpAddress ip) {
99 return DefaultKubevirtFloatingIp.builder()
100 .id(id)
Jian Lib636f702021-03-03 14:46:50 +0900101 .networkName(networkName)
Jian Li073f1ba2021-02-28 03:50:15 +0900102 .routerName(routerName)
103 .floatingIp(floatingIp)
104 .fixedIp(ip)
Jian Lid1650c22022-02-03 15:08:31 +0900105 .vmName(vmName)
Jian Li073f1ba2021-02-28 03:50:15 +0900106 .podName(podName)
107 .build();
108 }
109
110 @Override
111 public KubevirtFloatingIp updatePodName(String name) {
112 return DefaultKubevirtFloatingIp.builder()
113 .id(id)
Jian Lib636f702021-03-03 14:46:50 +0900114 .networkName(networkName)
Jian Li073f1ba2021-02-28 03:50:15 +0900115 .routerName(routerName)
116 .floatingIp(floatingIp)
117 .fixedIp(fixedIp)
Jian Lid1650c22022-02-03 15:08:31 +0900118 .vmName(vmName)
Jian Li073f1ba2021-02-28 03:50:15 +0900119 .podName(name)
120 .build();
121 }
122
123 @Override
Jian Lid1650c22022-02-03 15:08:31 +0900124 public KubevirtFloatingIp updateVmName(String name) {
125 return DefaultKubevirtFloatingIp.builder()
126 .id(id)
127 .networkName(networkName)
128 .routerName(routerName)
129 .floatingIp(floatingIp)
130 .fixedIp(fixedIp)
131 .vmName(name)
132 .podName(podName)
133 .build();
134 }
135
136 @Override
Jian Li073f1ba2021-02-28 03:50:15 +0900137 public boolean equals(Object o) {
138 if (this == o) {
139 return true;
140 }
141 if (o == null || getClass() != o.getClass()) {
142 return false;
143 }
144 DefaultKubevirtFloatingIp that = (DefaultKubevirtFloatingIp) o;
145 return id.equals(that.id) && routerName.equals(that.routerName) &&
146 Objects.equals(podName, that.podName) &&
Jian Lib636f702021-03-03 14:46:50 +0900147 networkName.equals(that.networkName) &&
Jian Li073f1ba2021-02-28 03:50:15 +0900148 floatingIp.equals(that.floatingIp) &&
149 Objects.equals(fixedIp, that.fixedIp);
150 }
151
152 @Override
153 public int hashCode() {
154 return Objects.hash(id, routerName, podName, floatingIp, fixedIp);
155 }
156
157 @Override
158 public String toString() {
159 return MoreObjects.toStringHelper(this)
160 .add("id", id)
161 .add("routerName", routerName)
162 .add("podName", podName)
Jian Lib636f702021-03-03 14:46:50 +0900163 .add("networkName", networkName)
Jian Li073f1ba2021-02-28 03:50:15 +0900164 .add("floatingIp", floatingIp)
165 .add("fixedIp", fixedIp)
166 .toString();
167 }
168
169 /**
170 * Returns new builder instance.
171 *
172 * @return kubevirt floating IP builder
173 */
174 public static Builder builder() {
175 return new Builder();
176 }
177
178 public static final class Builder implements KubevirtFloatingIp.Builder {
179
180 private String id;
181 private String routerName;
182 private String podName;
Jian Lid1650c22022-02-03 15:08:31 +0900183 private String vmName;
Jian Lib636f702021-03-03 14:46:50 +0900184 private String networkName;
Jian Li073f1ba2021-02-28 03:50:15 +0900185 private IpAddress floatingIp;
186 private IpAddress fixedIp;
187
188 @Override
189 public KubevirtFloatingIp build() {
190 checkArgument(id != null, NOT_NULL_MSG, "id");
Jian Lib636f702021-03-03 14:46:50 +0900191 checkArgument(networkName != null, NOT_NULL_MSG, "networkName");
Jian Li073f1ba2021-02-28 03:50:15 +0900192 checkArgument(routerName != null, NOT_NULL_MSG, "routerName");
193 checkArgument(floatingIp != null, NOT_NULL_MSG, "floatingIp");
194
Jian Lid1650c22022-02-03 15:08:31 +0900195 return new DefaultKubevirtFloatingIp(id, routerName, podName, vmName,
196 networkName, floatingIp, fixedIp);
Jian Li073f1ba2021-02-28 03:50:15 +0900197 }
198
199 @Override
200 public Builder id(String id) {
201 this.id = id;
202 return this;
203 }
204
205 @Override
206 public Builder routerName(String name) {
207 this.routerName = name;
208 return this;
209 }
210
211 @Override
Jian Lib636f702021-03-03 14:46:50 +0900212 public Builder networkName(String name) {
213 this.networkName = name;
214 return this;
215 }
216
217 @Override
Jian Li073f1ba2021-02-28 03:50:15 +0900218 public Builder floatingIp(IpAddress ip) {
219 this.floatingIp = ip;
220 return this;
221 }
222
223 @Override
224 public Builder fixedIp(IpAddress ip) {
225 this.fixedIp = ip;
226 return this;
227 }
228
229 @Override
Jian Lid1650c22022-02-03 15:08:31 +0900230 public Builder vmName(String name) {
231 this.vmName = name;
232 return this;
233 }
234
235 @Override
Jian Li073f1ba2021-02-28 03:50:15 +0900236 public Builder podName(String name) {
237 this.podName = name;
238 return this;
239 }
240 }
241}