import os import subprocess import sys import time import argparse import paramiko import functest.utils.functest_logger as ft_logger import functest.utils.functest_utils as ft_utils import functest.utils.openstack_utils as os_utils parser = argparse.ArgumentParser() parser.add_argument("-r", "--report", help="Create json result file", action="store_true") args = parser.parse_args() """ logging configuration """ logger = ft_logger.Logger("ODL_SFC").getLogger() FUNCTEST_REPO = ft_utils.FUNCTEST_REPO HOME = os.environ['HOME'] + "/" VM_BOOT_TIMEOUT = 180 INSTANCE_NAME = "client" FLAVOR = "m1.small" IMAGE_NAME = "sf_nsh_colorado" IMAGE_FILENAME = "sf_nsh_colorado.qcow2" IMAGE_FORMAT = "qcow2" IMAGE_PATH = "/home/opnfv/functest/data" + "/" + IMAGE_FILENAME # NEUTRON Private Network parameters NET_NAME = "example-net" SUBNET_NAME = "example-subnet" SUBNET_CIDR = "11.0.0.0/24" ROUTER_NAME = "example-router" SECGROUP_NAME = "example-sg" SECGROUP_DESCR = "Example Security group" INSTANCE_NAME_2 = "server" # TEST_DB = ft_utils.get_parameter_from_yaml("results.test_db_url") PRE_SETUP_SCRIPT = 'sfc_pre_setup.bash' TACKER_SCRIPT = 'sfc_tacker.bash' TEARDOWN_SCRIPT = "sfc_teardown.bash" TACKER_CHANGECLASSI = "sfc_change_classi.bash" def main(): # Allow any port so that tacker commands reaches the server. # This will be deleted when tacker is included in OPNFV installation status = "PASS" failures = 0 start_time = time.time() json_results = {} 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, stderr=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, stderr=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 ") iptable_cmd3 = ("sshpass -p r00tme ssh " + ssh_options + " root@10.20.0.2" " ssh " + ssh_options + " " + ip_server + " iptables -A INPUT -m state" " --state NEW,ESTABLISHED,RELATED -j ACCEPT") logger.info("Changing firewall policy in controller: '%s'" % iptable_cmd1) subprocess.call(iptable_cmd1, shell=True, stderr=subprocess.PIPE) logger.info("Changing firewall policy in controller: '%s'" % iptable_cmd2) subprocess.call(iptable_cmd2, shell=True, stderr=subprocess.PIPE) logger.info("Changing firewall policy in controller: '%s'" % iptable_cmd3) subprocess.call(iptable_cmd2, shell=True, stderr=subprocess.PIPE) # 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() # Download the image if not os.path.isfile(IMAGE_PATH): logger.info("Downloading image") ft_utils.download_url( "http://artifacts.opnfv.org/sfc/demo/sf_nsh_colorado.qcow2", "/home/opnfv/functest/data/") else: logger.info("Using old image") # Create glance image and the neutron network image_id = os_utils.create_glance_image(glance_client, IMAGE_NAME, IMAGE_PATH, disk=IMAGE_FORMAT, container="bare", public=True) network_dic = os_utils.create_network_full(neutron_client, NET_NAME, SUBNET_NAME, ROUTER_NAME, SUBNET_CIDR) if not network_dic: logger.error( "There has been a problem when creating the neutron network") sys.exit(-1) network_id = network_dic["net_id"] sg_id = os_utils.create_security_group_full(neutron_client, SECGROUP_NAME, SECGROUP_DESCR) # boot INTANCE logger.info("Creating instance '%s'..." % INSTANCE_NAME) logger.debug( "Configuration:\n name=%s \n flavor=%s \n image=%s \n " "network=%s \n" % (INSTANCE_NAME, FLAVOR, image_id, network_id)) instance = os_utils.create_instance_and_wait_for_active(FLAVOR, image_id, network_id, INSTANCE_NAME) if instance is None: logger.error("Error while booting instance.") sys.exit(-1) # Retrieve IP of INSTANCE instance_ip = instance.networks.get(NET_NAME)[0] logger.debug("Instance '%s' got private ip '%s'." % (INSTANCE_NAME, instance_ip)) logger.info("Adding '%s' to security group '%s'..." % (INSTANCE_NAME, SECGROUP_NAME)) os_utils.add_secgroup_to_instance(nova_client, instance.id, sg_id) logger.info("Creating floating IP for VM '%s'..." % INSTANCE_NAME) floatip_dic = os_utils.create_floating_ip(neutron_client) floatip_client = floatip_dic['fip_addr'] # floatip_id = floatip_dic['fip_id'] if floatip_client is None: logger.error("Cannot create floating IP.") sys.exit(-1) logger.info("Floating IP created: '%s'" % floatip_client) logger.info("Associating floating ip: '%s' to VM '%s' " % (floatip_client, INSTANCE_NAME)) if not os_utils.add_floating_ip(nova_client, instance.id, floatip_client): logger.error("Cannot associate floating IP to VM.") sys.exit(-1) # STARTING SECOND VM (server) ### # boot INTANCE logger.info("Creating instance '%s'..." % INSTANCE_NAME) logger.debug( "Configuration:\n name=%s \n flavor=%s \n image=%s \n " "network=%
# Copyright 2016 Intel Corporation.
#
# 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.

"""Packet forwarder controller for Physical to Physical deployment
"""

import logging
from conf import settings

class PktFwdController(object):
    """Packet forwarder controller for P2P deployment scenario.

    Attributes:
        _pktfwd_class: The packet forwarder class to be used.
        _pktfwd: The packet forwarder object controlled by this controller
    """
    def __init__(self