Merge "Improve Rally Logging (part 2)"
This commit is contained in:
commit
107d5a19a1
@ -84,7 +84,7 @@ implement the Context API: the *setup()* method that creates a flavor and the
|
||||
ram=self.config.get("ram", 1),
|
||||
vcpus=self.config.get("vcpus", 1),
|
||||
disk=self.config.get("disk", 1)).to_dict()
|
||||
LOG.debug("Flavor with id '%s'", self.context["flavor"]["id"])
|
||||
LOG.debug("Flavor with id '%s'" % self.context["flavor"]["id"])
|
||||
except Exception as e:
|
||||
msg = "Can't create flavor: %s" % e.message
|
||||
if logging.is_debug():
|
||||
@ -97,7 +97,7 @@ implement the Context API: the *setup()* method that creates a flavor and the
|
||||
try:
|
||||
nova = osclients.Clients(self.context["admin"]["credential"]).nova()
|
||||
nova.flavors.delete(self.context["flavor"]["id"])
|
||||
LOG.debug("Flavor '%s' deleted", self.context["flavor"]["id"])
|
||||
LOG.debug("Flavor '%s' deleted" % self.context["flavor"]["id"])
|
||||
except Exception as e:
|
||||
msg = "Can't delete flavor: %s" % e.message
|
||||
if logging.is_debug():
|
||||
|
@ -32,7 +32,6 @@ Inherit a class for your plugin from the base *SLA* class and implement its API
|
||||
.. code-block:: python
|
||||
|
||||
from rally.task import sla
|
||||
from rally.common.i18n import _
|
||||
|
||||
@sla.configure(name="max_duration_range")
|
||||
class MaxDurationRange(sla.SLA):
|
||||
@ -62,8 +61,8 @@ Inherit a class for your plugin from the base *SLA* class and implement its API
|
||||
return self.success
|
||||
|
||||
def details(self):
|
||||
return (_("%s - Maximum allowed duration range: %.2f%% <= %.2f%%") %
|
||||
(self.status(), self._max - self._min, self.criterion_value))
|
||||
return ("%s - Maximum allowed duration range: %.2f%% <= %.2f%%"
|
||||
% (self.status(), self._max - self._min, self.criterion_value))
|
||||
|
||||
|
||||
Usage
|
||||
|
132
rally/api.py
132
rally/api.py
@ -28,10 +28,9 @@ from oslo_config import cfg
|
||||
import requests
|
||||
from requests.packages import urllib3
|
||||
|
||||
from rally.common import opts
|
||||
from rally.common.i18n import _, _LI, _LE
|
||||
from rally.common import logging
|
||||
from rally.common import objects
|
||||
from rally.common import opts
|
||||
from rally.common.plugin import discover
|
||||
from rally.common import utils
|
||||
from rally.common import version as rally_version
|
||||
@ -80,9 +79,9 @@ class _Deployment(APIGroup):
|
||||
|
||||
try:
|
||||
deployment = objects.Deployment(name=name, config=config)
|
||||
except exceptions.DeploymentNameExists as e:
|
||||
except exceptions.DeploymentNameExists:
|
||||
if logging.is_debug():
|
||||
LOG.exception(e)
|
||||
LOG.exception("Deployment with such name exists")
|
||||
raise
|
||||
|
||||
deployer = deploy_engine.Engine.get_engine(
|
||||
@ -90,7 +89,7 @@ class _Deployment(APIGroup):
|
||||
try:
|
||||
deployer.validate()
|
||||
except jsonschema.ValidationError:
|
||||
LOG.error(_LE("Deployment %s: Schema validation error.") %
|
||||
LOG.error("Deployment %s: Schema validation error." %
|
||||
deployment["uuid"])
|
||||
deployment.update_status(consts.DeployStatus.DEPLOY_FAILED)
|
||||
raise
|
||||
@ -102,8 +101,8 @@ class _Deployment(APIGroup):
|
||||
for name, cred in deployer._get_creds(config).items())
|
||||
LOG.warning(
|
||||
"The used config schema is deprecated since Rally 0.10.0. "
|
||||
"The new one is much simpler, try it now:\n%s",
|
||||
json.dumps(new_conf, indent=4)
|
||||
"The new one is much simpler, try it now:\n%s"
|
||||
% json.dumps(new_conf, indent=4)
|
||||
)
|
||||
|
||||
with deployer:
|
||||
@ -130,7 +129,7 @@ class _Deployment(APIGroup):
|
||||
with deployer:
|
||||
deployer.make_cleanup()
|
||||
except exceptions.PluginNotFound:
|
||||
LOG.info(_("Deployment %s will be deleted despite exception")
|
||||
LOG.info("Deployment %s will be deleted despite exception"
|
||||
% deployment["uuid"])
|
||||
|
||||
for verifier in self.api.verifier.list():
|
||||
@ -158,7 +157,7 @@ class _Deployment(APIGroup):
|
||||
try:
|
||||
deployer.validate(config)
|
||||
except jsonschema.ValidationError:
|
||||
LOG.error(_LE("Config schema validation error."))
|
||||
LOG.error("Config schema validation error.")
|
||||
raise
|
||||
|
||||
with deployer:
|
||||
@ -320,8 +319,8 @@ class _Task(APIGroup):
|
||||
real_missing = [mis for mis in missing
|
||||
if is_really_missing(mis, task_template)]
|
||||
if real_missing:
|
||||
multi_msg = _("Please specify next template task arguments: %s")
|
||||
single_msg = _("Please specify template task argument: %s")
|
||||
multi_msg = "Please specify next template task arguments: %s"
|
||||
single_msg = "Please specify template task argument: %s"
|
||||
|
||||
raise TypeError((len(real_missing) > 1 and multi_msg or single_msg)
|
||||
% ", ".join(real_missing))
|
||||
@ -414,8 +413,8 @@ class _Task(APIGroup):
|
||||
"deprecated since Rally 0.10. To use pre-created "
|
||||
"task, transmit task UUID instead.")
|
||||
if task.is_temporary:
|
||||
raise ValueError(_(
|
||||
"Unable to run a temporary task. Please check your code."))
|
||||
raise ValueError(
|
||||
"Unable to run a temporary task. Please check your code.")
|
||||
task = objects.Task.get(task["uuid"])
|
||||
elif task is not None:
|
||||
task = objects.Task.get(task)
|
||||
@ -467,8 +466,9 @@ class _Task(APIGroup):
|
||||
if not async:
|
||||
current_status = objects.Task.get_status(task_uuid)
|
||||
if current_status in objects.Task.NOT_IMPLEMENTED_STAGES_FOR_ABORT:
|
||||
LOG.info(_LI("Task status is '%s'. Should wait until it became"
|
||||
" 'running'") % current_status)
|
||||
LOG.info(
|
||||
"Task status is '%s' waiting until it became 'running'"
|
||||
% current_status)
|
||||
while (current_status in
|
||||
objects.Task.NOT_IMPLEMENTED_STAGES_FOR_ABORT):
|
||||
time.sleep(1)
|
||||
@ -477,7 +477,7 @@ class _Task(APIGroup):
|
||||
objects.Task.get(task_uuid).abort(soft=soft)
|
||||
|
||||
if not async:
|
||||
LOG.info(_LI("Waiting until the task stops."))
|
||||
LOG.info("Waiting until the task stops.")
|
||||
finished_stages = [consts.TaskStatus.ABORTED,
|
||||
consts.TaskStatus.FINISHED,
|
||||
consts.TaskStatus.CRASHED]
|
||||
@ -564,8 +564,8 @@ class _Task(APIGroup):
|
||||
reporter_cls = texporter.TaskExporter.get(output_type)
|
||||
reporter_cls.validate(output_dest)
|
||||
|
||||
LOG.info("Building '%s' report for the following task(s): "
|
||||
"'%s'.", output_type, "', '".join(tasks_uuids))
|
||||
LOG.info("Building '%s' report for the following task(s): '%s'."
|
||||
% (output_type, "', '".join(tasks_uuids)))
|
||||
result = texporter.TaskExporter.make(reporter_cls,
|
||||
tasks_results,
|
||||
output_dest,
|
||||
@ -606,7 +606,7 @@ class _Verifier(APIGroup):
|
||||
# check that the specified verifier type exists
|
||||
vmanager.VerifierManager.get(vtype, platform=namespace)
|
||||
|
||||
LOG.info("Creating verifier '%s'.", name)
|
||||
LOG.info("Creating verifier '%s'." % name)
|
||||
|
||||
try:
|
||||
verifier = self._get(name)
|
||||
@ -641,7 +641,7 @@ class _Verifier(APIGroup):
|
||||
raise
|
||||
verifier.update_status(consts.VerifierStatus.INSTALLED)
|
||||
|
||||
LOG.info("Verifier %s has been successfully created!", verifier)
|
||||
LOG.info("Verifier %s has been successfully created!" % verifier)
|
||||
|
||||
return verifier.uuid
|
||||
|
||||
@ -684,8 +684,8 @@ class _Verifier(APIGroup):
|
||||
d_msg = ((" for deployment '%s'" % deployment_id)
|
||||
if deployment_id else "")
|
||||
if force:
|
||||
LOG.info("Deleting all verifications created by verifier "
|
||||
"%s%s.", verifier, d_msg)
|
||||
LOG.info("Deleting all verifications created by verifier %s%s."
|
||||
% (verifier, d_msg))
|
||||
for verification in verifications:
|
||||
self.api.verification.delete(
|
||||
verification_uuid=verification["uuid"])
|
||||
@ -698,13 +698,13 @@ class _Verifier(APIGroup):
|
||||
.format(verifier, d_msg))
|
||||
|
||||
if deployment_id:
|
||||
LOG.info("Deleting deployment-specific data for verifier %s.",
|
||||
verifier)
|
||||
LOG.info("Deleting deployment-specific data for verifier %s."
|
||||
% verifier)
|
||||
verifier.set_deployment(deployment_id)
|
||||
verifier.manager.uninstall()
|
||||
LOG.info("Deployment-specific data has been successfully deleted!")
|
||||
else:
|
||||
LOG.info("Deleting verifier %s.", verifier)
|
||||
LOG.info("Deleting verifier %s." % verifier)
|
||||
verifier.manager.uninstall(full=True)
|
||||
objects.Verifier.delete(verifier_id)
|
||||
LOG.info("Verifier has been successfully deleted!")
|
||||
@ -725,7 +725,7 @@ class _Verifier(APIGroup):
|
||||
"specified: 'system_wide', 'version', 'update_venv'.")
|
||||
|
||||
verifier = self._get(verifier_id)
|
||||
LOG.info("Updating verifier %s.", verifier)
|
||||
LOG.info("Updating verifier %s." % verifier)
|
||||
|
||||
if verifier.status != consts.VerifierStatus.INSTALLED:
|
||||
raise exceptions.RallyException(
|
||||
@ -769,7 +769,8 @@ class _Verifier(APIGroup):
|
||||
if system_wide == verifier.system_wide:
|
||||
LOG.info(
|
||||
"Verifier %s is already switched to system_wide=%s. "
|
||||
"Nothing will be changed.", verifier, verifier.system_wide)
|
||||
"Nothing will be changed."
|
||||
% (verifier, verifier.system_wide))
|
||||
else:
|
||||
properties["system_wide"] = system_wide
|
||||
if not system_wide:
|
||||
@ -793,7 +794,7 @@ class _Verifier(APIGroup):
|
||||
properties["status"] = original_status # change verifier status back
|
||||
verifier.update_properties(**properties)
|
||||
|
||||
LOG.info("Verifier %s has been successfully updated!", verifier)
|
||||
LOG.info("Verifier %s has been successfully updated!" % verifier)
|
||||
|
||||
return verifier.uuid
|
||||
|
||||
@ -809,9 +810,10 @@ class _Verifier(APIGroup):
|
||||
if not isinstance(verifier, objects.Verifier):
|
||||
verifier = self._get(verifier)
|
||||
verifier.set_deployment(deployment_id)
|
||||
LOG.info(
|
||||
"Configuring verifier %s for deployment '%s' (UUID=%s).",
|
||||
verifier, verifier.deployment["name"], verifier.deployment["uuid"])
|
||||
LOG.info("Configuring verifier %s for deployment '%s' (UUID=%s)."
|
||||
% (verifier,
|
||||
verifier.deployment["name"],
|
||||
verifier.deployment["uuid"]))
|
||||
|
||||
if verifier.status != consts.VerifierStatus.INSTALLED:
|
||||
raise exceptions.RallyException(
|
||||
@ -834,7 +836,7 @@ class _Verifier(APIGroup):
|
||||
# Just add extra options to the config file.
|
||||
if logging.is_debug():
|
||||
LOG.debug("Adding the following extra options: %s "
|
||||
"to verifier configuration.", extra_options)
|
||||
"to verifier configuration." % extra_options)
|
||||
else:
|
||||
LOG.info(
|
||||
"Adding extra options to verifier configuration.")
|
||||
@ -870,12 +872,14 @@ class _Verifier(APIGroup):
|
||||
|
||||
verifier.set_deployment(deployment_id)
|
||||
LOG.info("Overriding configuration of verifier %s for deployment '%s' "
|
||||
"(UUID=%s).", verifier, verifier.deployment["name"],
|
||||
verifier.deployment["uuid"])
|
||||
"(UUID=%s)."
|
||||
% (verifier,
|
||||
verifier.deployment["name"], verifier.deployment["uuid"]))
|
||||
verifier.manager.override_configuration(new_configuration)
|
||||
LOG.info("Configuration of verifier %s has been successfully "
|
||||
"overridden for deployment '%s' (UUID=%s)!", verifier,
|
||||
verifier.deployment["name"], verifier.deployment["uuid"])
|
||||
"overridden for deployment '%s' (UUID=%s)!"
|
||||
% (verifier,
|
||||
verifier.deployment["name"], verifier.deployment["uuid"]))
|
||||
|
||||
def list_tests(self, verifier_id, pattern=""):
|
||||
"""List all verifier tests.
|
||||
@ -915,7 +919,7 @@ class _Verifier(APIGroup):
|
||||
verifier, verifier.status, consts.VerifierStatus.INSTALLED)
|
||||
)
|
||||
|
||||
LOG.info("Adding extension for verifier %s.", verifier)
|
||||
LOG.info("Adding extension for verifier %s." % verifier)
|
||||
|
||||
# store original status to rollback it after failure
|
||||
original_status = verifier.status
|
||||
@ -926,8 +930,8 @@ class _Verifier(APIGroup):
|
||||
finally:
|
||||
verifier.update_status(original_status)
|
||||
|
||||
LOG.info("Extension for verifier %s has been successfully added!",
|
||||
verifier)
|
||||
LOG.info("Extension for verifier %s has been successfully added!"
|
||||
% verifier)
|
||||
|
||||
def list_extensions(self, verifier_id):
|
||||
"""List all verifier extensions.
|
||||
@ -958,10 +962,10 @@ class _Verifier(APIGroup):
|
||||
verifier, verifier.status, consts.VerifierStatus.INSTALLED)
|
||||
)
|
||||
|
||||
LOG.info("Deleting extension for verifier %s.", verifier)
|
||||
LOG.info("Deleting extension for verifier %s." % verifier)
|
||||
verifier.manager.uninstall_extension(name)
|
||||
LOG.info("Extension for verifier %s has been successfully deleted!",
|
||||
verifier)
|
||||
LOG.info("Extension for verifier %s has been successfully deleted!"
|
||||
% verifier)
|
||||
|
||||
|
||||
class _Verification(APIGroup):
|
||||
@ -1007,9 +1011,11 @@ class _Verification(APIGroup):
|
||||
verifier_id=verifier_id, deployment_id=deployment_id, tags=tags,
|
||||
run_args=run_args)
|
||||
LOG.info("Starting verification (UUID=%s) for deployment '%s' "
|
||||
"(UUID=%s) by verifier %s.", verification.uuid,
|
||||
verifier.deployment["name"], verifier.deployment["uuid"],
|
||||
verifier)
|
||||
"(UUID=%s) by verifier %s."
|
||||
% (verification.uuid,
|
||||
verifier.deployment["name"],
|
||||
verifier.deployment["uuid"],
|
||||
verifier))
|
||||
verification.update_status(consts.VerificationStatus.RUNNING)
|
||||
|
||||
context = {"config": verifier.manager._meta_get("context"),
|
||||
@ -1029,8 +1035,9 @@ class _Verification(APIGroup):
|
||||
verification.finish(results.totals, results.tests)
|
||||
|
||||
LOG.info("Verification (UUID=%s) has been successfully finished for "
|
||||
"deployment '%s' (UUID=%s)!", verification.uuid,
|
||||
verifier.deployment["name"], verifier.deployment["uuid"])
|
||||
"deployment '%s' (UUID=%s)!"
|
||||
% (verification.uuid,
|
||||
verifier.deployment["name"], verifier.deployment["uuid"]))
|
||||
|
||||
return {"verification": verification.to_dict(),
|
||||
"totals": results.totals,
|
||||
@ -1069,8 +1076,10 @@ class _Verification(APIGroup):
|
||||
else verification.deployment_uuid)
|
||||
deployment = self.api.deployment.get(deployment=deployment)
|
||||
LOG.info("Re-running %stests from verification (UUID=%s) for "
|
||||
"deployment '%s' (UUID=%s).", "failed " if failed else "",
|
||||
verification.uuid, deployment["name"], deployment["uuid"])
|
||||
"deployment '%s' (UUID=%s)."
|
||||
% ("failed " if failed else "",
|
||||
verification.uuid,
|
||||
deployment["name"], deployment["uuid"]))
|
||||
return self.start(verifier_id=verification.verifier_uuid,
|
||||
deployment_id=deployment["uuid"],
|
||||
load_list=tests, tags=tags, **run_args)
|
||||
@ -1104,7 +1113,7 @@ class _Verification(APIGroup):
|
||||
:param verification_uuid: Verification UUID
|
||||
"""
|
||||
verification = self._get(verification_uuid)
|
||||
LOG.info("Deleting verification (UUID=%s).", verification.uuid)
|
||||
LOG.info("Deleting verification (UUID=%s)." % verification.uuid)
|
||||
verification.delete()
|
||||
LOG.info("Verification has been successfully deleted!")
|
||||
|
||||
@ -1120,12 +1129,12 @@ class _Verification(APIGroup):
|
||||
reporter_cls = vreporter.VerificationReporter.get(output_type)
|
||||
reporter_cls.validate(output_dest)
|
||||
|
||||
LOG.info("Building '%s' report for the following verification(s): "
|
||||
"'%s'.", output_type, "', '".join(uuids))
|
||||
LOG.info("Building '%s' report for the following verification(s): '%s'"
|
||||
% (output_type, "', '".join(uuids)))
|
||||
result = vreporter.VerificationReporter.make(reporter_cls,
|
||||
verifications,
|
||||
output_dest)
|
||||
LOG.info(_LI("The report has been successfully built."))
|
||||
LOG.info("The report has been successfully built.")
|
||||
return result
|
||||
|
||||
def import_results(self, verifier_id, deployment_id, data, **run_args):
|
||||
@ -1143,9 +1152,10 @@ class _Verification(APIGroup):
|
||||
verifier = self.api.verifier._get(verifier_id)
|
||||
verifier.set_deployment(deployment_id)
|
||||
LOG.info("Importing test results into a new verification for "
|
||||
"deployment '%s' (UUID=%s), using verifier %s.",
|
||||
verifier.deployment["name"], verifier.deployment["uuid"],
|
||||
verifier)
|
||||
"deployment '%s' (UUID=%s), using verifier %s."
|
||||
% (verifier.deployment["name"],
|
||||
verifier.deployment["uuid"],
|
||||
verifier))
|
||||
|
||||
verifier.manager.validate_args(run_args)
|
||||
|
||||
@ -1233,8 +1243,8 @@ class API(object):
|
||||
|
||||
except cfg.ConfigFilesNotFoundError as e:
|
||||
cfg_files = e.config_files
|
||||
raise exceptions.RallyException(_(
|
||||
"Failed to read configuration file(s): %s") % cfg_files)
|
||||
raise exceptions.RallyException(
|
||||
"Failed to read configuration file(s): %s" % cfg_files)
|
||||
|
||||
# Check that db is upgraded to the latest revision
|
||||
if not skip_db_check:
|
||||
@ -1266,13 +1276,13 @@ class API(object):
|
||||
|
||||
# Check that db exists
|
||||
if rev["revision"] is None:
|
||||
raise exceptions.RallyException(_(
|
||||
raise exceptions.RallyException(
|
||||
"Database is missing. Create database by command "
|
||||
"`rally db create'"))
|
||||
"`rally db create'")
|
||||
|
||||
# Check that db is updated
|
||||
if rev["revision"] != rev["current_head"]:
|
||||
raise exceptions.RallyException(_(
|
||||
raise exceptions.RallyException((
|
||||
"Database seems to be outdated. Run upgrade from "
|
||||
"revision %(revision)s to %(current_head)s by command "
|
||||
"`rally db upgrade'") % rev)
|
||||
|
@ -32,7 +32,6 @@ import six
|
||||
import sqlalchemy.exc
|
||||
|
||||
from rally import api
|
||||
from rally.common.i18n import _
|
||||
from rally.common import logging
|
||||
from rally.common.plugin import info
|
||||
from rally import exceptions
|
||||
@ -50,7 +49,7 @@ class MissingArgs(Exception):
|
||||
"""Supplied arguments are not sufficient for calling a function."""
|
||||
def __init__(self, missing):
|
||||
self.missing = missing
|
||||
msg = _("Missing arguments: %s") % ", ".join(missing)
|
||||
msg = "Missing arguments: %s" % ", ".join(missing)
|
||||
super(MissingArgs, self).__init__(msg)
|
||||
|
||||
|
||||
@ -112,9 +111,9 @@ def print_list(objs, fields, formatters=None, sortby_index=0,
|
||||
mixed_case_fields = mixed_case_fields or []
|
||||
field_labels = field_labels or fields
|
||||
if len(field_labels) != len(fields):
|
||||
raise ValueError(_("Field labels list %(labels)s has different number "
|
||||
"of elements than fields list %(fields)s"),
|
||||
{"labels": field_labels, "fields": fields})
|
||||
raise ValueError("Field labels list %(labels)s has different number of"
|
||||
" elements than fields list %(fields)s"
|
||||
% {"labels": field_labels, "fields": fields})
|
||||
|
||||
if sortby_index is None:
|
||||
kwargs = {}
|
||||
@ -276,8 +275,8 @@ def make_table_header(table_label, table_width,
|
||||
"""
|
||||
|
||||
if len(table_label) >= (table_width - 2):
|
||||
raise ValueError(_("Table header %s is longer than total"
|
||||
"width of the table."))
|
||||
raise ValueError(
|
||||
"Table header %s is longer than total width of the table.")
|
||||
|
||||
label_and_space_width = table_width - len(table_label) - 2
|
||||
padding = 0 if label_and_space_width % 2 == 0 else 1
|
||||
@ -324,13 +323,13 @@ def process_keystone_exc(f, *args, **kwargs):
|
||||
try:
|
||||
return f(*args, **kwargs)
|
||||
except keystone_exc.Unauthorized as e:
|
||||
print(_("User credentials are wrong! \n%s") % e)
|
||||
print("User credentials are wrong! \n%s" % e)
|
||||
return 1
|
||||
except keystone_exc.AuthorizationFailure as e:
|
||||
print(_("Failed to authorize! \n%s") % e)
|
||||
print("Failed to authorize! \n%s" % e)
|
||||
return 1
|
||||
except keystone_exc.ConnectionRefused as e:
|
||||
print(_("Rally can't reach the Keystone service! \n%s") % e)
|
||||
print("Rally can't reach the Keystone service! \n%s" % e)
|
||||
return 1
|
||||
|
||||
|
||||
@ -375,7 +374,7 @@ class CategoryParser(argparse.ArgumentParser):
|
||||
# error message it WILL NOT LIST ALL the missing arguments
|
||||
# at once INSTEAD only 1 missing argument at a time
|
||||
missing_arg = message.split()[1]
|
||||
print(_("Missing argument:\n%s") % missing_arg)
|
||||
print("Missing argument:\n%s" % missing_arg)
|
||||
sys.exit(2)
|
||||
|
||||
|
||||
@ -663,20 +662,20 @@ def run(argv, categories):
|
||||
except (IOError, TypeError, ValueError,
|
||||
exceptions.RallyException, jsonschema.ValidationError) as e:
|
||||
if logging.is_debug():
|
||||
LOG.exception(e)
|
||||
LOG.exception("Unexpected exception in CLI")
|
||||
else:
|
||||
print(e)
|
||||
return 1
|
||||
except sqlalchemy.exc.OperationalError as e:
|
||||
if logging.is_debug():
|
||||
LOG.exception(e)
|
||||
LOG.exception("Something went wrong with database")
|
||||
print(e)
|
||||
print("Looks like Rally can't connect to its DB.")
|
||||
print("Make sure that connection string in rally.conf is proper:")
|
||||
print(CONF.database.connection)
|
||||
return 1
|
||||
except Exception:
|
||||
print(_("Command failed, please check log for more info"))
|
||||
print("Command failed, please check log for more info")
|
||||
raise
|
||||
|
||||
|
||||
|
@ -26,7 +26,6 @@ import jsonschema
|
||||
from rally.cli import cliutils
|
||||
from rally.cli import envutils
|
||||
from rally.common import fileutils
|
||||
from rally.common.i18n import _
|
||||
from rally.common import logging
|
||||
from rally.common import utils
|
||||
from rally.common import yamlutils as yaml
|
||||
@ -101,10 +100,10 @@ class DeploymentCommands(object):
|
||||
try:
|
||||
deployment = api.deployment.create(config=config, name=name)
|
||||
except jsonschema.ValidationError:
|
||||
print(_("Config schema validation error: %s.") % sys.exc_info()[1])
|
||||
print("Config schema validation error: %s." % sys.exc_info()[1])
|
||||
return 1
|
||||
except exceptions.DeploymentNameExists:
|
||||
print(_("Error: %s") % sys.exc_info()[1])
|
||||
print("Error: %s" % sys.exc_info()[1])
|
||||
return 1
|
||||
|
||||
self.list(api, deployment_list=[deployment])
|
||||
@ -166,9 +165,8 @@ class DeploymentCommands(object):
|
||||
cliutils.print_list(table_rows, headers,
|
||||
sortby_index=headers.index("created_at"))
|
||||
else:
|
||||
print(_("There are no deployments. "
|
||||
"To create a new deployment, use:"
|
||||
"\nrally deployment create"))
|
||||
print("There are no deployments. To create a new deployment, use:"
|
||||
"\nrally deployment create")
|
||||
|
||||
@cliutils.args("--deployment", dest="deployment", type=str,
|
||||
metavar="<uuid>", required=False,
|
||||
@ -230,7 +228,7 @@ class DeploymentCommands(object):
|
||||
return bool([item for item in lst if field in item])
|
||||
|
||||
def print_error(user_type, error):
|
||||
print(_("Error while checking %s credentials:") % user_type)
|
||||
print("Error while checking %s credentials:" % user_type)
|
||||
if logging.is_debug():
|
||||
print(error["trace"])
|
||||
else:
|
||||
|
@ -31,7 +31,6 @@ import six
|
||||
from rally.cli import cliutils
|
||||
from rally.cli import envutils
|
||||
from rally.common import fileutils
|
||||
from rally.common.i18n import _
|
||||
from rally.common.io import junit
|
||||
from rally.common import logging
|
||||
from rally.common import utils as rutils
|
||||
@ -126,12 +125,12 @@ OLD_TASK_RESULT_SCHEMA = {
|
||||
|
||||
class FailedToLoadTask(exceptions.RallyException):
|
||||
error_code = 472
|
||||
msg_fmt = _("Invalid %(source)s passed:\n\n\t %(msg)s")
|
||||
msg_fmt = "Invalid %(source)s passed:\n\n\t %(msg)s"
|
||||
|
||||
|
||||
class FailedToLoadResults(exceptions.RallyException):
|
||||
error_code = 529
|
||||
msg_fmt = _("ERROR: Invalid task result format in %(source)s\n\n\t%(msg)s")
|
||||
msg_fmt = "ERROR: Invalid task result format in %(source)s\n\n\t%(msg)s"
|
||||
|
||||
|
||||
class TaskCommands(object):
|
||||
@ -205,7 +204,7 @@ class TaskCommands(object):
|
||||
source="--task",
|
||||
msg="Failed to render task template.\n\n%s" % e)
|
||||
|
||||
print(_("Task is:\n%s\n") % rendered_task.strip())
|
||||
print("Task is:\n%s\n" % rendered_task.strip())
|
||||
try:
|
||||
parsed_task = yaml.safe_load(rendered_task)
|
||||
except Exception as e:
|
||||
@ -214,7 +213,7 @@ class TaskCommands(object):
|
||||
msg="Wrong format of rendered input task. It should be YAML or"
|
||||
" JSON. Details:\n\n%s" % e)
|
||||
|
||||
print(_("Task syntax is correct :)"))
|
||||
print("Task syntax is correct :)")
|
||||
return parsed_task
|
||||
|
||||
@cliutils.args("--deployment", dest="deployment", type=str,
|
||||
@ -259,7 +258,7 @@ class TaskCommands(object):
|
||||
|
||||
api.task.validate(deployment=deployment, config=task)
|
||||
|
||||
print(_("Task config is valid :)"))
|
||||
print("Input Task is valid :)")
|
||||
|
||||
@cliutils.args("--deployment", dest="deployment", type=str,
|
||||
metavar="<uuid>", required=False,
|
||||
@ -318,7 +317,7 @@ class TaskCommands(object):
|
||||
tags = "[tags: '%s']" % "', '".join(tags) if tags else ""
|
||||
|
||||
print(cliutils.make_header(
|
||||
_("Task %(tags)s %(uuid)s: started")
|
||||
"Task %(tags)s %(uuid)s: started"
|
||||
% {"uuid": task_instance["uuid"], "tags": tags}))
|
||||
print("Running Task... This can take a while...\n")
|
||||
print("To track task status use:\n")
|
||||
@ -332,7 +331,7 @@ class TaskCommands(object):
|
||||
abort_on_sla_failure=abort_on_sla_failure)
|
||||
|
||||
except exceptions.DeploymentNotFinishedStatus as e:
|
||||
print(_("Cannot start a task on unfinished deployment: %s") % e)
|
||||
print("Cannot start a task on unfinished deployment: %s" % e)
|
||||
return 1
|
||||
|
||||
self.detailed(api, task_id=task_instance["uuid"])
|
||||
@ -369,7 +368,7 @@ class TaskCommands(object):
|
||||
"""
|
||||
|
||||
task = api.task.get(task_id=task_id)
|
||||
print(_("Task %(task_id)s: %(status)s")
|
||||
print("Task %(task_id)s: %(status)s"
|
||||
% {"task_id": task_id, "status": task["status"]})
|
||||
|
||||
@cliutils.args("--uuid", type=str, dest="task_id",
|
||||
@ -393,7 +392,7 @@ class TaskCommands(object):
|
||||
|
||||
print()
|
||||
print("-" * 80)
|
||||
print(_("Task %(task_id)s: %(status)s")
|
||||
print("Task %(task_id)s: %(status)s"
|
||||
% {"task_id": task_id, "status": task["status"]})
|
||||
|
||||
if task["status"] == consts.TaskStatus.CRASHED or task["status"] == (
|
||||
@ -405,15 +404,15 @@ class TaskCommands(object):
|
||||
else:
|
||||
print(validation["etype"])
|
||||
print(validation["msg"])
|
||||
print(_("\nFor more details run:\nrally -d task detailed %s")
|
||||
print("\nFor more details run:\nrally -d task detailed %s"
|
||||
% task["uuid"])
|
||||
return 0
|
||||
elif task["status"] not in [consts.TaskStatus.FINISHED,
|
||||
consts.TaskStatus.ABORTED]:
|
||||
print("-" * 80)
|
||||
print(_("\nThe task %s marked as '%s'. Results "
|
||||
"available when it is '%s'.") % (
|
||||
task_id, task["status"], consts.TaskStatus.FINISHED))
|
||||
print("\nThe task %s marked as '%s'. Results "
|
||||
"available when it is '%s'."
|
||||
% (task_id, task["status"], consts.TaskStatus.FINISHED))
|
||||
return 0
|
||||
|
||||
for workload in itertools.chain(
|
||||
@ -542,6 +541,7 @@ class TaskCommands(object):
|
||||
% rutils.format_float_to_str(workload["load_duration"]))
|
||||
print("Full duration: %s"
|
||||
% rutils.format_float_to_str(workload["full_duration"]))
|
||||
|
||||
print("\nHINTS:")
|
||||
print("* To plot HTML graphics with this data, run:")
|
||||
print("\trally task report %s --out output.html\n" % task["uuid"])
|
||||
@ -565,8 +565,8 @@ class TaskCommands(object):
|
||||
finished_statuses = (consts.TaskStatus.FINISHED,
|
||||
consts.TaskStatus.ABORTED)
|
||||
if task["status"] not in finished_statuses:
|
||||
print(_("Task status is %s. Results available when it is one "
|
||||
"of %s.") % (task["status"], ", ".join(finished_statuses)))
|
||||
print("Task status is %s. Results available when it is one of %s."
|
||||
% (task["status"], ", ".join(finished_statuses)))
|
||||
return 1
|
||||
|
||||
# TODO(chenhb): Ensure `rally task results` puts out old format.
|
||||
@ -639,9 +639,8 @@ class TaskCommands(object):
|
||||
if status in consts.TaskStatus:
|
||||
filters["status"] = status
|
||||
elif status:
|
||||
print(_("Error: Invalid task status '%s'.\n"
|
||||
"Available statuses: %s") % (
|
||||
status, ", ".join(consts.TaskStatus)),
|
||||
print("Error: Invalid task status '%s'.\nAvailable statuses: %s"
|
||||
% (status, ", ".join(consts.TaskStatus)),
|
||||
file=sys.stderr)
|
||||
return(1)
|
||||
|
||||
@ -675,12 +674,12 @@ class TaskCommands(object):
|
||||
formatters=formatters)
|
||||
else:
|
||||
if status:
|
||||
print(_("There are no tasks in '%s' status. "
|
||||
"To run a new task, use:\n"
|
||||
"\trally task start") % status)
|
||||
print("There are no tasks in '%s' status. "
|
||||
"To run a new task, use:\n\trally task start"
|
||||
% status)
|
||||
else:
|
||||
print(_("There are no tasks. To run a new task, use:\n"
|
||||
"\trally task start"))
|
||||
print("There are no tasks. To run a new task, use:\n"
|
||||
"\trally task start")
|
||||
|
||||
def _load_task_results_file(self, api, task_id):
|
||||
"""Load the json file which is created by `rally task results` """
|
||||
@ -791,7 +790,7 @@ class TaskCommands(object):
|
||||
tasks = kwargs.get("tasks", []) or list(args)
|
||||
|
||||
if not tasks:
|
||||
print(_("ERROR: At least one task must be specified"),
|
||||
print("ERROR: At least one task must be specified",
|
||||
file=sys.stderr)
|
||||
return 1
|
||||
|
||||
@ -802,8 +801,8 @@ class TaskCommands(object):
|
||||
elif uuidutils.is_uuid_like(task_id):
|
||||
task_results = api.task.get(task_id=task_id, detailed=True)
|
||||
else:
|
||||
print(_("ERROR: Invalid UUID or file name passed: %s")
|
||||
% task_id, file=sys.stderr)
|
||||
print("ERROR: Invalid UUID or file name passed: %s" % task_id,
|
||||
file=sys.stderr)
|
||||
return 1
|
||||
|
||||
results.append(task_results)
|
||||
@ -878,8 +877,8 @@ class TaskCommands(object):
|
||||
elif uuidutils.is_uuid_like(task_file_or_uuid):
|
||||
task = api.task.get(task_id=task_file_or_uuid, detailed=True)
|
||||
else:
|
||||
print(_("ERROR: Invalid UUID or file name passed: %s"
|
||||
) % task_file_or_uuid,
|
||||
print("ERROR: Invalid UUID or file name passed: %s"
|
||||
% task_file_or_uuid,
|
||||
file=sys.stderr)
|
||||
return 1
|
||||
|
||||
@ -913,7 +912,7 @@ class TaskCommands(object):
|
||||
message)
|
||||
result = test_suite.to_xml()
|
||||
else:
|
||||
print(_("Invalid output format: %s") % out_format, file=sys.stderr)
|
||||
print("Invalid output format: %s" % out_format, file=sys.stderr)
|
||||
return 1
|
||||
|
||||
if out:
|
||||
@ -1060,9 +1059,9 @@ class TaskCommands(object):
|
||||
|
||||
@staticmethod
|
||||
def _format_task_error(data):
|
||||
error_type = _("Unknown type")
|
||||
error_message = _("Rally hasn't caught anything yet")
|
||||
error_traceback = _("No traceback available.")
|
||||
error_type = "Unknown type"
|
||||
error_message = "Rally hasn't caught anything yet"
|
||||
error_traceback = "No traceback available."
|
||||
try:
|
||||
error_type = data["error"][0]
|
||||
error_message = data["error"][1]
|
||||
@ -1096,8 +1095,8 @@ class TaskCommands(object):
|
||||
task = api.task.import_results(deployment=deployment,
|
||||
task_results=tasks_results,
|
||||
tags=tags)
|
||||
print(_("Task UUID: %s.") % task["uuid"])
|
||||
print("Task UUID: %s." % task["uuid"])
|
||||
else:
|
||||
print(_("ERROR: Invalid file name passed: %s") % task_file,
|
||||
print("ERROR: Invalid file name passed: %s" % task_file,
|
||||
file=sys.stderr)
|
||||
return 1
|
||||
|
@ -27,7 +27,6 @@ from six.moves import configparser
|
||||
from rally.cli import cliutils
|
||||
from rally.cli import envutils
|
||||
from rally.common import fileutils
|
||||
from rally.common.i18n import _
|
||||
from rally.common import logging
|
||||
from rally.common import yamlutils as yaml
|
||||
from rally import exceptions
|
||||
@ -77,8 +76,8 @@ class VerifyCommands(object):
|
||||
len(failures), "tests" if len(failures) > 1 else "test")
|
||||
self._print_failures(h_text, failures, "=")
|
||||
else:
|
||||
print(_("\nCongratulations! Verification doesn't have failed "
|
||||
"tests! :)"))
|
||||
print("\nCongratulations! "
|
||||
"Verification doesn't have failed tests ;)")
|
||||
|
||||
@staticmethod
|
||||
def _base_dir(uuid):
|
||||
@ -152,9 +151,9 @@ class VerifyCommands(object):
|
||||
"""Choose a verifier to use for the future operations."""
|
||||
verifier = api.verifier.get(verifier_id=verifier_id)
|
||||
fileutils.update_globals_file(envutils.ENV_VERIFIER, verifier["uuid"])
|
||||
print(_("Using verifier '%s' (UUID=%s) as the default verifier "
|
||||
"for the future operations.") % (verifier["name"],
|
||||
verifier["uuid"]))
|
||||
print("Using verifier '%s' (UUID=%s) as the default verifier "
|
||||
"for the future CLI operations."
|
||||
% (verifier["name"], verifier["uuid"]))
|
||||
|
||||
@cliutils.help_group("verifier")
|
||||
@cliutils.args("--status", dest="status", type=str, required=False,
|
||||
@ -176,10 +175,10 @@ class VerifyCommands(object):
|
||||
cliutils.print_list(verifiers, fields, formatters=formatters,
|
||||
normalize_field_names=True, sortby_index=4)
|
||||
elif status:
|
||||
print(_("There are no verifiers with status '%s'.") % status)
|
||||
print("There are no verifiers with status '%s'." % status)
|
||||
else:
|
||||
print(_("There are no verifiers. You can create verifier, using "
|
||||
"command `rally verify create-verifier`."))
|
||||
print("There are no verifiers. You can create verifier, using "
|
||||
"command `rally verify create-verifier`.")
|
||||
|
||||
@cliutils.help_group("verifier")
|
||||
@cliutils.args("--id", dest="verifier_id", type=str,
|
||||
@ -210,8 +209,8 @@ class VerifyCommands(object):
|
||||
cliutils.print_dict(verifier, fields=fields, formatters=formatters,
|
||||
normalize_field_names=True, print_header=False,
|
||||
table_label="Verifier")
|
||||
print(_("Attention! All you do in the verifier repository or "
|
||||
"verifier virtual environment, you do it at your own risk!"))
|
||||
print("Attention! All you do in the verifier repository or verifier "
|
||||
"virtual environment, you do it at your own risk!")
|
||||
|
||||
@cliutils.help_group("verifier")
|
||||
@cliutils.args("--id", dest="verifier_id", type=str, required=True,
|
||||
@ -259,13 +258,13 @@ class VerifyCommands(object):
|
||||
update_venv=None):
|
||||
"""Update a verifier."""
|
||||
if not (version or system_wide or no_system_wide or update_venv):
|
||||
print(_("At least one of the following arguments should be "
|
||||
"provided: '--update-venv', '--version', '--system-wide', "
|
||||
"'--no-system-wide'."))
|
||||
print("At least one of the following arguments should be "
|
||||
"provided: '--update-venv', '--version', '--system-wide', "
|
||||
"'--no-system-wide'.")
|
||||
return 1
|
||||
|
||||
msg = _("Arguments '--%s' and '--%s' cannot be used simultaneously. "
|
||||
"You can use only one of the mentioned arguments.")
|
||||
msg = ("Arguments '--%s' and '--%s' cannot be used simultaneously. "
|
||||
"You can use only one of the mentioned arguments.")
|
||||
if update_venv and system_wide:
|
||||
print(msg % ("update-venv", "system-wide"))
|
||||
return 1
|
||||
@ -279,9 +278,9 @@ class VerifyCommands(object):
|
||||
version=version,
|
||||
update_venv=update_venv)
|
||||
|
||||
print(_("HINT: In some cases the verifier config file should be "
|
||||
"updated as well. Use `rally verify configure-verifier` "
|
||||
"command to update the config file."))
|
||||
print("HINT: In some cases the verifier config file should be "
|
||||
"updated as well. Use `rally verify configure-verifier` "
|
||||
"command to update the config file.")
|
||||
|
||||
@cliutils.help_group("verifier")
|
||||
@cliutils.args("--id", dest="verifier_id", type=str,
|
||||
@ -313,15 +312,14 @@ class VerifyCommands(object):
|
||||
|
||||
# TODO(ylobankov): Add an ability to read extra options from
|
||||
# a json or yaml file.
|
||||
|
||||
if new_configuration and (extra_options or reconfigure):
|
||||
print(_("Argument '--override' cannot be used with arguments "
|
||||
"'--reconfigure' and '--extend'."))
|
||||
print("Argument '--override' cannot be used with arguments "
|
||||
"'--reconfigure' and '--extend'.")
|
||||
return 1
|
||||
|
||||
if new_configuration:
|
||||
if not os.path.exists(new_configuration):
|
||||
print(_("File '%s' not found.") % new_configuration)
|
||||
print("File '%s' not found." % new_configuration)
|
||||
return 1
|
||||
|
||||
with open(new_configuration) as f:
|
||||
@ -370,7 +368,7 @@ class VerifyCommands(object):
|
||||
for test in tests:
|
||||
print(test)
|
||||
else:
|
||||
print(_("No tests found."))
|
||||
print("No tests found.")
|
||||
|
||||
@cliutils.help_group("verifier-ext")
|
||||
@cliutils.args("--id", dest="verifier_id", type=str,
|
||||
@ -407,9 +405,8 @@ class VerifyCommands(object):
|
||||
cliutils.print_list(verifier_exts, fields,
|
||||
normalize_field_names=True)
|
||||
else:
|
||||
print(_("There are no verifier extensions. You can add "
|
||||
"verifier extension, using command `rally verify "
|
||||
"add-verifier-ext`."))
|
||||
print("There are no verifier extensions. You can add verifier "
|
||||
"extension, using command `rally verify add-verifier-ext`.")
|
||||
|
||||
@cliutils.help_group("verifier-ext")
|
||||
@cliutils.args("--id", dest="verifier_id", type=str,
|
||||
@ -468,9 +465,8 @@ class VerifyCommands(object):
|
||||
xfail_list=None, detailed=False, do_use=True):
|
||||
"""Start a verification (run verifier tests)."""
|
||||
if pattern and load_list:
|
||||
print(_("Arguments '--pattern' and '--load-list' cannot be used "
|
||||
"simultaneously. You can use only one of the mentioned "
|
||||
"arguments."))
|
||||
print("Arguments '--pattern' and '--load-list' cannot be used "
|
||||
"together, use only one of them.")
|
||||
return 1
|
||||
|
||||
def parse(filename):
|
||||
@ -479,20 +475,20 @@ class VerifyCommands(object):
|
||||
|
||||
if load_list:
|
||||
if not os.path.exists(load_list):
|
||||
print(_("File '%s' not found.") % load_list)
|
||||
print("File '%s' not found." % load_list)
|
||||
return 1
|
||||
with open(load_list, "r") as f:
|
||||
load_list = [test for test in f.read().split("\n") if test]
|
||||
|
||||
if skip_list:
|
||||
if not os.path.exists(skip_list):
|
||||
print(_("File '%s' not found.") % skip_list)
|
||||
print("File '%s' not found." % skip_list)
|
||||
return 1
|
||||
skip_list = parse(skip_list)
|
||||
|
||||
if xfail_list:
|
||||
if not os.path.exists(xfail_list):
|
||||
print(_("File '%s' not found.") % xfail_list)
|
||||
print("File '%s' not found." % xfail_list)
|
||||
return 1
|
||||
xfail_list = parse(xfail_list)
|
||||
|
||||
@ -507,8 +503,8 @@ class VerifyCommands(object):
|
||||
tags=tags, **run_args)
|
||||
verification_uuid = results["verification"]["uuid"]
|
||||
except exceptions.DeploymentNotFinishedStatus as e:
|
||||
print(_("Cannot start a verefication on "
|
||||
"unfinished deployment: %s") % e)
|
||||
print("Cannot start a verefication against unfinished deployment: "
|
||||
" %s" % e)
|
||||
return 1
|
||||
|
||||
if detailed:
|
||||
@ -519,7 +515,7 @@ class VerifyCommands(object):
|
||||
if do_use:
|
||||
self.use(api, verification_uuid)
|
||||
else:
|
||||
print(_("Verification UUID: %s.") % verification_uuid)
|
||||
print("Verification UUID: %s." % verification_uuid)
|
||||
|
||||
@cliutils.help_group("verification")
|
||||
@cliutils.args("--uuid", dest="verification_uuid", type=str, required=True,
|
||||
@ -530,8 +526,8 @@ class VerifyCommands(object):
|
||||
verification_uuid=verification_uuid)
|
||||
fileutils.update_globals_file(
|
||||
envutils.ENV_VERIFICATION, verification["uuid"])
|
||||
print(_("Using verification (UUID=%s) as the default verification "
|
||||
"for the future operations.") % verification["uuid"])
|
||||
print("Using verification (UUID=%s) as the default verification "
|
||||
"for the future operations." % verification["uuid"])
|
||||
|
||||
@cliutils.help_group("verification")
|
||||
@cliutils.args("--uuid", dest="verification_uuid", type=str,
|
||||
@ -574,8 +570,7 @@ class VerifyCommands(object):
|
||||
if do_use:
|
||||
self.use(api, results["verification"]["uuid"])
|
||||
else:
|
||||
print(_("Verification UUID: %s.")
|
||||
% results["verification"]["uuid"])
|
||||
print("Verification UUID: %s." % results["verification"]["uuid"])
|
||||
|
||||
@cliutils.help_group("verification")
|
||||
@cliutils.args("--uuid", dest="verification_uuid", type=str,
|
||||
@ -641,7 +636,7 @@ class VerifyCommands(object):
|
||||
table_label="Verification")
|
||||
|
||||
if detailed:
|
||||
h = _("Run arguments")
|
||||
h = "Run arguments"
|
||||
print("\n%s" % cliutils.make_header(h, len(h)).strip())
|
||||
print("\n%s\n" % json.dumps(verification["run_args"], indent=4))
|
||||
|
||||
@ -660,8 +655,7 @@ class VerifyCommands(object):
|
||||
if failures:
|
||||
self._print_failures("Failures", failures)
|
||||
else:
|
||||
print(_("\nCongratulations! Verification doesn't have failed "
|
||||
"tests! :)"))
|
||||
print("\nCongratulations! Verification passed all tests ;)")
|
||||
|
||||
@cliutils.help_group("verification")
|
||||
@cliutils.args("--id", dest="verifier_id", type=str, required=False,
|
||||
@ -698,11 +692,10 @@ class VerifyCommands(object):
|
||||
cliutils.print_list(verifications, fields, formatters=formatters,
|
||||
normalize_field_names=True, sortby_index=4)
|
||||
elif verifier_id or deployment or status or tags:
|
||||
print(_("There are no verifications that meet specified filter "
|
||||
"arguments."))
|
||||
print("There are no verifications that meet specified criteria.")
|
||||
else:
|
||||
print(_("There are no verifications. You can start verification, "
|
||||
"using command `rally verify start`."))
|
||||
print("There are no verifications. You can start verification, "
|
||||
"using command `rally verify start`.")
|
||||
|
||||
@cliutils.help_group("verification")
|
||||
@cliutils.args("--uuid", nargs="+", dest="verification_uuid", type=str,
|
||||
@ -743,7 +736,7 @@ class VerifyCommands(object):
|
||||
output_type=output_type,
|
||||
output_dest=output_dest)
|
||||
if "files" in result:
|
||||
print(_("Saving the report to '%s' file. It may take some time.")
|
||||
print("Saving the report to '%s' file. It may take some time."
|
||||
% output_dest)
|
||||
for path in result["files"]:
|
||||
full_path = os.path.abspath(os.path.expanduser(path))
|
||||
@ -751,12 +744,12 @@ class VerifyCommands(object):
|
||||
os.makedirs(os.path.dirname(full_path))
|
||||
with open(full_path, "w") as f:
|
||||
f.write(result["files"][path])
|
||||
print(_("The report has been successfully saved."))
|
||||
print("The report has been successfully saved.")
|
||||
|
||||
if open_it:
|
||||
if "open" not in result:
|
||||
print(_("Cannot open '%s' report in the browser because "
|
||||
"report type doesn't support it.") % output_type)
|
||||
print("Cannot open '%s' report in the browser because "
|
||||
"report type doesn't support it." % output_type)
|
||||
return 1
|
||||
webbrowser.open_new_tab(
|
||||
"file://" + os.path.abspath(result["open"]))
|
||||
@ -764,7 +757,7 @@ class VerifyCommands(object):
|
||||
if "print" in result:
|
||||
# NOTE(andreykurilin): we need a separation between logs and
|
||||
# printed information to be able to parse output
|
||||
h = _("Verification Report")
|
||||
h = "Verification Report"
|
||||
print("\n%s\n%s" % (cliutils.make_header(h, len(h)),
|
||||
result["print"]))
|
||||
|
||||
@ -791,7 +784,7 @@ class VerifyCommands(object):
|
||||
file_to_parse=None, run_args=None, do_use=True):
|
||||
"""Import results of a test run into the Rally database."""
|
||||
if not os.path.exists(file_to_parse):
|
||||
print(_("File '%s' not found.") % file_to_parse)
|
||||
print("File '%s' not found." % file_to_parse)
|
||||
return 1
|
||||
with open(file_to_parse, "r") as f:
|
||||
data = f.read()
|
||||
@ -806,4 +799,4 @@ class VerifyCommands(object):
|
||||
if do_use:
|
||||
self.use(api, verification_uuid)
|
||||
else:
|
||||
print(_("Verification UUID: %s.") % verification_uuid)
|
||||
print("Verification UUID: %s." % verification_uuid)
|
||||
|
@ -19,7 +19,6 @@ import decorator
|
||||
from oslo_utils import strutils
|
||||
|
||||
from rally.common import fileutils
|
||||
from rally.common.i18n import _
|
||||
from rally import exceptions
|
||||
|
||||
ENV_DEPLOYMENT = "RALLY_DEPLOYMENT"
|
||||
@ -28,7 +27,7 @@ ENV_VERIFIER = "RALLY_VERIFIER"
|
||||
ENV_VERIFICATION = "RALLY_VERIFICATION"
|
||||
ENVVARS = [ENV_DEPLOYMENT, ENV_TASK, ENV_VERIFIER, ENV_VERIFICATION]
|
||||
|
||||
MSG_MISSING_ARG = _("Missing argument: --%(arg_name)s")
|
||||
MSG_MISSING_ARG = "Missing argument: --%(arg_name)s"
|
||||
|
||||
|
||||
def clear_global(global_key):
|
||||
@ -70,14 +69,13 @@ def default_from_global(arg_name, env_name,
|
||||
|
||||
|
||||
def with_default_deployment(cli_arg_name="uuid"):
|
||||
return default_from_global("deployment", ENV_DEPLOYMENT, cli_arg_name,
|
||||
message=_("There is no default deployment.\n"
|
||||
"\tPlease use command:\n"
|
||||
"\trally deployment use "
|
||||
"<deployment_uuid>|<deployment_name>"
|
||||
"\nor pass uuid of deployment to "
|
||||
"the --%(arg_name)s argument of "
|
||||
"this command"))
|
||||
return default_from_global(
|
||||
"deployment", ENV_DEPLOYMENT, cli_arg_name,
|
||||
message="There is no default deployment.\n"
|
||||
"\tPlease use command:\n"
|
||||
"\trally deployment use <deployment_uuid>|<deployment_name>\n"
|
||||
"or pass uuid of deployment to the --%(arg_name)s "
|
||||
"argument of this command")
|
||||
|
||||
|
||||
def with_default_verifier_id(cli_arg_name="id"):
|
||||
|
@ -15,7 +15,6 @@
|
||||
|
||||
import six
|
||||
|
||||
from rally.common.i18n import _
|
||||
from rally.common.plugin import discover
|
||||
|
||||
|
||||
@ -30,7 +29,7 @@ class RallyException(Exception):
|
||||
with the keyword arguments provided to the constructor.
|
||||
|
||||
"""
|
||||
msg_fmt = _("%(message)s")
|
||||
msg_fmt = "%(message)s"
|
||||
error_code = 500
|
||||
|
||||
def __init__(self, message=None, **kwargs):
|
||||
@ -68,161 +67,157 @@ def make_exception(exc):
|
||||
|
||||
class InvalidArgumentsException(RallyException):
|
||||
error_code = 455
|
||||
msg_fmt = _("Invalid arguments: '%(message)s'")
|
||||
msg_fmt = "Invalid arguments: '%(message)s'"
|
||||
|
||||
|
||||
class InvalidConfigException(RallyException):
|
||||
error_code = 456
|
||||
msg_fmt = _("This config has invalid schema: `%(message)s`")
|
||||
msg_fmt = "This config has invalid schema: `%(message)s`"
|
||||
|
||||
|
||||
class InvalidTaskException(InvalidConfigException):
|
||||
error_code = 457
|
||||
msg_fmt = _("Task config is invalid: `%(message)s`")
|
||||
msg_fmt = "Task config is invalid: `%(message)s`"
|
||||
|
||||
|
||||
class InvalidTaskConfig(InvalidTaskException):
|
||||
error_code = 458
|
||||
msg_fmt = _("Input task is invalid!\n\n"
|
||||
"Subtask %(name)s[%(pos)s] has wrong configuration"
|
||||
"\nSubtask configuration:\n%(config)s\n"
|
||||
"\nReason(s):\n %(reason)s")
|
||||
msg_fmt = ("Input task is invalid!\n\n"
|
||||
"Subtask %(name)s[%(pos)s] has wrong configuration"
|
||||
"\nSubtask configuration:\n%(config)s\n"
|
||||
"\nReason(s):\n %(reason)s")
|
||||
|
||||
|
||||
class NotFoundException(RallyException):
|
||||
error_code = 404
|
||||
msg_fmt = _("The resource can not be found: %(message)s")
|
||||
msg_fmt = "The resource can not be found: %(message)s"
|
||||
|
||||
|
||||
class ThreadTimeoutException(RallyException):
|
||||
error_code = 515
|
||||
msg_fmt = _("Iteration interrupted due to timeout.")
|
||||
msg_fmt = "Iteration interrupted due to timeout."
|
||||
|
||||
|
||||
class PluginNotFound(NotFoundException):
|
||||
error_code = 459
|
||||
msg_fmt = _("There is no plugin with name: `%(name)s` in "
|
||||
"%(platform)s platform.")
|
||||
msg_fmt = "There is no plugin `%(name)s` in %(platform)s platform."
|
||||
|
||||
|
||||
class PluginWithSuchNameExists(RallyException):
|
||||
error_code = 516
|
||||
msg_fmt = _("Plugin with such name: %(name)s already exists in "
|
||||
"%(platform)s platform. It's module allocates at "
|
||||
"%(existing_path)s. You are trying to add plugin whose module "
|
||||
"allocates at %(new_path)s.")
|
||||
msg_fmt = (
|
||||
"Plugin with such name: %(name)s already exists in %(platform)s "
|
||||
"platform. It's module allocates at %(existing_path)s. You are trying "
|
||||
"to add plugin whose module allocates at %(new_path)s.")
|
||||
|
||||
|
||||
class TaskNotFound(NotFoundException):
|
||||
error_code = 460
|
||||
msg_fmt = _("Task with uuid=%(uuid)s not found.")
|
||||
msg_fmt = "Task with uuid=%(uuid)s not found."
|
||||
|
||||
|
||||
class DeploymentNotFound(NotFoundException):
|
||||
error_code = 461
|
||||
msg_fmt = _("Deployment %(deployment)s not found.")
|
||||
msg_fmt = "Deployment %(deployment)s not found."
|
||||
|
||||
|
||||
class DeploymentNameExists(RallyException):
|
||||
error_code = 462
|
||||
msg_fmt = _("Deployment name '%(deployment)s' already registered.")
|
||||
msg_fmt = "Deployment name '%(deployment)s' already registered."
|
||||
|
||||
|
||||
class DeploymentNotFinishedStatus(RallyException):
|
||||
error_code = 463
|
||||
msg_fmt = _("Deployment '%(name)s' (UUID=%(uuid)s) is in"
|
||||
" '%(status)s' status.")
|
||||
msg_fmt = "Deployment '%(name)s' (UUID=%(uuid)s) is '%(status)s'."
|
||||
|
||||
|
||||
class DeploymentIsBusy(RallyException):
|
||||
error_code = 464
|
||||
msg_fmt = _("There are allocated resources for the deployment with "
|
||||
"uuid=%(uuid)s.")
|
||||
msg_fmt = "There are allocated resources for the deployment %(uuid)s."
|
||||
|
||||
|
||||
class RallyAssertionError(RallyException):
|
||||
msg_fmt = _("Assertion error: %(message)s")
|
||||
msg_fmt = "Assertion error: %(message)s"
|
||||
|
||||
|
||||
class ResourceNotFound(NotFoundException):
|
||||
error_code = 465
|
||||
msg_fmt = _("Resource with id=%(id)s not found.")
|
||||
msg_fmt = "Resource with id=%(id)s not found."
|
||||
|
||||
|
||||
class TimeoutException(RallyException):
|
||||
error_code = 517
|
||||
msg_fmt = _("Rally tired waiting for %(resource_type)s %(resource_name)s:"
|
||||
"%(resource_id)s to become %(desired_status)s current "
|
||||
"status %(resource_status)s")
|
||||
msg_fmt = ("Rally tired waiting for %(resource_type)s %(resource_name)s:"
|
||||
"%(resource_id)s to become %(desired_status)s current "
|
||||
"status %(resource_status)s")
|
||||
|
||||
|
||||
class GetResourceFailure(RallyException):
|
||||
error_code = 518
|
||||
msg_fmt = _("Failed to get the resource %(resource)s: %(err)s")
|
||||
msg_fmt = "Failed to get the resource %(resource)s: %(err)s"
|
||||
|
||||
|
||||
class GetResourceNotFound(GetResourceFailure):
|
||||
error_code = 519
|
||||
msg_fmt = _("Resource %(resource)s is not found.")
|
||||
msg_fmt = "Resource %(resource)s is not found."
|
||||
|
||||
|
||||
class GetResourceErrorStatus(GetResourceFailure):
|
||||
error_code = 520
|
||||
msg_fmt = _("Resource %(resource)s has %(status)s status.\n"
|
||||
"Fault: %(fault)s")
|
||||
msg_fmt = "Resource %(resource)s has %(status)s status.\n Fault: %(fault)s"
|
||||
|
||||
|
||||
class ScriptError(RallyException):
|
||||
msg_fmt = _("Script execution failed: %(message)s")
|
||||
msg_fmt = "Script execution failed: %(message)s"
|
||||
|
||||
|
||||
class TaskInvalidStatus(RallyException):
|
||||
error_code = 466
|
||||
msg_fmt = _("Task `%(uuid)s` in `%(actual)s` status but `%(require)s` is "
|
||||
"required.")
|
||||
msg_fmt = ("Task `%(uuid)s` in `%(actual)s` status but `%(require)s` is "
|
||||
"required.")
|
||||
|
||||
|
||||
class InvalidAdminException(InvalidArgumentsException):
|
||||
error_code = 521
|
||||
msg_fmt = _("user '%(username)s' doesn't have 'admin' role")
|
||||
msg_fmt = "user '%(username)s' doesn't have 'admin' role"
|
||||
|
||||
|
||||
class AuthenticationFailed(InvalidArgumentsException):
|
||||
error_code = 401
|
||||
msg_fmt = _("Failed to authenticate to %(url)s for user '%(username)s'"
|
||||
" in project '%(project)s': %(etype)s: %(error)s")
|
||||
msg_fmt = ("Failed to authenticate to %(url)s for user '%(username)s'"
|
||||
" in project '%(project)s': %(etype)s: %(error)s")
|
||||
|
||||
|
||||
class InvalidScenarioArgument(RallyException):
|
||||
error_code = 467
|
||||
msg_fmt = _("Invalid scenario argument: '%(message)s'")
|
||||
msg_fmt = "Invalid scenario argument: '%(message)s'"
|
||||
|
||||
|
||||
class ContextSetupFailure(RallyException):
|
||||
error_code = 524
|
||||
msg_fmt = _("Unable to setup context '%(ctx_name)s': '%(msg)s'")
|
||||
msg_fmt = "Unable to setup context '%(ctx_name)s': '%(msg)s'"
|
||||
|
||||
|
||||
class ValidationError(RallyException):
|
||||
error_code = 468
|
||||
msg_fmt = _("Validation error: %(message)s")
|
||||
msg_fmt = "Validation error: %(message)s"
|
||||
|
||||
|
||||
class WorkerNotFound(NotFoundException):
|
||||
error_code = 469
|
||||
msg_fmt = _("Worker %(worker)s could not be found")
|
||||
msg_fmt = "Worker %(worker)s could not be found"
|
||||
|
||||
|
||||
class WorkerAlreadyRegistered(RallyException):
|
||||
error_code = 525
|
||||
msg_fmt = _("Worker %(worker)s already registered")
|
||||
msg_fmt = "Worker %(worker)s already registered"
|
||||
|
||||
|
||||
class MultiplePluginsFound(RallyException):
|
||||
error_code = 470
|
||||
|
||||
msg_fmt = _("Multiple plugins found: %(plugins)s for name %(name)s. "
|
||||
"Use full name in input task.")
|
||||
msg_fmt = ("Multiple plugins found: %(plugins)s for name %(name)s. "
|
||||
"Use full name with platform to fix issue.")
|
||||
|
||||
|
||||
class SSHTimeout(RallyException):
|
||||
@ -237,10 +232,9 @@ class SSHError(RallyException):
|
||||
|
||||
class InvalidConnectionString(RallyException):
|
||||
error_code = 471
|
||||
msg_fmt = _("The connection string is not valid: %(message)s. Please "
|
||||
"check your connection string.")
|
||||
msg_fmt = "Invalid connection string: %(message)s."
|
||||
|
||||
|
||||
class DowngradeNotSupported(RallyException):
|
||||
error_code = 528
|
||||
msg_fmt = _("Database schema downgrade is not supported.")
|
||||
msg_fmt = "Database schema downgrade is not supported."
|
||||
|
@ -20,7 +20,6 @@ from oslo_config import cfg
|
||||
from six.moves.urllib import parse
|
||||
|
||||
from rally.cli import envutils
|
||||
from rally.common.i18n import _
|
||||
from rally.common import logging
|
||||
from rally.common.plugin import plugin
|
||||
from rally import consts
|
||||
@ -114,18 +113,17 @@ class OSClient(plugin.Plugin):
|
||||
supported_versions = cls.get_supported_versions()
|
||||
if supported_versions:
|
||||
if str(version) not in supported_versions:
|
||||
raise exceptions.ValidationError(_(
|
||||
raise exceptions.ValidationError(
|
||||
"'%(vers)s' is not supported. Should be one of "
|
||||
"'%(supported)s'") % {"vers": version,
|
||||
"supported": supported_versions})
|
||||
"'%(supported)s'"
|
||||
% {"vers": version, "supported": supported_versions})
|
||||
else:
|
||||
raise exceptions.RallyException(
|
||||
_("Setting version is not supported."))
|
||||
raise exceptions.RallyException("Setting version is not supported")
|
||||
try:
|
||||
float(version)
|
||||
except ValueError:
|
||||
raise exceptions.ValidationError(_(
|
||||
"'%s' is invalid. Should be numeric value.") % version)
|
||||
raise exceptions.ValidationError(
|
||||
"'%s' is invalid. Should be numeric value." % version)
|
||||
|
||||
def choose_service_type(self, service_type=None):
|
||||
"""Return service_type string.
|
||||
@ -141,8 +139,8 @@ class OSClient(plugin.Plugin):
|
||||
def is_service_type_configurable(cls):
|
||||
"""Just checks that client supports setting service type."""
|
||||
if cls._meta_get("default_service_type") is None:
|
||||
raise exceptions.RallyException(_(
|
||||
"Setting service type is not supported."))
|
||||
raise exceptions.RallyException(
|
||||
"Setting service type is not supported.")
|
||||
|
||||
@property
|
||||
def keystone(self):
|
||||
@ -223,8 +221,8 @@ class Keystone(OSClient):
|
||||
|
||||
@property
|
||||
def keystone(self):
|
||||
raise exceptions.RallyException(_("Method 'keystone' is restricted "
|
||||
"for keystoneclient. :)"))
|
||||
raise exceptions.RallyException(
|
||||
"Method 'keystone' is restricted for keystoneclient. :)")
|
||||
|
||||
@property
|
||||
def service_catalog(self):
|
||||
@ -702,7 +700,7 @@ class EC2(OSClient):
|
||||
|
||||
if kc.version != "v2.0":
|
||||
raise exceptions.RallyException(
|
||||
_("Rally EC2 scenario supports only Keystone version 2"))
|
||||
"Rally EC2 scenario supports only Keystone version 2")
|
||||
ec2_credential = kc.ec2.create(user_id=kc.auth_user_id,
|
||||
tenant_id=kc.auth_tenant_id)
|
||||
client = boto.connect_ec2_endpoint(
|
||||
|
@ -21,7 +21,6 @@ import sys
|
||||
|
||||
import six
|
||||
|
||||
from rally.common.i18n import _LE, _LI
|
||||
from rally.common.io import subunit_v2
|
||||
from rally.common import logging
|
||||
from rally.common.plugin import plugin
|
||||
@ -196,10 +195,10 @@ class VerifierManager(plugin.Plugin):
|
||||
% source)
|
||||
|
||||
if logging.is_debug():
|
||||
LOG.debug("Cloning verifier repo from %s into %s.", source,
|
||||
self.repo_dir)
|
||||
LOG.debug("Cloning verifier repo from %s into %s."
|
||||
% (source, self.repo_dir))
|
||||
else:
|
||||
LOG.info("Cloning verifier repo from %s.", source)
|
||||
LOG.info("Cloning verifier repo from %s." % source)
|
||||
|
||||
cmd = ["git", "clone", source, self.repo_dir]
|
||||
|
||||
@ -259,8 +258,8 @@ class VerifierManager(plugin.Plugin):
|
||||
|
||||
LOG.info("Creating virtual environment. It may take a few minutes.")
|
||||
|
||||
LOG.debug("Initializing virtual environment in %s directory.",
|
||||
self.venv_dir)
|
||||
LOG.debug("Initializing virtual environment in %s directory."
|
||||
% self.venv_dir)
|
||||
utils.check_output(["virtualenv", "-p", sys.executable, self.venv_dir],
|
||||
cwd=self.repo_dir,
|
||||
msg_on_err="Failed to initialize virtual env "
|
||||
@ -293,7 +292,7 @@ class VerifierManager(plugin.Plugin):
|
||||
|
||||
def checkout(self, version):
|
||||
"""Switch a verifier repo."""
|
||||
LOG.info("Switching verifier repo to the '%s' version.", version)
|
||||
LOG.info("Switching verifier repo to the '%s' version." % version)
|
||||
utils.check_output(["git", "checkout", "master"], cwd=self.repo_dir)
|
||||
utils.check_output(["git", "remote", "update"], cwd=self.repo_dir)
|
||||
utils.check_output(["git", "pull"], cwd=self.repo_dir)
|
||||
@ -309,7 +308,7 @@ class VerifierManager(plugin.Plugin):
|
||||
configuration
|
||||
"""
|
||||
raise NotImplementedError(
|
||||
_LI("'%s' verifiers don't support configuration at all.")
|
||||
"'%s' verifiers don't support configuration at all."
|
||||
% self.get_name())
|
||||
|
||||
def is_configured(self):
|
||||
@ -330,7 +329,7 @@ class VerifierManager(plugin.Plugin):
|
||||
configuration
|
||||
"""
|
||||
raise NotImplementedError(
|
||||
_LE("'%s' verifiers don't support configuration at all.")
|
||||
"'%s' verifiers don't support configuration at all."
|
||||
% self.get_name())
|
||||
|
||||
def extend_configuration(self, extra_options):
|
||||
@ -342,7 +341,7 @@ class VerifierManager(plugin.Plugin):
|
||||
configuration
|
||||
"""
|
||||
raise NotImplementedError(
|
||||
_LE("'%s' verifiers don't support configuration at all.")
|
||||
"'%s' verifiers don't support configuration at all."
|
||||
% self.get_name())
|
||||
|
||||
def install_extension(self, source, version=None, extra_settings=None):
|
||||
@ -358,7 +357,7 @@ class VerifierManager(plugin.Plugin):
|
||||
extensions
|
||||
"""
|
||||
raise NotImplementedError(
|
||||
_LE("'%s' verifiers don't support extensions.") % self.get_name())
|
||||
"'%s' verifiers don't support extensions." % self.get_name())
|
||||
|
||||
def list_extensions(self):
|
||||
"""List all verifier extensions."""
|
||||
@ -373,7 +372,7 @@ class VerifierManager(plugin.Plugin):
|
||||
extensions
|
||||
"""
|
||||
raise NotImplementedError(
|
||||
_LE("'%s' verifiers don't support extensions.") % self.get_name())
|
||||
"'%s' verifiers don't support extensions." % self.get_name())
|
||||
|
||||
@abc.abstractmethod
|
||||
def list_tests(self, pattern=""):
|
||||
|
@ -59,7 +59,7 @@ def check_output(*args, **kwargs):
|
||||
raise
|
||||
|
||||
if output and debug_output:
|
||||
LOG.debug("Subprocess output: '%s'", encodeutils.safe_decode(output))
|
||||
LOG.debug("Subprocess output: '%s'" % encodeutils.safe_decode(output))
|
||||
|
||||
return output
|
||||
|
||||
|
@ -13,7 +13,6 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from rally.common.i18n import _
|
||||
from rally.common.plugin import plugin
|
||||
from rally.task import sla
|
||||
|
||||
@ -48,5 +47,5 @@ class MaxDurationRange(sla.SLA):
|
||||
return self.success
|
||||
|
||||
def details(self):
|
||||
return (_("%s - Maximum allowed duration range: %.2f%% <= %.2f%%") %
|
||||
return ("%s - Maximum allowed duration range: %.2f%% <= %.2f%%" %
|
||||
(self.status(), self._max - self._min, self.criterion_value))
|
||||
|
@ -243,7 +243,7 @@ def _read_requirements():
|
||||
"""Read all rally requirements."""
|
||||
LOG.info("Reading rally requirements...")
|
||||
for file_name in RALLY_REQUIREMENTS_FILES:
|
||||
LOG.debug("Try to read '%s'.", file_name)
|
||||
LOG.debug("Try to read '%s'." % file_name)
|
||||
with open(file_name) as f:
|
||||
data = f.read()
|
||||
LOG.info("Parsing requirements from %s." % file_name)
|
||||
@ -263,7 +263,7 @@ def _sync():
|
||||
LOG.info("Obtaining global-requirements...")
|
||||
for i in range(0, len(GLOBAL_REQUIREMENTS_LOCATIONS)):
|
||||
url = GLOBAL_REQUIREMENTS_LOCATIONS[i] + GLOBAL_REQUIREMENTS_FILENAME
|
||||
LOG.debug("Try to obtain global-requirements from %s", url)
|
||||
LOG.debug("Try to obtain global-requirements from %s" % url)
|
||||
try:
|
||||
raw_gr = requests.get(url).text
|
||||
except requests.ConnectionError as e:
|
||||
@ -309,7 +309,7 @@ def format_requirements():
|
||||
def add_uppers():
|
||||
"""Obtains latest version of packages and put them to requirements."""
|
||||
for filename, requirements in _sync():
|
||||
LOG.info("Obtaining latest versions of packages for %s.", filename)
|
||||
LOG.info("Obtaining latest versions of packages for %s." % filename)
|
||||
for req in requirements:
|
||||
if isinstance(req, Requirement):
|
||||
if isinstance(req.version, dict) and not req.version["max"]:
|
||||
|
Loading…
Reference in New Issue
Block a user