From f37fcff88ff15073cba8f04e5e815a4d664c5766 Mon Sep 17 00:00:00 2001 From: peusterm Date: Thu, 7 Sep 2017 08:35:33 +0200 Subject: [PATCH 1/1] Removed outdated zerorpc API. Signed-off-by: Manuel Peuster --- ansible/install.yml | 3 - src/emuvim/api/zerorpc/__init__.py | 27 ---- src/emuvim/api/zerorpc/compute.py | 159 ------------------------ src/emuvim/api/zerorpc/network.py | 193 ----------------------------- utils/docker/Dockerfile | 2 +- 5 files changed, 1 insertion(+), 383 deletions(-) delete mode 100755 src/emuvim/api/zerorpc/__init__.py delete mode 100755 src/emuvim/api/zerorpc/compute.py delete mode 100755 src/emuvim/api/zerorpc/network.py diff --git a/ansible/install.yml b/ansible/install.yml index 841b2e9..b103c4d 100755 --- a/ansible/install.yml +++ b/ansible/install.yml @@ -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 index dba0b3c..0000000 --- a/src/emuvim/api/zerorpc/__init__.py +++ /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 index b612e87..0000000 --- a/src/emuvim/api/zerorpc/compute.py +++ /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 -""" - -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 index 7658be2..0000000 --- a/src/emuvim/api/zerorpc/network.py +++ /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 -""" - -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) - #if needed, replace interface id with emu-intfs name - # query = query.replace('', 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 - - - diff --git a/utils/docker/Dockerfile b/utils/docker/Dockerfile index 41b63d6..1614793 100755 --- a/utils/docker/Dockerfile +++ b/utils/docker/Dockerfile @@ -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 -- 2.17.1