diff --git a/kloudbuster/dib/README.rst b/kb_dib/README.rst similarity index 100% rename from kloudbuster/dib/README.rst rename to kb_dib/README.rst diff --git a/kloudbuster/dib/Vagrantfile b/kb_dib/Vagrantfile similarity index 100% rename from kloudbuster/dib/Vagrantfile rename to kb_dib/Vagrantfile diff --git a/kloudbuster/dib/build-image.sh b/kb_dib/build-image.sh similarity index 100% rename from kloudbuster/dib/build-image.sh rename to kb_dib/build-image.sh diff --git a/kloudbuster/dib/elements/kloudbuster/README.rst b/kb_dib/elements/kloudbuster/README.rst similarity index 100% rename from kloudbuster/dib/elements/kloudbuster/README.rst rename to kb_dib/elements/kloudbuster/README.rst diff --git a/kloudbuster/dib/elements/kloudbuster/element-deps b/kb_dib/elements/kloudbuster/element-deps similarity index 100% rename from kloudbuster/dib/elements/kloudbuster/element-deps rename to kb_dib/elements/kloudbuster/element-deps diff --git a/kloudbuster/dib/elements/kloudbuster/package-installs.yaml b/kb_dib/elements/kloudbuster/package-installs.yaml similarity index 100% rename from kloudbuster/dib/elements/kloudbuster/package-installs.yaml rename to kb_dib/elements/kloudbuster/package-installs.yaml diff --git a/kloudbuster/dib/elements/kloudbuster/post-install.d/01-kb-script b/kb_dib/elements/kloudbuster/post-install.d/01-kb-script similarity index 100% rename from kloudbuster/dib/elements/kloudbuster/post-install.d/01-kb-script rename to kb_dib/elements/kloudbuster/post-install.d/01-kb-script diff --git a/kloudbuster/dib/elements/kloudbuster/post-install.d/99-cloudcfg-edit b/kb_dib/elements/kloudbuster/post-install.d/99-cloudcfg-edit similarity index 100% rename from kloudbuster/dib/elements/kloudbuster/post-install.d/99-cloudcfg-edit rename to kb_dib/elements/kloudbuster/post-install.d/99-cloudcfg-edit diff --git a/kloudbuster/dib/elements/kloudbuster/static/etc/nginx/nginx.conf b/kb_dib/elements/kloudbuster/static/etc/nginx/nginx.conf similarity index 100% rename from kloudbuster/dib/elements/kloudbuster/static/etc/nginx/nginx.conf rename to kb_dib/elements/kloudbuster/static/etc/nginx/nginx.conf diff --git a/kloudbuster/dib/elements/kloudbuster/static/kb_test/kb_vm_agent.py b/kb_dib/elements/kloudbuster/static/kb_test/kb_vm_agent.py similarity index 100% rename from kloudbuster/dib/elements/kloudbuster/static/kb_test/kb_vm_agent.py rename to kb_dib/elements/kloudbuster/static/kb_test/kb_vm_agent.py diff --git a/kloudbuster/kb_server/MANIFEST.in b/kb_server/MANIFEST.in similarity index 100% rename from kloudbuster/kb_server/MANIFEST.in rename to kb_server/MANIFEST.in diff --git a/kloudbuster/kb_server/README b/kb_server/README similarity index 100% rename from kloudbuster/kb_server/README rename to kb_server/README diff --git a/kloudbuster/kb_server/config.py b/kb_server/config.py similarity index 100% rename from kloudbuster/kb_server/config.py rename to kb_server/config.py diff --git a/kloudbuster/kb_server/kb_server/__init__.py b/kb_server/kb_server/__init__.py similarity index 100% rename from kloudbuster/kb_server/kb_server/__init__.py rename to kb_server/kb_server/__init__.py diff --git a/kloudbuster/kb_server/kb_server/app.py b/kb_server/kb_server/app.py similarity index 100% rename from kloudbuster/kb_server/kb_server/app.py rename to kb_server/kb_server/app.py diff --git a/kloudbuster/kb_server/kb_server/controllers/__init__.py b/kb_server/kb_server/controllers/__init__.py similarity index 100% rename from kloudbuster/kb_server/kb_server/controllers/__init__.py rename to kb_server/kb_server/controllers/__init__.py diff --git a/kloudbuster/kb_server/kb_server/controllers/api_cfg.py b/kb_server/kb_server/controllers/api_cfg.py similarity index 97% rename from kloudbuster/kb_server/kb_server/controllers/api_cfg.py rename to kb_server/kb_server/controllers/api_cfg.py index 45a2e74..8d65e93 100644 --- a/kloudbuster/kb_server/kb_server/controllers/api_cfg.py +++ b/kb_server/kb_server/controllers/api_cfg.py @@ -17,7 +17,7 @@ import json import os import sys import traceback -kb_main_path = os.path.split(os.path.abspath(__file__))[0] + "/../../.." +kb_main_path = os.path.split(os.path.abspath(__file__))[0] + "/../../../kloudbuster" sys.path.append(kb_main_path) from credentials import Credentials @@ -36,6 +36,9 @@ class ConfigController(object): def default_config(self): kb_config = KBConfig() pdict = eval(str(kb_config.config_scale)) + # Normally we don't allow the clients to change below configs + pdict['client'].pop('tp_tool') + pdict['client'].pop('http_tool') return json.dumps(pdict) @expose(generic=True) diff --git a/kloudbuster/kb_server/kb_server/controllers/api_kb.py b/kb_server/kb_server/controllers/api_kb.py similarity index 99% rename from kloudbuster/kb_server/kb_server/controllers/api_kb.py rename to kb_server/kb_server/controllers/api_kb.py index e1e0186..5b0d4f6 100644 --- a/kloudbuster/kb_server/kb_server/controllers/api_kb.py +++ b/kb_server/kb_server/controllers/api_kb.py @@ -16,7 +16,7 @@ import json import os import sys import threading -kb_main_path = os.path.split(os.path.abspath(__file__))[0] + "/../../.." +kb_main_path = os.path.split(os.path.abspath(__file__))[0] + "/../../../kloudbuster" sys.path.append(kb_main_path) from kb_session import KBSessionManager diff --git a/kloudbuster/kb_server/kb_server/controllers/kb_session.py b/kb_server/kb_server/controllers/kb_session.py similarity index 100% rename from kloudbuster/kb_server/kb_server/controllers/kb_session.py rename to kb_server/kb_server/controllers/kb_session.py diff --git a/kloudbuster/kb_server/kb_server/controllers/root.py b/kb_server/kb_server/controllers/root.py similarity index 100% rename from kloudbuster/kb_server/kb_server/controllers/root.py rename to kb_server/kb_server/controllers/root.py diff --git a/kloudbuster/kb_server/kb_server/model/__init__.py b/kb_server/kb_server/model/__init__.py similarity index 100% rename from kloudbuster/kb_server/kb_server/model/__init__.py rename to kb_server/kb_server/model/__init__.py diff --git a/kloudbuster/kb_server/kloudbuster-swagger.yaml b/kb_server/kloudbuster-swagger.yaml similarity index 100% rename from kloudbuster/kb_server/kloudbuster-swagger.yaml rename to kb_server/kloudbuster-swagger.yaml diff --git a/kloudbuster/kb_server/setup.cfg b/kb_server/setup.cfg similarity index 100% rename from kloudbuster/kb_server/setup.cfg rename to kb_server/setup.cfg diff --git a/kloudbuster/kb_server/setup.py b/kb_server/setup.py similarity index 100% rename from kloudbuster/kb_server/setup.py rename to kb_server/setup.py diff --git a/kloudbuster/kb_gen_chart.py b/kloudbuster/kb_gen_chart.py index df63fa4..500faf8 100755 --- a/kloudbuster/kb_gen_chart.py +++ b/kloudbuster/kb_gen_chart.py @@ -163,7 +163,7 @@ def gen_chart(file_list, chart_dest, browser, line_rate): data_list.append(results) if not line_rate: line_rate = guess_line_rate(data_list) - print line_rate + print 'Guessed line rate: %s Gbps.' % line_rate chart = KbReport(data_list, line_rate) print('Generating report to ' + chart_dest + '...') chart.plot(chart_dest) diff --git a/kloudbuster/kb_vm_agent.py b/kloudbuster/kb_vm_agent.py index 6e357c2..78c7285 120000 --- a/kloudbuster/kb_vm_agent.py +++ b/kloudbuster/kb_vm_agent.py @@ -1 +1 @@ -dib/elements/kloudbuster/static/kb_test/kb_vm_agent.py \ No newline at end of file +../kb_dib/elements/kloudbuster/static/kb_test/kb_vm_agent.py \ No newline at end of file diff --git a/kloudbuster/kloudbuster.py b/kloudbuster/kloudbuster.py index 6351d05..6b86b04 100755 --- a/kloudbuster/kloudbuster.py +++ b/kloudbuster/kloudbuster.py @@ -15,16 +15,16 @@ import json from multiprocessing.pool import ThreadPool -import os import sys import threading +import time import traceback from __init__ import __version__ import base_compute import base_network import glanceclient.exc as glance_exception -from glanceclient.v2 import client as glanceclient +from glanceclient.v1 import client as glanceclient from kb_config import KBConfig from kb_res_logger import KBResLogger from kb_runner import KBRunner @@ -236,7 +236,8 @@ class KloudBuster(object): self.kb_runner = None self.fp_logfile = None - def check_and_upload_images(self): + def check_and_upload_images(self, retry_count=150): + retry = 0 keystone_list = [create_keystone_client(self.server_cred)[0], create_keystone_client(self.client_cred)[0]] keystone_dict = dict(zip(['Server kloud', 'Client kloud'], keystone_list)) @@ -250,31 +251,37 @@ class KloudBuster(object): glance_client = glanceclient.Client(glance_endpoint, token=keystone.auth_token) try: # Search for the image - glance_client.images.list(filters={'name': img_name_dict[kloud]}).next() - return True + img = glance_client.images.list(filters={'name': img_name_dict[kloud]}).next() + continue except StopIteration: pass # Trying to upload images - kb_image_name = 'dib/' + kb_vm_agent.get_image_name() + '.qcow2' - if not os.path.exists(kb_image_name): - LOG.error("VM Image not in Glance and could not find " + kb_image_name + - " to upload, please refer to dib/README.rst for how to build" - " image for KloudBuster.") + kb_image_name = kb_vm_agent.get_image_name() + '.qcow2' + image_url = 'http://storage.apps.openstack.org/images/%s' % kb_image_name + LOG.info("Image is not found in %s, uploading from OpenStack App Store..." % kloud) + try: + img = glance_client.images.create(name=img_name_dict[kloud], + disk_format="qcow2", + container_format="bare", + is_public=True, + copy_from=image_url) + while img.status in ['queued', 'saving'] and retry < retry_count: + img = glance_client.images.find(name=img.name) + retry = retry + 1 + time.sleep(2) + if img.status != 'active': + raise Exception + except glance_exception.HTTPForbidden: + LOG.error("Cannot upload image without admin access. Please make sure the " + "image is uploaded and is either public or owned by you.") return False - LOG.info("Image is not found in %s, uploading %s..." % (kloud, kb_image_name)) - with open(kb_image_name) as fimage: - try: - image = glance_client.images.create(name=img_name_dict[kloud], - disk_format="qcow2", - container_format="bare", - visibility='public') - glance_client.images.upload(image['id'], fimage) - except glance_exception.HTTPForbidden: - LOG.error("Cannot upload image without admin access. Please make sure the " - "image is uploaded and is either public or owned by you.") - return False - return True + except Exception: + LOG.error("Failed while uploading the image, please make sure the cloud " + "under test has the access to URL: %s." % image_url) + return False + + return True def print_provision_info(self): """ diff --git a/kloudbuster/log.py b/kloudbuster/log.py index 6f14459..dff57e7 100644 --- a/kloudbuster/log.py +++ b/kloudbuster/log.py @@ -46,11 +46,13 @@ def setup(product_name, logfile=None): dbg_color = handlers.ColorHandler.LEVEL_COLORS[logging.DEBUG] handlers.ColorHandler.LEVEL_COLORS[logging.KBDEBUG] = dbg_color + oslogging.setup(CONF, product_name) if logfile: if os.path.exists(logfile): os.remove(logfile) CONF.log_file = logfile - oslogging.setup(CONF, product_name) + hdlr = logging.FileHandler(logfile) + oslogging.getLogger(product_name).logger.addHandler(hdlr) if CONF.kb_debug: oslogging.getLogger( @@ -67,9 +69,7 @@ def getLogger(name="unknown", version="unknown"): def delete_logfile(product_name): if CONF.log_file and os.path.exists(CONF.log_file): os.remove(CONF.log_file) - # Reset the logging to default (stdout) CONF.log_file = None - oslogging.setup(CONF, product_name) class KloudBusterContextAdapter(oslogging.KeywordArgumentAdapter):