read-only gRPC server

Change-Id: I2662ffacb3fdb8821b6ecd5d3de44d0d60732e40
diff --git a/xos/grpc/grpc_server.py b/xos/grpc/grpc_server.py
new file mode 100644
index 0000000..8a6112d
--- /dev/null
+++ b/xos/grpc/grpc_server.py
@@ -0,0 +1,101 @@
+#
+# Copyright 2017 the original author or authors.
+#
+# 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.
+#
+
+"""gRPC server endpoint"""
+import os
+import sys
+import uuid
+from Queue import Queue
+from collections import OrderedDict
+from os.path import abspath, basename, dirname, join, walk
+import grpc
+from concurrent import futures
+import zlib
+
+import django
+sys.path.append('/opt/xos')
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "xos.settings")
+
+from protos import xos_pb2
+from xos_grpc_api import XosService
+from google.protobuf.empty_pb2 import Empty
+
+from xos.logger import Logger, logging
+logger = Logger(level=logging.INFO)
+
+class XOSGrpcServer(object):
+
+    def __init__(self, port=50055):
+        self.port = port
+        logger.info('init-grpc-server port=%d' % self.port)
+        self.thread_pool = futures.ThreadPoolExecutor(max_workers=10)
+        self.server = grpc.server(self.thread_pool)
+        self.services = []
+
+    def start(self):
+        logger.debug('starting')
+
+        # add each service unit to the server and also to the list
+        for activator_func, service_class in (
+            (xos_pb2.add_xosServicer_to_server, XosService),
+        ):
+            service = service_class(self.thread_pool)
+            self.register(activator_func, service)
+
+        # open port
+        self.server.add_insecure_port('[::]:%s' % self.port)
+
+        # strat the server
+        self.server.start()
+
+        logger.info('started')
+        return self
+
+    def stop(self, grace=0):
+        logger.debug('stopping')
+        for service in self.services:
+            service.stop()
+        self.server.stop(grace)
+        logger.debug('stopped')
+
+    def register(self, activator_func, service):
+        """
+        Allow late registration of gRPC servicers
+        :param activator_func: The gRPC "add_XYZServicer_to_server method
+        autogenerated by protoc.
+        :param service: The object implementing the service.
+        :return: None
+        """
+        self.services.append(service)
+        activator_func(service, self.server)
+
+
+# This is to allow running the GRPC server in stand-alone mode
+
+if __name__ == '__main__':
+    django.setup()
+
+    server = XOSGrpcServer().start()
+
+    import time
+    _ONE_DAY_IN_SECONDS = 60 * 60 * 24
+    try:
+        while 1:
+            time.sleep(_ONE_DAY_IN_SECONDS)
+    except KeyboardInterrupt:
+        server.stop()
+
+
diff --git a/xos/grpc/protos/Makefile b/xos/grpc/protos/Makefile
new file mode 100644
index 0000000..a1c82da
--- /dev/null
+++ b/xos/grpc/protos/Makefile
@@ -0,0 +1,88 @@
+#
+# Copyright 2017 the original author or authors.
+#
+# 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.
+#
+
+# Makefile to build all protobuf and gRPC related artifacts
+
+#ifeq ($(VOLTHA_BASE)_set,_set)
+#  $(error To get started, please source the env.sh file from Voltha top level directory)
+#endif
+
+default: build
+
+PROTO_FILES := $(wildcard *.proto) $(wildcard third_party/google/api/*proto)
+PROTO_PB2_FILES := $(foreach f,$(PROTO_FILES),$(subst .proto,_pb2.py,$(f)))
+PROTO_DESC_FILES := $(foreach f,$(PROTO_FILES),$(subst .proto,.desc,$(f)))
+
+PROTOC_PREFIX := /usr/local
+PROTOC_LIBDIR := $(PROTOC_PREFIX)/lib
+
+PROTOC := $(PROTOC_PREFIX)/bin/protoc
+
+PROTOC_VERSION := "3.0.2"
+PROTOC_DOWNLOAD_PREFIX := "https://github.com/google/protobuf/releases/download"
+PROTOC_DIR := protobuf-$(PROTOC_VERSION)
+PROTOC_TARBALL := protobuf-python-$(PROTOC_VERSION).tar.gz
+PROTOC_DOWNLOAD_URI := $(PROTOC_DOWNLOAD_PREFIX)/v$(PROTOC_VERSION)/$(PROTOC_TARBALL)
+PROTOC_BUILD_TMP_DIR := "/tmp/protobuf-build-$(shell uname -s | tr '[:upper:]' '[:lower:]')"
+
+build: $(PROTOC) $(PROTO_PB2_FILES)
+
+%_pb2.py: %.proto Makefile
+	@echo "Building protocol buffer artifacts from $<"
+	env LD_LIBRARY_PATH=$(PROTOC_LIBDIR) python -m grpc.tools.protoc \
+	    -I. \
+	    -I./third_party \
+	    --python_out=. \
+	    --grpc_python_out=. \
+	    --descriptor_set_out=$(basename $<).desc \
+	    --include_imports \
+	    --include_source_info \
+	    $<
+
+clean:
+	rm -f $(PROTO_PB2_FILES) $(PROTO_DESC_FILES)
+
+$(PROTOC):
+	@echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
+	@echo "It looks like you don't have protocol buffer tools installed."
+	@echo "To install the protocol buffer toolchain, you can run:"
+	@echo "    make install-protoc"
+	@echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
+
+install-protoc: $(PROTOC)
+	@echo "Downloading and installing protocol buffer support."
+	@echo "Installation will require sodo priviledges"
+	@echo "This will take a few minutes."
+	mkdir -p $(PROTOC_BUILD_TMP_DIR)
+	@echo "We ask for sudo credentials now so we can install at the end"; \
+	sudo echo "Thanks"; \
+	    cd $(PROTOC_BUILD_TMP_DIR); \
+	    wget $(PROTOC_DOWNLOAD_URI); \
+	    tar xzvf $(PROTOC_TARBALL); \
+	    cd $(PROTOC_DIR); \
+	    ./configure --prefix=$(PROTOC_PREFIX); \
+	    make; \
+	    sudo make install
+
+uninstall-protoc:
+	cd $(PROTOC_BUILD_TMP_DIR)/$(PROTOC_DIR); \
+	    sudo make uninstall
+
+rebuild-protos:
+	cd ../../tools/apigen && python ./modelgen -a core protobuf.template.txt > /opt/xos/grpc/protos/xos.proto  
+	cd ../../tools/apigen && python ./modelgen -a core grpc_api.template.py > /opt/xos/grpc/xos_grpc_api.py  
+	cd ../../tools/apigen && python ./modelgen -a core grpc_list_test.template.py > /opt/xos/grpc/list_test.py
+
diff --git a/xos/grpc/protos/__init__.py b/xos/grpc/protos/__init__.py
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/xos/grpc/protos/__init__.py
@@ -0,0 +1 @@
+
diff --git a/xos/grpc/protos/common.proto b/xos/grpc/protos/common.proto
new file mode 100644
index 0000000..2b6a8e3
--- /dev/null
+++ b/xos/grpc/protos/common.proto
@@ -0,0 +1,7 @@
+syntax = "proto3";
+
+package xos;
+
+message ID {
+    int32 id = 1;
+}
diff --git a/xos/grpc/protos/third_party/README.md b/xos/grpc/protos/third_party/README.md
new file mode 100644
index 0000000..48cdce8
--- /dev/null
+++ b/xos/grpc/protos/third_party/README.md
@@ -0,0 +1 @@
+placeholder
diff --git a/xos/grpc/protos/xos.proto b/xos/grpc/protos/xos.proto
new file mode 100644
index 0000000..7f60b5e
--- /dev/null
+++ b/xos/grpc/protos/xos.proto
@@ -0,0 +1,2551 @@
+syntax = "proto3";
+
+package xos;
+
+import "google/protobuf/empty.proto";
+import "common.proto";
+
+
+
+message ServiceControllerResource {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 loadable_module_id = 15;
+      string name = 16;
+      string subdirectory = 17;
+      string kind = 18;
+      string format = 19;
+      string url = 20;
+}
+
+message ServiceControllerResources {
+    repeated ServiceControllerResource items = 1;
+}
+
+
+
+message XOSVolume {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 xos_id = 15;
+      string container_path = 16;
+      string host_path = 17;
+      bool read_only = 18;
+}
+
+message XOSVolumes {
+    repeated XOSVolume items = 1;
+}
+
+
+
+message ServiceAttribute {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string name = 15;
+      string value = 16;
+      int32 service_id = 17;
+}
+
+message ServiceAttributes {
+    repeated ServiceAttribute items = 1;
+}
+
+
+
+message ControllerImages {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 image_id = 15;
+      int32 controller_id = 16;
+      string glance_image_id = 17;
+}
+
+message ControllerImagess {
+    repeated ControllerImages items = 1;
+}
+
+
+
+message ControllerSitePrivilege {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 controller_id = 15;
+      int32 site_privilege_id = 16;
+      string role_id = 17;
+}
+
+message ControllerSitePrivileges {
+    repeated ControllerSitePrivilege items = 1;
+}
+
+
+
+message Image {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string name = 15;
+      string kind = 16;
+      string disk_format = 17;
+      string container_format = 18;
+      string path = 19;
+      string tag = 20;
+}
+
+message Images {
+    repeated Image items = 1;
+}
+
+
+
+message ControllerNetwork {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 network_id = 15;
+      int32 controller_id = 16;
+      string subnet = 17;
+      string start_ip = 18;
+      string stop_ip = 19;
+      string net_id = 20;
+      string router_id = 21;
+      string subnet_id = 22;
+      string gateway = 23;
+      string segmentation_id = 24;
+}
+
+message ControllerNetworks {
+    repeated ControllerNetwork items = 1;
+}
+
+
+
+message Site {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string name = 15;
+      string site_url = 16;
+      bool enabled = 17;
+      bool hosts_nodes = 18;
+      bool hosts_users = 19;
+      float longitude = 20;
+      float latitude = 21;
+      string login_base = 22;
+      bool is_public = 23;
+      string abbreviated_name = 24;
+}
+
+message Sites {
+    repeated Site items = 1;
+}
+
+
+
+message Library {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 xos_id = 15;
+      string name = 16;
+      string base_url = 17;
+      string version = 18;
+      string provides = 19;
+      string requires = 20;
+}
+
+message Librarys {
+    repeated Library items = 1;
+}
+
+
+
+message SliceRole {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string role = 15;
+}
+
+message SliceRoles {
+    repeated SliceRole items = 1;
+}
+
+
+
+message SiteDeployment {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 site_id = 15;
+      int32 deployment_id = 16;
+      int32 controller_id = 17;
+      string availability_zone = 18;
+}
+
+message SiteDeployments {
+    repeated SiteDeployment items = 1;
+}
+
+
+
+message XOSComponentLink {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 component_id = 15;
+      string container = 16;
+      string alias = 17;
+      string kind = 18;
+}
+
+message XOSComponentLinks {
+    repeated XOSComponentLink items = 1;
+}
+
+
+
+message TenantPrivilege {
+      float created = 1;
+      float updated = 2;
+      float enacted = 3;
+      float policed = 4;
+      string backend_register = 5;
+      bool backend_need_delete = 6;
+      bool backend_need_reap = 7;
+      string backend_status = 8;
+      bool deleted = 9;
+      bool write_protect = 10;
+      bool lazy_blocked = 11;
+      bool no_sync = 12;
+      bool no_policy = 13;
+      int32 id = 14;
+      int32 user_id = 15;
+      int32 tenant_id = 16;
+      int32 role_id = 17;
+}
+
+message TenantPrivileges {
+    repeated TenantPrivilege items = 1;
+}
+
+
+
+message Tag {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 service_id = 15;
+      string name = 16;
+      string value = 17;
+      int32 content_type_id = 18;
+      uint32 object_id = 19;
+}
+
+message Tags {
+    repeated Tag items = 1;
+}
+
+
+
+message ServiceMonitoringAgentInfo {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string name = 15;
+      int32 service_id = 16;
+      string target_uri = 17;
+}
+
+message ServiceMonitoringAgentInfos {
+    repeated ServiceMonitoringAgentInfo items = 1;
+}
+
+
+
+message XOSComponent {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 xos_id = 15;
+      string name = 16;
+      string base_url = 17;
+      string version = 18;
+      string provides = 19;
+      string requires = 20;
+      string image = 21;
+      string command = 22;
+      string ports = 23;
+}
+
+message XOSComponents {
+    repeated XOSComponent items = 1;
+}
+
+
+
+message Invoice {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      float date = 15;
+      int32 account_id = 16;
+}
+
+message Invoices {
+    repeated Invoice items = 1;
+}
+
+
+
+message SlicePrivilege {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 user_id = 15;
+      int32 slice_id = 16;
+      int32 role_id = 17;
+}
+
+message SlicePrivileges {
+    repeated SlicePrivilege items = 1;
+}
+
+
+
+message Flavor {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string name = 15;
+      string description = 16;
+      string flavor = 17;
+      int32 order = 18;
+      bool default = 19;
+}
+
+message Flavors {
+    repeated Flavor items = 1;
+}
+
+
+
+message Port {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 network_id = 15;
+      int32 instance_id = 16;
+      string ip = 17;
+      string port_id = 18;
+      string mac = 19;
+      bool xos_created = 20;
+}
+
+message Ports {
+    repeated Port items = 1;
+}
+
+
+
+message ServiceRole {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string role = 15;
+}
+
+message ServiceRoles {
+    repeated ServiceRole items = 1;
+}
+
+
+
+message ControllerSite {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 site_id = 15;
+      int32 controller_id = 16;
+      string tenant_id = 17;
+}
+
+message ControllerSites {
+    repeated ControllerSite items = 1;
+}
+
+
+
+message ControllerSlice {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 controller_id = 15;
+      int32 slice_id = 16;
+      string tenant_id = 17;
+}
+
+message ControllerSlices {
+    repeated ControllerSlice items = 1;
+}
+
+
+
+message TenantRole {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string role = 15;
+}
+
+message TenantRoles {
+    repeated TenantRole items = 1;
+}
+
+
+
+message Slice {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string name = 15;
+      bool enabled = 16;
+      bool omf_friendly = 17;
+      string description = 18;
+      string slice_url = 19;
+      int32 site_id = 20;
+      int32 max_instances = 21;
+      int32 service_id = 22;
+      string network = 23;
+      string exposed_ports = 24;
+      int32 serviceClass_id = 25;
+      int32 creator_id = 26;
+      int32 default_flavor_id = 27;
+      int32 default_image_id = 28;
+      int32 default_node_id = 29;
+      string mount_data_sets = 30;
+      string default_isolation = 31;
+}
+
+message Slices {
+    repeated Slice items = 1;
+}
+
+
+
+message LoadableModuleResource {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 loadable_module_id = 15;
+      string name = 16;
+      string subdirectory = 17;
+      string kind = 18;
+      string format = 19;
+      string url = 20;
+}
+
+message LoadableModuleResources {
+    repeated LoadableModuleResource items = 1;
+}
+
+
+
+message ControllerRole {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string role = 15;
+}
+
+message ControllerRoles {
+    repeated ControllerRole items = 1;
+}
+
+
+
+message Diag {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string name = 15;
+}
+
+message Diags {
+    repeated Diag items = 1;
+}
+
+
+
+message XOS {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string name = 15;
+      int32 ui_port = 16;
+      int32 bootstrap_ui_port = 17;
+      string db_container_name = 18;
+      string redis_container_name = 19;
+      string docker_project_name = 20;
+      bool enable_build = 21;
+      bool frontend_only = 22;
+      string source_ui_image = 23;
+      string extra_hosts = 24;
+      bool no_start = 25;
+}
+
+message XOSs {
+    repeated XOS items = 1;
+}
+
+
+
+message ServiceClass {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string name = 15;
+      string description = 16;
+      int32 commitment = 17;
+      int32 membershipFee = 18;
+      int32 membershipFeeMonths = 19;
+      bool upgradeRequiresApproval = 20;
+}
+
+message ServiceClasss {
+    repeated ServiceClass items = 1;
+}
+
+
+
+message TenantAttribute {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string name = 15;
+      string value = 16;
+      int32 tenant_id = 17;
+}
+
+message TenantAttributes {
+    repeated TenantAttribute items = 1;
+}
+
+
+
+message SiteRole {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string role = 15;
+}
+
+message SiteRoles {
+    repeated SiteRole items = 1;
+}
+
+
+
+message Subscriber {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string kind = 15;
+      string name = 16;
+      string service_specific_attribute = 17;
+      string service_specific_id = 18;
+}
+
+message Subscribers {
+    repeated Subscriber items = 1;
+}
+
+
+
+message Instance {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string instance_id = 15;
+      string instance_uuid = 16;
+      string name = 17;
+      string instance_name = 18;
+      string ip = 19;
+      int32 image_id = 20;
+      int32 creator_id = 21;
+      int32 slice_id = 22;
+      int32 deployment_id = 23;
+      int32 node_id = 24;
+      int32 numberCores = 25;
+      int32 flavor_id = 26;
+      string userData = 27;
+      string isolation = 28;
+      string volumes = 29;
+      int32 parent_id = 30;
+}
+
+message Instances {
+    repeated Instance items = 1;
+}
+
+
+
+message Charge {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 account_id = 15;
+      int32 slice_id = 16;
+      string kind = 17;
+      string state = 18;
+      float date = 19;
+      int32 object_id = 20;
+      float amount = 21;
+      float coreHours = 22;
+      int32 invoice_id = 23;
+}
+
+message Charges {
+    repeated Charge items = 1;
+}
+
+
+
+message Program {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string name = 15;
+      string description = 16;
+      string kind = 17;
+      string command = 18;
+      int32 owner_id = 19;
+      string contents = 20;
+      string output = 21;
+      string messages = 22;
+      string status = 23;
+}
+
+message Programs {
+    repeated Program items = 1;
+}
+
+
+
+message Role {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string role_type = 15;
+      string role = 16;
+      string description = 17;
+      int32 content_type_id = 18;
+}
+
+message Roles {
+    repeated Role items = 1;
+}
+
+
+
+message NodeLabel {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string name = 15;
+}
+
+message NodeLabels {
+    repeated NodeLabel items = 1;
+}
+
+
+
+message NetworkTemplate {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string name = 15;
+      string description = 16;
+      int32 guaranteed_bandwidth = 17;
+      string visibility = 18;
+      string translation = 19;
+      string access = 20;
+      string shared_network_name = 21;
+      string shared_network_id = 22;
+      string topology_kind = 23;
+      string controller_kind = 24;
+      string vtn_kind = 25;
+}
+
+message NetworkTemplates {
+    repeated NetworkTemplate items = 1;
+}
+
+
+
+message ServiceController {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 xos_id = 15;
+      string name = 16;
+      string base_url = 17;
+      string version = 18;
+      string provides = 19;
+      string requires = 20;
+      string synchronizer_run = 21;
+      string synchronizer_config = 22;
+      bool no_start = 23;
+}
+
+message ServiceControllers {
+    repeated ServiceController items = 1;
+}
+
+
+
+message LoadableModule {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 xos_id = 15;
+      string name = 16;
+      string base_url = 17;
+      string version = 18;
+      string provides = 19;
+      string requires = 20;
+}
+
+message LoadableModules {
+    repeated LoadableModule items = 1;
+}
+
+
+
+message UsableObject {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string name = 15;
+}
+
+message UsableObjects {
+    repeated UsableObject items = 1;
+}
+
+
+
+message Node {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string name = 15;
+      int32 site_deployment_id = 16;
+      int32 site_id = 17;
+}
+
+message Nodes {
+    repeated Node items = 1;
+}
+
+
+
+message AddressPool {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string name = 15;
+      string addresses = 16;
+      string gateway_ip = 17;
+      string gateway_mac = 18;
+      string cidr = 19;
+      string inuse = 20;
+      int32 service_id = 21;
+}
+
+message AddressPools {
+    repeated AddressPool items = 1;
+}
+
+
+
+message DashboardView {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string name = 15;
+      string url = 16;
+      bool enabled = 17;
+      string icon = 18;
+      string icon_active = 19;
+}
+
+message DashboardViews {
+    repeated DashboardView items = 1;
+}
+
+
+
+message NetworkParameter {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 parameter_id = 15;
+      string value = 16;
+      int32 content_type_id = 17;
+      uint32 object_id = 18;
+}
+
+message NetworkParameters {
+    repeated NetworkParameter items = 1;
+}
+
+
+
+message ImageDeployments {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 image_id = 15;
+      int32 deployment_id = 16;
+}
+
+message ImageDeploymentss {
+    repeated ImageDeployments items = 1;
+}
+
+
+
+message ControllerUser {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 user_id = 15;
+      int32 controller_id = 16;
+      string kuser_id = 17;
+}
+
+message ControllerUsers {
+    repeated ControllerUser items = 1;
+}
+
+
+
+message ReservedResource {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 instance_id = 15;
+      int32 resource_id = 16;
+      int32 quantity = 17;
+      int32 reservationSet_id = 18;
+}
+
+message ReservedResources {
+    repeated ReservedResource items = 1;
+}
+
+
+
+message JournalEntry {
+      int32 id = 1;
+      string objClassName = 2;
+      string objId = 3;
+      string objUnicode = 4;
+      string operation = 5;
+      string msg = 6;
+      float timestamp = 7;
+}
+
+message JournalEntrys {
+    repeated JournalEntry items = 1;
+}
+
+
+
+message UserCredential {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 user_id = 15;
+      string name = 16;
+      string key_id = 17;
+      string enc_value = 18;
+}
+
+message UserCredentials {
+    repeated UserCredential items = 1;
+}
+
+
+
+message ControllerDashboardView {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 controller_id = 15;
+      int32 dashboardView_id = 16;
+      bool enabled = 17;
+      string url = 18;
+}
+
+message ControllerDashboardViews {
+    repeated ControllerDashboardView items = 1;
+}
+
+
+
+message UserDashboardView {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 user_id = 15;
+      int32 dashboardView_id = 16;
+      int32 order = 17;
+}
+
+message UserDashboardViews {
+    repeated UserDashboardView items = 1;
+}
+
+
+
+message Controller {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string name = 15;
+      string backend_type = 16;
+      string version = 17;
+      string auth_url = 18;
+      string admin_user = 19;
+      string admin_password = 20;
+      string admin_tenant = 21;
+      string domain = 22;
+      string rabbit_host = 23;
+      string rabbit_user = 24;
+      string rabbit_password = 25;
+      int32 deployment_id = 26;
+}
+
+message Controllers {
+    repeated Controller items = 1;
+}
+
+
+
+message TenantRootRole {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string role = 15;
+}
+
+message TenantRootRoles {
+    repeated TenantRootRole items = 1;
+}
+
+
+
+message Deployment {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string name = 15;
+      string accessControl = 16;
+}
+
+message Deployments {
+    repeated Deployment items = 1;
+}
+
+
+
+message Reservation {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      float startTime = 15;
+      int32 slice_id = 16;
+      int32 duration = 17;
+}
+
+message Reservations {
+    repeated Reservation items = 1;
+}
+
+
+
+message SitePrivilege {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 user_id = 15;
+      int32 site_id = 16;
+      int32 role_id = 17;
+}
+
+message SitePrivileges {
+    repeated SitePrivilege items = 1;
+}
+
+
+
+message Payment {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 account_id = 15;
+      float amount = 16;
+      float date = 17;
+}
+
+message Payments {
+    repeated Payment items = 1;
+}
+
+
+
+message Tenant {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string kind = 15;
+      int32 provider_service_id = 16;
+      int32 subscriber_service_id = 17;
+      int32 subscriber_tenant_id = 18;
+      int32 subscriber_user_id = 19;
+      int32 subscriber_root_id = 20;
+      int32 subscriber_network_id = 21;
+      string service_specific_id = 22;
+      string service_specific_attribute = 23;
+      string connect_method = 24;
+}
+
+message Tenants {
+    repeated Tenant items = 1;
+}
+
+
+
+message Network {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string name = 15;
+      int32 template_id = 16;
+      string subnet = 17;
+      string start_ip = 18;
+      string end_ip = 19;
+      string ports = 20;
+      string labels = 21;
+      int32 owner_id = 22;
+      int32 guaranteed_bandwidth = 23;
+      bool permit_all_slices = 24;
+      string topology_parameters = 25;
+      string controller_url = 26;
+      string controller_parameters = 27;
+      string network_id = 28;
+      string router_id = 29;
+      string subnet_id = 30;
+      bool autoconnect = 31;
+}
+
+message Networks {
+    repeated Network items = 1;
+}
+
+
+
+message NetworkSlice {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 network_id = 15;
+      int32 slice_id = 16;
+}
+
+message NetworkSlices {
+    repeated NetworkSlice items = 1;
+}
+
+
+
+message Account {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 site_id = 15;
+}
+
+message Accounts {
+    repeated Account items = 1;
+}
+
+
+
+message TenantRoot {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string kind = 15;
+      string name = 16;
+      string service_specific_attribute = 17;
+      string service_specific_id = 18;
+}
+
+message TenantRoots {
+    repeated TenantRoot items = 1;
+}
+
+
+
+message Service {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string description = 15;
+      bool enabled = 16;
+      string kind = 17;
+      string name = 18;
+      string versionNumber = 19;
+      bool published = 20;
+      string view_url = 21;
+      string icon_url = 22;
+      string public_key = 23;
+      string private_key_fn = 24;
+      string service_specific_id = 25;
+      string service_specific_attribute = 26;
+      int32 controller_id = 27;
+}
+
+message Services {
+    repeated Service items = 1;
+}
+
+
+
+message ControllerSlicePrivilege {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 controller_id = 15;
+      int32 slice_privilege_id = 16;
+      string role_id = 17;
+}
+
+message ControllerSlicePrivileges {
+    repeated ControllerSlicePrivilege items = 1;
+}
+
+
+
+message SiteCredential {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 site_id = 15;
+      string name = 16;
+      string key_id = 17;
+      string enc_value = 18;
+}
+
+message SiteCredentials {
+    repeated SiteCredential items = 1;
+}
+
+
+
+message DeploymentPrivilege {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 user_id = 15;
+      int32 deployment_id = 16;
+      int32 role_id = 17;
+}
+
+message DeploymentPrivileges {
+    repeated DeploymentPrivilege items = 1;
+}
+
+
+
+message NetworkParameterType {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string name = 15;
+      string description = 16;
+}
+
+message NetworkParameterTypes {
+    repeated NetworkParameterType items = 1;
+}
+
+
+
+message Provider {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string kind = 15;
+      string name = 16;
+      string service_specific_attribute = 17;
+      string service_specific_id = 18;
+}
+
+message Providers {
+    repeated Provider items = 1;
+}
+
+
+
+message TenantWithContainer {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string kind = 15;
+      int32 provider_service_id = 16;
+      int32 subscriber_service_id = 17;
+      int32 subscriber_tenant_id = 18;
+      int32 subscriber_user_id = 19;
+      int32 subscriber_root_id = 20;
+      int32 subscriber_network_id = 21;
+      string service_specific_id = 22;
+      string service_specific_attribute = 23;
+      string connect_method = 24;
+}
+
+message TenantWithContainers {
+    repeated TenantWithContainer items = 1;
+}
+
+
+
+message DeploymentRole {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string role = 15;
+}
+
+message DeploymentRoles {
+    repeated DeploymentRole items = 1;
+}
+
+
+
+message Project {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string name = 15;
+}
+
+message Projects {
+    repeated Project items = 1;
+}
+
+
+
+message TenantRootPrivilege {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 user_id = 15;
+      int32 tenant_root_id = 16;
+      int32 role_id = 17;
+}
+
+message TenantRootPrivileges {
+    repeated TenantRootPrivilege items = 1;
+}
+
+
+
+message XOSComponentVolume {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 component_id = 15;
+      string name = 16;
+      string container_path = 17;
+      string host_path = 18;
+      bool read_only = 19;
+}
+
+message XOSComponentVolumes {
+    repeated XOSComponentVolume items = 1;
+}
+
+
+
+message SliceCredential {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 slice_id = 15;
+      string name = 16;
+      string key_id = 17;
+      string enc_value = 18;
+}
+
+message SliceCredentials {
+    repeated SliceCredential items = 1;
+}
+
+
+
+message SliceTag {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 slice_id = 15;
+      string name = 16;
+      string value = 17;
+}
+
+message SliceTags {
+    repeated SliceTag items = 1;
+}
+
+
+
+message CoarseTenant {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string kind = 15;
+      int32 provider_service_id = 16;
+      int32 subscriber_service_id = 17;
+      int32 subscriber_tenant_id = 18;
+      int32 subscriber_user_id = 19;
+      int32 subscriber_root_id = 20;
+      int32 subscriber_network_id = 21;
+      string service_specific_id = 22;
+      string service_specific_attribute = 23;
+      string connect_method = 24;
+}
+
+message CoarseTenants {
+    repeated CoarseTenant items = 1;
+}
+
+
+
+message Router {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      string name = 15;
+      int32 owner_id = 16;
+}
+
+message Routers {
+    repeated Router items = 1;
+}
+
+
+
+message ServiceResource {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 serviceClass_id = 15;
+      string name = 16;
+      int32 maxUnitsDeployment = 17;
+      int32 maxUnitsNode = 18;
+      int32 maxDuration = 19;
+      int32 bucketInRate = 20;
+      int32 bucketMaxSize = 21;
+      int32 cost = 22;
+      bool calendarReservable = 23;
+}
+
+message ServiceResources {
+    repeated ServiceResource items = 1;
+}
+
+
+
+message ServicePrivilege {
+      int32 id = 1;
+      float created = 2;
+      float updated = 3;
+      float enacted = 4;
+      float policed = 5;
+      string backend_register = 6;
+      bool backend_need_delete = 7;
+      bool backend_need_reap = 8;
+      string backend_status = 9;
+      bool deleted = 10;
+      bool write_protect = 11;
+      bool lazy_blocked = 12;
+      bool no_sync = 13;
+      bool no_policy = 14;
+      int32 user_id = 15;
+      int32 service_id = 16;
+      int32 role_id = 17;
+}
+
+message ServicePrivileges {
+    repeated ServicePrivilege items = 1;
+}
+
+
+
+message User {
+      int32 id = 1;
+      string password = 2;
+      float last_login = 3;
+      string email = 4;
+      string username = 5;
+      string firstname = 6;
+      string lastname = 7;
+      string phone = 8;
+      string user_url = 9;
+      int32 site_id = 10;
+      string public_key = 11;
+      bool is_active = 12;
+      bool is_admin = 13;
+      bool is_staff = 14;
+      bool is_readonly = 15;
+      bool is_registering = 16;
+      bool is_appuser = 17;
+      string login_page = 18;
+      float created = 19;
+      float updated = 20;
+      float enacted = 21;
+      float policed = 22;
+      string backend_status = 23;
+      bool backend_need_delete = 24;
+      bool backend_need_reap = 25;
+      bool deleted = 26;
+      bool write_protect = 27;
+      bool lazy_blocked = 28;
+      bool no_sync = 29;
+      bool no_policy = 30;
+      string timezone = 31;
+}
+
+message Users {
+    repeated User items = 1;
+}
+
+
+
+service xos {
+
+  rpc ListServiceControllerResource(google.protobuf.Empty) returns (ServiceControllerResources) {}
+  rpc GetServiceControllerResource(ID) returns (ServiceControllerResource) {}
+
+  rpc ListXOSVolume(google.protobuf.Empty) returns (XOSVolumes) {}
+  rpc GetXOSVolume(ID) returns (XOSVolume) {}
+
+  rpc ListServiceAttribute(google.protobuf.Empty) returns (ServiceAttributes) {}
+  rpc GetServiceAttribute(ID) returns (ServiceAttribute) {}
+
+  rpc ListControllerImages(google.protobuf.Empty) returns (ControllerImagess) {}
+  rpc GetControllerImages(ID) returns (ControllerImages) {}
+
+  rpc ListControllerSitePrivilege(google.protobuf.Empty) returns (ControllerSitePrivileges) {}
+  rpc GetControllerSitePrivilege(ID) returns (ControllerSitePrivilege) {}
+
+  rpc ListImage(google.protobuf.Empty) returns (Images) {}
+  rpc GetImage(ID) returns (Image) {}
+
+  rpc ListControllerNetwork(google.protobuf.Empty) returns (ControllerNetworks) {}
+  rpc GetControllerNetwork(ID) returns (ControllerNetwork) {}
+
+  rpc ListSite(google.protobuf.Empty) returns (Sites) {}
+  rpc GetSite(ID) returns (Site) {}
+
+  rpc ListLibrary(google.protobuf.Empty) returns (Librarys) {}
+  rpc GetLibrary(ID) returns (Library) {}
+
+  rpc ListSliceRole(google.protobuf.Empty) returns (SliceRoles) {}
+  rpc GetSliceRole(ID) returns (SliceRole) {}
+
+  rpc ListSiteDeployment(google.protobuf.Empty) returns (SiteDeployments) {}
+  rpc GetSiteDeployment(ID) returns (SiteDeployment) {}
+
+  rpc ListXOSComponentLink(google.protobuf.Empty) returns (XOSComponentLinks) {}
+  rpc GetXOSComponentLink(ID) returns (XOSComponentLink) {}
+
+  rpc ListTenantPrivilege(google.protobuf.Empty) returns (TenantPrivileges) {}
+  rpc GetTenantPrivilege(ID) returns (TenantPrivilege) {}
+
+  rpc ListTag(google.protobuf.Empty) returns (Tags) {}
+  rpc GetTag(ID) returns (Tag) {}
+
+  rpc ListServiceMonitoringAgentInfo(google.protobuf.Empty) returns (ServiceMonitoringAgentInfos) {}
+  rpc GetServiceMonitoringAgentInfo(ID) returns (ServiceMonitoringAgentInfo) {}
+
+  rpc ListXOSComponent(google.protobuf.Empty) returns (XOSComponents) {}
+  rpc GetXOSComponent(ID) returns (XOSComponent) {}
+
+  rpc ListInvoice(google.protobuf.Empty) returns (Invoices) {}
+  rpc GetInvoice(ID) returns (Invoice) {}
+
+  rpc ListSlicePrivilege(google.protobuf.Empty) returns (SlicePrivileges) {}
+  rpc GetSlicePrivilege(ID) returns (SlicePrivilege) {}
+
+  rpc ListFlavor(google.protobuf.Empty) returns (Flavors) {}
+  rpc GetFlavor(ID) returns (Flavor) {}
+
+  rpc ListPort(google.protobuf.Empty) returns (Ports) {}
+  rpc GetPort(ID) returns (Port) {}
+
+  rpc ListServiceRole(google.protobuf.Empty) returns (ServiceRoles) {}
+  rpc GetServiceRole(ID) returns (ServiceRole) {}
+
+  rpc ListControllerSite(google.protobuf.Empty) returns (ControllerSites) {}
+  rpc GetControllerSite(ID) returns (ControllerSite) {}
+
+  rpc ListControllerSlice(google.protobuf.Empty) returns (ControllerSlices) {}
+  rpc GetControllerSlice(ID) returns (ControllerSlice) {}
+
+  rpc ListTenantRole(google.protobuf.Empty) returns (TenantRoles) {}
+  rpc GetTenantRole(ID) returns (TenantRole) {}
+
+  rpc ListSlice(google.protobuf.Empty) returns (Slices) {}
+  rpc GetSlice(ID) returns (Slice) {}
+
+  rpc ListLoadableModuleResource(google.protobuf.Empty) returns (LoadableModuleResources) {}
+  rpc GetLoadableModuleResource(ID) returns (LoadableModuleResource) {}
+
+  rpc ListControllerRole(google.protobuf.Empty) returns (ControllerRoles) {}
+  rpc GetControllerRole(ID) returns (ControllerRole) {}
+
+  rpc ListDiag(google.protobuf.Empty) returns (Diags) {}
+  rpc GetDiag(ID) returns (Diag) {}
+
+  rpc ListXOS(google.protobuf.Empty) returns (XOSs) {}
+  rpc GetXOS(ID) returns (XOS) {}
+
+  rpc ListServiceClass(google.protobuf.Empty) returns (ServiceClasss) {}
+  rpc GetServiceClass(ID) returns (ServiceClass) {}
+
+  rpc ListTenantAttribute(google.protobuf.Empty) returns (TenantAttributes) {}
+  rpc GetTenantAttribute(ID) returns (TenantAttribute) {}
+
+  rpc ListSiteRole(google.protobuf.Empty) returns (SiteRoles) {}
+  rpc GetSiteRole(ID) returns (SiteRole) {}
+
+  rpc ListSubscriber(google.protobuf.Empty) returns (Subscribers) {}
+  rpc GetSubscriber(ID) returns (Subscriber) {}
+
+  rpc ListInstance(google.protobuf.Empty) returns (Instances) {}
+  rpc GetInstance(ID) returns (Instance) {}
+
+  rpc ListCharge(google.protobuf.Empty) returns (Charges) {}
+  rpc GetCharge(ID) returns (Charge) {}
+
+  rpc ListProgram(google.protobuf.Empty) returns (Programs) {}
+  rpc GetProgram(ID) returns (Program) {}
+
+  rpc ListRole(google.protobuf.Empty) returns (Roles) {}
+  rpc GetRole(ID) returns (Role) {}
+
+  rpc ListNodeLabel(google.protobuf.Empty) returns (NodeLabels) {}
+  rpc GetNodeLabel(ID) returns (NodeLabel) {}
+
+  rpc ListNetworkTemplate(google.protobuf.Empty) returns (NetworkTemplates) {}
+  rpc GetNetworkTemplate(ID) returns (NetworkTemplate) {}
+
+  rpc ListServiceController(google.protobuf.Empty) returns (ServiceControllers) {}
+  rpc GetServiceController(ID) returns (ServiceController) {}
+
+  rpc ListLoadableModule(google.protobuf.Empty) returns (LoadableModules) {}
+  rpc GetLoadableModule(ID) returns (LoadableModule) {}
+
+  rpc ListUsableObject(google.protobuf.Empty) returns (UsableObjects) {}
+  rpc GetUsableObject(ID) returns (UsableObject) {}
+
+  rpc ListNode(google.protobuf.Empty) returns (Nodes) {}
+  rpc GetNode(ID) returns (Node) {}
+
+  rpc ListAddressPool(google.protobuf.Empty) returns (AddressPools) {}
+  rpc GetAddressPool(ID) returns (AddressPool) {}
+
+  rpc ListDashboardView(google.protobuf.Empty) returns (DashboardViews) {}
+  rpc GetDashboardView(ID) returns (DashboardView) {}
+
+  rpc ListNetworkParameter(google.protobuf.Empty) returns (NetworkParameters) {}
+  rpc GetNetworkParameter(ID) returns (NetworkParameter) {}
+
+  rpc ListImageDeployments(google.protobuf.Empty) returns (ImageDeploymentss) {}
+  rpc GetImageDeployments(ID) returns (ImageDeployments) {}
+
+  rpc ListControllerUser(google.protobuf.Empty) returns (ControllerUsers) {}
+  rpc GetControllerUser(ID) returns (ControllerUser) {}
+
+  rpc ListReservedResource(google.protobuf.Empty) returns (ReservedResources) {}
+  rpc GetReservedResource(ID) returns (ReservedResource) {}
+
+  rpc ListJournalEntry(google.protobuf.Empty) returns (JournalEntrys) {}
+  rpc GetJournalEntry(ID) returns (JournalEntry) {}
+
+  rpc ListUserCredential(google.protobuf.Empty) returns (UserCredentials) {}
+  rpc GetUserCredential(ID) returns (UserCredential) {}
+
+  rpc ListControllerDashboardView(google.protobuf.Empty) returns (ControllerDashboardViews) {}
+  rpc GetControllerDashboardView(ID) returns (ControllerDashboardView) {}
+
+  rpc ListUserDashboardView(google.protobuf.Empty) returns (UserDashboardViews) {}
+  rpc GetUserDashboardView(ID) returns (UserDashboardView) {}
+
+  rpc ListController(google.protobuf.Empty) returns (Controllers) {}
+  rpc GetController(ID) returns (Controller) {}
+
+  rpc ListTenantRootRole(google.protobuf.Empty) returns (TenantRootRoles) {}
+  rpc GetTenantRootRole(ID) returns (TenantRootRole) {}
+
+  rpc ListDeployment(google.protobuf.Empty) returns (Deployments) {}
+  rpc GetDeployment(ID) returns (Deployment) {}
+
+  rpc ListReservation(google.protobuf.Empty) returns (Reservations) {}
+  rpc GetReservation(ID) returns (Reservation) {}
+
+  rpc ListSitePrivilege(google.protobuf.Empty) returns (SitePrivileges) {}
+  rpc GetSitePrivilege(ID) returns (SitePrivilege) {}
+
+  rpc ListPayment(google.protobuf.Empty) returns (Payments) {}
+  rpc GetPayment(ID) returns (Payment) {}
+
+  rpc ListTenant(google.protobuf.Empty) returns (Tenants) {}
+  rpc GetTenant(ID) returns (Tenant) {}
+
+  rpc ListNetwork(google.protobuf.Empty) returns (Networks) {}
+  rpc GetNetwork(ID) returns (Network) {}
+
+  rpc ListNetworkSlice(google.protobuf.Empty) returns (NetworkSlices) {}
+  rpc GetNetworkSlice(ID) returns (NetworkSlice) {}
+
+  rpc ListAccount(google.protobuf.Empty) returns (Accounts) {}
+  rpc GetAccount(ID) returns (Account) {}
+
+  rpc ListTenantRoot(google.protobuf.Empty) returns (TenantRoots) {}
+  rpc GetTenantRoot(ID) returns (TenantRoot) {}
+
+  rpc ListService(google.protobuf.Empty) returns (Services) {}
+  rpc GetService(ID) returns (Service) {}
+
+  rpc ListControllerSlicePrivilege(google.protobuf.Empty) returns (ControllerSlicePrivileges) {}
+  rpc GetControllerSlicePrivilege(ID) returns (ControllerSlicePrivilege) {}
+
+  rpc ListSiteCredential(google.protobuf.Empty) returns (SiteCredentials) {}
+  rpc GetSiteCredential(ID) returns (SiteCredential) {}
+
+  rpc ListDeploymentPrivilege(google.protobuf.Empty) returns (DeploymentPrivileges) {}
+  rpc GetDeploymentPrivilege(ID) returns (DeploymentPrivilege) {}
+
+  rpc ListNetworkParameterType(google.protobuf.Empty) returns (NetworkParameterTypes) {}
+  rpc GetNetworkParameterType(ID) returns (NetworkParameterType) {}
+
+  rpc ListProvider(google.protobuf.Empty) returns (Providers) {}
+  rpc GetProvider(ID) returns (Provider) {}
+
+  rpc ListTenantWithContainer(google.protobuf.Empty) returns (TenantWithContainers) {}
+  rpc GetTenantWithContainer(ID) returns (TenantWithContainer) {}
+
+  rpc ListDeploymentRole(google.protobuf.Empty) returns (DeploymentRoles) {}
+  rpc GetDeploymentRole(ID) returns (DeploymentRole) {}
+
+  rpc ListProject(google.protobuf.Empty) returns (Projects) {}
+  rpc GetProject(ID) returns (Project) {}
+
+  rpc ListTenantRootPrivilege(google.protobuf.Empty) returns (TenantRootPrivileges) {}
+  rpc GetTenantRootPrivilege(ID) returns (TenantRootPrivilege) {}
+
+  rpc ListXOSComponentVolume(google.protobuf.Empty) returns (XOSComponentVolumes) {}
+  rpc GetXOSComponentVolume(ID) returns (XOSComponentVolume) {}
+
+  rpc ListSliceCredential(google.protobuf.Empty) returns (SliceCredentials) {}
+  rpc GetSliceCredential(ID) returns (SliceCredential) {}
+
+  rpc ListSliceTag(google.protobuf.Empty) returns (SliceTags) {}
+  rpc GetSliceTag(ID) returns (SliceTag) {}
+
+  rpc ListCoarseTenant(google.protobuf.Empty) returns (CoarseTenants) {}
+  rpc GetCoarseTenant(ID) returns (CoarseTenant) {}
+
+  rpc ListRouter(google.protobuf.Empty) returns (Routers) {}
+  rpc GetRouter(ID) returns (Router) {}
+
+  rpc ListServiceResource(google.protobuf.Empty) returns (ServiceResources) {}
+  rpc GetServiceResource(ID) returns (ServiceResource) {}
+
+  rpc ListServicePrivilege(google.protobuf.Empty) returns (ServicePrivileges) {}
+  rpc GetServicePrivilege(ID) returns (ServicePrivilege) {}
+
+  rpc ListUser(google.protobuf.Empty) returns (Users) {}
+  rpc GetUser(ID) returns (User) {}
+
+}
diff --git a/xos/tools/apigen/grpc_api.template.py b/xos/tools/apigen/grpc_api.template.py
new file mode 100644
index 0000000..47578f1
--- /dev/null
+++ b/xos/tools/apigen/grpc_api.template.py
@@ -0,0 +1,94 @@
+import time
+from protos import xos_pb2
+
+from core.models import *
+
+class XosService(xos_pb2.xosServicer):
+    def __init__(self, thread_pool):
+        self.thread_pool = thread_pool

+

+    def stop(self):

+        pass
+
+    def getProtoClass(self, djangoClass):
+        pClass = getattr(xos_pb2, djangoClass.__name__)
+        return pClass
+
+    def getPluralProtoClass(self, djangoClass):
+        pClass = getattr(xos_pb2, djangoClass.__name__ + "s")
+        return pClass
+
+    def convertString(self, x):
+        if not x:
+            return ""
+        else:
+            return str(x)
+
+    def convertInt(self, x):
+        if not x:
+            return 0
+        else:
+            return int(x)
+
+    def convertFloat(self, x):
+        if not x:
+            return 0
+        else:
+            return float(x)
+
+    def convertDateTime(self, x):
+        if not x:
+            return 0
+        else:
+            return time.mktime(x.timetuple())
+
+    def convertForeignKey(self, x):
+        if not x:
+            return 0
+        else:
+            return int(x.id)
+
+    def objToProto(self, obj):
+        p_obj = self.getProtoClass(obj.__class__)()
+        for field in obj._meta.fields:
+            if (field.get_internal_type() == "CharField") or (field.get_internal_type() == "TextField") or (field.get_internal_type() == "SlugField"):
+                setattr(p_obj, field.name, self.convertString(getattr(obj, field.name)))
+            elif (field.get_internal_type() == "BooleanField"):
+                setattr(p_obj, field.name, getattr(obj, field.name))
+            elif (field.get_internal_type() == "AutoField"):
+                setattr(p_obj, field.name, self.convertInt(getattr(obj, field.name)))
+            elif (field.get_internal_type() == "IntegerField") or (field.get_internal_type() == "PositiveIntegerField"):
+                setattr(p_obj, field.name, self.convertInt(getattr(obj, field.name)))
+            elif (field.get_internal_type() == "ForeignKey"):
+                setattr(p_obj, field.name+"_id", self.convertForeignKey(getattr(obj, field.name)))
+            elif (field.get_internal_type() == "DateTimeField"):
+                setattr(p_obj, field.name, self.convertDateTime(getattr(obj, field.name)))
+            elif (field.get_internal_type() == "FloatField"):
+                setattr(p_obj, field.name, self.convertFloat(getattr(obj, field.name)))
+            elif (field.get_internal_type() == "GenericIPAddressField"):
+                setattr(p_obj, field.name, self.convertString(getattr(obj, field.name)))
+        return p_obj
+
+    def querysetToProto(self, djangoClass, queryset):
+        objs = queryset
+        p_objs = self.getPluralProtoClass(djangoClass)()
+
+        for obj in objs:
+           new_obj = p_objs.items.add()
+           new_obj.CopyFrom(self.objToProto(obj))
+
+        return p_objs
+
+    def get(self, djangoClass, id):
+        obj = djangoClass.objects.get(id=id)
+        return self.objToProto(obj)
+
+{% for object in generator.all() %}
+    def List{{ object.camel() }}(self, request, context):
+      return self.querysetToProto({{ object.camel() }}, {{ object.camel() }}.objects.all())
+
+    def Get{{ object.camel() }}(self, request, context):
+      return self.get({{ object.camel() }}, request.id)
+{% endfor %}
+
+
diff --git a/xos/tools/apigen/grpc_list_test.template.py b/xos/tools/apigen/grpc_list_test.template.py
new file mode 100644
index 0000000..8759e77
--- /dev/null
+++ b/xos/tools/apigen/grpc_list_test.template.py
@@ -0,0 +1,16 @@
+import grpc
+from protos import common_pb2

+from protos import xos_pb2

+from protos import xos_pb2_grpc

+from google.protobuf.empty_pb2 import Empty
+
+channel = grpc.insecure_channel("localhost:50055")
+stub = xos_pb2_grpc.xosStub(channel)
+
+{% for object in generator.all() %}
+print "List{{ object.camel() }}...",
+stub.List{{ object.camel() }}(Empty())
+print "Okay"
+{%- endfor %}
+
+
diff --git a/xos/tools/apigen/protobuf.template.txt b/xos/tools/apigen/protobuf.template.txt
index ca77283..d51c0b0 100644
--- a/xos/tools/apigen/protobuf.template.txt
+++ b/xos/tools/apigen/protobuf.template.txt
@@ -2,6 +2,9 @@
 
 package xos;
 
+import "google/protobuf/empty.proto";
+import "common.proto";
+
 {% for object in generator.all() %}
 
 message {{ object.camel() }} {
@@ -13,7 +16,7 @@
     {%- elif field.get_internal_type() == "ForeignKey" %}
       int32 {{ field.name }}_id = {{ loop.index }};
     {%- elif field.get_internal_type() == "DateTimeField" %}
-      int32 {{ field.name }} = {{ loop.index }};
+      float {{ field.name }} = {{ loop.index }};
     {%- elif field.get_internal_type() == "AutoField" %}
       int32 {{ field.name }} = {{ loop.index }};
     {%- elif field.get_internal_type() == "IntegerField" %}
@@ -30,5 +33,16 @@
   {%- endfor %}
 }
 
+message {{ object.camel() }}s {
+    repeated {{ object.camel() }} items = 1;
+}
+
 {% endfor %}
 
+service xos {
+{% for object in generator.all() %}
+  rpc List{{ object.camel() }}(google.protobuf.Empty) returns ({{ object.camel() }}s) {}
+  rpc Get{{ object.camel() }}(ID) returns ({{ object.camel() }}) {}
+{% endfor %}
+}
+