X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=src%2Femuvim%2Fapi%2Fzerorpc%2Fcompute.py;h=4815fa7ab85b46f4f0a3177dcbfd47b0a3371b75;hb=23c480906da46931b6f4350f3fb434a89f49227a;hp=6e4a0839c64308ae3bb7e2afc32ecec574e921d2;hpb=43a9649213180695e908e67e01d3c4e77bc7b2ca;p=osm%2Fvim-emu.git diff --git a/src/emuvim/api/zerorpc/compute.py b/src/emuvim/api/zerorpc/compute.py index 6e4a083..4815fa7 100644 --- a/src/emuvim/api/zerorpc/compute.py +++ b/src/emuvim/api/zerorpc/compute.py @@ -7,6 +7,9 @@ import logging import threading import zerorpc +import paramiko +import ipaddress + logging.basicConfig(level=logging.INFO) @@ -56,9 +59,9 @@ class MultiDatacenterApi(object): def __init__(self, dcs): self.dcs = dcs - def compute_action_start(self, dc_label, compute_name, image, command, network): + def compute_action_start(self, dc_label, compute_name, image, network, command): """ - Start a new compute instance: A docker container + 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 @@ -71,7 +74,9 @@ class MultiDatacenterApi(object): try: c = self.dcs.get(dc_label).startCompute( compute_name, image=image, command=command, network=network) - return str(c.name) + #return str(c.name) + # return docker inspect dict + return c.getStatus() except Exception as ex: logging.exception("RPC error.") return ex.message @@ -111,6 +116,58 @@ class MultiDatacenterApi(object): logging.exception("RPC error.") return ex.message + def compute_profile(self, dc_label, compute_name, image, kwargs): + # note: zerorpc does not support keyword arguments + + ## VIM/dummy gatekeeper's tasks: + # start vnf + vnf_status = self.compute_action_start( dc_label, compute_name, image, + kwargs.get('network'), + kwargs.get('command')) + # start traffic source (with fixed ip addres, no use for now...) + psrc_status = self.compute_action_start( dc_label, 'psrc', 'profile_source', [{'id':'output'}], None) + # link vnf to traffic source + DCNetwork = self.dcs.get(dc_label).net + DCNetwork.setChain('psrc', compute_name, + vnf_src_interface='output', + vnf_dst_interface=kwargs.get('input'), + cmd='add-flow', weight=None) + + ## SSM/SP tasks: + # start traffic generation + for nw in psrc_status.get('network'): + if nw.get('intf_name') == 'output': + psrc_output_ip = unicode(nw['ip']) + break + dummy_iperf_server_ip = ipaddress.IPv4Address(psrc_output_ip) + 1 + iperf_cmd = 'iperf -c {0} -u -l18 -b10M -t1000 &'.format(dummy_iperf_server_ip) + + psrc_mgmt_ip = psrc_status['docker_network'] + psrc_user='root' + psrc_passw='root' + + # use ssh login when starting command externally + ret = self.dcs.get(dc_label).containers.get('psrc').pexec(iperf_cmd) + logging.info(ret) + self.dcs.get(dc_label).containers.get('psrc').monitor() + + #ssh does not work when exectuted via zerorpc command + #psrc_mgmt_ip = '172.17.0.3' + #ssh = paramiko.SSHClient() + #ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + #ssh.connect(psrc_mgmt_ip, username='steven', password='test') + #ssh.connect(psrc_mgmt_ip, username='root', password='root') + + #iperf_cmd = 'iperf -c {0} -u -l18 -b10M -t1000'.format(dummy_iperf_server_ip) + #stdin, stdout, stderr = ssh.exec_command(iperf_cmd) + # get monitor data and analyze + + # create table + + ## VIM/dummy gatekeeper's tasks: + # remove vnfs and chain + + def datacenter_list(self): logging.debug("RPC CALL: datacenter list") try: @@ -126,3 +183,10 @@ class MultiDatacenterApi(object): except Exception as ex: logging.exception("RPC error.") return ex.message + +''' +if __name__ == "__main__": + test = MultiDatacenterApi({}) + test.compute_profile('dc1','vnf1', 'image',network='',command='test',other='other') +''' +