--- /dev/null
+import subprocess
+import pexpect
+
+
+def execute_local(cmd):
+ """
+ Execute a command in locally
+ :param cmd: command to be executed
+ :return:
+ """
+
+ print "execute_local cmd = {}".format(cmd)
+ p = subprocess.Popen(['bash', "-c", cmd], stdout=subprocess.PIPE)
+ out = p.stdout.read()
+ print "execute_local result = {}".format(out)
+ return out
+
+
+def execute_namespace(vlan, cmd):
+ """
+ Execute a command inside a namespace created by openvim
+ :param vlan: namespace id
+ :param cmd: command to be executed
+ :return:
+ """
+
+ n_cmd = 'sudo ip netns exec {}-qrouter {} '.format(vlan, cmd)
+ return execute_local(n_cmd)
+
+
+def ping_ok(vlan_id, ip, retries=200):
+ """
+
+ :param vlan_id: namespace id
+ :param ip: vm ip to be pinged
+ :param retries: retries, by default 200
+ :return:
+ """
+ print 'waiting for vm to be active vm with ip = {}'.format(ip)
+ for i in xrange(retries):
+ try:
+ subprocess.check_output(['bash', "-c", "sudo ip netns exec {}-qrouter ping -c 1 {}".format(vlan_id, ip)])
+ return True
+ except Exception, e:
+ pass
+ return False
+
+
+def ping_ok_btw_2_vms(vlan_id, ip_1, ip_2, retires=8):
+ """
+ Check net connectivity between to VM
+ :param vlan_id: namepsace id
+ :param ip_1: first vm ip
+ :param ip_2: second vm ip
+ :param retires:
+ :return:
+ """
+ for i in xrange(retires):
+
+ try:
+ ns_cmd = 'sudo ip netns exec {}-qrouter '.format(vlan_id)
+ cmd = ns_cmd + ' ssh -oStrictHostKeyChecking=no cirros@{} "ping -c 1 {}"'.format(ip_1, ip_2)
+ child = pexpect.spawn(cmd)
+ child.expect('.*assword*')
+ child.sendline('cubswin:)')
+ child.sendline('cubswin:)')
+
+ cmd = ns_cmd + ' ssh -oStrictHostKeyChecking=no cirros@{} "ping -c 1 {}"'.format(ip_2, ip_1)
+ child = pexpect.spawn(cmd)
+ child.expect('.*assword*')
+ child.sendline('cubswin:)')
+ child.sendline('cubswin:)')
+
+ except EOFError as e:
+ if i == retires:
+ return False
+ pass
+
+ return True
+
+
+def copy_rsa_keys_into_vm(vlan_id, ip, rsa_key_path):
+ """
+ copy an RSA key given by the user to a vm
+ :param vlan_id:
+ :param ip:
+ :param rsa_key_path:
+ :return:
+ """
+
+ try:
+ execute_local('sudo ssh-keygen -f "/root/.ssh/known_hosts" -R {}'.format(ip))
+ cmd = 'sudo ip netns exec {}-qrouter ssh-copy-id -i {} ' \
+ '-oStrictHostKeyChecking=no -f cirros@{}'.format(vlan_id, rsa_key_path + '.pub', ip)
+
+ print 'copy_rsa_keys_into_vm = ' + cmd
+ child = pexpect.spawn(cmd)
+ child.expect('.*assword*')
+ child.sendline('cubswin:)')
+ child.sendline('cubswin:)')
+ return True
+ except EOFError as e:
+ return False
+
+
+def execute_check_output(vlan_id, cmd):
+ """
+ Execute a command inside a namespace and raise an expection in case of command fail
+ :param vlan_id: namepsace id
+ :param cmd: command
+ :return:
+ """
+ try:
+ cmd = "sudo ip netns exec {}-qrouter {}".format(vlan_id, cmd)
+ print "execute_check_output = {}".format(cmd)
+ subprocess.check_output(['bash', "-c", cmd])
+ return True
+ except Exception, e:
+ print "error execute_check_output"
+ return False
+
+
+
+
+
+