import functest.utils.openstack_utils as os_utils
import paramiko
-
parser = argparse.ArgumentParser()
parser.add_argument("-r", "--report",
args = parser.parse_args()
""" logging configuration """
-logger = ft_logger.Logger("create_instance_and_ip").getLogger()
+logger = ft_logger.Logger("ODL_SFC").getLogger()
REPO_PATH = os.environ['repos_dir'] + '/functest/'
HOME = os.environ['HOME'] + "/"
VM_BOOT_TIMEOUT = 180
INSTANCE_NAME = "client"
FLAVOR = "m1.small"
-IMAGE_NAME = "sf_summit2016"
-IMAGE_FILENAME = "sf_summit2016.qcow2"
+IMAGE_NAME = "sf_nsh_colorado"
+IMAGE_FILENAME = "sf_nsh_colorado.qcow2"
IMAGE_FORMAT = "qcow2"
IMAGE_PATH = "/home/opnfv/functest/data" + "/" + IMAGE_FILENAME
def main():
+ # Allow any port so that tacker commands reaches the server.
+ # This will be deleted when tacker is included in OPNFV installation
+
+ ssh_options = '-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'
+ contr_cmd = ("sshpass -p r00tme ssh " + ssh_options + " root@10.20.0.2"
+ " 'fuel node'|grep controller|awk '{print $10}'")
+ logger.info("Executing script to get ip_server: '%s'" % contr_cmd)
+ process = subprocess.Popen(contr_cmd,
+ shell=True,
+ stdout=subprocess.PIPE)
+ ip_server = process.stdout.readline().rstrip()
+
+ contr_cmd2 = ("sshpass -p r00tme ssh " + ssh_options + " root@10.20.0.2"
+ " 'fuel node'|grep compute|awk '{print $10}'")
+ logger.info("Executing script to get ip_compute: '%s'" % contr_cmd2)
+ process = subprocess.Popen(contr_cmd2,
+ shell=True,
+ stdout=subprocess.PIPE)
+ ip_compute = process.stdout.readline().rstrip()
+
+ iptable_cmd1 = ("sshpass -p r00tme ssh " + ssh_options + " root@10.20.0.2"
+ " ssh " + ip_server + " iptables -P INPUT ACCEPT ")
+ iptable_cmd2 = ("sshpass -p r00tme ssh " + ssh_options + " root@10.20.0.2"
+ " ssh " + ip_server + " iptables -t nat -P INPUT ACCEPT ")
+
+ subprocess.call(iptable_cmd1, shell=True)
+ subprocess.call(iptable_cmd2, shell=True)
+
+# Getting the different clients
+
nova_client = os_utils.get_nova_client()
neutron_client = os_utils.get_neutron_client()
glance_client = os_utils.get_glance_client()
if not os.path.isfile(IMAGE_PATH):
logger.info("Downloading image")
ft_utils.download_url(
- "http://artifacts.opnfv.org/sfc/demo/sf_summit2016.qcow2",
+ "http://artifacts.opnfv.org/sfc/demo/sf_nsh_colorado.qcow2",
"/home/opnfv/functest/data/")
else:
logger.info("Using old image")
-# Allow any port so that tacker commands reaches the server.
-# CHECK IF THIS STILL MAKES SENSE WHEN TACKER IS INCLUDED IN OPNFV INSTALATION
-
- controller_command = ("sshpass -p r00tme ssh root@10.20.0.2"
- " 'fuel node'|grep controller|awk '{print $10}'")
- logger.info("Executing tacker script: '%s'" % controller_command)
- process = subprocess.Popen(controller_command,
- shell=True,
- stdout=subprocess.PIPE)
- ip = process.stdout.readline()
-
- iptable_command1 = ("sshpass -p r00tme ssh root@10.20.0.2 ssh"
- " " + ip + " iptables -P INPUT ACCEPT ")
- iptable_command2 = ("sshpass -p r00tme ssh root@10.20.0.2 ssh"
- " " + ip + "iptables -t nat -P INPUT ACCEPT ")
-
- subprocess.call(iptable_command1, shell=True)
- subprocess.call(iptable_command2, shell=True)
-
# Create glance image and the neutron network
image_id = os_utils.create_glance_image(glance_client,
IMAGE_PATH,
disk=IMAGE_FORMAT,
container="bare",
- public=True,
- logger=logger)
+ public=True)
- network_dic = os_utils.create_network_full(logger,
- neutron_client,
+ network_dic = os_utils.create_network_full(neutron_client,
NET_NAME,
SUBNET_NAME,
ROUTER_NAME,
network_id = network_dic["net_id"]
- sg_id = os_utils.create_security_group_full(logger, neutron_client,
+ sg_id = os_utils.create_security_group_full(neutron_client,
SECGROUP_NAME, SECGROUP_DESCR)
# boot INTANCE
logger.debug("Problems assigning floating IP to SFs")
logger.debug("Floating IPs for SFs: %s..." % ips)
+
# SSH TO START THE VXLAN_TOOL ON SF1
logger.info("Configuring the SFs")
try:
ssh.connect(ips[0], username="root",
password="opnfv", timeout=2)
command = ("nohup python vxlan_tool.py -i eth0 "
- "-d forward -v off -f -b 80 &")
+ "-d forward -v off -b 80 > /dev/null 2>&1 &")
(stdin, stdout, stderr) = ssh.exec_command(command)
except:
logger.debug("Waiting for %s..." % ips[0])
time.sleep(6)
# timeout -= 1
+ try:
+ while 1:
+ (stdin, stdout, stderr) = ssh.exec_command("ps lax | grep python")
+ if "vxlan_tool.py" in stdout.readlines()[0]:
+ logger.debug("HTTP firewall started")
+ break
+ else:
+ logger.debug("HTTP firewall not started")
+ time.sleep(3)
+ except:
+ logger.error("vxlan_tool not started in SF1")
+
# SSH TO START THE VXLAN_TOOL ON SF2
try:
ssh.connect(ips[1], username="root",
password="opnfv", timeout=2)
command = ("nohup python vxlan_tool.py -i eth0 "
- "-d forward -v off -f -b 22 &")
+ "-d forward -v off -b 22 > /dev/null 2>&1 &")
(stdin, stdout, stderr) = ssh.exec_command(command)
except:
logger.debug("Waiting for %s..." % ips[1])
time.sleep(6)
# timeout -= 1
+ try:
+ while 1:
+ (stdin, stdout, stderr) = ssh.exec_command("ps lax | grep python")
+ if "vxlan_tool.py" in stdout.readlines()[0]:
+ logger.debug("SSH firewall started")
+ break
+ else:
+ logger.debug("SSH firewall not started")
+ time.sleep(3)
+ except:
+ logger.error("vxlan_tool not started in SF2")
+
+ # SSH to modify the classification flows in compute
+
+ contr_cmd3 = ("sshpass -p r00tme ssh " + ssh_options + " root@10.20.0.2"
+ " 'ssh " + ip_compute + " 'bash correct_classifier.bash''")
+ logger.info("Executing script to modify the classi: '%s'" % contr_cmd3)
+ process = subprocess.Popen(contr_cmd3,
+ shell=True,
+ stdout=subprocess.PIPE)
+
# SSH TO EXECUTE cmd_client
logger.info("TEST STARTED")
try:
ssh.connect(floatip_client, username="root",
password="opnfv", timeout=2)
- command = "nc -w 5 -zv " + floatip_server + " 22 2>&1"
+ command = "nc -w 5 -zv " + instance_ip_2 + " 22 2>&1"
(stdin, stdout, stderr) = ssh.exec_command(command)
except:
logger.debug("Waiting for %s..." % floatip_client)
# WRITE THE CORRECT WAY TO DO LOGGING
i = 0
- logger.info("First output: %s" % stdout.readlines())
if "timed out" in stdout.readlines()[0]:
logger.info('\033[92m' + "TEST 1 [PASSED] "
"==> SSH BLOCKED" + '\033[0m')
i = i + 1
else:
- logger.debug('\033[91m' + "TEST 1 [FAILED] "
+ logger.error('\033[91m' + "TEST 1 [FAILED] "
"==> SSH NOT BLOCKED" + '\033[0m')
return
try:
ssh.connect(floatip_client, username="root",
password="opnfv", timeout=2)
- command = "nc -w 5 -zv " + floatip_server + " 80 2>&1"
+ command = "nc -w 5 -zv " + instance_ip_2 + " 80 2>&1"
(stdin, stdout, stderr) = ssh.exec_command(command)
except:
logger.debug("Waiting for %s..." % floatip_client)
"==> HTTP WORKS" + '\033[0m')
i = i + 1
else:
- logger.debug('\033[91m' + "TEST 2 [FAILED] "
+ logger.error('\033[91m' + "TEST 2 [FAILED] "
"==> HTTP BLOCKED" + '\033[0m')
return
TACKER_CHANGECLASSI
subprocess.call(tacker_classi, shell=True)
+ logger.info("Wait for ODL to update the classification rules in OVS")
+ time.sleep(10)
+
+ # SSH to modify the classification flows in compute
+
+ contr_cmd4 = ("sshpass -p r00tme ssh " + ssh_options + " root@10.20.0.2"
+ " 'ssh " + ip_compute + " 'bash correct_classifier.bash''")
+ logger.info("Executing script to modify the classi: '%s'" % contr_cmd4)
+ process = subprocess.Popen(contr_cmd4,
+ shell=True,
+ stdout=subprocess.PIPE)
+
# SSH TO EXECUTE cmd_client
try:
ssh.connect(floatip_client, username="root",
password="opnfv", timeout=2)
- command = "nc -w 5 -zv " + floatip_server + " 80 2>&1"
+ command = "nc -w 5 -zv " + instance_ip_2 + " 80 2>&1"
(stdin, stdout, stderr) = ssh.exec_command(command)
except:
logger.debug("Waiting for %s..." % floatip_client)
"==> HTTP BLOCKED" + '\033[0m')
i = i + 1
else:
- logger.debug('\033[91m' + "TEST 3 [FAILED] "
+ logger.error('\033[91m' + "TEST 3 [FAILED] "
"==> HTTP NOT BLOCKED" + '\033[0m')
return
try:
ssh.connect(floatip_client, username="root",
password="opnfv", timeout=2)
- command = "nc -w 5 -zv " + floatip_server + " 22 2>&1"
+ command = "nc -w 5 -zv " + instance_ip_2 + " 22 2>&1"
(stdin, stdout, stderr) = ssh.exec_command(command)
except:
logger.debug("Waiting for %s..." % floatip_client)
"==> SSH WORKS" + '\033[0m')
i = i + 1
else:
- logger.debug('\033[91m' + "TEST 4 [FAILED] "
+ logger.error('\033[91m' + "TEST 4 [FAILED] "
"==> SSH BLOCKED" + '\033[0m')
return
logger.info('\033[92m' + "SFC TEST WORKED"
" :) \n" + '\033[0m')
+ # TODO report results to DB
+ # functest_utils.logger_test_results(logger, "SFC",
+ # "odl-sfc",
+ # status, details)
+ # see doctor, promise, domino, ...
+ # if args.report:
+ # logger.info("Pushing odl-SFC results")
+ # functest_utils.push_results_to_db("functest",
+ # "odl-sfc",
+ # logger,
+ # start_time,
+ # stop_time,
+ # status,
+ # details)
+
sys.exit(0)
if __name__ == '__main__':