Fix i18n messages in novaclient, part I
This change make all the text visible by the user i18n. The messages changes are in prints, logs, exceptions, helps, etc Pep8 errors about "Multiple positional placeholders" also fixed Change-Id: I731afea790baddbc34d059b93a35e3d275fc1df8
This commit is contained in:
parent
eb0b6d167d
commit
6b070c82d4
@ -15,11 +15,12 @@
|
||||
# under the License.
|
||||
|
||||
import logging
|
||||
import pkg_resources
|
||||
|
||||
import pkg_resources
|
||||
import six
|
||||
|
||||
from novaclient import exceptions
|
||||
from novaclient.openstack.common.gettextutils import _
|
||||
from novaclient import utils
|
||||
|
||||
|
||||
@ -39,7 +40,7 @@ def discover_auth_systems():
|
||||
try:
|
||||
auth_plugin = ep.load()
|
||||
except (ImportError, pkg_resources.UnknownExtra, AttributeError) as e:
|
||||
logger.debug("ERROR: Cannot load auth plugin %s" % ep.name)
|
||||
logger.debug(_("ERROR: Cannot load auth plugin %s") % ep.name)
|
||||
logger.debug(e, exc_info=1)
|
||||
else:
|
||||
_discovered_plugins[ep.name] = auth_plugin
|
||||
|
@ -31,6 +31,7 @@ except ImportError:
|
||||
import simplejson as json
|
||||
|
||||
from novaclient import exceptions
|
||||
from novaclient.openstack.common.gettextutils import _
|
||||
from novaclient.openstack.common.py3kcompat import urlutils
|
||||
from novaclient import service_catalog
|
||||
from novaclient import utils
|
||||
@ -160,11 +161,10 @@ class HTTPClient(object):
|
||||
def http_log_resp(self, resp):
|
||||
if not self.http_log_debug:
|
||||
return
|
||||
self._logger.debug(
|
||||
"RESP: [%s] %s\nRESP BODY: %s\n",
|
||||
resp.status_code,
|
||||
resp.headers,
|
||||
resp.text)
|
||||
self._logger.debug(_("RESP: [%(status)s] %(headers)s\nRESP BODY: "
|
||||
"%(text)s\n"), {'status': resp.status_code,
|
||||
'headers': resp.headers,
|
||||
'text': resp.text})
|
||||
|
||||
def request(self, url, method, **kwargs):
|
||||
kwargs.setdefault('headers', kwargs.get('headers', {}))
|
||||
@ -288,13 +288,14 @@ class HTTPClient(object):
|
||||
self.management_url = management_url.rstrip('/')
|
||||
return None
|
||||
except exceptions.AmbiguousEndpoints:
|
||||
print("Found more than one valid endpoint. Use a more "
|
||||
"restrictive filter")
|
||||
print(_("Found more than one valid endpoint. Use a more "
|
||||
"restrictive filter"))
|
||||
raise
|
||||
except KeyError:
|
||||
raise exceptions.AuthorizationFailure()
|
||||
except exceptions.EndpointNotFound:
|
||||
print("Could not find any suitable endpoint. Correct region?")
|
||||
print(_("Could not find any suitable endpoint. Correct "
|
||||
"region?"))
|
||||
raise
|
||||
|
||||
elif resp.status_code == 305:
|
||||
@ -317,7 +318,7 @@ class HTTPClient(object):
|
||||
# GET ...:5001/v2.0/tokens/#####/endpoints
|
||||
url = '/'.join([url, 'tokens', '%s?belongsTo=%s'
|
||||
% (self.proxy_token, self.proxy_tenant_id)])
|
||||
self._logger.debug("Using Endpoint URL: %s" % url)
|
||||
self._logger.debug(_("Using Endpoint URL: %s") % url)
|
||||
resp, body = self._time_request(
|
||||
url, "GET", headers={'X-Auth-Token': self.auth_token})
|
||||
return self._extract_service_catalog(url, resp, body,
|
||||
@ -463,8 +464,9 @@ def get_client_class(version):
|
||||
try:
|
||||
client_path = version_map[str(version)]
|
||||
except (KeyError, ValueError):
|
||||
msg = "Invalid client version '%s'. must be one of: %s" % (
|
||||
(version, ', '.join(version_map.keys())))
|
||||
msg = _("Invalid client version '%(version)s'. must be one of: "
|
||||
"%(keys)s") % {'version': version,
|
||||
'keys': ''.join(version_map.keys())}
|
||||
raise exceptions.UnsupportedVersion(msg)
|
||||
|
||||
return utils.import_class(client_path)
|
||||
|
@ -102,7 +102,7 @@ def safe_decode(text, incoming=None, errors='strict'):
|
||||
:raises TypeError: If text is not an instance of str
|
||||
"""
|
||||
if not isinstance(text, six.string_types):
|
||||
raise TypeError("%s can't be decoded" % type(text))
|
||||
raise TypeError(_("%s can't be decoded") % type(text))
|
||||
|
||||
if isinstance(text, six.text_type):
|
||||
return text
|
||||
@ -145,7 +145,7 @@ def safe_encode(text, incoming=None,
|
||||
:raises TypeError: If text is not an instance of str
|
||||
"""
|
||||
if not isinstance(text, six.string_types):
|
||||
raise TypeError("%s can't be encoded" % type(text))
|
||||
raise TypeError(_("%s can't be encoded") % type(text))
|
||||
|
||||
if not incoming:
|
||||
incoming = (sys.stdin.encoding or
|
||||
|
@ -46,6 +46,7 @@ from novaclient import client
|
||||
from novaclient import exceptions as exc
|
||||
import novaclient.extension
|
||||
from novaclient.openstack.common import cliutils
|
||||
from novaclient.openstack.common.gettextutils import _
|
||||
from novaclient.openstack.common import strutils
|
||||
from novaclient import utils
|
||||
from novaclient.v1_1 import shell as shell_v1_1
|
||||
@ -70,10 +71,10 @@ def positive_non_zero_float(text):
|
||||
try:
|
||||
value = float(text)
|
||||
except ValueError:
|
||||
msg = "%s must be a float" % text
|
||||
msg = _("%s must be a float") % text
|
||||
raise argparse.ArgumentTypeError(msg)
|
||||
if value <= 0:
|
||||
msg = "%s must be greater than 0" % text
|
||||
msg = _("%s must be greater than 0") % text
|
||||
raise argparse.ArgumentTypeError(msg)
|
||||
return value
|
||||
|
||||
@ -137,7 +138,8 @@ class SecretsHelper(object):
|
||||
# Nothing changed....
|
||||
return
|
||||
if not all([management_url, auth_token, tenant_id]):
|
||||
raise ValueError("Unable to save empty management url/auth token")
|
||||
raise ValueError(_("Unable to save empty management url/auth "
|
||||
"token"))
|
||||
value = "|".join([str(auth_token),
|
||||
str(management_url),
|
||||
str(tenant_id)])
|
||||
@ -220,8 +222,8 @@ class NovaClientArgumentParser(argparse.ArgumentParser):
|
||||
#FIXME(lzyeval): if changes occur in argparse.ArgParser._check_value
|
||||
choose_from = ' (choose from'
|
||||
progparts = self.prog.partition(' ')
|
||||
self.exit(2, "error: %(errmsg)s\nTry '%(mainp)s help %(subp)s'"
|
||||
" for more information.\n" %
|
||||
self.exit(2, _("error: %(errmsg)s\nTry '%(mainp)s help %(subp)s'"
|
||||
" for more information.\n") %
|
||||
{'errmsg': message.split(choose_from)[0],
|
||||
'mainp': progparts[0],
|
||||
'subp': progparts[2]})
|
||||
@ -252,25 +254,25 @@ class OpenStackComputeShell(object):
|
||||
parser.add_argument('--debug',
|
||||
default=False,
|
||||
action='store_true',
|
||||
help="Print debugging output")
|
||||
help=_("Print debugging output"))
|
||||
|
||||
parser.add_argument('--os-cache',
|
||||
default=strutils.bool_from_string(
|
||||
utils.env('OS_CACHE', default=False), True),
|
||||
action='store_true',
|
||||
help="Use the auth token cache. Defaults to False if env[OS_CACHE]"
|
||||
" is not set.")
|
||||
help=_("Use the auth token cache. Defaults to False if "
|
||||
"env[OS_CACHE] is not set."))
|
||||
|
||||
parser.add_argument('--timings',
|
||||
default=False,
|
||||
action='store_true',
|
||||
help="Print call timing info")
|
||||
help=_("Print call timing info"))
|
||||
|
||||
parser.add_argument('--timeout',
|
||||
default=600,
|
||||
metavar='<seconds>',
|
||||
type=positive_non_zero_float,
|
||||
help="Set HTTP call timeout (in seconds)")
|
||||
help=_("Set HTTP call timeout (in seconds)"))
|
||||
|
||||
parser.add_argument('--os-auth-token',
|
||||
default=utils.env('OS_AUTH_TOKEN'),
|
||||
@ -279,40 +281,40 @@ class OpenStackComputeShell(object):
|
||||
parser.add_argument('--os-username',
|
||||
metavar='<auth-user-name>',
|
||||
default=utils.env('OS_USERNAME', 'NOVA_USERNAME'),
|
||||
help='Defaults to env[OS_USERNAME].')
|
||||
help=_('Defaults to env[OS_USERNAME].'))
|
||||
parser.add_argument('--os_username',
|
||||
help=argparse.SUPPRESS)
|
||||
|
||||
parser.add_argument('--os-password',
|
||||
metavar='<auth-password>',
|
||||
default=utils.env('OS_PASSWORD', 'NOVA_PASSWORD'),
|
||||
help='Defaults to env[OS_PASSWORD].')
|
||||
help=_('Defaults to env[OS_PASSWORD].'))
|
||||
parser.add_argument('--os_password',
|
||||
help=argparse.SUPPRESS)
|
||||
|
||||
parser.add_argument('--os-tenant-name',
|
||||
metavar='<auth-tenant-name>',
|
||||
default=utils.env('OS_TENANT_NAME', 'NOVA_PROJECT_ID'),
|
||||
help='Defaults to env[OS_TENANT_NAME].')
|
||||
help=_('Defaults to env[OS_TENANT_NAME].'))
|
||||
parser.add_argument('--os_tenant_name',
|
||||
help=argparse.SUPPRESS)
|
||||
|
||||
parser.add_argument('--os-tenant-id',
|
||||
metavar='<auth-tenant-id>',
|
||||
default=utils.env('OS_TENANT_ID'),
|
||||
help='Defaults to env[OS_TENANT_ID].')
|
||||
help=_('Defaults to env[OS_TENANT_ID].'))
|
||||
|
||||
parser.add_argument('--os-auth-url',
|
||||
metavar='<auth-url>',
|
||||
default=utils.env('OS_AUTH_URL', 'NOVA_URL'),
|
||||
help='Defaults to env[OS_AUTH_URL].')
|
||||
help=_('Defaults to env[OS_AUTH_URL].'))
|
||||
parser.add_argument('--os_auth_url',
|
||||
help=argparse.SUPPRESS)
|
||||
|
||||
parser.add_argument('--os-region-name',
|
||||
metavar='<region-name>',
|
||||
default=utils.env('OS_REGION_NAME', 'NOVA_REGION_NAME'),
|
||||
help='Defaults to env[OS_REGION_NAME].')
|
||||
help=_('Defaults to env[OS_REGION_NAME].'))
|
||||
parser.add_argument('--os_region_name',
|
||||
help=argparse.SUPPRESS)
|
||||
|
||||
@ -325,21 +327,21 @@ class OpenStackComputeShell(object):
|
||||
|
||||
parser.add_argument('--service-type',
|
||||
metavar='<service-type>',
|
||||
help='Defaults to compute for most actions')
|
||||
help=_('Defaults to compute for most actions'))
|
||||
parser.add_argument('--service_type',
|
||||
help=argparse.SUPPRESS)
|
||||
|
||||
parser.add_argument('--service-name',
|
||||
metavar='<service-name>',
|
||||
default=utils.env('NOVA_SERVICE_NAME'),
|
||||
help='Defaults to env[NOVA_SERVICE_NAME]')
|
||||
help=_('Defaults to env[NOVA_SERVICE_NAME]'))
|
||||
parser.add_argument('--service_name',
|
||||
help=argparse.SUPPRESS)
|
||||
|
||||
parser.add_argument('--volume-service-name',
|
||||
metavar='<volume-service-name>',
|
||||
default=utils.env('NOVA_VOLUME_SERVICE_NAME'),
|
||||
help='Defaults to env[NOVA_VOLUME_SERVICE_NAME]')
|
||||
help=_('Defaults to env[NOVA_VOLUME_SERVICE_NAME]'))
|
||||
parser.add_argument('--volume_service_name',
|
||||
help=argparse.SUPPRESS)
|
||||
|
||||
@ -347,7 +349,7 @@ class OpenStackComputeShell(object):
|
||||
metavar='<endpoint-type>',
|
||||
default=utils.env('NOVA_ENDPOINT_TYPE',
|
||||
default=DEFAULT_NOVA_ENDPOINT_TYPE),
|
||||
help='Defaults to env[NOVA_ENDPOINT_TYPE] or '
|
||||
help=_('Defaults to env[NOVA_ENDPOINT_TYPE] or ')
|
||||
+ DEFAULT_NOVA_ENDPOINT_TYPE + '.')
|
||||
# NOTE(dtroyer): We can't add --endpoint_type here due to argparse
|
||||
# thinking usage-list --end is ambiguous; but it
|
||||
@ -360,8 +362,8 @@ class OpenStackComputeShell(object):
|
||||
metavar='<compute-api-ver>',
|
||||
default=utils.env('OS_COMPUTE_API_VERSION',
|
||||
default=DEFAULT_OS_COMPUTE_API_VERSION),
|
||||
help='Accepts 1.1 or 3, '
|
||||
'defaults to env[OS_COMPUTE_API_VERSION].')
|
||||
help=_('Accepts 1.1 or 3, '
|
||||
'defaults to env[OS_COMPUTE_API_VERSION].'))
|
||||
parser.add_argument('--os_compute_api_version',
|
||||
help=argparse.SUPPRESS)
|
||||
|
||||
@ -375,10 +377,10 @@ class OpenStackComputeShell(object):
|
||||
parser.add_argument('--insecure',
|
||||
default=utils.env('NOVACLIENT_INSECURE', default=False),
|
||||
action='store_true',
|
||||
help="Explicitly allow novaclient to perform \"insecure\" "
|
||||
help=_("Explicitly allow novaclient to perform \"insecure\" "
|
||||
"SSL (https) requests. The server's certificate will "
|
||||
"not be verified against any certificate authorities. "
|
||||
"This option should be used with caution.")
|
||||
"This option should be used with caution."))
|
||||
|
||||
parser.add_argument('--bypass-url',
|
||||
metavar='<bypass-url>',
|
||||
@ -605,37 +607,37 @@ class OpenStackComputeShell(object):
|
||||
|
||||
if not auth_plugin or not auth_plugin.opts:
|
||||
if not os_username:
|
||||
raise exc.CommandError("You must provide a username "
|
||||
"via either --os-username or env[OS_USERNAME]")
|
||||
raise exc.CommandError(_("You must provide a username "
|
||||
"via either --os-username or env[OS_USERNAME]"))
|
||||
|
||||
if not os_tenant_name and not os_tenant_id:
|
||||
raise exc.CommandError("You must provide a tenant name "
|
||||
raise exc.CommandError(_("You must provide a tenant name "
|
||||
"or tenant id via --os-tenant-name, "
|
||||
"--os-tenant-id, env[OS_TENANT_NAME] "
|
||||
"or env[OS_TENANT_ID]")
|
||||
"or env[OS_TENANT_ID]"))
|
||||
|
||||
if not os_auth_url:
|
||||
if os_auth_system and os_auth_system != 'keystone':
|
||||
os_auth_url = auth_plugin.get_auth_url()
|
||||
|
||||
if not os_auth_url:
|
||||
raise exc.CommandError("You must provide an auth url "
|
||||
raise exc.CommandError(_("You must provide an auth url "
|
||||
"via either --os-auth-url or env[OS_AUTH_URL] "
|
||||
"or specify an auth_system which defines a "
|
||||
"default url with --os-auth-system "
|
||||
"or env[OS_AUTH_SYSTEM]")
|
||||
"or env[OS_AUTH_SYSTEM]"))
|
||||
|
||||
if (options.os_compute_api_version and
|
||||
options.os_compute_api_version != '1.0'):
|
||||
if not os_tenant_name and not os_tenant_id:
|
||||
raise exc.CommandError("You must provide a tenant name "
|
||||
raise exc.CommandError(_("You must provide a tenant name "
|
||||
"or tenant id via --os-tenant-name, "
|
||||
"--os-tenant-id, env[OS_TENANT_NAME] "
|
||||
"or env[OS_TENANT_ID]")
|
||||
"or env[OS_TENANT_ID]"))
|
||||
|
||||
if not os_auth_url:
|
||||
raise exc.CommandError("You must provide an auth url "
|
||||
"via either --os-auth-url or env[OS_AUTH_URL]")
|
||||
raise exc.CommandError(_("You must provide an auth url "
|
||||
"via either --os-auth-url or env[OS_AUTH_URL]"))
|
||||
|
||||
self.cs = client.Client(options.os_compute_api_version, os_username,
|
||||
os_password, os_tenant_name, tenant_id=os_tenant_id,
|
||||
@ -682,9 +684,9 @@ class OpenStackComputeShell(object):
|
||||
if not cliutils.isunauthenticated(args.func):
|
||||
self.cs.authenticate()
|
||||
except exc.Unauthorized:
|
||||
raise exc.CommandError("Invalid OpenStack Nova credentials.")
|
||||
raise exc.CommandError(_("Invalid OpenStack Nova credentials."))
|
||||
except exc.AuthorizationFailure:
|
||||
raise exc.CommandError("Unable to authorize user")
|
||||
raise exc.CommandError(_("Unable to authorize user"))
|
||||
|
||||
args.func(self.cs, args)
|
||||
|
||||
@ -734,7 +736,7 @@ class OpenStackComputeShell(object):
|
||||
if args.command in self.subcommands:
|
||||
self.subcommands[args.command].print_help()
|
||||
else:
|
||||
raise exc.CommandError("'%s' is not a valid subcommand" %
|
||||
raise exc.CommandError(_("'%s' is not a valid subcommand") %
|
||||
args.command)
|
||||
else:
|
||||
self.parser.print_help()
|
||||
|
@ -22,6 +22,7 @@ import six
|
||||
|
||||
from novaclient import exceptions
|
||||
from novaclient.openstack.common import cliutils
|
||||
from novaclient.openstack.common.gettextutils import _
|
||||
from novaclient.openstack.common import jsonutils
|
||||
from novaclient.openstack.common import strutils
|
||||
|
||||
@ -56,8 +57,8 @@ def get_resource_manager_extra_kwargs(f, args, allow_conflicts=False):
|
||||
|
||||
conflicting_keys = set(hook_kwargs.keys()) & set(extra_kwargs.keys())
|
||||
if conflicting_keys and not allow_conflicts:
|
||||
raise Exception("Hook '%(hook_name)s' is attempting to redefine"
|
||||
" attributes '%(conflicting_keys)s'" %
|
||||
raise Exception(_("Hook '%(hook_name)s' is attempting to redefine"
|
||||
" attributes '%(conflicting_keys)s'") %
|
||||
{'hook_name': hook_name,
|
||||
'conflicting_keys': conflicting_keys})
|
||||
|
||||
@ -234,13 +235,15 @@ def find_resource(manager, name_or_id, **find_args):
|
||||
kwargs.update(find_args)
|
||||
return manager.find(**kwargs)
|
||||
except exceptions.NotFound:
|
||||
msg = "No %s with a name or ID of '%s' exists." % \
|
||||
(manager.resource_class.__name__.lower(), name_or_id)
|
||||
msg = _("No %(class)s with a name or ID of '%(name)s' exists.") % \
|
||||
{'class': manager.resource_class.__name__.lower(),
|
||||
'name': name_or_id}
|
||||
raise exceptions.CommandError(msg)
|
||||
except exceptions.NoUniqueMatch:
|
||||
msg = ("Multiple %s matches found for '%s', use an ID to be more"
|
||||
" specific." % (manager.resource_class.__name__.lower(),
|
||||
name_or_id))
|
||||
msg = (_("Multiple %(class)s matches found for '%(name)s', use an ID "
|
||||
"to be more specific.") %
|
||||
{'class': manager.resource_class.__name__.lower(),
|
||||
'name': name_or_id})
|
||||
raise exceptions.CommandError(msg)
|
||||
|
||||
|
||||
|
@ -17,6 +17,7 @@
|
||||
Baremetal interface (v2 extension).
|
||||
"""
|
||||
from novaclient import base
|
||||
from novaclient.openstack.common.gettextutils import _
|
||||
from novaclient import utils
|
||||
|
||||
|
||||
@ -151,35 +152,36 @@ class BareMetalNodeManager(base.ManagerWithFind):
|
||||
|
||||
@utils.arg('service_host',
|
||||
metavar='<service_host>',
|
||||
help='Name of nova compute host which will control this baremetal node')
|
||||
help=_('Name of nova compute host which will control this baremetal '
|
||||
'node'))
|
||||
@utils.arg('cpus',
|
||||
metavar='<cpus>',
|
||||
type=int,
|
||||
help='Number of CPUs in the node')
|
||||
help=_('Number of CPUs in the node'))
|
||||
@utils.arg('memory_mb',
|
||||
metavar='<memory_mb>',
|
||||
type=int,
|
||||
help='Megabytes of RAM in the node')
|
||||
help=_('Megabytes of RAM in the node'))
|
||||
@utils.arg('local_gb',
|
||||
metavar='<local_gb>',
|
||||
type=int,
|
||||
help='Gigabytes of local storage in the node')
|
||||
help=_('Gigabytes of local storage in the node'))
|
||||
@utils.arg('prov_mac_address',
|
||||
metavar='<prov_mac_address>',
|
||||
help='MAC address to provision the node')
|
||||
help=_('MAC address to provision the node'))
|
||||
@utils.arg('--pm_address', default=None,
|
||||
metavar='<pm_address>',
|
||||
help='Power management IP for the node')
|
||||
help=_('Power management IP for the node'))
|
||||
@utils.arg('--pm_user', default=None,
|
||||
metavar='<pm_user>',
|
||||
help='Username for the node\'s power management')
|
||||
help=_('Username for the node\'s power management'))
|
||||
@utils.arg('--pm_password', default=None,
|
||||
metavar='<pm_password>',
|
||||
help='Password for the node\'s power management')
|
||||
help=_('Password for the node\'s power management'))
|
||||
@utils.arg('--terminal_port', default=None,
|
||||
metavar='<terminal_port>',
|
||||
type=int,
|
||||
help='ShellInABox port?')
|
||||
help=_('ShellInABox port?'))
|
||||
def do_baremetal_node_create(cs, args):
|
||||
"""Create a baremetal node."""
|
||||
node = cs.baremetal.create(args.service_host, args.cpus,
|
||||
@ -270,18 +272,18 @@ def do_baremetal_node_show(cs, args):
|
||||
|
||||
@utils.arg('node',
|
||||
metavar='<node>',
|
||||
help="ID of node")
|
||||
help=_("ID of node"))
|
||||
@utils.arg('address',
|
||||
metavar='<address>',
|
||||
help="MAC address of interface")
|
||||
help=_("MAC address of interface"))
|
||||
@utils.arg('--datapath_id',
|
||||
default=0,
|
||||
metavar='<datapath_id>',
|
||||
help="OpenFlow Datapath ID of interface")
|
||||
help=_("OpenFlow Datapath ID of interface"))
|
||||
@utils.arg('--port_no',
|
||||
default=0,
|
||||
metavar='<port_no>',
|
||||
help="OpenFlow port number of interface")
|
||||
help=_("OpenFlow port number of interface"))
|
||||
def do_baremetal_interface_add(cs, args):
|
||||
"""Add a network interface to a baremetal node."""
|
||||
bmif = cs.baremetal.add_interface(args.node, args.address,
|
||||
@ -289,8 +291,8 @@ def do_baremetal_interface_add(cs, args):
|
||||
_print_baremetal_resource(bmif)
|
||||
|
||||
|
||||
@utils.arg('node', metavar='<node>', help="ID of node")
|
||||
@utils.arg('address', metavar='<address>', help="MAC address of interface")
|
||||
@utils.arg('node', metavar='<node>', help=_("ID of node"))
|
||||
@utils.arg('address', metavar='<address>', help=_("MAC address of interface"))
|
||||
def do_baremetal_interface_remove(cs, args):
|
||||
"""Remove a network interface from a baremetal node."""
|
||||
cs.baremetal.remove_interface(args.node, args.address)
|
||||
|
@ -14,6 +14,7 @@
|
||||
# under the License.
|
||||
|
||||
from novaclient import base
|
||||
from novaclient.openstack.common.gettextutils import _
|
||||
from novaclient import utils
|
||||
|
||||
|
||||
@ -47,7 +48,7 @@ class CellsManager(base.Manager):
|
||||
|
||||
@utils.arg('cell',
|
||||
metavar='<cell-name>',
|
||||
help='Name of the cell.')
|
||||
help=_('Name of the cell.'))
|
||||
def do_cell_show(cs, args):
|
||||
"""Show details of a given cell."""
|
||||
cell = cs.cells.get(args.cell)
|
||||
@ -56,14 +57,15 @@ def do_cell_show(cs, args):
|
||||
|
||||
@utils.arg('--cell',
|
||||
metavar='<cell-name>',
|
||||
help="Name of the cell to get the capacities.",
|
||||
help=_("Name of the cell to get the capacities."),
|
||||
default=None)
|
||||
def do_cell_capacities(cs, args):
|
||||
"""Get cell capacities for all cells or a given cell."""
|
||||
cell = cs.cells.capacities(args.cell)
|
||||
print("Ram Available: %s MB" % cell.capacities['ram_free']['total_mb'])
|
||||
print(_("Ram Available: %s MB") % cell.capacities['ram_free']['total_mb'])
|
||||
utils.print_dict(cell.capacities['ram_free']['units_by_mb'],
|
||||
dict_property='Ram(MB)', dict_value="Units")
|
||||
print("\nDisk Available: %s MB" % cell.capacities['disk_free']['total_mb'])
|
||||
print(_("\nDisk Available: %s MB") %
|
||||
cell.capacities['disk_free']['total_mb'])
|
||||
utils.print_dict(cell.capacities['disk_free']['units_by_mb'],
|
||||
dict_property='Disk(MB)', dict_value="Units")
|
||||
|
@ -14,6 +14,7 @@
|
||||
# under the License.
|
||||
|
||||
from novaclient import base
|
||||
from novaclient.openstack.common.gettextutils import _
|
||||
from novaclient import utils
|
||||
|
||||
|
||||
@ -29,7 +30,7 @@ def _server_evacuate(cs, server, args):
|
||||
args.on_shared_storage)
|
||||
except Exception as e:
|
||||
success = False
|
||||
error_message = "Error while evacuating instance: %s" % e
|
||||
error_message = _("Error while evacuating instance: %s") % e
|
||||
return EvacuateHostResponse(base.Manager,
|
||||
{"server_uuid": server['uuid'],
|
||||
"evacuate_accepted": success,
|
||||
@ -40,12 +41,13 @@ def _server_evacuate(cs, server, args):
|
||||
@utils.arg('--target_host',
|
||||
metavar='<target_host>',
|
||||
default=None,
|
||||
help='Name of target host.')
|
||||
help=_('Name of target host.'))
|
||||
@utils.arg('--on-shared-storage',
|
||||
dest='on_shared_storage',
|
||||
action="store_true",
|
||||
default=False,
|
||||
help='Specifies whether all instances files are on shared storage')
|
||||
help=_('Specifies whether all instances files are on shared '
|
||||
' storage'))
|
||||
def do_host_evacuate(cs, args):
|
||||
"""Evacuate all instances from failed host to specified one."""
|
||||
hypervisors = cs.hypervisors.search(args.host, servers=True)
|
||||
|
@ -14,6 +14,7 @@
|
||||
# under the License.
|
||||
|
||||
from novaclient import base
|
||||
from novaclient.openstack.common.gettextutils import _
|
||||
from novaclient import utils
|
||||
|
||||
|
||||
@ -28,7 +29,7 @@ def _server_migrate(cs, server):
|
||||
cs.servers.migrate(server['uuid'])
|
||||
except Exception as e:
|
||||
success = False
|
||||
error_message = "Error while migrating instance: %s" % e
|
||||
error_message = _("Error while migrating instance: %s") % e
|
||||
return HostServersMigrateResponse(base.Manager,
|
||||
{"server_uuid": server['uuid'],
|
||||
"migration_accepted": success,
|
||||
|
@ -16,6 +16,7 @@
|
||||
import pprint
|
||||
|
||||
from novaclient import base
|
||||
from novaclient.openstack.common.gettextutils import _
|
||||
from novaclient import utils
|
||||
|
||||
|
||||
@ -41,10 +42,10 @@ class InstanceActionManager(base.ManagerWithFind):
|
||||
|
||||
@utils.arg('server',
|
||||
metavar='<server>',
|
||||
help='Name or UUID of the server to show an action for.')
|
||||
help=_('Name or UUID of the server to show an action for.'))
|
||||
@utils.arg('request_id',
|
||||
metavar='<request_id>',
|
||||
help='Request ID of the action to get.')
|
||||
help=_('Request ID of the action to get.'))
|
||||
def do_instance_action(cs, args):
|
||||
"""Show an action."""
|
||||
server = utils.find_resource(cs.servers, args.server)
|
||||
@ -57,7 +58,7 @@ def do_instance_action(cs, args):
|
||||
|
||||
@utils.arg('server',
|
||||
metavar='<server>',
|
||||
help='Name or UUID of the server to list actions for.')
|
||||
help=_('Name or UUID of the server to list actions for.'))
|
||||
def do_instance_action_list(cs, args):
|
||||
"""List actions on a server."""
|
||||
server = utils.find_resource(cs.servers, args.server)
|
||||
|
@ -13,23 +13,25 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from novaclient.openstack.common.gettextutils import _
|
||||
from novaclient import utils
|
||||
from novaclient.v1_1 import shell
|
||||
|
||||
|
||||
@utils.arg('host',
|
||||
metavar='<host>',
|
||||
help='Name of host.')
|
||||
help=_('Name of host.'))
|
||||
@utils.arg('action',
|
||||
metavar='<action>',
|
||||
choices=['set', 'delete'],
|
||||
help="Actions: 'set' or 'delete'")
|
||||
help=_("Actions: 'set' or 'delete'"))
|
||||
@utils.arg('metadata',
|
||||
metavar='<key=value>',
|
||||
nargs='+',
|
||||
action='append',
|
||||
default=[],
|
||||
help='Metadata to set or delete (only key is necessary on delete)')
|
||||
help=_('Metadata to set or delete (only key is necessary on '
|
||||
'delete)'))
|
||||
def do_host_meta(cs, args):
|
||||
"""Set or Delete metadata on all instances of a host."""
|
||||
hypervisors = cs.hypervisors.search(args.host, servers=True)
|
||||
|
@ -15,6 +15,7 @@ migration interface
|
||||
"""
|
||||
|
||||
from novaclient import base
|
||||
from novaclient.openstack.common.gettextutils import _
|
||||
from novaclient.openstack.common.py3kcompat import urlutils
|
||||
from novaclient import utils
|
||||
|
||||
@ -54,15 +55,15 @@ class MigrationManager(base.ManagerWithFind):
|
||||
@utils.arg('--host',
|
||||
dest='host',
|
||||
metavar='<host>',
|
||||
help='Fetch migrations for the given host.')
|
||||
help=_('Fetch migrations for the given host.'))
|
||||
@utils.arg('--status',
|
||||
dest='status',
|
||||
metavar='<status>',
|
||||
help='Fetch migrations for the given status.')
|
||||
help=_('Fetch migrations for the given status.'))
|
||||
@utils.arg('--cell_name',
|
||||
dest='cell_name',
|
||||
metavar='<cell_name>',
|
||||
help='Fetch migrations for the given cell_name.')
|
||||
help=_('Fetch migrations for the given cell_name.'))
|
||||
def do_migration_list(cs, args):
|
||||
"""Print a list of migrations."""
|
||||
_print_migrations(cs.migrations.list(args.host, args.status,
|
||||
|
@ -13,6 +13,7 @@
|
||||
# limitations under the License.
|
||||
|
||||
from novaclient import base
|
||||
from novaclient.openstack.common.gettextutils import _
|
||||
from novaclient import utils
|
||||
|
||||
|
||||
@ -57,10 +58,10 @@ def do_net_list(cs, args):
|
||||
|
||||
|
||||
@utils.arg('label', metavar='<network_label>',
|
||||
help='Network label (ex. my_new_network)')
|
||||
help=_('Network label (ex. my_new_network)'))
|
||||
@utils.arg('cidr', metavar='<cidr>',
|
||||
help='IP block to allocate from (ex. 172.16.0.0/24 or '
|
||||
'2001:DB8::/64)')
|
||||
help=_('IP block to allocate from (ex. 172.16.0.0/24 or '
|
||||
'2001:DB8::/64)'))
|
||||
def do_net_create(cs, args):
|
||||
"""
|
||||
Create a network
|
||||
|
@ -16,6 +16,7 @@
|
||||
"""Flavor access interface."""
|
||||
|
||||
from novaclient import base
|
||||
from novaclient.openstack.common.gettextutils import _
|
||||
|
||||
|
||||
class FlavorAccess(base.Resource):
|
||||
@ -35,7 +36,7 @@ class FlavorAccessManager(base.ManagerWithFind):
|
||||
elif kwargs.get('tenant', None):
|
||||
return self._list_by_tenant(kwargs['tenant'])
|
||||
else:
|
||||
raise NotImplementedError('Unknown list options.')
|
||||
raise NotImplementedError(_('Unknown list options.'))
|
||||
|
||||
def _list_by_flavor(self, flavor):
|
||||
return self._list('/flavors/%s/os-flavor-access' % base.getid(flavor),
|
||||
@ -45,7 +46,7 @@ class FlavorAccessManager(base.ManagerWithFind):
|
||||
"""Print flavor list shared with the given tenant."""
|
||||
# TODO(uni): need to figure out a proper URI for list_by_tenant
|
||||
# since current API already provided current tenant_id information
|
||||
raise NotImplementedError('Sorry, query by tenant not supported.')
|
||||
raise NotImplementedError(_('Sorry, query by tenant not supported.'))
|
||||
|
||||
def add_tenant_access(self, flavor, tenant):
|
||||
"""Add a tenant to the given flavor access list."""
|
||||
|
@ -17,6 +17,7 @@ Flavor interface.
|
||||
"""
|
||||
from novaclient import base
|
||||
from novaclient import exceptions
|
||||
from novaclient.openstack.common.gettextutils import _
|
||||
from novaclient.openstack.common.py3kcompat import urlutils
|
||||
from novaclient.openstack.common import strutils
|
||||
|
||||
@ -168,15 +169,15 @@ class FlavorManager(base.ManagerWithFind):
|
||||
try:
|
||||
ram = int(ram)
|
||||
except (TypeError, ValueError):
|
||||
raise exceptions.CommandError("Ram must be an integer.")
|
||||
raise exceptions.CommandError(_("Ram must be an integer."))
|
||||
try:
|
||||
vcpus = int(vcpus)
|
||||
except (TypeError, ValueError):
|
||||
raise exceptions.CommandError("VCPUs must be an integer.")
|
||||
raise exceptions.CommandError(_("VCPUs must be an integer."))
|
||||
try:
|
||||
disk = int(disk)
|
||||
except (TypeError, ValueError):
|
||||
raise exceptions.CommandError("Disk must be an integer.")
|
||||
raise exceptions.CommandError(_("Disk must be an integer."))
|
||||
|
||||
if flavorid == "auto":
|
||||
flavorid = None
|
||||
@ -184,20 +185,20 @@ class FlavorManager(base.ManagerWithFind):
|
||||
try:
|
||||
swap = int(swap)
|
||||
except (TypeError, ValueError):
|
||||
raise exceptions.CommandError("Swap must be an integer.")
|
||||
raise exceptions.CommandError(_("Swap must be an integer."))
|
||||
try:
|
||||
ephemeral = int(ephemeral)
|
||||
except (TypeError, ValueError):
|
||||
raise exceptions.CommandError("Ephemeral must be an integer.")
|
||||
raise exceptions.CommandError(_("Ephemeral must be an integer."))
|
||||
try:
|
||||
rxtx_factor = float(rxtx_factor)
|
||||
except (TypeError, ValueError):
|
||||
raise exceptions.CommandError("rxtx_factor must be a float.")
|
||||
raise exceptions.CommandError(_("rxtx_factor must be a float."))
|
||||
|
||||
try:
|
||||
is_public = strutils.bool_from_string(is_public, True)
|
||||
except Exception:
|
||||
raise exceptions.CommandError("is_public must be a boolean.")
|
||||
raise exceptions.CommandError(_("is_public must be a boolean."))
|
||||
|
||||
body = self._build_body(name, ram, vcpus, disk, flavorid, swap,
|
||||
ephemeral, rxtx_factor, is_public)
|
||||
|
@ -19,6 +19,7 @@ Network interface.
|
||||
|
||||
from novaclient import base
|
||||
from novaclient import exceptions
|
||||
from novaclient.openstack.common.gettextutils import _
|
||||
|
||||
|
||||
class Network(base.Resource):
|
||||
@ -110,7 +111,7 @@ class NetworkManager(base.ManagerWithFind):
|
||||
body = {"disassociate_host": None}
|
||||
else:
|
||||
raise exceptions.CommandError(
|
||||
"Must disassociate either host or project or both")
|
||||
_("Must disassociate either host or project or both"))
|
||||
|
||||
self.api.client.post("/os-networks/%s/action" %
|
||||
base.getid(network), body=body)
|
||||
|
@ -19,6 +19,7 @@ Security group rules interface (1.1 extension).
|
||||
|
||||
from novaclient import base
|
||||
from novaclient import exceptions
|
||||
from novaclient.openstack.common.gettextutils import _
|
||||
|
||||
|
||||
class SecurityGroupRule(base.Resource):
|
||||
@ -48,14 +49,14 @@ class SecurityGroupRuleManager(base.Manager):
|
||||
try:
|
||||
from_port = int(from_port)
|
||||
except (TypeError, ValueError):
|
||||
raise exceptions.CommandError("From port must be an integer.")
|
||||
raise exceptions.CommandError(_("From port must be an integer."))
|
||||
try:
|
||||
to_port = int(to_port)
|
||||
except (TypeError, ValueError):
|
||||
raise exceptions.CommandError("To port must be an integer.")
|
||||
raise exceptions.CommandError(_("To port must be an integer."))
|
||||
if ip_protocol.upper() not in ['TCP', 'UDP', 'ICMP']:
|
||||
raise exceptions.CommandError("Ip protocol must be 'tcp', 'udp', "
|
||||
"or 'icmp'.")
|
||||
raise exceptions.CommandError(_("Ip protocol must be 'tcp', 'udp'"
|
||||
", or 'icmp'."))
|
||||
|
||||
body = {"security_group_rule": {
|
||||
"ip_protocol": ip_protocol,
|
||||
|
Loading…
Reference in New Issue
Block a user