Removed outdated zerorpc API.
authorpeusterm <manuel.peuster@uni-paderborn.de>
Thu, 7 Sep 2017 06:35:33 +0000 (08:35 +0200)
committerpeusterm <manuel.peuster@uni-paderborn.de>
Thu, 7 Sep 2017 06:35:33 +0000 (08:35 +0200)
Signed-off-by: Manuel Peuster <manuel@peuster.de>
ansible/install.yml
src/emuvim/api/zerorpc/__init__.py [deleted file]
src/emuvim/api/zerorpc/compute.py [deleted file]
src/emuvim/api/zerorpc/network.py [deleted file]
utils/docker/Dockerfile

index 841b2e9..b103c4d 100755 (executable)
@@ -24,9 +24,6 @@
    - name: install setuptools
      pip: name=setuptools state=latest
 
-   - name: install zerorpc
-     pip: name=zerorpc state=latest
-
    - name: install tabulate
      pip: name=tabulate state=latest
 
diff --git a/src/emuvim/api/zerorpc/__init__.py b/src/emuvim/api/zerorpc/__init__.py
deleted file mode 100755 (executable)
index dba0b3c..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-"""
-Copyright (c) 2015 SONATA-NFV and Paderborn University
-ALL RIGHTS RESERVED.
-
-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.
-
-Neither the name of the SONATA-NFV [, ANY ADDITIONAL AFFILIATION]
-nor the names of its contributors may be used to endorse or promote
-products derived from this software without specific prior written
-permission.
-
-This work has been performed in the framework of the SONATA project,
-funded by the European Commission under Grant number 671517 through
-the Horizon 2020 and 5G-PPP programmes. The authors would like to
-acknowledge the contributions of their colleagues of the SONATA
-partner consortium (www.sonata-nfv.eu).
-"""
diff --git a/src/emuvim/api/zerorpc/compute.py b/src/emuvim/api/zerorpc/compute.py
deleted file mode 100755 (executable)
index b612e87..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-"""
-Copyright (c) 2015 SONATA-NFV and Paderborn University
-ALL RIGHTS RESERVED.
-
-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.
-
-Neither the name of the SONATA-NFV [, ANY ADDITIONAL AFFILIATION]
-nor the names of its contributors may be used to endorse or promote
-products derived from this software without specific prior written
-permission.
-
-This work has been performed in the framework of the SONATA project,
-funded by the European Commission under Grant number 671517 through
-the Horizon 2020 and 5G-PPP programmes. The authors would like to
-acknowledge the contributions of their colleagues of the SONATA
-partner consortium (www.sonata-nfv.eu).
-"""
-"""
-Distributed Cloud Emulator (dcemulator)
-(c) 2015 by Manuel Peuster <manuel.peuster@upb.de>
-"""
-
-import logging
-import threading
-import zerorpc
-
-logging.basicConfig(level=logging.INFO)
-
-
-class ZeroRpcApiEndpoint(object):
-    """
-    Simple API endpoint that offers a zerorpc-based
-    interface. This interface will be used by the
-    default command line client.
-    It can be used as a reference to implement
-    REST interfaces providing the same semantics,
-    like e.g. OpenStack compute API.
-    """
-
-    def __init__(self, listenip, port):
-        self.dcs = {}
-        self.ip = listenip
-        self.port = port
-        logging.debug("Created API endpoint %s(%s:%d)" % (
-            self.__class__.__name__, self.ip, self.port))
-
-    def connectDatacenter(self, dc):
-        self.dcs[dc.label] = dc
-        logging.info("Connected DC(%s) to API endpoint %s(%s:%d)" % (
-            dc.label, self.__class__.__name__, self.ip, self.port))
-
-    def start(self):
-        thread = threading.Thread(target=self._api_server_thread, args=())
-        thread.daemon = True
-        thread.start()
-        logging.debug("Started API endpoint %s(%s:%d)" % (
-            self.__class__.__name__, self.ip, self.port))
-
-    def _api_server_thread(self):
-        s = zerorpc.Server(MultiDatacenterApi(self.dcs))
-        s.bind("tcp://%s:%d" % (self.ip, self.port))
-        s.run()
-
-
-class MultiDatacenterApi(object):
-    """
-        Just pass through the corresponding request to the
-        selected data center. Do not implement provisioning
-        logic here because will will have multiple API
-        endpoint implementations at the end.
-    """
-
-    def __init__(self, dcs):
-        self.dcs = dcs
-
-    def compute_action_start(self, dc_label, compute_name, image, network, command):
-        """
-        Start a new compute instance: A docker container (note: zerorpc does not support keyword arguments)
-        :param dc_label: name of the DC
-        :param compute_name: compute container name
-        :param image: image name
-        :param command: command to execute
-        :param network: list of all interface of the vnf, with their parameters (id=id1,ip=x.x.x.x/x),...
-        :return: networks list({"id":"input","ip": "10.0.0.254/8"}, {"id":"output","ip": "11.0.0.254/24"})
-        """
-        # TODO what to return UUID / given name / internal name ?
-        logging.debug("RPC CALL: compute start")
-        try:
-            c = self.dcs.get(dc_label).startCompute(
-                compute_name, image=image, command=command, network=network)
-            #return str(c.name)
-            # return docker inspect dict
-            return c.getStatus()
-        except Exception as ex:
-            logging.exception("RPC error.")
-            return ex.message
-
-    def compute_action_stop(self, dc_label, compute_name):
-        logging.debug("RPC CALL: compute stop")
-        try:
-            return self.dcs.get(dc_label).stopCompute(compute_name)
-        except Exception as ex:
-            logging.exception("RPC error.")
-            return ex.message
-
-    def compute_list(self, dc_label):
-        logging.debug("RPC CALL: compute list")
-        try:
-            if dc_label is None:
-                # return list with all compute nodes in all DCs
-                all_containers = []
-                for dc in self.dcs.itervalues():
-                    all_containers += dc.listCompute()
-                return [(c.name, c.getStatus())
-                        for c in all_containers]
-            else:
-                # return list of compute nodes for specified DC
-                return [(c.name, c.getStatus())
-                        for c in self.dcs.get(dc_label).listCompute()]
-        except Exception as ex:
-            logging.exception("RPC error.")
-            return ex.message
-
-    def compute_status(self, dc_label, compute_name):
-        logging.debug("RPC CALL: compute status")
-        try:
-            return self.dcs.get(
-                dc_label).containers.get(compute_name).getStatus()
-        except Exception as ex:
-            logging.exception("RPC error.")
-            return ex.message
-
-    def datacenter_list(self):
-        logging.debug("RPC CALL: datacenter list")
-        try:
-            return [d.getStatus() for d in self.dcs.itervalues()]
-        except Exception as ex:
-            logging.exception("RPC error.")
-            return ex.message
-
-    def datacenter_status(self, dc_label):
-        logging.debug("RPC CALL: datacenter status")
-        try:
-                return self.dcs.get(dc_label).getStatus()
-        except Exception as ex:
-            logging.exception("RPC error.")
-            return ex.message
-
-
diff --git a/src/emuvim/api/zerorpc/network.py b/src/emuvim/api/zerorpc/network.py
deleted file mode 100755 (executable)
index 7658be2..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-"""
-Copyright (c) 2015 SONATA-NFV
-ALL RIGHTS RESERVED.
-
-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.
-
-Neither the name of the SONATA-NFV [, ANY ADDITIONAL AFFILIATION]
-nor the names of its contributors may be used to endorse or promote
-products derived from this software without specific prior written
-permission.
-
-This work has been performed in the framework of the SONATA project,
-funded by the European Commission under Grant number 671517 through
-the Horizon 2020 and 5G-PPP programmes. The authors would like to
-acknowledge the contributions of their colleagues of the SONATA
-partner consortium (www.sonata-nfv.eu).
-"""
-"""
-Distributed Cloud Emulator (dcemulator)
-Networking and monitoring functions
-(c) 2015 by Steven Van Rossem <steven.vanrossem@intec.ugent.be>
-"""
-
-import logging
-import threading
-import zerorpc
-
-
-logging.basicConfig(level=logging.INFO)
-
-
-class ZeroRpcApiEndpointDCNetwork(object):
-    """
-    Simple API endpoint that offers a zerorpc-based
-    interface. This interface will be used by the
-    default command line client.
-    It can be used as a reference to implement
-    REST interfaces providing the same semantics,
-    like e.g. OpenStack compute API.
-    """
-
-    def __init__(self, listenip, port, DCNetwork=None):
-        if DCNetwork :
-            self.connectDCNetwork(DCNetwork)
-        self.ip = listenip
-        self.port = port
-        logging.debug("Created monitoring API endpoint %s(%s:%d)" % (
-            self.__class__.__name__, self.ip, self.port))
-
-    def connectDCNetwork(self, net):
-        self.net = net
-        logging.info("Connected DCNetwork to API endpoint %s(%s:%d)" % (
-            self.__class__.__name__, self.ip, self.port))
-
-    def start(self):
-        thread = threading.Thread(target=self._api_server_thread, args=())
-        thread.daemon = True
-        thread.start()
-        logging.debug("Started API endpoint %s(%s:%d)" % (
-            self.__class__.__name__, self.ip, self.port))
-
-    def _api_server_thread(self):
-        s = zerorpc.Server(DCNetworkApi(self.net))
-        s.bind("tcp://%s:%d" % (self.ip, self.port))
-        s.run()
-
-    def stop(self):
-        logging.info("Stop the monitoring API endpoint")
-        return
-
-
-class DCNetworkApi(object):
-    """
-        The networking and monitoring commands need the scope of the
-        whole DC network to find the requested vnf. So this API is intended
-        to work with a DCNetwork.
-        Just pass through the corresponding request to the
-        selected data center network. Do not implement provisioning
-        logic here because will will have multiple API
-        endpoint implementations at the end.
-    """
-
-    def __init__(self, net):
-        self.net = net
-
-    def network_action_start(self, vnf_src_name, vnf_dst_name, kwargs):
-        # call DCNetwork method, not really datacenter specific API for now...
-        # provided dc name needs to be part of API endpoint
-        # no check if vnfs are really connected to this datacenter...
-        logging.debug("RPC CALL: network chain start")
-        try:
-            c = self.net.setChain(
-                vnf_src_name, vnf_dst_name,
-                vnf_src_interface=kwargs.get('vnf_src_interface'),
-                vnf_dst_interface=kwargs.get('vnf_dst_interface'),
-                cmd='add-flow',
-                weight=kwargs.get('weight'),
-                match=kwargs.get('match'),
-                bidirectional=kwargs.get('bidirectional'),
-                cookie=kwargs.get('cookie'))
-            return str(c)
-        except Exception as ex:
-            logging.exception("RPC error.")
-            return ex.message
-
-    def network_action_stop(self, vnf_src_name, vnf_dst_name, kwargs):
-        # call DCNetwork method, not really datacenter specific API for now...
-        # provided dc name needs to be part of API endpoint
-        # no check if vnfs are really connected to this datacenter...
-        logging.debug("RPC CALL: network chain stop")
-        try:
-            c = self.net.setChain(
-                vnf_src_name, vnf_dst_name,
-                vnf_src_interface=kwargs.get('vnf_src_interface'),
-                vnf_dst_interface=kwargs.get('vnf_dst_interface'),
-                cmd='del-flows',
-                weight=kwargs.get('weight'),
-                match=kwargs.get('match'),
-                bidirectional=kwargs.get('bidirectional'),
-                cookie=kwargs.get('cookie'))
-            return c
-        except Exception as ex:
-            logging.exception("RPC error.")
-            return ex.message
-
-    # setup the rate measurement for a vnf interface
-    def setup_metric(self, vnf_name, vnf_interface, metric):
-        logging.debug("RPC CALL: setup metric")
-        try:
-            c = self.net.monitor_agent.setup_metric(vnf_name, vnf_interface, metric)
-            return c
-        except Exception as ex:
-            logging.exception("RPC error.")
-            return ex.message
-
-    # remove the rate measurement for a vnf interface
-    def stop_metric(self, vnf_name, vnf_interface, metric):
-        logging.debug("RPC CALL: stop metric")
-        try:
-            c = self.net.monitor_agent.stop_metric(vnf_name, vnf_interface, metric)
-            return c
-        except Exception as ex:
-            logging.exception("RPC error.")
-            return ex.message
-
-    # setup the flow metrics measurement
-    def setup_flow(self, vnf_name, vnf_interface, metric, cookie):
-        logging.debug("RPC CALL: setup flow")
-        try:
-            c = self.net.monitor_agent.setup_flow(vnf_name, vnf_interface, metric, cookie)
-            return c
-        except Exception as ex:
-            logging.exception("RPC error.")
-            return ex.message
-
-    # remove the flow metrics measurement
-    def stop_flow(self, vnf_name, vnf_interface, metric, cookie):
-        logging.debug("RPC CALL: stop flow")
-        try:
-            c = self.net.monitor_agent.stop_flow(vnf_name, vnf_interface, metric, cookie)
-            return c
-        except Exception as ex:
-            logging.exception("RPC error.")
-            return ex.message
-
-    # do prometheus query
-    def prometheus(self, dc_label, vnf_name, vnf_interface, query):
-        logging.debug("RPC CALL: query prometheus")
-        vnf_status = self.net.dcs.get(dc_label).containers.get(vnf_name).getStatus()
-        uuid = vnf_status['id']
-        query = query.replace('<uuid>', uuid)
-        #if needed, replace interface id with emu-intfs name
-        # query = query.replace('<intf>', vnf_interface)
-        logging.info('query: {0}'.format(query))
-        try:
-            c = self.net.monitor_agent.query_Prometheus(query)
-            return c
-        except Exception as ex:
-            logging.exception("RPC error.")
-            return ex.message
-
-
-
index 41b63d6..1614793 100755 (executable)
@@ -52,7 +52,7 @@ RUN make develop
 # install son-emu
 RUN echo 'install son-emu'
 RUN apt-get install -y  python-dev python-zmq libzmq-dev libffi-dev libssl-dev
-RUN pip install -U zerorpc tabulate argparse networkx six ryu oslo.config pytest Flask flask_restful requests prometheus_client pyaml
+RUN pip install -U tabulate argparse networkx six ryu oslo.config pytest Flask flask_restful requests prometheus_client pyaml
 WORKDIR /
 #avoid pulling not the latest git, copy the current dir, to run this from Jenkins
 #RUN git clone https://github.com/sonata-nfv/son-emu.git