Improve Rally Logging (part 2)

- Remove translations

  Nobody is using translations for Rally and I don't think that
  anybody is going to use it. Target auditory for Rally are
  developers/operators which usually know well english.
  For me this looks like waste of resources, performance
  degradation (cause we are calling _()), complexity
  (+1 thing that you need to know)

- Pass to log already formatted strings

  It's very bad because in case of wrong formatting, it
  doesn't fail instead just writes errors to the logs,
  as well information about trace is lost, so it's super
  hard to fix it

  Log wrapper doesn't allow to use LOG anymore for
  formatting strings

  All places are fixed

- Improve logging of exceptions

LOG.exception() already logs exception, which means it's bad idea to
pass str(e) to it. Instead we should provide clear description of what
happend. Improved few places to write warnings or exceptions in case
of different level of logs. In few places just use LOG.exception

- Part of log messages were improved and simplified

Depends-On: If23d874e8b73de12ba2b8c4e028a55543af6381b
Change-Id: Ibc1e1f4f554649d14b8fe4801557b83922ecefe3
This commit is contained in:
Boris Pavlovic 2017-09-25 14:15:08 -07:00
parent 07a24aeb69
commit 01289aa081
14 changed files with 252 additions and 266 deletions

View File

@ -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():

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -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,12 +258,12 @@ 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 "
print("At least one of the following arguments should be "
"provided: '--update-venv', '--version', '--system-wide', "
"'--no-system-wide'."))
"'--no-system-wide'.")
return 1
msg = _("Arguments '--%s' and '--%s' cannot be used simultaneously. "
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"))
@ -279,9 +278,9 @@ class VerifyCommands(object):
version=version,
update_venv=update_venv)
print(_("HINT: In some cases the verifier config file should be "
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."))
"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)

View File

@ -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"
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"))
"\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"):

View File

@ -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,22 +67,22 @@ 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"
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")
@ -91,138 +90,134 @@ class InvalidTaskConfig(InvalidTaskException):
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:"
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 "
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'"
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."

View File

@ -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(

View File

@ -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=""):

View File

@ -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

View File

@ -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))

View File

@ -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"]: