import threading
import zerorpc
+import paramiko
+import ipaddress
+
logging.basicConfig(level=logging.INFO)
def __init__(self, dcs):
self.dcs = dcs
- def compute_action_start(self, dc_label, compute_name, image, network=None, command=None):
+ 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
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
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:
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')
+'''
+