コード例 #1
0
import sys
import re
from pymongo import MongoClient


# Determine BigRobot path(s) based on this executable (which resides in
# the bin/ directory.
bigrobot_path = os.path.dirname(__file__) + '/..'
exscript_path = bigrobot_path + '/vendors/exscript/src'

sys.path.insert(0, bigrobot_path)
sys.path.insert(1, exscript_path)

import autobot.helpers as helpers

helpers.set_env('IS_GOBOT', 'False')
helpers.set_env('AUTOBOT_LOG', './myrobot.log')

if not 'BUILD_NAME' in os.environ:
    helpers.error_exit("Environment variable BUILD_NAME is not defined.", 1)

configs = helpers.bigrobot_config_test_catalog()
db_server = configs['db_server']
db_port = configs['db_port']
database = configs['database']

client = MongoClient(db_server, db_port)
db = client[database]

testsuites = db.test_suites
コード例 #2
0
ファイル: __init__.py プロジェクト: bopopescu/bigrobot
import os
import sys
import robot

# Special settings for the task server, not intended for execution on client.
if ('BIGROBOT_ESB' in os.environ
        and os.environ['BIGROBOT_ESB'].lower() == 'true'):
    bigrobot_path = os.path.dirname(__file__) + '/../..'
    sys.path.insert(0, bigrobot_path + '/vendors/exscript/src')
    # sys.path.insert(0, bigrobot_path + '/vendors/paramiko')
    sys.path.insert(0, bigrobot_path + '/esb')
    sys.path.insert(0, bigrobot_path)

    import autobot.helpers as helpers
    helpers.set_env('IS_GOBOT', 'False')
    helpers.bigrobot_path(bigrobot_path)
    helpers.bigrobot_log_path('/tmp/bigrobot_esb_log')
    helpers.bigrobot_log_path_exec_instance(
        helpers.bigrobot_log_path() + "/" +
        os.path.dirname(__file__).split('/')[-1])
    helpers.set_env(
        'AUTOBOT_LOG',
        helpers.bigrobot_log_path_exec_instance() + "/bigrobot_autobot.log")
コード例 #3
0
ファイル: KVMOperations.py プロジェクト: bopopescu/bigrobot
    def vm_setup(self, **kwargs):
        result = {
            "status_code": True,
            "status_descr": "Success",
        }

        try:
            vm_name = kwargs.get("vm_name", None)
            kvm_host = kwargs.get("kvm_host", KVM_SERVER)
            kvm_user = kwargs.get("kvm_user", KVM_USER)
            kvm_password = kwargs.get("kvm_password", KVM_PASSWORD)
            vm_host_name = kwargs.get("vm_host_name", None)
            vm_type = kwargs.get("vm_type", "bcf")
            qcow_path = kwargs.get("qcow_path", None)
            qcow_vm_path = None
            ip = kwargs.get("ip", None)
            vm_ram = kwargs.get("vm_ram", "2048")
            build_number = kwargs.get("build_number", None)
            if ip == 'None':
                ip = None
            cluster_ip = kwargs.get("cluster_ip", None)
            netmask = kwargs.get("netmask", "18")
            gateway = kwargs.get("gateway", "10.8.0.1")
            network_interface = kwargs.get("network_interface", "br0")
            self.log_path = LOG_BASE_PATH + '/' + vm_name
            try:
                if os.path.exists(self.log_path) or os.path.islink(
                        self.log_path):
                    pass
                else:
                    os.makedirs(self.log_path)
            except OSError as exc:  # Python >2.5
                if exc.errno == errno.EEXIST and os.path.isdir(LOG_BASE_PATH):
                    pass
                else:
                    # Last resort - put logs in /tmp
                    self.log_path = '/tmp' + '/' + vm_name
                    os.makedirs(self.log_path)

            # export IS_GOBOT="False"
            helpers.set_env("AUTOBOT_LOG",
                            "%s/%s.log" % (self.log_path, vm_name))
            helpers.bigrobot_log_path_exec_instance(self.log_path)

            # Note: helpers.summary_log() and helpers.log() are not called
            #       until after we've initialized the BigRobot log path
            #       (above). Don't attempt to write to logs before that
            #       or it will write logs to /tmp directory instead of the
            #       /tmp/<vm_name>/.
            helpers.summary_log("Creating VM with Name: %s " % vm_name)
            helpers.summary_log("Created log_path %s" % self.log_path)
            # remote_qcow_bvs_path = kwargs.get("remote_qcow_bvs_path", "/var/lib/jenkins/jobs/bvs\ master/lastSuccessful/archive/target/appliance/images/bcf/controller-bcf-2.0.8-SNAPSHOT.qcow2")
            remote_qcow_bvs_path = kwargs.get(
                "remote_qcow_bvs_path",
                "/var/lib/jenkins/jobs/bcf_master/lastSuccessful/archive/controller-bcf-*.qcow2"
            )
            remote_qcow_mininet_path = kwargs.get(
                "remote_qcow_mininet_path",
                "/var/lib/jenkins/jobs/t6-mininet-vm/builds/lastSuccessfulBuild/archive/t6-mininet-vm/ubuntu-kvm/t6-mininet.qcow2"
            )

            topo_file = self._create_temp_topo(kvm_host=kvm_host,
                                               vm_name=vm_name)
            # set the BIG ROBOT Topo file for console connections
            helpers.bigrobot_topology(topo_file)
            helpers.bigrobot_params("none")

            kvm_handle = self._connect_to_kvm_host(hostname=kvm_host,
                                                   user=kvm_user,
                                                   password=kvm_password)

            if vm_name in kvm_handle.bash('sudo virsh list --all')['content']:
                helpers.summary_log(
                    "VM with given name %s already exists in KVM Host %s" %
                    (vm_name, kvm_host))
                return False

            if qcow_path is not None:
                helpers.log(
                    "QCOW path is provided using it locally NO SCP just copy to images.."
                )
                qcow_vm_path = self._cp_qcow_to_images_folder(
                    kvm_handle=kvm_handle,
                    qcow_path=qcow_path,
                    vm_name=vm_name)
            else:
                helpers.log(
                    "no VMDK path is given copying from latest bvs build from jenkins server"
                )
                if vm_type == 'mininet':
                    helpers.log(
                        "Scp'ing Latest Mininet qcow file from jenkins to kvm Host.."
                    )
                    qcow_vm_path = self._scp_file_to_kvm_host(
                        kvm_handle=kvm_handle,
                        remote_qcow_path=remote_qcow_mininet_path,
                        vm_type='mininet',
                        vm_name=vm_name,
                        build_number=build_number)
                else:
                    helpers.log(
                        "Scp'ing Latest BVS qcow file %s from jenkins to kvm Host.."
                        % remote_qcow_bvs_path)
                    qcow_vm_path = self._scp_file_to_kvm_host(
                        kvm_handle=kvm_handle,
                        remote_qcow_path=remote_qcow_bvs_path,
                        vm_name=vm_name,
                        build_number=build_number)

            helpers.log("Creating VM on KVM Host with Name : %s " % vm_name)
            self.create_vm_on_kvm_host(vm_type=vm_type,
                                       qcow_path=qcow_vm_path,
                                       vm_name=vm_name,
                                       kvm_handle=kvm_handle,
                                       kvm_host=kvm_host,
                                       network_interface=network_interface,
                                       vm_ram=vm_ram)
            result['vm_name'] = vm_name
            result['kvm_host'] = kvm_host
            result['image_path'] = qcow_vm_path
            result['vm_ip'] = ip
            #             result['content'] = helpers.file_read_once("%s/%s.log"
            #                                                        % (self.log_path,
            #                                                           vm_name))

            if vm_type == 'mininet':
                # FIX ME configure mininet with user specified ip / return the DHCP ip of mininet VM
                helpers.log("Success Creating Mininet vm!!")
                helpers.log("Configuring IP for mininet if provided")
                result['vm_ip'] = self.set_mininet_ip(node="c1",
                                                      ip=ip,
                                                      get_ip=True)
                return result

            # For controller, attempt First Boot
            helpers.log("SLeep another 60 sec for controller to boot up..")
            time.sleep(30)
            result['vm_ip'] = self._configure_vm_first_boot(
                cluster_ip=cluster_ip,
                ip_address=ip,
                netmask=netmask,
                vm_host_name=vm_host_name,
                gateway=gateway)
            helpers.summary_log(
                "Copying firstboot-config on New Controller: %s" %
                result['vm_ip'])
            helpers.sleep(10)
            bvs = ControllerDevConf(host=result['vm_ip'],
                                    user="******",
                                    password="******",
                                    name="test-bvs")
            bvs.config("copy running-config snapshot://firstboot-config")
            helpers.summary_log("Success saving firstboot-config")

            helpers.summary_log("Done! Logs are written to %s" % self.log_path)
            return result
        except:
            inst = helpers.exception_info_traceback()
            helpers.log("Exception Details:\n%s" % inst)
            result['status_code'] = False
            result['status_descr'] = inst
            return result
コード例 #4
0
ファイル: test_bcf_events.py プロジェクト: bopopescu/bigrobot
import random

# Derive BigRobot path from the script's location, which should be
# in the bigrobot/test directory.
bigrobot_path = os.path.dirname(__file__) + '/..'
exscript_path = bigrobot_path + '/vendors/exscript/src'
sys.path.insert(0, exscript_path)
sys.path.insert(0, bigrobot_path)

import autobot.helpers as helpers
import autobot.setup_env as setup_env
from autobot.nose_support import run, log_to_console, sleep, Singleton
from keywords.BsnCommon import BsnCommon
from keywords.T5Torture import T5Torture

helpers.set_env('BIGROBOT_TEST_POSTMORTEM', 'False', quiet=True)
helpers.set_env('BIGROBOT_TEST_SETUP', 'False', quiet=True)
helpers.set_env('BIGROBOT_TEST_CLEAN_CONFIG', 'False', quiet=True)
helpers.set_env('BIGROBOT_TEST_TEARDOWN', 'False', quiet=True)
helpers.remove_env('BIGROBOT_TOPOLOGY', quiet=True)
# Test suite is defined as the name of the test script minus its extension.
helpers.bigrobot_suite(os.path.basename(__file__).split('.')[0])
setup_env.standalone_environment_setup()

assert helpers.bigrobot_path() != None
assert helpers.bigrobot_log_path_exec_instance() != None
assert helpers.bigrobot_suite() != None
helpers.print_bigrobot_env(minimum=True)


class TestBcfEvents:
コード例 #5
0
ファイル: KVMOperations.py プロジェクト: bopopescu/bigrobot
    def _scp_file_to_kvm_host(self,
                              vm_name=None,
                              remote_qcow_path=None,
                              kvm_handle=None,
                              vm_type="bcf",
                              build_number=None,
                              scp=True):
        # for getting the latest jenkins build from jenkins server kvm_host ssh key should be copied to jenkins server
        output = kvm_handle.bash('uname -a')
        helpers.log("KVM Host Details : \n %s" % output['content'])
        kvm_handle.bash('cd /var/lib/libvirt/')
        helpers.log(" GOT VM_TYPE : %s" % vm_type)

        if "No such file or directory" in kvm_handle.bash(
                'cd bvs_images/')['content']:
            helpers.log(
                "No BVS_IMAGES dir in KVM Host @ /var/lib/libvirt creating one to store bvs vmdks"
            )
            kvm_handle.bash('sudo mkdir bvs_images')
            kvm_handle.bash('sudo chmod -R 777 bvs_images/')
        else:
            helpers.log(
                'BVS_IMAGES dir exists in KVM Host @ /var/lib/libvirt/bvs_images/ copying latest vmdkd from jenkins server'
            )

        kvm_handle.bash('sudo chmod -R 777 ../bvs_images/')
        kvm_handle.bash('cd bvs_images')
        helpers.log("Latest VMDK will be copied to location : %s at KVM Host" %
                    kvm_handle.bash('pwd')['content'])
        helpers.log("Executing Scp cmd to copy latest bvs vmdk to KVM Server")
        jenkins_project_name = None
        if remote_qcow_path is not None:
            match = re.match(r'/var/lib/jenkins/jobs/(.*)/lastSuccessful/',
                             remote_qcow_path)
            if match:
                jenkins_project_name = match.group(1)
        helpers.summary_log("Using Jenkins Project Name: %s" %
                            jenkins_project_name)
        latest_build_number = self._get_latest_jenkins_build_number(
            vm_type, jenkins_project_name=jenkins_project_name)
        latest_kvm_build_number = self._get_latest_kvm_build_number(
            vm_type, kvm_handle, jenkins_project_name=jenkins_project_name)
        if build_number is not None:
            helpers.log(
                "Build Number is provided resetting latest builds to %s" %
                build_number)
            latest_build_number = build_number
            latest_kvm_build_number = build_number
        file_name = None
        if vm_type == 'bcf':
            if jenkins_project_name == "bcf_master":
                file_name = "controller-jf_bcf_virtual-%s.qcow2" % (
                    latest_build_number)
            else:
                file_name = "controller-%s_virtual-%s.qcow2" % (
                    jenkins_project_name, latest_build_number)
            helpers.log("Adding virtual tag to build file Name : %s" %
                        file_name)
        elif vm_type == 'mininet':
            file_name = "mininet-%s.qcow2" % latest_build_number
        helpers.log("Latest Build Number on KVM Host: %s" %
                    latest_kvm_build_number)
        helpers.log("Latest Build Number on Jenkins: %s" % latest_build_number)

        if str(latest_kvm_build_number) == str(latest_build_number) and scp:
            helpers.log(
                "Skipping SCP as the latest build on jenkins server did not change from the latest on KVM Host"
            )

        else:
            scp_cmd = (
                'scp -o "UserKnownHostsFile=/dev/null" -o StrictHostKeyChecking=no "%s@%s:%s" %s'
                % (JENKINS_USER, JENKINS_SERVER, remote_qcow_path, file_name))
            helpers.log("SCP command arguments:\n%s" % scp_cmd)
            scp_cmd_out = kvm_handle.bash(
                scp_cmd, prompt=[r'.*password:'******'.*#', r'.*$ '])['content']
            if "password" in scp_cmd_out:
                helpers.log("sending bsn password..")
                helpers.log(kvm_handle.bash('bsn')['content'])
            else:
                helpers.log("SCP should be done:\n%s" % scp_cmd_out)
            helpers.summary_log("Success SCP'ing latest Jenkins build !!")
        helpers.summary_log("Using Jenkins Build #%s (image name: '%s')" %
                            (latest_build_number, file_name))
        helpers.log("Setting BUILD_NUM Env...")
        helpers.set_env("BUILD_NUM", str(latest_build_number))
        helpers.log("env BUILD_NUM: %s" % helpers.get_env("BUILD_NUM"))
        kvm_handle.bash('sudo cp %s ../images/%s.qcow2' % (file_name, vm_name))

        local_qcow_path = "/var/lib/libvirt/images/%s.qcow2" % vm_name
        # vm_name = "%s_BVS" % current_user
        return local_qcow_path