X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=src%2Femuvim%2Fcli%2Fcompute.py;h=b5f775ff79ac2891f464ddcc8d0057cd147185a9;hb=8b04b532bcb52f45ac3465d834142b766d45e771;hp=70de20aa45b96406bef226abb6f7bc54be8d5be0;hpb=3eef9fde234a4379d80e0435bac9ce650407a895;p=osm%2Fvim-emu.git diff --git a/src/emuvim/cli/compute.py b/src/emuvim/cli/compute.py index 70de20a..b5f775f 100755 --- a/src/emuvim/cli/compute.py +++ b/src/emuvim/cli/compute.py @@ -1,6 +1,29 @@ """ -son-emu compute CLI -(c) 2016 by Manuel Peuster +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). """ import argparse @@ -15,7 +38,7 @@ pp = pprint.PrettyPrinter(indent=4) class ZeroRpcClient(object): def __init__(self): - self.c = zerorpc.Client() + self.c = zerorpc.Client(heartbeat=None, timeout=120) #heartbeat=None, timeout=120 self.c.connect("tcp://127.0.0.1:4242") # TODO hard coded for now. we'll change this later self.cmds = {} @@ -24,20 +47,19 @@ class ZeroRpcClient(object): # call the local method with the same name as the command arg getattr(self, args["command"])(args) else: - print "Command not implemented." + print("Command not implemented.") def start(self, args): nw_list = list() if args.get("network") is not None: - networks = args.get("network").split(",") - for nw in networks: - nw_list.append({"ip": nw}) + nw_list = self._parse_network(args.get("network")) r = self.c.compute_action_start( args.get("datacenter"), args.get("name"), args.get("image"), - args.get("docker_command"), - nw_list) + nw_list, + args.get("docker_command") + ) pp.pprint(r) def stop(self, args): @@ -57,9 +79,9 @@ class ZeroRpcClient(object): eth0ip = None eth0status = "down" if len(status.get("network")) > 0: - eth0ip = status.get("network")[0][1] + eth0ip = status.get("network")[0].get("ip") eth0status = "up" if status.get( - "network")[0][3] else "down" + "network")[0].get("up") else "down" table.append([status.get("datacenter"), name, status.get("image"), @@ -72,13 +94,31 @@ class ZeroRpcClient(object): "eth0 IP", "eth0 status", "Status"] - print tabulate(table, headers=headers, tablefmt="grid") + print(tabulate(table, headers=headers, tablefmt="grid")) def status(self, args): r = self.c.compute_status( args.get("datacenter"), args.get("name")) pp.pprint(r) + def _create_dict(self, **kwargs): + return kwargs + + def _parse_network(self, network_str): + ''' + parse the options for all network interfaces of the vnf + :param network_str: (id=x,ip=x.x.x.x/x), ... + :return: list of dicts [{"id":x,"ip":"x.x.x.x/x"}, ...] + ''' + nw_list = list() + networks = network_str[1:-1].split('),(') + for nw in networks: + nw_dict = dict(tuple(e.split('=')) for e in nw.split(',')) + nw_list.append(nw_dict) + + return nw_list + + parser = argparse.ArgumentParser(description='son-emu compute') parser.add_argument( @@ -93,15 +133,14 @@ parser.add_argument( help="Name of compute instance e.g. 'vnf1'") parser.add_argument( "--image","-i", dest="image", - help="Name of container image to be used e.g. 'ubuntu'") + help="Name of container image to be used e.g. 'ubuntu:trusty'") parser.add_argument( "--dcmd", "-c", dest="docker_command", help="Startup command of the container e.g. './start.sh'") parser.add_argument( "--net", dest="network", - help="Network properties of compute instance e.g. \ - '10.0.0.123/8' or '10.0.0.123/8,11.0.0.123/24' for multiple interfaces.") - + help="Network properties of a compute instance e.g. \ + '(id=input,ip=10.0.10.3/24),(id=output,ip=10.0.10.4/24)' for multiple interfaces.") def main(argv): args = vars(parser.parse_args(argv))