Implement kubernetes external loadbalancer handler.
Change-Id: I0f3057d66769f0ca7db7d508483835cdd1ff1593
diff --git a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/Constants.java b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/Constants.java
index 3d2f14c..0957fb7 100644
--- a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/Constants.java
+++ b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/Constants.java
@@ -49,4 +49,11 @@
public static final String DEFAULT_CLUSTER_NAME = "default";
public static final String SONA_PROJECT_DOMAIN = "sonaproject.github.io";
+
+ // CLI item length
+ public static final int CLI_NAME_LENGTH = 30;
+ public static final int CLI_IP_ADDRESSES_LENGTH = 50;
+ public static final int CLI_IP_ADDRESS_LENGTH = 25;
+ public static final int CLI_MAC_ADDRESS_LENGTH = 25;
+ public static final int CLI_MARGIN_LENGTH = 2;
}
diff --git a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/DefaultKubernetesExternalLbConfig.java b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/DefaultKubernetesExternalLbConfig.java
new file mode 100644
index 0000000..1147ac7
--- /dev/null
+++ b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/DefaultKubernetesExternalLbConfig.java
@@ -0,0 +1,155 @@
+/*
+ * Copyright 2022-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.kubevirtnode.api;
+
+import com.google.common.base.MoreObjects;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+
+import java.util.Objects;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+/**
+ * Default implementation of kubernetes external lb config.
+ */
+public final class DefaultKubernetesExternalLbConfig implements KubernetesExternalLbConfig {
+
+ private static final String NOT_NULL_MSG = "ExternalLbConfig % cannot be null";
+
+ private final String configName;
+ private final IpAddress loadBalancerGwIp;
+ private final MacAddress loadBalancerGwMac;
+ private final String globalIpRange;
+
+ public DefaultKubernetesExternalLbConfig(String configName, IpAddress loadBalancerGwIp,
+ MacAddress loadBalancerGwMac, String globalIpRange) {
+ this.configName = configName;
+ this.loadBalancerGwIp = loadBalancerGwIp;
+ this.loadBalancerGwMac = loadBalancerGwMac;
+ this.globalIpRange = globalIpRange;
+ }
+
+ @Override
+ public String configName() {
+ return configName;
+ }
+
+ @Override
+ public IpAddress loadBalancerGwIp() {
+ return loadBalancerGwIp;
+ }
+
+ @Override
+ public MacAddress loadBalancerGwMac() {
+ return loadBalancerGwMac;
+ }
+
+ @Override
+ public String globalIpRange() {
+ return globalIpRange;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ DefaultKubernetesExternalLbConfig that = (DefaultKubernetesExternalLbConfig) o;
+
+ return Objects.equals(configName, that.configName) &&
+ Objects.equals(loadBalancerGwIp, that.loadBalancerGwIp) &&
+ Objects.equals(globalIpRange, that.globalIpRange);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(configName, loadBalancerGwIp, globalIpRange);
+ }
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("configName", configName)
+ .add("loadBalancerGwIp", loadBalancerGwIp)
+ .add("loadBalancerGwMac", loadBalancerGwMac)
+ .add("globalIpRange", globalIpRange)
+ .toString();
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ @Override
+ public KubernetesExternalLbConfig updateLbGatewayMac(MacAddress gatewayMac) {
+ return DefaultKubernetesExternalLbConfig.builder()
+ .configName(configName)
+ .loadBalancerGwIp(loadBalancerGwIp)
+ .loadBalancerGwMac(loadBalancerGwMac)
+ .globalIpRange(globalIpRange)
+ .build();
+ }
+
+ public static final class Builder implements KubernetesExternalLbConfig.Builder {
+
+ private String configName;
+ private IpAddress loadBalancerGwIp;
+ private MacAddress loadBalancerGwMac;
+ private String globalIpRange;
+
+ private Builder() {
+ }
+
+ @Override
+ public KubernetesExternalLbConfig build() {
+ checkArgument(configName != null, NOT_NULL_MSG, "configName");
+ checkArgument(loadBalancerGwIp != null, NOT_NULL_MSG, "loadBalancerGwIp");
+ checkArgument(globalIpRange != null, NOT_NULL_MSG, "globalIpRange");
+
+ return new DefaultKubernetesExternalLbConfig(configName, loadBalancerGwIp,
+ loadBalancerGwMac, globalIpRange);
+ }
+
+ @Override
+ public Builder configName(String configName) {
+ this.configName = configName;
+ return this;
+ }
+
+ @Override
+ public Builder loadBalancerGwIp(IpAddress loadBalancerGwIp) {
+ this.loadBalancerGwIp = loadBalancerGwIp;
+ return this;
+ }
+
+ @Override
+ public KubernetesExternalLbConfig.Builder loadBalancerGwMac(MacAddress loadBalancerGwMac) {
+ this.loadBalancerGwMac = loadBalancerGwMac;
+ return this;
+ }
+
+ @Override
+ public Builder globalIpRange(String globalIpRange) {
+ this.globalIpRange = globalIpRange;
+ return this;
+ }
+ }
+}
diff --git a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/DefaultKubernetesExternalLbInterface.java b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/DefaultKubernetesExternalLbInterface.java
new file mode 100644
index 0000000..fe53b53
--- /dev/null
+++ b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/DefaultKubernetesExternalLbInterface.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright 2022-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.kubevirtnode.api;
+
+import com.google.common.base.MoreObjects;
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+
+import java.util.Objects;
+
+import static com.google.common.base.Preconditions.checkArgument;
+
+public class DefaultKubernetesExternalLbInterface implements KubernetesExternalLbInterface {
+
+ private static final String NOT_NULL_MSG = "KubernetesExternalLbInterface % cannot be null";
+
+ private String elbBridgeName;
+ private IpAddress elbIp;
+ private IpAddress elbGwIp;
+ private MacAddress elbGwMac;
+
+ public DefaultKubernetesExternalLbInterface(String elbBridgeName, IpAddress elbIp,
+ IpAddress elbGwIp, MacAddress elbGwMac) {
+ this.elbBridgeName = elbBridgeName;
+ this.elbIp = elbIp;
+ this.elbGwIp = elbGwIp;
+ this.elbGwMac = elbGwMac;
+ }
+
+ @Override
+ public String externalLbBridgeName() {
+ return elbBridgeName;
+ }
+
+ @Override
+ public IpAddress externalLbIp() {
+ return elbIp;
+ }
+
+ @Override
+ public IpAddress externalLbGwIp() {
+ return elbGwIp;
+ }
+
+ @Override
+ public MacAddress externalLbGwMac() {
+ return elbGwMac;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+
+ DefaultKubernetesExternalLbInterface that = (DefaultKubernetesExternalLbInterface) o;
+
+ return Objects.equals(elbBridgeName, that.elbBridgeName) &&
+ Objects.equals(elbIp, that.elbIp) &&
+ Objects.equals(elbGwIp, that.elbGwIp);
+ }
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("elbBridgeName", elbBridgeName)
+ .add("elbIp", elbIp)
+ .add("elbGwIp", elbGwIp)
+ .add("elbGwMac", elbGwMac)
+ .toString();
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(elbBridgeName, elbIp, elbGwIp);
+ }
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public static final class Builder implements KubernetesExternalLbInterface.Builder {
+ private String elbBridgeName;
+ private IpAddress elbIp;
+ private IpAddress elbGwIp;
+ private MacAddress elbGwMac;
+
+ private Builder() {
+ }
+
+ @Override
+ public KubernetesExternalLbInterface build() {
+ checkArgument(elbBridgeName != null, NOT_NULL_MSG, "externalLbBridgeName");
+ checkArgument(elbIp != null, NOT_NULL_MSG, "externalLbIp");
+ checkArgument(elbGwIp != null, NOT_NULL_MSG, "externalLbGwIp");
+ checkArgument(elbGwMac != null, NOT_NULL_MSG, "externalLbGwMac");
+
+ return new DefaultKubernetesExternalLbInterface(elbBridgeName, elbIp, elbGwIp, elbGwMac);
+ }
+
+ @Override
+ public Builder externalLbBridgeName(String elbBridgeName) {
+ this.elbBridgeName = elbBridgeName;
+ return this;
+ }
+
+ @Override
+ public Builder externalLbIp(IpAddress elbIp) {
+ this.elbIp = elbIp;
+ return this;
+ }
+
+ @Override
+ public Builder externallbGwIp(IpAddress elbGwIp) {
+ this.elbGwIp = elbGwIp;
+ return this;
+ }
+
+ @Override
+ public Builder externalLbGwMac(MacAddress elbGwMac) {
+ this.elbGwMac = elbGwMac;
+ return this;
+ }
+ }
+}
diff --git a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/DefaultKubevirtNode.java b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/DefaultKubevirtNode.java
index 16f7034..2c3d0be 100644
--- a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/DefaultKubevirtNode.java
+++ b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/DefaultKubevirtNode.java
@@ -59,10 +59,7 @@
private final KubevirtNodeState state;
private final Collection<KubevirtPhyInterface> phyIntfs;
private final String gatewayBridgeName;
- private final String elbBridgeName;
- private final IpAddress elbIp;
- private final IpAddress elbGwIp;
- private final MacAddress elbGwMac;
+ private final KubernetesExternalLbInterface kubernetesExternalLbIntf;
/**
* A default constructor of kubevirt node.
@@ -77,18 +74,15 @@
* @param state node state
* @param phyIntfs physical interfaces
* @param gatewayBridgeName gateway bridge name
- * @param elbBridgeName elb bridge name
- * @param elbIp elb IP address
- * @param elbGwIp elb gw IP address
- * @param elbGwMac elb gw MAC address
+ * @param kubernetesExternalLbIntf kubernetesExternalLbIntf
*/
protected DefaultKubevirtNode(String clusterName, String hostname, Type type,
DeviceId intgBridge, DeviceId tunBridge,
IpAddress managementIp, IpAddress dataIp,
KubevirtNodeState state,
Collection<KubevirtPhyInterface> phyIntfs,
- String gatewayBridgeName, String elbBridgeName, IpAddress elbIp,
- IpAddress elbGwIp, MacAddress elbGwMac) {
+ String gatewayBridgeName,
+ KubernetesExternalLbInterface kubernetesExternalLbIntf) {
this.clusterName = clusterName;
this.hostname = hostname;
this.type = type;
@@ -99,10 +93,7 @@
this.state = state;
this.phyIntfs = phyIntfs;
this.gatewayBridgeName = gatewayBridgeName;
- this.elbBridgeName = elbBridgeName;
- this.elbIp = elbIp;
- this.elbGwIp = elbGwIp;
- this.elbGwMac = elbGwMac;
+ this.kubernetesExternalLbIntf = kubernetesExternalLbIntf;
}
@Override
@@ -163,10 +154,7 @@
.state(newState)
.phyIntfs(phyIntfs)
.gatewayBridgeName(gatewayBridgeName)
- .elbBridgeName(elbBridgeName)
- .elbIp(elbIp)
- .elbGwIp(elbGwIp)
- .elbGwMac(elbGwMac)
+ .kubernetesExternalLbInterface(kubernetesExternalLbIntf)
.build();
}
@@ -183,10 +171,7 @@
.state(state)
.phyIntfs(phyIntfs)
.gatewayBridgeName(gatewayBridgeName)
- .elbBridgeName(elbBridgeName)
- .elbIp(elbIp)
- .elbGwIp(elbGwIp)
- .elbGwMac(elbGwMac)
+ .kubernetesExternalLbInterface(kubernetesExternalLbIntf)
.build();
}
@@ -203,10 +188,7 @@
.state(state)
.phyIntfs(phyIntfs)
.gatewayBridgeName(gatewayBridgeName)
- .elbBridgeName(elbBridgeName)
- .elbIp(elbIp)
- .elbGwIp(elbGwIp)
- .elbGwMac(elbGwMac)
+ .kubernetesExternalLbInterface(kubernetesExternalLbIntf)
.build();
}
@@ -259,23 +241,8 @@
}
@Override
- public String elbBridgeName() {
- return elbBridgeName;
- }
-
- @Override
- public IpAddress elbIp() {
- return elbIp;
- }
-
- @Override
- public IpAddress elbGwIp() {
- return elbGwIp;
- }
-
- @Override
- public MacAddress elbGwMac() {
- return elbGwMac;
+ public KubernetesExternalLbInterface kubernetesExternalLbInterface() {
+ return kubernetesExternalLbIntf;
}
private PortNumber tunnelPort(String tunnelType) {
@@ -343,10 +310,7 @@
.state(node.state())
.phyIntfs(node.phyIntfs())
.gatewayBridgeName(node.gatewayBridgeName())
- .elbBridgeName(node.elbBridgeName())
- .elbIp(node.elbIp())
- .elbGwIp(node.elbGwIp())
- .elbGwMac(node.elbGwMac());
+ .kubernetesExternalLbInterface(node.kubernetesExternalLbInterface());
}
@Override
@@ -386,10 +350,7 @@
.add("state", state)
.add("phyIntfs", phyIntfs)
.add("gatewayBridgeName", gatewayBridgeName)
- .add("elbBridgeName", elbBridgeName)
- .add("elbIp", elbIp)
- .add("elbGwIp", elbGwIp)
- .add("elbGwMac", elbGwMac)
+ .add("kubernetesExternalLbInterface", kubernetesExternalLbIntf)
.toString();
}
@@ -409,6 +370,7 @@
private IpAddress elbIp;
private IpAddress elbGwIp;
private MacAddress elbGwMac;
+ private KubernetesExternalLbInterface kubernetesExternalLbInterface;
// private constructor not intended to use from external
private Builder() {
@@ -436,10 +398,7 @@
state,
phyIntfs,
gatewayBridgeName,
- elbBridgeName,
- elbIp,
- elbGwIp,
- elbGwMac
+ kubernetesExternalLbInterface
);
}
@@ -504,26 +463,8 @@
}
@Override
- public Builder elbBridgeName(String elbBridgeName) {
- this.elbBridgeName = elbBridgeName;
- return this;
- }
-
- @Override
- public Builder elbIp(IpAddress elbIp) {
- this.elbIp = elbIp;
- return this;
- }
-
- @Override
- public Builder elbGwIp(IpAddress elbGwIp) {
- this.elbGwIp = elbGwIp;
- return this;
- }
-
- @Override
- public Builder elbGwMac(MacAddress elbGwMac) {
- this.elbGwMac = elbGwMac;
+ public Builder kubernetesExternalLbInterface(KubernetesExternalLbInterface kubernetesExternalLbInterface) {
+ this.kubernetesExternalLbInterface = kubernetesExternalLbInterface;
return this;
}
}
diff --git a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubernetesExternalLbConfig.java b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubernetesExternalLbConfig.java
new file mode 100644
index 0000000..a0f1e90
--- /dev/null
+++ b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubernetesExternalLbConfig.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2022-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.kubevirtnode.api;
+
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+
+/**
+ * Representation of configuration used in Kubernetes External Lb service.
+ */
+public interface KubernetesExternalLbConfig {
+
+ /**
+ * Returns the name of kubernetes external lb config.
+ * This is defined in the configmap.
+ *
+ * @return config name
+ */
+ String configName();
+ /**
+ * Returns the gateway IP of load balancer.
+ * TEG would send outbound traffic to this gateway.
+ *
+ * @return load balancer gateway IP
+ */
+ IpAddress loadBalancerGwIp();
+
+ /**
+ * Returns the gateway MAC of load balancer.
+ * TEG would send outbound traffic to this gateway.
+ *
+ * @return load balancer gateway IP
+ */
+ MacAddress loadBalancerGwMac();
+
+ /**
+ * Returns the global IP range used in external LB.
+ * Each service of type LoadBalancer would get the public IP out of those.
+ * Format: "223.39.6.85-223.39.6.90"
+ *
+ * @return global Ip range
+ */
+ String globalIpRange();
+
+ /**
+ * Returns the KubernetesExternalLbConfig with updated external lb gateway mac address.
+ *
+ * @param gatewayMac external lb gateway mac address
+ * @return KubernetesExternalLbConfig
+ */
+ KubernetesExternalLbConfig updateLbGatewayMac(MacAddress gatewayMac);
+
+ interface Builder {
+ /**
+ * Builds an immutable kubernal external lb config instance.
+ *
+ * @return kubernetes external lb config
+ */
+ KubernetesExternalLbConfig build();
+
+ /**
+ * Returns kubernetes external lb config builder with supplied config name.
+ *
+ * @param configName config name
+ * @return kubernetes external lb config builder
+ */
+ Builder configName(String configName);
+
+ /**
+ * Returns kubernetes external lb config builder with supplied loadbalancer gw Ip.
+ *
+ * @param loadBalancerGwIp loadbalancer gw Ip
+ * @return kubernetes external lb config builder
+ */
+ Builder loadBalancerGwIp(IpAddress loadBalancerGwIp);
+
+ /**
+ * Returns kubernetes external lb config builder with supplied loadbalancer gw Mac.
+ *
+ * @param loadBalancerGwMac loadbalancer gw Mac
+ * @return kubernetes external lb config builder
+ */
+ Builder loadBalancerGwMac(MacAddress loadBalancerGwMac);
+
+ /**
+ * Returns kubernetes external lb config builder with supplied global Ip range.
+ *
+ * @param globalIpRange global Ip range
+ * @return kubernetes external lb config builder
+ */
+ Builder globalIpRange(String globalIpRange);
+
+ }
+}
diff --git a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubernetesExternalLbConfigAdminService.java b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubernetesExternalLbConfigAdminService.java
new file mode 100644
index 0000000..36e163f
--- /dev/null
+++ b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubernetesExternalLbConfigAdminService.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2022-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.kubevirtnode.api;
+
+/**
+ * Service for administering inventory of Kubernetes External Lb Configs.
+ */
+public interface KubernetesExternalLbConfigAdminService extends KubernetesExternalLbConfigService {
+
+ /**
+ * Creates a new kubernetes external lb config.
+ *
+ * @param lbConfig kubernetes external lb config
+ */
+ void createKubernetesExternalLbConfig(KubernetesExternalLbConfig lbConfig);
+
+ /**
+ * Updates a new kubernetes external lb config.
+ *
+ * @param lbConfig kubernetes external lb config
+ */
+ void updateKubernetesExternalLbConfig(KubernetesExternalLbConfig lbConfig);
+
+ /**
+ * Removes a new kubernetes external lb config.
+ *
+ * @param configName kubernetes external lb config
+ */
+ void removeKubernetesExternalLbConfig(String configName);
+}
diff --git a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubernetesExternalLbConfigEvent.java b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubernetesExternalLbConfigEvent.java
new file mode 100644
index 0000000..c42ed31
--- /dev/null
+++ b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubernetesExternalLbConfigEvent.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2022-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.kubevirtnode.api;
+
+import org.onosproject.event.AbstractEvent;
+
+public class KubernetesExternalLbConfigEvent
+ extends AbstractEvent<KubernetesExternalLbConfigEvent.Type, KubernetesExternalLbConfig> {
+
+ public KubernetesExternalLbConfigEvent(Type type, KubernetesExternalLbConfig subject) {
+ super(type, subject);
+ }
+
+ /**
+ * Kubernetes external lb config events.
+ */
+ public enum Type {
+ /**
+ * Signifies that a new config is created.
+ */
+ KUBERNETES_EXTERNAL_LB_CONFIG_CREATED,
+
+ /**
+ * Signifies that a new config is updated.
+ */
+ KUBERNETES_EXTERNAL_LB_CONFIG_UPDATED,
+
+ /**
+ * Signifies that a new config is removed.
+ */
+ KUBERNETES_EXTERNAL_LB_CONFIG_REMOVED
+ }
+}
diff --git a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubernetesExternalLbConfigListener.java b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubernetesExternalLbConfigListener.java
new file mode 100644
index 0000000..a91d048
--- /dev/null
+++ b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubernetesExternalLbConfigListener.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2022-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.kubevirtnode.api;
+
+import org.onosproject.event.EventListener;
+
+/**
+ * Listener for kubernetes external lb config event.
+ */
+public interface KubernetesExternalLbConfigListener extends EventListener<KubernetesExternalLbConfigEvent> {
+}
diff --git a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubernetesExternalLbConfigService.java b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubernetesExternalLbConfigService.java
new file mode 100644
index 0000000..32e07e5
--- /dev/null
+++ b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubernetesExternalLbConfigService.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2022-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.kubevirtnode.api;
+
+import org.onosproject.event.ListenerService;
+
+import java.util.Set;
+
+/**
+ * Service for administering the inventory of kubernetes external lb configs.
+ */
+public interface KubernetesExternalLbConfigService
+ extends ListenerService<KubernetesExternalLbConfigEvent, KubernetesExternalLbConfigListener> {
+ String APP_ID = "org.onosproject.kubevirtnode";
+
+ /**
+ * Returns the kubernetes external lb config with the given config name.
+ *
+ * @param configName config name
+ * @return kubernetes external lb config
+ */
+ KubernetesExternalLbConfig lbConfig(String configName);
+
+ /**
+ * Returns all kubernetes external lb configs.
+ *
+ * @return set of kubernetes external lb configs
+ */
+ Set<KubernetesExternalLbConfig> lbConfigs();
+}
diff --git a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubernetesExternalLbConfigStore.java b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubernetesExternalLbConfigStore.java
new file mode 100644
index 0000000..9a1e366
--- /dev/null
+++ b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubernetesExternalLbConfigStore.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2022-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.kubevirtnode.api;
+
+import org.onosproject.store.Store;
+
+import java.util.Set;
+
+/**
+ * Manages inventory of kubernetes external lb config states; not intended for direct use.
+ */
+public interface KubernetesExternalLbConfigStore
+ extends Store<KubernetesExternalLbConfigEvent, KubernetesExternalLbConfigStoreDelegate> {
+
+ /**
+ * Creates a new kubernetes external lb config.
+ *
+ * @param lbConfig kubernetes external lb config
+ */
+ void createExternalLbConfig(KubernetesExternalLbConfig lbConfig);
+
+ /**
+ * Updates a new kubernetes external lb config.
+ *
+ * @param lbConfig kubernetes external lb config
+ */
+ void updateExternalLbConfig(KubernetesExternalLbConfig lbConfig);
+
+ /**
+ * Removes a new kubernetes external lb config.
+ *
+ * @param configName kubernetes external lb config
+ * @return removed kubernetes external lb config
+ */
+ KubernetesExternalLbConfig removeExternalLbConfig(String configName);
+
+ /**
+ * Returns the kubernetes external lb config with the given config name.
+ *
+ * @param configName config name
+ * @return kubernetes external lb config
+ */
+ KubernetesExternalLbConfig externalLbConfig(String configName);
+
+ /**
+ * Returns all kubernetes external lb configs.
+ *
+ * @return set of kubernetes external lb configs
+ */
+ Set<KubernetesExternalLbConfig> externalLbConfigs();
+
+ /**
+ * Removes all kubernetes external lb configs.
+ */
+ void clear();
+
+}
diff --git a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubernetesExternalLbConfigStoreDelegate.java b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubernetesExternalLbConfigStoreDelegate.java
new file mode 100644
index 0000000..12e5e11
--- /dev/null
+++ b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubernetesExternalLbConfigStoreDelegate.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2022-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.kubevirtnode.api;
+
+import org.onosproject.store.StoreDelegate;
+
+/**
+ * Kubernetes external lb config store delegate abstraction.
+ */
+public interface KubernetesExternalLbConfigStoreDelegate extends StoreDelegate<KubernetesExternalLbConfigEvent> {
+}
diff --git a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubernetesExternalLbInterface.java b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubernetesExternalLbInterface.java
new file mode 100644
index 0000000..df9081f
--- /dev/null
+++ b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubernetesExternalLbInterface.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2022-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.kubevirtnode.api;
+
+import org.onlab.packet.IpAddress;
+import org.onlab.packet.MacAddress;
+
+/**
+ * Representation of a Kubernetes external load balancer interface for kubevirt node.
+ */
+public interface KubernetesExternalLbInterface {
+
+ /**
+ * Returns the name of the elb bridge.
+ * Using this bridge, TEG internally communicates with data IP's in worker nodes.
+ *
+ * @return gateway bridge name
+ */
+ String externalLbBridgeName();
+
+ /**
+ * Returns the internal Ip Address of TEG for kubernetes external lb purpose.
+ *
+ * @return elb ip address
+ */
+ IpAddress externalLbIp();
+
+ /**
+ * Returns the gateway IP of the elb IP.
+ *
+ * @return elb gw ip address
+ */
+ IpAddress externalLbGwIp();
+
+ /**
+ * Returns the mac address of the elb gw.
+ *
+ * @return elb gw mac address
+ */
+ MacAddress externalLbGwMac();
+
+
+ interface Builder {
+
+ /**
+ * Builds an immutable kubernetes external load balancer interface instance.
+ *
+ * @return external load balancer interface instance
+ */
+ KubernetesExternalLbInterface build();
+
+ /**
+ * Returns kubernetes external load balancer interface builder with supplied elb bridge name.
+ *
+ * @param elbBridgeName elb bridge name
+ * @return kubernetes external load balancer interface builder
+ */
+ Builder externalLbBridgeName(String elbBridgeName);
+
+ /**
+ * Returns kubernetes external load balancer interface builder with supplied supplied elb Ip address.
+ *
+ * @param elbIp elb ip address
+ * @return kubernetes external load balancer interface builder
+ */
+ Builder externalLbIp(IpAddress elbIp);
+
+ /**
+ * Returns kubernetes external load balancer interface builder with supplied supplied elb gw Ip address.
+ *
+ * @param elbGwIp elb gw ip address
+ * @return kubernetes external load balancer interface builder
+ */
+ Builder externallbGwIp(IpAddress elbGwIp);
+
+ /**
+ * Returns kubernetes external load balancer interface builder with supplied supplied elb gw MAC address.
+ *
+ * @param elbGwMac elb gw mac address
+ * @return kubernetes external load balancer interface builder
+ */
+ Builder externalLbGwMac(MacAddress elbGwMac);
+ }
+}
diff --git a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubevirtNode.java b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubevirtNode.java
index 0015105..502784d 100644
--- a/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubevirtNode.java
+++ b/apps/kubevirt-node/api/src/main/java/org/onosproject/kubevirtnode/api/KubevirtNode.java
@@ -16,7 +16,6 @@
package org.onosproject.kubevirtnode.api;
import org.onlab.packet.IpAddress;
-import org.onlab.packet.MacAddress;
import org.onosproject.net.DeviceId;
import org.onosproject.net.PortNumber;
@@ -190,34 +189,11 @@
String gatewayBridgeName();
/**
- * Returns the name of the elb bridge.
- * Using this bridge, TEG internally communicates with data IP's in worker nodes.
+ * Returns the kubernetesExternalLbInterface.
*
- * @return gateway bridge name
+ * @return kubernetesExternalLbInterface
*/
- String elbBridgeName();
-
- /**
- * Returns the internal Ip Address of TEG for kubernetes external lb purpose.
- *
- * @return elb ip address
- */
- IpAddress elbIp();
-
- /**
- * Returns the gateway IP of the elb IP.
- *
- * @return elb gw ip address
- */
- IpAddress elbGwIp();
-
- /**
- * Returns the mac address of the elb gw.
- *
- * @return elb gw mac address
- */
- MacAddress elbGwMac();
-
+ KubernetesExternalLbInterface kubernetesExternalLbInterface();
/**
* Builder of new node entity.
@@ -310,36 +286,13 @@
*/
KubevirtNode.Builder gatewayBridgeName(String gatewayBridgeName);
- /**
- * Returns kubevirt node builder with supplied elb bridge name.
- *
- * @param elbBridgeName elb bridge name
- * @return kubevirt node builder
- */
- KubevirtNode.Builder elbBridgeName(String elbBridgeName);
/**
- * Returns kubevirt node builder with supplied supplied elb Ip address.
+ * Returns kubevirt node builder with supplied supplied kubernetesExternalLbInterface.
*
- * @param elbIp elb ip address
+ * @param kubernetesExternalLbInterface kubernetesExternalLbInterface
* @return kubevirt node builder
*/
- KubevirtNode.Builder elbIp(IpAddress elbIp);
-
- /**
- * Returns kubevirt node builder with supplied supplied elb gw Ip address.
- *
- * @param elbGwIp elb gw ip address
- * @return kubevirt node builder
- */
- KubevirtNode.Builder elbGwIp(IpAddress elbGwIp);
-
- /**
- * Returns kubevirt node builder with supplied supplied elb gw MAC address.
- *
- * @param elbGwMac elb gw mac address
- * @return kubevirt node builder
- */
- KubevirtNode.Builder elbGwMac(MacAddress elbGwMac);
+ KubevirtNode.Builder kubernetesExternalLbInterface(KubernetesExternalLbInterface kubernetesExternalLbInterface);
}
}