Add a set of interfaces for k8s pod, service, endpoint
Change-Id: Ie67c5d1a0678bdd651dac24363ab3feab5098919
diff --git a/apps/k8s-networking/BUILD b/apps/k8s-networking/BUILD
index 2cf9004..ff83b1c 100644
--- a/apps/k8s-networking/BUILD
+++ b/apps/k8s-networking/BUILD
@@ -4,6 +4,11 @@
"@commons_net//jar",
"@k8s_client//jar",
"@k8s_model//jar",
+ "@okhttp//jar",
+ "@okio//jar",
+ "@logging_interceptor//jar",
+ "@jackson_dataformat_yaml//jar",
+ "@snakeyaml//jar",
]
onos_app(
diff --git a/apps/k8s-networking/api/BUILD b/apps/k8s-networking/api/BUILD
index 36d2da1..1995985 100644
--- a/apps/k8s-networking/api/BUILD
+++ b/apps/k8s-networking/api/BUILD
@@ -1,4 +1,12 @@
-COMPILE_DEPS = CORE_DEPS
+COMPILE_DEPS = CORE_DEPS + [
+ "@k8s_client//jar",
+ "@k8s_model//jar",
+ "@okhttp//jar",
+ "@okio//jar",
+ "@logging_interceptor//jar",
+ "@jackson_dataformat_yaml//jar",
+ "@snakeyaml//jar",
+]
TEST_DEPS = TEST_ADAPTERS + [
"//core/api:onos-api-tests",
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sEndpointsAdminService.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sEndpointsAdminService.java
new file mode 100644
index 0000000..989eefa
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sEndpointsAdminService.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2019-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.k8snetworking.api;
+
+import io.fabric8.kubernetes.api.model.Endpoints;
+
+/**
+ * Service for administering the inventory of kubernetes endpoint.
+ */
+public interface K8sEndpointsAdminService extends K8sEndpointsService {
+
+ /**
+ * Creates kubernetes endpoints with the given information.
+ *
+ * @param endpoints the new kubernetes endpoints
+ */
+ void createEndpoints(Endpoints endpoints);
+
+ /**
+ * Updates the kubernetes endpoints with the given information.
+ *
+ * @param endpoints the updated kubernetes endpoints
+ */
+ void updateEndpoints(Endpoints endpoints);
+
+ /**
+ * Removes the kubernetes endpoints.
+ *
+ * @param uid kubernetes endpoint UID
+ */
+ void removeEndpoints(String uid);
+
+ /**
+ * Clears the existing endpoints.
+ */
+ void clear();
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sEndpointsEvent.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sEndpointsEvent.java
new file mode 100644
index 0000000..acce215
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sEndpointsEvent.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2019-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.k8snetworking.api;
+
+import io.fabric8.kubernetes.api.model.Endpoints;
+import org.onosproject.event.AbstractEvent;
+
+/**
+ * Describes kubernetes endpoints event.
+ */
+public class K8sEndpointsEvent extends AbstractEvent<K8sEndpointsEvent.Type, Endpoints> {
+
+ /**
+ * Creates an event of a given type for the specified kubernetes endpoints.
+ *
+ * @param type kubernetes endpoints event type
+ * @param subject kubernetes endpoints
+ */
+ public K8sEndpointsEvent(Type type, Endpoints subject) {
+ super(type, subject);
+ }
+
+ /**
+ * Kubernetes endpoints events.
+ */
+ public enum Type {
+
+ /**
+ * Signifies that a new kubernetes endpoints is created.
+ */
+ K8S_ENDPOINTS_CREATED,
+
+ /**
+ * Signifies that the kubernetes endpoints is updated.
+ */
+ K8S_ENDPOINTS_UPDATED,
+
+ /**
+ * Signifies that the kubernetes endpoints is removed.
+ */
+ K8S_ENDPOINTS_REMOVED,
+ }
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sEndpointsListener.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sEndpointsListener.java
new file mode 100644
index 0000000..873e264
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sEndpointsListener.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2019-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.k8snetworking.api;
+
+import org.onosproject.event.EventListener;
+
+/**
+ * Listener for kubernetes endpoints event.
+ */
+public interface K8sEndpointsListener extends EventListener<K8sEndpointsEvent> {
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sEndpointsService.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sEndpointsService.java
new file mode 100644
index 0000000..8f90269
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sEndpointsService.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2019-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.k8snetworking.api;
+
+import io.fabric8.kubernetes.api.model.Endpoints;
+import org.onosproject.event.ListenerService;
+
+import java.util.Set;
+
+/**
+ * Service for interacting with the inventory of kubernetes endpoints.
+ */
+public interface K8sEndpointsService
+ extends ListenerService<K8sEndpointsEvent, K8sEndpointsListener> {
+
+ /**
+ * Returns the kubernetes endpoints with the supplied endpoints UID.
+ *
+ * @param uid endpoint UID
+ * @return kubernetes endpoints
+ */
+ Endpoints endpoints(String uid);
+
+ /**
+ * Returns all kubernetes endpoints registered.
+ *
+ * @return set of kubernetes endpoints
+ */
+ Set<Endpoints> endpointses();
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sEndpointsStore.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sEndpointsStore.java
new file mode 100644
index 0000000..9bcb5c9
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sEndpointsStore.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2019-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.k8snetworking.api;
+
+import io.fabric8.kubernetes.api.model.Endpoints;
+import org.onosproject.store.Store;
+
+import java.util.Set;
+
+/**
+ * Manages inventory of kubernetes endpoints; not intended for direct use.
+ */
+public interface K8sEndpointsStore
+ extends Store<K8sEndpointsEvent, K8sEndpointsStoreDelegate> {
+
+ /**
+ * Creates the new kubernetes endpoints.
+ *
+ * @param endpoints kubernetes endpoints
+ */
+ void createEndpoints(Endpoints endpoints);
+
+ /**
+ * Updates the kubernetes endpoints.
+ *
+ * @param endpoints kubernetes endpoints
+ */
+ void updateEndpoints(Endpoints endpoints);
+
+ /**
+ * Removes the kubernetes endpoints with the given endpoints UID.
+ *
+ * @param uid kubernetes endpoints UID
+ * @return removed kubernetes endpoints; null if failed
+ */
+ Endpoints removeEndpoints(String uid);
+
+ /**
+ * Returns the kubernetes endpoints with the given endpoints UID.
+ *
+ * @param uid kubernetes endpoints UID
+ * @return kubernetes endpoints; null if not found
+ */
+ Endpoints endpoints(String uid);
+
+ /**
+ * Returns all kubernetes endpoints.
+ *
+ * @return set of kubernetes endpoints
+ */
+ Set<Endpoints> endpointses();
+
+ /**
+ * Removes all kubernetes endpoints.
+ */
+ void clear();
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sEndpointsStoreDelegate.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sEndpointsStoreDelegate.java
new file mode 100644
index 0000000..f0b6a99
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sEndpointsStoreDelegate.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2019-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.k8snetworking.api;
+
+import org.onosproject.store.StoreDelegate;
+
+/**
+ * Kubernetes endpoints store delegate abstraction.
+ */
+public interface K8sEndpointsStoreDelegate extends StoreDelegate<K8sEndpointsEvent> {
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sPodAdminService.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sPodAdminService.java
new file mode 100644
index 0000000..cb51a51
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sPodAdminService.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2019-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.k8snetworking.api;
+
+import io.fabric8.kubernetes.api.model.Pod;
+
+/**
+ * Service for administering the inventory of kubernetes service.
+ */
+public interface K8sPodAdminService extends K8sPodService {
+
+ /**
+ * Creates a kubernetes service with the given information.
+ *
+ * @param pod the new kubernetes pod
+ */
+ void createPod(Pod pod);
+
+ /**
+ * Updates the kubernetes pod with the given information.
+ *
+ * @param pod the updated kubernetes pod
+ */
+ void updatePod(Pod pod);
+
+ /**
+ * Removes the kubernetes pod.
+ *
+ * @param uid kubernetes pod UID
+ */
+ void removePod(String uid);
+
+ /**
+ * Clears the existing pods.
+ */
+ void clear();
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sPodEvent.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sPodEvent.java
new file mode 100644
index 0000000..c580431
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sPodEvent.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2019-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.k8snetworking.api;
+
+import io.fabric8.kubernetes.api.model.Pod;
+import org.onosproject.event.AbstractEvent;
+
+public class K8sPodEvent extends AbstractEvent<K8sPodEvent.Type, Pod> {
+
+ /**
+ * Creates an event of a given type for the specified kubernetes pod.
+ *
+ * @param type kubernetes pod event type
+ * @param subject kubernetes pod
+ */
+ protected K8sPodEvent(Type type, Pod subject) {
+ super(type, subject);
+ }
+
+ /**
+ * Kubernetes pod events.
+ */
+ public enum Type {
+
+ /**
+ * Signifies that a new kubernetes pod is created.
+ */
+ K8S_POD_CREATED,
+
+ /**
+ * Signifies that the kubernetes pod is updated.
+ */
+ K8S_POD_UPDATED,
+
+ /**
+ * Signifies that the kubernetes pod is removed.
+ */
+ K8S_POD_REMOVED,
+ }
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sPodListener.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sPodListener.java
new file mode 100644
index 0000000..c76e578
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sPodListener.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2019-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.k8snetworking.api;
+
+import org.onosproject.event.EventListener;
+
+/**
+ * Listener for kubernetes pod event.
+ */
+public interface K8sPodListener extends EventListener<K8sPodEvent> {
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sPodService.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sPodService.java
new file mode 100644
index 0000000..bc1049e
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sPodService.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2019-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.k8snetworking.api;
+
+import io.fabric8.kubernetes.api.model.Pod;
+import org.onosproject.event.ListenerService;
+
+import java.util.Set;
+
+/**
+ * Service for interacting with the inventory of kubernetes service.
+ */
+public interface K8sPodService
+ extends ListenerService<K8sPodEvent, K8sPodListener> {
+
+ /**
+ * Returns the kubernetes pod with the supplied pod UID.
+ *
+ * @param uid pod UID
+ * @return kubernetes pod
+ */
+ Pod pod(String uid);
+
+ /**
+ * Returns all kubernetes pods registered.
+ *
+ * @return set of kubernetes pods
+ */
+ Set<Pod> pods();
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sPodStore.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sPodStore.java
new file mode 100644
index 0000000..d0a3991
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sPodStore.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2019-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.k8snetworking.api;
+
+import io.fabric8.kubernetes.api.model.Pod;
+import org.onosproject.store.Store;
+
+import java.util.Set;
+
+/**
+ * Manages inventory of kubernetes pod; not intended for direct use.
+ */
+public interface K8sPodStore extends Store<K8sPodEvent, K8sPodStoreDelegate> {
+
+ /**
+ * Creates the new kubernetes pod.
+ *
+ * @param pod kubernetes pod
+ */
+ void createPod(Pod pod);
+
+ /**
+ * Updates the kubernetes pod.
+ *
+ * @param pod kubernetes pod
+ */
+ void updatePod(Pod pod);
+
+ /**
+ * Removes the kubernetes pod with the given pod UID.
+ *
+ * @param uid kubernetes pod UID
+ * @return removed kubernetes pod; null if failed
+ */
+ Pod removePod(String uid);
+
+ /**
+ * Returns the kubernetes pod with the given pod UID.
+ *
+ * @param uid kubernetes pod UID
+ * @return kubernetes pod; null if not found
+ */
+ Pod pod(String uid);
+
+ /**
+ * Returns all kubernetes pods.
+ *
+ * @return set of kubernetes pods
+ */
+ Set<Pod> pods();
+
+ /**
+ * Removes all kubernetes pods.
+ */
+ void clear();
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sPodStoreDelegate.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sPodStoreDelegate.java
new file mode 100644
index 0000000..a0693e1
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sPodStoreDelegate.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2019-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.k8snetworking.api;
+
+import org.onosproject.store.StoreDelegate;
+
+/**
+ * Kubernetes pod store delegate abstraction.
+ */
+public interface K8sPodStoreDelegate extends StoreDelegate<K8sPodEvent> {
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sServiceAdminService.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sServiceAdminService.java
new file mode 100644
index 0000000..097b1ce
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sServiceAdminService.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2019-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.k8snetworking.api;
+
+import io.fabric8.kubernetes.api.model.Service;
+
+/**
+ * Service for administering the inventory of kubernetes service.
+ */
+public interface K8sServiceAdminService extends K8sServiceService {
+
+ /**
+ * Creates a kubernetes service with the given information.
+ *
+ * @param service the new kubernetes service
+ */
+ void createService(Service service);
+
+ /**
+ * Updates the kubernetes service with the given information.
+ *
+ * @param service the updated kubernetes service
+ */
+ void updateService(Service service);
+
+ /**
+ * Removes the kubernetes service.
+ *
+ * @param uid kubernetes service UID
+ */
+ void removeService(String uid);
+
+ /**
+ * Clears the existing services.
+ */
+ void clear();
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sServiceEvent.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sServiceEvent.java
new file mode 100644
index 0000000..920ded3
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sServiceEvent.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2019-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.k8snetworking.api;
+
+import io.fabric8.kubernetes.api.model.Service;
+import org.onosproject.event.AbstractEvent;
+
+/**
+ * Describes kubernetes service event.
+ */
+public class K8sServiceEvent extends AbstractEvent<K8sServiceEvent.Type, Service> {
+
+ /**
+ * Creates an event of a given type for the specified kubernetes service.
+ *
+ * @param type kubernetes service event type
+ * @param subject kubernetes service
+ */
+ public K8sServiceEvent(Type type, Service subject) {
+ super(type, subject);
+ }
+
+ /**
+ * Kubernetes service events.
+ */
+ public enum Type {
+
+ /**
+ * Signifies that a new kubernetes service is created.
+ */
+ K8S_SERVICE_CREATED,
+
+ /**
+ * Signifies that the kubernetes service is updated.
+ */
+ K8S_SERVICE_UPDATED,
+
+ /**
+ * Signifies that the kubernetes service is removed.
+ */
+ K8S_SERVICE_REMOVED,
+ }
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sServiceListener.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sServiceListener.java
new file mode 100644
index 0000000..9beb1c4
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sServiceListener.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2019-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.k8snetworking.api;
+
+import org.onosproject.event.EventListener;
+
+/**
+ * Listener for kubernetes service event.
+ */
+public interface K8sServiceListener extends EventListener<K8sServiceEvent> {
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sServiceService.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sServiceService.java
new file mode 100644
index 0000000..115d979
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sServiceService.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2019-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.k8snetworking.api;
+
+import io.fabric8.kubernetes.api.model.Service;
+import org.onosproject.event.ListenerService;
+
+import java.util.Set;
+
+/**
+ * Service for interacting with the inventory of kubernetes service.
+ */
+public interface K8sServiceService
+ extends ListenerService<K8sServiceEvent, K8sServiceListener> {
+
+ /**
+ * Returns the kubernetes service with the supplied service UID.
+ *
+ * @param uid service UID
+ * @return kubernetes service
+ */
+ Service service(String uid);
+
+ /**
+ * Returns all kubernetes services registered.
+ *
+ * @return set of kubernetes services
+ */
+ Set<Service> services();
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sServiceStore.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sServiceStore.java
new file mode 100644
index 0000000..4fb5d62
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sServiceStore.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2019-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.k8snetworking.api;
+
+import io.fabric8.kubernetes.api.model.Service;
+import org.onosproject.store.Store;
+
+import java.util.Set;
+
+/**
+ * Manages inventory of kubernetes service; not intended for direct use.
+ */
+public interface K8sServiceStore
+ extends Store<K8sServiceEvent, K8sServiceStoreDelegate> {
+
+ /**
+ * Creates the new kubernetes service.
+ *
+ * @param service kubernetes service
+ */
+ void createService(Service service);
+
+ /**
+ * Updates the kubernetes service.
+ *
+ * @param service kubernetes service
+ */
+ void updateService(Service service);
+
+ /**
+ * Removes the kubernetes service with the given service UID.
+ *
+ * @param uid kubernetes service UID
+ * @return removed kubernetes service; null if failed
+ */
+ Service removeService(String uid);
+
+ /**
+ * Returns the kubernetes service with the given service UID.
+ *
+ * @param uid kubernetes service UID
+ * @return kubernetes service; null if not found
+ */
+ Service service(String uid);
+
+ /**
+ * Returns all kubernetes services.
+ *
+ * @return set of kubernetes services
+ */
+ Set<Service> services();
+
+ /**
+ * Removes all kubernetes services.
+ */
+ void clear();
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sServiceStoreDelegate.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sServiceStoreDelegate.java
new file mode 100644
index 0000000..01cd1cf
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sServiceStoreDelegate.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2019-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.k8snetworking.api;
+
+import org.onosproject.store.StoreDelegate;
+
+/**
+ * Kubernetes service store delegate abstraction.
+ */
+public interface K8sServiceStoreDelegate extends StoreDelegate<K8sServiceEvent> {
+}