summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/api/utils.py4
-rw-r--r--openstackclient/common/availability_zone.py191
-rw-r--r--openstackclient/common/command.py5
-rw-r--r--openstackclient/common/configuration.py10
-rw-r--r--openstackclient/common/extension.py10
-rw-r--r--openstackclient/common/limits.py9
-rw-r--r--openstackclient/common/logs.py46
-rw-r--r--openstackclient/common/module.py14
-rw-r--r--openstackclient/common/quota.py24
-rw-r--r--openstackclient/common/timing.py10
-rw-r--r--openstackclient/common/utils.py45
-rw-r--r--openstackclient/compute/v2/agent.py24
-rw-r--r--openstackclient/compute/v2/aggregate.py43
-rw-r--r--openstackclient/compute/v2/availability_zone.py102
-rw-r--r--openstackclient/compute/v2/console.py13
-rw-r--r--openstackclient/compute/v2/fixedip.py11
-rw-r--r--openstackclient/compute/v2/flavor.py6
-rw-r--r--openstackclient/compute/v2/floatingip.py63
-rw-r--r--openstackclient/compute/v2/floatingippool.py10
-rw-r--r--openstackclient/compute/v2/host.py15
-rw-r--r--openstackclient/compute/v2/hypervisor.py15
-rw-r--r--openstackclient/compute/v2/hypervisor_stats.py8
-rw-r--r--openstackclient/compute/v2/keypair.py24
-rw-r--r--openstackclient/compute/v2/security_group.py68
-rw-r--r--openstackclient/compute/v2/server.py60
-rw-r--r--openstackclient/compute/v2/service.py17
-rw-r--r--openstackclient/compute/v2/usage.py15
-rw-r--r--openstackclient/i18n.py2
-rw-r--r--openstackclient/identity/v2_0/catalog.py15
-rw-r--r--openstackclient/identity/v2_0/ec2creds.py24
-rw-r--r--openstackclient/identity/v2_0/endpoint.py24
-rw-r--r--openstackclient/identity/v2_0/project.py29
-rw-r--r--openstackclient/identity/v2_0/role.py36
-rw-r--r--openstackclient/identity/v2_0/service.py24
-rw-r--r--openstackclient/identity/v2_0/token.py14
-rw-r--r--openstackclient/identity/v2_0/user.py26
-rw-r--r--openstackclient/identity/v3/catalog.py15
-rw-r--r--openstackclient/identity/v3/consumer.py27
-rw-r--r--openstackclient/identity/v3/credential.py27
-rw-r--r--openstackclient/identity/v3/domain.py26
-rw-r--r--openstackclient/identity/v3/ec2creds.py24
-rw-r--r--openstackclient/identity/v3/endpoint.py27
-rw-r--r--openstackclient/identity/v3/federation_protocol.py24
-rw-r--r--openstackclient/identity/v3/group.py35
-rw-r--r--openstackclient/identity/v3/identity_provider.py27
-rw-r--r--openstackclient/identity/v3/mapping.py25
-rw-r--r--openstackclient/identity/v3/policy.py27
-rw-r--r--openstackclient/identity/v3/project.py26
-rw-r--r--openstackclient/identity/v3/region.py27
-rw-r--r--openstackclient/identity/v3/role.py32
-rw-r--r--openstackclient/identity/v3/role_assignment.py11
-rw-r--r--openstackclient/identity/v3/service.py27
-rw-r--r--openstackclient/identity/v3/service_provider.py27
-rw-r--r--openstackclient/identity/v3/token.py44
-rw-r--r--openstackclient/identity/v3/trust.py24
-rw-r--r--openstackclient/identity/v3/unscoped_saml.py15
-rw-r--r--openstackclient/identity/v3/user.py29
-rw-r--r--openstackclient/image/v1/image.py34
-rw-r--r--openstackclient/image/v2/image.py72
-rw-r--r--openstackclient/locale/de/LC_MESSAGES/openstackclient.po600
-rw-r--r--openstackclient/locale/openstackclient.pot829
-rw-r--r--openstackclient/locale/zh_TW/LC_MESSAGES/openstackclient.po495
-rw-r--r--openstackclient/network/common.py164
-rw-r--r--openstackclient/network/v2/floating_ip.py66
-rw-r--r--openstackclient/network/v2/network.py133
-rw-r--r--openstackclient/network/v2/port.py61
-rw-r--r--openstackclient/network/v2/router.py46
-rw-r--r--openstackclient/network/v2/security_group.py40
-rw-r--r--openstackclient/network/v2/subnet.py63
-rw-r--r--openstackclient/object/v1/account.py16
-rw-r--r--openstackclient/object/v1/container.py48
-rw-r--r--openstackclient/object/v1/object.py34
-rw-r--r--openstackclient/shell.py13
-rw-r--r--openstackclient/tests/common/test_availability_zone.py267
-rw-r--r--openstackclient/tests/common/test_extension.py12
-rw-r--r--openstackclient/tests/common/test_module.py12
-rw-r--r--openstackclient/tests/common/test_quota.py25
-rw-r--r--openstackclient/tests/common/test_timing.py8
-rw-r--r--openstackclient/tests/common/test_utils.py41
-rw-r--r--openstackclient/tests/compute/v2/fakes.py236
-rw-r--r--openstackclient/tests/compute/v2/test_flavor.py20
-rw-r--r--openstackclient/tests/compute/v2/test_hypervisor.py220
-rw-r--r--openstackclient/tests/compute/v2/test_security_group.py23
-rw-r--r--openstackclient/tests/compute/v2/test_security_group_rule.py41
-rw-r--r--openstackclient/tests/compute/v2/test_server.py58
-rw-r--r--openstackclient/tests/compute/v2/test_service.py5
-rw-r--r--openstackclient/tests/identity/v2_0/test_catalog.py12
-rw-r--r--openstackclient/tests/identity/v2_0/test_endpoint.py17
-rw-r--r--openstackclient/tests/identity/v2_0/test_project.py40
-rw-r--r--openstackclient/tests/identity/v2_0/test_role.py34
-rw-r--r--openstackclient/tests/identity/v2_0/test_service.py29
-rw-r--r--openstackclient/tests/identity/v2_0/test_token.py4
-rw-r--r--openstackclient/tests/identity/v2_0/test_user.py60
-rw-r--r--openstackclient/tests/identity/v3/fakes.py2
-rw-r--r--openstackclient/tests/identity/v3/test_catalog.py8
-rw-r--r--openstackclient/tests/identity/v3/test_consumer.py4
-rw-r--r--openstackclient/tests/identity/v3/test_domain.py24
-rw-r--r--openstackclient/tests/identity/v3/test_endpoint.py36
-rw-r--r--openstackclient/tests/identity/v3/test_group.py16
-rw-r--r--openstackclient/tests/identity/v3/test_identity_provider.py4
-rw-r--r--openstackclient/tests/identity/v3/test_project.py40
-rw-r--r--openstackclient/tests/identity/v3/test_region.py24
-rw-r--r--openstackclient/tests/identity/v3/test_role.py42
-rw-r--r--openstackclient/tests/identity/v3/test_role_assignment.py28
-rw-r--r--openstackclient/tests/identity/v3/test_service.py28
-rw-r--r--openstackclient/tests/identity/v3/test_service_provider.py4
-rw-r--r--openstackclient/tests/identity/v3/test_token.py29
-rw-r--r--openstackclient/tests/identity/v3/test_trust.py12
-rw-r--r--openstackclient/tests/identity/v3/test_unscoped_saml.py8
-rw-r--r--openstackclient/tests/identity/v3/test_user.py69
-rw-r--r--openstackclient/tests/image/v1/test_image.py113
-rw-r--r--openstackclient/tests/image/v2/test_image.py234
-rw-r--r--openstackclient/tests/network/test_common.py167
-rw-r--r--openstackclient/tests/network/v2/fakes.py339
-rw-r--r--openstackclient/tests/network/v2/test_floating_ip.py181
-rw-r--r--openstackclient/tests/network/v2/test_network.py126
-rw-r--r--openstackclient/tests/network/v2/test_port.py87
-rw-r--r--openstackclient/tests/network/v2/test_router.py59
-rw-r--r--openstackclient/tests/network/v2/test_security_group.py99
-rw-r--r--openstackclient/tests/network/v2/test_subnet.py108
-rw-r--r--openstackclient/tests/object/v1/test_container.py136
-rw-r--r--openstackclient/tests/object/v1/test_container_all.py32
-rw-r--r--openstackclient/tests/object/v1/test_object.py89
-rw-r--r--openstackclient/tests/object/v1/test_object_all.py16
-rw-r--r--openstackclient/tests/volume/v1/test_qos_specs.py46
-rw-r--r--openstackclient/tests/volume/v1/test_volume.py334
-rw-r--r--openstackclient/tests/volume/v2/fakes.py59
-rw-r--r--openstackclient/tests/volume/v2/test_backup.py41
-rw-r--r--openstackclient/tests/volume/v2/test_qos_specs.py45
-rw-r--r--openstackclient/tests/volume/v2/test_snapshot.py30
-rw-r--r--openstackclient/tests/volume/v2/test_type.py55
-rw-r--r--openstackclient/tests/volume/v2/test_volume.py529
-rw-r--r--openstackclient/volume/v1/backup.py27
-rw-r--r--openstackclient/volume/v1/qos_specs.py36
-rw-r--r--openstackclient/volume/v1/snapshot.py30
-rw-r--r--openstackclient/volume/v1/volume.py30
-rw-r--r--openstackclient/volume/v1/volume_type.py30
-rw-r--r--openstackclient/volume/v2/backup.py28
-rw-r--r--openstackclient/volume/v2/qos_specs.py36
-rw-r--r--openstackclient/volume/v2/snapshot.py29
-rw-r--r--openstackclient/volume/v2/volume.py30
-rw-r--r--openstackclient/volume/v2/volume_type.py30
142 files changed, 6205 insertions, 2884 deletions
diff --git a/openstackclient/api/utils.py b/openstackclient/api/utils.py
index b7ff7f23..fa759cd3 100644
--- a/openstackclient/api/utils.py
+++ b/openstackclient/api/utils.py
@@ -27,11 +27,11 @@ def simple_filter(
be changed if any filtering occurs.
:param string attr:
The name of the attribute to filter. If attr does not exist no
- match will succeed and no rows will be retrurned. If attr is
+ match will succeed and no rows will be returned. If attr is
None no filtering will be performed and all rows will be returned.
:param sring value:
The value to filter. None is considered to be a 'no filter' value.
- '' matches agains a Python empty string.
+ '' matches against a Python empty string.
:param string property_field:
The name of the data field containing a property dict to filter.
If property_field is None, attr is a field name. If property_field
diff --git a/openstackclient/common/availability_zone.py b/openstackclient/common/availability_zone.py
new file mode 100644
index 00000000..a941418b
--- /dev/null
+++ b/openstackclient/common/availability_zone.py
@@ -0,0 +1,191 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+"""Availability Zone action implementations"""
+
+import copy
+
+from novaclient import exceptions as nova_exceptions
+import six
+
+from openstackclient.common import command
+from openstackclient.common import utils
+from openstackclient.i18n import _ # noqa
+
+
+def _xform_common_availability_zone(az, zone_info):
+ if hasattr(az, 'zoneState'):
+ zone_info['zone_status'] = ('available' if az.zoneState['available']
+ else 'not available')
+ if hasattr(az, 'zoneName'):
+ zone_info['zone_name'] = az.zoneName
+
+ zone_info['zone_resource'] = ''
+
+
+def _xform_compute_availability_zone(az, include_extra):
+ result = []
+ zone_info = {}
+ _xform_common_availability_zone(az, zone_info)
+
+ if not include_extra:
+ result.append(zone_info)
+ return result
+
+ if hasattr(az, 'hosts') and az.hosts:
+ for host, services in six.iteritems(az.hosts):
+ host_info = copy.deepcopy(zone_info)
+ host_info['host_name'] = host
+
+ for svc, state in six.iteritems(services):
+ info = copy.deepcopy(host_info)
+ info['service_name'] = svc
+ info['service_status'] = '%s %s %s' % (
+ 'enabled' if state['active'] else 'disabled',
+ ':-)' if state['available'] else 'XXX',
+ state['updated_at'])
+ result.append(info)
+ else:
+ zone_info['host_name'] = ''
+ zone_info['service_name'] = ''
+ zone_info['service_status'] = ''
+ result.append(zone_info)
+ return result
+
+
+def _xform_volume_availability_zone(az):
+ result = []
+ zone_info = {}
+ _xform_common_availability_zone(az, zone_info)
+ result.append(zone_info)
+ return result
+
+
+def _xform_network_availability_zone(az):
+ result = []
+ zone_info = {}
+ zone_info['zone_name'] = getattr(az, 'name', '')
+ zone_info['zone_status'] = getattr(az, 'state', '')
+ if 'unavailable' == zone_info['zone_status']:
+ zone_info['zone_status'] = 'not available'
+ zone_info['zone_resource'] = getattr(az, 'resource', '')
+ result.append(zone_info)
+ return result
+
+
+class ListAvailabilityZone(command.Lister):
+ """List availability zones and their status"""
+
+ def get_parser(self, prog_name):
+ parser = super(ListAvailabilityZone, self).get_parser(prog_name)
+ parser.add_argument(
+ '--compute',
+ action='store_true',
+ default=False,
+ help='List compute availability zones')
+ parser.add_argument(
+ '--network',
+ action='store_true',
+ default=False,
+ help='List network availability zones')
+ parser.add_argument(
+ '--volume',
+ action='store_true',
+ default=False,
+ help='List volume availability zones')
+ parser.add_argument(
+ '--long',
+ action='store_true',
+ default=False,
+ help=_('List additional fields in output'),
+ )
+ return parser
+
+ def _get_compute_availability_zones(self, parsed_args):
+ compute_client = self.app.client_manager.compute
+ try:
+ data = compute_client.availability_zones.list()
+ except nova_exceptions.Forbidden as e: # policy doesn't allow
+ try:
+ data = compute_client.availability_zones.list(detailed=False)
+ except Exception:
+ raise e
+
+ # Argh, the availability zones are not iterable...
+ result = []
+ for zone in data:
+ result += _xform_compute_availability_zone(zone, parsed_args.long)
+ return result
+
+ def _get_volume_availability_zones(self, parsed_args):
+ volume_client = self.app.client_manager.volume
+ data = []
+ try:
+ data = volume_client.availability_zones.list()
+ except Exception as e:
+ self.log.debug('Volume availability zone exception: ' + str(e))
+ if parsed_args.volume:
+ message = "Availability zones list not supported by " \
+ "Block Storage API"
+ self.log.warning(message)
+
+ result = []
+ for zone in data:
+ result += _xform_volume_availability_zone(zone)
+ return result
+
+ def _get_network_availability_zones(self, parsed_args):
+ network_client = self.app.client_manager.network
+ data = []
+ try:
+ # Verify that the extension exists.
+ network_client.find_extension('Availability Zone',
+ ignore_missing=False)
+ data = network_client.availability_zones()
+ except Exception as e:
+ self.log.debug('Network availability zone exception: ' + str(e))
+ if parsed_args.network:
+ message = "Availability zones list not supported by " \
+ "Network API"
+ self.log.warning(message)
+
+ result = []
+ for zone in data:
+ result += _xform_network_availability_zone(zone)
+ return result
+
+ def take_action(self, parsed_args):
+
+ if parsed_args.long:
+ columns = ('Zone Name', 'Zone Status', 'Zone Resource',
+ 'Host Name', 'Service Name', 'Service Status')
+ else:
+ columns = ('Zone Name', 'Zone Status')
+
+ # Show everything by default.
+ show_all = (not parsed_args.compute and
+ not parsed_args.volume and
+ not parsed_args.network)
+
+ result = []
+ if parsed_args.compute or show_all:
+ result += self._get_compute_availability_zones(parsed_args)
+ if parsed_args.volume or show_all:
+ result += self._get_volume_availability_zones(parsed_args)
+ if parsed_args.network or show_all:
+ result += self._get_network_availability_zones(parsed_args)
+
+ return (columns,
+ (utils.get_dict_properties(
+ s, columns
+ ) for s in result))
diff --git a/openstackclient/common/command.py b/openstackclient/common/command.py
index b8d9fc6f..13b0bcc2 100644
--- a/openstackclient/common/command.py
+++ b/openstackclient/common/command.py
@@ -31,7 +31,10 @@ class CommandMeta(abc.ABCMeta):
@six.add_metaclass(CommandMeta)
class Command(command.Command):
- pass
+
+ def run(self, parsed_args):
+ self.log.debug('run(%s)', parsed_args)
+ return super(Command, self).run(parsed_args)
class Lister(Command, lister.Lister):
diff --git a/openstackclient/common/configuration.py b/openstackclient/common/configuration.py
index ac2792dd..a70e4d14 100644
--- a/openstackclient/common/configuration.py
+++ b/openstackclient/common/configuration.py
@@ -13,21 +13,16 @@
"""Configuration action implementations"""
-import logging
-
-from cliff import show
import six
-from openstackclient.common import utils
+from openstackclient.common import command
REDACTED = "<redacted>"
-class ShowConfiguration(show.ShowOne):
+class ShowConfiguration(command.ShowOne):
"""Display configuration details"""
- log = logging.getLogger(__name__ + '.ShowConfiguration')
-
def get_parser(self, prog_name):
parser = super(ShowConfiguration, self).get_parser(prog_name)
mask_group = parser.add_mutually_exclusive_group()
@@ -46,7 +41,6 @@ class ShowConfiguration(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
info = self.app.client_manager.get_configuration()
diff --git a/openstackclient/common/extension.py b/openstackclient/common/extension.py
index d1ae208d..8b556b4c 100644
--- a/openstackclient/common/extension.py
+++ b/openstackclient/common/extension.py
@@ -16,18 +16,14 @@
"""Extension action implementations"""
import itertools
-import logging
-
-from cliff import lister
+from openstackclient.common import command
from openstackclient.common import utils
-class ListExtension(lister.Lister):
+class ListExtension(command.Lister):
"""List API extensions"""
- log = logging.getLogger(__name__ + '.ListExtension')
-
def get_parser(self, prog_name):
parser = super(ListExtension, self).get_parser(prog_name)
parser.add_argument(
@@ -58,8 +54,6 @@ class ListExtension(lister.Lister):
return parser
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
-
if parsed_args.long:
columns = ('Name', 'Namespace', 'Description',
'Alias', 'Updated', 'Links')
diff --git a/openstackclient/common/limits.py b/openstackclient/common/limits.py
index 57703670..bd546c01 100644
--- a/openstackclient/common/limits.py
+++ b/openstackclient/common/limits.py
@@ -16,19 +16,15 @@
"""Limits Action Implementation"""
import itertools
-import logging
-
-from cliff import lister
+from openstackclient.common import command
from openstackclient.common import utils
from openstackclient.identity import common as identity_common
-class ShowLimits(lister.Lister):
+class ShowLimits(command.Lister):
"""Show compute and block storage limits"""
- log = logging.getLogger(__name__ + '.ShowLimits')
-
def get_parser(self, prog_name):
parser = super(ShowLimits, self).get_parser(prog_name)
type_group = parser.add_mutually_exclusive_group(required=True)
@@ -64,7 +60,6 @@ class ShowLimits(lister.Lister):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
diff --git a/openstackclient/common/logs.py b/openstackclient/common/logs.py
index 6d1aec13..7ad6e832 100644
--- a/openstackclient/common/logs.py
+++ b/openstackclient/common/logs.py
@@ -18,6 +18,13 @@ import sys
import warnings
+def get_loggers():
+ loggers = {}
+ for logkey in logging.Logger.manager.loggerDict.keys():
+ loggers[logkey] = logging.getLevelName(logging.getLogger(logkey).level)
+ return loggers
+
+
def log_level_from_options(options):
# if --debug, --quiet or --verbose is not specified,
# the default logging level is warning
@@ -34,6 +41,17 @@ def log_level_from_options(options):
return log_level
+def log_level_from_string(level_string):
+ log_level = {
+ 'critical': logging.CRITICAL,
+ 'error': logging.ERROR,
+ 'warning': logging.WARNING,
+ 'info': logging.INFO,
+ 'debug': logging.DEBUG,
+ }.get(level_string, logging.WARNING)
+ return log_level
+
+
def log_level_from_config(config):
# Check the command line option
verbose_level = config.get('verbose_level')
@@ -49,15 +67,7 @@ def log_level_from_config(config):
verbose_level = 'info'
else:
verbose_level = 'debug'
-
- log_level = {
- 'critical': logging.CRITICAL,
- 'error': logging.ERROR,
- 'warning': logging.WARNING,
- 'info': logging.INFO,
- 'debug': logging.DEBUG,
- }.get(verbose_level, logging.WARNING)
- return log_level
+ return log_level_from_string(verbose_level)
def set_warning_filter(log_level):
@@ -168,3 +178,21 @@ class LogConfigurator(object):
self.file_logger.setFormatter(_FileFormatter(config=cloud_config))
self.file_logger.setLevel(log_level)
self.root_logger.addHandler(self.file_logger)
+
+ logconfig = cloud_config.config.get('logging', None)
+ if logconfig:
+ highest_level = logging.NOTSET
+ for k in logconfig.keys():
+ level = log_level_from_string(logconfig[k])
+ logging.getLogger(k).setLevel(level)
+ if (highest_level < level):
+ highest_level = level
+ self.console_logger.setLevel(highest_level)
+ if self.file_logger:
+ self.file_logger.setLevel(highest_level)
+ # loggers that are not set will use the handler level, so we
+ # need to set the global level for all the loggers
+ for logkey in logging.Logger.manager.loggerDict.keys():
+ logger = logging.getLogger(logkey)
+ if logger.level == logging.NOTSET:
+ logger.setLevel(log_level)
diff --git a/openstackclient/common/module.py b/openstackclient/common/module.py
index f0ed23b2..a3dea5da 100644
--- a/openstackclient/common/module.py
+++ b/openstackclient/common/module.py
@@ -15,23 +15,17 @@
"""Module action implementation"""
-import logging
import six
import sys
-from cliff import lister
-from cliff import show
+from openstackclient.common import command
-from openstackclient.common import utils
-
-class ListCommand(lister.Lister):
+class ListCommand(command.Lister):
"""List recognized commands by group"""
auth_required = False
- log = logging.getLogger(__name__ + '.ListCommand')
- @utils.log_method(log)
def take_action(self, parsed_args):
cm = self.app.command_manager
groups = cm.get_command_groups()
@@ -40,11 +34,10 @@ class ListCommand(lister.Lister):
return (columns, ((c, cm.get_command_names(group=c)) for c in groups))
-class ListModule(show.ShowOne):
+class ListModule(command.ShowOne):
"""List module versions"""
auth_required = False
- log = logging.getLogger(__name__ + '.ListModule')
def get_parser(self, prog_name):
parser = super(ListModule, self).get_parser(prog_name)
@@ -56,7 +49,6 @@ class ListModule(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
data = {}
diff --git a/openstackclient/common/quota.py b/openstackclient/common/quota.py
index 8a9b910f..f208948e 100644
--- a/openstackclient/common/quota.py
+++ b/openstackclient/common/quota.py
@@ -16,13 +16,10 @@
"""Quota action implementations"""
import itertools
-import logging
import six
import sys
-from cliff import command
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import utils
@@ -60,8 +57,6 @@ NETWORK_QUOTAS = {
class SetQuota(command.Command):
"""Set quotas for project or class"""
- log = logging.getLogger(__name__ + '.SetQuota')
-
def get_parser(self, prog_name):
parser = super(SetQuota, self).get_parser(prog_name)
parser.add_argument(
@@ -92,7 +87,6 @@ class SetQuota(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -143,11 +137,9 @@ class SetQuota(command.Command):
**volume_kwargs)
-class ShowQuota(show.ShowOne):
+class ShowQuota(command.ShowOne):
"""Show quotas for project or class"""
- log = logging.getLogger(__name__ + '.ShowQuota')
-
def get_parser(self, prog_name):
parser = super(ShowQuota, self).get_parser(prog_name)
parser.add_argument(
@@ -196,14 +188,16 @@ class ShowQuota(show.ShowOne):
def get_network_quota(self, parsed_args):
if parsed_args.quota_class or parsed_args.default:
return {}
- service_catalog = self.app.client_manager.auth_ref.service_catalog
- if 'network' in service_catalog.get_endpoints():
- network_client = self.app.client_manager.network
- return network_client.show_quota(parsed_args.project)['quota']
+ if self.app.client_manager.is_network_endpoint_enabled():
+ identity_client = self.app.client_manager.identity
+ project = utils.find_resource(
+ identity_client.projects,
+ parsed_args.project,
+ ).id
+ return self.app.client_manager.network.get_quota(project)
else:
return {}
- @utils.log_method(log)
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
diff --git a/openstackclient/common/timing.py b/openstackclient/common/timing.py
index d13c86e7..5f628759 100644
--- a/openstackclient/common/timing.py
+++ b/openstackclient/common/timing.py
@@ -13,19 +13,13 @@
"""Timing Implementation"""
-import logging
+from openstackclient.common import command
-from cliff import lister
-
-class Timing(lister.Lister):
+class Timing(command.Lister):
"""Show timing data"""
- log = logging.getLogger(__name__ + '.Timing')
-
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
-
column_headers = (
'URL',
'Seconds',
diff --git a/openstackclient/common/utils.py b/openstackclient/common/utils.py
index 3ae30c8f..4142f830 100644
--- a/openstackclient/common/utils.py
+++ b/openstackclient/common/utils.py
@@ -26,33 +26,6 @@ from oslo_utils import importutils
from openstackclient.common import exceptions
-class log_method(object):
-
- def __init__(self, log=None, level=logging.DEBUG):
- self._log = log
- self._level = level
-
- def __call__(self, func):
- func_name = func.__name__
- if not self._log:
- self._log = logging.getLogger(func.__class__.__name__)
-
- @six.wraps(func)
- def wrapper(*args, **kwargs):
- if self._log.isEnabledFor(self._level):
- pretty_args = []
- if args:
- pretty_args.extend(str(a) for a in args)
- if kwargs:
- pretty_args.extend(
- "%s=%s" % (k, v) for k, v in six.iteritems(kwargs))
- self._log.log(self._level, "%s(%s)",
- func_name, ", ".join(pretty_args))
- return func(*args, **kwargs)
-
- return wrapper
-
-
def find_resource(manager, name_or_id, **kwargs):
"""Helper for the _find_* methods.
@@ -169,6 +142,16 @@ def format_list(data, separator=', '):
return separator.join(sorted(data))
+def format_list_of_dicts(data):
+ """Return a formatted string of key value pairs for each dict
+
+ :param data: a list of dicts
+ :rtype: a string formatted to key='value' with dicts separated by new line
+ """
+
+ return '\n'.join(format_dict(i) for i in data)
+
+
def get_field(item, field):
try:
if isinstance(item, dict):
@@ -331,6 +314,8 @@ def wait_for_status(status_f,
def wait_for_delete(manager,
res_id,
status_field='status',
+ error_status=['error'],
+ exception_name=['NotFound'],
sleep_time=5,
timeout=300,
callback=None):
@@ -341,6 +326,8 @@ def wait_for_delete(manager,
:param status_field: the status attribute in the returned resource object,
this is used to check for error states while the resource is being
deleted
+ :param error_status: a list of status strings for error
+ :param exception_name: a list of exception strings for deleted case
:param sleep_time: wait this long between checks (seconds)
:param timeout: check until this long (seconds)
:param callback: called per sleep cycle, useful to display progress; this
@@ -357,12 +344,12 @@ def wait_for_delete(manager,
# handle a NotFound exception here without parsing the message
res = manager.get(res_id)
except Exception as ex:
- if type(ex).__name__ == 'NotFound':
+ if type(ex).__name__ in exception_name:
return True
raise
status = getattr(res, status_field, '').lower()
- if status == 'error':
+ if status in error_status:
return False
if callback:
diff --git a/openstackclient/compute/v2/agent.py b/openstackclient/compute/v2/agent.py
index 75c67f31..59d7dc66 100644
--- a/openstackclient/compute/v2/agent.py
+++ b/openstackclient/compute/v2/agent.py
@@ -15,21 +15,15 @@
"""Agent action implementations"""
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import utils
-class CreateAgent(show.ShowOne):
+class CreateAgent(command.ShowOne):
"""Create compute agent command"""
- log = logging.getLogger(__name__ + ".CreateAgent")
-
def get_parser(self, prog_name):
parser = super(CreateAgent, self).get_parser(prog_name)
parser.add_argument(
@@ -60,7 +54,6 @@ class CreateAgent(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
compute_client = self.app.client_manager.compute
args = (
parsed_args.os,
@@ -77,8 +70,6 @@ class CreateAgent(show.ShowOne):
class DeleteAgent(command.Command):
"""Delete compute agent command"""
- log = logging.getLogger(__name__ + ".DeleteAgent")
-
def get_parser(self, prog_name):
parser = super(DeleteAgent, self).get_parser(prog_name)
parser.add_argument(
@@ -88,16 +79,13 @@ class DeleteAgent(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
compute_client = self.app.client_manager.compute
compute_client.agents.delete(parsed_args.id)
-class ListAgent(lister.Lister):
+class ListAgent(command.Lister):
"""List compute agent command"""
- log = logging.getLogger(__name__ + ".ListAgent")
-
def get_parser(self, prog_name):
parser = super(ListAgent, self).get_parser(prog_name)
parser.add_argument(
@@ -107,7 +95,6 @@ class ListAgent(lister.Lister):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
compute_client = self.app.client_manager.compute
columns = (
"Agent ID",
@@ -125,11 +112,9 @@ class ListAgent(lister.Lister):
) for s in data))
-class SetAgent(show.ShowOne):
+class SetAgent(command.ShowOne):
"""Set compute agent command"""
- log = logging.getLogger(__name__ + ".SetAgent")
-
def get_parser(self, prog_name):
parser = super(SetAgent, self).get_parser(prog_name)
parser.add_argument(
@@ -151,7 +136,6 @@ class SetAgent(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
compute_client = self.app.client_manager.compute
args = (
parsed_args.id,
diff --git a/openstackclient/compute/v2/aggregate.py b/openstackclient/compute/v2/aggregate.py
index 97ad127c..5f297257 100644
--- a/openstackclient/compute/v2/aggregate.py
+++ b/openstackclient/compute/v2/aggregate.py
@@ -16,22 +16,16 @@
"""Compute v2 Aggregate action implementations"""
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import parseractions
from openstackclient.common import utils
-class AddAggregateHost(show.ShowOne):
+class AddAggregateHost(command.ShowOne):
"""Add host to aggregate"""
- log = logging.getLogger(__name__ + '.AddAggregateHost')
-
def get_parser(self, prog_name):
parser = super(AddAggregateHost, self).get_parser(prog_name)
parser.add_argument(
@@ -47,8 +41,6 @@ class AddAggregateHost(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
-
compute_client = self.app.client_manager.compute
aggregate = utils.find_resource(
@@ -62,11 +54,9 @@ class AddAggregateHost(show.ShowOne):
return zip(*sorted(six.iteritems(info)))
-class CreateAggregate(show.ShowOne):
+class CreateAggregate(command.ShowOne):
"""Create a new aggregate"""
- log = logging.getLogger(__name__ + ".CreateAggregate")
-
def get_parser(self, prog_name):
parser = super(CreateAggregate, self).get_parser(prog_name)
parser.add_argument(
@@ -89,8 +79,6 @@ class CreateAggregate(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
-
compute_client = self.app.client_manager.compute
info = {}
@@ -112,8 +100,6 @@ class CreateAggregate(show.ShowOne):
class DeleteAggregate(command.Command):
"""Delete an existing aggregate"""
- log = logging.getLogger(__name__ + '.DeleteAggregate')
-
def get_parser(self, prog_name):
parser = super(DeleteAggregate, self).get_parser(prog_name)
parser.add_argument(
@@ -123,7 +109,6 @@ class DeleteAggregate(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
@@ -134,11 +119,9 @@ class DeleteAggregate(command.Command):
compute_client.aggregates.delete(data.id)
-class ListAggregate(lister.Lister):
+class ListAggregate(command.Lister):
"""List all aggregates"""
- log = logging.getLogger(__name__ + ".ListAggregate")
-
def get_parser(self, prog_name):
parser = super(ListAggregate, self).get_parser(prog_name)
parser.add_argument(
@@ -149,8 +132,6 @@ class ListAggregate(lister.Lister):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
-
compute_client = self.app.client_manager.compute
data = compute_client.aggregates.list()
@@ -186,11 +167,9 @@ class ListAggregate(lister.Lister):
) for s in data))
-class RemoveAggregateHost(show.ShowOne):
+class RemoveAggregateHost(command.ShowOne):
"""Remove host from aggregate"""
- log = logging.getLogger(__name__ + '.RemoveAggregateHost')
-
def get_parser(self, prog_name):
parser = super(RemoveAggregateHost, self).get_parser(prog_name)
parser.add_argument(
@@ -206,8 +185,6 @@ class RemoveAggregateHost(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
-
compute_client = self.app.client_manager.compute
aggregate = utils.find_resource(
@@ -224,11 +201,9 @@ class RemoveAggregateHost(show.ShowOne):
return zip(*sorted(six.iteritems(info)))
-class SetAggregate(show.ShowOne):
+class SetAggregate(command.ShowOne):
"""Set aggregate properties"""
- log = logging.getLogger(__name__ + '.SetAggregate')
-
def get_parser(self, prog_name):
parser = super(SetAggregate, self).get_parser(prog_name)
parser.add_argument(
@@ -255,7 +230,6 @@ class SetAggregate(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
@@ -288,11 +262,9 @@ class SetAggregate(show.ShowOne):
return ({}, {})
-class ShowAggregate(show.ShowOne):
+class ShowAggregate(command.ShowOne):
"""Display aggregate details"""
- log = logging.getLogger(__name__ + '.ShowAggregate')
-
def get_parser(self, prog_name):
parser = super(ShowAggregate, self).get_parser(prog_name)
parser.add_argument(
@@ -302,7 +274,6 @@ class ShowAggregate(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
diff --git a/openstackclient/compute/v2/availability_zone.py b/openstackclient/compute/v2/availability_zone.py
deleted file mode 100644
index 0fe6c73a..00000000
--- a/openstackclient/compute/v2/availability_zone.py
+++ /dev/null
@@ -1,102 +0,0 @@
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-
-"""Compute v2 Availability Zone action implementations"""
-
-import copy
-import logging
-
-from cliff import lister
-from novaclient import exceptions as nova_exceptions
-import six
-
-from openstackclient.common import utils
-from openstackclient.i18n import _ # noqa
-
-
-def _xform_availability_zone(az, include_extra):
- result = []
- zone_info = {}
- if hasattr(az, 'zoneState'):
- zone_info['zone_status'] = ('available' if az.zoneState['available']
- else 'not available')
- if hasattr(az, 'zoneName'):
- zone_info['zone_name'] = az.zoneName
-
- if not include_extra:
- result.append(zone_info)
- return result
-
- if hasattr(az, 'hosts') and az.hosts:
- for host, services in six.iteritems(az.hosts):
- host_info = copy.deepcopy(zone_info)
- host_info['host_name'] = host
-
- for svc, state in six.iteritems(services):
- info = copy.deepcopy(host_info)
- info['service_name'] = svc
- info['service_status'] = '%s %s %s' % (
- 'enabled' if state['active'] else 'disabled',
- ':-)' if state['available'] else 'XXX',
- state['updated_at'])
- result.append(info)
- else:
- zone_info['host_name'] = ''
- zone_info['service_name'] = ''
- zone_info['service_status'] = ''
- result.append(zone_info)
- return result
-
-
-class ListAvailabilityZone(lister.Lister):
- """List availability zones and their status"""
-
- log = logging.getLogger(__name__ + '.ListAvailabilityZone')
-
- def get_parser(self, prog_name):
- parser = super(ListAvailabilityZone, self).get_parser(prog_name)
- parser.add_argument(
- '--long',
- action='store_true',
- default=False,
- help=_('List additional fields in output'),
- )
- return parser
-
- @utils.log_method(log)
- def take_action(self, parsed_args):
-
- if parsed_args.long:
- columns = ('Zone Name', 'Zone Status',
- 'Host Name', 'Service Name', 'Service Status')
- else:
- columns = ('Zone Name', 'Zone Status')
-
- compute_client = self.app.client_manager.compute
- try:
- data = compute_client.availability_zones.list()
- except nova_exceptions.Forbidden as e: # policy doesn't allow
- try:
- data = compute_client.availability_zones.list(detailed=False)
- except Exception:
- raise e
-
- # Argh, the availability zones are not iterable...
- result = []
- for zone in data:
- result += _xform_availability_zone(zone, parsed_args.long)
-
- return (columns,
- (utils.get_dict_properties(
- s, columns
- ) for s in result))
diff --git a/openstackclient/compute/v2/console.py b/openstackclient/compute/v2/console.py
index f0864786..6c0ec31a 100644
--- a/openstackclient/compute/v2/console.py
+++ b/openstackclient/compute/v2/console.py
@@ -15,13 +15,10 @@
"""Compute v2 Console action implementations"""
-import logging
import six
import sys
-from cliff import command
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import parseractions
from openstackclient.common import utils
@@ -29,8 +26,6 @@ from openstackclient.common import utils
class ShowConsoleLog(command.Command):
"""Show server's console output"""
- log = logging.getLogger(__name__ + '.ShowConsoleLog')
-
def get_parser(self, prog_name):
parser = super(ShowConsoleLog, self).get_parser(prog_name)
parser.add_argument(
@@ -49,7 +44,6 @@ class ShowConsoleLog(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
@@ -67,11 +61,9 @@ class ShowConsoleLog(command.Command):
sys.stdout.write(data)
-class ShowConsoleURL(show.ShowOne):
+class ShowConsoleURL(command.ShowOne):
"""Show server's remote console URL"""
- log = logging.getLogger(__name__ + '.ShowConsoleURL')
-
def get_parser(self, prog_name):
parser = super(ShowConsoleURL, self).get_parser(prog_name)
parser.add_argument(
@@ -104,7 +96,6 @@ class ShowConsoleURL(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
server = utils.find_resource(
diff --git a/openstackclient/compute/v2/fixedip.py b/openstackclient/compute/v2/fixedip.py
index 1ab8a18c..daac97d1 100644
--- a/openstackclient/compute/v2/fixedip.py
+++ b/openstackclient/compute/v2/fixedip.py
@@ -15,18 +15,13 @@
"""Fixed IP action implementations"""
-import logging
-
-from cliff import command
-
+from openstackclient.common import command
from openstackclient.common import utils
class AddFixedIP(command.Command):
"""Add fixed IP address to server"""
- log = logging.getLogger(__name__ + ".AddFixedIP")
-
def get_parser(self, prog_name):
parser = super(AddFixedIP, self).get_parser(prog_name)
parser.add_argument(
@@ -42,7 +37,6 @@ class AddFixedIP(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
compute_client = self.app.client_manager.compute
network = utils.find_resource(
@@ -57,8 +51,6 @@ class AddFixedIP(command.Command):
class RemoveFixedIP(command.Command):
"""Remove fixed IP address from server"""
- log = logging.getLogger(__name__ + ".RemoveFixedIP")
-
def get_parser(self, prog_name):
parser = super(RemoveFixedIP, self).get_parser(prog_name)
parser.add_argument(
@@ -74,7 +66,6 @@ class RemoveFixedIP(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
compute_client = self.app.client_manager.compute
server = utils.find_resource(
diff --git a/openstackclient/compute/v2/flavor.py b/openstackclient/compute/v2/flavor.py
index 1af5fe70..093592cd 100644
--- a/openstackclient/compute/v2/flavor.py
+++ b/openstackclient/compute/v2/flavor.py
@@ -98,7 +98,6 @@ class CreateFlavor(command.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
compute_client = self.app.client_manager.compute
args = (
@@ -132,7 +131,6 @@ class DeleteFlavor(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
compute_client = self.app.client_manager.compute
flavor = utils.find_resource(compute_client.flavors,
parsed_args.flavor)
@@ -182,7 +180,6 @@ class ListFlavor(command.Lister):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
compute_client = self.app.client_manager.compute
columns = (
"ID",
@@ -234,7 +231,6 @@ class ShowFlavor(command.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
compute_client = self.app.client_manager.compute
resource_flavor = utils.find_resource(compute_client.flavors,
parsed_args.flavor)
@@ -266,7 +262,6 @@ class SetFlavor(command.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
compute_client = self.app.client_manager.compute
resource_flavor = compute_client.flavors.find(name=parsed_args.flavor)
@@ -299,7 +294,6 @@ class UnsetFlavor(command.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
compute_client = self.app.client_manager.compute
resource_flavor = compute_client.flavors.find(name=parsed_args.flavor)
diff --git a/openstackclient/compute/v2/floatingip.py b/openstackclient/compute/v2/floatingip.py
index 6f2e360c..6212989f 100644
--- a/openstackclient/compute/v2/floatingip.py
+++ b/openstackclient/compute/v2/floatingip.py
@@ -15,21 +15,15 @@
"""Floating IP action implementations"""
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import utils
class AddFloatingIP(command.Command):
"""Add floating IP address to server"""
- log = logging.getLogger(__name__ + ".AddFloatingIP")
-
def get_parser(self, prog_name):
parser = super(AddFloatingIP, self).get_parser(prog_name)
parser.add_argument(
@@ -45,7 +39,6 @@ class AddFloatingIP(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
compute_client = self.app.client_manager.compute
server = utils.find_resource(
@@ -54,11 +47,9 @@ class AddFloatingIP(command.Command):
server.add_floating_ip(parsed_args.ip_address)
-class CreateFloatingIP(show.ShowOne):
+class CreateFloatingIP(command.ShowOne):
"""Create new floating IP address"""
- log = logging.getLogger(__name__ + '.CreateFloatingIP')
-
def get_parser(self, prog_name):
parser = super(CreateFloatingIP, self).get_parser(prog_name)
parser.add_argument(
@@ -68,7 +59,6 @@ class CreateFloatingIP(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
floating_ip = compute_client.floating_ips.create(parsed_args.pool)
@@ -78,57 +68,9 @@ class CreateFloatingIP(show.ShowOne):
return zip(*sorted(six.iteritems(info)))
-class DeleteFloatingIP(command.Command):
- """Delete a floating IP address"""
-
- log = logging.getLogger(__name__ + '.DeleteFloatingIP')
-
- def get_parser(self, prog_name):
- parser = super(DeleteFloatingIP, self).get_parser(prog_name)
- parser.add_argument(
- "ip_address",
- metavar="<ip-address>",
- help="IP address to delete (ID only)",
- )
- return parser
-
- @utils.log_method(log)
- def take_action(self, parsed_args):
- compute_client = self.app.client_manager.compute
-
- floating_ip = utils.find_resource(
- compute_client.floating_ips,
- parsed_args.ip_address,
- )
-
- compute_client.floating_ips.delete(floating_ip)
-
-
-class ListFloatingIP(lister.Lister):
- """List floating IP addresses"""
-
- log = logging.getLogger(__name__ + '.ListFloatingIP')
-
- @utils.log_method(log)
- def take_action(self, parsed_args):
- compute_client = self.app.client_manager.compute
-
- columns = ('ID', 'Pool', 'IP', 'Fixed IP', 'Instance ID')
-
- data = compute_client.floating_ips.list()
-
- return (columns,
- (utils.get_item_properties(
- s, columns,
- formatters={},
- ) for s in data))
-
-
class RemoveFloatingIP(command.Command):
"""Remove floating IP address from server"""
- log = logging.getLogger(__name__ + ".RemoveFloatingIP")
-
def get_parser(self, prog_name):
parser = super(RemoveFloatingIP, self).get_parser(prog_name)
parser.add_argument(
@@ -144,7 +86,6 @@ class RemoveFloatingIP(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
compute_client = self.app.client_manager.compute
server = utils.find_resource(
diff --git a/openstackclient/compute/v2/floatingippool.py b/openstackclient/compute/v2/floatingippool.py
index 39a2d8fe..997e0324 100644
--- a/openstackclient/compute/v2/floatingippool.py
+++ b/openstackclient/compute/v2/floatingippool.py
@@ -15,19 +15,13 @@
"""Floating IP Pool action implementations"""
-import logging
-
-from cliff import lister
-
+from openstackclient.common import command
from openstackclient.common import utils
-class ListFloatingIPPool(lister.Lister):
+class ListFloatingIPPool(command.Lister):
"""List pools of floating IP addresses"""
- log = logging.getLogger(__name__ + '.ListFloatingIPPool')
-
- @utils.log_method(log)
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
diff --git a/openstackclient/compute/v2/host.py b/openstackclient/compute/v2/host.py
index 4f727388..f2257d12 100644
--- a/openstackclient/compute/v2/host.py
+++ b/openstackclient/compute/v2/host.py
@@ -15,18 +15,13 @@
"""Host action implementations"""
-import logging
-
-from cliff import lister
-
+from openstackclient.common import command
from openstackclient.common import utils
-class ListHost(lister.Lister):
+class ListHost(command.Lister):
"""List host command"""
- log = logging.getLogger(__name__ + ".ListHost")
-
def get_parser(self, prog_name):
parser = super(ListHost, self).get_parser(prog_name)
parser.add_argument(
@@ -36,7 +31,6 @@ class ListHost(lister.Lister):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
compute_client = self.app.client_manager.compute
columns = (
"Host Name",
@@ -50,11 +44,9 @@ class ListHost(lister.Lister):
) for s in data))
-class ShowHost(lister.Lister):
+class ShowHost(command.Lister):
"""Show host command"""
- log = logging.getLogger(__name__ + ".ShowHost")
-
def get_parser(self, prog_name):
parser = super(ShowHost, self).get_parser(prog_name)
parser.add_argument(
@@ -64,7 +56,6 @@ class ShowHost(lister.Lister):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
compute_client = self.app.client_manager.compute
columns = (
"Host",
diff --git a/openstackclient/compute/v2/hypervisor.py b/openstackclient/compute/v2/hypervisor.py
index f33beb08..f5288a35 100644
--- a/openstackclient/compute/v2/hypervisor.py
+++ b/openstackclient/compute/v2/hypervisor.py
@@ -15,21 +15,16 @@
"""Hypervisor action implementations"""
-import logging
import re
import six
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import utils
-class ListHypervisor(lister.Lister):
+class ListHypervisor(command.Lister):
"""List hypervisors"""
- log = logging.getLogger(__name__ + ".ListHypervisor")
-
def get_parser(self, prog_name):
parser = super(ListHypervisor, self).get_parser(prog_name)
parser.add_argument(
@@ -40,7 +35,6 @@ class ListHypervisor(lister.Lister):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
compute_client = self.app.client_manager.compute
columns = (
"ID",
@@ -58,11 +52,9 @@ class ListHypervisor(lister.Lister):
) for s in data))
-class ShowHypervisor(show.ShowOne):
+class ShowHypervisor(command.ShowOne):
"""Display hypervisor details"""
- log = logging.getLogger(__name__ + ".ShowHypervisor")
-
def get_parser(self, prog_name):
parser = super(ShowHypervisor, self).get_parser(prog_name)
parser.add_argument(
@@ -72,7 +64,6 @@ class ShowHypervisor(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
compute_client = self.app.client_manager.compute
hypervisor = utils.find_resource(compute_client.hypervisors,
parsed_args.hypervisor)._info.copy()
diff --git a/openstackclient/compute/v2/hypervisor_stats.py b/openstackclient/compute/v2/hypervisor_stats.py
index 43ba9fc8..290f5418 100644
--- a/openstackclient/compute/v2/hypervisor_stats.py
+++ b/openstackclient/compute/v2/hypervisor_stats.py
@@ -14,19 +14,15 @@
"""Hypervisor Stats action implementations"""
-import logging
import six
-from cliff import show
+from openstackclient.common import command
-class ShowHypervisorStats(show.ShowOne):
+class ShowHypervisorStats(command.ShowOne):
"""Display hypervisor stats details"""
- log = logging.getLogger(__name__ + ".ShowHypervisorStats")
-
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
compute_client = self.app.client_manager.compute
hypervisor_stats = compute_client.hypervisors.statistics().to_dict()
diff --git a/openstackclient/compute/v2/keypair.py b/openstackclient/compute/v2/keypair.py
index 96562985..71c9d674 100644
--- a/openstackclient/compute/v2/keypair.py
+++ b/openstackclient/compute/v2/keypair.py
@@ -15,24 +15,18 @@
"""Keypair action implementations"""
-import logging
import os
import six
import sys
-from cliff import command
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import exceptions
from openstackclient.common import utils
-class CreateKeypair(show.ShowOne):
+class CreateKeypair(command.ShowOne):
"""Create new public key"""
- log = logging.getLogger(__name__ + '.CreateKeypair')
-
def get_parser(self, prog_name):
parser = super(CreateKeypair, self).get_parser(prog_name)
parser.add_argument(
@@ -47,7 +41,6 @@ class CreateKeypair(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
@@ -82,8 +75,6 @@ class CreateKeypair(show.ShowOne):
class DeleteKeypair(command.Command):
"""Delete public key"""
- log = logging.getLogger(__name__ + '.DeleteKeypair')
-
def get_parser(self, prog_name):
parser = super(DeleteKeypair, self).get_parser(prog_name)
parser.add_argument(
@@ -93,19 +84,15 @@ class DeleteKeypair(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
compute_client.keypairs.delete(parsed_args.name)
-class ListKeypair(lister.Lister):
+class ListKeypair(command.Lister):
"""List public key fingerprints"""
- log = logging.getLogger(__name__ + ".ListKeypair")
-
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
compute_client = self.app.client_manager.compute
columns = (
"Name",
@@ -119,11 +106,9 @@ class ListKeypair(lister.Lister):
) for s in data))
-class ShowKeypair(show.ShowOne):
+class ShowKeypair(command.ShowOne):
"""Display public key details"""
- log = logging.getLogger(__name__ + '.ShowKeypair')
-
def get_parser(self, prog_name):
parser = super(ShowKeypair, self).get_parser(prog_name)
parser.add_argument(
@@ -139,7 +124,6 @@ class ShowKeypair(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
keypair = utils.find_resource(compute_client.keypairs,
diff --git a/openstackclient/compute/v2/security_group.py b/openstackclient/compute/v2/security_group.py
index 6395e102..2a8908d7 100644
--- a/openstackclient/compute/v2/security_group.py
+++ b/openstackclient/compute/v2/security_group.py
@@ -16,13 +16,8 @@
"""Compute v2 Security Group action implementations"""
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
-
from keystoneauth1 import exceptions as ks_exc
try:
@@ -30,6 +25,7 @@ try:
except ImportError:
from novaclient.v1_1 import security_group_rules
+from openstackclient.common import command
from openstackclient.common import parseractions
from openstackclient.common import utils
@@ -79,11 +75,9 @@ def _xform_and_trim_security_group_rule(sgroup):
return info
-class CreateSecurityGroup(show.ShowOne):
+class CreateSecurityGroup(command.ShowOne):
"""Create a new security group"""
- log = logging.getLogger(__name__ + ".CreateSecurityGroup")
-
def get_parser(self, prog_name):
parser = super(CreateSecurityGroup, self).get_parser(prog_name)
parser.add_argument(
@@ -99,8 +93,6 @@ class CreateSecurityGroup(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
-
compute_client = self.app.client_manager.compute
description = parsed_args.description or parsed_args.name
@@ -115,11 +107,9 @@ class CreateSecurityGroup(show.ShowOne):
return zip(*sorted(six.iteritems(info)))
-class CreateSecurityGroupRule(show.ShowOne):
+class CreateSecurityGroupRule(command.ShowOne):
"""Create a new security group rule"""
- log = logging.getLogger(__name__ + ".CreateSecurityGroupRule")
-
def get_parser(self, prog_name):
parser = super(CreateSecurityGroupRule, self).get_parser(prog_name)
parser.add_argument(
@@ -157,8 +147,6 @@ class CreateSecurityGroupRule(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
-
compute_client = self.app.client_manager.compute
group = utils.find_resource(
compute_client.security_groups,
@@ -181,36 +169,9 @@ class CreateSecurityGroupRule(show.ShowOne):
return zip(*sorted(six.iteritems(info)))
-class DeleteSecurityGroup(command.Command):
- """Delete a security group"""
-
- log = logging.getLogger(__name__ + '.DeleteSecurityGroup')
-
- def get_parser(self, prog_name):
- parser = super(DeleteSecurityGroup, self).get_parser(prog_name)
- parser.add_argument(
- 'group',
- metavar='<group>',
- help='Security group to delete (name or ID)',
- )
- return parser
-
- @utils.log_method(log)
- def take_action(self, parsed_args):
-
- compute_client = self.app.client_manager.compute
- data = utils.find_resource(
- compute_client.security_groups,
- parsed_args.group,
- )
- compute_client.security_groups.delete(data.id)
-
-
class DeleteSecurityGroupRule(command.Command):
"""Delete a security group rule"""
- log = logging.getLogger(__name__ + '.DeleteSecurityGroupRule')
-
def get_parser(self, prog_name):
parser = super(DeleteSecurityGroupRule, self).get_parser(prog_name)
parser.add_argument(
@@ -220,18 +181,15 @@ class DeleteSecurityGroupRule(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
compute_client.security_group_rules.delete(parsed_args.rule)
-class ListSecurityGroup(lister.Lister):
+class ListSecurityGroup(command.Lister):
"""List security groups"""
- log = logging.getLogger(__name__ + ".ListSecurityGroup")
-
def get_parser(self, prog_name):
parser = super(ListSecurityGroup, self).get_parser(prog_name)
parser.add_argument(
@@ -250,8 +208,6 @@ class ListSecurityGroup(lister.Lister):
except KeyError:
return project_id
- self.log.debug("take_action(%s)", parsed_args)
-
compute_client = self.app.client_manager.compute
columns = (
"ID",
@@ -283,11 +239,9 @@ class ListSecurityGroup(lister.Lister):
) for s in data))
-class ListSecurityGroupRule(lister.Lister):
+class ListSecurityGroupRule(command.Lister):
"""List security group rules"""
- log = logging.getLogger(__name__ + ".ListSecurityGroupRule")
-
def get_parser(self, prog_name):
parser = super(ListSecurityGroupRule, self).get_parser(prog_name)
parser.add_argument(
@@ -299,8 +253,6 @@ class ListSecurityGroupRule(lister.Lister):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
-
compute_client = self.app.client_manager.compute
columns = column_headers = (
"ID",
@@ -337,11 +289,9 @@ class ListSecurityGroupRule(lister.Lister):
) for s in rules))
-class SetSecurityGroup(show.ShowOne):
+class SetSecurityGroup(command.ShowOne):
"""Set security group properties"""
- log = logging.getLogger(__name__ + '.SetSecurityGroup')
-
def get_parser(self, prog_name):
parser = super(SetSecurityGroup, self).get_parser(prog_name)
parser.add_argument(
@@ -361,7 +311,6 @@ class SetSecurityGroup(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
@@ -388,11 +337,9 @@ class SetSecurityGroup(show.ShowOne):
return ({}, {})
-class ShowSecurityGroup(show.ShowOne):
+class ShowSecurityGroup(command.ShowOne):
"""Display security group details"""
- log = logging.getLogger(__name__ + '.ShowSecurityGroup')
-
def get_parser(self, prog_name):
parser = super(ShowSecurityGroup, self).get_parser(prog_name)
parser.add_argument(
@@ -402,7 +349,6 @@ class ShowSecurityGroup(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py
index b4db6216..4cb94822 100644
--- a/openstackclient/compute/v2/server.py
+++ b/openstackclient/compute/v2/server.py
@@ -185,8 +185,6 @@ class AddServerSecurityGroup(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
-
compute_client = self.app.client_manager.compute
server = utils.find_resource(
@@ -224,8 +222,6 @@ class AddServerVolume(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
-
compute_client = self.app.client_manager.compute
volume_client = self.app.client_manager.volume
@@ -370,7 +366,6 @@ class CreateServer(command.ShowOne):
)
return parser
- @utils.log_method()
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
volume_client = self.app.client_manager.volume
@@ -547,6 +542,34 @@ class CreateServer(command.ShowOne):
return zip(*sorted(six.iteritems(details)))
+class CreateServerDump(command.Command):
+ """Create a dump file in server(s)
+
+ Trigger crash dump in server(s) with features like kdump in Linux.
+ It will create a dump file in the server(s) dumping the server(s)'
+ memory, and also crash the server(s). OSC sees the dump file
+ (server dump) as a kind of resource.
+ """
+
+ def get_parser(self, prog_name):
+ parser = super(CreateServerDump, self).get_parser(prog_name)
+ parser.add_argument(
+ 'server',
+ metavar='<server>',
+ nargs='+',
+ help=_('Server(s) to create dump file (name or ID)'),
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ compute_client = self.app.client_manager.compute
+ for server in parsed_args.server:
+ utils.find_resource(
+ compute_client.servers,
+ server,
+ ).trigger_crash_dump()
+
+
class CreateServerImage(command.ShowOne):
"""Create a new disk image from a running server"""
@@ -569,7 +592,6 @@ class CreateServerImage(command.ShowOne):
)
return parser
- @utils.log_method()
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
image_client = self.app.client_manager.image
@@ -626,7 +648,6 @@ class DeleteServer(command.Command):
)
return parser
- @utils.log_method()
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
for server in parsed_args.server:
@@ -741,7 +762,6 @@ class ListServer(command.Lister):
)
return parser
- @utils.log_method()
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
identity_client = self.app.client_manager.identity
@@ -872,7 +892,6 @@ class LockServer(command.Command):
)
return parser
- @utils.log_method()
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
@@ -944,7 +963,6 @@ class MigrateServer(command.Command):
)
return parser
- @utils.log_method()
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
@@ -987,7 +1005,6 @@ class PauseServer(command.Command):
)
return parser
- @utils.log_method()
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
for server in parsed_args.server:
@@ -1031,7 +1048,6 @@ class RebootServer(command.Command):
)
return parser
- @utils.log_method()
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
server = utils.find_resource(
@@ -1078,7 +1094,6 @@ class RebuildServer(command.ShowOne):
)
return parser
- @utils.log_method()
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
@@ -1123,8 +1138,6 @@ class RemoveServerSecurityGroup(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
-
compute_client = self.app.client_manager.compute
server = utils.find_resource(
@@ -1157,8 +1170,6 @@ class RemoveServerVolume(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
-
compute_client = self.app.client_manager.compute
volume_client = self.app.client_manager.volume
@@ -1189,7 +1200,6 @@ class RescueServer(command.ShowOne):
)
return parser
- @utils.log_method()
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
@@ -1233,7 +1243,6 @@ class ResizeServer(command.Command):
)
return parser
- @utils.log_method()
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
@@ -1277,7 +1286,6 @@ class ResumeServer(command.Command):
)
return parser
- @utils.log_method()
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
@@ -1317,7 +1325,6 @@ class SetServer(command.Command):
)
return parser
- @utils.log_method()
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
@@ -1358,7 +1365,6 @@ class ShelveServer(command.Command):
)
return parser
- @utils.log_method()
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
for server in parsed_args.server:
@@ -1386,7 +1392,6 @@ class ShowServer(command.ShowOne):
)
return parser
- @utils.log_method()
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
server = utils.find_resource(compute_client.servers,
@@ -1507,7 +1512,6 @@ class SshServer(command.Command):
)
return parser
- @utils.log_method()
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
@@ -1561,7 +1565,6 @@ class StartServer(command.Command):
)
return parser
- @utils.log_method()
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
for server in parsed_args.server:
@@ -1584,7 +1587,6 @@ class StopServer(command.Command):
)
return parser
- @utils.log_method()
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
for server in parsed_args.server:
@@ -1607,7 +1609,6 @@ class SuspendServer(command.Command):
)
return parser
- @utils.log_method()
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
@@ -1631,7 +1632,6 @@ class UnlockServer(command.Command):
)
return parser
- @utils.log_method()
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
@@ -1655,7 +1655,6 @@ class UnpauseServer(command.Command):
)
return parser
- @utils.log_method()
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
@@ -1678,7 +1677,6 @@ class UnrescueServer(command.Command):
)
return parser
- @utils.log_method()
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
@@ -1708,7 +1706,6 @@ class UnsetServer(command.Command):
)
return parser
- @utils.log_method()
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
server = utils.find_resource(
@@ -1736,7 +1733,6 @@ class UnshelveServer(command.Command):
)
return parser
- @utils.log_method()
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
for server in parsed_args.server:
diff --git a/openstackclient/compute/v2/service.py b/openstackclient/compute/v2/service.py
index af3e940a..3c062724 100644
--- a/openstackclient/compute/v2/service.py
+++ b/openstackclient/compute/v2/service.py
@@ -15,19 +15,13 @@
"""Service action implementations"""
-import logging
-
-from cliff import command
-from cliff import lister
-
+from openstackclient.common import command
from openstackclient.common import utils
class DeleteService(command.Command):
"""Delete service command"""
- log = logging.getLogger(__name__ + ".DeleteService")
-
def get_parser(self, prog_name):
parser = super(DeleteService, self).get_parser(prog_name)
parser.add_argument(
@@ -37,17 +31,14 @@ class DeleteService(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
compute_client = self.app.client_manager.compute
compute_client.services.delete(parsed_args.service)
-class ListService(lister.Lister):
+class ListService(command.Lister):
"""List service command"""
- log = logging.getLogger(__name__ + ".ListService")
-
def get_parser(self, prog_name):
parser = super(ListService, self).get_parser(prog_name)
parser.add_argument(
@@ -61,7 +52,6 @@ class ListService(lister.Lister):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
compute_client = self.app.client_manager.compute
columns = (
"Id",
@@ -83,8 +73,6 @@ class ListService(lister.Lister):
class SetService(command.Command):
"""Set service command"""
- log = logging.getLogger(__name__ + ".SetService")
-
def get_parser(self, prog_name):
parser = super(SetService, self).get_parser(prog_name)
parser.add_argument(
@@ -110,7 +98,6 @@ class SetService(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
compute_client = self.app.client_manager.compute
if parsed_args.enabled:
diff --git a/openstackclient/compute/v2/usage.py b/openstackclient/compute/v2/usage.py
index 4e7cf100..baa50170 100644
--- a/openstackclient/compute/v2/usage.py
+++ b/openstackclient/compute/v2/usage.py
@@ -16,21 +16,17 @@
"""Usage action implementations"""
import datetime
-import logging
import sys
-from cliff import lister
-from cliff import show
import six
+from openstackclient.common import command
from openstackclient.common import utils
-class ListUsage(lister.Lister):
+class ListUsage(command.Lister):
"""List resource usage per project"""
- log = logging.getLogger(__name__ + ".ListUsage")
-
def get_parser(self, prog_name):
parser = super(ListUsage, self).get_parser(prog_name)
parser.add_argument(
@@ -49,7 +45,6 @@ class ListUsage(lister.Lister):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
def _format_project(project):
if not project:
@@ -118,11 +113,9 @@ class ListUsage(lister.Lister):
) for s in usage_list))
-class ShowUsage(show.ShowOne):
+class ShowUsage(command.ShowOne):
"""Show resource usage for a single project"""
- log = logging.getLogger(__name__ + ".ShowUsage")
-
def get_parser(self, prog_name):
parser = super(ShowUsage, self).get_parser(prog_name)
parser.add_argument(
@@ -147,8 +140,6 @@ class ShowUsage(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
-
identity_client = self.app.client_manager.identity
compute_client = self.app.client_manager.compute
dateformat = "%Y-%m-%d"
diff --git a/openstackclient/i18n.py b/openstackclient/i18n.py
index 3a11c1d0..1d09772c 100644
--- a/openstackclient/i18n.py
+++ b/openstackclient/i18n.py
@@ -15,7 +15,7 @@
import oslo_i18n
-_translators = oslo_i18n.TranslatorFactory(domain='python-openstackclient')
+_translators = oslo_i18n.TranslatorFactory(domain='openstackclient')
# The primary translation function using the well-known name "_"
_ = _translators.primary
diff --git a/openstackclient/identity/v2_0/catalog.py b/openstackclient/identity/v2_0/catalog.py
index 9bc2755a..c927943f 100644
--- a/openstackclient/identity/v2_0/catalog.py
+++ b/openstackclient/identity/v2_0/catalog.py
@@ -13,12 +13,9 @@
"""Identity v2 Service Catalog action implementations"""
-import logging
import six
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import utils
from openstackclient.i18n import _ # noqa
@@ -37,12 +34,9 @@ def _format_endpoints(eps=None):
return ret
-class ListCatalog(lister.Lister):
+class ListCatalog(command.Lister):
"""List services in the service catalog"""
- log = logging.getLogger(__name__ + '.ListCatalog')
-
- @utils.log_method(log)
def take_action(self, parsed_args):
# This is ugly because if auth hasn't happened yet we need
@@ -62,11 +56,9 @@ class ListCatalog(lister.Lister):
) for s in data))
-class ShowCatalog(show.ShowOne):
+class ShowCatalog(command.ShowOne):
"""Display service catalog details"""
- log = logging.getLogger(__name__ + '.ShowCatalog')
-
def get_parser(self, prog_name):
parser = super(ShowCatalog, self).get_parser(prog_name)
parser.add_argument(
@@ -76,7 +68,6 @@ class ShowCatalog(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
# This is ugly because if auth hasn't happened yet we need
diff --git a/openstackclient/identity/v2_0/ec2creds.py b/openstackclient/identity/v2_0/ec2creds.py
index a7730ce2..a16b3d9e 100644
--- a/openstackclient/identity/v2_0/ec2creds.py
+++ b/openstackclient/identity/v2_0/ec2creds.py
@@ -16,22 +16,16 @@
"""Identity v2 EC2 Credentials action implementations"""
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import utils
from openstackclient.i18n import _ # noqa
-class CreateEC2Creds(show.ShowOne):
+class CreateEC2Creds(command.ShowOne):
"""Create EC2 credentials"""
- log = logging.getLogger(__name__ + ".CreateEC2Creds")
-
def get_parser(self, prog_name):
parser = super(CreateEC2Creds, self).get_parser(prog_name)
parser.add_argument(
@@ -52,7 +46,6 @@ class CreateEC2Creds(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -89,8 +82,6 @@ class CreateEC2Creds(show.ShowOne):
class DeleteEC2Creds(command.Command):
"""Delete EC2 credentials"""
- log = logging.getLogger(__name__ + '.DeleteEC2Creds')
-
def get_parser(self, prog_name):
parser = super(DeleteEC2Creds, self).get_parser(prog_name)
parser.add_argument(
@@ -105,7 +96,6 @@ class DeleteEC2Creds(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -121,11 +111,9 @@ class DeleteEC2Creds(command.Command):
identity_client.ec2.delete(user, parsed_args.access_key)
-class ListEC2Creds(lister.Lister):
+class ListEC2Creds(command.Lister):
"""List EC2 credentials"""
- log = logging.getLogger(__name__ + '.ListEC2Creds')
-
def get_parser(self, prog_name):
parser = super(ListEC2Creds, self).get_parser(prog_name)
parser.add_argument(
@@ -135,7 +123,6 @@ class ListEC2Creds(lister.Lister):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -159,11 +146,9 @@ class ListEC2Creds(lister.Lister):
) for s in data))
-class ShowEC2Creds(show.ShowOne):
+class ShowEC2Creds(command.ShowOne):
"""Display EC2 credentials details"""
- log = logging.getLogger(__name__ + '.ShowEC2Creds')
-
def get_parser(self, prog_name):
parser = super(ShowEC2Creds, self).get_parser(prog_name)
parser.add_argument(
@@ -178,7 +163,6 @@ class ShowEC2Creds(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
diff --git a/openstackclient/identity/v2_0/endpoint.py b/openstackclient/identity/v2_0/endpoint.py
index 1744cc72..08c09565 100644
--- a/openstackclient/identity/v2_0/endpoint.py
+++ b/openstackclient/identity/v2_0/endpoint.py
@@ -15,23 +15,17 @@
"""Endpoint action implementations"""
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import utils
from openstackclient.i18n import _ # noqa
from openstackclient.identity import common
-class CreateEndpoint(show.ShowOne):
+class CreateEndpoint(command.ShowOne):
"""Create new endpoint"""
- log = logging.getLogger(__name__ + '.CreateEndpoint')
-
def get_parser(self, prog_name):
parser = super(CreateEndpoint, self).get_parser(prog_name)
parser.add_argument(
@@ -62,7 +56,6 @@ class CreateEndpoint(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
service = common.find_service(identity_client, parsed_args.service)
@@ -83,8 +76,6 @@ class CreateEndpoint(show.ShowOne):
class DeleteEndpoint(command.Command):
"""Delete endpoint"""
- log = logging.getLogger(__name__ + '.DeleteEndpoint')
-
def get_parser(self, prog_name):
parser = super(DeleteEndpoint, self).get_parser(prog_name)
parser.add_argument(
@@ -93,18 +84,15 @@ class DeleteEndpoint(command.Command):
help=_('Endpoint ID to delete'))
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
identity_client.endpoints.delete(parsed_args.endpoint)
return
-class ListEndpoint(lister.Lister):
+class ListEndpoint(command.Lister):
"""List endpoints"""
- log = logging.getLogger(__name__ + '.ListEndpoint')
-
def get_parser(self, prog_name):
parser = super(ListEndpoint, self).get_parser(prog_name)
parser.add_argument(
@@ -115,7 +103,6 @@ class ListEndpoint(lister.Lister):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
if parsed_args.long:
@@ -136,11 +123,9 @@ class ListEndpoint(lister.Lister):
) for s in data))
-class ShowEndpoint(show.ShowOne):
+class ShowEndpoint(command.ShowOne):
"""Display endpoint details"""
- log = logging.getLogger(__name__ + '.ShowEndpoint')
-
def get_parser(self, prog_name):
parser = super(ShowEndpoint, self).get_parser(prog_name)
parser.add_argument(
@@ -150,7 +135,6 @@ class ShowEndpoint(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
data = identity_client.endpoints.list()
diff --git a/openstackclient/identity/v2_0/project.py b/openstackclient/identity/v2_0/project.py
index 4330c79c..9e26c308 100644
--- a/openstackclient/identity/v2_0/project.py
+++ b/openstackclient/identity/v2_0/project.py
@@ -15,24 +15,19 @@
"""Identity v2 Project action implementations"""
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
from keystoneauth1 import exceptions as ks_exc
+from openstackclient.common import command
from openstackclient.common import parseractions
from openstackclient.common import utils
from openstackclient.i18n import _ # noqa
-class CreateProject(show.ShowOne):
+class CreateProject(command.ShowOne):
"""Create new project"""
- log = logging.getLogger(__name__ + '.CreateProject')
-
def get_parser(self, prog_name):
parser = super(CreateProject, self).get_parser(prog_name)
parser.add_argument(
@@ -70,7 +65,6 @@ class CreateProject(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -106,8 +100,6 @@ class CreateProject(show.ShowOne):
class DeleteProject(command.Command):
"""Delete project(s)"""
- log = logging.getLogger(__name__ + '.DeleteProject')
-
def get_parser(self, prog_name):
parser = super(DeleteProject, self).get_parser(prog_name)
parser.add_argument(
@@ -118,7 +110,6 @@ class DeleteProject(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -131,11 +122,9 @@ class DeleteProject(command.Command):
return
-class ListProject(lister.Lister):
+class ListProject(command.Lister):
"""List projects"""
- log = logging.getLogger(__name__ + '.ListProject')
-
def get_parser(self, prog_name):
parser = super(ListProject, self).get_parser(prog_name)
parser.add_argument(
@@ -146,7 +135,6 @@ class ListProject(lister.Lister):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
if parsed_args.long:
columns = ('ID', 'Name', 'Description', 'Enabled')
@@ -163,8 +151,6 @@ class ListProject(lister.Lister):
class SetProject(command.Command):
"""Set project properties"""
- log = logging.getLogger(__name__ + '.SetProject')
-
def get_parser(self, prog_name):
parser = super(SetProject, self).get_parser(prog_name)
parser.add_argument(
@@ -202,7 +188,6 @@ class SetProject(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -240,11 +225,9 @@ class SetProject(command.Command):
return
-class ShowProject(show.ShowOne):
+class ShowProject(command.ShowOne):
"""Display project details"""
- log = logging.getLogger(__name__ + '.ShowProject')
-
def get_parser(self, prog_name):
parser = super(ShowProject, self).get_parser(prog_name)
parser.add_argument(
@@ -253,7 +236,6 @@ class ShowProject(show.ShowOne):
help=_('Project to display (name or ID)'))
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -303,8 +285,6 @@ class ShowProject(show.ShowOne):
class UnsetProject(command.Command):
"""Unset project properties"""
- log = logging.getLogger(__name__ + '.UnsetProject')
-
def get_parser(self, prog_name):
parser = super(UnsetProject, self).get_parser(prog_name)
parser.add_argument(
@@ -323,7 +303,6 @@ class UnsetProject(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
project = utils.find_resource(
diff --git a/openstackclient/identity/v2_0/role.py b/openstackclient/identity/v2_0/role.py
index cab6b4a5..892ce006 100644
--- a/openstackclient/identity/v2_0/role.py
+++ b/openstackclient/identity/v2_0/role.py
@@ -15,24 +15,19 @@
"""Identity v2 Role action implementations"""
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
from keystoneauth1 import exceptions as ks_exc
+from openstackclient.common import command
from openstackclient.common import exceptions
from openstackclient.common import utils
from openstackclient.i18n import _ # noqa
-class AddRole(show.ShowOne):
+class AddRole(command.ShowOne):
"""Add role to project:user"""
- log = logging.getLogger(__name__ + '.AddRole')
-
def get_parser(self, prog_name):
parser = super(AddRole, self).get_parser(prog_name)
parser.add_argument(
@@ -54,7 +49,6 @@ class AddRole(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
role = utils.find_resource(identity_client.roles, parsed_args.role)
@@ -74,11 +68,9 @@ class AddRole(show.ShowOne):
return zip(*sorted(six.iteritems(info)))
-class CreateRole(show.ShowOne):
+class CreateRole(command.ShowOne):
"""Create new role"""
- log = logging.getLogger(__name__ + '.CreateRole')
-
def get_parser(self, prog_name):
parser = super(CreateRole, self).get_parser(prog_name)
parser.add_argument(
@@ -93,7 +85,6 @@ class CreateRole(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
try:
@@ -116,8 +107,6 @@ class CreateRole(show.ShowOne):
class DeleteRole(command.Command):
"""Delete role(s)"""
- log = logging.getLogger(__name__ + '.DeleteRole')
-
def get_parser(self, prog_name):
parser = super(DeleteRole, self).get_parser(prog_name)
parser.add_argument(
@@ -128,7 +117,6 @@ class DeleteRole(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -141,11 +129,9 @@ class DeleteRole(command.Command):
return
-class ListRole(lister.Lister):
+class ListRole(command.Lister):
"""List roles"""
- log = logging.getLogger(__name__ + '.ListRole')
-
def get_parser(self, prog_name):
parser = super(ListRole, self).get_parser(prog_name)
parser.add_argument(
@@ -160,7 +146,6 @@ class ListRole(lister.Lister):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
auth_ref = self.app.client_manager.auth_ref
@@ -222,11 +207,9 @@ class ListRole(lister.Lister):
) for s in data))
-class ListUserRole(lister.Lister):
+class ListUserRole(command.Lister):
"""List user-role assignments"""
- log = logging.getLogger(__name__ + '.ListUserRole')
-
def get_parser(self, prog_name):
parser = super(ListUserRole, self).get_parser(prog_name)
parser.add_argument(
@@ -242,7 +225,6 @@ class ListUserRole(lister.Lister):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
auth_ref = self.app.client_manager.auth_ref
@@ -293,8 +275,6 @@ class ListUserRole(lister.Lister):
class RemoveRole(command.Command):
"""Remove role from project : user"""
- log = logging.getLogger(__name__ + '.RemoveRole')
-
def get_parser(self, prog_name):
parser = super(RemoveRole, self).get_parser(prog_name)
parser.add_argument(
@@ -316,7 +296,6 @@ class RemoveRole(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
role = utils.find_resource(identity_client.roles, parsed_args.role)
@@ -331,11 +310,9 @@ class RemoveRole(command.Command):
project.id)
-class ShowRole(show.ShowOne):
+class ShowRole(command.ShowOne):
"""Display role details"""
- log = logging.getLogger(__name__ + '.ShowRole')
-
def get_parser(self, prog_name):
parser = super(ShowRole, self).get_parser(prog_name)
parser.add_argument(
@@ -345,7 +322,6 @@ class ShowRole(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
role = utils.find_resource(identity_client.roles, parsed_args.role)
diff --git a/openstackclient/identity/v2_0/service.py b/openstackclient/identity/v2_0/service.py
index c9d48441..3af85d7d 100644
--- a/openstackclient/identity/v2_0/service.py
+++ b/openstackclient/identity/v2_0/service.py
@@ -16,24 +16,18 @@
"""Service action implementations"""
import argparse
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import exceptions
from openstackclient.common import utils
from openstackclient.i18n import _ # noqa
from openstackclient.identity import common
-class CreateService(show.ShowOne):
+class CreateService(command.ShowOne):
"""Create new service"""
- log = logging.getLogger(__name__ + '.CreateService')
-
def get_parser(self, prog_name):
parser = super(CreateService, self).get_parser(prog_name)
parser.add_argument(
@@ -59,7 +53,6 @@ class CreateService(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -95,8 +88,6 @@ class CreateService(show.ShowOne):
class DeleteService(command.Command):
"""Delete service"""
- log = logging.getLogger(__name__ + '.DeleteService')
-
def get_parser(self, prog_name):
parser = super(DeleteService, self).get_parser(prog_name)
parser.add_argument(
@@ -106,7 +97,6 @@ class DeleteService(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
service = common.find_service(identity_client, parsed_args.service)
@@ -114,11 +104,9 @@ class DeleteService(command.Command):
return
-class ListService(lister.Lister):
+class ListService(command.Lister):
"""List services"""
- log = logging.getLogger(__name__ + '.ListService')
-
def get_parser(self, prog_name):
parser = super(ListService, self).get_parser(prog_name)
parser.add_argument(
@@ -129,7 +117,6 @@ class ListService(lister.Lister):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
if parsed_args.long:
@@ -143,11 +130,9 @@ class ListService(lister.Lister):
)
-class ShowService(show.ShowOne):
+class ShowService(command.ShowOne):
"""Display service details"""
- log = logging.getLogger(__name__ + '.ShowService')
-
def get_parser(self, prog_name):
parser = super(ShowService, self).get_parser(prog_name)
parser.add_argument(
@@ -163,7 +148,6 @@ class ShowService(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
auth_ref = self.app.client_manager.auth_ref
diff --git a/openstackclient/identity/v2_0/token.py b/openstackclient/identity/v2_0/token.py
index 5fed58e5..db38fae8 100644
--- a/openstackclient/identity/v2_0/token.py
+++ b/openstackclient/identity/v2_0/token.py
@@ -15,26 +15,19 @@
"""Identity v2 Token action implementations"""
-import logging
import six
-from cliff import command
-from cliff import show
-
-from openstackclient.common import utils
+from openstackclient.common import command
from openstackclient.i18n import _ # noqa
-class IssueToken(show.ShowOne):
+class IssueToken(command.ShowOne):
"""Issue new token"""
- log = logging.getLogger(__name__ + '.IssueToken')
-
def get_parser(self, prog_name):
parser = super(IssueToken, self).get_parser(prog_name)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
token = self.app.client_manager.auth_ref.service_catalog.get_token()
@@ -45,8 +38,6 @@ class IssueToken(show.ShowOne):
class RevokeToken(command.Command):
"""Revoke existing token"""
- log = logging.getLogger(__name__ + '.RevokeToken')
-
def get_parser(self, prog_name):
parser = super(RevokeToken, self).get_parser(prog_name)
parser.add_argument(
@@ -57,7 +48,6 @@ class RevokeToken(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
identity_client = self.app.client_manager.identity
identity_client.tokens.delete(parsed_args.token)
diff --git a/openstackclient/identity/v2_0/user.py b/openstackclient/identity/v2_0/user.py
index e2b285bd..3d848737 100644
--- a/openstackclient/identity/v2_0/user.py
+++ b/openstackclient/identity/v2_0/user.py
@@ -15,23 +15,18 @@
"""Identity v2.0 User action implementations"""
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
from keystoneauth1 import exceptions as ks_exc
+from openstackclient.common import command
from openstackclient.common import utils
from openstackclient.i18n import _ # noqa
-class CreateUser(show.ShowOne):
+class CreateUser(command.ShowOne):
"""Create new user"""
- log = logging.getLogger(__name__ + '.CreateUser')
-
def get_parser(self, prog_name):
parser = super(CreateUser, self).get_parser(prog_name)
parser.add_argument(
@@ -78,7 +73,6 @@ class CreateUser(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -130,8 +124,6 @@ class CreateUser(show.ShowOne):
class DeleteUser(command.Command):
"""Delete user(s)"""
- log = logging.getLogger(__name__ + '.DeleteUser')
-
def get_parser(self, prog_name):
parser = super(DeleteUser, self).get_parser(prog_name)
parser.add_argument(
@@ -142,7 +134,6 @@ class DeleteUser(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -155,11 +146,9 @@ class DeleteUser(command.Command):
return
-class ListUser(lister.Lister):
+class ListUser(command.Lister):
"""List users"""
- log = logging.getLogger(__name__ + '.ListUser')
-
def get_parser(self, prog_name):
parser = super(ListUser, self).get_parser(prog_name)
parser.add_argument(
@@ -174,7 +163,6 @@ class ListUser(lister.Lister):
help=_('List additional fields in output'))
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -248,8 +236,6 @@ class ListUser(lister.Lister):
class SetUser(command.Command):
"""Set user properties"""
- log = logging.getLogger(__name__ + '.SetUser')
-
def get_parser(self, prog_name):
parser = super(SetUser, self).get_parser(prog_name)
parser.add_argument(
@@ -296,7 +282,6 @@ class SetUser(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -348,11 +333,9 @@ class SetUser(command.Command):
return
-class ShowUser(show.ShowOne):
+class ShowUser(command.ShowOne):
"""Display user details"""
- log = logging.getLogger(__name__ + '.ShowUser')
-
def get_parser(self, prog_name):
parser = super(ShowUser, self).get_parser(prog_name)
parser.add_argument(
@@ -362,7 +345,6 @@ class ShowUser(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
diff --git a/openstackclient/identity/v3/catalog.py b/openstackclient/identity/v3/catalog.py
index 76f7da51..795f5d5c 100644
--- a/openstackclient/identity/v3/catalog.py
+++ b/openstackclient/identity/v3/catalog.py
@@ -13,12 +13,9 @@
"""Identity v3 Service Catalog action implementations"""
-import logging
-
-from cliff import lister
-from cliff import show
import six
+from openstackclient.common import command
from openstackclient.common import utils
from openstackclient.i18n import _ # noqa
@@ -34,12 +31,9 @@ def _format_endpoints(eps=None):
return ret
-class ListCatalog(lister.Lister):
+class ListCatalog(command.Lister):
"""List services in the service catalog"""
- log = logging.getLogger(__name__ + '.ListCatalog')
-
- @utils.log_method(log)
def take_action(self, parsed_args):
# This is ugly because if auth hasn't happened yet we need
@@ -59,11 +53,9 @@ class ListCatalog(lister.Lister):
) for s in data))
-class ShowCatalog(show.ShowOne):
+class ShowCatalog(command.ShowOne):
"""Display service catalog details"""
- log = logging.getLogger(__name__ + '.ShowCatalog')
-
def get_parser(self, prog_name):
parser = super(ShowCatalog, self).get_parser(prog_name)
parser.add_argument(
@@ -73,7 +65,6 @@ class ShowCatalog(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
# This is ugly because if auth hasn't happened yet we need
diff --git a/openstackclient/identity/v3/consumer.py b/openstackclient/identity/v3/consumer.py
index 0a6ade67..72983988 100644
--- a/openstackclient/identity/v3/consumer.py
+++ b/openstackclient/identity/v3/consumer.py
@@ -15,22 +15,16 @@
"""Identity v3 Consumer action implementations"""
-import logging
import six
import sys
-from cliff import command
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import utils
-class CreateConsumer(show.ShowOne):
+class CreateConsumer(command.ShowOne):
"""Create new consumer"""
- log = logging.getLogger(__name__ + '.CreateConsumer')
-
def get_parser(self, prog_name):
parser = super(CreateConsumer, self).get_parser(prog_name)
parser.add_argument(
@@ -40,7 +34,6 @@ class CreateConsumer(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
consumer = identity_client.oauth1.consumers.create(
@@ -53,8 +46,6 @@ class CreateConsumer(show.ShowOne):
class DeleteConsumer(command.Command):
"""Delete consumer"""
- log = logging.getLogger(__name__ + '.DeleteConsumer')
-
def get_parser(self, prog_name):
parser = super(DeleteConsumer, self).get_parser(prog_name)
parser.add_argument(
@@ -64,7 +55,6 @@ class DeleteConsumer(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
consumer = utils.find_resource(
@@ -73,12 +63,9 @@ class DeleteConsumer(command.Command):
return
-class ListConsumer(lister.Lister):
+class ListConsumer(command.Lister):
"""List consumers"""
- log = logging.getLogger(__name__ + '.ListConsumer')
-
- @utils.log_method(log)
def take_action(self, parsed_args):
columns = ('ID', 'Description')
data = self.app.client_manager.identity.oauth1.consumers.list()
@@ -92,8 +79,6 @@ class ListConsumer(lister.Lister):
class SetConsumer(command.Command):
"""Set consumer properties"""
- log = logging.getLogger(__name__ + '.SetConsumer')
-
def get_parser(self, prog_name):
parser = super(SetConsumer, self).get_parser(prog_name)
parser.add_argument(
@@ -108,7 +93,6 @@ class SetConsumer(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
consumer = utils.find_resource(
@@ -126,11 +110,9 @@ class SetConsumer(command.Command):
return
-class ShowConsumer(show.ShowOne):
+class ShowConsumer(command.ShowOne):
"""Display consumer details"""
- log = logging.getLogger(__name__ + '.ShowConsumer')
-
def get_parser(self, prog_name):
parser = super(ShowConsumer, self).get_parser(prog_name)
parser.add_argument(
@@ -140,7 +122,6 @@ class ShowConsumer(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
consumer = utils.find_resource(
diff --git a/openstackclient/identity/v3/credential.py b/openstackclient/identity/v3/credential.py
index f22092d4..6208b320 100644
--- a/openstackclient/identity/v3/credential.py
+++ b/openstackclient/identity/v3/credential.py
@@ -15,21 +15,15 @@
"""Identity v3 Credential action implementations"""
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import utils
-class CreateCredential(show.ShowOne):
+class CreateCredential(command.ShowOne):
"""Create credential command"""
- log = logging.getLogger(__name__ + '.CreateCredential')
-
def get_parser(self, prog_name):
parser = super(CreateCredential, self).get_parser(prog_name)
parser.add_argument(
@@ -56,7 +50,6 @@ class CreateCredential(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
user_id = utils.find_resource(identity_client.users,
@@ -79,8 +72,6 @@ class CreateCredential(show.ShowOne):
class DeleteCredential(command.Command):
"""Delete credential command"""
- log = logging.getLogger(__name__ + '.DeleteCredential')
-
def get_parser(self, prog_name):
parser = super(DeleteCredential, self).get_parser(prog_name)
parser.add_argument(
@@ -90,19 +81,15 @@ class DeleteCredential(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
identity_client.credentials.delete(parsed_args.credential)
return
-class ListCredential(lister.Lister):
+class ListCredential(command.Lister):
"""List credential command"""
- log = logging.getLogger(__name__ + '.ListCredential')
-
- @utils.log_method(log)
def take_action(self, parsed_args):
columns = ('ID', 'Type', 'User ID', 'Blob', 'Project ID')
column_headers = ('ID', 'Type', 'User ID', 'Data', 'Project ID')
@@ -117,8 +104,6 @@ class ListCredential(lister.Lister):
class SetCredential(command.Command):
"""Set credential command"""
- log = logging.getLogger(__name__ + '.SetCredential')
-
def get_parser(self, prog_name):
parser = super(SetCredential, self).get_parser(prog_name)
parser.add_argument(
@@ -152,7 +137,6 @@ class SetCredential(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -174,11 +158,9 @@ class SetCredential(command.Command):
return
-class ShowCredential(show.ShowOne):
+class ShowCredential(command.ShowOne):
"""Show credential command"""
- log = logging.getLogger(__name__ + '.ShowCredential')
-
def get_parser(self, prog_name):
parser = super(ShowCredential, self).get_parser(prog_name)
parser.add_argument(
@@ -188,7 +170,6 @@ class ShowCredential(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
credential = utils.find_resource(identity_client.credentials,
diff --git a/openstackclient/identity/v3/domain.py b/openstackclient/identity/v3/domain.py
index 8278a300..cec967b8 100644
--- a/openstackclient/identity/v3/domain.py
+++ b/openstackclient/identity/v3/domain.py
@@ -15,24 +15,19 @@
"""Identity v3 Domain action implementations"""
-import logging
import six
import sys
-from cliff import command
-from cliff import lister
-from cliff import show
from keystoneauth1 import exceptions as ks_exc
+from openstackclient.common import command
from openstackclient.common import utils
from openstackclient.i18n import _ # noqa
-class CreateDomain(show.ShowOne):
+class CreateDomain(command.ShowOne):
"""Create new domain"""
- log = logging.getLogger(__name__ + '.CreateDomain')
-
def get_parser(self, prog_name):
parser = super(CreateDomain, self).get_parser(prog_name)
parser.add_argument(
@@ -63,7 +58,6 @@ class CreateDomain(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -92,8 +86,6 @@ class CreateDomain(show.ShowOne):
class DeleteDomain(command.Command):
"""Delete domain"""
- log = logging.getLogger(__name__ + '.DeleteDomain')
-
def get_parser(self, prog_name):
parser = super(DeleteDomain, self).get_parser(prog_name)
parser.add_argument(
@@ -103,7 +95,6 @@ class DeleteDomain(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
domain = utils.find_resource(identity_client.domains,
@@ -112,12 +103,9 @@ class DeleteDomain(command.Command):
return
-class ListDomain(lister.Lister):
+class ListDomain(command.Lister):
"""List domains"""
- log = logging.getLogger(__name__ + '.ListDomain')
-
- @utils.log_method(log)
def take_action(self, parsed_args):
columns = ('ID', 'Name', 'Enabled', 'Description')
data = self.app.client_manager.identity.domains.list()
@@ -131,8 +119,6 @@ class ListDomain(lister.Lister):
class SetDomain(command.Command):
"""Set domain properties"""
- log = logging.getLogger(__name__ + '.SetDomain')
-
def get_parser(self, prog_name):
parser = super(SetDomain, self).get_parser(prog_name)
parser.add_argument(
@@ -163,7 +149,6 @@ class SetDomain(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
domain = utils.find_resource(identity_client.domains,
@@ -186,11 +171,9 @@ class SetDomain(command.Command):
return
-class ShowDomain(show.ShowOne):
+class ShowDomain(command.ShowOne):
"""Display domain details"""
- log = logging.getLogger(__name__ + '.ShowDomain')
-
def get_parser(self, prog_name):
parser = super(ShowDomain, self).get_parser(prog_name)
parser.add_argument(
@@ -200,7 +183,6 @@ class ShowDomain(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
domain = utils.find_resource(identity_client.domains,
diff --git a/openstackclient/identity/v3/ec2creds.py b/openstackclient/identity/v3/ec2creds.py
index a12ee25e..777c0430 100644
--- a/openstackclient/identity/v3/ec2creds.py
+++ b/openstackclient/identity/v3/ec2creds.py
@@ -12,13 +12,9 @@
"""Identity v3 EC2 Credentials action implementations"""
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import utils
from openstackclient.i18n import _ # noqa
from openstackclient.identity import common
@@ -52,11 +48,9 @@ def _determine_ec2_user(parsed_args, client_manager):
return user
-class CreateEC2Creds(show.ShowOne):
+class CreateEC2Creds(command.ShowOne):
"""Create EC2 credentials"""
- log = logging.getLogger(__name__ + ".CreateEC2Creds")
-
def get_parser(self, prog_name):
parser = super(CreateEC2Creds, self).get_parser(prog_name)
parser.add_argument(
@@ -79,7 +73,6 @@ class CreateEC2Creds(show.ShowOne):
common.add_project_domain_option_to_parser(parser)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
client_manager = self.app.client_manager
@@ -119,8 +112,6 @@ class CreateEC2Creds(show.ShowOne):
class DeleteEC2Creds(command.Command):
"""Delete EC2 credentials"""
- log = logging.getLogger(__name__ + '.DeleteEC2Creds')
-
def get_parser(self, prog_name):
parser = super(DeleteEC2Creds, self).get_parser(prog_name)
parser.add_argument(
@@ -136,18 +127,15 @@ class DeleteEC2Creds(command.Command):
common.add_user_domain_option_to_parser(parser)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
client_manager = self.app.client_manager
user = _determine_ec2_user(parsed_args, client_manager)
client_manager.identity.ec2.delete(user, parsed_args.access_key)
-class ListEC2Creds(lister.Lister):
+class ListEC2Creds(command.Lister):
"""List EC2 credentials"""
- log = logging.getLogger(__name__ + '.ListEC2Creds')
-
def get_parser(self, prog_name):
parser = super(ListEC2Creds, self).get_parser(prog_name)
parser.add_argument(
@@ -158,7 +146,6 @@ class ListEC2Creds(lister.Lister):
common.add_user_domain_option_to_parser(parser)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
client_manager = self.app.client_manager
user = _determine_ec2_user(parsed_args, client_manager)
@@ -174,11 +161,9 @@ class ListEC2Creds(lister.Lister):
) for s in data))
-class ShowEC2Creds(show.ShowOne):
+class ShowEC2Creds(command.ShowOne):
"""Display EC2 credentials details"""
- log = logging.getLogger(__name__ + '.ShowEC2Creds')
-
def get_parser(self, prog_name):
parser = super(ShowEC2Creds, self).get_parser(prog_name)
parser.add_argument(
@@ -194,7 +179,6 @@ class ShowEC2Creds(show.ShowOne):
common.add_user_domain_option_to_parser(parser)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
client_manager = self.app.client_manager
user = _determine_ec2_user(parsed_args, client_manager)
diff --git a/openstackclient/identity/v3/endpoint.py b/openstackclient/identity/v3/endpoint.py
index 3d1c6f54..1eff3b3b 100644
--- a/openstackclient/identity/v3/endpoint.py
+++ b/openstackclient/identity/v3/endpoint.py
@@ -15,14 +15,10 @@
"""Identity v3 Endpoint action implementations"""
-import logging
import six
import sys
-from cliff import command
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import utils
from openstackclient.identity import common
@@ -34,11 +30,9 @@ def get_service_name(service):
return ''
-class CreateEndpoint(show.ShowOne):
+class CreateEndpoint(command.ShowOne):
"""Create new endpoint"""
- log = logging.getLogger(__name__ + '.CreateEndpoint')
-
def get_parser(self, prog_name):
parser = super(CreateEndpoint, self).get_parser(prog_name)
parser.add_argument(
@@ -78,7 +72,6 @@ class CreateEndpoint(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
service = common.find_service(identity_client, parsed_args.service)
@@ -102,8 +95,6 @@ class CreateEndpoint(show.ShowOne):
class DeleteEndpoint(command.Command):
"""Delete endpoint"""
- log = logging.getLogger(__name__ + '.DeleteEndpoint')
-
def get_parser(self, prog_name):
parser = super(DeleteEndpoint, self).get_parser(prog_name)
parser.add_argument(
@@ -113,7 +104,6 @@ class DeleteEndpoint(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
endpoint_id = utils.find_resource(identity_client.endpoints,
@@ -122,11 +112,9 @@ class DeleteEndpoint(command.Command):
return
-class ListEndpoint(lister.Lister):
+class ListEndpoint(command.Lister):
"""List endpoints"""
- log = logging.getLogger(__name__ + '.ListEndpoint')
-
def get_parser(self, prog_name):
parser = super(ListEndpoint, self).get_parser(prog_name)
parser.add_argument(
@@ -147,7 +135,6 @@ class ListEndpoint(lister.Lister):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
columns = ('ID', 'Region', 'Service Name', 'Service Type',
@@ -176,8 +163,6 @@ class ListEndpoint(lister.Lister):
class SetEndpoint(command.Command):
"""Set endpoint properties"""
- log = logging.getLogger(__name__ + '.SetEndpoint')
-
def get_parser(self, prog_name):
parser = super(SetEndpoint, self).get_parser(prog_name)
parser.add_argument(
@@ -221,7 +206,6 @@ class SetEndpoint(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
endpoint = utils.find_resource(identity_client.endpoints,
@@ -256,11 +240,9 @@ class SetEndpoint(command.Command):
return
-class ShowEndpoint(show.ShowOne):
+class ShowEndpoint(command.ShowOne):
"""Display endpoint details"""
- log = logging.getLogger(__name__ + '.ShowEndpoint')
-
def get_parser(self, prog_name):
parser = super(ShowEndpoint, self).get_parser(prog_name)
parser.add_argument(
@@ -270,7 +252,6 @@ class ShowEndpoint(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
endpoint = utils.find_resource(identity_client.endpoints,
diff --git a/openstackclient/identity/v3/federation_protocol.py b/openstackclient/identity/v3/federation_protocol.py
index 20877fcd..2d7ab15d 100644
--- a/openstackclient/identity/v3/federation_protocol.py
+++ b/openstackclient/identity/v3/federation_protocol.py
@@ -14,21 +14,15 @@
"""Identity v3 Protocols actions implementations"""
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import utils
-class CreateProtocol(show.ShowOne):
+class CreateProtocol(command.ShowOne):
"""Create new federation protocol"""
- log = logging.getLogger(__name__ + 'CreateProtocol')
-
def get_parser(self, prog_name):
parser = super(CreateProtocol, self).get_parser(prog_name)
parser.add_argument(
@@ -50,7 +44,6 @@ class CreateProtocol(show.ShowOne):
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
protocol = identity_client.federation.protocols.create(
@@ -71,8 +64,6 @@ class CreateProtocol(show.ShowOne):
class DeleteProtocol(command.Command):
"""Delete federation protocol"""
- log = logging.getLogger(__name__ + '.DeleteProtocol')
-
def get_parser(self, prog_name):
parser = super(DeleteProtocol, self).get_parser(prog_name)
parser.add_argument(
@@ -88,7 +79,6 @@ class DeleteProtocol(command.Command):
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
identity_client.federation.protocols.delete(
@@ -96,11 +86,9 @@ class DeleteProtocol(command.Command):
return
-class ListProtocols(lister.Lister):
+class ListProtocols(command.Lister):
"""List federation protocols"""
- log = logging.getLogger(__name__ + '.ListProtocols')
-
def get_parser(self, prog_name):
parser = super(ListProtocols, self).get_parser(prog_name)
parser.add_argument(
@@ -126,8 +114,6 @@ class ListProtocols(lister.Lister):
class SetProtocol(command.Command):
"""Set federation protocol properties"""
- log = logging.getLogger(__name__ + '.SetProtocol')
-
def get_parser(self, prog_name):
parser = super(SetProtocol, self).get_parser(prog_name)
parser.add_argument(
@@ -166,11 +152,9 @@ class SetProtocol(command.Command):
return zip(*sorted(six.iteritems(info)))
-class ShowProtocol(show.ShowOne):
+class ShowProtocol(command.ShowOne):
"""Display federation protocol details"""
- log = logging.getLogger(__name__ + '.ShowProtocol')
-
def get_parser(self, prog_name):
parser = super(ShowProtocol, self).get_parser(prog_name)
parser.add_argument(
diff --git a/openstackclient/identity/v3/group.py b/openstackclient/identity/v3/group.py
index d503a6b8..b3d893ce 100644
--- a/openstackclient/identity/v3/group.py
+++ b/openstackclient/identity/v3/group.py
@@ -15,15 +15,12 @@
"""Group action implementations"""
-import logging
import six
import sys
-from cliff import command
-from cliff import lister
-from cliff import show
from keystoneauth1 import exceptions as ks_exc
+from openstackclient.common import command
from openstackclient.common import utils
from openstackclient.i18n import _ # noqa
from openstackclient.identity import common
@@ -32,8 +29,6 @@ from openstackclient.identity import common
class AddUserToGroup(command.Command):
"""Add user to group"""
- log = logging.getLogger(__name__ + '.AddUserToGroup')
-
def get_parser(self, prog_name):
parser = super(AddUserToGroup, self).get_parser(prog_name)
parser.add_argument(
@@ -50,7 +45,6 @@ class AddUserToGroup(command.Command):
common.add_user_domain_option_to_parser(parser)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -74,8 +68,6 @@ class AddUserToGroup(command.Command):
class CheckUserInGroup(command.Command):
"""Check user membership in group"""
- log = logging.getLogger(__name__ + '.CheckUserInGroup')
-
def get_parser(self, prog_name):
parser = super(CheckUserInGroup, self).get_parser(prog_name)
parser.add_argument(
@@ -92,7 +84,6 @@ class CheckUserInGroup(command.Command):
common.add_user_domain_option_to_parser(parser)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -113,11 +104,9 @@ class CheckUserInGroup(command.Command):
(parsed_args.user, parsed_args.group))
-class CreateGroup(show.ShowOne):
+class CreateGroup(command.ShowOne):
"""Create new group"""
- log = logging.getLogger(__name__ + '.CreateGroup')
-
def get_parser(self, prog_name):
parser = super(CreateGroup, self).get_parser(prog_name)
parser.add_argument(
@@ -142,7 +131,6 @@ class CreateGroup(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -172,8 +160,6 @@ class CreateGroup(show.ShowOne):
class DeleteGroup(command.Command):
"""Delete group(s)"""
- log = logging.getLogger(__name__ + '.DeleteGroup')
-
def get_parser(self, prog_name):
parser = super(DeleteGroup, self).get_parser(prog_name)
parser.add_argument(
@@ -188,7 +174,6 @@ class DeleteGroup(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -200,11 +185,9 @@ class DeleteGroup(command.Command):
return
-class ListGroup(lister.Lister):
+class ListGroup(command.Lister):
"""List groups"""
- log = logging.getLogger(__name__ + '.ListGroup')
-
def get_parser(self, prog_name):
parser = super(ListGroup, self).get_parser(prog_name)
parser.add_argument(
@@ -226,7 +209,6 @@ class ListGroup(lister.Lister):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -266,8 +248,6 @@ class ListGroup(lister.Lister):
class RemoveUserFromGroup(command.Command):
"""Remove user from group"""
- log = logging.getLogger(__name__ + '.RemoveUserFromGroup')
-
def get_parser(self, prog_name):
parser = super(RemoveUserFromGroup, self).get_parser(prog_name)
parser.add_argument(
@@ -284,7 +264,6 @@ class RemoveUserFromGroup(command.Command):
common.add_user_domain_option_to_parser(parser)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -308,8 +287,6 @@ class RemoveUserFromGroup(command.Command):
class SetGroup(command.Command):
"""Set group properties"""
- log = logging.getLogger(__name__ + '.SetGroup')
-
def get_parser(self, prog_name):
parser = super(SetGroup, self).get_parser(prog_name)
parser.add_argument(
@@ -331,7 +308,6 @@ class SetGroup(command.Command):
help='New group description')
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
group = common.find_group(identity_client, parsed_args.group,
@@ -349,11 +325,9 @@ class SetGroup(command.Command):
return
-class ShowGroup(show.ShowOne):
+class ShowGroup(command.ShowOne):
"""Display group details"""
- log = logging.getLogger(__name__ + '.ShowGroup')
-
def get_parser(self, prog_name):
parser = super(ShowGroup, self).get_parser(prog_name)
parser.add_argument(
@@ -368,7 +342,6 @@ class ShowGroup(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
diff --git a/openstackclient/identity/v3/identity_provider.py b/openstackclient/identity/v3/identity_provider.py
index 4e086b68..0ff8acb9 100644
--- a/openstackclient/identity/v3/identity_provider.py
+++ b/openstackclient/identity/v3/identity_provider.py
@@ -13,21 +13,15 @@
"""Identity v3 IdentityProvider action implementations"""
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import utils
-class CreateIdentityProvider(show.ShowOne):
+class CreateIdentityProvider(command.ShowOne):
"""Create new identity provider"""
- log = logging.getLogger(__name__ + '.CreateIdentityProvider')
-
def get_parser(self, prog_name):
parser = super(CreateIdentityProvider, self).get_parser(prog_name)
parser.add_argument(
@@ -70,7 +64,6 @@ class CreateIdentityProvider(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
if parsed_args.remote_id_file:
@@ -96,8 +89,6 @@ class CreateIdentityProvider(show.ShowOne):
class DeleteIdentityProvider(command.Command):
"""Delete identity provider"""
- log = logging.getLogger(__name__ + '.DeleteIdentityProvider')
-
def get_parser(self, prog_name):
parser = super(DeleteIdentityProvider, self).get_parser(prog_name)
parser.add_argument(
@@ -107,7 +98,6 @@ class DeleteIdentityProvider(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
identity_client.federation.identity_providers.delete(
@@ -115,12 +105,9 @@ class DeleteIdentityProvider(command.Command):
return
-class ListIdentityProvider(lister.Lister):
+class ListIdentityProvider(command.Lister):
"""List identity providers"""
- log = logging.getLogger(__name__ + '.ListIdentityProvider')
-
- @utils.log_method(log)
def take_action(self, parsed_args):
columns = ('ID', 'Enabled', 'Description')
identity_client = self.app.client_manager.identity
@@ -135,8 +122,6 @@ class ListIdentityProvider(lister.Lister):
class SetIdentityProvider(command.Command):
"""Set identity provider properties"""
- log = logging.getLogger(__name__ + '.SetIdentityProvider')
-
def get_parser(self, prog_name):
parser = super(SetIdentityProvider, self).get_parser(prog_name)
parser.add_argument(
@@ -176,7 +161,6 @@ class SetIdentityProvider(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
federation_client = self.app.client_manager.identity.federation
@@ -215,11 +199,9 @@ class SetIdentityProvider(command.Command):
return zip(*sorted(six.iteritems(identity_provider._info)))
-class ShowIdentityProvider(show.ShowOne):
+class ShowIdentityProvider(command.ShowOne):
"""Display identity provider details"""
- log = logging.getLogger(__name__ + '.ShowIdentityProvider')
-
def get_parser(self, prog_name):
parser = super(ShowIdentityProvider, self).get_parser(prog_name)
parser.add_argument(
@@ -229,7 +211,6 @@ class ShowIdentityProvider(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
idp = utils.find_resource(
diff --git a/openstackclient/identity/v3/mapping.py b/openstackclient/identity/v3/mapping.py
index c79331ec..422d66bc 100644
--- a/openstackclient/identity/v3/mapping.py
+++ b/openstackclient/identity/v3/mapping.py
@@ -16,13 +16,10 @@
"""Identity v3 federation mapping action implementations"""
import json
-import logging
-from cliff import command
-from cliff import lister
-from cliff import show
import six
+from openstackclient.common import command
from openstackclient.common import exceptions
from openstackclient.common import utils
@@ -79,11 +76,9 @@ class _RulesReader(object):
return rules
-class CreateMapping(show.ShowOne, _RulesReader):
+class CreateMapping(command.ShowOne, _RulesReader):
"""Create new mapping"""
- log = logging.getLogger(__name__ + '.CreateMapping')
-
def get_parser(self, prog_name):
parser = super(CreateMapping, self).get_parser(prog_name)
parser.add_argument(
@@ -99,7 +94,6 @@ class CreateMapping(show.ShowOne, _RulesReader):
return parser
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
identity_client = self.app.client_manager.identity
rules = self._read_rules(parsed_args.rules)
@@ -114,8 +108,6 @@ class CreateMapping(show.ShowOne, _RulesReader):
class DeleteMapping(command.Command):
"""Delete mapping"""
- log = logging.getLogger(__name__ + '.DeleteMapping')
-
def get_parser(self, prog_name):
parser = super(DeleteMapping, self).get_parser(prog_name)
parser.add_argument(
@@ -126,19 +118,16 @@ class DeleteMapping(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
identity_client = self.app.client_manager.identity
identity_client.federation.mappings.delete(parsed_args.mapping)
return
-class ListMapping(lister.Lister):
+class ListMapping(command.Lister):
"""List mappings"""
- log = logging.getLogger(__name__ + '.ListMapping')
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
# NOTE(marek-denis): Since rules can be long and tedious I have decided
# to only list ids of the mappings. If somebody wants to check the
# rules, (s)he should show specific ones.
@@ -152,8 +141,6 @@ class ListMapping(lister.Lister):
class SetMapping(command.Command, _RulesReader):
"""Set mapping properties"""
- log = logging.getLogger(__name__ + '.SetMapping')
-
def get_parser(self, prog_name):
parser = super(SetMapping, self).get_parser(prog_name)
parser.add_argument(
@@ -169,7 +156,6 @@ class SetMapping(command.Command, _RulesReader):
return parser
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
identity_client = self.app.client_manager.identity
if not parsed_args.rules:
@@ -186,11 +172,9 @@ class SetMapping(command.Command, _RulesReader):
return zip(*sorted(six.iteritems(mapping._info)))
-class ShowMapping(show.ShowOne):
+class ShowMapping(command.ShowOne):
"""Display mapping details"""
- log = logging.getLogger(__name__ + '.ShowMapping')
-
def get_parser(self, prog_name):
parser = super(ShowMapping, self).get_parser(prog_name)
parser.add_argument(
@@ -201,7 +185,6 @@ class ShowMapping(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
identity_client = self.app.client_manager.identity
mapping = identity_client.federation.mappings.get(parsed_args.mapping)
diff --git a/openstackclient/identity/v3/policy.py b/openstackclient/identity/v3/policy.py
index 9da94863..503df374 100644
--- a/openstackclient/identity/v3/policy.py
+++ b/openstackclient/identity/v3/policy.py
@@ -15,22 +15,16 @@
"""Identity v3 Policy action implementations"""
-import logging
import six
import sys
-from cliff import command
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import utils
-class CreatePolicy(show.ShowOne):
+class CreatePolicy(command.ShowOne):
"""Create new policy"""
- log = logging.getLogger(__name__ + '.CreatePolicy')
-
def get_parser(self, prog_name):
parser = super(CreatePolicy, self).get_parser(prog_name)
parser.add_argument(
@@ -47,7 +41,6 @@ class CreatePolicy(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
blob = utils.read_blob_file_contents(parsed_args.rules)
@@ -64,8 +57,6 @@ class CreatePolicy(show.ShowOne):
class DeletePolicy(command.Command):
"""Delete policy"""
- log = logging.getLogger(__name__ + '.DeletePolicy')
-
def get_parser(self, prog_name):
parser = super(DeletePolicy, self).get_parser(prog_name)
parser.add_argument(
@@ -75,18 +66,15 @@ class DeletePolicy(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
identity_client.policies.delete(parsed_args.policy)
return
-class ListPolicy(lister.Lister):
+class ListPolicy(command.Lister):
"""List policies"""
- log = logging.getLogger(__name__ + '.ListPolicy')
-
def get_parser(self, prog_name):
parser = super(ListPolicy, self).get_parser(prog_name)
parser.add_argument(
@@ -97,7 +85,6 @@ class ListPolicy(lister.Lister):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
if parsed_args.long:
columns = ('ID', 'Type', 'Blob')
@@ -116,8 +103,6 @@ class ListPolicy(lister.Lister):
class SetPolicy(command.Command):
"""Set policy properties"""
- log = logging.getLogger(__name__ + '.SetPolicy')
-
def get_parser(self, prog_name):
parser = super(SetPolicy, self).get_parser(prog_name)
parser.add_argument(
@@ -137,7 +122,6 @@ class SetPolicy(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
blob = None
@@ -158,11 +142,9 @@ class SetPolicy(command.Command):
return
-class ShowPolicy(show.ShowOne):
+class ShowPolicy(command.ShowOne):
"""Display policy details"""
- log = logging.getLogger(__name__ + '.ShowPolicy')
-
def get_parser(self, prog_name):
parser = super(ShowPolicy, self).get_parser(prog_name)
parser.add_argument(
@@ -172,7 +154,6 @@ class ShowPolicy(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
policy = utils.find_resource(identity_client.policies,
diff --git a/openstackclient/identity/v3/project.py b/openstackclient/identity/v3/project.py
index 22745aa4..61db8614 100644
--- a/openstackclient/identity/v3/project.py
+++ b/openstackclient/identity/v3/project.py
@@ -15,25 +15,20 @@
"""Project action implementations"""
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
from keystoneauth1 import exceptions as ks_exc
+from openstackclient.common import command
from openstackclient.common import parseractions
from openstackclient.common import utils
from openstackclient.i18n import _ # noqa
from openstackclient.identity import common
-class CreateProject(show.ShowOne):
+class CreateProject(command.ShowOne):
"""Create new project"""
- log = logging.getLogger(__name__ + '.CreateProject')
-
def get_parser(self, prog_name):
parser = super(CreateProject, self).get_parser(prog_name)
parser.add_argument(
@@ -81,7 +76,6 @@ class CreateProject(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -129,8 +123,6 @@ class CreateProject(show.ShowOne):
class DeleteProject(command.Command):
"""Delete project(s)"""
- log = logging.getLogger(__name__ + '.DeleteProject')
-
def get_parser(self, prog_name):
parser = super(DeleteProject, self).get_parser(prog_name)
parser.add_argument(
@@ -146,7 +138,6 @@ class DeleteProject(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -165,11 +156,9 @@ class DeleteProject(command.Command):
return
-class ListProject(lister.Lister):
+class ListProject(command.Lister):
"""List projects"""
- log = logging.getLogger(__name__ + '.ListProject')
-
def get_parser(self, prog_name):
parser = super(ListProject, self).get_parser(prog_name)
parser.add_argument(
@@ -190,7 +179,6 @@ class ListProject(lister.Lister):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
if parsed_args.long:
@@ -227,8 +215,6 @@ class ListProject(lister.Lister):
class SetProject(command.Command):
"""Set project properties"""
- log = logging.getLogger(__name__ + '.SetProject')
-
def get_parser(self, prog_name):
parser = super(SetProject, self).get_parser(prog_name)
parser.add_argument(
@@ -271,7 +257,6 @@ class SetProject(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -302,11 +287,9 @@ class SetProject(command.Command):
return
-class ShowProject(show.ShowOne):
+class ShowProject(command.ShowOne):
"""Display project details"""
- log = logging.getLogger(__name__ + '.ShowProject')
-
def get_parser(self, prog_name):
parser = super(ShowProject, self).get_parser(prog_name)
parser.add_argument(
@@ -333,7 +316,6 @@ class ShowProject(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
diff --git a/openstackclient/identity/v3/region.py b/openstackclient/identity/v3/region.py
index 1ff0b8c0..1e15fd20 100644
--- a/openstackclient/identity/v3/region.py
+++ b/openstackclient/identity/v3/region.py
@@ -13,22 +13,16 @@
"""Identity v3 Region action implementations"""
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import utils
from openstackclient.i18n import _ # noqa
-class CreateRegion(show.ShowOne):
+class CreateRegion(command.ShowOne):
"""Create new region"""
- log = logging.getLogger(__name__ + '.CreateRegion')
-
def get_parser(self, prog_name):
parser = super(CreateRegion, self).get_parser(prog_name)
# NOTE(stevemar): The API supports an optional region ID, but that
@@ -50,7 +44,6 @@ class CreateRegion(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -69,8 +62,6 @@ class CreateRegion(show.ShowOne):
class DeleteRegion(command.Command):
"""Delete region"""
- log = logging.getLogger(__name__ + '.DeleteRegion')
-
def get_parser(self, prog_name):
parser = super(DeleteRegion, self).get_parser(prog_name)
parser.add_argument(
@@ -80,7 +71,6 @@ class DeleteRegion(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -88,11 +78,9 @@ class DeleteRegion(command.Command):
return
-class ListRegion(lister.Lister):
+class ListRegion(command.Lister):
"""List regions"""
- log = logging.getLogger(__name__ + '.ListRegion')
-
def get_parser(self, prog_name):
parser = super(ListRegion, self).get_parser(prog_name)
parser.add_argument(
@@ -102,7 +90,6 @@ class ListRegion(lister.Lister):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -124,8 +111,6 @@ class ListRegion(lister.Lister):
class SetRegion(command.Command):
"""Set region properties"""
- log = logging.getLogger(__name__ + '.SetRegion')
-
def get_parser(self, prog_name):
parser = super(SetRegion, self).get_parser(prog_name)
parser.add_argument(
@@ -145,7 +130,6 @@ class SetRegion(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -162,11 +146,9 @@ class SetRegion(command.Command):
return
-class ShowRegion(show.ShowOne):
+class ShowRegion(command.ShowOne):
"""Display region details"""
- log = logging.getLogger(__name__ + '.ShowRegion')
-
def get_parser(self, prog_name):
parser = super(ShowRegion, self).get_parser(prog_name)
parser.add_argument(
@@ -176,7 +158,6 @@ class ShowRegion(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
diff --git a/openstackclient/identity/v3/role.py b/openstackclient/identity/v3/role.py
index 66f18964..4cced611 100644
--- a/openstackclient/identity/v3/role.py
+++ b/openstackclient/identity/v3/role.py
@@ -15,15 +15,12 @@
"""Identity v3 Role action implementations"""
-import logging
import six
import sys
-from cliff import command
-from cliff import lister
-from cliff import show
from keystoneauth1 import exceptions as ks_exc
+from openstackclient.common import command
from openstackclient.common import utils
from openstackclient.i18n import _ # noqa
from openstackclient.identity import common
@@ -110,8 +107,6 @@ def _process_identity_and_resource_options(parsed_args,
class AddRole(command.Command):
"""Adds a role to a user or group on a domain or project"""
- log = logging.getLogger(__name__ + '.AddRole')
-
def get_parser(self, prog_name):
parser = super(AddRole, self).get_parser(prog_name)
parser.add_argument(
@@ -122,7 +117,6 @@ class AddRole(command.Command):
_add_identity_and_resource_options_to_parser(parser)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -147,11 +141,9 @@ class AddRole(command.Command):
return
-class CreateRole(show.ShowOne):
+class CreateRole(command.ShowOne):
"""Create new role"""
- log = logging.getLogger(__name__ + '.CreateRole')
-
def get_parser(self, prog_name):
parser = super(CreateRole, self).get_parser(prog_name)
parser.add_argument(
@@ -166,7 +158,6 @@ class CreateRole(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -187,8 +178,6 @@ class CreateRole(show.ShowOne):
class DeleteRole(command.Command):
"""Delete role(s)"""
- log = logging.getLogger(__name__ + '.DeleteRole')
-
def get_parser(self, prog_name):
parser = super(DeleteRole, self).get_parser(prog_name)
parser.add_argument(
@@ -199,7 +188,6 @@ class DeleteRole(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -212,18 +200,15 @@ class DeleteRole(command.Command):
return
-class ListRole(lister.Lister):
+class ListRole(command.Lister):
"""List roles"""
- log = logging.getLogger(__name__ + '.ListRole')
-
def get_parser(self, prog_name):
parser = super(ListRole, self).get_parser(prog_name)
_add_identity_and_resource_options_to_parser(parser)
return parser
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
identity_client = self.app.client_manager.identity
if parsed_args.user:
@@ -318,8 +303,6 @@ class ListRole(lister.Lister):
class RemoveRole(command.Command):
"""Remove role from domain/project : user/group"""
- log = logging.getLogger(__name__ + '.RemoveRole')
-
def get_parser(self, prog_name):
parser = super(RemoveRole, self).get_parser(prog_name)
parser.add_argument(
@@ -330,7 +313,6 @@ class RemoveRole(command.Command):
_add_identity_and_resource_options_to_parser(parser)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -357,8 +339,6 @@ class RemoveRole(command.Command):
class SetRole(command.Command):
"""Set role properties"""
- log = logging.getLogger(__name__ + '.SetRole')
-
def get_parser(self, prog_name):
parser = super(SetRole, self).get_parser(prog_name)
parser.add_argument(
@@ -373,7 +353,6 @@ class SetRole(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -389,11 +368,9 @@ class SetRole(command.Command):
return
-class ShowRole(show.ShowOne):
+class ShowRole(command.ShowOne):
"""Display role details"""
- log = logging.getLogger(__name__ + '.ShowRole')
-
def get_parser(self, prog_name):
parser = super(ShowRole, self).get_parser(prog_name)
parser.add_argument(
@@ -403,7 +380,6 @@ class ShowRole(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
diff --git a/openstackclient/identity/v3/role_assignment.py b/openstackclient/identity/v3/role_assignment.py
index 771afeb2..e2b0fe1f 100644
--- a/openstackclient/identity/v3/role_assignment.py
+++ b/openstackclient/identity/v3/role_assignment.py
@@ -13,19 +13,14 @@
"""Identity v3 Assignment action implementations """
-import logging
-
-from cliff import lister
-
+from openstackclient.common import command
from openstackclient.common import utils
from openstackclient.identity import common
-class ListRoleAssignment(lister.Lister):
+class ListRoleAssignment(command.Lister):
"""List role assignments"""
- log = logging.getLogger(__name__ + '.ListRoleAssignment')
-
def get_parser(self, prog_name):
parser = super(ListRoleAssignment, self).get_parser(prog_name)
parser.add_argument(
@@ -77,7 +72,6 @@ class ListRoleAssignment(lister.Lister):
assignment.project, assignment.domain, assignment.inherited)
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
identity_client = self.app.client_manager.identity
role = None
@@ -120,7 +114,6 @@ class ListRoleAssignment(lister.Lister):
include_names = True if parsed_args.names else False
effective = True if parsed_args.effective else False
- self.log.debug('take_action(%s)' % parsed_args)
columns = ('Role', 'User', 'Group', 'Project', 'Domain', 'Inherited')
inherited_to = 'projects' if parsed_args.inherited else None
diff --git a/openstackclient/identity/v3/service.py b/openstackclient/identity/v3/service.py
index 85081aa7..42117c8d 100644
--- a/openstackclient/identity/v3/service.py
+++ b/openstackclient/identity/v3/service.py
@@ -15,22 +15,16 @@
"""Identity v3 Service action implementations"""
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import utils
from openstackclient.identity import common
-class CreateService(show.ShowOne):
+class CreateService(command.ShowOne):
"""Create new service"""
- log = logging.getLogger(__name__ + '.CreateService')
-
def get_parser(self, prog_name):
parser = super(CreateService, self).get_parser(prog_name)
parser.add_argument(
@@ -61,7 +55,6 @@ class CreateService(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -83,8 +76,6 @@ class CreateService(show.ShowOne):
class DeleteService(command.Command):
"""Delete service"""
- log = logging.getLogger(__name__ + '.DeleteService')
-
def get_parser(self, prog_name):
parser = super(DeleteService, self).get_parser(prog_name)
parser.add_argument(
@@ -94,7 +85,6 @@ class DeleteService(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -104,11 +94,9 @@ class DeleteService(command.Command):
return
-class ListService(lister.Lister):
+class ListService(command.Lister):
"""List services"""
- log = logging.getLogger(__name__ + '.ListService')
-
def get_parser(self, prog_name):
parser = super(ListService, self).get_parser(prog_name)
parser.add_argument(
@@ -119,7 +107,6 @@ class ListService(lister.Lister):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
if parsed_args.long:
@@ -136,8 +123,6 @@ class ListService(lister.Lister):
class SetService(command.Command):
"""Set service properties"""
- log = logging.getLogger(__name__ + '.SetService')
-
def get_parser(self, prog_name):
parser = super(SetService, self).get_parser(prog_name)
parser.add_argument(
@@ -173,7 +158,6 @@ class SetService(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -205,11 +189,9 @@ class SetService(command.Command):
return
-class ShowService(show.ShowOne):
+class ShowService(command.ShowOne):
"""Display service details"""
- log = logging.getLogger(__name__ + '.ShowService')
-
def get_parser(self, prog_name):
parser = super(ShowService, self).get_parser(prog_name)
parser.add_argument(
@@ -219,7 +201,6 @@ class ShowService(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
diff --git a/openstackclient/identity/v3/service_provider.py b/openstackclient/identity/v3/service_provider.py
index 838ad4a2..6016928c 100644
--- a/openstackclient/identity/v3/service_provider.py
+++ b/openstackclient/identity/v3/service_provider.py
@@ -13,22 +13,16 @@
"""Service Provider action implementations"""
-import logging
import six
import sys
-from cliff import command
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import utils
-class CreateServiceProvider(show.ShowOne):
+class CreateServiceProvider(command.ShowOne):
"""Create new service provider"""
- log = logging.getLogger(__name__ + '.CreateServiceProvider')
-
def get_parser(self, prog_name):
parser = super(CreateServiceProvider, self).get_parser(prog_name)
parser.add_argument(
@@ -73,7 +67,6 @@ class CreateServiceProvider(show.ShowOne):
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
service_client = self.app.client_manager.identity
sp = service_client.federation.service_providers.create(
@@ -90,8 +83,6 @@ class CreateServiceProvider(show.ShowOne):
class DeleteServiceProvider(command.Command):
"""Delete service provider"""
- log = logging.getLogger(__name__ + '.DeleteServiceProvider')
-
def get_parser(self, prog_name):
parser = super(DeleteServiceProvider, self).get_parser(prog_name)
parser.add_argument(
@@ -101,7 +92,6 @@ class DeleteServiceProvider(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
service_client = self.app.client_manager.identity
service_client.federation.service_providers.delete(
@@ -109,12 +99,9 @@ class DeleteServiceProvider(command.Command):
return
-class ListServiceProvider(lister.Lister):
+class ListServiceProvider(command.Lister):
"""List service providers"""
- log = logging.getLogger(__name__ + '.ListServiceProvider')
-
- @utils.log_method(log)
def take_action(self, parsed_args):
service_client = self.app.client_manager.identity
data = service_client.federation.service_providers.list()
@@ -130,8 +117,6 @@ class ListServiceProvider(lister.Lister):
class SetServiceProvider(command.Command):
"""Set service provider properties"""
- log = logging.getLogger(__name__ + '.SetServiceProvider')
-
def get_parser(self, prog_name):
parser = super(SetServiceProvider, self).get_parser(prog_name)
parser.add_argument(
@@ -168,7 +153,6 @@ class SetServiceProvider(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
federation_client = self.app.client_manager.identity.federation
@@ -193,11 +177,9 @@ class SetServiceProvider(command.Command):
return zip(*sorted(six.iteritems(service_provider._info)))
-class ShowServiceProvider(show.ShowOne):
+class ShowServiceProvider(command.ShowOne):
"""Display service provider details"""
- log = logging.getLogger(__name__ + '.ShowServiceProvider')
-
def get_parser(self, prog_name):
parser = super(ShowServiceProvider, self).get_parser(prog_name)
parser.add_argument(
@@ -207,7 +189,6 @@ class ShowServiceProvider(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
service_client = self.app.client_manager.identity
service_provider = utils.find_resource(
diff --git a/openstackclient/identity/v3/token.py b/openstackclient/identity/v3/token.py
index cd3dc798..9ebd1799 100644
--- a/openstackclient/identity/v3/token.py
+++ b/openstackclient/identity/v3/token.py
@@ -15,20 +15,16 @@
"""Identity v3 Token action implementations"""
-import logging
import six
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import utils
from openstackclient.identity import common
-class AuthorizeRequestToken(show.ShowOne):
+class AuthorizeRequestToken(command.ShowOne):
"""Authorize a request token"""
- log = logging.getLogger(__name__ + '.AuthorizeRequestToken')
-
def get_parser(self, prog_name):
parser = super(AuthorizeRequestToken, self).get_parser(prog_name)
parser.add_argument(
@@ -49,7 +45,6 @@ class AuthorizeRequestToken(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
identity_client = self.app.client_manager.identity
# NOTE(stevemar): We want a list of role ids
@@ -68,11 +63,9 @@ class AuthorizeRequestToken(show.ShowOne):
return zip(*sorted(six.iteritems(verifier_pin._info)))
-class CreateAccessToken(show.ShowOne):
+class CreateAccessToken(command.ShowOne):
"""Create an access token"""
- log = logging.getLogger(__name__ + '.CreateAccessToken')
-
def get_parser(self, prog_name):
parser = super(CreateAccessToken, self).get_parser(prog_name)
parser.add_argument(
@@ -108,7 +101,6 @@ class CreateAccessToken(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
token_client = self.app.client_manager.identity.oauth1.access_tokens
access_token = token_client.create(
parsed_args.consumer_key, parsed_args.consumer_secret,
@@ -117,11 +109,9 @@ class CreateAccessToken(show.ShowOne):
return zip(*sorted(six.iteritems(access_token._info)))
-class CreateRequestToken(show.ShowOne):
+class CreateRequestToken(command.ShowOne):
"""Create a request token"""
- log = logging.getLogger(__name__ + '.CreateRequestToken')
-
def get_parser(self, prog_name):
parser = super(CreateRequestToken, self).get_parser(prog_name)
parser.add_argument(
@@ -151,8 +141,6 @@ class CreateRequestToken(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
-
identity_client = self.app.client_manager.identity
if parsed_args.domain:
@@ -173,18 +161,34 @@ class CreateRequestToken(show.ShowOne):
return zip(*sorted(six.iteritems(request_token._info)))
-class IssueToken(show.ShowOne):
+class IssueToken(command.ShowOne):
"""Issue new token"""
- log = logging.getLogger(__name__ + '.IssueToken')
-
def get_parser(self, prog_name):
parser = super(IssueToken, self).get_parser(prog_name)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
token = self.app.client_manager.auth_ref.service_catalog.get_token()
if 'tenant_id' in token:
token['project_id'] = token.pop('tenant_id')
return zip(*sorted(six.iteritems(token)))
+
+
+class RevokeToken(command.Command):
+ """Revoke existing token"""
+
+ def get_parser(self, prog_name):
+ parser = super(RevokeToken, self).get_parser(prog_name)
+ parser.add_argument(
+ 'token',
+ metavar='<token>',
+ help='Token to be deleted',
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ identity_client = self.app.client_manager.identity
+
+ identity_client.tokens.revoke_token(parsed_args.token)
+ return
diff --git a/openstackclient/identity/v3/trust.py b/openstackclient/identity/v3/trust.py
index 2c3cf537..26fb8338 100644
--- a/openstackclient/identity/v3/trust.py
+++ b/openstackclient/identity/v3/trust.py
@@ -14,22 +14,16 @@
"""Identity v3 Trust action implementations"""
import datetime
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import utils
from openstackclient.identity import common
-class CreateTrust(show.ShowOne):
+class CreateTrust(command.ShowOne):
"""Create new trust"""
- log = logging.getLogger(__name__ + '.CreateTrust')
-
def get_parser(self, prog_name):
parser = super(CreateTrust, self).get_parser(prog_name)
parser.add_argument(
@@ -85,7 +79,6 @@ class CreateTrust(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
identity_client = self.app.client_manager.identity
# NOTE(stevemar): Find the two users, project and roles that
@@ -138,8 +131,6 @@ class CreateTrust(show.ShowOne):
class DeleteTrust(command.Command):
"""Delete trust(s)"""
- log = logging.getLogger(__name__ + '.DeleteTrust')
-
def get_parser(self, prog_name):
parser = super(DeleteTrust, self).get_parser(prog_name)
parser.add_argument(
@@ -151,20 +142,16 @@ class DeleteTrust(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
identity_client = self.app.client_manager.identity
for t in parsed_args.trust:
trust_obj = utils.find_resource(identity_client.trusts, t)
identity_client.trusts.delete(trust_obj.id)
-class ListTrust(lister.Lister):
+class ListTrust(command.Lister):
"""List trusts"""
- log = logging.getLogger(__name__ + '.ListTrust')
-
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
columns = ('ID', 'Expires At', 'Impersonation', 'Project ID',
'Trustee User ID', 'Trustor User ID')
data = self.app.client_manager.identity.trusts.list()
@@ -175,11 +162,9 @@ class ListTrust(lister.Lister):
) for s in data))
-class ShowTrust(show.ShowOne):
+class ShowTrust(command.ShowOne):
"""Display trust details"""
- log = logging.getLogger(__name__ + '.ShowTrust')
-
def get_parser(self, prog_name):
parser = super(ShowTrust, self).get_parser(prog_name)
parser.add_argument(
@@ -190,7 +175,6 @@ class ShowTrust(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
identity_client = self.app.client_manager.identity
trust = utils.find_resource(identity_client.trusts,
parsed_args.trust)
diff --git a/openstackclient/identity/v3/unscoped_saml.py b/openstackclient/identity/v3/unscoped_saml.py
index e659e75e..a42637dd 100644
--- a/openstackclient/identity/v3/unscoped_saml.py
+++ b/openstackclient/identity/v3/unscoped_saml.py
@@ -17,10 +17,7 @@ The first step of federated auth is to fetch an unscoped token. From there,
the user can list domains and projects they are allowed to access, and request
a scoped token."""
-import logging
-
-from cliff import lister
-
+from openstackclient.common import command
from openstackclient.common import exceptions
from openstackclient.common import utils
@@ -43,13 +40,10 @@ def auth_with_unscoped_saml(func):
return _decorated
-class ListAccessibleDomains(lister.Lister):
+class ListAccessibleDomains(command.Lister):
"""List accessible domains"""
- log = logging.getLogger(__name__ + '.ListAccessibleDomains')
-
@auth_with_unscoped_saml
- @utils.log_method(log)
def take_action(self, parsed_args):
columns = ('ID', 'Enabled', 'Name', 'Description')
identity_client = self.app.client_manager.identity
@@ -61,13 +55,10 @@ class ListAccessibleDomains(lister.Lister):
) for s in data))
-class ListAccessibleProjects(lister.Lister):
+class ListAccessibleProjects(command.Lister):
"""List accessible projects"""
- log = logging.getLogger(__name__ + '.ListAccessibleProjects')
-
@auth_with_unscoped_saml
- @utils.log_method(log)
def take_action(self, parsed_args):
columns = ('ID', 'Domain ID', 'Enabled', 'Name')
identity_client = self.app.client_manager.identity
diff --git a/openstackclient/identity/v3/user.py b/openstackclient/identity/v3/user.py
index 43a116cb..c694c6ae 100644
--- a/openstackclient/identity/v3/user.py
+++ b/openstackclient/identity/v3/user.py
@@ -16,24 +16,19 @@
"""Identity v3 User action implementations"""
import copy
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
from keystoneauth1 import exceptions as ks_exc
+from openstackclient.common import command
from openstackclient.common import utils
from openstackclient.i18n import _ # noqa
from openstackclient.identity import common
-class CreateUser(show.ShowOne):
+class CreateUser(command.ShowOne):
"""Create new user"""
- log = logging.getLogger(__name__ + '.CreateUser')
-
def get_parser(self, prog_name):
parser = super(CreateUser, self).get_parser(prog_name)
parser.add_argument(
@@ -91,7 +86,6 @@ class CreateUser(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -138,8 +132,6 @@ class CreateUser(show.ShowOne):
class DeleteUser(command.Command):
"""Delete user(s)"""
- log = logging.getLogger(__name__ + '.DeleteUser')
-
def get_parser(self, prog_name):
parser = super(DeleteUser, self).get_parser(prog_name)
parser.add_argument(
@@ -155,7 +147,6 @@ class DeleteUser(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -174,11 +165,9 @@ class DeleteUser(command.Command):
return
-class ListUser(lister.Lister):
+class ListUser(command.Lister):
"""List users"""
- log = logging.getLogger(__name__ + '.ListUser')
-
def get_parser(self, prog_name):
parser = super(ListUser, self).get_parser(prog_name)
parser.add_argument(
@@ -205,7 +194,6 @@ class ListUser(lister.Lister):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -280,8 +268,6 @@ class ListUser(lister.Lister):
class SetUser(command.Command):
"""Set user properties"""
- log = logging.getLogger(__name__ + '.SetUser')
-
def get_parser(self, prog_name):
parser = super(SetUser, self).get_parser(prog_name)
parser.add_argument(
@@ -334,7 +320,6 @@ class SetUser(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -383,8 +368,6 @@ class SetUser(command.Command):
class SetPasswordUser(command.Command):
"""Change current user password"""
- log = logging.getLogger(__name__ + '.SetPasswordUser')
-
def get_parser(self, prog_name):
parser = super(SetPasswordUser, self).get_parser(prog_name)
parser.add_argument(
@@ -399,7 +382,6 @@ class SetPasswordUser(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -436,11 +418,9 @@ class SetPasswordUser(command.Command):
identity_client.users.update_password(current_password, password)
-class ShowUser(show.ShowOne):
+class ShowUser(command.ShowOne):
"""Display user details"""
- log = logging.getLogger(__name__ + '.ShowUser')
-
def get_parser(self, prog_name):
parser = super(ShowUser, self).get_parser(prog_name)
parser.add_argument(
@@ -455,7 +435,6 @@ class ShowUser(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
diff --git a/openstackclient/image/v1/image.py b/openstackclient/image/v1/image.py
index c18f3fc7..9cc5facd 100644
--- a/openstackclient/image/v1/image.py
+++ b/openstackclient/image/v1/image.py
@@ -17,7 +17,6 @@
import argparse
import io
-import logging
import os
import six
import sys
@@ -27,12 +26,9 @@ if os.name == "nt":
else:
msvcrt = None
-from cliff import command
-from cliff import lister
-from cliff import show
-
from glanceclient.common import utils as gc_utils
from openstackclient.api import utils as api_utils
+from openstackclient.common import command
from openstackclient.common import parseractions
from openstackclient.common import utils
from openstackclient.i18n import _ # noqa
@@ -57,11 +53,9 @@ def _format_visibility(data):
return 'private'
-class CreateImage(show.ShowOne):
+class CreateImage(command.ShowOne):
"""Create/upload an image"""
- log = logging.getLogger(__name__ + ".CreateImage")
-
def get_parser(self, prog_name):
parser = super(CreateImage, self).get_parser(prog_name)
parser.add_argument(
@@ -191,7 +185,6 @@ class CreateImage(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
image_client = self.app.client_manager.image
if getattr(parsed_args, 'owner', None) is not None:
@@ -283,8 +276,6 @@ class CreateImage(show.ShowOne):
class DeleteImage(command.Command):
"""Delete image(s)"""
- log = logging.getLogger(__name__ + ".DeleteImage")
-
def get_parser(self, prog_name):
parser = super(DeleteImage, self).get_parser(prog_name)
parser.add_argument(
@@ -296,8 +287,6 @@ class DeleteImage(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
-
image_client = self.app.client_manager.image
for image in parsed_args.images:
image_obj = utils.find_resource(
@@ -307,11 +296,9 @@ class DeleteImage(command.Command):
image_client.images.delete(image_obj.id)
-class ListImage(lister.Lister):
+class ListImage(command.Lister):
"""List available images"""
- log = logging.getLogger(__name__ + ".ListImage")
-
def get_parser(self, prog_name):
parser = super(ListImage, self).get_parser(prog_name)
public_group = parser.add_mutually_exclusive_group()
@@ -367,8 +354,6 @@ class ListImage(lister.Lister):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
-
image_client = self.app.client_manager.image
kwargs = {}
@@ -452,8 +437,6 @@ class ListImage(lister.Lister):
class SaveImage(command.Command):
"""Save an image locally"""
- log = logging.getLogger(__name__ + ".SaveImage")
-
def get_parser(self, prog_name):
parser = super(SaveImage, self).get_parser(prog_name)
parser.add_argument(
@@ -469,8 +452,6 @@ class SaveImage(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
-
image_client = self.app.client_manager.image
image = utils.find_resource(
image_client.images,
@@ -484,8 +465,6 @@ class SaveImage(command.Command):
class SetImage(command.Command):
"""Set image properties"""
- log = logging.getLogger(__name__ + ".SetImage")
-
def get_parser(self, prog_name):
parser = super(SetImage, self).get_parser(prog_name)
parser.add_argument(
@@ -624,7 +603,6 @@ class SetImage(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
image_client = self.app.client_manager.image
if getattr(parsed_args, 'owner', None) is not None:
@@ -723,11 +701,9 @@ class SetImage(command.Command):
kwargs['data'].close()
-class ShowImage(show.ShowOne):
+class ShowImage(command.ShowOne):
"""Display image details"""
- log = logging.getLogger(__name__ + ".ShowImage")
-
def get_parser(self, prog_name):
parser = super(ShowImage, self).get_parser(prog_name)
parser.add_argument(
@@ -738,8 +714,6 @@ class ShowImage(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
-
image_client = self.app.client_manager.image
image = utils.find_resource(
image_client.images,
diff --git a/openstackclient/image/v2/image.py b/openstackclient/image/v2/image.py
index 3c1faf59..3f162181 100644
--- a/openstackclient/image/v2/image.py
+++ b/openstackclient/image/v2/image.py
@@ -16,15 +16,12 @@
"""Image V2 Action Implementations"""
import argparse
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
from glanceclient.common import utils as gc_utils
from openstackclient.api import utils as api_utils
+from openstackclient.common import command
from openstackclient.common import exceptions
from openstackclient.common import parseractions
from openstackclient.common import utils
@@ -67,11 +64,9 @@ def _format_image(image):
return info
-class AddProjectToImage(show.ShowOne):
+class AddProjectToImage(command.ShowOne):
"""Associate project with image"""
- log = logging.getLogger(__name__ + ".AddProjectToImage")
-
def get_parser(self, prog_name):
parser = super(AddProjectToImage, self).get_parser(prog_name)
parser.add_argument(
@@ -88,8 +83,6 @@ class AddProjectToImage(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
-
image_client = self.app.client_manager.image
identity_client = self.app.client_manager.identity
@@ -109,10 +102,9 @@ class AddProjectToImage(show.ShowOne):
return zip(*sorted(six.iteritems(image_member)))
-class CreateImage(show.ShowOne):
+class CreateImage(command.ShowOne):
"""Create/upload an image"""
- log = logging.getLogger(__name__ + ".CreateImage")
deadopts = ('size', 'location', 'copy-from', 'checksum', 'store')
def get_parser(self, prog_name):
@@ -241,7 +233,6 @@ class CreateImage(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
identity_client = self.app.client_manager.identity
image_client = self.app.client_manager.image
@@ -366,8 +357,6 @@ class CreateImage(show.ShowOne):
class DeleteImage(command.Command):
"""Delete image(s)"""
- log = logging.getLogger(__name__ + ".DeleteImage")
-
def get_parser(self, prog_name):
parser = super(DeleteImage, self).get_parser(prog_name)
parser.add_argument(
@@ -379,8 +368,6 @@ class DeleteImage(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
-
image_client = self.app.client_manager.image
for image in parsed_args.images:
image_obj = utils.find_resource(
@@ -390,11 +377,9 @@ class DeleteImage(command.Command):
image_client.images.delete(image_obj.id)
-class ListImage(lister.Lister):
+class ListImage(command.Lister):
"""List available images"""
- log = logging.getLogger(__name__ + ".ListImage")
-
def get_parser(self, prog_name):
parser = super(ListImage, self).get_parser(prog_name)
public_group = parser.add_mutually_exclusive_group()
@@ -446,11 +431,23 @@ class ListImage(lister.Lister):
"(default: asc), multiple keys and directions can be "
"specified separated by comma",
)
+ parser.add_argument(
+ "--limit",
+ metavar="<limit>",
+ type=int,
+ help="Maximum number of images to display.",
+ )
+ parser.add_argument(
+ '--marker',
+ metavar='<marker>',
+ default=None,
+ help="The last image (name or ID) of the previous page. Display "
+ "list of images after marker. Display all images if not "
+ "specified."
+ )
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
-
image_client = self.app.client_manager.image
kwargs = {}
@@ -460,6 +457,11 @@ class ListImage(lister.Lister):
kwargs['private'] = True
if parsed_args.shared:
kwargs['shared'] = True
+ if parsed_args.limit:
+ kwargs['limit'] = parsed_args.limit
+ if parsed_args.marker:
+ kwargs['marker'] = utils.find_resource(image_client.images,
+ parsed_args.marker).id
if parsed_args.long:
columns = (
@@ -491,16 +493,7 @@ class ListImage(lister.Lister):
column_headers = columns
# List of image data received
- data = []
- # No pages received yet, so start the page marker at None.
- marker = None
- while True:
- page = image_client.api.image_list(marker=marker, **kwargs)
- if not page:
- break
- data.extend(page)
- # Set the marker to the id of the last item we received
- marker = page[-1]['id']
+ data = image_client.api.image_list(**kwargs)
if parsed_args.property:
# NOTE(dtroyer): coerce to a list to subscript it in py3
@@ -529,8 +522,6 @@ class ListImage(lister.Lister):
class RemoveProjectImage(command.Command):
"""Disassociate project with image"""
- log = logging.getLogger(__name__ + ".RemoveProjectImage")
-
def get_parser(self, prog_name):
parser = super(RemoveProjectImage, self).get_parser(prog_name)
parser.add_argument(
@@ -547,8 +538,6 @@ class RemoveProjectImage(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
-
image_client = self.app.client_manager.image
identity_client = self.app.client_manager.identity
@@ -566,8 +555,6 @@ class RemoveProjectImage(command.Command):
class SaveImage(command.Command):
"""Save an image locally"""
- log = logging.getLogger(__name__ + ".SaveImage")
-
def get_parser(self, prog_name):
parser = super(SaveImage, self).get_parser(prog_name)
parser.add_argument(
@@ -583,8 +570,6 @@ class SaveImage(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
-
image_client = self.app.client_manager.image
image = utils.find_resource(
image_client.images,
@@ -598,7 +583,6 @@ class SaveImage(command.Command):
class SetImage(command.Command):
"""Set image properties"""
- log = logging.getLogger(__name__ + ".SetImage")
deadopts = ('visibility',)
def get_parser(self, prog_name):
@@ -758,7 +742,6 @@ class SetImage(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
identity_client = self.app.client_manager.identity
image_client = self.app.client_manager.image
@@ -824,6 +807,7 @@ class SetImage(command.Command):
image = utils.find_resource(
image_client.images, parsed_args.image)
+ activation_status = None
if parsed_args.deactivate:
image_client.images.deactivate(image.id)
activation_status = "deactivated"
@@ -847,11 +831,9 @@ class SetImage(command.Command):
raise e
-class ShowImage(show.ShowOne):
+class ShowImage(command.ShowOne):
"""Display image details"""
- log = logging.getLogger(__name__ + ".ShowImage")
-
def get_parser(self, prog_name):
parser = super(ShowImage, self).get_parser(prog_name)
parser.add_argument(
@@ -862,8 +844,6 @@ class ShowImage(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
-
image_client = self.app.client_manager.image
image = utils.find_resource(
image_client.images,
diff --git a/openstackclient/locale/de/LC_MESSAGES/openstackclient.po b/openstackclient/locale/de/LC_MESSAGES/openstackclient.po
new file mode 100644
index 00000000..1c94b9d4
--- /dev/null
+++ b/openstackclient/locale/de/LC_MESSAGES/openstackclient.po
@@ -0,0 +1,600 @@
+# Translations template for python-openstackclient.
+# Copyright (C) 2015 ORGANIZATION
+# This file is distributed under the same license as the
+# python-openstackclient project.
+#
+# Translators:
+# Ettore Atalan <atalanttore@googlemail.com>, 2014-2015
+# Andreas Jaeger <jaegerandi@gmail.com>, 2015. #zanata
+# OpenStack Infra <zanata@openstack.org>, 2015. #zanata
+msgid ""
+msgstr ""
+"Project-Id-Version: python-openstackclient 2.0.1.dev168\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2016-01-19 02:20+0000\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2015-09-19 07:10+0000\n"
+"Last-Translator: Andreas Jaeger <jaegerandi@gmail.com>\n"
+"Language: de\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Generated-By: Babel 2.0\n"
+"X-Generator: Zanata 3.7.3\n"
+"Language-Team: German\n"
+
+msgid ""
+"\n"
+"Complete\n"
+msgstr ""
+"\n"
+"Fertig\n"
+
+msgid ""
+"\n"
+"Error creating server"
+msgstr ""
+"\n"
+"Fehler beim Erstellen des Servers"
+
+msgid ""
+"\n"
+"Error creating server snapshot"
+msgstr ""
+"\n"
+"Fehler beim Erstellen der Server-Schattenkopie"
+
+msgid ""
+"\n"
+"Error deleting server"
+msgstr ""
+"\n"
+"Fehler beim Löschen des Servers"
+
+msgid ""
+"\n"
+"Error migrating server"
+msgstr ""
+"\n"
+"Fehler beim Migrieren des Servers"
+
+msgid ""
+"\n"
+"Error rebooting server\n"
+msgstr ""
+"\n"
+"Fehler beim Neustarten des Servers\n"
+
+msgid ""
+"\n"
+"Error rebuilding server"
+msgstr ""
+"\n"
+"Fehler bei der Wiederherstellung des Servers"
+
+msgid ""
+"\n"
+"Error resizing server"
+msgstr ""
+"\n"
+"Fehler bei der Größenänderung des Servers"
+
+msgid ""
+"\n"
+"Reboot complete\n"
+msgstr ""
+"\n"
+"Neustart abgeschlossen\n"
+
+msgid "Add a property to <name> (repeat option to set multiple properties)"
+msgstr ""
+"Fügen Sie eine Eigenschaft zu <Name> hinzu (wiederholen Sie die Option, um "
+"mehrere Eigenschaften festzulegen)"
+
+msgid "Allow disk over-commit on the destination host"
+msgstr "Festplattenüberladung auf dem Zielhost erlauben"
+
+msgid "Complete\n"
+msgstr "Fertig\n"
+
+msgid "Confirm server resize is complete"
+msgstr "Bestätigen Sie, ob die Größenänderung des Servers abgeschlossen ist"
+
+msgid ""
+"Create a NIC on the server. Specify option multiple times to create multiple "
+"NICs. Either net-id or port-id must be provided, but not both. net-id: "
+"attach NIC to network with this UUID, port-id: attach NIC to port with this "
+"UUID, v4-fixed-ip: IPv4 fixed address for NIC (optional), v6-fixed-ip: IPv6 "
+"fixed address for NIC (optional)."
+msgstr ""
+"Erstellen Sie ein NIC auf dem Server. Geben Sie die Option mehrfach an, um "
+"mehrere NICs zu erstellen. Entweder net-id oder port-id müssen "
+"bereitgestellt werden, aber nicht beide. net-id: NIC an Netzwerk mit dieser "
+"UUID binden, port-id: NIC an Port mit dieser UUID binden, v4-fixed-ip: Feste "
+"IPv4-Adresse für NIC (optional), v6-fixed-ip: Feste IPv6-Adresse für NIC "
+"(optional)."
+
+msgid ""
+"Create credentials for user (name or ID; default: current authenticated user)"
+msgstr ""
+"Anmeldedaten für Benutzer erstellen (Name oder Kennung; Standard: aktuell "
+"authentifizierter Benutzer)"
+
+msgid ""
+"Create credentials in project (name or ID; default: current authenticated "
+"project)"
+msgstr ""
+"Anmeldedaten in Projekt erstellen (Name oder Kennung; Standard: aktuell "
+"authentifiziertes Projekt)"
+
+msgid "Credentials access key"
+msgstr "Anmeldedaten-Zugriffsschlüssel"
+
+msgid "Default project (name or ID)"
+msgstr "Standardprojekt (Name oder Kennung)"
+
+msgid "Delete credentials for user (name or ID)"
+msgstr "Anmeldedaten für Benutzer löschen (name or ID)"
+
+msgid "Destination port (ssh -p option)"
+msgstr "Zielport (ssh -p Option)"
+
+msgid "Disable project"
+msgstr "Projekt deaktivieren"
+
+msgid "Disable user"
+msgstr "Benutzer deaktivieren"
+
+msgid "Display server diagnostics information"
+msgstr "Serverdiagnoseinformationen anzeigen"
+
+msgid "Do not over-commit disk on the destination host (default)"
+msgstr "Festplatte auf dem Zielhost nicht überladen (Standard)"
+
+msgid "Enable project"
+msgstr "Projekt aktivieren"
+
+msgid "Enable project (default)"
+msgstr "Projekt aktivieren (Standardeinstellung)"
+
+msgid "Enable user (default)"
+msgstr "Benutzer aktivieren (Standardeinstellung)"
+
+msgid "Endpoint ID to delete"
+msgstr "Zu löschende Endpunktkennung"
+
+msgid "Endpoint ID to display"
+msgstr "Anzuzeigende Endpunktkennung"
+
+#, python-format
+msgid "Error creating server snapshot: %s"
+msgstr "Fehler beim Erstellen der Server-Schattenkopie: %s"
+
+#, python-format
+msgid "Error creating server: %s"
+msgstr "Fehler beim Erstellen des Servers: %s"
+
+#, python-format
+msgid "Error deleting server: %s"
+msgstr "Fehler beim Löschen des Servers: %s"
+
+msgid "Error retrieving diagnostics data"
+msgstr "Fehler beim Abrufen der Diagnosedaten"
+
+msgid "File to inject into image before boot (repeat for multiple files)"
+msgstr ""
+"Vor dem Start auf diesem Abbild einzufügende Datei (für mehrere Dateien "
+"wiederholen)"
+
+msgid "Filter by parent region ID"
+msgstr "Nach übergeordneter Regionskennung filtern"
+
+msgid "Filter list by user (name or ID)"
+msgstr "Liste nach Benutzer filtern (Name oder Kennung)"
+
+msgid "Filter users by <project> (name or ID)"
+msgstr "Benutzer nach <project> filtern (Name oder Kennung)"
+
+msgid "Filter users by project (name or ID)"
+msgstr "Benutzer nach Projekt filtern (Name oder Kennung)"
+
+msgid "Hints for the scheduler (optional extension)"
+msgstr "Hinweise für den Planer (optionale Erweiterung)"
+
+msgid "Include <project> (name or ID)"
+msgstr "<project> miteinbeziehen (Name oder Kennung)"
+
+msgid "Include <user> (name or ID)"
+msgstr "<user> miteinbeziehen (Name oder Kennung)"
+
+msgid "Include all projects (admin only)"
+msgstr "Alle Projekte miteinbeziehen (nur Administrator)"
+
+msgid "Keypair to inject into this server (optional extension)"
+msgstr "In diesem Server einzufügendes Schlüsselpaar (optionale Erweiterung)"
+
+msgid "List additional fields in output"
+msgstr "Zusätzliche Felder in der Ausgabe auflisten"
+
+msgid "Login name (ssh -l option)"
+msgstr "Anmeldename (ssh -l Option)"
+
+msgid ""
+"Map block devices; map is <id>:<type>:<size(GB)>:<delete_on_terminate> "
+"(optional extension)"
+msgstr ""
+"Blockorientierte Geräte abbilden; Abbildung ist <Kennung>:<Typ>:<Größe(GB)>:"
+"<beim_Beenden_löschen> (optionale Erweiterung)"
+
+msgid "Maximum number of servers to launch (default=1)"
+msgstr "Maximale Anzahl der zu startenden Server (Standard=1)"
+
+msgid "Minimum number of servers to launch (default=1)"
+msgstr "Minimale Anzahl der zu startenden Server (Standard=1)"
+
+msgid "Name of new image (default is server name)"
+msgstr "Name des neuen Abbilds (Servername ist Standard)"
+
+msgid "Name or ID of security group to remove from server"
+msgstr "Name oder Kennung der vom Server zu entfernenden Sicherheitsgruppe"
+
+msgid "Name or ID of server to use"
+msgstr "Name oder Kennung des zu verwendenden Servers"
+
+msgid "New endpoint admin URL"
+msgstr "Administrator-URL des neuen Endpunktes"
+
+msgid "New endpoint internal URL"
+msgstr "Interne URL des neuen Endpunktes"
+
+msgid "New endpoint public URL (required)"
+msgstr "Öffentliche URL des neuen Endpunktes (erforderlich)"
+
+msgid "New endpoint region ID"
+msgstr "Neue Endpunkt-Regionskennung"
+
+msgid "New endpoint service (name or ID)"
+msgstr "Neuer Endpunktdienst (Name oder Kennung)"
+
+msgid "New parent region ID"
+msgstr "Neue übergeordnete Regionskennung"
+
+msgid "New password: "
+msgstr "Neues Passwort:"
+
+msgid "New project name"
+msgstr "Name des neuen Projekts"
+
+msgid "New region ID"
+msgstr "Neue Regionskennung"
+
+msgid "New region description"
+msgstr "Beschreibung des neuen Bereichs"
+
+msgid "New role name"
+msgstr "Name der neuen Rolle"
+
+msgid "New server name"
+msgstr "Neuer Servername"
+
+msgid "New service description"
+msgstr "Beschreibung des neuen Dienstes"
+
+msgid "New service name"
+msgstr "Name des neuen Dienstes"
+
+msgid "New service type (compute, image, identity, volume, etc)"
+msgstr "Neuer Diensttyp (Berechnen, Abbild, Identität, Datenträger, usw.)"
+
+msgid "New user name"
+msgstr "Neuer Benutzername"
+
+#, python-format
+msgid "No service catalog with a type, name or ID of '%s' exists."
+msgstr "Kein Dienstkatalog mit Typ, Namen oder Kennung von '%s' ist vorhanden."
+
+msgid "Only return instances that match the reservation"
+msgstr "Nur Instanzen zurückgeben, die der Einschränkung entsprechen"
+
+msgid "Options in ssh_config(5) format (ssh -o option)"
+msgstr "Optionen im ssh_config(5)-Format (ssh -o Option)"
+
+msgid "Parent region ID"
+msgstr "Übergeordnete Regionskennung"
+
+msgid "Passwords do not match, password unchanged"
+msgstr "Passwörter stimmen nicht überein, Passwort unverändert"
+
+msgid "Perform a block live migration"
+msgstr "Blockorientierte Live-Migration ausführen"
+
+msgid "Perform a hard reboot"
+msgstr "Harten Neustart ausführen"
+
+msgid "Perform a shared live migration (default)"
+msgstr "Gemeinsame Live-Migration ausführen (Standard)"
+
+msgid "Perform a soft reboot"
+msgstr "Weichen Neustart ausführen"
+
+msgid "Private key file (ssh -i option)"
+msgstr "Private Schlüsseldatei (ssh -i Option)"
+
+msgid "Project description"
+msgstr "Projektbeschreibung"
+
+msgid "Project must be specified"
+msgstr "Projekt muss angegeben werden"
+
+msgid "Project to display (name or ID)"
+msgstr "Anzuzeigendes Projekt (Name oder Kennung)"
+
+msgid "Project to modify (name or ID)"
+msgstr "Zu änderndes Projekt (Name oder Kennung)"
+
+msgid "Project(s) to delete (name or ID)"
+msgstr "Zu löschende(s) Projekt(e) (Name oder Kennung)"
+
+msgid "Prompt interactively for password"
+msgstr "Interaktiv nach dem Passwort abfragen"
+
+msgid "Property key to remove from server (repeat to unset multiple values)"
+msgstr ""
+"Vom Server zu entfernender Eigenschaftsschlüssel (zum Aufheben von mehreren "
+"Werten wiederholen)"
+
+msgid ""
+"Property to add/change for this server (repeat option to set multiple "
+"properties)"
+msgstr ""
+"Zu hinzufügende/ändernde Eigenschaft für diesen Server (wiederholen Sie die "
+"Option, um mehrere Eigenschaften festzulegen)"
+
+msgid "Region ID to delete"
+msgstr "Zu löschende Regionskennung"
+
+msgid "Region to display"
+msgstr "Anzuzeigende Region"
+
+msgid "Region to modify"
+msgstr "Zu ändernde Region"
+
+msgid "Regular expression to match IP addresses"
+msgstr "Regulärer Ausdruck zum Abgleichen mit IP-Adressen"
+
+msgid "Regular expression to match IPv6 addresses"
+msgstr "Regulärer Ausdruck zum Abgleichen mit IPv6-Adressen"
+
+msgid "Regular expression to match instance name (admin only)"
+msgstr ""
+"Regulärer Ausdruck zum Abgleichen des Instanznamens (nur Administrator) "
+
+msgid "Regular expression to match names"
+msgstr "Regulärer Ausdruck zum Abgleichen mit Namen"
+
+msgid "Resize server to specified flavor"
+msgstr "Servergröße auf angegebene Variante ändern"
+
+msgid "Restore server state before resize"
+msgstr "Serverstatus vor der Größenänderung wiederherstellen"
+
+msgid "Return existing domain"
+msgstr "Vorhandene Domäne zurückgeben"
+
+msgid "Return existing group"
+msgstr "Vorhandene Gruppe zurückgeben"
+
+msgid "Return existing project"
+msgstr "Vorhandenes Projekt zurückgeben"
+
+msgid "Return existing role"
+msgstr "Vorhandene Rolle zurückgeben"
+
+msgid "Return existing user"
+msgstr "Vorhandenen Benutzer zurückgeben"
+
+msgid "Retype new password: "
+msgstr "Neues Passwort erneut eingeben:"
+
+msgid "Role to add to <project>:<user> (name or ID)"
+msgstr "Zu <project>:<user> hinzuzufügende Rolle (Name oder Kennung)"
+
+msgid "Role to display (name or ID)"
+msgstr "Anzuzeigende Rolle (Name oder Kennung)"
+
+msgid "Role to remove (name or ID)"
+msgstr "Zu entfernende Rolle (Name oder Kennung)"
+
+msgid "Role(s) to delete (name or ID)"
+msgstr "Zu löschende Rolle(n) (Name oder Kennung)"
+
+msgid "Search by hostname"
+msgstr "Nach Hostname suchen"
+
+msgid "Search by server status"
+msgstr "Nach Serverstatus suchen"
+
+msgid "Search by user (admin only) (name or ID)"
+msgstr "Nach Benutzer suchen (nur Administrator) (Name oder Kennung)"
+
+msgid "Security group to add (name or ID)"
+msgstr "Zu hinzufügende Sicherheitsgruppe (Name oder Kennung)"
+
+msgid "Select an availability zone for the server"
+msgstr "Wählen Sie eine Verfügbarkeitszone für den Server aus"
+
+msgid "Server (name or ID)"
+msgstr "Server (Name oder Kennung)"
+
+msgid "Server internal device name for volume"
+msgstr "Serverinterner Gerätename für Datenträger"
+
+msgid "Server(s) to delete (name or ID)"
+msgstr "Zu löschende(r) Server (Name oder Kennung)"
+
+msgid "Service to delete (name or ID)"
+msgstr "Zu löschender Dienst (Name oder Kennung)"
+
+msgid "Service to display (type or name)"
+msgstr "Anzuzeigender Dienst (Typ oder Name)"
+
+msgid "Service to display (type, name or ID)"
+msgstr "Anzuzeigender Dienst (Typ, Name oder Kennung)"
+
+msgid "Set a project property (repeat option to set multiple properties)"
+msgstr ""
+"Legen Sie eine Projekteigenschaft fest (wiederholen Sie die Option, um "
+"mehrere Eigenschaften festzulegen)"
+
+msgid "Set a property on this server (repeat for multiple values)"
+msgstr ""
+"Legen Sie eine Eigenschaft auf diesem Server fest (für mehrere Werte "
+"wiederholen)"
+
+msgid ""
+"Set a scope, such as a project or domain, set a project scope with --os-"
+"project-name, OS_PROJECT_NAME or auth.project_name, set a domain scope with "
+"--os-domain-name, OS_DOMAIN_NAME or auth.domain_name"
+msgstr ""
+"Setzen Sie eine Eigenschaft, wie Projekt oder Domäne, setzen Sie eine "
+"Projekteigenschaft mit --os-project-name, OS_PROJECT_NAME oder auth."
+"project_name, setzen Sie eine Dömaneneigenschaft mit --os-domain-name, "
+"OS_DOMAIN_NAME oder auth.domain_name."
+
+msgid ""
+"Set a service AUTH_URL, with --os-auth-url, OS_AUTH_URL or auth.auth_url\n"
+msgstr ""
+"Legen Sie eine Dienst-AUTH_URL mit --os-auth-url, OS_AUTH_URL oder auth."
+"auth_url fest\n"
+
+msgid "Set a service URL, with --os-url, OS_URL or auth.url\n"
+msgstr "Legen Sie eine Dienst-URL mit --os-url, OS_URL oder auth.url fest\n"
+
+msgid "Set a token with --os-token, OS_TOKEN or auth.token\n"
+msgstr "Legen Sie einen Token mit --os-token, OS_TOKEN oder auth.token fest\n"
+
+msgid "Set a username with --os-username, OS_USERNAME, or auth.username\n"
+msgstr ""
+"Legen Sie einen Benutzernamen mit --os-username, OS_USERNAME oder auth."
+"username fest\n"
+
+msgid ""
+"Set an authentication URL, with --os-auth-url, OS_AUTH_URL or auth.auth_url\n"
+msgstr ""
+"Legen Sie eine Authentifizierungs-URL mit --os-auth-url, OS_AUTH_URL oder "
+"auth.auth_url fest\n"
+
+msgid "Set default project (name or ID)"
+msgstr "Standardprojekt festlegen (Name oder Kennung)"
+
+msgid "Set new root password (interactive only)"
+msgstr "Neues root-Passwort festlegen (Nur interaktiv)"
+
+msgid "Set project description"
+msgstr "Projektbeschreibung festlegen"
+
+msgid "Set project name"
+msgstr "Projektname festlegen"
+
+msgid "Set user email address"
+msgstr "E-Mail-Adresse des Benutzers festlegen"
+
+msgid "Set user name"
+msgstr "Benutzername festlegen"
+
+msgid "Set user password"
+msgstr "Benutzerpasswort festlegen"
+
+msgid "Show credentials for user (name or ID)"
+msgstr "Anmeldedaten für Benutzer anzeigen (name or ID)"
+
+msgid "Show service catalog information"
+msgstr "Dienstkataloginformation anzeigen"
+
+msgid "Target hostname"
+msgstr "Zielhostname"
+
+msgid ""
+"The argument --type is deprecated, use service create --name <service-name> "
+"type instead."
+msgstr ""
+"Das Argument --type ist veraltet, verwenden Sie stattdessen service create --"
+"name <Dienstname> type."
+
+msgid "Token to be deleted"
+msgstr "Zu löschender Token"
+
+msgid "Use only IPv4 addresses"
+msgstr "Nur IPv4-Adressen verwenden"
+
+msgid "Use only IPv6 addresses"
+msgstr "Nur IPv6-Adressen verwenden"
+
+msgid "Use other IP address (public, private, etc)"
+msgstr "Andere IP-Adresse verwenden (öffentlich, privat, usw.)"
+
+msgid "Use private IP address"
+msgstr "Private IP-Adresse verwenden"
+
+msgid "Use public IP address"
+msgstr "Öffentliche IP-Adresse verwenden"
+
+msgid ""
+"Use specified volume as the config drive, or 'True' to use an ephemeral drive"
+msgstr ""
+"Benutzerdefinierter Datenträger als Konfigurationslaufwerk oder 'True', um "
+"ein flüchtiges Laufwerk zu verwenden"
+
+msgid "User data file to serve from the metadata server"
+msgstr "Vom Metadatenserver anzubietende Benutzerdatendatei"
+
+msgid "User must be specified"
+msgstr "Benutzer muss angegeben werden"
+
+msgid "User to change (name or ID)"
+msgstr "Zu ändernder Benutzer (Name oder Kennung)"
+
+msgid "User to display (name or ID)"
+msgstr "Anzuzeigender Benutzer (Name oder Kennung)"
+
+msgid "User to list (name or ID)"
+msgstr "Aufzulistender Benutzer (Name oder Kennung)"
+
+msgid "User(s) to delete (name or ID)"
+msgstr "Zu löschende(r) Benutzer (Name oder Kennung)"
+
+msgid "Volume to add (name or ID)"
+msgstr "Zu hinzufügender Datenträger (Name oder Kennung)"
+
+msgid "Volume to remove (name or ID)"
+msgstr "Zu entfernender Datenträger (Name oder Kennung)"
+
+msgid "Wait for build to complete"
+msgstr "Warten Sie, bis die Herstellung abgeschlossen ist"
+
+msgid "Wait for delete to complete"
+msgstr "Warten Sie, bis das Löschen abgeschlossen ist"
+
+msgid "Wait for image create to complete"
+msgstr "Warten Sie, bis die Abbilderstellung abgeschlossen ist"
+
+msgid "Wait for reboot to complete"
+msgstr "Warten Sie, bis der Neustart abgeschlossen ist"
+
+msgid "Wait for rebuild to complete"
+msgstr "Warten Sie, bis die Wiederherstellung abgeschlossen ist"
+
+msgid "Wait for resize to complete"
+msgstr "Warten Sie, bis die Größenänderung abgeschlossen ist"
+
+msgid "either net-id or port-id should be specified but not both"
+msgstr "entweder net-id oder port-id sollten angegeben sein, aber nicht beide"
+
+msgid "max instances should be > 0"
+msgstr "max. Instanzen sollten > 0 sein"
+
+msgid "min instances should be <= max instances"
+msgstr "min. Instanzen sollten <= max. Instanzen sein"
+
+msgid "min instances should be > 0"
+msgstr "min. Instanzen sollten > 0 sein"
diff --git a/openstackclient/locale/openstackclient.pot b/openstackclient/locale/openstackclient.pot
new file mode 100644
index 00000000..afc89266
--- /dev/null
+++ b/openstackclient/locale/openstackclient.pot
@@ -0,0 +1,829 @@
+# Translations template for python-openstackclient.
+# Copyright (C) 2016 ORGANIZATION
+# This file is distributed under the same license as the
+# python-openstackclient project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2016.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: python-openstackclient 2.0.1.dev168\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2016-01-19 06:03+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.2.0\n"
+
+#: openstackclient/api/auth.py:144
+msgid "Set a username with --os-username, OS_USERNAME, or auth.username\n"
+msgstr ""
+
+#: openstackclient/api/auth.py:147
+msgid ""
+"Set an authentication URL, with --os-auth-url, OS_AUTH_URL or "
+"auth.auth_url\n"
+msgstr ""
+
+#: openstackclient/api/auth.py:155
+msgid ""
+"Set a scope, such as a project or domain, set a project scope with --os-"
+"project-name, OS_PROJECT_NAME or auth.project_name, set a domain scope "
+"with --os-domain-name, OS_DOMAIN_NAME or auth.domain_name"
+msgstr ""
+
+#: openstackclient/api/auth.py:161 openstackclient/api/auth.py:167
+msgid "Set a token with --os-token, OS_TOKEN or auth.token\n"
+msgstr ""
+
+#: openstackclient/api/auth.py:163
+msgid "Set a service AUTH_URL, with --os-auth-url, OS_AUTH_URL or auth.auth_url\n"
+msgstr ""
+
+#: openstackclient/api/auth.py:169
+msgid "Set a service URL, with --os-url, OS_URL or auth.url\n"
+msgstr ""
+
+#: openstackclient/compute/v2/availability_zone.py:72
+#: openstackclient/compute/v2/server.py:737
+#: openstackclient/identity/v2_0/endpoint.py:114
+#: openstackclient/identity/v2_0/project.py:145
+#: openstackclient/identity/v2_0/service.py:128
+#: openstackclient/identity/v2_0/user.py:174
+msgid "List additional fields in output"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:183
+#: openstackclient/compute/v2/server.py:219
+#: openstackclient/compute/v2/server.py:569
+#: openstackclient/compute/v2/server.py:923
+#: openstackclient/compute/v2/server.py:1031
+#: openstackclient/compute/v2/server.py:1086
+#: openstackclient/compute/v2/server.py:1179
+#: openstackclient/compute/v2/server.py:1219
+#: openstackclient/compute/v2/server.py:1245
+#: openstackclient/compute/v2/server.py:1336
+#: openstackclient/compute/v2/server.py:1420
+#: openstackclient/compute/v2/server.py:1457
+#: openstackclient/compute/v2/server.py:1732
+#: openstackclient/compute/v2/server.py:1756
+msgid "Server (name or ID)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:188
+msgid "Security group to add (name or ID)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:224
+msgid "Volume to add (name or ID)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:229
+msgid "Server internal device name for volume"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:265
+#: openstackclient/compute/v2/server.py:1341
+msgid "New server name"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:273
+msgid "Create server from this image (name or ID)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:278
+msgid "Create server from this volume (name or ID)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:284
+msgid "Create server with this flavor (name or ID)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:291
+msgid ""
+"Security group to assign to this server (name or ID) (repeat for multiple"
+" groups)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:297
+msgid "Keypair to inject into this server (optional extension)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:303
+msgid "Set a property on this server (repeat for multiple values)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:311
+msgid "File to inject into image before boot (repeat for multiple files)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:317
+msgid "User data file to serve from the metadata server"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:322
+msgid "Select an availability zone for the server"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:329
+msgid ""
+"Map block devices; map is <id>:<type>:<size(GB)>:<delete_on_terminate> "
+"(optional extension)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:339
+msgid ""
+"Create a NIC on the server. Specify option multiple times to create "
+"multiple NICs. Either net-id or port-id must be provided, but not both. "
+"net-id: attach NIC to network with this UUID, port-id: attach NIC to port"
+" with this UUID, v4-fixed-ip: IPv4 fixed address for NIC (optional), v6"
+"-fixed-ip: IPv6 fixed address for NIC (optional)."
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:352
+msgid "Hints for the scheduler (optional extension)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:358
+msgid ""
+"Use specified volume as the config drive, or 'True' to use an ephemeral "
+"drive"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:366
+msgid "Minimum number of servers to launch (default=1)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:373
+msgid "Maximum number of servers to launch (default=1)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:378
+msgid "Wait for build to complete"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:418
+msgid "min instances should be <= max instances"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:421
+msgid "min instances should be > 0"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:424
+msgid "max instances should be > 0"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:453
+msgid "Volume name or ID must be specified if --block-device-mapping is specified"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:465
+msgid "either net-id or port-id should be specified but not both"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:485
+msgid "can't create server with port specified since network endpoint not enabled"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:550
+#, python-format
+msgid "Error creating server: %s"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:552
+msgid ""
+"\n"
+"Error creating server"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:574
+msgid "Name of new image (default is server name)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:579
+msgid "Wait for image create to complete"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:609
+#, python-format
+msgid "Error creating server snapshot: %s"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:611
+msgid ""
+"\n"
+"Error creating server snapshot"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:633
+msgid "Server(s) to delete (name or ID)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:638
+msgid "Wait for delete to complete"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:657
+#, python-format
+msgid "Error deleting server: %s"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:659
+msgid ""
+"\n"
+"Error deleting server"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:673
+msgid "Only return instances that match the reservation"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:678
+msgid "Regular expression to match IP addresses"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:683
+msgid "Regular expression to match IPv6 addresses"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:688
+msgid "Regular expression to match names"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:693
+msgid "Regular expression to match instance name (admin only)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:699
+msgid "Search by server status"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:704
+msgid "Search by flavor (name or ID)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:709
+msgid "Search by image (name or ID)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:714
+msgid "Search by hostname"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:720
+msgid "Include all projects (admin only)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:730
+msgid "Search by user (admin only) (name or ID)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:888
+msgid "Server(s) to lock (name or ID)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:928
+msgid "Target hostname"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:936
+msgid "Perform a shared live migration (default)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:942
+msgid "Perform a block live migration"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:949
+msgid "Allow disk over-commit on the destination host"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:956
+msgid "Do not over-commit disk on the destination host (default)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:962
+#: openstackclient/compute/v2/server.py:1265
+msgid "Wait for resize to complete"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:990
+#: openstackclient/compute/v2/server.py:1290
+msgid "Complete\n"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:992
+msgid ""
+"\n"
+"Error migrating server"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1007
+msgid "Server(s) to pause (name or ID)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1040
+msgid "Perform a hard reboot"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1048
+msgid "Perform a soft reboot"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1053
+msgid "Wait for reboot to complete"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1070
+msgid ""
+"\n"
+"Reboot complete\n"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1072
+msgid ""
+"\n"
+"Error rebooting server\n"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1091
+msgid ""
+"Recreate server from the specified image (name or ID). Defaults to the "
+"currently used one."
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1102
+msgid "Wait for rebuild to complete"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1124
+msgid ""
+"\n"
+"Complete\n"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1126
+msgid ""
+"\n"
+"Error rebuilding server"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1143
+msgid "Name or ID of server to use"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1148
+msgid "Name or ID of security group to remove from server"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1184
+msgid "Volume to remove (name or ID)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1250
+msgid "Resize server to specified flavor"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1255
+msgid "Confirm server resize is complete"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1260
+msgid "Restore server state before resize"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1292
+msgid ""
+"\n"
+"Error resizing server"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1311
+msgid "Server(s) to resume (name or ID)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1346
+msgid "Set new root password (interactive only)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1352
+msgid ""
+"Property to add/change for this server (repeat option to set multiple "
+"properties)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1376
+msgid "New password: "
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1377
+msgid "Retype new password: "
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1381
+msgid "Passwords do not match, password unchanged"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1396
+msgid "Server(s) to shelve (name or ID)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1426
+msgid "Display server diagnostics information"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1439
+msgid "Error retrieving diagnostics data"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1462
+msgid "Login name (ssh -l option)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1474
+msgid "Destination port (ssh -p option)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1486
+msgid "Private key file (ssh -i option)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1497
+msgid "Options in ssh_config(5) format (ssh -o option)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1511
+msgid "Use only IPv4 addresses"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1518
+msgid "Use only IPv6 addresses"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1527
+msgid "Use public IP address"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1535
+msgid "Use private IP address"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1542
+msgid "Use other IP address (public, private, etc)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1605
+msgid "Server(s) to start (name or ID)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1630
+msgid "Server(s) to stop (name or ID)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1655
+msgid "Server(s) to suspend (name or ID)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1681
+msgid "Server(s) to unlock (name or ID)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1707
+msgid "Server(s) to unpause (name or ID)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1763
+msgid "Property key to remove from server (repeat to unset multiple values)"
+msgstr ""
+
+#: openstackclient/compute/v2/server.py:1794
+msgid "Server(s) to unshelve (name or ID)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/catalog.py:75
+#: openstackclient/identity/v3/catalog.py:72
+msgid "Service to display (type or name)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/ec2creds.py:40
+#: openstackclient/identity/v3/ec2creds.py:65
+msgid ""
+"Create credentials in project (name or ID; default: current authenticated"
+" project)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/ec2creds.py:48
+#: openstackclient/identity/v3/ec2creds.py:73
+msgid ""
+"Create credentials for user (name or ID; default: current authenticated "
+"user)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/ec2creds.py:99
+#: openstackclient/identity/v2_0/ec2creds.py:172
+#: openstackclient/identity/v3/ec2creds.py:129
+#: openstackclient/identity/v3/ec2creds.py:187
+msgid "Credentials access key"
+msgstr ""
+
+#: openstackclient/identity/v2_0/ec2creds.py:104
+#: openstackclient/identity/v3/ec2creds.py:134
+msgid "Delete credentials for user (name or ID)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/ec2creds.py:134
+#: openstackclient/identity/v3/ec2creds.py:156
+msgid "Filter list by user (name or ID)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/ec2creds.py:177
+#: openstackclient/identity/v3/ec2creds.py:192
+msgid "Show credentials for user (name or ID)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/endpoint.py:40
+msgid "New endpoint service (name or ID)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/endpoint.py:46
+msgid "New endpoint public URL (required)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/endpoint.py:51
+msgid "New endpoint admin URL"
+msgstr ""
+
+#: openstackclient/identity/v2_0/endpoint.py:56
+msgid "New endpoint internal URL"
+msgstr ""
+
+#: openstackclient/identity/v2_0/endpoint.py:61
+msgid "New endpoint region ID"
+msgstr ""
+
+#: openstackclient/identity/v2_0/endpoint.py:93
+msgid "Endpoint ID to delete"
+msgstr ""
+
+#: openstackclient/identity/v2_0/endpoint.py:149
+msgid "Endpoint ID to display"
+msgstr ""
+
+#: openstackclient/identity/v2_0/project.py:41
+msgid "New project name"
+msgstr ""
+
+#: openstackclient/identity/v2_0/project.py:46
+msgid "Project description"
+msgstr ""
+
+#: openstackclient/identity/v2_0/project.py:52
+msgid "Enable project (default)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/project.py:57
+#: openstackclient/identity/v2_0/project.py:194
+msgid "Disable project"
+msgstr ""
+
+#: openstackclient/identity/v2_0/project.py:63
+msgid "Add a property to <name> (repeat option to set multiple properties)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/project.py:69
+#: openstackclient/identity/v3/project.py:80
+msgid "Return existing project"
+msgstr ""
+
+#: openstackclient/identity/v2_0/project.py:117
+msgid "Project(s) to delete (name or ID)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/project.py:173
+#: openstackclient/identity/v2_0/project.py:313
+msgid "Project to modify (name or ID)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/project.py:178
+msgid "Set project name"
+msgstr ""
+
+#: openstackclient/identity/v2_0/project.py:183
+msgid "Set project description"
+msgstr ""
+
+#: openstackclient/identity/v2_0/project.py:189
+msgid "Enable project"
+msgstr ""
+
+#: openstackclient/identity/v2_0/project.py:200
+msgid "Set a project property (repeat option to set multiple properties)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/project.py:253
+msgid "Project to display (name or ID)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/project.py:320
+msgid "Unset a project property (repeat option to unset multiple properties)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/role.py:41
+msgid "Role to add to <project>:<user> (name or ID)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/role.py:47
+#: openstackclient/identity/v2_0/role.py:309
+msgid "Include <project> (name or ID)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/role.py:53
+#: openstackclient/identity/v2_0/role.py:315
+msgid "Include <user> (name or ID)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/role.py:87
+msgid "New role name"
+msgstr ""
+
+#: openstackclient/identity/v2_0/role.py:92
+#: openstackclient/identity/v3/role.py:165
+msgid "Return existing role"
+msgstr ""
+
+#: openstackclient/identity/v2_0/role.py:127
+msgid "Role(s) to delete (name or ID)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/role.py:194
+#: openstackclient/identity/v2_0/role.py:257
+msgid "Project must be specified"
+msgstr ""
+
+#: openstackclient/identity/v2_0/role.py:208
+#: openstackclient/identity/v2_0/role.py:263
+msgid "User must be specified"
+msgstr ""
+
+#: openstackclient/identity/v2_0/role.py:236
+msgid "User to list (name or ID)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/role.py:241
+msgid "Filter users by <project> (name or ID)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/role.py:303
+msgid "Role to remove (name or ID)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/role.py:344
+msgid "Role to display (name or ID)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/service.py:42
+msgid "New service type (compute, image, identity, volume, etc)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/service.py:53
+msgid "New service name"
+msgstr ""
+
+#: openstackclient/identity/v2_0/service.py:58
+msgid "New service description"
+msgstr ""
+
+#: openstackclient/identity/v2_0/service.py:78
+msgid ""
+"The argument --type is deprecated, use service create --name <service-"
+"name> type instead."
+msgstr ""
+
+#: openstackclient/identity/v2_0/service.py:105
+msgid "Service to delete (name or ID)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/service.py:156
+msgid "Service to display (type, name or ID)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/service.py:162
+msgid "Show service catalog information"
+msgstr ""
+
+#: openstackclient/identity/v2_0/service.py:180
+#, python-format
+msgid "No service catalog with a type, name or ID of '%s' exists."
+msgstr ""
+
+#: openstackclient/identity/v2_0/token.py:55
+msgid "Token to be deleted"
+msgstr ""
+
+#: openstackclient/identity/v2_0/user.py:40
+msgid "New user name"
+msgstr ""
+
+#: openstackclient/identity/v2_0/user.py:45
+msgid "Default project (name or ID)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/user.py:50
+#: openstackclient/identity/v2_0/user.py:273
+msgid "Set user password"
+msgstr ""
+
+#: openstackclient/identity/v2_0/user.py:56
+#: openstackclient/identity/v2_0/user.py:279
+msgid "Prompt interactively for password"
+msgstr ""
+
+#: openstackclient/identity/v2_0/user.py:61
+#: openstackclient/identity/v2_0/user.py:284
+msgid "Set user email address"
+msgstr ""
+
+#: openstackclient/identity/v2_0/user.py:67
+#: openstackclient/identity/v2_0/user.py:290
+msgid "Enable user (default)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/user.py:72
+#: openstackclient/identity/v2_0/user.py:295
+msgid "Disable user"
+msgstr ""
+
+#: openstackclient/identity/v2_0/user.py:77
+#: openstackclient/identity/v3/user.py:90
+msgid "Return existing user"
+msgstr ""
+
+#: openstackclient/identity/v2_0/user.py:141
+msgid "User(s) to delete (name or ID)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/user.py:168
+msgid "Filter users by project (name or ID)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/user.py:258
+msgid "User to change (name or ID)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/user.py:263
+msgid "Set user name"
+msgstr ""
+
+#: openstackclient/identity/v2_0/user.py:268
+msgid "Set default project (name or ID)"
+msgstr ""
+
+#: openstackclient/identity/v2_0/user.py:361
+msgid "User to display (name or ID)"
+msgstr ""
+
+#: openstackclient/identity/v3/domain.py:62
+msgid "Return existing domain"
+msgstr ""
+
+#: openstackclient/identity/v3/group.py:141
+msgid "Return existing group"
+msgstr ""
+
+#: openstackclient/identity/v3/region.py:39
+msgid "New region ID"
+msgstr ""
+
+#: openstackclient/identity/v3/region.py:44
+msgid "Parent region ID"
+msgstr ""
+
+#: openstackclient/identity/v3/region.py:49
+#: openstackclient/identity/v3/region.py:144
+msgid "New region description"
+msgstr ""
+
+#: openstackclient/identity/v3/region.py:79
+msgid "Region ID to delete"
+msgstr ""
+
+#: openstackclient/identity/v3/region.py:101
+msgid "Filter by parent region ID"
+msgstr ""
+
+#: openstackclient/identity/v3/region.py:134
+msgid "Region to modify"
+msgstr ""
+
+#: openstackclient/identity/v3/region.py:139
+msgid "New parent region ID"
+msgstr ""
+
+#: openstackclient/identity/v3/region.py:175
+msgid "Region to display"
+msgstr ""
+
diff --git a/openstackclient/locale/zh_TW/LC_MESSAGES/openstackclient.po b/openstackclient/locale/zh_TW/LC_MESSAGES/openstackclient.po
new file mode 100644
index 00000000..26032666
--- /dev/null
+++ b/openstackclient/locale/zh_TW/LC_MESSAGES/openstackclient.po
@@ -0,0 +1,495 @@
+# Translations template for python-openstackclient.
+# Copyright (C) 2015 ORGANIZATION
+# This file is distributed under the same license as the
+# python-openstackclient project.
+#
+# Translators:
+# OpenStack Infra <zanata@openstack.org>, 2015. #zanata
+msgid ""
+msgstr ""
+"Project-Id-Version: python-openstackclient 2.0.1.dev168\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2016-01-19 02:20+0000\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"PO-Revision-Date: 2015-06-14 06:41+0000\n"
+"Last-Translator: openstackjenkins <jenkins@openstack.org>\n"
+"Language: zh-TW\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Generated-By: Babel 2.0\n"
+"X-Generator: Zanata 3.7.3\n"
+"Language-Team: Chinese (Taiwan)\n"
+
+msgid ""
+"\n"
+"Complete\n"
+msgstr ""
+"\n"
+"完成\n"
+
+msgid ""
+"\n"
+"Error creating server"
+msgstr ""
+"\n"
+"新增雲實例時出錯"
+
+msgid ""
+"\n"
+"Error creating server snapshot"
+msgstr ""
+"\n"
+"新增雲實例即時存檔時出錯"
+
+msgid ""
+"\n"
+"Error migrating server"
+msgstr ""
+"\n"
+"轉移雲實例出錯"
+
+msgid ""
+"\n"
+"Error rebooting server\n"
+msgstr ""
+"\n"
+"重開雲實例出錯\n"
+
+msgid ""
+"\n"
+"Error rebuilding server"
+msgstr ""
+"\n"
+"重建雲實例出錯"
+
+msgid ""
+"\n"
+"Error resizing server"
+msgstr ""
+"\n"
+"調整雲實例容量時出錯"
+
+msgid ""
+"\n"
+"Reboot complete\n"
+msgstr ""
+"\n"
+"重開機完成\n"
+
+msgid "Add a property to <name> (repeat option to set multiple properties)"
+msgstr "加入屬性到 <name>(重復這選項來設定多個屬性)"
+
+msgid "Allow disk over-commit on the destination host"
+msgstr "允許目標主機過量使用"
+
+msgid "Complete\n"
+msgstr "完成\n"
+
+msgid "Confirm server resize is complete"
+msgstr "確認調整雲實例容量完成"
+
+msgid "Credentials access key"
+msgstr "憑鑰存取密鑰"
+
+msgid "Default project (name or ID)"
+msgstr "預設專案(名稱或識別號)"
+
+msgid "Destination port (ssh -p option)"
+msgstr "目標埠口(ssh -p 選項)"
+
+msgid "Disable project"
+msgstr "關閉專案"
+
+msgid "Disable user"
+msgstr "關閉用戶"
+
+msgid "Display server diagnostics information"
+msgstr "顯示雲實例診斷資訊"
+
+msgid "Do not over-commit disk on the destination host (default)"
+msgstr "不準目標主機過量使用(預設)"
+
+msgid "Enable project"
+msgstr "啟用專案"
+
+msgid "Enable project (default)"
+msgstr "啟用專案(預設)"
+
+msgid "Enable user (default)"
+msgstr "啟用用戶(預設)"
+
+msgid "Endpoint ID to delete"
+msgstr "要刪除的端點識別號"
+
+msgid "Endpoint ID to display"
+msgstr "要顯示的端點識別號"
+
+#, python-format
+msgid "Error creating server snapshot: %s"
+msgstr "新增雲實例即時存檔時出錯:%s"
+
+#, python-format
+msgid "Error creating server: %s"
+msgstr "新增雲實例時出錯:%s"
+
+msgid "Error retrieving diagnostics data"
+msgstr "獲得診斷資料時出錯"
+
+msgid "File to inject into image before boot (repeat for multiple files)"
+msgstr "在開機前要注入映像檔的檔案(為多個檔案重復指定)"
+
+msgid "Filter by parent region ID"
+msgstr "以父地區識別號來篩選"
+
+msgid "Filter users by <project> (name or ID)"
+msgstr "以 <project> 來篩選用戶(名稱或識別號)"
+
+msgid "Filter users by project (name or ID)"
+msgstr "以專案篩選用戶(名稱或識別號)"
+
+msgid "Hints for the scheduler (optional extension)"
+msgstr "給排程器的提示(選用)"
+
+msgid "Include <project> (name or ID)"
+msgstr "包括 <project>(名稱或識別號)"
+
+msgid "Include <user> (name or ID)"
+msgstr "包括 <user>(名稱或識別號)"
+
+msgid "Include all projects (admin only)"
+msgstr "包括所有的專案(管理員專用)"
+
+msgid "Keypair to inject into this server (optional extension)"
+msgstr "要注入到此伺服器的密鑰對(選用)"
+
+msgid "List additional fields in output"
+msgstr "列出額外的欄位"
+
+msgid "Login name (ssh -l option)"
+msgstr "登入名稱(ssh -l 選項)"
+
+msgid ""
+"Map block devices; map is <id>:<type>:<size(GB)>:<delete_on_terminate> "
+"(optional extension)"
+msgstr ""
+"映射區塊裝置;映射是 <id>:<type>:<size(GB)>:<delete_on_terminate>(選用)"
+
+msgid "Maximum number of servers to launch (default=1)"
+msgstr "最多要發動的雲實例(預設為 1)"
+
+msgid "Minimum number of servers to launch (default=1)"
+msgstr "最少要發動的雲實例(預設為 1)"
+
+msgid "Name of new image (default is server name)"
+msgstr "新映像檔的名稱(預設為雲實例名稱)"
+
+msgid "Name or ID of security group to remove from server"
+msgstr "要從雲實例移除的安全性群組名稱或識別號"
+
+msgid "Name or ID of server to use"
+msgstr "要用的雲實例名稱或識別號"
+
+msgid "New endpoint admin URL"
+msgstr "新端點管理員網址"
+
+msgid "New endpoint internal URL"
+msgstr "新端點內部網址"
+
+msgid "New endpoint public URL (required)"
+msgstr "新端點公開網址(需要)"
+
+msgid "New endpoint region ID"
+msgstr "新端點地區識別號"
+
+msgid "New endpoint service (name or ID)"
+msgstr "新端點伺服器(名稱或識別號)"
+
+msgid "New parent region ID"
+msgstr "新父地區識別號"
+
+msgid "New password: "
+msgstr "新密碼:"
+
+msgid "New project name"
+msgstr "新專案名稱"
+
+msgid "New region ID"
+msgstr "新地區識別號"
+
+msgid "New region description"
+msgstr "新地區描述"
+
+msgid "New role name"
+msgstr "新角色名稱"
+
+msgid "New server name"
+msgstr "新雲實例名稱"
+
+msgid "New service description"
+msgstr "新伺服器描述"
+
+msgid "New service name"
+msgstr "新伺服器名稱"
+
+msgid "New service type (compute, image, identity, volume, etc)"
+msgstr "新伺服器類型(compute、image、identity 或 volume 等等)"
+
+msgid "New user name"
+msgstr "新用戶名稱"
+
+#, python-format
+msgid "No service catalog with a type, name or ID of '%s' exists."
+msgstr "沒有相似「%s」類型、名稱或識別號的伺服器分類。"
+
+msgid "Only return instances that match the reservation"
+msgstr "只回傳要保留的雲實例"
+
+msgid "Options in ssh_config(5) format (ssh -o option)"
+msgstr "ssh_config(5) 格式的選項(ssh -o 選項)"
+
+msgid "Parent region ID"
+msgstr "父地區識別號"
+
+msgid "Passwords do not match, password unchanged"
+msgstr "密碼不一樣,未更換密碼"
+
+msgid "Perform a block live migration"
+msgstr "覆行區塊的即時轉移"
+
+msgid "Perform a hard reboot"
+msgstr "履行強制重開機"
+
+msgid "Perform a shared live migration (default)"
+msgstr "覆行已分享的即時轉移(預設)"
+
+msgid "Perform a soft reboot"
+msgstr "履行重開機"
+
+msgid "Private key file (ssh -i option)"
+msgstr "私鑰檔案(ssh -i 選項)"
+
+msgid "Project description"
+msgstr "專案描述"
+
+msgid "Project must be specified"
+msgstr "必須指定專案"
+
+msgid "Project to display (name or ID)"
+msgstr "要顯示的專案(名稱或識別號)"
+
+msgid "Project to modify (name or ID)"
+msgstr "要更改的專案(名稱或識別號)"
+
+msgid "Project(s) to delete (name or ID)"
+msgstr "要刪除的專案(名稱或識別號)"
+
+msgid "Prompt interactively for password"
+msgstr "為密碼互動提示"
+
+msgid "Property key to remove from server (repeat to unset multiple values)"
+msgstr "要從雲實例上移除的屬性鍵(重復來取消選擇多個值)"
+
+msgid ""
+"Property to add/change for this server (repeat option to set multiple "
+"properties)"
+msgstr "要加入這個雲實例的屬性(重復這選項來設定多個屬性)"
+
+msgid "Region ID to delete"
+msgstr "要刪除的地區識別號"
+
+msgid "Region to display"
+msgstr "要顯示的地區"
+
+msgid "Region to modify"
+msgstr "要更改的地區"
+
+msgid "Regular expression to match IP addresses"
+msgstr "以正規式來匹配 IP 位址"
+
+msgid "Regular expression to match IPv6 addresses"
+msgstr "以正規式來匹配 IPv6 位址"
+
+msgid "Regular expression to match instance name (admin only)"
+msgstr "以正規式來匹配雲實例名稱(管理員專用)"
+
+msgid "Regular expression to match names"
+msgstr "以正規式來匹配名稱"
+
+msgid "Resize server to specified flavor"
+msgstr "調整雲實例容量來符合指定的虛擬硬體樣板"
+
+msgid "Restore server state before resize"
+msgstr "恢復雲實例狀態到未調整容量前"
+
+msgid "Return existing domain"
+msgstr "回傳存在的地域"
+
+msgid "Return existing group"
+msgstr "回傳存在的群組"
+
+msgid "Return existing project"
+msgstr "回傳存在的專案"
+
+msgid "Return existing role"
+msgstr "回傳存在的角色"
+
+msgid "Return existing user"
+msgstr "回傳存在的用戶"
+
+msgid "Retype new password: "
+msgstr "重新輸入新密碼:"
+
+msgid "Role to add to <project>:<user> (name or ID)"
+msgstr "加入角色到 <project>:<user>(名稱或識別號)"
+
+msgid "Role to display (name or ID)"
+msgstr "要顯示的角色(名稱或識別號)"
+
+msgid "Role to remove (name or ID)"
+msgstr "要移除的角色(名稱或識別號)"
+
+msgid "Role(s) to delete (name or ID)"
+msgstr "要刪除的角色(名稱或識別號)"
+
+msgid "Search by hostname"
+msgstr "以主機名稱來尋找"
+
+msgid "Search by server status"
+msgstr "以雲實例狀態來尋找"
+
+msgid "Security group to add (name or ID)"
+msgstr "要加入的安全性群組(名稱或識別號)"
+
+msgid "Select an availability zone for the server"
+msgstr "為雲實例選擇可用的區域。"
+
+msgid "Server (name or ID)"
+msgstr "伺服器(名稱或識別號)"
+
+msgid "Server internal device name for volume"
+msgstr "雲硬碟在雲實例內的裝置名稱"
+
+msgid "Server(s) to delete (name or ID)"
+msgstr "要刪除的雲實例(名稱或識別號)"
+
+msgid "Service to delete (name or ID)"
+msgstr "要刪除的伺服器(名稱或識別號)"
+
+msgid "Service to display (type or name)"
+msgstr "要顯示的伺服器(類型或名稱)"
+
+msgid "Service to display (type, name or ID)"
+msgstr "要顯示的伺服器(類型、名稱或識別號)"
+
+msgid "Set a project property (repeat option to set multiple properties)"
+msgstr "設定專案屬性(重復這選項來設定多個屬性)"
+
+msgid "Set a property on this server (repeat for multiple values)"
+msgstr "為此伺服器設定屬性(為多個值重複設定)"
+
+msgid "Set default project (name or ID)"
+msgstr "設定預設專案(名稱或識別號)"
+
+msgid "Set new root password (interactive only)"
+msgstr "設定新密碼(只限互動)"
+
+msgid "Set project description"
+msgstr "設定專案描述"
+
+msgid "Set project name"
+msgstr "設定專案名稱"
+
+msgid "Set user email address"
+msgstr "設定用戶電子信箱位址"
+
+msgid "Set user name"
+msgstr "設定用戶名稱"
+
+msgid "Set user password"
+msgstr "設定用戶密碼"
+
+msgid "Show service catalog information"
+msgstr "顯示伺服器分類資訊"
+
+msgid "Target hostname"
+msgstr "目標主機名稱"
+
+msgid ""
+"The argument --type is deprecated, use service create --name <service-name> "
+"type instead."
+msgstr ""
+"已經淘汰 --type 參數,請用 service create --name <service-name> 來代替。"
+
+msgid "Token to be deleted"
+msgstr "要刪除的記號"
+
+msgid "Use only IPv4 addresses"
+msgstr "只使用 IPv4 位址"
+
+msgid "Use only IPv6 addresses"
+msgstr "只使用 IPv6 位址"
+
+msgid "Use other IP address (public, private, etc)"
+msgstr "使用其他 IP 位址(公開、私人等等)"
+
+msgid "Use private IP address"
+msgstr "使用私人 IP 位址"
+
+msgid "Use public IP address"
+msgstr "使用公開 IP 位址"
+
+msgid ""
+"Use specified volume as the config drive, or 'True' to use an ephemeral drive"
+msgstr "使用指定的雲硬碟為設定檔硬碟,或「True」來使用暫時性硬碟"
+
+msgid "User data file to serve from the metadata server"
+msgstr "來自詮釋資料伺服器要服務的用戶資料檔案"
+
+msgid "User must be specified"
+msgstr "必須指定用戶"
+
+msgid "User to change (name or ID)"
+msgstr "要更換的用戶(名稱或識別號)"
+
+msgid "User to display (name or ID)"
+msgstr "要顯示的用戶(名稱或識別號)"
+
+msgid "User to list (name or ID)"
+msgstr "要列出的用戶(名稱或識別號)"
+
+msgid "User(s) to delete (name or ID)"
+msgstr "要刪除的用戶(名稱或識別號)"
+
+msgid "Volume to add (name or ID)"
+msgstr "要加入的雲硬碟(名稱或識別號)"
+
+msgid "Volume to remove (name or ID)"
+msgstr "要移除的雲硬碟(名稱或識別號)"
+
+msgid "Wait for build to complete"
+msgstr "等待完成建立"
+
+msgid "Wait for image create to complete"
+msgstr "等待映像檔新增完成"
+
+msgid "Wait for reboot to complete"
+msgstr "等待重開機完成"
+
+msgid "Wait for rebuild to complete"
+msgstr "等待重建完成"
+
+msgid "Wait for resize to complete"
+msgstr "等待調整容量完成"
+
+msgid "either net-id or port-id should be specified but not both"
+msgstr "任選網路識別號或接口識別號,但不能兩者都指定"
+
+msgid "max instances should be > 0"
+msgstr "雲實例發動的最大值要大於 0"
+
+msgid "min instances should be <= max instances"
+msgstr "雲實例發動的最少值不應大於最大值"
+
+msgid "min instances should be > 0"
+msgstr "雲實例發動的最少值要大於 0"
diff --git a/openstackclient/network/common.py b/openstackclient/network/common.py
new file mode 100644
index 00000000..cc343c3c
--- /dev/null
+++ b/openstackclient/network/common.py
@@ -0,0 +1,164 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+import abc
+import six
+
+from openstackclient.common import command
+
+
+@six.add_metaclass(abc.ABCMeta)
+class NetworkAndComputeCommand(command.Command):
+ """Network and Compute Command"""
+
+ def take_action(self, parsed_args):
+ if self.app.client_manager.is_network_endpoint_enabled():
+ return self.take_action_network(self.app.client_manager.network,
+ parsed_args)
+ else:
+ return self.take_action_compute(self.app.client_manager.compute,
+ parsed_args)
+
+ def get_parser(self, prog_name):
+ self.log.debug('get_parser(%s)', prog_name)
+ parser = super(NetworkAndComputeCommand, self).get_parser(prog_name)
+ parser = self.update_parser_common(parser)
+ self.log.debug('common parser: %s', parser)
+ if self.app.client_manager.is_network_endpoint_enabled():
+ return self.update_parser_network(parser)
+ else:
+ return self.update_parser_compute(parser)
+
+ def update_parser_common(self, parser):
+ """Default is no updates to parser."""
+ return parser
+
+ def update_parser_network(self, parser):
+ """Default is no updates to parser."""
+ return parser
+
+ def update_parser_compute(self, parser):
+ """Default is no updates to parser."""
+ return parser
+
+ @abc.abstractmethod
+ def take_action_network(self, client, parsed_args):
+ """Override to do something useful."""
+ pass
+
+ @abc.abstractmethod
+ def take_action_compute(self, client, parsed_args):
+ """Override to do something useful."""
+ pass
+
+
+@six.add_metaclass(abc.ABCMeta)
+class NetworkAndComputeLister(command.Lister):
+ """Network and Compute Lister
+
+ Lister class for commands that support implementation via
+ the network or compute endpoint. Such commands have different
+ implementations for take_action() and may even have different
+ arguments.
+ """
+
+ def take_action(self, parsed_args):
+ if self.app.client_manager.is_network_endpoint_enabled():
+ return self.take_action_network(self.app.client_manager.network,
+ parsed_args)
+ else:
+ return self.take_action_compute(self.app.client_manager.compute,
+ parsed_args)
+
+ def get_parser(self, prog_name):
+ self.log.debug('get_parser(%s)', prog_name)
+ parser = super(NetworkAndComputeLister, self).get_parser(prog_name)
+ parser = self.update_parser_common(parser)
+ self.log.debug('common parser: %s', parser)
+ if self.app.client_manager.is_network_endpoint_enabled():
+ return self.update_parser_network(parser)
+ else:
+ return self.update_parser_compute(parser)
+
+ def update_parser_common(self, parser):
+ """Default is no updates to parser."""
+ return parser
+
+ def update_parser_network(self, parser):
+ """Default is no updates to parser."""
+ return parser
+
+ def update_parser_compute(self, parser):
+ """Default is no updates to parser."""
+ return parser
+
+ @abc.abstractmethod
+ def take_action_network(self, client, parsed_args):
+ """Override to do something useful."""
+ pass
+
+ @abc.abstractmethod
+ def take_action_compute(self, client, parsed_args):
+ """Override to do something useful."""
+ pass
+
+
+@six.add_metaclass(abc.ABCMeta)
+class NetworkAndComputeShowOne(command.ShowOne):
+ """Network and Compute ShowOne
+
+ ShowOne class for commands that support implementation via
+ the network or compute endpoint. Such commands have different
+ implementations for take_action() and may even have different
+ arguments.
+ """
+
+ def take_action(self, parsed_args):
+ if self.app.client_manager.is_network_endpoint_enabled():
+ return self.take_action_network(self.app.client_manager.network,
+ parsed_args)
+ else:
+ return self.take_action_compute(self.app.client_manager.compute,
+ parsed_args)
+
+ def get_parser(self, prog_name):
+ self.log.debug('get_parser(%s)', prog_name)
+ parser = super(NetworkAndComputeShowOne, self).get_parser(prog_name)
+ parser = self.update_parser_common(parser)
+ self.log.debug('common parser: %s', parser)
+ if self.app.client_manager.is_network_endpoint_enabled():
+ return self.update_parser_network(parser)
+ else:
+ return self.update_parser_compute(parser)
+
+ def update_parser_common(self, parser):
+ """Default is no updates to parser."""
+ return parser
+
+ def update_parser_network(self, parser):
+ """Default is no updates to parser."""
+ return parser
+
+ def update_parser_compute(self, parser):
+ """Default is no updates to parser."""
+ return parser
+
+ @abc.abstractmethod
+ def take_action_network(self, client, parsed_args):
+ """Override to do something useful."""
+ pass
+
+ @abc.abstractmethod
+ def take_action_compute(self, client, parsed_args):
+ """Override to do something useful."""
+ pass
diff --git a/openstackclient/network/v2/floating_ip.py b/openstackclient/network/v2/floating_ip.py
new file mode 100644
index 00000000..48895048
--- /dev/null
+++ b/openstackclient/network/v2/floating_ip.py
@@ -0,0 +1,66 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+"""IP Floating action implementations"""
+
+from openstackclient.common import utils
+from openstackclient.network import common
+
+
+class DeleteFloatingIP(common.NetworkAndComputeCommand):
+ """Delete floating IP"""
+
+ def update_parser_common(self, parser):
+ parser.add_argument(
+ 'floating_ip',
+ metavar="<floating-ip>",
+ help=("Floating IP to delete (IP address or ID)")
+ )
+ return parser
+
+ def take_action_network(self, client, parsed_args):
+ obj = client.find_ip(parsed_args.floating_ip)
+ client.delete_ip(obj)
+
+ def take_action_compute(self, client, parsed_args):
+ obj = utils.find_resource(
+ client.floating_ips,
+ parsed_args.floating_ip,
+ )
+ client.floating_ips.delete(obj.id)
+
+
+class ListFloatingIP(common.NetworkAndComputeLister):
+ """List floating IP(s)"""
+
+ columns = ('ID', 'IP', 'Fixed IP', 'Instance ID', 'Pool')
+ column_headers = ('ID', 'Floating IP', 'Fixed IP', 'Server ID', 'Pool')
+
+ def take_action_network(self, client, parsed_args):
+ query = {}
+ data = client.ips(**query)
+
+ return (self.column_headers,
+ (utils.get_item_properties(
+ s, self.columns,
+ formatters={},
+ ) for s in data))
+
+ def take_action_compute(self, client, parsed_args):
+ data = client.floating_ips.list()
+
+ return (self.column_headers,
+ (utils.get_item_properties(
+ s, self.columns,
+ formatters={},
+ ) for s in data))
diff --git a/openstackclient/network/v2/network.py b/openstackclient/network/v2/network.py
index 38dff8d9..636c333e 100644
--- a/openstackclient/network/v2/network.py
+++ b/openstackclient/network/v2/network.py
@@ -13,15 +13,11 @@
"""Network action implementations"""
-import logging
-
-from cliff import command
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import exceptions
from openstackclient.common import utils
from openstackclient.identity import common as identity_common
+from openstackclient.network import common
def _format_admin_state(item):
@@ -36,6 +32,8 @@ _formatters = {
'subnets': utils.format_list,
'admin_state_up': _format_admin_state,
'router_external': _format_router_external,
+ 'availability_zones': utils.format_list,
+ 'availability_zone_hints': utils.format_list,
}
@@ -50,10 +48,35 @@ def _get_columns(item):
return tuple(sorted(columns))
-class CreateNetwork(show.ShowOne):
- """Create new network"""
+def _get_attrs(client_manager, parsed_args):
+ attrs = {}
+ if parsed_args.name is not None:
+ attrs['name'] = str(parsed_args.name)
+ if parsed_args.admin_state is not None:
+ attrs['admin_state_up'] = parsed_args.admin_state
+ if parsed_args.shared is not None:
+ attrs['shared'] = parsed_args.shared
+
+ # "network set" command doesn't support setting project.
+ if 'project' in parsed_args and parsed_args.project is not None:
+ identity_client = client_manager.identity
+ project_id = identity_common.find_project(
+ identity_client,
+ parsed_args.project,
+ parsed_args.project_domain,
+ ).id
+ attrs['tenant_id'] = project_id
+
+ # "network set" command doesn't support setting availability zone hints.
+ if 'availability_zone_hints' in parsed_args and \
+ parsed_args.availability_zone_hints is not None:
+ attrs['availability_zone_hints'] = parsed_args.availability_zone_hints
+
+ return attrs
+
- log = logging.getLogger(__name__ + '.CreateNetwork')
+class CreateNetwork(command.ShowOne):
+ """Create new network"""
def get_parser(self, prog_name):
parser = super(CreateNetwork, self).get_parser(prog_name)
@@ -93,42 +116,36 @@ class CreateNetwork(show.ShowOne):
parser.add_argument(
'--project',
metavar='<project>',
- help="Owner's project (name or ID)")
+ help="Owner's project (name or ID)"
+ )
identity_common.add_project_domain_option_to_parser(parser)
+
+ parser.add_argument(
+ '--availability-zone-hint',
+ action='append',
+ dest='availability_zone_hints',
+ metavar='<availability-zone>',
+ help='Availability Zone in which to create this network '
+ '(requires the Network Availability Zone extension, '
+ 'this option can be repeated).',
+ )
return parser
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
client = self.app.client_manager.network
- body = self.get_body(parsed_args)
- obj = client.create_network(**body)
+
+ attrs = _get_attrs(self.app.client_manager, parsed_args)
+ obj = client.create_network(**attrs)
columns = _get_columns(obj)
+
data = utils.get_item_properties(obj, columns, formatters=_formatters)
return (columns, data)
- def get_body(self, parsed_args):
- body = {'name': str(parsed_args.name),
- 'admin_state_up': parsed_args.admin_state}
- if parsed_args.shared is not None:
- body['shared'] = parsed_args.shared
- if parsed_args.project is not None:
- identity_client = self.app.client_manager.identity
- project_id = identity_common.find_project(
- identity_client,
- parsed_args.project,
- parsed_args.project_domain,
- ).id
- body['tenant_id'] = project_id
- return body
-
-
-class DeleteNetwork(command.Command):
- """Delete network(s)"""
- log = logging.getLogger(__name__ + '.DeleteNetwork')
+class DeleteNetwork(common.NetworkAndComputeCommand):
+ """Delete network(s)"""
- def get_parser(self, prog_name):
- parser = super(DeleteNetwork, self).get_parser(prog_name)
+ def update_parser_common(self, parser):
parser.add_argument(
'network',
metavar="<network>",
@@ -137,19 +154,23 @@ class DeleteNetwork(command.Command):
)
return parser
- def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
- client = self.app.client_manager.network
+ def take_action_network(self, client, parsed_args):
for network in parsed_args.network:
obj = client.find_network(network)
client.delete_network(obj)
+ def take_action_compute(self, client, parsed_args):
+ for network in parsed_args.network:
+ network = utils.find_resource(
+ client.networks,
+ network,
+ )
+ client.networks.delete(network.id)
+
-class ListNetwork(lister.Lister):
+class ListNetwork(command.Lister):
"""List networks"""
- log = logging.getLogger(__name__ + '.ListNetwork')
-
def get_parser(self, prog_name):
parser = super(ListNetwork, self).get_parser(prog_name)
parser.add_argument(
@@ -167,7 +188,6 @@ class ListNetwork(lister.Lister):
return parser
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
client = self.app.client_manager.network
if parsed_args.long:
@@ -181,6 +201,7 @@ class ListNetwork(lister.Lister):
'subnets',
'provider_network_type',
'router_external',
+ 'availability_zones',
)
column_headers = (
'ID',
@@ -192,6 +213,7 @@ class ListNetwork(lister.Lister):
'Subnets',
'Network Type',
'Router Type',
+ 'Availability Zones',
)
else:
columns = (
@@ -220,12 +242,10 @@ class ListNetwork(lister.Lister):
class SetNetwork(command.Command):
"""Set network properties"""
- log = logging.getLogger(__name__ + '.SetNetwork')
-
def get_parser(self, prog_name):
parser = super(SetNetwork, self).get_parser(prog_name)
parser.add_argument(
- 'identifier',
+ 'network',
metavar="<network>",
help=("Network to modify (name or ID)")
)
@@ -265,42 +285,33 @@ class SetNetwork(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
client = self.app.client_manager.network
- obj = client.find_network(parsed_args.identifier, ignore_missing=False)
+ obj = client.find_network(parsed_args.network, ignore_missing=False)
- if parsed_args.name is not None:
- obj.name = str(parsed_args.name)
- if parsed_args.admin_state is not None:
- obj.admin_state_up = parsed_args.admin_state
- if parsed_args.shared is not None:
- obj.shared = parsed_args.shared
-
- if not obj.is_dirty:
+ attrs = _get_attrs(self.app.client_manager, parsed_args)
+ if attrs == {}:
msg = "Nothing specified to be set"
raise exceptions.CommandError(msg)
- client.update_network(obj)
+ client.update_network(obj, **attrs)
+ return
-class ShowNetwork(show.ShowOne):
+class ShowNetwork(command.ShowOne):
"""Show network details"""
- log = logging.getLogger(__name__ + '.ShowNetwork')
-
def get_parser(self, prog_name):
parser = super(ShowNetwork, self).get_parser(prog_name)
parser.add_argument(
- 'identifier',
+ 'network',
metavar="<network>",
help=("Network to display (name or ID)")
)
return parser
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
client = self.app.client_manager.network
- obj = client.find_network(parsed_args.identifier, ignore_missing=False)
+ obj = client.find_network(parsed_args.network, ignore_missing=False)
columns = _get_columns(obj)
data = utils.get_item_properties(obj, columns, formatters=_formatters)
return (columns, data)
diff --git a/openstackclient/network/v2/port.py b/openstackclient/network/v2/port.py
index ad906a28..46cb031f 100644
--- a/openstackclient/network/v2/port.py
+++ b/openstackclient/network/v2/port.py
@@ -13,16 +13,48 @@
"""Port action implementations"""
-import logging
+from openstackclient.common import command
+from openstackclient.common import utils
-from cliff import command
+
+def _format_admin_state(state):
+ return 'UP' if state else 'DOWN'
+
+
+_formatters = {
+ 'admin_state_up': _format_admin_state,
+ 'allowed_address_pairs': utils.format_list_of_dicts,
+ 'binding_profile': utils.format_dict,
+ 'binding_vif_details': utils.format_dict,
+ 'dns_assignment': utils.format_list_of_dicts,
+ 'extra_dhcp_opts': utils.format_list_of_dicts,
+ 'fixed_ips': utils.format_list_of_dicts,
+ 'security_groups': utils.format_list,
+}
+
+
+def _get_columns(item):
+ columns = item.keys()
+ if 'tenant_id' in columns:
+ columns.remove('tenant_id')
+ columns.append('project_id')
+ binding_columns = [
+ 'binding:host_id',
+ 'binding:profile',
+ 'binding:vif_details',
+ 'binding:vif_type',
+ 'binding:vnic_type',
+ ]
+ for binding_column in binding_columns:
+ if binding_column in columns:
+ columns.remove(binding_column)
+ columns.append(binding_column.replace('binding:', 'binding_', 1))
+ return sorted(columns)
class DeletePort(command.Command):
"""Delete port(s)"""
- log = logging.getLogger(__name__ + '.DeletePort')
-
def get_parser(self, prog_name):
parser = super(DeletePort, self).get_parser(prog_name)
parser.add_argument(
@@ -34,9 +66,28 @@ class DeletePort(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
client = self.app.client_manager.network
for port in parsed_args.port:
res = client.find_port(port)
client.delete_port(res)
+
+
+class ShowPort(command.ShowOne):
+ """Display port details"""
+
+ def get_parser(self, prog_name):
+ parser = super(ShowPort, self).get_parser(prog_name)
+ parser.add_argument(
+ 'port',
+ metavar="<port>",
+ help="Port to display (name or ID)"
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ client = self.app.client_manager.network
+ obj = client.find_port(parsed_args.port, ignore_missing=False)
+ columns = _get_columns(obj)
+ data = utils.get_item_properties(obj, columns, formatters=_formatters)
+ return (tuple(columns), data)
diff --git a/openstackclient/network/v2/router.py b/openstackclient/network/v2/router.py
index 09e0fe4c..60db816a 100644
--- a/openstackclient/network/v2/router.py
+++ b/openstackclient/network/v2/router.py
@@ -14,12 +14,8 @@
"""Router action implementations"""
import json
-import logging
-
-from cliff import command
-from cliff import lister
-from cliff import show
+from openstackclient.common import command
from openstackclient.common import exceptions
from openstackclient.common import utils
from openstackclient.identity import common as identity_common
@@ -39,6 +35,8 @@ def _format_external_gateway_info(info):
_formatters = {
'admin_state_up': _format_admin_state,
'external_gateway_info': _format_external_gateway_info,
+ 'availability_zones': utils.format_list,
+ 'availability_zone_hints': utils.format_list,
}
@@ -50,6 +48,9 @@ def _get_attrs(client_manager, parsed_args):
attrs['admin_state_up'] = parsed_args.admin_state_up
if parsed_args.distributed is not None:
attrs['distributed'] = parsed_args.distributed
+ if ('availability_zone_hints' in parsed_args
+ and parsed_args.availability_zone_hints is not None):
+ attrs['availability_zone_hints'] = parsed_args.availability_zone_hints
# "router set" command doesn't support setting project.
if 'project' in parsed_args and parsed_args.project is not None:
identity_client = client_manager.identity
@@ -67,11 +68,9 @@ def _get_attrs(client_manager, parsed_args):
return attrs
-class CreateRouter(show.ShowOne):
+class CreateRouter(command.ShowOne):
"""Create a new router"""
- log = logging.getLogger(__name__ + '.CreateRouter')
-
def get_parser(self, prog_name):
parser = super(CreateRouter, self).get_parser(prog_name)
parser.add_argument(
@@ -102,14 +101,23 @@ class CreateRouter(show.ShowOne):
)
parser.add_argument(
'--project',
- metavar='<poroject>',
+ metavar='<project>',
help="Owner's project (name or ID)",
)
+ parser.add_argument(
+ '--availability-zone-hint',
+ metavar='<availability-zone>',
+ action='append',
+ dest='availability_zone_hints',
+ help='Availability Zone in which to create this router '
+ '(requires the Router Availability Zone extension, '
+ 'this option can be repeated).',
+ )
+
identity_common.add_project_domain_option_to_parser(parser)
return parser
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
client = self.app.client_manager.network
attrs = _get_attrs(self.app.client_manager, parsed_args)
@@ -128,8 +136,6 @@ class CreateRouter(show.ShowOne):
class DeleteRouter(command.Command):
"""Delete router(s)"""
- log = logging.getLogger(__name__ + '.DeleteRouter')
-
def get_parser(self, prog_name):
parser = super(DeleteRouter, self).get_parser(prog_name)
parser.add_argument(
@@ -141,18 +147,15 @@ class DeleteRouter(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
client = self.app.client_manager.network
for router in parsed_args.router:
obj = client.find_router(router)
client.delete_router(obj)
-class ListRouter(lister.Lister):
+class ListRouter(command.Lister):
"""List routers"""
- log = logging.getLogger(__name__ + '.ListRouter')
-
def get_parser(self, prog_name):
parser = super(ListRouter, self).get_parser(prog_name)
parser.add_argument(
@@ -164,7 +167,6 @@ class ListRouter(lister.Lister):
return parser
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
client = self.app.client_manager.network
columns = (
@@ -189,10 +191,12 @@ class ListRouter(lister.Lister):
columns = columns + (
'routes',
'external_gateway_info',
+ 'availability_zones'
)
column_headers = column_headers + (
'Routes',
'External gateway info',
+ 'Availability zones'
)
data = client.routers()
@@ -206,8 +210,6 @@ class ListRouter(lister.Lister):
class SetRouter(command.Command):
"""Set router properties"""
- log = logging.getLogger(__name__ + '.SetRouter')
-
def get_parser(self, prog_name):
parser = super(SetRouter, self).get_parser(prog_name)
parser.add_argument(
@@ -262,7 +264,6 @@ class SetRouter(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
client = self.app.client_manager.network
obj = client.find_router(parsed_args.router, ignore_missing=False)
@@ -274,11 +275,9 @@ class SetRouter(command.Command):
client.update_router(obj, **attrs)
-class ShowRouter(show.ShowOne):
+class ShowRouter(command.ShowOne):
"""Display router details"""
- log = logging.getLogger(__name__ + '.ShowRouter')
-
def get_parser(self, prog_name):
parser = super(ShowRouter, self).get_parser(prog_name)
parser.add_argument(
@@ -289,7 +288,6 @@ class ShowRouter(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug('take_action(%s)' % parsed_args)
client = self.app.client_manager.network
obj = client.find_router(parsed_args.router, ignore_missing=False)
columns = sorted(obj.keys())
diff --git a/openstackclient/network/v2/security_group.py b/openstackclient/network/v2/security_group.py
new file mode 100644
index 00000000..4e122f21
--- /dev/null
+++ b/openstackclient/network/v2/security_group.py
@@ -0,0 +1,40 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+"""Security Group action implementations"""
+
+from openstackclient.common import utils
+from openstackclient.network import common
+
+
+class DeleteSecurityGroup(common.NetworkAndComputeCommand):
+ """Delete a security group"""
+
+ def update_parser_common(self, parser):
+ parser.add_argument(
+ 'group',
+ metavar='<group>',
+ help='Security group to delete (name or ID)',
+ )
+ return parser
+
+ def take_action_network(self, client, parsed_args):
+ obj = client.find_security_group(parsed_args.group)
+ client.delete_security_group(obj)
+
+ def take_action_compute(self, client, parsed_args):
+ data = utils.find_resource(
+ client.security_groups,
+ parsed_args.group,
+ )
+ client.security_groups.delete(data.id)
diff --git a/openstackclient/network/v2/subnet.py b/openstackclient/network/v2/subnet.py
new file mode 100644
index 00000000..b948c656
--- /dev/null
+++ b/openstackclient/network/v2/subnet.py
@@ -0,0 +1,63 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+"""Subnet action implementations"""
+
+from openstackclient.common import command
+from openstackclient.common import utils
+
+
+def _format_allocation_pools(data):
+ pool_formatted = ['%s-%s' % (pool.get('start', ''), pool.get('end', ''))
+ for pool in data]
+ return ','.join(pool_formatted)
+
+
+_formatters = {
+ 'allocation_pools': _format_allocation_pools,
+ 'dns_nameservers': utils.format_list,
+ 'host_routes': utils.format_list,
+}
+
+
+class ListSubnet(command.Lister):
+ """List subnets"""
+
+ def get_parser(self, prog_name):
+ parser = super(ListSubnet, self).get_parser(prog_name)
+ parser.add_argument(
+ '--long',
+ action='store_true',
+ default=False,
+ help='List additional fields in output',
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ data = self.app.client_manager.network.subnets()
+
+ headers = ('ID', 'Name', 'Network', 'Subnet')
+ columns = ('id', 'name', 'network_id', 'cidr')
+ if parsed_args.long:
+ headers += ('Project', 'DHCP', 'Name Servers',
+ 'Allocation Pools', 'Host Routes', 'IP Version',
+ 'Gateway')
+ columns += ('tenant_id', 'enable_dhcp', 'dns_nameservers',
+ 'allocation_pools', 'host_routes', 'ip_version',
+ 'gateway_ip')
+
+ return (headers,
+ (utils.get_item_properties(
+ s, columns,
+ formatters=_formatters,
+ ) for s in data))
diff --git a/openstackclient/object/v1/account.py b/openstackclient/object/v1/account.py
index aa94ff5c..543ce4f3 100644
--- a/openstackclient/object/v1/account.py
+++ b/openstackclient/object/v1/account.py
@@ -13,12 +13,9 @@
"""Account v1 action implementations"""
-import logging
-
-from cliff import command
-from cliff import show
import six
+from openstackclient.common import command
from openstackclient.common import parseractions
from openstackclient.common import utils
@@ -26,8 +23,6 @@ from openstackclient.common import utils
class SetAccount(command.Command):
"""Set account properties"""
- log = logging.getLogger(__name__ + '.SetAccount')
-
def get_parser(self, prog_name):
parser = super(SetAccount, self).get_parser(prog_name)
parser.add_argument(
@@ -40,19 +35,15 @@ class SetAccount(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
self.app.client_manager.object_store.account_set(
properties=parsed_args.property,
)
-class ShowAccount(show.ShowOne):
+class ShowAccount(command.ShowOne):
"""Display account details"""
- log = logging.getLogger(__name__ + '.ShowAccount')
-
- @utils.log_method(log)
def take_action(self, parsed_args):
data = self.app.client_manager.object_store.account_show()
if 'properties' in data:
@@ -63,8 +54,6 @@ class ShowAccount(show.ShowOne):
class UnsetAccount(command.Command):
"""Unset account properties"""
- log = logging.getLogger(__name__ + '.UnsetAccount')
-
def get_parser(self, prog_name):
parser = super(UnsetAccount, self).get_parser(prog_name)
parser.add_argument(
@@ -78,7 +67,6 @@ class UnsetAccount(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
self.app.client_manager.object_store.account_unset(
properties=parsed_args.property,
diff --git a/openstackclient/object/v1/container.py b/openstackclient/object/v1/container.py
index 8c8844e2..80b84238 100644
--- a/openstackclient/object/v1/container.py
+++ b/openstackclient/object/v1/container.py
@@ -16,22 +16,16 @@
"""Container v1 action implementations"""
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import parseractions
from openstackclient.common import utils
-class CreateContainer(lister.Lister):
+class CreateContainer(command.Lister):
"""Create new container"""
- log = logging.getLogger(__name__ + '.CreateContainer')
-
def get_parser(self, prog_name):
parser = super(CreateContainer, self).get_parser(prog_name)
parser.add_argument(
@@ -42,7 +36,6 @@ class CreateContainer(lister.Lister):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
results = []
@@ -63,11 +56,15 @@ class CreateContainer(lister.Lister):
class DeleteContainer(command.Command):
"""Delete container"""
- log = logging.getLogger(__name__ + '.DeleteContainer')
-
def get_parser(self, prog_name):
parser = super(DeleteContainer, self).get_parser(prog_name)
parser.add_argument(
+ '--recursive', '-r',
+ action='store_true',
+ default=False,
+ help='Recursively delete objects and container',
+ )
+ parser.add_argument(
'containers',
metavar='<container>',
nargs="+",
@@ -75,20 +72,25 @@ class DeleteContainer(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
for container in parsed_args.containers:
+ if parsed_args.recursive:
+ objs = self.app.client_manager.object_store.object_list(
+ container=container)
+ for obj in objs:
+ self.app.client_manager.object_store.object_delete(
+ container=container,
+ object=obj['name'],
+ )
self.app.client_manager.object_store.container_delete(
container=container,
)
-class ListContainer(lister.Lister):
+class ListContainer(command.Lister):
"""List containers"""
- log = logging.getLogger(__name__ + '.ListContainer')
-
def get_parser(self, prog_name):
parser = super(ListContainer, self).get_parser(prog_name)
parser.add_argument(
@@ -126,7 +128,6 @@ class ListContainer(lister.Lister):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
if parsed_args.long:
@@ -160,8 +161,6 @@ class ListContainer(lister.Lister):
class SaveContainer(command.Command):
"""Save container contents locally"""
- log = logging.getLogger(__name__ + ".SaveContainer")
-
def get_parser(self, prog_name):
parser = super(SaveContainer, self).get_parser(prog_name)
parser.add_argument(
@@ -172,8 +171,6 @@ class SaveContainer(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
-
self.app.client_manager.object_store.container_save(
container=parsed_args.container,
)
@@ -182,8 +179,6 @@ class SaveContainer(command.Command):
class SetContainer(command.Command):
"""Set container properties"""
- log = logging.getLogger(__name__ + '.SetContainer')
-
def get_parser(self, prog_name):
parser = super(SetContainer, self).get_parser(prog_name)
parser.add_argument(
@@ -201,7 +196,6 @@ class SetContainer(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
self.app.client_manager.object_store.container_set(
parsed_args.container,
@@ -209,11 +203,9 @@ class SetContainer(command.Command):
)
-class ShowContainer(show.ShowOne):
+class ShowContainer(command.ShowOne):
"""Display container details"""
- log = logging.getLogger(__name__ + '.ShowContainer')
-
def get_parser(self, prog_name):
parser = super(ShowContainer, self).get_parser(prog_name)
parser.add_argument(
@@ -223,7 +215,6 @@ class ShowContainer(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
data = self.app.client_manager.object_store.container_show(
@@ -238,8 +229,6 @@ class ShowContainer(show.ShowOne):
class UnsetContainer(command.Command):
"""Unset container properties"""
- log = logging.getLogger(__name__ + '.UnsetContainer')
-
def get_parser(self, prog_name):
parser = super(UnsetContainer, self).get_parser(prog_name)
parser.add_argument(
@@ -258,7 +247,6 @@ class UnsetContainer(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
self.app.client_manager.object_store.container_unset(
parsed_args.container,
diff --git a/openstackclient/object/v1/object.py b/openstackclient/object/v1/object.py
index 4bd06124..f9a55e9c 100644
--- a/openstackclient/object/v1/object.py
+++ b/openstackclient/object/v1/object.py
@@ -16,22 +16,16 @@
"""Object v1 action implementations"""
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import parseractions
from openstackclient.common import utils
-class CreateObject(lister.Lister):
+class CreateObject(command.Lister):
"""Upload object to container"""
- log = logging.getLogger(__name__ + '.CreateObject')
-
def get_parser(self, prog_name):
parser = super(CreateObject, self).get_parser(prog_name)
parser.add_argument(
@@ -47,7 +41,6 @@ class CreateObject(lister.Lister):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
results = []
@@ -69,8 +62,6 @@ class CreateObject(lister.Lister):
class DeleteObject(command.Command):
"""Delete object from container"""
- log = logging.getLogger(__name__ + '.DeleteObject')
-
def get_parser(self, prog_name):
parser = super(DeleteObject, self).get_parser(prog_name)
parser.add_argument(
@@ -86,7 +77,6 @@ class DeleteObject(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
for obj in parsed_args.objects:
@@ -96,11 +86,9 @@ class DeleteObject(command.Command):
)
-class ListObject(lister.Lister):
+class ListObject(command.Lister):
"""List objects"""
- log = logging.getLogger(__name__ + '.ListObject')
-
def get_parser(self, prog_name):
parser = super(ListObject, self).get_parser(prog_name)
parser.add_argument(
@@ -148,7 +136,6 @@ class ListObject(lister.Lister):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
if parsed_args.long:
@@ -191,8 +178,6 @@ class ListObject(lister.Lister):
class SaveObject(command.Command):
"""Save object locally"""
- log = logging.getLogger(__name__ + ".SaveObject")
-
def get_parser(self, prog_name):
parser = super(SaveObject, self).get_parser(prog_name)
parser.add_argument(
@@ -213,8 +198,6 @@ class SaveObject(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action(%s)", parsed_args)
-
self.app.client_manager.object_store.object_save(
container=parsed_args.container,
object=parsed_args.object,
@@ -225,8 +208,6 @@ class SaveObject(command.Command):
class SetObject(command.Command):
"""Set object properties"""
- log = logging.getLogger(__name__ + '.SetObject')
-
def get_parser(self, prog_name):
parser = super(SetObject, self).get_parser(prog_name)
parser.add_argument(
@@ -249,7 +230,6 @@ class SetObject(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
self.app.client_manager.object_store.object_set(
parsed_args.container,
@@ -258,11 +238,9 @@ class SetObject(command.Command):
)
-class ShowObject(show.ShowOne):
+class ShowObject(command.ShowOne):
"""Display object details"""
- log = logging.getLogger(__name__ + '.ShowObject')
-
def get_parser(self, prog_name):
parser = super(ShowObject, self).get_parser(prog_name)
parser.add_argument(
@@ -277,7 +255,6 @@ class ShowObject(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
data = self.app.client_manager.object_store.object_show(
@@ -293,8 +270,6 @@ class ShowObject(show.ShowOne):
class UnsetObject(command.Command):
"""Unset object properties"""
- log = logging.getLogger(__name__ + '.UnsetObject')
-
def get_parser(self, prog_name):
parser = super(UnsetObject, self).get_parser(prog_name)
parser.add_argument(
@@ -318,7 +293,6 @@ class UnsetObject(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
self.app.client_manager.object_store.object_unset(
parsed_args.container,
diff --git a/openstackclient/shell.py b/openstackclient/shell.py
index c84e2b1d..137446ef 100644
--- a/openstackclient/shell.py
+++ b/openstackclient/shell.py
@@ -234,12 +234,17 @@ class OpenStackShell(app.App):
# Do configuration file handling
# Ignore the default value of interface. Only if it is set later
# will it be used.
- cc = cloud_config.OpenStackConfig(
- override_defaults={
- 'interface': None,
- 'auth_type': auth_type,
+ try:
+ cc = cloud_config.OpenStackConfig(
+ override_defaults={
+ 'interface': None,
+ 'auth_type': auth_type,
},
)
+ except (IOError, OSError) as e:
+ self.log.critical("Could not read clouds.yaml configuration file")
+ self.print_help_if_requested()
+ raise e
# TODO(thowe): Change cliff so the default value for debug
# can be set to None.
diff --git a/openstackclient/tests/common/test_availability_zone.py b/openstackclient/tests/common/test_availability_zone.py
new file mode 100644
index 00000000..feecaf55
--- /dev/null
+++ b/openstackclient/tests/common/test_availability_zone.py
@@ -0,0 +1,267 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+import mock
+import six
+
+from openstackclient.common import availability_zone
+from openstackclient.tests.compute.v2 import fakes as compute_fakes
+from openstackclient.tests import fakes
+from openstackclient.tests.network.v2 import fakes as network_fakes
+from openstackclient.tests import utils
+from openstackclient.tests.volume.v2 import fakes as volume_fakes
+
+
+def _build_compute_az_datalist(compute_az, long_datalist=False):
+ datalist = ()
+ if not long_datalist:
+ datalist = (
+ compute_az.zoneName,
+ 'available',
+ )
+ else:
+ for host, services in six.iteritems(compute_az.hosts):
+ for service, state in six.iteritems(services):
+ datalist += (
+ compute_az.zoneName,
+ 'available',
+ '',
+ host,
+ service,
+ 'enabled :-) ' + state['updated_at'],
+ )
+ return (datalist,)
+
+
+def _build_volume_az_datalist(volume_az, long_datalist=False):
+ datalist = ()
+ if not long_datalist:
+ datalist = (
+ volume_az.zoneName,
+ 'available',
+ )
+ else:
+ datalist = (
+ volume_az.zoneName,
+ 'available',
+ '', '', '', '',
+ )
+ return (datalist,)
+
+
+def _build_network_az_datalist(network_az, long_datalist=False):
+ datalist = ()
+ if not long_datalist:
+ datalist = (
+ network_az.name,
+ network_az.state,
+ )
+ else:
+ datalist = (
+ network_az.name,
+ network_az.state,
+ network_az.resource,
+ '', '', '',
+ )
+ return (datalist,)
+
+
+class TestAvailabilityZone(utils.TestCommand):
+
+ def setUp(self):
+ super(TestAvailabilityZone, self).setUp()
+
+ compute_client = compute_fakes.FakeComputev2Client(
+ endpoint=fakes.AUTH_URL,
+ token=fakes.AUTH_TOKEN,
+ )
+ self.app.client_manager.compute = compute_client
+
+ self.compute_azs_mock = compute_client.availability_zones
+ self.compute_azs_mock.reset_mock()
+
+ volume_client = volume_fakes.FakeVolumeClient(
+ endpoint=fakes.AUTH_URL,
+ token=fakes.AUTH_TOKEN,
+ )
+ self.app.client_manager.volume = volume_client
+
+ self.volume_azs_mock = volume_client.availability_zones
+ self.volume_azs_mock.reset_mock()
+
+ network_client = network_fakes.FakeNetworkV2Client(
+ endpoint=fakes.AUTH_URL,
+ token=fakes.AUTH_TOKEN,
+ )
+ self.app.client_manager.network = network_client
+
+ network_client.availability_zones = mock.Mock()
+ network_client.find_extension = mock.Mock()
+ self.network_azs_mock = network_client.availability_zones
+
+
+class TestAvailabilityZoneList(TestAvailabilityZone):
+
+ compute_azs = \
+ compute_fakes.FakeAvailabilityZone.create_availability_zones()
+ volume_azs = \
+ volume_fakes.FakeAvailabilityZone.create_availability_zones(count=1)
+ network_azs = \
+ network_fakes.FakeAvailabilityZone.create_availability_zones()
+
+ short_columnslist = ('Zone Name', 'Zone Status')
+ long_columnslist = (
+ 'Zone Name',
+ 'Zone Status',
+ 'Zone Resource',
+ 'Host Name',
+ 'Service Name',
+ 'Service Status',
+ )
+
+ def setUp(self):
+ super(TestAvailabilityZoneList, self).setUp()
+
+ self.compute_azs_mock.list.return_value = self.compute_azs
+ self.volume_azs_mock.list.return_value = self.volume_azs
+ self.network_azs_mock.return_value = self.network_azs
+
+ # Get the command object to test
+ self.cmd = availability_zone.ListAvailabilityZone(self.app, None)
+
+ def test_availability_zone_list_no_options(self):
+ arglist = []
+ verifylist = []
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.compute_azs_mock.list.assert_called_with()
+ self.volume_azs_mock.list.assert_called_with()
+ self.network_azs_mock.assert_called_with()
+
+ self.assertEqual(self.short_columnslist, columns)
+ datalist = ()
+ for compute_az in self.compute_azs:
+ datalist += _build_compute_az_datalist(compute_az)
+ for volume_az in self.volume_azs:
+ datalist += _build_volume_az_datalist(volume_az)
+ for network_az in self.network_azs:
+ datalist += _build_network_az_datalist(network_az)
+ self.assertEqual(datalist, tuple(data))
+
+ def test_availability_zone_list_long(self):
+ arglist = [
+ '--long',
+ ]
+ verifylist = [
+ ('long', True),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.compute_azs_mock.list.assert_called_with()
+ self.volume_azs_mock.list.assert_called_with()
+ self.network_azs_mock.assert_called_with()
+
+ self.assertEqual(self.long_columnslist, columns)
+ datalist = ()
+ for compute_az in self.compute_azs:
+ datalist += _build_compute_az_datalist(compute_az,
+ long_datalist=True)
+ for volume_az in self.volume_azs:
+ datalist += _build_volume_az_datalist(volume_az,
+ long_datalist=True)
+ for network_az in self.network_azs:
+ datalist += _build_network_az_datalist(network_az,
+ long_datalist=True)
+ self.assertEqual(datalist, tuple(data))
+
+ def test_availability_zone_list_compute(self):
+ arglist = [
+ '--compute',
+ ]
+ verifylist = [
+ ('compute', True),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.compute_azs_mock.list.assert_called_with()
+ self.volume_azs_mock.list.assert_not_called()
+ self.network_azs_mock.assert_not_called()
+
+ self.assertEqual(self.short_columnslist, columns)
+ datalist = ()
+ for compute_az in self.compute_azs:
+ datalist += _build_compute_az_datalist(compute_az)
+ self.assertEqual(datalist, tuple(data))
+
+ def test_availability_zone_list_volume(self):
+ arglist = [
+ '--volume',
+ ]
+ verifylist = [
+ ('volume', True),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.compute_azs_mock.list.assert_not_called()
+ self.volume_azs_mock.list.assert_called_with()
+ self.network_azs_mock.assert_not_called()
+
+ self.assertEqual(self.short_columnslist, columns)
+ datalist = ()
+ for volume_az in self.volume_azs:
+ datalist += _build_volume_az_datalist(volume_az)
+ self.assertEqual(datalist, tuple(data))
+
+ def test_availability_zone_list_network(self):
+ arglist = [
+ '--network',
+ ]
+ verifylist = [
+ ('network', True),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.compute_azs_mock.list.assert_not_called()
+ self.volume_azs_mock.list.assert_not_called()
+ self.network_azs_mock.assert_called_with()
+
+ self.assertEqual(self.short_columnslist, columns)
+ datalist = ()
+ for network_az in self.network_azs:
+ datalist += _build_network_az_datalist(network_az)
+ self.assertEqual(datalist, tuple(data))
diff --git a/openstackclient/tests/common/test_extension.py b/openstackclient/tests/common/test_extension.py
index 21c2cc24..66532827 100644
--- a/openstackclient/tests/common/test_extension.py
+++ b/openstackclient/tests/common/test_extension.py
@@ -63,7 +63,9 @@ class TestExtensionList(TestExtension):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# no args should output from all services
@@ -93,7 +95,9 @@ class TestExtensionList(TestExtension):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# no args should output from all services
@@ -131,7 +135,9 @@ class TestExtensionList(TestExtension):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.identity_extensions_mock.list.assert_called_with()
diff --git a/openstackclient/tests/common/test_module.py b/openstackclient/tests/common/test_module.py
index 6918c1b4..2821da9e 100644
--- a/openstackclient/tests/common/test_module.py
+++ b/openstackclient/tests/common/test_module.py
@@ -62,7 +62,9 @@ class TestCommandList(utils.TestCommand):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
collist = ('Command Group', 'Commands')
@@ -94,7 +96,9 @@ class TestModuleList(utils.TestCommand):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Additional modules may be present, just check our additions
@@ -110,7 +114,9 @@ class TestModuleList(utils.TestCommand):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Additional modules may be present, just check our additions
diff --git a/openstackclient/tests/common/test_quota.py b/openstackclient/tests/common/test_quota.py
index 485b8a8b..edf29c9b 100644
--- a/openstackclient/tests/common/test_quota.py
+++ b/openstackclient/tests/common/test_quota.py
@@ -214,13 +214,15 @@ class TestQuotaShow(TestQuota):
loaded=True,
)
- self.service_catalog_mock.get_endpoints.return_value = [
- fakes.FakeResource(
- None,
- copy.deepcopy(identity_fakes.ENDPOINT),
- loaded=True,
- )
- ]
+ fake_network_endpoint = fakes.FakeResource(
+ None,
+ copy.deepcopy(identity_fakes.ENDPOINT),
+ loaded=True,
+ )
+
+ self.service_catalog_mock.get_endpoints.return_value = {
+ 'network': fake_network_endpoint
+ }
self.quotas_class_mock.get.return_value = FakeQuotaResource(
None,
@@ -244,6 +246,8 @@ class TestQuotaShow(TestQuota):
endpoint=fakes.AUTH_URL,
token=fakes.AUTH_TOKEN,
)
+ self.network = self.app.client_manager.network
+ self.network.get_quota = mock.Mock(return_value=network_fakes.QUOTA)
self.cmd = quota.ShowQuota(self.app, None)
@@ -260,6 +264,9 @@ class TestQuotaShow(TestQuota):
self.cmd.take_action(parsed_args)
self.quotas_mock.get.assert_called_with(identity_fakes.project_id)
+ self.volume_quotas_mock.get.assert_called_with(
+ identity_fakes.project_id)
+ self.network.get_quota.assert_called_with(identity_fakes.project_id)
def test_quota_show_with_default(self):
arglist = [
@@ -276,6 +283,8 @@ class TestQuotaShow(TestQuota):
self.cmd.take_action(parsed_args)
self.quotas_mock.defaults.assert_called_with(identity_fakes.project_id)
+ self.volume_quotas_mock.defaults.assert_called_with(
+ identity_fakes.project_id)
def test_quota_show_with_class(self):
arglist = [
@@ -293,3 +302,5 @@ class TestQuotaShow(TestQuota):
self.quotas_class_mock.get.assert_called_with(
identity_fakes.project_id)
+ self.volume_quotas_class_mock.get.assert_called_with(
+ identity_fakes.project_id)
diff --git a/openstackclient/tests/common/test_timing.py b/openstackclient/tests/common/test_timing.py
index e7b9a040..c4c738b2 100644
--- a/openstackclient/tests/common/test_timing.py
+++ b/openstackclient/tests/common/test_timing.py
@@ -61,7 +61,9 @@ class TestTiming(utils.TestCommand):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.assertEqual(self.columns, columns)
@@ -80,7 +82,9 @@ class TestTiming(utils.TestCommand):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.assertEqual(self.columns, columns)
datalist = [
diff --git a/openstackclient/tests/common/test_utils.py b/openstackclient/tests/common/test_utils.py
index 064ad417..da7ce063 100644
--- a/openstackclient/tests/common/test_utils.py
+++ b/openstackclient/tests/common/test_utils.py
@@ -143,7 +143,7 @@ class TestUtils(test_utils.TestCase):
status_f = mock.Mock(return_value=resource)
res_id = str(uuid.uuid4())
self.assertTrue(utils.wait_for_status(status_f, res_id,))
- self.assertFalse(mock_sleep.called)
+ mock_sleep.assert_not_called()
@mock.patch.object(time, 'sleep')
def test_wait_for_status_ok__with_overrides(self, mock_sleep):
@@ -154,7 +154,7 @@ class TestUtils(test_utils.TestCase):
self.assertTrue(utils.wait_for_status(status_f, res_id,
status_field='my_status',
success_status=['complete']))
- self.assertFalse(mock_sleep.called)
+ mock_sleep.assert_not_called()
@mock.patch.object(time, 'sleep')
def test_wait_for_status_error(self, mock_sleep):
@@ -163,7 +163,7 @@ class TestUtils(test_utils.TestCase):
status_f = mock.Mock(return_value=resource)
res_id = str(uuid.uuid4())
self.assertFalse(utils.wait_for_status(status_f, res_id))
- self.assertFalse(mock_sleep.called)
+ mock_sleep.assert_not_called()
@mock.patch.object(time, 'sleep')
def test_wait_for_status_error_with_overrides(self, mock_sleep):
@@ -174,7 +174,7 @@ class TestUtils(test_utils.TestCase):
self.assertFalse(utils.wait_for_status(status_f, res_id,
status_field='my_status',
error_status=['failed']))
- self.assertFalse(mock_sleep.called)
+ mock_sleep.assert_not_called()
@mock.patch.object(time, 'sleep')
def test_wait_for_delete_ok(self, mock_sleep):
@@ -210,7 +210,29 @@ class TestUtils(test_utils.TestCase):
manager = mock.MagicMock(get=mock_get)
res_id = str(uuid.uuid4())
self.assertFalse(utils.wait_for_delete(manager, res_id))
- self.assertFalse(mock_sleep.called)
+ mock_sleep.assert_not_called()
+
+ @mock.patch.object(time, 'sleep')
+ def test_wait_for_delete_error_with_overrides(self, mock_sleep):
+ # Tests that we fail if the resource is my_status=failed
+ resource = mock.MagicMock(my_status='FAILED')
+ mock_get = mock.Mock(return_value=resource)
+ manager = mock.MagicMock(get=mock_get)
+ res_id = str(uuid.uuid4())
+ self.assertFalse(utils.wait_for_delete(manager, res_id,
+ status_field='my_status',
+ error_status=['failed']))
+ mock_sleep.assert_not_called()
+
+ @mock.patch.object(time, 'sleep')
+ def test_wait_for_delete_error_with_overrides_exception(self, mock_sleep):
+ # Tests that we succeed if the resource is specific exception
+ mock_get = mock.Mock(side_effect=Exception)
+ manager = mock.MagicMock(get=mock_get)
+ res_id = str(uuid.uuid4())
+ self.assertTrue(utils.wait_for_delete(manager, res_id,
+ exception_name=['Exception']))
+ mock_sleep.assert_not_called()
def test_build_kwargs_dict_value_set(self):
self.assertEqual({'arg_bla': 'bla'},
@@ -348,6 +370,15 @@ class TestFindResource(test_utils.TestCase):
self.assertEqual(expected, utils.format_list(['a', 'b', 'c']))
self.assertEqual(expected, utils.format_list(['c', 'b', 'a']))
+ def test_format_list_of_dicts(self):
+ expected = "a='b', c='d'\ne='f'"
+ sorted_data = [{'a': 'b', 'c': 'd'}, {'e': 'f'}]
+ unsorted_data = [{'c': 'd', 'a': 'b'}, {'e': 'f'}]
+ self.assertEqual(expected, utils.format_list_of_dicts(sorted_data))
+ self.assertEqual(expected, utils.format_list_of_dicts(unsorted_data))
+ self.assertEqual('', utils.format_list_of_dicts([]))
+ self.assertEqual('', utils.format_list_of_dicts([{}]))
+
def test_format_list_separator(self):
expected = 'a\nb\nc'
actual_pre_sorted = utils.format_list(['a', 'b', 'c'], separator='\n')
diff --git a/openstackclient/tests/compute/v2/fakes.py b/openstackclient/tests/compute/v2/fakes.py
index ecf7f599..00f73748 100644
--- a/openstackclient/tests/compute/v2/fakes.py
+++ b/openstackclient/tests/compute/v2/fakes.py
@@ -88,23 +88,53 @@ SERVICE = {
class FakeComputev2Client(object):
def __init__(self, **kwargs):
+ self.aggregates = mock.Mock()
+ self.aggregates.resource_class = fakes.FakeResource(None, {})
+
+ self.availability_zones = mock.Mock()
+ self.availability_zones.resource_class = fakes.FakeResource(None, {})
+
self.images = mock.Mock()
self.images.resource_class = fakes.FakeResource(None, {})
+
self.servers = mock.Mock()
self.servers.resource_class = fakes.FakeResource(None, {})
+
self.services = mock.Mock()
self.services.resource_class = fakes.FakeResource(None, {})
+
self.extensions = mock.Mock()
self.extensions.resource_class = fakes.FakeResource(None, {})
+
self.flavors = mock.Mock()
self.flavors.resource_class = fakes.FakeResource(None, {})
+
self.quotas = mock.Mock()
self.quotas.resource_class = fakes.FakeResource(None, {})
+
self.quota_classes = mock.Mock()
self.quota_classes.resource_class = fakes.FakeResource(None, {})
+
self.volumes = mock.Mock()
self.volumes.resource_class = fakes.FakeResource(None, {})
+
+ self.hypervisors = mock.Mock()
+ self.hypervisors.resource_class = fakes.FakeResource(None, {})
+
+ self.security_groups = mock.Mock()
+ self.security_groups.resource_class = fakes.FakeResource(None, {})
+
+ self.security_group_rules = mock.Mock()
+ self.security_group_rules.resource_class = fakes.FakeResource(None, {})
+
+ self.floating_ips = mock.Mock()
+ self.floating_ips.resource_class = fakes.FakeResource(None, {})
+
+ self.networks = mock.Mock()
+ self.networks.resource_class = fakes.FakeResource(None, {})
+
self.auth_token = kwargs['token']
+
self.management_url = kwargs['endpoint']
@@ -138,6 +168,73 @@ class TestComputev2(utils.TestCommand):
)
+class FakeHypervisor(object):
+ """Fake one or more hypervisor."""
+
+ @staticmethod
+ def create_one_hypervisor(attrs={}):
+ """Create a fake hypervisor.
+
+ :param Dictionary attrs:
+ A dictionary with all attributes
+ :return:
+ A FakeResource object, with id, hypervisor_hostname, and so on
+ """
+ # Set default attributes.
+ hypervisor_info = {
+ 'id': 'hypervisor-id-' + uuid.uuid4().hex,
+ 'hypervisor_hostname': 'hypervisor-hostname-' + uuid.uuid4().hex,
+ 'status': 'enabled',
+ 'host_ip': '192.168.0.10',
+ 'cpu_info': {
+ 'aaa': 'aaa',
+ },
+ 'free_disk_gb': 50,
+ 'hypervisor_version': 2004001,
+ 'disk_available_least': 50,
+ 'local_gb': 50,
+ 'free_ram_mb': 1024,
+ 'service': {
+ 'host': 'aaa',
+ 'disabled_reason': None,
+ 'id': 1,
+ },
+ 'vcpus_used': 0,
+ 'hypervisor_type': 'QEMU',
+ 'local_gb_used': 0,
+ 'vcpus': 4,
+ 'memory_mb_used': 512,
+ 'memory_mb': 1024,
+ 'current_workload': 0,
+ 'state': 'up',
+ 'running_vms': 0,
+ }
+
+ # Overwrite default attributes.
+ hypervisor_info.update(attrs)
+
+ hypervisor = fakes.FakeResource(info=copy.deepcopy(hypervisor_info),
+ loaded=True)
+ return hypervisor
+
+ @staticmethod
+ def create_hypervisors(attrs={}, count=2):
+ """Create multiple fake hypervisors.
+
+ :param Dictionary attrs:
+ A dictionary with all attributes
+ :param int count:
+ The number of hypervisors to fake
+ :return:
+ A list of FakeResource objects faking the hypervisors
+ """
+ hypervisors = []
+ for i in range(0, count):
+ hypervisors.append(FakeHypervisor.create_one_hypervisor(attrs))
+
+ return hypervisors
+
+
class FakeServer(object):
"""Fake one or more compute servers."""
@@ -289,3 +386,142 @@ class FakeFlavor(object):
if flavors is None:
flavors = FakeServer.create_flavors(count)
return mock.MagicMock(side_effect=flavors)
+
+
+class FakeAvailabilityZone(object):
+ """Fake one or more compute availability zones (AZs)."""
+
+ @staticmethod
+ def create_one_availability_zone(attrs={}, methods={}):
+ """Create a fake AZ.
+
+ :param Dictionary attrs:
+ A dictionary with all attributes
+ :param Dictionary methods:
+ A dictionary with all methods
+ :return:
+ A FakeResource object with zoneName, zoneState, etc.
+ """
+ # Set default attributes.
+ host_name = uuid.uuid4().hex
+ service_name = uuid.uuid4().hex
+ service_updated_at = uuid.uuid4().hex
+ availability_zone = {
+ 'zoneName': uuid.uuid4().hex,
+ 'zoneState': {'available': True},
+ 'hosts': {host_name: {service_name: {
+ 'available': True,
+ 'active': True,
+ 'updated_at': service_updated_at,
+ }}},
+ }
+
+ # Overwrite default attributes.
+ availability_zone.update(attrs)
+
+ availability_zone = fakes.FakeResource(
+ info=copy.deepcopy(availability_zone),
+ methods=methods,
+ loaded=True)
+ return availability_zone
+
+ @staticmethod
+ def create_availability_zones(attrs={}, methods={}, count=2):
+ """Create multiple fake AZs.
+
+ :param Dictionary attrs:
+ A dictionary with all attributes
+ :param Dictionary methods:
+ A dictionary with all methods
+ :param int count:
+ The number of AZs to fake
+ :return:
+ A list of FakeResource objects faking the AZs
+ """
+ availability_zones = []
+ for i in range(0, count):
+ availability_zone = \
+ FakeAvailabilityZone.create_one_availability_zone(
+ attrs, methods)
+ availability_zones.append(availability_zone)
+
+ return availability_zones
+
+
+class FakeFloatingIP(object):
+ """Fake one or more floating ip."""
+
+ @staticmethod
+ def create_one_floating_ip(attrs={}, methods={}):
+ """Create a fake floating ip.
+
+ :param Dictionary attrs:
+ A dictionary with all attributes
+ :param Dictionary methods:
+ A dictionary with all methods
+ :return:
+ A FakeResource object, with id, ip, and so on
+ """
+ # Set default attributes.
+ floating_ip_attrs = {
+ 'id': 'floating-ip-id-' + uuid.uuid4().hex,
+ 'ip': '1.0.9.0',
+ 'fixed_ip': '2.0.9.0',
+ 'instance_id': 'server-id-' + uuid.uuid4().hex,
+ 'pool': 'public',
+ }
+
+ # Overwrite default attributes.
+ floating_ip_attrs.update(attrs)
+
+ # Set default methods.
+ floating_ip_methods = {}
+
+ # Overwrite default methods.
+ floating_ip_methods.update(methods)
+
+ floating_ip = fakes.FakeResource(
+ info=copy.deepcopy(floating_ip_attrs),
+ methods=copy.deepcopy(floating_ip_methods),
+ loaded=True)
+ return floating_ip
+
+ @staticmethod
+ def create_floating_ips(attrs={}, methods={}, count=2):
+ """Create multiple fake floating ips.
+
+ :param Dictionary attrs:
+ A dictionary with all attributes
+ :param Dictionary methods:
+ A dictionary with all methods
+ :param int count:
+ The number of floating ips to fake
+ :return:
+ A list of FakeResource objects faking the floating ips
+ """
+ floating_ips = []
+ for i in range(0, count):
+ floating_ips.append(FakeFloatingIP.create_one_floating_ip(
+ attrs,
+ methods
+ ))
+ return floating_ips
+
+ @staticmethod
+ def get_floating_ips(floating_ips=None, count=2):
+ """Get an iterable MagicMock object with a list of faked floating ips.
+
+ If floating_ips list is provided, then initialize the Mock object
+ with the list. Otherwise create one.
+
+ :param List floating ips:
+ A list of FakeResource objects faking floating ips
+ :param int count:
+ The number of floating ips to fake
+ :return:
+ An iterable Mock object with side_effect set to a list of faked
+ floating ips
+ """
+ if floating_ips is None:
+ floating_ips = FakeFloatingIP.create_floating_ips(count)
+ return mock.MagicMock(side_effect=floating_ips)
diff --git a/openstackclient/tests/compute/v2/test_flavor.py b/openstackclient/tests/compute/v2/test_flavor.py
index 3a59020c..bf78bee8 100644
--- a/openstackclient/tests/compute/v2/test_flavor.py
+++ b/openstackclient/tests/compute/v2/test_flavor.py
@@ -126,7 +126,9 @@ class TestFlavorList(TestFlavor):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -153,7 +155,9 @@ class TestFlavorList(TestFlavor):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -180,7 +184,9 @@ class TestFlavorList(TestFlavor):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -207,7 +213,9 @@ class TestFlavorList(TestFlavor):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -234,7 +242,9 @@ class TestFlavorList(TestFlavor):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
diff --git a/openstackclient/tests/compute/v2/test_hypervisor.py b/openstackclient/tests/compute/v2/test_hypervisor.py
new file mode 100644
index 00000000..8d717ba7
--- /dev/null
+++ b/openstackclient/tests/compute/v2/test_hypervisor.py
@@ -0,0 +1,220 @@
+# Copyright 2016 EasyStack Corporation
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+import copy
+
+from openstackclient.common import exceptions
+from openstackclient.compute.v2 import hypervisor
+from openstackclient.tests.compute.v2 import fakes as compute_fakes
+from openstackclient.tests import fakes
+
+
+class TestHypervisor(compute_fakes.TestComputev2):
+
+ def setUp(self):
+ super(TestHypervisor, self).setUp()
+
+ # Get a shortcut to the compute client hypervisors mock
+ self.hypervisors_mock = self.app.client_manager.compute.hypervisors
+ self.hypervisors_mock.reset_mock()
+
+ # Get a shortcut to the compute client aggregates mock
+ self.aggregates_mock = self.app.client_manager.compute.aggregates
+ self.aggregates_mock.reset_mock()
+
+
+class TestHypervisorList(TestHypervisor):
+
+ def setUp(self):
+ super(TestHypervisorList, self).setUp()
+
+ # Fake hypervisors to be listed up
+ self.hypervisors = compute_fakes.FakeHypervisor.create_hypervisors()
+ self.hypervisors_mock.list.return_value = self.hypervisors
+
+ self.columns = (
+ "ID",
+ "Hypervisor Hostname"
+ )
+ self.data = (
+ (
+ self.hypervisors[0].id,
+ self.hypervisors[0].hypervisor_hostname,
+ ),
+ (
+ self.hypervisors[1].id,
+ self.hypervisors[1].hypervisor_hostname,
+ ),
+ )
+
+ # Get the command object to test
+ self.cmd = hypervisor.ListHypervisor(self.app, None)
+
+ def test_hypervisor_list_no_option(self):
+ arglist = []
+ verifylist = []
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.hypervisors_mock.list.assert_called_with()
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, tuple(data))
+
+ def test_hypervisor_list_matching_option_found(self):
+ arglist = [
+ '--matching', self.hypervisors[0].hypervisor_hostname,
+ ]
+ verifylist = [
+ ('matching', self.hypervisors[0].hypervisor_hostname),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ # Fake the return value of search()
+ self.hypervisors_mock.search.return_value = [self.hypervisors[0]]
+ self.data = (
+ (
+ self.hypervisors[0].id,
+ self.hypervisors[0].hypervisor_hostname,
+ ),
+ )
+
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.hypervisors_mock.search.assert_called_with(
+ self.hypervisors[0].hypervisor_hostname
+ )
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, tuple(data))
+
+ def test_hypervisor_list_matching_option_not_found(self):
+ arglist = [
+ '--matching', 'xxx',
+ ]
+ verifylist = [
+ ('matching', 'xxx'),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ # Fake exception raised from search()
+ self.hypervisors_mock.search.side_effect = exceptions.NotFound(None)
+
+ self.assertRaises(exceptions.NotFound,
+ self.cmd.take_action,
+ parsed_args)
+
+
+class TestHypervisorShow(TestHypervisor):
+
+ def setUp(self):
+ super(TestHypervisorShow, self).setUp()
+
+ # Fake hypervisors to be listed up
+ self.hypervisor = compute_fakes.FakeHypervisor.create_one_hypervisor()
+
+ # Return value of utils.find_resource()
+ self.hypervisors_mock.get.return_value = self.hypervisor
+
+ # Return value of compute_client.aggregates.list()
+ self.aggregates_mock.list.return_value = []
+
+ # Return value of compute_client.hypervisors.uptime()
+ uptime_info = {
+ 'status': self.hypervisor.status,
+ 'state': self.hypervisor.state,
+ 'id': self.hypervisor.id,
+ 'hypervisor_hostname': self.hypervisor.hypervisor_hostname,
+ 'uptime': ' 01:28:24 up 3 days, 11:15, 1 user, '
+ ' load average: 0.94, 0.62, 0.50\n',
+ }
+ self.hypervisors_mock.uptime.return_value = fakes.FakeResource(
+ info=copy.deepcopy(uptime_info),
+ loaded=True
+ )
+
+ self.columns = (
+ 'aggregates',
+ 'cpu_info',
+ 'current_workload',
+ 'disk_available_least',
+ 'free_disk_gb',
+ 'free_ram_mb',
+ 'host_ip',
+ 'hypervisor_hostname',
+ 'hypervisor_type',
+ 'hypervisor_version',
+ 'id',
+ 'local_gb',
+ 'local_gb_used',
+ 'memory_mb',
+ 'memory_mb_used',
+ 'running_vms',
+ 'service_host',
+ 'service_id',
+ 'state',
+ 'status',
+ 'vcpus',
+ 'vcpus_used',
+ )
+ self.data = (
+ [],
+ {'aaa': 'aaa'},
+ 0,
+ 50,
+ 50,
+ 1024,
+ '192.168.0.10',
+ self.hypervisor.hypervisor_hostname,
+ 'QEMU',
+ 2004001,
+ self.hypervisor.id,
+ 50,
+ 0,
+ 1024,
+ 512,
+ 0,
+ 'aaa',
+ 1,
+ 'up',
+ 'enabled',
+ 4,
+ 0,
+ )
+
+ # Get the command object to test
+ self.cmd = hypervisor.ShowHypervisor(self.app, None)
+
+ def test_hypervisor_show(self):
+ arglist = [
+ self.hypervisor.hypervisor_hostname,
+ ]
+ verifylist = [
+ ('hypervisor', self.hypervisor.hypervisor_hostname),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, data)
diff --git a/openstackclient/tests/compute/v2/test_security_group.py b/openstackclient/tests/compute/v2/test_security_group.py
index 87cc4870..c6998cb5 100644
--- a/openstackclient/tests/compute/v2/test_security_group.py
+++ b/openstackclient/tests/compute/v2/test_security_group.py
@@ -12,7 +12,6 @@
#
import copy
-import mock
from openstackclient.compute.v2 import security_group
from openstackclient.tests.compute.v2 import fakes as compute_fakes
@@ -43,14 +42,12 @@ class TestSecurityGroup(compute_fakes.TestComputev2):
def setUp(self):
super(TestSecurityGroup, self).setUp()
- self.secgroups_mock = mock.Mock()
- self.secgroups_mock.resource_class = fakes.FakeResource(None, {})
- self.app.client_manager.compute.security_groups = self.secgroups_mock
+ # Get a shortcut compute client security_groups mock
+ self.secgroups_mock = self.app.client_manager.compute.security_groups
self.secgroups_mock.reset_mock()
- self.projects_mock = mock.Mock()
- self.projects_mock.resource_class = fakes.FakeResource(None, {})
- self.app.client_manager.identity.projects = self.projects_mock
+ # Get a shortcut identity client projects mock
+ self.projects_mock = self.app.client_manager.identity.projects
self.projects_mock.reset_mock()
@@ -90,7 +87,9 @@ class TestSecurityGroupCreate(TestSecurityGroup):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# SecurityGroupManager.create(name, description)
@@ -113,7 +112,9 @@ class TestSecurityGroupCreate(TestSecurityGroup):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# SecurityGroupManager.create(name, description)
@@ -158,7 +159,9 @@ class TestSecurityGroupList(TestSecurityGroup):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
diff --git a/openstackclient/tests/compute/v2/test_security_group_rule.py b/openstackclient/tests/compute/v2/test_security_group_rule.py
index a2f9b108..9a8003f3 100644
--- a/openstackclient/tests/compute/v2/test_security_group_rule.py
+++ b/openstackclient/tests/compute/v2/test_security_group_rule.py
@@ -12,7 +12,6 @@
#
import copy
-import mock
from openstackclient.compute.v2 import security_group
from openstackclient.tests.compute.v2 import fakes as compute_fakes
@@ -102,15 +101,13 @@ class TestSecurityGroupRule(compute_fakes.TestComputev2):
def setUp(self):
super(TestSecurityGroupRule, self).setUp()
- self.secgroups_mock = mock.Mock()
- self.secgroups_mock.resource_class = fakes.FakeResource(None, {})
- self.app.client_manager.compute.security_groups = self.secgroups_mock
+ # Get a shortcut compute client security_groups mock
+ self.secgroups_mock = self.app.client_manager.compute.security_groups
self.secgroups_mock.reset_mock()
- self.sg_rules_mock = mock.Mock()
- self.sg_rules_mock.resource_class = fakes.FakeResource(None, {})
- self.app.client_manager.compute.security_group_rules = \
- self.sg_rules_mock
+ # Get a shortcut compute client security_group_rules mock
+ self.sg_rules_mock = \
+ self.app.client_manager.compute.security_group_rules
self.sg_rules_mock.reset_mock()
@@ -152,7 +149,9 @@ class TestSecurityGroupRuleCreate(TestSecurityGroupRule):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# SecurityGroupManager.create(name, description)
@@ -196,7 +195,9 @@ class TestSecurityGroupRuleCreate(TestSecurityGroupRule):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# SecurityGroupManager.create(name, description)
@@ -244,7 +245,9 @@ class TestSecurityGroupRuleCreate(TestSecurityGroupRule):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# SecurityGroupManager.create(name, description)
@@ -287,7 +290,9 @@ class TestSecurityGroupRuleCreate(TestSecurityGroupRule):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# SecurityGroupManager.create(name, description)
@@ -333,7 +338,9 @@ class TestSecurityGroupRuleCreate(TestSecurityGroupRule):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# SecurityGroupManager.create(name, description)
@@ -404,7 +411,9 @@ class TestSecurityGroupRuleList(TestSecurityGroupRule):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
collist = (
@@ -440,7 +449,9 @@ class TestSecurityGroupRuleList(TestSecurityGroupRule):
parsed_args = self.check_parser(self.cmd, [], [])
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
collist = (
diff --git a/openstackclient/tests/compute/v2/test_server.py b/openstackclient/tests/compute/v2/test_server.py
index f6b62291..95188522 100644
--- a/openstackclient/tests/compute/v2/test_server.py
+++ b/openstackclient/tests/compute/v2/test_server.py
@@ -79,7 +79,6 @@ class TestServer(compute_fakes.TestComputev2):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
for s in servers:
@@ -144,11 +143,10 @@ class TestServerCreate(TestServer):
verifylist = [
('server_name', self.new_server.name),
]
- try:
- # Missing required args should bail here
- self.check_parser(self.cmd, arglist, verifylist)
- except utils.ParserException:
- pass
+
+ # Missing required args should bail here
+ self.assertRaises(utils.ParserException, self.check_parser,
+ self.cmd, arglist, verifylist)
def test_server_create_minimal(self):
arglist = [
@@ -164,7 +162,9 @@ class TestServerCreate(TestServer):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -242,7 +242,9 @@ class TestServerCreate(TestServer):
self.app.client_manager.network.find_network = find_network
self.app.client_manager.network.find_port = find_port
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -300,7 +302,9 @@ class TestServerCreate(TestServer):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Ensure the userdata file is opened
@@ -411,7 +415,6 @@ class TestServerDelete(TestServer):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
self.servers_mock.delete.assert_called_with(
@@ -431,7 +434,6 @@ class TestServerDelete(TestServer):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
calls = []
@@ -451,7 +453,6 @@ class TestServerDelete(TestServer):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
self.servers_mock.delete.assert_called_with(
@@ -476,7 +477,6 @@ class TestServerDelete(TestServer):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.assertRaises(SystemExit, self.cmd.take_action, parsed_args)
self.servers_mock.delete.assert_called_with(
@@ -490,6 +490,26 @@ class TestServerDelete(TestServer):
)
+class TestServerDumpCreate(TestServer):
+
+ def setUp(self):
+ super(TestServerDumpCreate, self).setUp()
+
+ # Get the command object to test
+ self.cmd = server.CreateServerDump(self.app, None)
+
+ # Set methods to be tested.
+ self.methods = {
+ 'trigger_crash_dump': None,
+ }
+
+ def test_server_dump_one_server(self):
+ self.run_method_with_servers('trigger_crash_dump', 1)
+
+ def test_server_dump_multi_servers(self):
+ self.run_method_with_servers('trigger_crash_dump', 3)
+
+
class TestServerImageCreate(TestServer):
columns = (
@@ -536,7 +556,9 @@ class TestServerImageCreate(TestServer):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# ServerManager.create_image(server, image_name, metadata=)
@@ -559,7 +581,9 @@ class TestServerImageCreate(TestServer):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# ServerManager.create_image(server, image_name, metadata=)
@@ -841,7 +865,6 @@ class TestServerResize(TestServer):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
self.servers_mock.get.assert_called_with(
@@ -865,7 +888,6 @@ class TestServerResize(TestServer):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
self.servers_mock.get.assert_called_with(
@@ -894,7 +916,6 @@ class TestServerResize(TestServer):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
self.servers_mock.get.assert_called_with(
@@ -919,7 +940,6 @@ class TestServerResize(TestServer):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
self.servers_mock.get.assert_called_with(
diff --git a/openstackclient/tests/compute/v2/test_service.py b/openstackclient/tests/compute/v2/test_service.py
index 380fbc4f..54adaab3 100644
--- a/openstackclient/tests/compute/v2/test_service.py
+++ b/openstackclient/tests/compute/v2/test_service.py
@@ -49,7 +49,6 @@ class TestServiceDelete(TestService):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
self.service_mock.delete.assert_called_with(
@@ -82,7 +81,9 @@ class TestServiceList(TestService):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
self.cmd.take_action(parsed_args)
self.service_mock.list.assert_called_with(
diff --git a/openstackclient/tests/identity/v2_0/test_catalog.py b/openstackclient/tests/identity/v2_0/test_catalog.py
index ff1d993e..1e27bb3c 100644
--- a/openstackclient/tests/identity/v2_0/test_catalog.py
+++ b/openstackclient/tests/identity/v2_0/test_catalog.py
@@ -72,7 +72,9 @@ class TestCatalogList(TestCatalog):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.sc_mock.service_catalog.get_data.assert_called_with()
@@ -114,7 +116,9 @@ class TestCatalogList(TestCatalog):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.sc_mock.service_catalog.get_data.assert_called_with()
@@ -146,7 +150,9 @@ class TestCatalogShow(TestCatalog):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
self.sc_mock.service_catalog.get_data.assert_called_with()
diff --git a/openstackclient/tests/identity/v2_0/test_endpoint.py b/openstackclient/tests/identity/v2_0/test_endpoint.py
index 354b1e40..088fdcd1 100644
--- a/openstackclient/tests/identity/v2_0/test_endpoint.py
+++ b/openstackclient/tests/identity/v2_0/test_endpoint.py
@@ -69,7 +69,9 @@ class TestEndpointCreate(TestEndpoint):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# EndpointManager.create(region, service_id, publicurl, adminurl,
@@ -130,7 +132,6 @@ class TestEndpointDelete(TestEndpoint):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
self.endpoints_mock.delete.assert_called_with(
@@ -165,7 +166,9 @@ class TestEndpointList(TestEndpoint):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.endpoints_mock.list.assert_called_with()
@@ -189,7 +192,9 @@ class TestEndpointList(TestEndpoint):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.endpoints_mock.list.assert_called_with()
@@ -240,7 +245,9 @@ class TestEndpointShow(TestEndpoint):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# EndpointManager.list()
diff --git a/openstackclient/tests/identity/v2_0/test_project.py b/openstackclient/tests/identity/v2_0/test_project.py
index 69b29268..669c3eab 100644
--- a/openstackclient/tests/identity/v2_0/test_project.py
+++ b/openstackclient/tests/identity/v2_0/test_project.py
@@ -70,7 +70,9 @@ class TestProjectCreate(TestProject):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -96,7 +98,9 @@ class TestProjectCreate(TestProject):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -124,7 +128,9 @@ class TestProjectCreate(TestProject):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -152,7 +158,9 @@ class TestProjectCreate(TestProject):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -180,7 +188,9 @@ class TestProjectCreate(TestProject):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -221,7 +231,9 @@ class TestProjectCreate(TestProject):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# ProjectManager.create(name, description, enabled)
@@ -251,7 +263,9 @@ class TestProjectCreate(TestProject):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -322,7 +336,9 @@ class TestProjectList(TestProject):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.projects_mock.list.assert_called_with()
@@ -343,7 +359,9 @@ class TestProjectList(TestProject):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.projects_mock.list.assert_called_with()
@@ -549,7 +567,9 @@ class TestProjectShow(TestProject):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
self.projects_mock.get.assert_called_with(
identity_fakes.project_id,
diff --git a/openstackclient/tests/identity/v2_0/test_role.py b/openstackclient/tests/identity/v2_0/test_role.py
index c2bacc52..03b7f924 100644
--- a/openstackclient/tests/identity/v2_0/test_role.py
+++ b/openstackclient/tests/identity/v2_0/test_role.py
@@ -86,7 +86,9 @@ class TestRoleAdd(TestRole):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# RoleManager.add_user_role(user, role, tenant=None)
@@ -137,7 +139,9 @@ class TestRoleCreate(TestRole):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# RoleManager.create(name)
@@ -171,7 +175,9 @@ class TestRoleCreate(TestRole):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# RoleManager.get(name, description, enabled)
@@ -196,7 +202,9 @@ class TestRoleCreate(TestRole):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# RoleManager.create(name)
@@ -232,7 +240,6 @@ class TestRoleDelete(TestRole):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
self.roles_mock.delete.assert_called_with(
@@ -261,7 +268,9 @@ class TestRoleList(TestRole):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.roles_mock.list.assert_called_with()
@@ -331,7 +340,9 @@ class TestUserRoleList(TestRole):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.roles_mock.roles_for_user.assert_called_with(
@@ -388,7 +399,9 @@ class TestUserRoleList(TestRole):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.roles_mock.roles_for_user.assert_called_with(
@@ -446,7 +459,6 @@ class TestRoleRemove(TestRole):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
# RoleManager.remove_user_role(user, role, tenant=None)
@@ -480,7 +492,9 @@ class TestRoleShow(TestRole):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# RoleManager.get(role)
diff --git a/openstackclient/tests/identity/v2_0/test_service.py b/openstackclient/tests/identity/v2_0/test_service.py
index b97786b4..606b1433 100644
--- a/openstackclient/tests/identity/v2_0/test_service.py
+++ b/openstackclient/tests/identity/v2_0/test_service.py
@@ -69,7 +69,9 @@ class TestServiceCreate(TestService):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# ServiceManager.create(name, service_type, description)
@@ -95,7 +97,9 @@ class TestServiceCreate(TestService):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# ServiceManager.create(name, service_type, description)
@@ -121,7 +125,9 @@ class TestServiceCreate(TestService):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# ServiceManager.create(name, service_type, description)
@@ -148,7 +154,9 @@ class TestServiceCreate(TestService):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# ServiceManager.create(name, service_type, description)
@@ -186,7 +194,6 @@ class TestServiceDelete(TestService):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
self.services_mock.delete.assert_called_with(
@@ -215,7 +222,9 @@ class TestServiceList(TestService):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.services_mock.list.assert_called_with()
@@ -238,7 +247,9 @@ class TestServiceList(TestService):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.services_mock.list.assert_called_with()
@@ -277,7 +288,9 @@ class TestServiceShow(TestService):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# ServiceManager.get(id)
diff --git a/openstackclient/tests/identity/v2_0/test_token.py b/openstackclient/tests/identity/v2_0/test_token.py
index ce2faef3..7687a063 100644
--- a/openstackclient/tests/identity/v2_0/test_token.py
+++ b/openstackclient/tests/identity/v2_0/test_token.py
@@ -43,7 +43,9 @@ class TestTokenIssue(TestToken):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
self.sc_mock.get_token.assert_called_with()
diff --git a/openstackclient/tests/identity/v2_0/test_user.py b/openstackclient/tests/identity/v2_0/test_user.py
index a25def87..a7332e63 100644
--- a/openstackclient/tests/identity/v2_0/test_user.py
+++ b/openstackclient/tests/identity/v2_0/test_user.py
@@ -83,7 +83,9 @@ class TestUserCreate(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -114,7 +116,9 @@ class TestUserCreate(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -143,7 +147,9 @@ class TestUserCreate(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
mocker = mock.Mock()
mocker.return_value = 'abc123'
with mock.patch("openstackclient.common.utils.get_password", mocker):
@@ -176,7 +182,9 @@ class TestUserCreate(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -221,7 +229,9 @@ class TestUserCreate(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -259,7 +269,9 @@ class TestUserCreate(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -290,7 +302,9 @@ class TestUserCreate(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -332,7 +346,9 @@ class TestUserCreate(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# UserManager.create(name, password, email, tenant_id=, enabled=)
@@ -352,7 +368,9 @@ class TestUserCreate(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -396,7 +414,6 @@ class TestUserDelete(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
self.users_mock.delete.assert_called_with(
@@ -449,7 +466,9 @@ class TestUserList(TestUser):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.users_mock.list.assert_called_with(tenant_id=None)
@@ -467,7 +486,9 @@ class TestUserList(TestUser):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
project_id = identity_fakes.PROJECT_2['id']
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.users_mock.list.assert_called_with(tenant_id=project_id)
@@ -484,7 +505,9 @@ class TestUserList(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.users_mock.list.assert_called_with(tenant_id=None)
@@ -554,7 +577,6 @@ class TestUserSet(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
# Set expected values
@@ -585,7 +607,6 @@ class TestUserSet(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
# UserManager.update_password(user, password)
@@ -611,7 +632,6 @@ class TestUserSet(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
mocker = mock.Mock()
mocker.return_value = 'abc123'
with mock.patch("openstackclient.common.utils.get_password", mocker):
@@ -639,7 +659,6 @@ class TestUserSet(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
# Set expected values
@@ -669,7 +688,6 @@ class TestUserSet(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
# UserManager.update_tenant(user, tenant)
@@ -694,7 +712,6 @@ class TestUserSet(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
# Set expected values
@@ -723,7 +740,6 @@ class TestUserSet(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
# Set expected values
@@ -760,7 +776,9 @@ class TestUserShow(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
self.users_mock.get.assert_called_with(identity_fakes.user_id)
diff --git a/openstackclient/tests/identity/v3/fakes.py b/openstackclient/tests/identity/v3/fakes.py
index 59b08973..a06802c5 100644
--- a/openstackclient/tests/identity/v3/fakes.py
+++ b/openstackclient/tests/identity/v3/fakes.py
@@ -449,6 +449,8 @@ class FakeIdentityv3Client(object):
self.session = mock.Mock()
self.session.auth.auth_ref.service_catalog.resource_class = \
fakes.FakeResource(None, {})
+ self.tokens = mock.Mock()
+ self.tokens.resource_class = fakes.FakeResource(None, {})
self.trusts = mock.Mock()
self.trusts.resource_class = fakes.FakeResource(None, {})
self.users = mock.Mock()
diff --git a/openstackclient/tests/identity/v3/test_catalog.py b/openstackclient/tests/identity/v3/test_catalog.py
index 6bb962de..a03c9d3e 100644
--- a/openstackclient/tests/identity/v3/test_catalog.py
+++ b/openstackclient/tests/identity/v3/test_catalog.py
@@ -68,7 +68,9 @@ class TestCatalogList(TestCatalog):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.sc_mock.service_catalog.get_data.assert_called_with()
@@ -101,7 +103,9 @@ class TestCatalogShow(TestCatalog):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
self.sc_mock.service_catalog.get_data.assert_called_with()
diff --git a/openstackclient/tests/identity/v3/test_consumer.py b/openstackclient/tests/identity/v3/test_consumer.py
index 4e807562..7f6af734 100644
--- a/openstackclient/tests/identity/v3/test_consumer.py
+++ b/openstackclient/tests/identity/v3/test_consumer.py
@@ -121,7 +121,9 @@ class TestConsumerList(TestOAuth1):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.consumers_mock.list.assert_called_with()
diff --git a/openstackclient/tests/identity/v3/test_domain.py b/openstackclient/tests/identity/v3/test_domain.py
index 969c2df7..9de6b26a 100644
--- a/openstackclient/tests/identity/v3/test_domain.py
+++ b/openstackclient/tests/identity/v3/test_domain.py
@@ -63,7 +63,9 @@ class TestDomainCreate(TestDomain):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -90,7 +92,9 @@ class TestDomainCreate(TestDomain):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -117,7 +121,9 @@ class TestDomainCreate(TestDomain):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -144,7 +150,9 @@ class TestDomainCreate(TestDomain):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -215,7 +223,9 @@ class TestDomainList(TestDomain):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.domains_mock.list.assert_called_with()
@@ -380,7 +390,9 @@ class TestDomainShow(TestDomain):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
self.domains_mock.get.assert_called_with(
identity_fakes.domain_id,
diff --git a/openstackclient/tests/identity/v3/test_endpoint.py b/openstackclient/tests/identity/v3/test_endpoint.py
index fb88e004..1c481930 100644
--- a/openstackclient/tests/identity/v3/test_endpoint.py
+++ b/openstackclient/tests/identity/v3/test_endpoint.py
@@ -81,7 +81,9 @@ class TestEndpointCreate(TestEndpoint):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -126,7 +128,9 @@ class TestEndpointCreate(TestEndpoint):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -170,7 +174,9 @@ class TestEndpointCreate(TestEndpoint):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -214,7 +220,9 @@ class TestEndpointCreate(TestEndpoint):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -315,7 +323,9 @@ class TestEndpointList(TestEndpoint):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.endpoints_mock.list.assert_called_with()
@@ -342,7 +352,9 @@ class TestEndpointList(TestEndpoint):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -374,7 +386,9 @@ class TestEndpointList(TestEndpoint):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -406,7 +420,9 @@ class TestEndpointList(TestEndpoint):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -665,7 +681,9 @@ class TestEndpointShow(TestEndpoint):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
self.endpoints_mock.get.assert_called_with(
identity_fakes.endpoint_id,
diff --git a/openstackclient/tests/identity/v3/test_group.py b/openstackclient/tests/identity/v3/test_group.py
index 59a36819..c5f5dbca 100644
--- a/openstackclient/tests/identity/v3/test_group.py
+++ b/openstackclient/tests/identity/v3/test_group.py
@@ -85,7 +85,9 @@ class TestGroupList(TestGroup):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -110,7 +112,9 @@ class TestGroupList(TestGroup):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -135,7 +139,9 @@ class TestGroupList(TestGroup):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -160,7 +166,9 @@ class TestGroupList(TestGroup):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
diff --git a/openstackclient/tests/identity/v3/test_identity_provider.py b/openstackclient/tests/identity/v3/test_identity_provider.py
index 50a922b8..75911510 100644
--- a/openstackclient/tests/identity/v3/test_identity_provider.py
+++ b/openstackclient/tests/identity/v3/test_identity_provider.py
@@ -290,7 +290,9 @@ class TestIdentityProviderList(TestIdentityProvider):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.identity_providers_mock.list.assert_called_with()
diff --git a/openstackclient/tests/identity/v3/test_project.py b/openstackclient/tests/identity/v3/test_project.py
index 36540201..b834e943 100644
--- a/openstackclient/tests/identity/v3/test_project.py
+++ b/openstackclient/tests/identity/v3/test_project.py
@@ -83,7 +83,9 @@ class TestProjectCreate(TestProject):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -125,7 +127,9 @@ class TestProjectCreate(TestProject):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -159,7 +163,9 @@ class TestProjectCreate(TestProject):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -225,7 +231,9 @@ class TestProjectCreate(TestProject):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -258,7 +266,9 @@ class TestProjectCreate(TestProject):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -290,7 +300,9 @@ class TestProjectCreate(TestProject):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -464,7 +476,9 @@ class TestProjectList(TestProject):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.projects_mock.list.assert_called_with()
@@ -480,7 +494,9 @@ class TestProjectList(TestProject):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.projects_mock.list.assert_called_with()
@@ -511,7 +527,9 @@ class TestProjectList(TestProject):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.projects_mock.list.assert_called_with(
domain=identity_fakes.domain_id)
@@ -737,7 +755,9 @@ class TestProjectShow(TestProject):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
self.projects_mock.get.assert_called_with(
identity_fakes.project_id,
diff --git a/openstackclient/tests/identity/v3/test_region.py b/openstackclient/tests/identity/v3/test_region.py
index 9ac9ddf8..f5f50793 100644
--- a/openstackclient/tests/identity/v3/test_region.py
+++ b/openstackclient/tests/identity/v3/test_region.py
@@ -64,7 +64,9 @@ class TestRegionCreate(TestRegion):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -89,7 +91,9 @@ class TestRegionCreate(TestRegion):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -116,7 +120,9 @@ class TestRegionCreate(TestRegion):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -193,7 +199,9 @@ class TestRegionList(TestRegion):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.regions_mock.list.assert_called_with()
@@ -209,7 +217,9 @@ class TestRegionList(TestRegion):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.regions_mock.list.assert_called_with(
parent_region_id=identity_fakes.region_parent_region_id)
@@ -316,7 +326,9 @@ class TestRegionShow(TestRegion):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
self.regions_mock.get.assert_called_with(
identity_fakes.region_id,
diff --git a/openstackclient/tests/identity/v3/test_role.py b/openstackclient/tests/identity/v3/test_role.py
index 1910c874..f3661324 100644
--- a/openstackclient/tests/identity/v3/test_role.py
+++ b/openstackclient/tests/identity/v3/test_role.py
@@ -258,7 +258,9 @@ class TestRoleCreate(TestRole):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -304,7 +306,6 @@ class TestRoleDelete(TestRole):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
self.roles_mock.delete.assert_called_with(
@@ -365,7 +366,9 @@ class TestRoleList(TestRole):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.roles_mock.list.assert_called_with()
@@ -384,7 +387,9 @@ class TestRoleList(TestRole):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -410,7 +415,9 @@ class TestRoleList(TestRole):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -438,7 +445,9 @@ class TestRoleList(TestRole):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -473,7 +482,9 @@ class TestRoleList(TestRole):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -508,7 +519,9 @@ class TestRoleList(TestRole):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -543,7 +556,9 @@ class TestRoleList(TestRole):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -625,7 +640,6 @@ class TestRoleRemove(TestRole):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
# Set expected values
@@ -658,7 +672,6 @@ class TestRoleRemove(TestRole):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
# Set expected values
@@ -692,7 +705,6 @@ class TestRoleRemove(TestRole):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
# Set expected values
@@ -725,7 +737,6 @@ class TestRoleRemove(TestRole):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
# Set expected values
@@ -767,7 +778,6 @@ class TestRoleSet(TestRole):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
# Set expected values
@@ -804,7 +814,9 @@ class TestRoleShow(TestRole):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# RoleManager.get(role)
diff --git a/openstackclient/tests/identity/v3/test_role_assignment.py b/openstackclient/tests/identity/v3/test_role_assignment.py
index 067a9537..5def7632 100644
--- a/openstackclient/tests/identity/v3/test_role_assignment.py
+++ b/openstackclient/tests/identity/v3/test_role_assignment.py
@@ -86,7 +86,9 @@ class TestRoleAssignmentList(TestRoleAssignment):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.role_assignments_mock.list.assert_called_with(
@@ -148,7 +150,9 @@ class TestRoleAssignmentList(TestRoleAssignment):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.role_assignments_mock.list.assert_called_with(
@@ -210,7 +214,9 @@ class TestRoleAssignmentList(TestRoleAssignment):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.role_assignments_mock.list.assert_called_with(
@@ -272,7 +278,9 @@ class TestRoleAssignmentList(TestRoleAssignment):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.role_assignments_mock.list.assert_called_with(
@@ -334,7 +342,9 @@ class TestRoleAssignmentList(TestRoleAssignment):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.role_assignments_mock.list.assert_called_with(
@@ -394,7 +404,9 @@ class TestRoleAssignmentList(TestRoleAssignment):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.role_assignments_mock.list.assert_called_with(
@@ -456,7 +468,9 @@ class TestRoleAssignmentList(TestRoleAssignment):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.role_assignments_mock.list.assert_called_with(
diff --git a/openstackclient/tests/identity/v3/test_service.py b/openstackclient/tests/identity/v3/test_service.py
index c609142c..2bc5927f 100644
--- a/openstackclient/tests/identity/v3/test_service.py
+++ b/openstackclient/tests/identity/v3/test_service.py
@@ -73,7 +73,9 @@ class TestServiceCreate(TestService):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# ServiceManager.create(name=, type=, enabled=, **kwargs)
@@ -101,7 +103,9 @@ class TestServiceCreate(TestService):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# ServiceManager.create(name=, type=, enabled=, **kwargs)
@@ -129,7 +133,9 @@ class TestServiceCreate(TestService):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# ServiceManager.create(name=, type=, enabled=, **kwargs)
@@ -157,7 +163,9 @@ class TestServiceCreate(TestService):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# ServiceManager.create(name=, type=, enabled=, **kwargs)
@@ -225,7 +233,9 @@ class TestServiceList(TestService):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.services_mock.list.assert_called_with()
@@ -248,7 +258,9 @@ class TestServiceList(TestService):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.services_mock.list.assert_called_with()
@@ -465,7 +477,9 @@ class TestServiceShow(TestService):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# ServiceManager.get(id)
diff --git a/openstackclient/tests/identity/v3/test_service_provider.py b/openstackclient/tests/identity/v3/test_service_provider.py
index 24fa7c7b..fb7576f1 100644
--- a/openstackclient/tests/identity/v3/test_service_provider.py
+++ b/openstackclient/tests/identity/v3/test_service_provider.py
@@ -220,7 +220,9 @@ class TestServiceProviderList(TestServiceProvider):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.service_providers_mock.list.assert_called_with()
diff --git a/openstackclient/tests/identity/v3/test_token.py b/openstackclient/tests/identity/v3/test_token.py
index 6ad4845d..b051aacb 100644
--- a/openstackclient/tests/identity/v3/test_token.py
+++ b/openstackclient/tests/identity/v3/test_token.py
@@ -44,7 +44,9 @@ class TestTokenIssue(TestToken):
self.sc_mock.get_token.return_value = \
identity_fakes.TOKEN_WITH_PROJECT_ID
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
self.sc_mock.get_token.assert_called_with()
@@ -66,7 +68,9 @@ class TestTokenIssue(TestToken):
self.sc_mock.get_token.return_value = \
identity_fakes.TOKEN_WITH_DOMAIN_ID
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
self.sc_mock.get_token.assert_called_with()
@@ -80,3 +84,24 @@ class TestTokenIssue(TestToken):
identity_fakes.user_id,
)
self.assertEqual(datalist, data)
+
+
+class TestTokenRevoke(TestToken):
+
+ TOKEN = 'fob'
+
+ def setUp(self):
+ super(TestTokenRevoke, self).setUp()
+ self.tokens_mock = self.app.client_manager.identity.tokens
+ self.tokens_mock.reset_mock()
+ self.tokens_mock.revoke_token.return_value = True
+ self.cmd = token.RevokeToken(self.app, None)
+
+ def test_token_revoke(self):
+ arglist = [self.TOKEN]
+ verifylist = [('token', self.TOKEN)]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.cmd.take_action(parsed_args)
+
+ self.tokens_mock.revoke_token.assert_called_with(self.TOKEN)
diff --git a/openstackclient/tests/identity/v3/test_trust.py b/openstackclient/tests/identity/v3/test_trust.py
index b90e7815..2a748872 100644
--- a/openstackclient/tests/identity/v3/test_trust.py
+++ b/openstackclient/tests/identity/v3/test_trust.py
@@ -81,7 +81,9 @@ class TestTrustCreate(TestTrust):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -167,7 +169,9 @@ class TestTrustList(TestTrust):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.trusts_mock.list.assert_called_with()
@@ -209,7 +213,9 @@ class TestTrustShow(TestTrust):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
self.trusts_mock.get.assert_called_with(identity_fakes.trust_id)
diff --git a/openstackclient/tests/identity/v3/test_unscoped_saml.py b/openstackclient/tests/identity/v3/test_unscoped_saml.py
index 6a799094..c2f14493 100644
--- a/openstackclient/tests/identity/v3/test_unscoped_saml.py
+++ b/openstackclient/tests/identity/v3/test_unscoped_saml.py
@@ -52,7 +52,9 @@ class TestProjectList(TestUnscopedSAML):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.projects_mock.list.assert_called_with()
@@ -101,7 +103,9 @@ class TestDomainList(TestUnscopedSAML):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.domains_mock.list.assert_called_with()
diff --git a/openstackclient/tests/identity/v3/test_user.py b/openstackclient/tests/identity/v3/test_user.py
index 1871ed18..3757c5f8 100644
--- a/openstackclient/tests/identity/v3/test_user.py
+++ b/openstackclient/tests/identity/v3/test_user.py
@@ -104,7 +104,9 @@ class TestUserCreate(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -141,7 +143,9 @@ class TestUserCreate(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -176,7 +180,9 @@ class TestUserCreate(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
mocker = mock.Mock()
mocker.return_value = 'abc123'
with mock.patch("openstackclient.common.utils.get_password", mocker):
@@ -214,7 +220,9 @@ class TestUserCreate(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -264,7 +272,9 @@ class TestUserCreate(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -324,7 +334,9 @@ class TestUserCreate(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -367,7 +379,9 @@ class TestUserCreate(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -401,7 +415,9 @@ class TestUserCreate(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -435,7 +451,9 @@ class TestUserCreate(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -481,7 +499,6 @@ class TestUserDelete(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
self.users_mock.delete.assert_called_with(
@@ -553,7 +570,9 @@ class TestUserList(TestUser):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -578,7 +597,9 @@ class TestUserList(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -603,7 +624,9 @@ class TestUserList(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -628,7 +651,9 @@ class TestUserList(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -673,7 +698,9 @@ class TestUserList(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
kwargs = {
@@ -746,7 +773,6 @@ class TestUserSet(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
# Set expected values
@@ -778,7 +804,6 @@ class TestUserSet(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
# Set expected values
@@ -810,7 +835,6 @@ class TestUserSet(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
mocker = mock.Mock()
mocker.return_value = 'abc123'
with mock.patch("openstackclient.common.utils.get_password", mocker):
@@ -844,7 +868,6 @@ class TestUserSet(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
# Set expected values
@@ -875,7 +898,6 @@ class TestUserSet(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
# Set expected values
@@ -908,7 +930,6 @@ class TestUserSet(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
# Set expected values
@@ -939,7 +960,6 @@ class TestUserSet(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
# Set expected values
@@ -969,7 +989,6 @@ class TestUserSet(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
# Set expected values
@@ -1072,7 +1091,9 @@ class TestUserShow(TestUser):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
self.users_mock.get.assert_called_with(identity_fakes.user_id)
diff --git a/openstackclient/tests/image/v1/test_image.py b/openstackclient/tests/image/v1/test_image.py
index 60b7f309..201105a4 100644
--- a/openstackclient/tests/image/v1/test_image.py
+++ b/openstackclient/tests/image/v1/test_image.py
@@ -73,7 +73,9 @@ class TestImageCreate(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# ImageManager.create(name=, **)
@@ -120,7 +122,9 @@ class TestImageCreate(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# ImageManager.create(name=, **)
@@ -172,7 +176,9 @@ class TestImageCreate(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Ensure input file is opened
@@ -230,7 +236,6 @@ class TestImageDelete(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
self.images_mock.delete.assert_called_with(
@@ -240,6 +245,19 @@ class TestImageDelete(TestImage):
class TestImageList(TestImage):
+ columns = (
+ 'ID',
+ 'Name',
+ 'Status',
+ )
+ datalist = (
+ (
+ image_fakes.image_id,
+ image_fakes.image_name,
+ '',
+ ),
+ )
+
def setUp(self):
super(TestImageList, self).setUp()
@@ -261,22 +279,17 @@ class TestImageList(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.api_mock.image_list.assert_called_with(
detailed=True,
marker=image_fakes.image_id,
)
- collist = ('ID', 'Name', 'Status')
-
- self.assertEqual(collist, columns)
- datalist = ((
- image_fakes.image_id,
- image_fakes.image_name,
- '',
- ), )
- self.assertEqual(datalist, tuple(data))
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, tuple(data))
def test_image_list_public_option(self):
arglist = [
@@ -289,7 +302,9 @@ class TestImageList(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.api_mock.image_list.assert_called_with(
detailed=True,
@@ -297,15 +312,8 @@ class TestImageList(TestImage):
marker=image_fakes.image_id,
)
- collist = ('ID', 'Name', 'Status')
-
- self.assertEqual(collist, columns)
- datalist = ((
- image_fakes.image_id,
- image_fakes.image_name,
- '',
- ), )
- self.assertEqual(datalist, tuple(data))
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, tuple(data))
def test_image_list_private_option(self):
arglist = [
@@ -318,7 +326,9 @@ class TestImageList(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.api_mock.image_list.assert_called_with(
detailed=True,
@@ -326,15 +336,8 @@ class TestImageList(TestImage):
marker=image_fakes.image_id,
)
- collist = ('ID', 'Name', 'Status')
-
- self.assertEqual(collist, columns)
- datalist = ((
- image_fakes.image_id,
- image_fakes.image_name,
- '',
- ), )
- self.assertEqual(datalist, tuple(data))
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, tuple(data))
def test_image_list_long_option(self):
arglist = [
@@ -345,7 +348,9 @@ class TestImageList(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.api_mock.image_list.assert_called_with(
detailed=True,
@@ -394,7 +399,9 @@ class TestImageList(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.api_mock.image_list.assert_called_with(
detailed=True,
@@ -407,15 +414,8 @@ class TestImageList(TestImage):
property_field='properties',
)
- collist = ('ID', 'Name', 'Status')
-
- self.assertEqual(columns, collist)
- datalist = ((
- image_fakes.image_id,
- image_fakes.image_name,
- '',
- ), )
- self.assertEqual(datalist, tuple(data))
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, tuple(data))
@mock.patch('openstackclient.common.utils.sort_items')
def test_image_list_sort_option(self, si_mock):
@@ -427,7 +427,9 @@ class TestImageList(TestImage):
verifylist = [('sort', 'name:asc')]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.api_mock.image_list.assert_called_with(
detailed=True,
@@ -438,15 +440,8 @@ class TestImageList(TestImage):
'name:asc'
)
- collist = ('ID', 'Name', 'Status')
-
- self.assertEqual(collist, columns)
- datalist = ((
- image_fakes.image_id,
- image_fakes.image_name,
- '',
- ), )
- self.assertEqual(datalist, tuple(data))
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, tuple(data))
class TestImageSet(TestImage):
@@ -478,7 +473,6 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
# Verify update() was not called, if it was show the args
@@ -539,7 +533,6 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
kwargs = {
@@ -567,7 +560,6 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
kwargs = {
@@ -592,7 +584,6 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
kwargs = {
@@ -691,7 +682,9 @@ class TestImageShow(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
self.images_mock.get.assert_called_with(
image_fakes.image_id,
diff --git a/openstackclient/tests/image/v2/test_image.py b/openstackclient/tests/image/v2/test_image.py
index 3534a3a4..de37512f 100644
--- a/openstackclient/tests/image/v2/test_image.py
+++ b/openstackclient/tests/image/v2/test_image.py
@@ -31,11 +31,13 @@ class TestImage(image_fakes.TestImagev2):
def setUp(self):
super(TestImage, self).setUp()
- # Get a shortcut to the ServerManager Mock
+ # Get shortcuts to the Mocks in image client
self.images_mock = self.app.client_manager.image.images
self.images_mock.reset_mock()
self.image_members_mock = self.app.client_manager.image.image_members
self.image_members_mock.reset_mock()
+
+ # Get shortcut to the Mocks in identity client
self.project_mock = self.app.client_manager.identity.projects
self.project_mock.reset_mock()
self.domain_mock = self.app.client_manager.identity.domains
@@ -93,7 +95,9 @@ class TestImageCreate(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# ImageManager.create(name=, **)
@@ -154,7 +158,9 @@ class TestImageCreate(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# ImageManager.create(name=, **)
@@ -286,7 +292,9 @@ class TestImageCreate(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# ImageManager.create(name=, **)
@@ -333,6 +341,17 @@ class TestImageCreate(TestImage):
class TestAddProjectToImage(TestImage):
+ columns = (
+ 'image_id',
+ 'member_id',
+ 'status',
+ )
+ datalist = (
+ image_fakes.image_id,
+ identity_fakes.project_id,
+ image_fakes.member_status,
+ )
+
def setUp(self):
super(TestAddProjectToImage, self).setUp()
@@ -369,20 +388,16 @@ class TestAddProjectToImage(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
self.image_members_mock.create.assert_called_with(
image_fakes.image_id,
identity_fakes.project_id
)
- collist = ('image_id', 'member_id', 'status')
- self.assertEqual(collist, columns)
- datalist = (
- image_fakes.image_id,
- identity_fakes.project_id,
- image_fakes.member_status
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, data)
def test_add_project_to_image_with_option(self):
arglist = [
@@ -397,20 +412,16 @@ class TestAddProjectToImage(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
self.image_members_mock.create.assert_called_with(
image_fakes.image_id,
identity_fakes.project_id
)
- collist = ('image_id', 'member_id', 'status')
- self.assertEqual(collist, columns)
- datalist = (
- image_fakes.image_id,
- identity_fakes.project_id,
- image_fakes.member_status
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, data)
class TestImageDelete(TestImage):
@@ -434,7 +445,6 @@ class TestImageDelete(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
self.images_mock.delete.assert_called_with(
@@ -460,6 +470,19 @@ class TestImageDelete(TestImage):
class TestImageList(TestImage):
+ columns = (
+ 'ID',
+ 'Name',
+ 'Status',
+ )
+ datalist = (
+ (
+ image_fakes.image_id,
+ image_fakes.image_name,
+ '',
+ ),
+ )
+
def setUp(self):
super(TestImageList, self).setUp()
@@ -482,21 +505,14 @@ class TestImageList(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
- self.api_mock.image_list.assert_called_with(
- marker=image_fakes.image_id,
- )
-
- collist = ('ID', 'Name', 'Status')
+ self.api_mock.image_list.assert_called_with()
- self.assertEqual(collist, columns)
- datalist = ((
- image_fakes.image_id,
- image_fakes.image_name,
- '',
- ), )
- self.assertEqual(datalist, tuple(data))
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, tuple(data))
def test_image_list_public_option(self):
arglist = [
@@ -510,22 +526,16 @@ class TestImageList(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.api_mock.image_list.assert_called_with(
public=True,
- marker=image_fakes.image_id,
)
- collist = ('ID', 'Name', 'Status')
-
- self.assertEqual(collist, columns)
- datalist = ((
- image_fakes.image_id,
- image_fakes.image_name,
- '',
- ), )
- self.assertEqual(datalist, tuple(data))
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, tuple(data))
def test_image_list_private_option(self):
arglist = [
@@ -539,22 +549,16 @@ class TestImageList(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.api_mock.image_list.assert_called_with(
private=True,
- marker=image_fakes.image_id,
)
- collist = ('ID', 'Name', 'Status')
-
- self.assertEqual(collist, columns)
- datalist = ((
- image_fakes.image_id,
- image_fakes.image_name,
- '',
- ), )
- self.assertEqual(datalist, tuple(data))
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, tuple(data))
def test_image_list_shared_option(self):
arglist = [
@@ -568,22 +572,16 @@ class TestImageList(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.api_mock.image_list.assert_called_with(
shared=True,
- marker=image_fakes.image_id,
)
- collist = ('ID', 'Name', 'Status')
-
- self.assertEqual(columns, collist)
- datalist = ((
- image_fakes.image_id,
- image_fakes.image_name,
- '',
- ), )
- self.assertEqual(datalist, tuple(data))
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, tuple(data))
def test_image_list_long_option(self):
arglist = [
@@ -594,11 +592,11 @@ class TestImageList(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
- self.api_mock.image_list.assert_called_with(
- marker=image_fakes.image_id,
- )
+ self.api_mock.image_list.assert_called_with()
collist = (
'ID',
@@ -642,11 +640,11 @@ class TestImageList(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
- self.api_mock.image_list.assert_called_with(
- marker=image_fakes.image_id,
- )
+ self.api_mock.image_list.assert_called_with()
sf_mock.assert_called_with(
[image_fakes.IMAGE],
attr='a',
@@ -654,15 +652,8 @@ class TestImageList(TestImage):
property_field='properties',
)
- collist = ('ID', 'Name', 'Status')
-
- self.assertEqual(columns, collist)
- datalist = ((
- image_fakes.image_id,
- image_fakes.image_name,
- '',
- ), )
- self.assertEqual(datalist, tuple(data))
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, tuple(data))
@mock.patch('openstackclient.common.utils.sort_items')
def test_image_list_sort_option(self, si_mock):
@@ -674,25 +665,56 @@ class TestImageList(TestImage):
verifylist = [('sort', 'name:asc')]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
- self.api_mock.image_list.assert_called_with(
- marker=image_fakes.image_id,
- )
+ self.api_mock.image_list.assert_called_with()
si_mock.assert_called_with(
[image_fakes.IMAGE],
'name:asc'
)
- collist = ('ID', 'Name', 'Status')
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, tuple(data))
- self.assertEqual(collist, columns)
- datalist = ((
- image_fakes.image_id,
- image_fakes.image_name,
- '',
- ), )
- self.assertEqual(datalist, tuple(data))
+ def test_image_list_limit_option(self):
+ arglist = [
+ '--limit', str(1),
+ ]
+ verifylist = [
+ ('limit', 1),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+ self.api_mock.image_list.assert_called_with(
+ limit=1,
+ )
+
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(len(self.datalist), len(tuple(data)))
+
+ @mock.patch('openstackclient.common.utils.find_resource')
+ def test_image_list_marker_option(self, fr_mock):
+ # tangchen: Since image_fakes.IMAGE is a dict, it cannot offer a .id
+ # operation. Will fix this by using FakeImage class instead
+ # of IMAGE dict.
+ fr_mock.return_value = mock.Mock()
+ fr_mock.return_value.id = image_fakes.image_id
+
+ arglist = [
+ '--marker', image_fakes.image_name,
+ ]
+ verifylist = [
+ ('marker', image_fakes.image_name),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+ self.api_mock.image_list.assert_called_with(
+ marker=image_fakes.image_id,
+ )
class TestRemoveProjectImage(TestImage):
@@ -731,7 +753,6 @@ class TestRemoveProjectImage(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
self.image_members_mock.delete.assert_called_with(
image_fakes.image_id,
@@ -751,7 +772,6 @@ class TestRemoveProjectImage(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
self.image_members_mock.delete.assert_called_with(
image_fakes.image_id,
@@ -809,7 +829,6 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
kwargs = {
@@ -877,7 +896,6 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
kwargs = {
@@ -905,7 +923,6 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
kwargs = {
@@ -930,7 +947,6 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
kwargs = {
@@ -964,7 +980,6 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
kwargs = {
@@ -992,7 +1007,6 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
kwargs = {
@@ -1016,7 +1030,6 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
kwargs = {
@@ -1045,7 +1058,6 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
kwargs = {
@@ -1076,7 +1088,6 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
kwargs = {
@@ -1102,7 +1113,6 @@ class TestImageSet(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
kwargs = {
@@ -1156,7 +1166,9 @@ class TestImageShow(TestImage):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
self.images_mock.get.assert_called_with(
image_fakes.image_id,
diff --git a/openstackclient/tests/network/test_common.py b/openstackclient/tests/network/test_common.py
new file mode 100644
index 00000000..4700c66a
--- /dev/null
+++ b/openstackclient/tests/network/test_common.py
@@ -0,0 +1,167 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+import argparse
+import mock
+
+from openstackclient.network import common
+from openstackclient.tests import utils
+
+
+def _add_common_argument(parser):
+ parser.add_argument(
+ 'common',
+ metavar='<common>',
+ help='Common argument',
+ )
+ return parser
+
+
+def _add_network_argument(parser):
+ parser.add_argument(
+ 'network',
+ metavar='<network>',
+ help='Network argument',
+ )
+ return parser
+
+
+def _add_compute_argument(parser):
+ parser.add_argument(
+ 'compute',
+ metavar='<compute>',
+ help='Compute argument',
+ )
+ return parser
+
+
+class FakeNetworkAndComputeCommand(common.NetworkAndComputeCommand):
+ def update_parser_common(self, parser):
+ return _add_common_argument(parser)
+
+ def update_parser_network(self, parser):
+ return _add_network_argument(parser)
+
+ def update_parser_compute(self, parser):
+ return _add_compute_argument(parser)
+
+ def take_action_network(self, client, parsed_args):
+ return client.network_action(parsed_args)
+
+ def take_action_compute(self, client, parsed_args):
+ return client.compute_action(parsed_args)
+
+
+class FakeNetworkAndComputeLister(common.NetworkAndComputeLister):
+ def update_parser_common(self, parser):
+ return _add_common_argument(parser)
+
+ def update_parser_network(self, parser):
+ return _add_network_argument(parser)
+
+ def update_parser_compute(self, parser):
+ return _add_compute_argument(parser)
+
+ def take_action_network(self, client, parsed_args):
+ return client.network_action(parsed_args)
+
+ def take_action_compute(self, client, parsed_args):
+ return client.compute_action(parsed_args)
+
+
+class FakeNetworkAndComputeShowOne(common.NetworkAndComputeShowOne):
+ def update_parser_common(self, parser):
+ return _add_common_argument(parser)
+
+ def update_parser_network(self, parser):
+ return _add_network_argument(parser)
+
+ def update_parser_compute(self, parser):
+ return _add_compute_argument(parser)
+
+ def take_action_network(self, client, parsed_args):
+ return client.network_action(parsed_args)
+
+ def take_action_compute(self, client, parsed_args):
+ return client.compute_action(parsed_args)
+
+
+class TestNetworkAndCompute(utils.TestCommand):
+ def setUp(self):
+ super(TestNetworkAndCompute, self).setUp()
+
+ self.namespace = argparse.Namespace()
+
+ # Create network client mocks.
+ self.app.client_manager.network = mock.Mock()
+ self.network = self.app.client_manager.network
+ self.network.network_action = mock.Mock(
+ return_value='take_action_network')
+
+ # Create compute client mocks.
+ self.app.client_manager.compute = mock.Mock()
+ self.compute = self.app.client_manager.compute
+ self.compute.compute_action = mock.Mock(
+ return_value='take_action_compute')
+
+ # Subclasses can override the command object to test.
+ self.cmd = FakeNetworkAndComputeCommand(self.app, self.namespace)
+
+ def test_take_action_network(self):
+ arglist = [
+ 'common',
+ 'network'
+ ]
+ verifylist = [
+ ('common', 'common'),
+ ('network', 'network')
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ result = self.cmd.take_action(parsed_args)
+ self.network.network_action.assert_called_with(parsed_args)
+ self.assertEqual('take_action_network', result)
+
+ def test_take_action_compute(self):
+ arglist = [
+ 'common',
+ 'compute'
+ ]
+ verifylist = [
+ ('common', 'common'),
+ ('compute', 'compute')
+ ]
+
+ self.app.client_manager.network_endpoint_enabled = False
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ result = self.cmd.take_action(parsed_args)
+ self.compute.compute_action.assert_called_with(parsed_args)
+ self.assertEqual('take_action_compute', result)
+
+
+class TestNetworkAndComputeCommand(TestNetworkAndCompute):
+ def setUp(self):
+ super(TestNetworkAndComputeCommand, self).setUp()
+ self.cmd = FakeNetworkAndComputeCommand(self.app, self.namespace)
+
+
+class TestNetworkAndComputeLister(TestNetworkAndCompute):
+ def setUp(self):
+ super(TestNetworkAndComputeLister, self).setUp()
+ self.cmd = FakeNetworkAndComputeLister(self.app, self.namespace)
+
+
+class TestNetworkAndComputeShowOne(TestNetworkAndCompute):
+ def setUp(self):
+ super(TestNetworkAndComputeShowOne, self).setUp()
+ self.cmd = FakeNetworkAndComputeShowOne(self.app, self.namespace)
diff --git a/openstackclient/tests/network/v2/fakes.py b/openstackclient/tests/network/v2/fakes.py
index de885c62..77720ee0 100644
--- a/openstackclient/tests/network/v2/fakes.py
+++ b/openstackclient/tests/network/v2/fakes.py
@@ -26,6 +26,18 @@ extension_updated = '2013-07-09T12:00:0-00:00'
extension_alias = 'Dystopian'
extension_links = '[{"href":''"https://github.com/os/network", "type"}]'
+QUOTA = {
+ "subnet": 10,
+ "network": 10,
+ "floatingip": 50,
+ "subnetpool": -1,
+ "security_group_rule": 100,
+ "security_group": 10,
+ "router": 10,
+ "rbac_policy": -1,
+ "port": 50,
+}
+
def create_extension():
extension = mock.Mock()
@@ -57,6 +69,59 @@ class TestNetworkV2(utils.TestCommand):
)
+class FakeAvailabilityZone(object):
+ """Fake one or more network availability zones (AZs)."""
+
+ @staticmethod
+ def create_one_availability_zone(attrs={}, methods={}):
+ """Create a fake AZ.
+
+ :param Dictionary attrs:
+ A dictionary with all attributes
+ :param Dictionary methods:
+ A dictionary with all methods
+ :return:
+ A FakeResource object with name, state, etc.
+ """
+ # Set default attributes.
+ availability_zone = {
+ 'name': uuid.uuid4().hex,
+ 'state': 'available',
+ 'resource': 'network',
+ }
+
+ # Overwrite default attributes.
+ availability_zone.update(attrs)
+
+ availability_zone = fakes.FakeResource(
+ info=copy.deepcopy(availability_zone),
+ methods=methods,
+ loaded=True)
+ return availability_zone
+
+ @staticmethod
+ def create_availability_zones(attrs={}, methods={}, count=2):
+ """Create multiple fake AZs.
+
+ :param Dictionary attrs:
+ A dictionary with all attributes
+ :param Dictionary methods:
+ A dictionary with all methods
+ :param int count:
+ The number of AZs to fake
+ :return:
+ A list of FakeResource objects faking the AZs
+ """
+ availability_zones = []
+ for i in range(0, count):
+ availability_zone = \
+ FakeAvailabilityZone.create_one_availability_zone(
+ attrs, methods)
+ availability_zones.append(availability_zone)
+
+ return availability_zones
+
+
class FakeNetwork(object):
"""Fake one or more networks."""
@@ -84,7 +149,8 @@ class FakeNetwork(object):
'subnets': ['a', 'b'],
'provider_network_type': 'vlan',
'router_external': True,
- 'is_dirty': True,
+ 'availability_zones': [],
+ 'availability_zone_hints': [],
}
# Overwrite default attributes.
@@ -93,7 +159,8 @@ class FakeNetwork(object):
# Set default methods.
network_methods = {
'keys': ['id', 'name', 'admin_state_up', 'router_external',
- 'status', 'subnets', 'tenant_id'],
+ 'status', 'subnets', 'tenant_id', 'availability_zones',
+ 'availability_zone_hints'],
}
# Overwrite default methods.
@@ -157,15 +224,30 @@ class FakePort(object):
:param Dictionary methods:
A dictionary with all methods
:return:
- A FakeResource object, with id, name, admin_state_up,
- status, tenant_id
+ A FakeResource object, with id, name, etc.
"""
# Set default attributes.
port_attrs = {
+ 'admin_state_up': True,
+ 'allowed_address_pairs': [{}],
+ 'binding:host_id': 'binding-host-id-' + uuid.uuid4().hex,
+ 'binding:profile': {},
+ 'binding:vif_details': {},
+ 'binding:vif_type': 'ovs',
+ 'binding:vnic_type': 'normal',
+ 'device_id': 'device-id-' + uuid.uuid4().hex,
+ 'device_owner': 'compute:nova',
+ 'dns_assignment': [{}],
+ 'dns_name': 'dns-name-' + uuid.uuid4().hex,
+ 'extra_dhcp_opts': [{}],
+ 'fixed_ips': [{}],
'id': 'port-id-' + uuid.uuid4().hex,
+ 'mac_address': 'fa:16:3e:a9:4e:72',
'name': 'port-name-' + uuid.uuid4().hex,
+ 'network_id': 'network-id-' + uuid.uuid4().hex,
+ 'port_security_enabled': True,
+ 'security_groups': [],
'status': 'ACTIVE',
- 'admin_state_up': True,
'tenant_id': 'project-id-' + uuid.uuid4().hex,
}
@@ -173,7 +255,16 @@ class FakePort(object):
port_attrs.update(attrs)
# Set default methods.
- port_methods = {}
+ port_methods = {
+ 'keys': ['admin_state_up', 'allowed_address_pairs',
+ 'binding:host_id', 'binding:profile',
+ 'binding:vif_details', 'binding:vif_type',
+ 'binding:vnic_type', 'device_id', 'device_owner',
+ 'dns_assignment', 'dns_name', 'extra_dhcp_opts',
+ 'fixed_ips', 'id', 'mac_address', 'name',
+ 'network_id', 'port_security_enabled',
+ 'security_groups', 'status', 'tenant_id'],
+ }
# Overwrite default methods.
port_methods.update(methods)
@@ -181,6 +272,15 @@ class FakePort(object):
port = fakes.FakeResource(info=copy.deepcopy(port_attrs),
methods=copy.deepcopy(port_methods),
loaded=True)
+
+ # Set attributes with special mappings.
+ port.project_id = port_attrs['tenant_id']
+ port.binding_host_id = port_attrs['binding:host_id']
+ port.binding_profile = port_attrs['binding:profile']
+ port.binding_vif_details = port_attrs['binding:vif_details']
+ port.binding_vif_type = port_attrs['binding:vif_type']
+ port.binding_vnic_type = port_attrs['binding:vnic_type']
+
return port
@staticmethod
@@ -248,6 +348,8 @@ class FakeRouter(object):
'tenant_id': 'project-id-' + uuid.uuid4().hex,
'routes': [],
'external_gateway_info': {},
+ 'availability_zone_hints': [],
+ 'availability_zones': [],
}
# Overwrite default attributes.
@@ -304,3 +406,228 @@ class FakeRouter(object):
if routers is None:
routers = FakeRouter.create_routers(count)
return mock.MagicMock(side_effect=routers)
+
+
+class FakeSecurityGroup(object):
+ """Fake one or more security groups."""
+
+ @staticmethod
+ def create_one_security_group(attrs={}, methods={}):
+ """Create a fake security group.
+
+ :param Dictionary attrs:
+ A dictionary with all attributes
+ :param Dictionary methods:
+ A dictionary with all methods
+ :return:
+ A FakeResource object, with id, name, etc.
+ """
+ # Set default attributes.
+ security_group_attrs = {
+ 'id': 'security-group-id-' + uuid.uuid4().hex,
+ 'name': 'security-group-name-' + uuid.uuid4().hex,
+ 'description': 'security-group-description-' + uuid.uuid4().hex,
+ 'tenant_id': 'project-id-' + uuid.uuid4().hex,
+ 'security_group_rules': [],
+ }
+
+ # Overwrite default attributes.
+ security_group_attrs.update(attrs)
+
+ # Set default methods.
+ security_group_methods = {}
+
+ # Overwrite default methods.
+ security_group_methods.update(methods)
+
+ security_group = fakes.FakeResource(
+ info=copy.deepcopy(security_group_attrs),
+ methods=copy.deepcopy(security_group_methods),
+ loaded=True)
+ return security_group
+
+ @staticmethod
+ def create_security_groups(attrs={}, methods={}, count=2):
+ """Create multiple fake security groups.
+
+ :param Dictionary attrs:
+ A dictionary with all attributes
+ :param Dictionary methods:
+ A dictionary with all methods
+ :param int count:
+ The number of security groups to fake
+ :return:
+ A list of FakeResource objects faking the security groups
+ """
+ security_groups = []
+ for i in range(0, count):
+ security_groups.append(
+ FakeRouter.create_one_security_group(attrs, methods))
+
+ return security_groups
+
+ @staticmethod
+ def get_security_groups(security_groups=None, count=2):
+ """Get an iterable MagicMock object with a list of faked security groups.
+
+ If security group list is provided, then initialize the Mock object
+ with the list. Otherwise create one.
+
+ :param List security groups:
+ A list of FakeResource objects faking security groups
+ :param int count:
+ The number of security groups to fake
+ :return:
+ An iterable Mock object with side_effect set to a list of faked
+ security groups
+ """
+ if security_groups is None:
+ security_groups = FakeRouter.create_security_groups(count)
+ return mock.MagicMock(side_effect=security_groups)
+
+
+class FakeSubnet(object):
+ """Fake one or more subnets."""
+
+ @staticmethod
+ def create_one_subnet(attrs={}, methods={}):
+ """Create a fake subnet.
+
+ :param Dictionary attrs:
+ A dictionary with all attributes
+ :param Dictionary methods:
+ A dictionary with all methods
+ :return:
+ A FakeResource object faking the subnet
+ """
+ # Set default attributes.
+ subnet_attrs = {
+ 'id': 'subnet-id-' + uuid.uuid4().hex,
+ 'name': 'subnet-name-' + uuid.uuid4().hex,
+ 'network_id': 'network-id-' + uuid.uuid4().hex,
+ 'cidr': '10.10.10.0/24',
+ 'tenant_id': 'project-id-' + uuid.uuid4().hex,
+ 'enable_dhcp': True,
+ 'dns_nameservers': [],
+ 'allocation_pools': [],
+ 'host_routes': [],
+ 'ip_version': '4',
+ 'gateway_ip': '10.10.10.1',
+ }
+
+ # Overwrite default attributes.
+ subnet_attrs.update(attrs)
+
+ # Set default methods.
+ subnet_methods = {
+ 'keys': ['id', 'name', 'network_id', 'cidr', 'enable_dhcp',
+ 'allocation_pools', 'dns_nameservers', 'gateway_ip',
+ 'host_routes', 'ip_version', 'tenant_id']
+ }
+
+ # Overwrite default methods.
+ subnet_methods.update(methods)
+
+ subnet = fakes.FakeResource(info=copy.deepcopy(subnet_attrs),
+ methods=copy.deepcopy(subnet_methods),
+ loaded=True)
+
+ return subnet
+
+ @staticmethod
+ def create_subnets(attrs={}, methods={}, count=2):
+ """Create multiple fake subnets.
+
+ :param Dictionary attrs:
+ A dictionary with all attributes
+ :param Dictionary methods:
+ A dictionary with all methods
+ :param int count:
+ The number of subnets to fake
+ :return:
+ A list of FakeResource objects faking the subnets
+ """
+ subnets = []
+ for i in range(0, count):
+ subnets.append(FakeSubnet.create_one_subnet(attrs, methods))
+
+ return subnets
+
+
+class FakeFloatingIP(object):
+ """Fake one or more floating ip."""
+
+ @staticmethod
+ def create_one_floating_ip(attrs={}, methods={}):
+ """Create a fake floating ip.
+
+ :param Dictionary attrs:
+ A dictionary with all attributes
+ :param Dictionary methods:
+ A dictionary with all methods
+ :return:
+ A FakeResource object, with id, ip, and so on
+ """
+ # Set default attributes.
+ floating_ip_attrs = {
+ 'id': 'floating-ip-id-' + uuid.uuid4().hex,
+ 'ip': '1.0.9.0',
+ 'fixed_ip': '2.0.9.0',
+ 'instance_id': 'server-id-' + uuid.uuid4().hex,
+ 'pool': 'public',
+ }
+
+ # Overwrite default attributes.
+ floating_ip_attrs.update(attrs)
+
+ # Set default methods.
+ floating_ip_methods = {}
+
+ # Overwrite default methods.
+ floating_ip_methods.update(methods)
+
+ floating_ip = fakes.FakeResource(
+ info=copy.deepcopy(floating_ip_attrs),
+ methods=copy.deepcopy(floating_ip_methods),
+ loaded=True)
+ return floating_ip
+
+ @staticmethod
+ def create_floating_ips(attrs={}, methods={}, count=2):
+ """Create multiple fake floating ips.
+
+ :param Dictionary attrs:
+ A dictionary with all attributes
+ :param Dictionary methods:
+ A dictionary with all methods
+ :param int count:
+ The number of floating ips to fake
+ :return:
+ A list of FakeResource objects faking the floating ips
+ """
+ floating_ips = []
+ for i in range(0, count):
+ floating_ips.append(FakeFloatingIP.create_one_floating_ip(
+ attrs,
+ methods
+ ))
+ return floating_ips
+
+ @staticmethod
+ def get_floating_ips(floating_ips=None, count=2):
+ """Get an iterable MagicMock object with a list of faked floating ips.
+
+ If floating_ips list is provided, then initialize the Mock object
+ with the list. Otherwise create one.
+
+ :param List floating ips:
+ A list of FakeResource objects faking floating ips
+ :param int count:
+ The number of floating ips to fake
+ :return:
+ An iterable Mock object with side_effect set to a list of faked
+ floating ips
+ """
+ if floating_ips is None:
+ floating_ips = FakeFloatingIP.create_floating_ips(count)
+ return mock.MagicMock(side_effect=floating_ips)
diff --git a/openstackclient/tests/network/v2/test_floating_ip.py b/openstackclient/tests/network/v2/test_floating_ip.py
new file mode 100644
index 00000000..031dcdac
--- /dev/null
+++ b/openstackclient/tests/network/v2/test_floating_ip.py
@@ -0,0 +1,181 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+import mock
+
+from openstackclient.network.v2 import floating_ip
+from openstackclient.tests.compute.v2 import fakes as compute_fakes
+from openstackclient.tests.network.v2 import fakes as network_fakes
+
+
+# Tests for Neutron network
+#
+class TestFloatingIPNetwork(network_fakes.TestNetworkV2):
+
+ def setUp(self):
+ super(TestFloatingIPNetwork, self).setUp()
+
+ # Get a shortcut to the network client
+ self.network = self.app.client_manager.network
+
+
+class TestDeleteFloatingIPNetwork(TestFloatingIPNetwork):
+
+ # The floating ip to be deleted.
+ floating_ip = network_fakes.FakeFloatingIP.create_one_floating_ip()
+
+ def setUp(self):
+ super(TestDeleteFloatingIPNetwork, self).setUp()
+
+ self.network.delete_ip = mock.Mock(return_value=self.floating_ip)
+ self.network.find_ip = mock.Mock(return_value=self.floating_ip)
+
+ # Get the command object to test
+ self.cmd = floating_ip.DeleteFloatingIP(self.app, self.namespace)
+
+ def test_floating_ip_delete(self):
+ arglist = [
+ self.floating_ip.id,
+ ]
+ verifylist = [
+ ('floating_ip', self.floating_ip.id),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ result = self.cmd.take_action(parsed_args)
+
+ self.network.find_ip.assert_called_with(self.floating_ip.id)
+ self.network.delete_ip.assert_called_with(self.floating_ip)
+ self.assertIsNone(result)
+
+
+class TestListFloatingIPNetwork(TestFloatingIPNetwork):
+
+ # The floating ips to list up
+ floating_ips = network_fakes.FakeFloatingIP.create_floating_ips(count=3)
+
+ columns = ('ID', 'Floating IP', 'Fixed IP', 'Server ID', 'Pool')
+
+ data = []
+ for ip in floating_ips:
+ data.append((
+ ip.id,
+ ip.ip,
+ ip.fixed_ip,
+ ip.instance_id,
+ ip.pool,
+ ))
+
+ def setUp(self):
+ super(TestListFloatingIPNetwork, self).setUp()
+
+ self.network.ips = mock.Mock(return_value=self.floating_ips)
+
+ # Get the command object to test
+ self.cmd = floating_ip.ListFloatingIP(self.app, self.namespace)
+
+ def test_floating_ip_list(self):
+ arglist = []
+ verifylist = []
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.network.ips.assert_called_with(**{})
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, list(data))
+
+
+# Tests for Nova network
+#
+class TestFloatingIPCompute(compute_fakes.TestComputev2):
+
+ def setUp(self):
+ super(TestFloatingIPCompute, self).setUp()
+
+ # Get a shortcut to the compute client
+ self.compute = self.app.client_manager.compute
+
+
+class TestDeleteFloatingIPCompute(TestFloatingIPCompute):
+
+ # The floating ip to be deleted.
+ floating_ip = compute_fakes.FakeFloatingIP.create_one_floating_ip()
+
+ def setUp(self):
+ super(TestDeleteFloatingIPCompute, self).setUp()
+
+ self.app.client_manager.network_endpoint_enabled = False
+
+ self.compute.floating_ips.delete.return_value = None
+
+ # Return value of utils.find_resource()
+ self.compute.floating_ips.get.return_value = self.floating_ip
+
+ # Get the command object to test
+ self.cmd = floating_ip.DeleteFloatingIP(self.app, None)
+
+ def test_floating_ip_delete(self):
+ arglist = [
+ self.floating_ip.id,
+ ]
+ verifylist = [
+ ('floating_ip', self.floating_ip.id),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ result = self.cmd.take_action(parsed_args)
+
+ self.compute.floating_ips.delete.assert_called_with(
+ self.floating_ip.id
+ )
+ self.assertIsNone(result)
+
+
+class TestListFloatingIPCompute(TestFloatingIPCompute):
+
+ # The floating ips to be list up
+ floating_ips = compute_fakes.FakeFloatingIP.create_floating_ips(count=3)
+
+ columns = ('ID', 'Floating IP', 'Fixed IP', 'Server ID', 'Pool')
+
+ data = []
+ for ip in floating_ips:
+ data.append((
+ ip.id,
+ ip.ip,
+ ip.fixed_ip,
+ ip.instance_id,
+ ip.pool,
+ ))
+
+ def setUp(self):
+ super(TestListFloatingIPCompute, self).setUp()
+
+ self.app.client_manager.network_endpoint_enabled = False
+
+ self.compute.floating_ips.list.return_value = self.floating_ips
+
+ # Get the command object to test
+ self.cmd = floating_ip.ListFloatingIP(self.app, None)
+
+ def test_floating_ip_list(self):
+ arglist = []
+ verifylist = []
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.compute.floating_ips.list.assert_called_with()
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, list(data))
diff --git a/openstackclient/tests/network/v2/test_network.py b/openstackclient/tests/network/v2/test_network.py
index 12ac802c..f7721951 100644
--- a/openstackclient/tests/network/v2/test_network.py
+++ b/openstackclient/tests/network/v2/test_network.py
@@ -17,6 +17,7 @@ import mock
from openstackclient.common import exceptions
from openstackclient.common import utils
from openstackclient.network.v2 import network
+from openstackclient.tests.compute.v2 import fakes as compute_fakes
from openstackclient.tests import fakes
from openstackclient.tests.identity.v2_0 import fakes as identity_fakes_v2
from openstackclient.tests.identity.v3 import fakes as identity_fakes_v3
@@ -24,6 +25,8 @@ from openstackclient.tests.network.v2 import fakes as network_fakes
from openstackclient.tests import utils as tests_utils
+# Tests for Neutron network
+#
class TestNetwork(network_fakes.TestNetworkV2):
def setUp(self):
@@ -37,11 +40,16 @@ class TestCreateNetworkIdentityV3(TestNetwork):
# The new network created.
_network = network_fakes.FakeNetwork.create_one_network(
- attrs={'tenant_id': identity_fakes_v3.project_id}
+ attrs={
+ 'tenant_id': identity_fakes_v3.project_id,
+ 'availability_zone_hints': ["nova"],
+ }
)
columns = (
'admin_state_up',
+ 'availability_zone_hints',
+ 'availability_zones',
'id',
'name',
'project_id',
@@ -52,6 +60,8 @@ class TestCreateNetworkIdentityV3(TestNetwork):
data = (
network._format_admin_state(_network.admin_state_up),
+ utils.format_list(_network.availability_zone_hints),
+ utils.format_list(_network.availability_zones),
_network.id,
_network.name,
_network.project_id,
@@ -96,11 +106,9 @@ class TestCreateNetworkIdentityV3(TestNetwork):
arglist = []
verifylist = []
- try:
- # Missing required args should bail here
- self.check_parser(self.cmd, arglist, verifylist)
- except tests_utils.ParserException:
- pass
+ # Missing required args should bail here
+ self.assertRaises(tests_utils.ParserException, self.check_parser,
+ self.cmd, arglist, verifylist)
def test_create_default_options(self):
arglist = [
@@ -129,6 +137,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
"--share",
"--project", identity_fakes_v3.project_name,
"--project-domain", identity_fakes_v3.domain_name,
+ "--availability-zone-hint", "nova",
self._network.name,
]
verifylist = [
@@ -136,6 +145,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
('shared', True),
('project', identity_fakes_v3.project_name),
('project_domain', identity_fakes_v3.domain_name),
+ ('availability_zone_hints', ["nova"]),
('name', self._network.name),
]
@@ -144,6 +154,7 @@ class TestCreateNetworkIdentityV3(TestNetwork):
self.network.create_network.assert_called_with(**{
'admin_state_up': False,
+ 'availability_zone_hints': ["nova"],
'name': self._network.name,
'shared': True,
'tenant_id': identity_fakes_v3.project_id,
@@ -184,6 +195,8 @@ class TestCreateNetworkIdentityV2(TestNetwork):
columns = (
'admin_state_up',
+ 'availability_zone_hints',
+ 'availability_zones',
'id',
'name',
'project_id',
@@ -194,6 +207,8 @@ class TestCreateNetworkIdentityV2(TestNetwork):
data = (
network._format_admin_state(_network.admin_state_up),
+ utils.format_list(_network.availability_zone_hints),
+ utils.format_list(_network.availability_zones),
_network.id,
_network.name,
_network.project_id,
@@ -324,6 +339,7 @@ class TestListNetwork(TestNetwork):
'Subnets',
'Network Type',
'Router Type',
+ 'Availability Zones',
)
data = []
@@ -346,6 +362,7 @@ class TestListNetwork(TestNetwork):
utils.format_list(net.subnets),
net.provider_network_type,
network._format_router_external(net.router_external),
+ utils.format_list(net.availability_zones),
))
def setUp(self):
@@ -364,7 +381,9 @@ class TestListNetwork(TestNetwork):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.network.networks.assert_called_with()
@@ -381,7 +400,9 @@ class TestListNetwork(TestNetwork):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.network.networks.assert_called_with(
@@ -400,7 +421,9 @@ class TestListNetwork(TestNetwork):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.network.networks.assert_called_with()
@@ -424,8 +447,6 @@ class TestSetNetwork(TestNetwork):
self.cmd = network.SetNetwork(self.app, self.namespace)
def test_set_this(self):
- self._network.is_dirty = True
-
arglist = [
self._network.name,
'--enable',
@@ -433,7 +454,7 @@ class TestSetNetwork(TestNetwork):
'--share',
]
verifylist = [
- ('identifier', self._network.name),
+ ('network', self._network.name),
('admin_state', True),
('name', 'noob'),
('shared', True),
@@ -442,19 +463,22 @@ class TestSetNetwork(TestNetwork):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args)
- self.network.update_network.assert_called_with(self._network)
+ attrs = {
+ 'name': 'noob',
+ 'admin_state_up': True,
+ 'shared': True,
+ }
+ self.network.update_network.assert_called_with(self._network, **attrs)
self.assertIsNone(result)
def test_set_that(self):
- self._network.is_dirty = True
-
arglist = [
self._network.name,
'--disable',
'--no-share',
]
verifylist = [
- ('identifier', self._network.name),
+ ('network', self._network.name),
('admin_state', False),
('shared', False),
]
@@ -462,14 +486,16 @@ class TestSetNetwork(TestNetwork):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args)
- self.network.update_network.assert_called_with(self._network)
+ attrs = {
+ 'admin_state_up': False,
+ 'shared': False,
+ }
+ self.network.update_network.assert_called_with(self._network, **attrs)
self.assertIsNone(result)
def test_set_nothing(self):
- self._network.is_dirty = False
-
arglist = [self._network.name, ]
- verifylist = [('identifier', self._network.name), ]
+ verifylist = [('network', self._network.name), ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.assertRaises(exceptions.CommandError, self.cmd.take_action,
@@ -478,11 +504,13 @@ class TestSetNetwork(TestNetwork):
class TestShowNetwork(TestNetwork):
- # The network to set.
+ # The network to show.
_network = network_fakes.FakeNetwork.create_one_network()
columns = (
'admin_state_up',
+ 'availability_zone_hints',
+ 'availability_zones',
'id',
'name',
'project_id',
@@ -493,6 +521,8 @@ class TestShowNetwork(TestNetwork):
data = (
network._format_admin_state(_network.admin_state_up),
+ utils.format_list(_network.availability_zone_hints),
+ utils.format_list(_network.availability_zones),
_network.id,
_network.name,
_network.project_id,
@@ -513,18 +543,16 @@ class TestShowNetwork(TestNetwork):
arglist = []
verifylist = []
- try:
- # Missing required args should bail here
- self.check_parser(self.cmd, arglist, verifylist)
- except tests_utils.ParserException:
- pass
+ # Missing required args should bail here
+ self.assertRaises(tests_utils.ParserException, self.check_parser,
+ self.cmd, arglist, verifylist)
def test_show_all_options(self):
arglist = [
self._network.name,
]
verifylist = [
- ('identifier', self._network.name),
+ ('network', self._network.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@@ -535,3 +563,47 @@ class TestShowNetwork(TestNetwork):
self.assertEqual(tuple(self.columns), columns)
self.assertEqual(list(self.data), list(data))
+
+
+# Tests for Nova network
+#
+class TestNetworkCompute(compute_fakes.TestComputev2):
+
+ def setUp(self):
+ super(TestNetworkCompute, self).setUp()
+
+ # Get a shortcut to the compute client
+ self.compute = self.app.client_manager.compute
+
+
+class TestDeleteNetworkCompute(TestNetworkCompute):
+
+ # The network to delete.
+ _network = network_fakes.FakeNetwork.create_one_network()
+
+ def setUp(self):
+ super(TestDeleteNetworkCompute, self).setUp()
+
+ self.app.client_manager.network_endpoint_enabled = False
+
+ self.compute.networks.delete.return_value = None
+
+ # Return value of utils.find_resource()
+ self.compute.networks.get.return_value = self._network
+
+ # Get the command object to test
+ self.cmd = network.DeleteNetwork(self.app, None)
+
+ def test_network_delete(self):
+ arglist = [
+ self._network.name,
+ ]
+ verifylist = [
+ ('network', [self._network.name]),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ result = self.cmd.take_action(parsed_args)
+
+ self.compute.networks.delete.assert_called_with(self._network.id)
+ self.assertIsNone(result)
diff --git a/openstackclient/tests/network/v2/test_port.py b/openstackclient/tests/network/v2/test_port.py
index a1ddefa1..bc246bd8 100644
--- a/openstackclient/tests/network/v2/test_port.py
+++ b/openstackclient/tests/network/v2/test_port.py
@@ -13,8 +13,10 @@
import mock
+from openstackclient.common import utils
from openstackclient.network.v2 import port
from openstackclient.tests.network.v2 import fakes as network_fakes
+from openstackclient.tests import utils as tests_utils
class TestPort(network_fakes.TestNetworkV2):
@@ -51,3 +53,88 @@ class TestDeletePort(TestPort):
result = self.cmd.take_action(parsed_args)
self.network.delete_port.assert_called_with(self._port)
self.assertIsNone(result)
+
+
+class TestShowPort(TestPort):
+
+ # The port to show.
+ _port = network_fakes.FakePort.create_one_port()
+
+ columns = (
+ 'admin_state_up',
+ 'allowed_address_pairs',
+ 'binding_host_id',
+ 'binding_profile',
+ 'binding_vif_details',
+ 'binding_vif_type',
+ 'binding_vnic_type',
+ 'device_id',
+ 'device_owner',
+ 'dns_assignment',
+ 'dns_name',
+ 'extra_dhcp_opts',
+ 'fixed_ips',
+ 'id',
+ 'mac_address',
+ 'name',
+ 'network_id',
+ 'port_security_enabled',
+ 'project_id',
+ 'security_groups',
+ 'status',
+ )
+
+ data = (
+ port._format_admin_state(_port.admin_state_up),
+ utils.format_list_of_dicts(_port.allowed_address_pairs),
+ _port.binding_host_id,
+ utils.format_dict(_port.binding_profile),
+ utils.format_dict(_port.binding_vif_details),
+ _port.binding_vif_type,
+ _port.binding_vnic_type,
+ _port.device_id,
+ _port.device_owner,
+ utils.format_list_of_dicts(_port.dns_assignment),
+ _port.dns_name,
+ utils.format_list_of_dicts(_port.extra_dhcp_opts),
+ utils.format_list_of_dicts(_port.fixed_ips),
+ _port.id,
+ _port.mac_address,
+ _port.name,
+ _port.network_id,
+ _port.port_security_enabled,
+ _port.project_id,
+ utils.format_list(_port.security_groups),
+ _port.status,
+ )
+
+ def setUp(self):
+ super(TestShowPort, self).setUp()
+
+ self.network.find_port = mock.Mock(return_value=self._port)
+
+ # Get the command object to test
+ self.cmd = port.ShowPort(self.app, self.namespace)
+
+ def test_show_no_options(self):
+ arglist = []
+ verifylist = []
+
+ self.assertRaises(tests_utils.ParserException,
+ self.check_parser, self.cmd, arglist, verifylist)
+
+ def test_show_all_options(self):
+ arglist = [
+ self._port.name,
+ ]
+ verifylist = [
+ ('port', self._port.name),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.network.find_port.assert_called_with(self._port.name,
+ ignore_missing=False)
+ self.assertEqual(tuple(self.columns), columns)
+ self.assertEqual(self.data, data)
diff --git a/openstackclient/tests/network/v2/test_router.py b/openstackclient/tests/network/v2/test_router.py
index fba6e192..05bb7857 100644
--- a/openstackclient/tests/network/v2/test_router.py
+++ b/openstackclient/tests/network/v2/test_router.py
@@ -14,6 +14,7 @@
import mock
from openstackclient.common import exceptions
+from openstackclient.common import utils as osc_utils
from openstackclient.network.v2 import router
from openstackclient.tests.network.v2 import fakes as network_fakes
from openstackclient.tests import utils as tests_utils
@@ -62,10 +63,9 @@ class TestCreateRouter(TestRouter):
arglist = []
verifylist = []
- try:
- self.check_parser(self.cmd, arglist, verifylist)
- except tests_utils.ParserException:
- pass
+ # Missing required args should bail here
+ self.assertRaises(tests_utils.ParserException, self.check_parser,
+ self.cmd, arglist, verifylist)
def test_create_default_options(self):
arglist = [
@@ -88,6 +88,31 @@ class TestCreateRouter(TestRouter):
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, data)
+ def test_create_with_AZ_hints(self):
+ arglist = [
+ self.new_router.name,
+ '--availability-zone-hint', 'fake-az',
+ '--availability-zone-hint', 'fake-az2',
+ ]
+ verifylist = [
+ ('name', self.new_router.name),
+ ('availability_zone_hints', ['fake-az', 'fake-az2']),
+ ('admin_state_up', True),
+ ('distributed', False),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = (self.cmd.take_action(parsed_args))
+ self.network.create_router.assert_called_with(**{
+ 'admin_state_up': True,
+ 'name': self.new_router.name,
+ 'distributed': False,
+ 'availability_zone_hints': ['fake-az', 'fake-az2'],
+ })
+
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, data)
+
class TestDeleteRouter(TestRouter):
@@ -135,6 +160,7 @@ class TestListRouter(TestRouter):
columns_long = columns + (
'Routes',
'External gateway info',
+ 'Availability zones'
)
data = []
@@ -155,6 +181,7 @@ class TestListRouter(TestRouter):
data[i] + (
r.routes,
router._format_external_gateway_info(r.external_gateway_info),
+ osc_utils.format_list(r.availability_zones),
)
)
@@ -173,7 +200,9 @@ class TestListRouter(TestRouter):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.network.routers.assert_called_with()
@@ -189,7 +218,9 @@ class TestListRouter(TestRouter):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
self.network.routers.assert_called_with()
@@ -271,11 +302,9 @@ class TestSetRouter(TestRouter):
('distributed', False),
]
- try:
- # Argument parse failing should bail here
- self.check_parser(self.cmd, arglist, verifylist)
- except tests_utils.ParserException:
- pass
+ # Missing required args should bail here
+ self.assertRaises(tests_utils.ParserException, self.check_parser,
+ self.cmd, arglist, verifylist)
def test_set_nothing(self):
arglist = [self._router.name, ]
@@ -321,11 +350,9 @@ class TestShowRouter(TestRouter):
arglist = []
verifylist = []
- try:
- # Missing required args should bail here
- self.check_parser(self.cmd, arglist, verifylist)
- except tests_utils.ParserException:
- pass
+ # Missing required args should bail here
+ self.assertRaises(tests_utils.ParserException, self.check_parser,
+ self.cmd, arglist, verifylist)
def test_show_all_options(self):
arglist = [
diff --git a/openstackclient/tests/network/v2/test_security_group.py b/openstackclient/tests/network/v2/test_security_group.py
new file mode 100644
index 00000000..98388ec7
--- /dev/null
+++ b/openstackclient/tests/network/v2/test_security_group.py
@@ -0,0 +1,99 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+import mock
+
+from openstackclient.network.v2 import security_group
+from openstackclient.tests.network.v2 import fakes as network_fakes
+
+
+class TestSecurityGroup(network_fakes.TestNetworkV2):
+
+ def setUp(self):
+ super(TestSecurityGroup, self).setUp()
+
+ # Get a shortcut to the network client
+ self.network = self.app.client_manager.network
+
+ # Create compute client mocks.
+ self.app.client_manager.compute = mock.Mock()
+ self.compute = self.app.client_manager.compute
+ self.compute.security_groups = mock.Mock()
+
+
+class TestDeleteSecurityGroupNetwork(TestSecurityGroup):
+
+ # The security group to be deleted.
+ _security_group = \
+ network_fakes.FakeSecurityGroup.create_one_security_group()
+
+ def setUp(self):
+ super(TestDeleteSecurityGroupNetwork, self).setUp()
+
+ self.network.delete_security_group = mock.Mock(return_value=None)
+
+ self.network.find_security_group = mock.Mock(
+ return_value=self._security_group)
+
+ # Get the command object to test
+ self.cmd = security_group.DeleteSecurityGroup(self.app, self.namespace)
+
+ def test_security_group_delete(self):
+ arglist = [
+ self._security_group.name,
+ ]
+ verifylist = [
+ ('group', self._security_group.name),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ result = self.cmd.take_action(parsed_args)
+
+ self.network.delete_security_group.assert_called_with(
+ self._security_group)
+ self.assertEqual(None, result)
+
+
+class TestDeleteSecurityGroupCompute(TestSecurityGroup):
+
+ # The security group to be deleted.
+ _security_group = \
+ network_fakes.FakeSecurityGroup.create_one_security_group()
+
+ def setUp(self):
+ super(TestDeleteSecurityGroupCompute, self).setUp()
+
+ self.app.client_manager.network_endpoint_enabled = False
+
+ self.compute.security_groups.delete = mock.Mock(return_value=None)
+
+ self.compute.security_groups.get = mock.Mock(
+ return_value=self._security_group)
+
+ # Get the command object to test
+ self.cmd = security_group.DeleteSecurityGroup(self.app, self.namespace)
+
+ def test_security_group_delete(self):
+ arglist = [
+ self._security_group.name,
+ ]
+ verifylist = [
+ ('group', self._security_group.name),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+ result = self.cmd.take_action(parsed_args)
+
+ self.compute.security_groups.delete.assert_called_with(
+ self._security_group.id)
+ self.assertEqual(None, result)
diff --git a/openstackclient/tests/network/v2/test_subnet.py b/openstackclient/tests/network/v2/test_subnet.py
new file mode 100644
index 00000000..5fca5edd
--- /dev/null
+++ b/openstackclient/tests/network/v2/test_subnet.py
@@ -0,0 +1,108 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+
+import mock
+
+from openstackclient.common import utils
+from openstackclient.network.v2 import subnet as subnet_v2
+from openstackclient.tests.network.v2 import fakes as network_fakes
+
+
+class TestSubnet(network_fakes.TestNetworkV2):
+ def setUp(self):
+ super(TestSubnet, self).setUp()
+
+ # Get a shortcut to the network client
+ self.network = self.app.client_manager.network
+
+
+class TestListSubnet(TestSubnet):
+ # The subnets going to be listed up.
+ _subnet = network_fakes.FakeSubnet.create_subnets(count=3)
+
+ columns = (
+ 'ID',
+ 'Name',
+ 'Network',
+ 'Subnet'
+ )
+ columns_long = columns + (
+ 'Project',
+ 'DHCP',
+ 'Name Servers',
+ 'Allocation Pools',
+ 'Host Routes',
+ 'IP Version',
+ 'Gateway'
+ )
+
+ data = []
+ for subnet in _subnet:
+ data.append((
+ subnet.id,
+ subnet.name,
+ subnet.network_id,
+ subnet.cidr,
+ ))
+
+ data_long = []
+ for subnet in _subnet:
+ data_long.append((
+ subnet.id,
+ subnet.name,
+ subnet.network_id,
+ subnet.cidr,
+ subnet.tenant_id,
+ subnet.enable_dhcp,
+ utils.format_list(subnet.dns_nameservers),
+ subnet_v2._format_allocation_pools(subnet.allocation_pools),
+ utils.format_list(subnet.host_routes),
+ subnet.ip_version,
+ subnet.gateway_ip
+ ))
+
+ def setUp(self):
+ super(TestListSubnet, self).setUp()
+
+ # Get the command object to test
+ self.cmd = subnet_v2.ListSubnet(self.app, self.namespace)
+
+ self.network.subnets = mock.Mock(return_value=self._subnet)
+
+ def test_subnet_list_no_options(self):
+ arglist = []
+ verifylist = [
+ ('long', False),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.network.subnets.assert_called_with()
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.data, list(data))
+
+ def test_subnet_list_long(self):
+ arglist = [
+ '--long',
+ ]
+ verifylist = [
+ ('long', True),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ columns, data = self.cmd.take_action(parsed_args)
+
+ self.network.subnets.assert_called_with()
+ self.assertEqual(self.columns_long, columns)
+ self.assertEqual(self.data_long, list(data))
diff --git a/openstackclient/tests/object/v1/test_container.py b/openstackclient/tests/object/v1/test_container.py
index 2ef2f7b5..5b0fb48a 100644
--- a/openstackclient/tests/object/v1/test_container.py
+++ b/openstackclient/tests/object/v1/test_container.py
@@ -32,6 +32,9 @@ class FakeClient(object):
class TestContainer(object_fakes.TestObjectv1):
+
+ columns = ('Name',)
+
def setUp(self):
super(TestContainer, self).setUp()
self.app.client_manager.object_store = object_store.APIv1(
@@ -41,6 +44,96 @@ class TestContainer(object_fakes.TestObjectv1):
self.api = self.app.client_manager.object_store
+@mock.patch('openstackclient.api.object_store_v1.APIv1.object_delete')
+@mock.patch('openstackclient.api.object_store_v1.APIv1.object_list')
+@mock.patch('openstackclient.api.object_store_v1.APIv1.container_delete')
+class TestContainerDelete(TestContainer):
+
+ def setUp(self):
+ super(TestContainerDelete, self).setUp()
+
+ # Get the command object to test
+ self.cmd = container.DeleteContainer(self.app, None)
+
+ def test_container_delete(self, c_mock, o_list_mock, o_delete_mock):
+ c_mock.return_value = None
+
+ arglist = [
+ object_fakes.container_name,
+ ]
+ verifylist = [
+ ('containers', [object_fakes.container_name]),
+ ('recursive', False),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.assertEqual(None, self.cmd.take_action(parsed_args))
+
+ kwargs = {}
+ c_mock.assert_called_with(
+ container=object_fakes.container_name,
+ **kwargs
+ )
+ self.assertFalse(o_list_mock.called)
+ self.assertFalse(o_delete_mock.called)
+
+ def test_recursive_delete(self, c_mock, o_list_mock, o_delete_mock):
+ c_mock.return_value = None
+ o_list_mock.return_value = [object_fakes.OBJECT]
+ o_delete_mock.return_value = None
+
+ arglist = [
+ '--recursive',
+ object_fakes.container_name,
+ ]
+ verifylist = [
+ ('containers', [object_fakes.container_name]),
+ ('recursive', True),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.assertEqual(None, self.cmd.take_action(parsed_args))
+
+ kwargs = {}
+ c_mock.assert_called_with(
+ container=object_fakes.container_name,
+ **kwargs
+ )
+ o_list_mock.assert_called_with(container=object_fakes.container_name)
+ o_delete_mock.assert_called_with(
+ container=object_fakes.container_name,
+ object=object_fakes.OBJECT['name'],
+ )
+
+ def test_r_delete(self, c_mock, o_list_mock, o_delete_mock):
+ c_mock.return_value = None
+ o_list_mock.return_value = [object_fakes.OBJECT]
+ o_delete_mock.return_value = None
+
+ arglist = [
+ '-r',
+ object_fakes.container_name,
+ ]
+ verifylist = [
+ ('containers', [object_fakes.container_name]),
+ ('recursive', True),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.assertEqual(None, self.cmd.take_action(parsed_args))
+
+ kwargs = {}
+ c_mock.assert_called_with(
+ container=object_fakes.container_name,
+ **kwargs
+ )
+ o_list_mock.assert_called_with(container=object_fakes.container_name)
+ o_delete_mock.assert_called_with(
+ container=object_fakes.container_name,
+ object=object_fakes.OBJECT['name'],
+ )
+
+
@mock.patch(
'openstackclient.api.object_store_v1.APIv1.container_list'
)
@@ -63,7 +156,9 @@ class TestContainerList(TestContainer):
verifylist = []
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -73,8 +168,7 @@ class TestContainerList(TestContainer):
**kwargs
)
- collist = ('Name',)
- self.assertEqual(collist, columns)
+ self.assertEqual(self.columns, columns)
datalist = (
(object_fakes.container_name, ),
(object_fakes.container_name_3, ),
@@ -96,7 +190,9 @@ class TestContainerList(TestContainer):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -107,8 +203,7 @@ class TestContainerList(TestContainer):
**kwargs
)
- collist = ('Name',)
- self.assertEqual(collist, columns)
+ self.assertEqual(self.columns, columns)
datalist = (
(object_fakes.container_name, ),
(object_fakes.container_name_3, ),
@@ -131,7 +226,9 @@ class TestContainerList(TestContainer):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -143,8 +240,7 @@ class TestContainerList(TestContainer):
**kwargs
)
- collist = ('Name',)
- self.assertEqual(collist, columns)
+ self.assertEqual(self.columns, columns)
datalist = (
(object_fakes.container_name, ),
(object_fakes.container_name_3, ),
@@ -165,7 +261,9 @@ class TestContainerList(TestContainer):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -176,8 +274,7 @@ class TestContainerList(TestContainer):
**kwargs
)
- collist = ('Name',)
- self.assertEqual(collist, columns)
+ self.assertEqual(self.columns, columns)
datalist = (
(object_fakes.container_name, ),
(object_fakes.container_name_3, ),
@@ -198,7 +295,9 @@ class TestContainerList(TestContainer):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -239,7 +338,9 @@ class TestContainerList(TestContainer):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -250,8 +351,7 @@ class TestContainerList(TestContainer):
**kwargs
)
- collist = ('Name',)
- self.assertEqual(collist, columns)
+ self.assertEqual(self.columns, columns)
datalist = (
(object_fakes.container_name, ),
(object_fakes.container_name_2, ),
@@ -282,7 +382,9 @@ class TestContainerShow(TestContainer):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
diff --git a/openstackclient/tests/object/v1/test_container_all.py b/openstackclient/tests/object/v1/test_container_all.py
index 69fc0f39..95e12f47 100644
--- a/openstackclient/tests/object/v1/test_container_all.py
+++ b/openstackclient/tests/object/v1/test_container_all.py
@@ -29,6 +29,12 @@ class TestContainerAll(object_fakes.TestObjectv1):
class TestContainerCreate(TestContainerAll):
+ columns = (
+ 'account',
+ 'container',
+ 'x-trans-id',
+ )
+
def setUp(self):
super(TestContainerCreate, self).setUp()
@@ -51,11 +57,12 @@ class TestContainerCreate(TestContainerAll):
)]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
- collist = ('account', 'container', 'x-trans-id')
- self.assertEqual(collist, columns)
+ self.assertEqual(self.columns, columns)
datalist = [(
object_fakes.ACCOUNT_ID,
'ernie',
@@ -86,11 +93,12 @@ class TestContainerCreate(TestContainerAll):
)]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
- collist = ('account', 'container', 'x-trans-id')
- self.assertEqual(collist, columns)
+ self.assertEqual(self.columns, columns)
datalist = [
(
object_fakes.ACCOUNT_ID,
@@ -161,6 +169,8 @@ class TestContainerDelete(TestContainerAll):
class TestContainerList(TestContainerAll):
+ columns = ('Name',)
+
def setUp(self):
super(TestContainerList, self).setUp()
@@ -187,8 +197,7 @@ class TestContainerList(TestContainerAll):
# Lister.take_action() returns two tuples
columns, data = self.cmd.take_action(parsed_args)
- collist = ('Name',)
- self.assertEqual(collist, columns)
+ self.assertEqual(self.columns, columns)
datalist = [
(object_fakes.container_name, ),
(object_fakes.container_name_3, ),
@@ -219,8 +228,7 @@ class TestContainerList(TestContainerAll):
# Lister.take_action() returns two tuples
columns, data = self.cmd.take_action(parsed_args)
- collist = ('Name',)
- self.assertEqual(collist, columns)
+ self.assertEqual(self.columns, columns)
datalist = [
(object_fakes.container_name, ),
(object_fakes.container_name_3, ),
@@ -308,7 +316,9 @@ class TestContainerShow(TestContainerAll):
)]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
collist = (
diff --git a/openstackclient/tests/object/v1/test_object.py b/openstackclient/tests/object/v1/test_object.py
index 305fe8f8..990e4f46 100644
--- a/openstackclient/tests/object/v1/test_object.py
+++ b/openstackclient/tests/object/v1/test_object.py
@@ -40,6 +40,13 @@ class TestObject(object_fakes.TestObjectv1):
)
class TestObjectList(TestObject):
+ columns = ('Name',)
+ datalist = (
+ (
+ object_fakes.object_name_2,
+ ),
+ )
+
def setUp(self):
super(TestObjectList, self).setUp()
@@ -60,15 +67,16 @@ class TestObjectList(TestObject):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
o_mock.assert_called_with(
container=object_fakes.container_name,
)
- collist = ('Name',)
- self.assertEqual(collist, columns)
+ self.assertEqual(self.columns, columns)
datalist = (
(object_fakes.object_name_1, ),
(object_fakes.object_name_2, ),
@@ -90,7 +98,9 @@ class TestObjectList(TestObject):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -102,12 +112,8 @@ class TestObjectList(TestObject):
**kwargs
)
- collist = ('Name',)
- self.assertEqual(collist, columns)
- datalist = (
- (object_fakes.object_name_2, ),
- )
- self.assertEqual(datalist, tuple(data))
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, tuple(data))
def test_object_list_objects_delimiter(self, o_mock):
o_mock.return_value = [
@@ -124,7 +130,9 @@ class TestObjectList(TestObject):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -136,12 +144,8 @@ class TestObjectList(TestObject):
**kwargs
)
- collist = ('Name',)
- self.assertEqual(collist, columns)
- datalist = (
- (object_fakes.object_name_2, ),
- )
- self.assertEqual(datalist, tuple(data))
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, tuple(data))
def test_object_list_objects_marker(self, o_mock):
o_mock.return_value = [
@@ -158,7 +162,9 @@ class TestObjectList(TestObject):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -170,12 +176,8 @@ class TestObjectList(TestObject):
**kwargs
)
- collist = ('Name',)
- self.assertEqual(collist, columns)
- datalist = (
- (object_fakes.object_name_2, ),
- )
- self.assertEqual(datalist, tuple(data))
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, tuple(data))
def test_object_list_objects_end_marker(self, o_mock):
o_mock.return_value = [
@@ -192,7 +194,9 @@ class TestObjectList(TestObject):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -204,12 +208,8 @@ class TestObjectList(TestObject):
**kwargs
)
- collist = ('Name',)
- self.assertEqual(collist, columns)
- datalist = (
- (object_fakes.object_name_2, ),
- )
- self.assertEqual(datalist, tuple(data))
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, tuple(data))
def test_object_list_objects_limit(self, o_mock):
o_mock.return_value = [
@@ -226,7 +226,9 @@ class TestObjectList(TestObject):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -238,12 +240,8 @@ class TestObjectList(TestObject):
**kwargs
)
- collist = ('Name',)
- self.assertEqual(collist, columns)
- datalist = (
- (object_fakes.object_name_2, ),
- )
- self.assertEqual(datalist, tuple(data))
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, tuple(data))
def test_object_list_objects_long(self, o_mock):
o_mock.return_value = [
@@ -261,7 +259,9 @@ class TestObjectList(TestObject):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -308,7 +308,9 @@ class TestObjectList(TestObject):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
@@ -320,8 +322,7 @@ class TestObjectList(TestObject):
**kwargs
)
- collist = ('Name',)
- self.assertEqual(collist, columns)
+ self.assertEqual(self.columns, columns)
datalist = (
(object_fakes.object_name_1, ),
(object_fakes.object_name_2, ),
@@ -353,7 +354,9 @@ class TestObjectShow(TestObject):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# Set expected values
diff --git a/openstackclient/tests/object/v1/test_object_all.py b/openstackclient/tests/object/v1/test_object_all.py
index 7a76ab76..89286b00 100644
--- a/openstackclient/tests/object/v1/test_object_all.py
+++ b/openstackclient/tests/object/v1/test_object_all.py
@@ -37,6 +37,8 @@ class TestObjectCreate(TestObjectAll):
class TestObjectList(TestObjectAll):
+ columns = ('Name',)
+
def setUp(self):
super(TestObjectList, self).setUp()
@@ -69,8 +71,7 @@ class TestObjectList(TestObjectAll):
# Lister.take_action() returns two tuples
columns, data = self.cmd.take_action(parsed_args)
- collist = ('Name',)
- self.assertEqual(collist, columns)
+ self.assertEqual(self.columns, columns)
datalist = [
(object_fakes.object_name_1, ),
(object_fakes.object_name_2, ),
@@ -101,11 +102,12 @@ class TestObjectList(TestObjectAll):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class Lister in cliff, abstract method take_action()
+ # returns a tuple containing the column names and an iterable
+ # containing the data to be listed.
columns, data = self.cmd.take_action(parsed_args)
- collist = ('Name',)
- self.assertEqual(collist, columns)
+ self.assertEqual(self.columns, columns)
datalist = (
(object_fakes.object_name_2, ),
)
@@ -150,7 +152,9 @@ class TestObjectShow(TestObjectAll):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
collist = (
diff --git a/openstackclient/tests/volume/v1/test_qos_specs.py b/openstackclient/tests/volume/v1/test_qos_specs.py
index c2e6c0af..7ecc8ee8 100644
--- a/openstackclient/tests/volume/v1/test_qos_specs.py
+++ b/openstackclient/tests/volume/v1/test_qos_specs.py
@@ -69,6 +69,18 @@ class TestQosAssociate(TestQos):
class TestQosCreate(TestQos):
+
+ columns = (
+ 'consumer',
+ 'id',
+ 'name',
+ )
+ datalist = (
+ volume_fakes.qos_consumer,
+ volume_fakes.qos_id,
+ volume_fakes.qos_name
+ )
+
def setUp(self):
super(TestQosCreate, self).setUp()
@@ -97,12 +109,7 @@ class TestQosCreate(TestQos):
{'consumer': volume_fakes.qos_default_consumer}
)
- collist = (
- 'consumer',
- 'id',
- 'name'
- )
- self.assertEqual(collist, columns)
+ self.assertEqual(self.columns, columns)
datalist = (
volume_fakes.qos_default_consumer,
volume_fakes.qos_id,
@@ -133,19 +140,8 @@ class TestQosCreate(TestQos):
volume_fakes.qos_name,
{'consumer': volume_fakes.qos_consumer}
)
-
- collist = (
- 'consumer',
- 'id',
- 'name'
- )
- self.assertEqual(collist, columns)
- datalist = (
- volume_fakes.qos_consumer,
- volume_fakes.qos_id,
- volume_fakes.qos_name
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, data)
def test_qos_create_with_properties(self):
self.qos_mock.create.return_value = fakes.FakeResource(
@@ -176,17 +172,11 @@ class TestQosCreate(TestQos):
specs
)
- collist = (
- 'consumer',
- 'id',
- 'name',
+ columns = self.columns + (
'specs',
)
- self.assertEqual(collist, columns)
- datalist = (
- volume_fakes.qos_consumer,
- volume_fakes.qos_id,
- volume_fakes.qos_name,
+ self.assertEqual(columns, columns)
+ datalist = self.datalist + (
volume_fakes.qos_specs,
)
self.assertEqual(datalist, data)
diff --git a/openstackclient/tests/volume/v1/test_volume.py b/openstackclient/tests/volume/v1/test_volume.py
index 70ff50de..00c509b5 100644
--- a/openstackclient/tests/volume/v1/test_volume.py
+++ b/openstackclient/tests/volume/v1/test_volume.py
@@ -49,6 +49,29 @@ class TestVolume(volume_fakes.TestVolumev1):
class TestVolumeCreate(TestVolume):
+ columns = (
+ 'attach_status',
+ 'availability_zone',
+ 'display_description',
+ 'display_name',
+ 'id',
+ 'properties',
+ 'size',
+ 'status',
+ 'type',
+ )
+ datalist = (
+ 'detached',
+ volume_fakes.volume_zone,
+ volume_fakes.volume_description,
+ volume_fakes.volume_name,
+ volume_fakes.volume_id,
+ volume_fakes.volume_metadata_str,
+ volume_fakes.volume_size,
+ volume_fakes.volume_status,
+ volume_fakes.volume_type,
+ )
+
def setUp(self):
super(TestVolumeCreate, self).setUp()
@@ -72,7 +95,9 @@ class TestVolumeCreate(TestVolume):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# VolumeManager.create(size, snapshot_id=, source_volid=,
@@ -93,31 +118,8 @@ class TestVolumeCreate(TestVolume):
None,
None,
)
-
- collist = (
- 'attach_status',
- 'availability_zone',
- 'display_description',
- 'display_name',
- 'id',
- 'properties',
- 'size',
- 'status',
- 'type',
- )
- self.assertEqual(collist, columns)
- datalist = (
- 'detached',
- volume_fakes.volume_zone,
- volume_fakes.volume_description,
- volume_fakes.volume_name,
- volume_fakes.volume_id,
- volume_fakes.volume_metadata_str,
- volume_fakes.volume_size,
- volume_fakes.volume_status,
- volume_fakes.volume_type,
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, data)
def test_volume_create_options(self):
arglist = [
@@ -136,7 +138,9 @@ class TestVolumeCreate(TestVolume):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# VolumeManager.create(size, snapshot_id=, source_volid=,
@@ -158,30 +162,8 @@ class TestVolumeCreate(TestVolume):
None,
)
- collist = (
- 'attach_status',
- 'availability_zone',
- 'display_description',
- 'display_name',
- 'id',
- 'properties',
- 'size',
- 'status',
- 'type',
- )
- self.assertEqual(collist, columns)
- datalist = (
- 'detached',
- volume_fakes.volume_zone,
- volume_fakes.volume_description,
- volume_fakes.volume_name,
- volume_fakes.volume_id,
- volume_fakes.volume_metadata_str,
- volume_fakes.volume_size,
- volume_fakes.volume_status,
- volume_fakes.volume_type,
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, data)
def test_volume_create_user_project_id(self):
# Return a project
@@ -211,7 +193,9 @@ class TestVolumeCreate(TestVolume):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# VolumeManager.create(size, snapshot_id=, source_volid=,
@@ -233,30 +217,8 @@ class TestVolumeCreate(TestVolume):
None,
)
- collist = (
- 'attach_status',
- 'availability_zone',
- 'display_description',
- 'display_name',
- 'id',
- 'properties',
- 'size',
- 'status',
- 'type',
- )
- self.assertEqual(collist, columns)
- datalist = (
- 'detached',
- volume_fakes.volume_zone,
- volume_fakes.volume_description,
- volume_fakes.volume_name,
- volume_fakes.volume_id,
- volume_fakes.volume_metadata_str,
- volume_fakes.volume_size,
- volume_fakes.volume_status,
- volume_fakes.volume_type,
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, data)
def test_volume_create_user_project_name(self):
# Return a project
@@ -286,7 +248,9 @@ class TestVolumeCreate(TestVolume):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# VolumeManager.create(size, snapshot_id=, source_volid=,
@@ -308,30 +272,8 @@ class TestVolumeCreate(TestVolume):
None,
)
- collist = (
- 'attach_status',
- 'availability_zone',
- 'display_description',
- 'display_name',
- 'id',
- 'properties',
- 'size',
- 'status',
- 'type',
- )
- self.assertEqual(collist, columns)
- datalist = (
- 'detached',
- volume_fakes.volume_zone,
- volume_fakes.volume_description,
- volume_fakes.volume_name,
- volume_fakes.volume_id,
- volume_fakes.volume_metadata_str,
- volume_fakes.volume_size,
- volume_fakes.volume_status,
- volume_fakes.volume_type,
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, data)
def test_volume_create_properties(self):
arglist = [
@@ -347,7 +289,9 @@ class TestVolumeCreate(TestVolume):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# VolumeManager.create(size, snapshot_id=, source_volid=,
@@ -369,30 +313,8 @@ class TestVolumeCreate(TestVolume):
None,
)
- collist = (
- 'attach_status',
- 'availability_zone',
- 'display_description',
- 'display_name',
- 'id',
- 'properties',
- 'size',
- 'status',
- 'type',
- )
- self.assertEqual(collist, columns)
- datalist = (
- 'detached',
- volume_fakes.volume_zone,
- volume_fakes.volume_description,
- volume_fakes.volume_name,
- volume_fakes.volume_id,
- volume_fakes.volume_metadata_str,
- volume_fakes.volume_size,
- volume_fakes.volume_status,
- volume_fakes.volume_type,
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, data)
def test_volume_create_image_id(self):
self.images_mock.get.return_value = fakes.FakeResource(
@@ -413,7 +335,9 @@ class TestVolumeCreate(TestVolume):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# VolumeManager.create(size, snapshot_id=, source_volid=,
@@ -435,30 +359,8 @@ class TestVolumeCreate(TestVolume):
volume_fakes.image_id,
)
- collist = (
- 'attach_status',
- 'availability_zone',
- 'display_description',
- 'display_name',
- 'id',
- 'properties',
- 'size',
- 'status',
- 'type',
- )
- self.assertEqual(collist, columns)
- datalist = (
- 'detached',
- volume_fakes.volume_zone,
- volume_fakes.volume_description,
- volume_fakes.volume_name,
- volume_fakes.volume_id,
- volume_fakes.volume_metadata_str,
- volume_fakes.volume_size,
- volume_fakes.volume_status,
- volume_fakes.volume_type,
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, data)
def test_volume_create_image_name(self):
self.images_mock.get.return_value = fakes.FakeResource(
@@ -479,7 +381,9 @@ class TestVolumeCreate(TestVolume):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
# VolumeManager.create(size, snapshot_id=, source_volid=,
@@ -501,34 +405,29 @@ class TestVolumeCreate(TestVolume):
volume_fakes.image_id,
)
- collist = (
- 'attach_status',
- 'availability_zone',
- 'display_description',
- 'display_name',
- 'id',
- 'properties',
- 'size',
- 'status',
- 'type',
- )
- self.assertEqual(collist, columns)
- datalist = (
- 'detached',
- volume_fakes.volume_zone,
- volume_fakes.volume_description,
- volume_fakes.volume_name,
- volume_fakes.volume_id,
- volume_fakes.volume_metadata_str,
- volume_fakes.volume_size,
- volume_fakes.volume_status,
- volume_fakes.volume_type,
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, data)
class TestVolumeList(TestVolume):
+ columns = (
+ 'ID',
+ 'Display Name',
+ 'Status',
+ 'Size',
+ 'Attached to',
+ )
+ datalist = (
+ (
+ volume_fakes.volume_id,
+ volume_fakes.volume_name,
+ volume_fakes.volume_status,
+ volume_fakes.volume_size,
+ '',
+ ),
+ )
+
def setUp(self):
super(TestVolumeList, self).setUp()
@@ -555,23 +454,8 @@ class TestVolumeList(TestVolume):
columns, data = self.cmd.take_action(parsed_args)
- collist = (
- 'ID',
- 'Display Name',
- 'Status',
- 'Size',
- 'Attached to',
- )
- self.assertEqual(collist, columns)
-
- datalist = ((
- volume_fakes.volume_id,
- volume_fakes.volume_name,
- volume_fakes.volume_status,
- volume_fakes.volume_size,
- '',
- ), )
- self.assertEqual(datalist, tuple(data))
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, tuple(data))
def test_volume_list_name(self):
arglist = [
@@ -586,24 +470,8 @@ class TestVolumeList(TestVolume):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
-
- collist = (
- 'ID',
- 'Display Name',
- 'Status',
- 'Size',
- 'Attached to',
- )
- self.assertEqual(collist, tuple(columns))
-
- datalist = ((
- volume_fakes.volume_id,
- volume_fakes.volume_name,
- volume_fakes.volume_status,
- volume_fakes.volume_size,
- '',
- ), )
- self.assertEqual(datalist, tuple(data))
+ self.assertEqual(self.columns, tuple(columns))
+ self.assertEqual(self.datalist, tuple(data))
def test_volume_list_status(self):
arglist = [
@@ -618,24 +486,8 @@ class TestVolumeList(TestVolume):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
-
- collist = (
- 'ID',
- 'Display Name',
- 'Status',
- 'Size',
- 'Attached to',
- )
- self.assertEqual(collist, tuple(columns))
-
- datalist = ((
- volume_fakes.volume_id,
- volume_fakes.volume_name,
- volume_fakes.volume_status,
- volume_fakes.volume_size,
- '',
- ), )
- self.assertEqual(datalist, tuple(data))
+ self.assertEqual(self.columns, tuple(columns))
+ self.assertEqual(self.datalist, tuple(data))
def test_volume_list_all_projects(self):
arglist = [
@@ -650,24 +502,8 @@ class TestVolumeList(TestVolume):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
-
- collist = (
- 'ID',
- 'Display Name',
- 'Status',
- 'Size',
- 'Attached to',
- )
- self.assertEqual(collist, columns)
-
- datalist = ((
- volume_fakes.volume_id,
- volume_fakes.volume_name,
- volume_fakes.volume_status,
- volume_fakes.volume_size,
- '',
- ), )
- self.assertEqual(datalist, tuple(data))
+ self.assertEqual(self.columns, tuple(columns))
+ self.assertEqual(self.datalist, tuple(data))
def test_volume_list_long(self):
arglist = [
@@ -760,7 +596,6 @@ class TestVolumeSet(TestVolume):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
# Set expected values
@@ -786,7 +621,6 @@ class TestVolumeSet(TestVolume):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
# Set expected values
@@ -812,7 +646,6 @@ class TestVolumeSet(TestVolume):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
# Set expected values
@@ -878,7 +711,6 @@ class TestVolumeSet(TestVolume):
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
self.cmd.take_action(parsed_args)
# Set expected values
diff --git a/openstackclient/tests/volume/v2/fakes.py b/openstackclient/tests/volume/v2/fakes.py
index 60cec335..2fc5c8ff 100644
--- a/openstackclient/tests/volume/v2/fakes.py
+++ b/openstackclient/tests/volume/v2/fakes.py
@@ -202,6 +202,8 @@ class FakeVolumeClient(object):
self.restores.resource_class = fakes.FakeResource(None, {})
self.qos_specs = mock.Mock()
self.qos_specs.resource_class = fakes.FakeResource(None, {})
+ self.availability_zones = mock.Mock()
+ self.availability_zones.resource_class = fakes.FakeResource(None, {})
self.auth_token = kwargs['token']
self.management_url = kwargs['endpoint']
@@ -254,9 +256,10 @@ class FakeVolume(object):
'key' + uuid.uuid4().hex: 'val' + uuid.uuid4().hex},
'snapshot_id': random.randint(1, 5),
'availability_zone': 'zone' + uuid.uuid4().hex,
- 'attachments': {
+ 'attachments': [{
'device': '/dev/' + uuid.uuid4().hex,
- 'server_id': uuid.uuid4().hex},
+ 'server_id': uuid.uuid4().hex,
+ }, ],
}
# Overwrite default attributes if there are some attributes set
@@ -304,3 +307,55 @@ class FakeVolume(object):
volumes = FakeVolume.create_volumes(count)
return mock.MagicMock(side_effect=volumes)
+
+
+class FakeAvailabilityZone(object):
+ """Fake one or more volume availability zones (AZs)."""
+
+ @staticmethod
+ def create_one_availability_zone(attrs={}, methods={}):
+ """Create a fake AZ.
+
+ :param Dictionary attrs:
+ A dictionary with all attributes
+ :param Dictionary methods:
+ A dictionary with all methods
+ :return:
+ A FakeResource object with zoneName, zoneState, etc.
+ """
+ # Set default attributes.
+ availability_zone = {
+ 'zoneName': uuid.uuid4().hex,
+ 'zoneState': {'available': True},
+ }
+
+ # Overwrite default attributes.
+ availability_zone.update(attrs)
+
+ availability_zone = fakes.FakeResource(
+ info=copy.deepcopy(availability_zone),
+ methods=methods,
+ loaded=True)
+ return availability_zone
+
+ @staticmethod
+ def create_availability_zones(attrs={}, methods={}, count=2):
+ """Create multiple fake AZs.
+
+ :param Dictionary attrs:
+ A dictionary with all attributes
+ :param Dictionary methods:
+ A dictionary with all methods
+ :param int count:
+ The number of AZs to fake
+ :return:
+ A list of FakeResource objects faking the AZs
+ """
+ availability_zones = []
+ for i in range(0, count):
+ availability_zone = \
+ FakeAvailabilityZone.create_one_availability_zone(
+ attrs, methods)
+ availability_zones.append(availability_zone)
+
+ return availability_zones
diff --git a/openstackclient/tests/volume/v2/test_backup.py b/openstackclient/tests/volume/v2/test_backup.py
index 7af22e8a..dc1d7877 100644
--- a/openstackclient/tests/volume/v2/test_backup.py
+++ b/openstackclient/tests/volume/v2/test_backup.py
@@ -166,6 +166,24 @@ class TestBackupRestore(TestBackup):
class TestBackupList(TestBackup):
+
+ columns = [
+ 'ID',
+ 'Name',
+ 'Description',
+ 'Status',
+ 'Size',
+ ]
+ datalist = (
+ (
+ volume_fakes.backup_id,
+ volume_fakes.backup_name,
+ volume_fakes.backup_description,
+ volume_fakes.backup_status,
+ volume_fakes.backup_size
+ ),
+ )
+
def setUp(self):
super(TestBackupList, self).setUp()
@@ -193,17 +211,8 @@ class TestBackupList(TestBackup):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
- collist = ['ID', 'Name', 'Description', 'Status', 'Size']
- self.assertEqual(collist, columns)
-
- datalist = ((
- volume_fakes.backup_id,
- volume_fakes.backup_name,
- volume_fakes.backup_description,
- volume_fakes.backup_status,
- volume_fakes.backup_size
- ),)
- self.assertEqual(datalist, tuple(data))
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, tuple(data))
def test_backup_list_with_options(self):
arglist = ["--long"]
@@ -212,9 +221,13 @@ class TestBackupList(TestBackup):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
- collist = ['ID', 'Name', 'Description', 'Status', 'Size',
- 'Availability Zone', 'Volume', 'Container']
- self.assertEqual(collist, columns)
+ columns = self.columns + [
+ 'Availability Zone',
+ 'Volume',
+ 'Container',
+ ]
+
+ self.assertEqual(columns, columns)
datalist = ((
volume_fakes.backup_id,
diff --git a/openstackclient/tests/volume/v2/test_qos_specs.py b/openstackclient/tests/volume/v2/test_qos_specs.py
index 4222ed07..403634a3 100644
--- a/openstackclient/tests/volume/v2/test_qos_specs.py
+++ b/openstackclient/tests/volume/v2/test_qos_specs.py
@@ -69,6 +69,18 @@ class TestQosAssociate(TestQos):
class TestQosCreate(TestQos):
+
+ columns = (
+ 'consumer',
+ 'id',
+ 'name'
+ )
+ datalist = (
+ volume_fakes.qos_consumer,
+ volume_fakes.qos_id,
+ volume_fakes.qos_name
+ )
+
def setUp(self):
super(TestQosCreate, self).setUp()
@@ -97,12 +109,7 @@ class TestQosCreate(TestQos):
{'consumer': volume_fakes.qos_default_consumer}
)
- collist = (
- 'consumer',
- 'id',
- 'name'
- )
- self.assertEqual(collist, columns)
+ self.assertEqual(self.columns, columns)
datalist = (
volume_fakes.qos_default_consumer,
volume_fakes.qos_id,
@@ -134,18 +141,8 @@ class TestQosCreate(TestQos):
{'consumer': volume_fakes.qos_consumer}
)
- collist = (
- 'consumer',
- 'id',
- 'name'
- )
- self.assertEqual(collist, columns)
- datalist = (
- volume_fakes.qos_consumer,
- volume_fakes.qos_id,
- volume_fakes.qos_name
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, data)
def test_qos_create_with_properties(self):
self.qos_mock.create.return_value = fakes.FakeResource(
@@ -176,17 +173,11 @@ class TestQosCreate(TestQos):
specs
)
- collist = (
- 'consumer',
- 'id',
- 'name',
+ columns = self.columns + (
'specs',
)
- self.assertEqual(collist, columns)
- datalist = (
- volume_fakes.qos_consumer,
- volume_fakes.qos_id,
- volume_fakes.qos_name,
+ self.assertEqual(columns, columns)
+ datalist = self.datalist + (
volume_fakes.qos_specs,
)
self.assertEqual(datalist, data)
diff --git a/openstackclient/tests/volume/v2/test_snapshot.py b/openstackclient/tests/volume/v2/test_snapshot.py
index 3b30d4ef..1c1dd437 100644
--- a/openstackclient/tests/volume/v2/test_snapshot.py
+++ b/openstackclient/tests/volume/v2/test_snapshot.py
@@ -202,6 +202,15 @@ class TestSnapshotUnset(TestSnapshot):
class TestSnapshotList(TestSnapshot):
+
+ columns = [
+ "ID",
+ "Name",
+ "Description",
+ "Status",
+ "Size"
+ ]
+
def setUp(self):
super(TestSnapshotList, self).setUp()
@@ -231,8 +240,7 @@ class TestSnapshotList(TestSnapshot):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
- collist = ["ID", "Name", "Description", "Status", "Size"]
- self.assertEqual(collist, columns)
+ self.assertEqual(self.columns, columns)
datalist = ((
volume_fakes.snapshot_id,
volume_fakes.snapshot_name,
@@ -249,9 +257,12 @@ class TestSnapshotList(TestSnapshot):
columns, data = self.cmd.take_action(parsed_args)
- collist = ["ID", "Name", "Description", "Status", "Size", "Created At",
- "Volume", "Properties"]
- self.assertEqual(collist, columns)
+ columns = self.columns + [
+ "Created At",
+ "Volume",
+ "Properties"
+ ]
+ self.assertEqual(columns, columns)
datalist = ((
volume_fakes.snapshot_id,
@@ -277,14 +288,7 @@ class TestSnapshotList(TestSnapshot):
columns, data = self.cmd.take_action(parsed_args)
- collist = [
- "ID",
- "Name",
- "Description",
- "Status",
- "Size"
- ]
- self.assertEqual(collist, columns)
+ self.assertEqual(self.columns, columns)
datalist = ((
volume_fakes.snapshot_id,
diff --git a/openstackclient/tests/volume/v2/test_type.py b/openstackclient/tests/volume/v2/test_type.py
index c63cd1fa..9bf60363 100644
--- a/openstackclient/tests/volume/v2/test_type.py
+++ b/openstackclient/tests/volume/v2/test_type.py
@@ -44,6 +44,17 @@ class TestType(volume_fakes.TestVolume):
class TestTypeCreate(TestType):
+ columns = (
+ 'description',
+ 'id',
+ 'name',
+ )
+ datalist = (
+ volume_fakes.type_description,
+ volume_fakes.type_id,
+ volume_fakes.type_name,
+ )
+
def setUp(self):
super(TestTypeCreate, self).setUp()
@@ -76,18 +87,8 @@ class TestTypeCreate(TestType):
is_public=True,
)
- collist = (
- 'description',
- 'id',
- 'name',
- )
- self.assertEqual(collist, columns)
- datalist = (
- volume_fakes.type_description,
- volume_fakes.type_id,
- volume_fakes.type_name,
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, data)
def test_type_create_private(self):
arglist = [
@@ -110,21 +111,17 @@ class TestTypeCreate(TestType):
is_public=False,
)
- collist = (
- 'description',
- 'id',
- 'name',
- )
- self.assertEqual(collist, columns)
- datalist = (
- volume_fakes.type_description,
- volume_fakes.type_id,
- volume_fakes.type_name,
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, data)
class TestTypeList(TestType):
+
+ columns = [
+ "ID",
+ "Name"
+ ]
+
def setUp(self):
super(TestTypeList, self).setUp()
@@ -146,8 +143,7 @@ class TestTypeList(TestType):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
- collist = ["ID", "Name"]
- self.assertEqual(collist, columns)
+ self.assertEqual(self.columns, columns)
datalist = ((
volume_fakes.type_id,
volume_fakes.type_name,
@@ -160,8 +156,11 @@ class TestTypeList(TestType):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = self.cmd.take_action(parsed_args)
- collist = ["ID", "Name", "Description", "Properties"]
- self.assertEqual(collist, columns)
+ columns = self.columns + [
+ "Description",
+ "Properties"
+ ]
+ self.assertEqual(columns, columns)
datalist = ((
volume_fakes.type_id,
volume_fakes.type_name,
diff --git a/openstackclient/tests/volume/v2/test_volume.py b/openstackclient/tests/volume/v2/test_volume.py
index 50826c31..df43cb2b 100644
--- a/openstackclient/tests/volume/v2/test_volume.py
+++ b/openstackclient/tests/volume/v2/test_volume.py
@@ -16,6 +16,7 @@ import copy
from mock import call
+from openstackclient.common import utils
from openstackclient.tests import fakes
from openstackclient.tests.identity.v3 import fakes as identity_fakes
from openstackclient.tests.volume.v2 import fakes as volume_fakes
@@ -48,13 +49,37 @@ class TestVolume(volume_fakes.TestVolume):
class TestVolumeCreate(TestVolume):
+
+ columns = (
+ 'attachments',
+ 'availability_zone',
+ 'description',
+ 'id',
+ 'name',
+ 'properties',
+ 'size',
+ 'snapshot_id',
+ 'status',
+ 'type',
+ )
+
def setUp(self):
super(TestVolumeCreate, self).setUp()
- self.volumes_mock.create.return_value = fakes.FakeResource(
- None,
- copy.deepcopy(volume_fakes.VOLUME),
- loaded=True,
+ self.new_volume = volume_fakes.FakeVolume.create_one_volume()
+ self.volumes_mock.create.return_value = self.new_volume
+
+ self.datalist = (
+ self.new_volume.attachments,
+ self.new_volume.availability_zone,
+ self.new_volume.description,
+ self.new_volume.id,
+ self.new_volume.name,
+ utils.format_dict(self.new_volume.metadata),
+ self.new_volume.size,
+ self.new_volume.snapshot_id,
+ self.new_volume.status,
+ self.new_volume.volume_type,
)
# Get the command object to test
@@ -62,22 +87,24 @@ class TestVolumeCreate(TestVolume):
def test_volume_create_min_options(self):
arglist = [
- '--size', str(volume_fakes.volume_size),
- volume_fakes.volume_name,
+ '--size', str(self.new_volume.size),
+ self.new_volume.name,
]
verifylist = [
- ('size', volume_fakes.volume_size),
- ('name', volume_fakes.volume_name),
+ ('size', self.new_volume.size),
+ ('name', self.new_volume.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
self.volumes_mock.create.assert_called_with(
- size=volume_fakes.volume_size,
+ size=self.new_volume.size,
snapshot_id=None,
- name=volume_fakes.volume_name,
+ name=self.new_volume.name,
description=None,
volume_type=None,
user_id=None,
@@ -88,93 +115,47 @@ class TestVolumeCreate(TestVolume):
source_volid=None
)
- collist = (
- 'attachments',
- 'availability_zone',
- 'description',
- 'id',
- 'name',
- 'properties',
- 'size',
- 'snapshot_id',
- 'status',
- 'type',
- )
- self.assertEqual(collist, columns)
- datalist = (
- volume_fakes.volume_attachments,
- volume_fakes.volume_availability_zone,
- volume_fakes.volume_description,
- volume_fakes.volume_id,
- volume_fakes.volume_name,
- volume_fakes.volume_metadata_str,
- volume_fakes.volume_size,
- volume_fakes.volume_snapshot_id,
- volume_fakes.volume_status,
- volume_fakes.volume_type,
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, data)
def test_volume_create_options(self):
arglist = [
- '--size', str(volume_fakes.volume_size),
- '--description', volume_fakes.volume_description,
- '--type', volume_fakes.volume_type,
- '--availability-zone', volume_fakes.volume_availability_zone,
- volume_fakes.volume_name,
+ '--size', str(self.new_volume.size),
+ '--description', self.new_volume.description,
+ '--type', self.new_volume.volume_type,
+ '--availability-zone', self.new_volume.availability_zone,
+ self.new_volume.name,
]
verifylist = [
- ('size', volume_fakes.volume_size),
- ('description', volume_fakes.volume_description),
- ('type', volume_fakes.volume_type),
- ('availability_zone', volume_fakes.volume_availability_zone),
- ('name', volume_fakes.volume_name),
+ ('size', self.new_volume.size),
+ ('description', self.new_volume.description),
+ ('type', self.new_volume.volume_type),
+ ('availability_zone', self.new_volume.availability_zone),
+ ('name', self.new_volume.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
self.volumes_mock.create.assert_called_with(
- size=volume_fakes.volume_size,
+ size=self.new_volume.size,
snapshot_id=None,
- name=volume_fakes.volume_name,
- description=volume_fakes.volume_description,
- volume_type=volume_fakes.volume_type,
+ name=self.new_volume.name,
+ description=self.new_volume.description,
+ volume_type=self.new_volume.volume_type,
user_id=None,
project_id=None,
- availability_zone=volume_fakes.volume_availability_zone,
+ availability_zone=self.new_volume.availability_zone,
metadata=None,
imageRef=None,
source_volid=None
)
- collist = (
- 'attachments',
- 'availability_zone',
- 'description',
- 'id',
- 'name',
- 'properties',
- 'size',
- 'snapshot_id',
- 'status',
- 'type',
- )
- self.assertEqual(collist, columns)
- datalist = (
- volume_fakes.volume_attachments,
- volume_fakes.volume_availability_zone,
- volume_fakes.volume_description,
- volume_fakes.volume_id,
- volume_fakes.volume_name,
- volume_fakes.volume_metadata_str,
- volume_fakes.volume_size,
- volume_fakes.volume_snapshot_id,
- volume_fakes.volume_status,
- volume_fakes.volume_type,
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, data)
def test_volume_create_user_project_id(self):
# Return a project
@@ -191,26 +172,28 @@ class TestVolumeCreate(TestVolume):
)
arglist = [
- '--size', str(volume_fakes.volume_size),
+ '--size', str(self.new_volume.size),
'--project', identity_fakes.project_id,
'--user', identity_fakes.user_id,
- volume_fakes.volume_name,
+ self.new_volume.name,
]
verifylist = [
- ('size', volume_fakes.volume_size),
+ ('size', self.new_volume.size),
('project', identity_fakes.project_id),
('user', identity_fakes.user_id),
- ('name', volume_fakes.volume_name),
+ ('name', self.new_volume.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
self.volumes_mock.create.assert_called_with(
- size=volume_fakes.volume_size,
+ size=self.new_volume.size,
snapshot_id=None,
- name=volume_fakes.volume_name,
+ name=self.new_volume.name,
description=None,
volume_type=None,
user_id=identity_fakes.user_id,
@@ -221,32 +204,8 @@ class TestVolumeCreate(TestVolume):
source_volid=None
)
- collist = (
- 'attachments',
- 'availability_zone',
- 'description',
- 'id',
- 'name',
- 'properties',
- 'size',
- 'snapshot_id',
- 'status',
- 'type',
- )
- self.assertEqual(collist, columns)
- datalist = (
- volume_fakes.volume_attachments,
- volume_fakes.volume_availability_zone,
- volume_fakes.volume_description,
- volume_fakes.volume_id,
- volume_fakes.volume_name,
- volume_fakes.volume_metadata_str,
- volume_fakes.volume_size,
- volume_fakes.volume_snapshot_id,
- volume_fakes.volume_status,
- volume_fakes.volume_type,
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, data)
def test_volume_create_user_project_name(self):
# Return a project
@@ -263,26 +222,28 @@ class TestVolumeCreate(TestVolume):
)
arglist = [
- '--size', str(volume_fakes.volume_size),
+ '--size', str(self.new_volume.size),
'--project', identity_fakes.project_name,
'--user', identity_fakes.user_name,
- volume_fakes.volume_name,
+ self.new_volume.name,
]
verifylist = [
- ('size', volume_fakes.volume_size),
+ ('size', self.new_volume.size),
('project', identity_fakes.project_name),
('user', identity_fakes.user_name),
- ('name', volume_fakes.volume_name),
+ ('name', self.new_volume.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
self.volumes_mock.create.assert_called_with(
- size=volume_fakes.volume_size,
+ size=self.new_volume.size,
snapshot_id=None,
- name=volume_fakes.volume_name,
+ name=self.new_volume.name,
description=None,
volume_type=None,
user_id=identity_fakes.user_id,
@@ -293,54 +254,32 @@ class TestVolumeCreate(TestVolume):
source_volid=None
)
- collist = (
- 'attachments',
- 'availability_zone',
- 'description',
- 'id',
- 'name',
- 'properties',
- 'size',
- 'snapshot_id',
- 'status',
- 'type',
- )
- self.assertEqual(collist, columns)
- datalist = (
- volume_fakes.volume_attachments,
- volume_fakes.volume_availability_zone,
- volume_fakes.volume_description,
- volume_fakes.volume_id,
- volume_fakes.volume_name,
- volume_fakes.volume_metadata_str,
- volume_fakes.volume_size,
- volume_fakes.volume_snapshot_id,
- volume_fakes.volume_status,
- volume_fakes.volume_type,
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, data)
def test_volume_create_properties(self):
arglist = [
'--property', 'Alpha=a',
'--property', 'Beta=b',
- '--size', str(volume_fakes.volume_size),
- volume_fakes.volume_name,
+ '--size', str(self.new_volume.size),
+ self.new_volume.name,
]
verifylist = [
('property', {'Alpha': 'a', 'Beta': 'b'}),
- ('size', volume_fakes.volume_size),
- ('name', volume_fakes.volume_name),
+ ('size', self.new_volume.size),
+ ('name', self.new_volume.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
self.volumes_mock.create.assert_called_with(
- size=volume_fakes.volume_size,
+ size=self.new_volume.size,
snapshot_id=None,
- name=volume_fakes.volume_name,
+ name=self.new_volume.name,
description=None,
volume_type=None,
user_id=None,
@@ -351,32 +290,8 @@ class TestVolumeCreate(TestVolume):
source_volid=None
)
- collist = (
- 'attachments',
- 'availability_zone',
- 'description',
- 'id',
- 'name',
- 'properties',
- 'size',
- 'snapshot_id',
- 'status',
- 'type',
- )
- self.assertEqual(collist, columns)
- datalist = (
- volume_fakes.volume_attachments,
- volume_fakes.volume_availability_zone,
- volume_fakes.volume_description,
- volume_fakes.volume_id,
- volume_fakes.volume_name,
- volume_fakes.volume_metadata_str,
- volume_fakes.volume_size,
- volume_fakes.volume_snapshot_id,
- volume_fakes.volume_status,
- volume_fakes.volume_type,
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, data)
def test_volume_create_image_id(self):
self.images_mock.get.return_value = fakes.FakeResource(
@@ -387,23 +302,25 @@ class TestVolumeCreate(TestVolume):
arglist = [
'--image', volume_fakes.image_id,
- '--size', str(volume_fakes.volume_size),
- volume_fakes.volume_name,
+ '--size', str(self.new_volume.size),
+ self.new_volume.name,
]
verifylist = [
('image', volume_fakes.image_id),
- ('size', volume_fakes.volume_size),
- ('name', volume_fakes.volume_name),
+ ('size', self.new_volume.size),
+ ('name', self.new_volume.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
self.volumes_mock.create.assert_called_with(
- size=volume_fakes.volume_size,
+ size=self.new_volume.size,
snapshot_id=None,
- name=volume_fakes.volume_name,
+ name=self.new_volume.name,
description=None,
volume_type=None,
user_id=None,
@@ -411,35 +328,11 @@ class TestVolumeCreate(TestVolume):
availability_zone=None,
metadata=None,
imageRef=volume_fakes.image_id,
- source_volid=None
+ source_volid=None,
)
- collist = (
- 'attachments',
- 'availability_zone',
- 'description',
- 'id',
- 'name',
- 'properties',
- 'size',
- 'snapshot_id',
- 'status',
- 'type',
- )
- self.assertEqual(collist, columns)
- datalist = (
- volume_fakes.volume_attachments,
- volume_fakes.volume_availability_zone,
- volume_fakes.volume_description,
- volume_fakes.volume_id,
- volume_fakes.volume_name,
- volume_fakes.volume_metadata_str,
- volume_fakes.volume_size,
- volume_fakes.volume_snapshot_id,
- volume_fakes.volume_status,
- volume_fakes.volume_type,
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, data)
def test_volume_create_image_name(self):
self.images_mock.get.return_value = fakes.FakeResource(
@@ -450,23 +343,25 @@ class TestVolumeCreate(TestVolume):
arglist = [
'--image', volume_fakes.image_name,
- '--size', str(volume_fakes.volume_size),
- volume_fakes.volume_name,
+ '--size', str(self.new_volume.size),
+ self.new_volume.name,
]
verifylist = [
('image', volume_fakes.image_name),
- ('size', volume_fakes.volume_size),
- ('name', volume_fakes.volume_name),
+ ('size', self.new_volume.size),
+ ('name', self.new_volume.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
- # DisplayCommandBase.take_action() returns two tuples
+ # In base command class ShowOne in cliff, abstract method take_action()
+ # returns a two-part tuple with a tuple of column names and a tuple of
+ # data to be shown.
columns, data = self.cmd.take_action(parsed_args)
self.volumes_mock.create.assert_called_with(
- size=volume_fakes.volume_size,
+ size=self.new_volume.size,
snapshot_id=None,
- name=volume_fakes.volume_name,
+ name=self.new_volume.name,
description=None,
volume_type=None,
user_id=None,
@@ -477,36 +372,61 @@ class TestVolumeCreate(TestVolume):
source_volid=None
)
- collist = (
- 'attachments',
- 'availability_zone',
- 'description',
- 'id',
- 'name',
- 'properties',
- 'size',
- 'snapshot_id',
- 'status',
- 'type',
- )
- self.assertEqual(collist, columns)
- datalist = (
- volume_fakes.volume_attachments,
- volume_fakes.volume_availability_zone,
- volume_fakes.volume_description,
- volume_fakes.volume_id,
- volume_fakes.volume_name,
- volume_fakes.volume_metadata_str,
- volume_fakes.volume_size,
- volume_fakes.volume_snapshot_id,
- volume_fakes.volume_status,
- volume_fakes.volume_type,
- )
- self.assertEqual(datalist, data)
+ self.assertEqual(self.columns, columns)
+ self.assertEqual(self.datalist, data)
+
+
+class TestVolumeDelete(TestVolume):
+ def setUp(self):
+ super(TestVolumeDelete, self).setUp()
+
+ self.volumes_mock.delete.return_value = None
+
+ # Get the command object to mock
+ self.cmd = volume.DeleteVolume(self.app, None)
+
+ def test_volume_delete_one_volume(self):
+ volumes = self.setup_volumes_mock(count=1)
+
+ arglist = [
+ volumes[0].id
+ ]
+ verifylist = [
+ ("volumes", [volumes[0].id])
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.cmd.take_action(parsed_args)
+ self.volumes_mock.delete.assert_called_with(volumes[0].id)
+
+ def test_volume_delete_multi_volumes(self):
+ volumes = self.setup_volumes_mock(count=3)
+
+ arglist = [v.id for v in volumes]
+ verifylist = [
+ ('volumes', arglist),
+ ]
+
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.cmd.take_action(parsed_args)
+
+ calls = [call(v.id) for v in volumes]
+
+ self.volumes_mock.delete.assert_has_calls(calls)
class TestVolumeList(TestVolume):
+ columns = [
+ 'ID',
+ 'Display Name',
+ 'Status',
+ 'Size',
+ 'Attached to',
+ ]
+
def setUp(self):
super(TestVolumeList, self).setUp()
@@ -549,14 +469,7 @@ class TestVolumeList(TestVolume):
columns, data = self.cmd.take_action(parsed_args)
- collist = [
- 'ID',
- 'Display Name',
- 'Status',
- 'Size',
- 'Attached to',
- ]
- self.assertEqual(collist, columns)
+ self.assertEqual(self.columns, columns)
server = volume_fakes.volume_attachment_server['server_id']
device = volume_fakes.volume_attachment_server['device']
@@ -584,19 +497,11 @@ class TestVolumeList(TestVolume):
columns, data = self.cmd.take_action(parsed_args)
- collist = (
- 'ID',
- 'Display Name',
- 'Status',
- 'Size',
- 'Attached to',
- )
- self.assertEqual(collist, tuple(columns))
+ self.assertEqual(self.columns, columns)
server = volume_fakes.volume_attachment_server['server_id']
device = volume_fakes.volume_attachment_server['device']
msg = 'Attached to %s on %s ' % (server, device)
-
datalist = ((
volume_fakes.volume_id,
volume_fakes.volume_name,
@@ -622,19 +527,11 @@ class TestVolumeList(TestVolume):
columns, data = self.cmd.take_action(parsed_args)
- collist = (
- 'ID',
- 'Display Name',
- 'Status',
- 'Size',
- 'Attached to',
- )
- self.assertEqual(collist, tuple(columns))
+ self.assertEqual(self.columns, columns)
server = volume_fakes.volume_attachment_server['server_id']
device = volume_fakes.volume_attachment_server['device']
msg = 'Attached to %s on %s ' % (server, device)
-
datalist = ((
volume_fakes.volume_id,
volume_fakes.volume_name,
@@ -658,19 +555,10 @@ class TestVolumeList(TestVolume):
columns, data = self.cmd.take_action(parsed_args)
- collist = (
- 'ID',
- 'Display Name',
- 'Status',
- 'Size',
- 'Attached to',
- )
- self.assertEqual(collist, tuple(columns))
-
+ self.assertEqual(self.columns, columns)
server = volume_fakes.volume_attachment_server['server_id']
device = volume_fakes.volume_attachment_server['device']
msg = 'Attached to %s on %s ' % (server, device)
-
datalist = ((
volume_fakes.volume_id,
volume_fakes.volume_name,
@@ -696,19 +584,11 @@ class TestVolumeList(TestVolume):
columns, data = self.cmd.take_action(parsed_args)
- collist = (
- 'ID',
- 'Display Name',
- 'Status',
- 'Size',
- 'Attached to',
- )
- self.assertEqual(collist, tuple(columns))
+ self.assertEqual(self.columns, columns)
server = volume_fakes.volume_attachment_server['server_id']
device = volume_fakes.volume_attachment_server['device']
msg = 'Attached to %s on %s ' % (server, device)
-
datalist = ((
volume_fakes.volume_id,
volume_fakes.volume_name,
@@ -732,19 +612,11 @@ class TestVolumeList(TestVolume):
columns, data = self.cmd.take_action(parsed_args)
- collist = (
- 'ID',
- 'Display Name',
- 'Status',
- 'Size',
- 'Attached to',
- )
- self.assertEqual(collist, tuple(columns))
+ self.assertEqual(self.columns, columns)
server = volume_fakes.volume_attachment_server['server_id']
device = volume_fakes.volume_attachment_server['device']
msg = 'Attached to %s on %s ' % (server, device)
-
datalist = ((
volume_fakes.volume_id,
volume_fakes.volume_name,
@@ -768,14 +640,7 @@ class TestVolumeList(TestVolume):
columns, data = self.cmd.take_action(parsed_args)
- collist = (
- 'ID',
- 'Display Name',
- 'Status',
- 'Size',
- 'Attached to',
- )
- self.assertEqual(collist, tuple(columns))
+ self.assertEqual(self.columns, columns)
server = volume_fakes.volume_attachment_server['server_id']
device = volume_fakes.volume_attachment_server['device']
@@ -803,14 +668,7 @@ class TestVolumeList(TestVolume):
columns, data = self.cmd.take_action(parsed_args)
- collist = [
- 'ID',
- 'Display Name',
- 'Status',
- 'Size',
- 'Attached to',
- ]
- self.assertEqual(collist, columns)
+ self.assertEqual(self.columns, columns)
server = volume_fakes.volume_attachment_server['server_id']
device = volume_fakes.volume_attachment_server['device']
@@ -892,44 +750,3 @@ class TestVolumeShow(TestVolume):
self.assertEqual(volume_fakes.VOLUME_columns, columns)
self.assertEqual(volume_fakes.VOLUME_data, data)
-
-
-class TestVolumeDelete(TestVolume):
- def setUp(self):
- super(TestVolumeDelete, self).setUp()
-
- self.volumes_mock.delete.return_value = None
-
- # Get the command object to mock
- self.cmd = volume.DeleteVolume(self.app, None)
-
- def test_volume_delete_one_volume(self):
- volumes = self.setup_volumes_mock(count=1)
-
- arglist = [
- volumes[0].id
- ]
- verifylist = [
- ("volumes", [volumes[0].id])
- ]
-
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
-
- self.cmd.take_action(parsed_args)
- self.volumes_mock.delete.assert_called_with(volumes[0].id)
-
- def test_volume_delete_multi_volumes(self):
- volumes = self.setup_volumes_mock(count=3)
-
- arglist = [v.id for v in volumes]
- verifylist = [
- ('volumes', arglist),
- ]
-
- parsed_args = self.check_parser(self.cmd, arglist, verifylist)
-
- self.cmd.take_action(parsed_args)
-
- calls = [call(v.id) for v in volumes]
-
- self.volumes_mock.delete.assert_has_calls(calls)
diff --git a/openstackclient/volume/v1/backup.py b/openstackclient/volume/v1/backup.py
index 4f2ff8bb..32f39fb5 100644
--- a/openstackclient/volume/v1/backup.py
+++ b/openstackclient/volume/v1/backup.py
@@ -16,21 +16,15 @@
"""Volume v1 Backup action implementations"""
import copy
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import utils
-class CreateBackup(show.ShowOne):
+class CreateBackup(command.ShowOne):
"""Create new backup"""
- log = logging.getLogger(__name__ + '.CreateBackup')
-
def get_parser(self, prog_name):
parser = super(CreateBackup, self).get_parser(prog_name)
parser.add_argument(
@@ -57,7 +51,6 @@ class CreateBackup(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
volume_id = utils.find_resource(volume_client.volumes,
@@ -76,8 +69,6 @@ class CreateBackup(show.ShowOne):
class DeleteBackup(command.Command):
"""Delete backup(s)"""
- log = logging.getLogger(__name__ + '.DeleteBackup')
-
def get_parser(self, prog_name):
parser = super(DeleteBackup, self).get_parser(prog_name)
parser.add_argument(
@@ -88,7 +79,6 @@ class DeleteBackup(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
for backup in parsed_args.backups:
@@ -97,11 +87,9 @@ class DeleteBackup(command.Command):
volume_client.backups.delete(backup_id)
-class ListBackup(lister.Lister):
+class ListBackup(command.Lister):
"""List backups"""
- log = logging.getLogger(__name__ + '.ListBackup')
-
def get_parser(self, prog_name):
parser = super(ListBackup, self).get_parser(prog_name)
parser.add_argument(
@@ -112,7 +100,6 @@ class ListBackup(lister.Lister):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
def _format_volume_id(volume_id):
@@ -157,8 +144,6 @@ class ListBackup(lister.Lister):
class RestoreBackup(command.Command):
"""Restore backup"""
- log = logging.getLogger(__name__ + '.RestoreBackup')
-
def get_parser(self, prog_name):
parser = super(RestoreBackup, self).get_parser(prog_name)
parser.add_argument(
@@ -171,7 +156,6 @@ class RestoreBackup(command.Command):
help='Volume to restore to (name or ID)')
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
backup = utils.find_resource(volume_client.backups,
@@ -182,11 +166,9 @@ class RestoreBackup(command.Command):
destination_volume.id)
-class ShowBackup(show.ShowOne):
+class ShowBackup(command.ShowOne):
"""Display backup details"""
- log = logging.getLogger(__name__ + '.ShowBackup')
-
def get_parser(self, prog_name):
parser = super(ShowBackup, self).get_parser(prog_name)
parser.add_argument(
@@ -195,7 +177,6 @@ class ShowBackup(show.ShowOne):
help='Backup to display (ID only)')
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
backup = utils.find_resource(volume_client.backups,
diff --git a/openstackclient/volume/v1/qos_specs.py b/openstackclient/volume/v1/qos_specs.py
index 73e70a21..826e5c49 100644
--- a/openstackclient/volume/v1/qos_specs.py
+++ b/openstackclient/volume/v1/qos_specs.py
@@ -15,13 +15,9 @@
"""Volume v1 QoS action implementations"""
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import parseractions
from openstackclient.common import utils
@@ -29,8 +25,6 @@ from openstackclient.common import utils
class AssociateQos(command.Command):
"""Associate a QoS specification to a volume type"""
- log = logging.getLogger(__name__ + '.AssociateQos')
-
def get_parser(self, prog_name):
parser = super(AssociateQos, self).get_parser(prog_name)
parser.add_argument(
@@ -45,7 +39,6 @@ class AssociateQos(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
qos_spec = utils.find_resource(volume_client.qos_specs,
@@ -56,11 +49,9 @@ class AssociateQos(command.Command):
volume_client.qos_specs.associate(qos_spec.id, volume_type.id)
-class CreateQos(show.ShowOne):
+class CreateQos(command.ShowOne):
"""Create new QoS specification"""
- log = logging.getLogger(__name__ + '.CreateQos')
-
def get_parser(self, prog_name):
parser = super(CreateQos, self).get_parser(prog_name)
parser.add_argument(
@@ -86,7 +77,6 @@ class CreateQos(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
specs = {}
@@ -103,8 +93,6 @@ class CreateQos(show.ShowOne):
class DeleteQos(command.Command):
"""Delete QoS specification"""
- log = logging.getLogger(__name__ + '.DeleteQos')
-
def get_parser(self, prog_name):
parser = super(DeleteQos, self).get_parser(prog_name)
parser.add_argument(
@@ -115,7 +103,6 @@ class DeleteQos(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
for qos in parsed_args.qos_specs:
@@ -126,8 +113,6 @@ class DeleteQos(command.Command):
class DisassociateQos(command.Command):
"""Disassociate a QoS specification from a volume type"""
- log = logging.getLogger(__name__ + '.DisassociateQos')
-
def get_parser(self, prog_name):
parser = super(DisassociateQos, self).get_parser(prog_name)
parser.add_argument(
@@ -150,7 +135,6 @@ class DisassociateQos(command.Command):
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
qos_spec = utils.find_resource(volume_client.qos_specs,
@@ -164,12 +148,9 @@ class DisassociateQos(command.Command):
volume_client.qos_specs.disassociate_all(qos_spec.id)
-class ListQos(lister.Lister):
+class ListQos(command.Lister):
"""List QoS specifications"""
- log = logging.getLogger(__name__ + '.ListQos')
-
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
qos_specs_list = volume_client.qos_specs.list()
@@ -195,8 +176,6 @@ class ListQos(lister.Lister):
class SetQos(command.Command):
"""Set QoS specification properties"""
- log = logging.getLogger(__name__ + '.SetQos')
-
def get_parser(self, prog_name):
parser = super(SetQos, self).get_parser(prog_name)
parser.add_argument(
@@ -213,7 +192,6 @@ class SetQos(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
qos_spec = utils.find_resource(volume_client.qos_specs,
@@ -226,11 +204,9 @@ class SetQos(command.Command):
self.app.log.error("No changes requested\n")
-class ShowQos(show.ShowOne):
+class ShowQos(command.ShowOne):
"""Display QoS specification details"""
- log = logging.getLogger(__name__ + '.ShowQos')
-
def get_parser(self, prog_name):
parser = super(ShowQos, self).get_parser(prog_name)
parser.add_argument(
@@ -240,7 +216,6 @@ class ShowQos(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
qos_spec = utils.find_resource(volume_client.qos_specs,
@@ -261,8 +236,6 @@ class ShowQos(show.ShowOne):
class UnsetQos(command.Command):
"""Unset QoS specification properties"""
- log = logging.getLogger(__name__ + '.SetQos')
-
def get_parser(self, prog_name):
parser = super(UnsetQos, self).get_parser(prog_name)
parser.add_argument(
@@ -280,7 +253,6 @@ class UnsetQos(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
qos_spec = utils.find_resource(volume_client.qos_specs,
diff --git a/openstackclient/volume/v1/snapshot.py b/openstackclient/volume/v1/snapshot.py
index 24379a9a..95200e40 100644
--- a/openstackclient/volume/v1/snapshot.py
+++ b/openstackclient/volume/v1/snapshot.py
@@ -16,22 +16,16 @@
"""Volume v1 Snapshot action implementations"""
import copy
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import parseractions
from openstackclient.common import utils
-class CreateSnapshot(show.ShowOne):
+class CreateSnapshot(command.ShowOne):
"""Create new snapshot"""
- log = logging.getLogger(__name__ + '.CreateSnapshot')
-
def get_parser(self, prog_name):
parser = super(CreateSnapshot, self).get_parser(prog_name)
parser.add_argument(
@@ -59,7 +53,6 @@ class CreateSnapshot(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
volume_id = utils.find_resource(volume_client.volumes,
@@ -81,8 +74,6 @@ class CreateSnapshot(show.ShowOne):
class DeleteSnapshot(command.Command):
"""Delete snapshot(s)"""
- log = logging.getLogger(__name__ + '.DeleteSnapshot')
-
def get_parser(self, prog_name):
parser = super(DeleteSnapshot, self).get_parser(prog_name)
parser.add_argument(
@@ -93,7 +84,6 @@ class DeleteSnapshot(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
for snapshot in parsed_args.snapshots:
@@ -102,11 +92,9 @@ class DeleteSnapshot(command.Command):
volume_client.volume_snapshots.delete(snapshot_id)
-class ListSnapshot(lister.Lister):
+class ListSnapshot(command.Lister):
"""List snapshots"""
- log = logging.getLogger(__name__ + '.ListSnapshot')
-
def get_parser(self, prog_name):
parser = super(ListSnapshot, self).get_parser(prog_name)
parser.add_argument(
@@ -123,7 +111,6 @@ class ListSnapshot(lister.Lister):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
def _format_volume_id(volume_id):
@@ -179,8 +166,6 @@ class ListSnapshot(lister.Lister):
class SetSnapshot(command.Command):
"""Set snapshot properties"""
- log = logging.getLogger(__name__ + '.SetSnapshot')
-
def get_parser(self, prog_name):
parser = super(SetSnapshot, self).get_parser(prog_name)
parser.add_argument(
@@ -204,7 +189,6 @@ class SetSnapshot(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
snapshot = utils.find_resource(volume_client.volume_snapshots,
@@ -227,11 +211,9 @@ class SetSnapshot(command.Command):
snapshot.update(**kwargs)
-class ShowSnapshot(show.ShowOne):
+class ShowSnapshot(command.ShowOne):
"""Display snapshot details"""
- log = logging.getLogger(__name__ + '.ShowSnapshot')
-
def get_parser(self, prog_name):
parser = super(ShowSnapshot, self).get_parser(prog_name)
parser.add_argument(
@@ -240,7 +222,6 @@ class ShowSnapshot(show.ShowOne):
help='Snapshot to display (name or ID)')
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
snapshot = utils.find_resource(volume_client.volume_snapshots,
@@ -256,8 +237,6 @@ class ShowSnapshot(show.ShowOne):
class UnsetSnapshot(command.Command):
"""Unset snapshot properties"""
- log = logging.getLogger(__name__ + '.UnsetSnapshot')
-
def get_parser(self, prog_name):
parser = super(UnsetSnapshot, self).get_parser(prog_name)
parser.add_argument(
@@ -276,7 +255,6 @@ class UnsetSnapshot(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
snapshot = utils.find_resource(
diff --git a/openstackclient/volume/v1/volume.py b/openstackclient/volume/v1/volume.py
index 17b6c9c8..90827d20 100644
--- a/openstackclient/volume/v1/volume.py
+++ b/openstackclient/volume/v1/volume.py
@@ -16,22 +16,16 @@
"""Volume v1 Volume action implementations"""
import argparse
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import parseractions
from openstackclient.common import utils
-class CreateVolume(show.ShowOne):
+class CreateVolume(command.ShowOne):
"""Create new volume"""
- log = logging.getLogger(__name__ + '.CreateVolume')
-
def get_parser(self, prog_name):
parser = super(CreateVolume, self).get_parser(prog_name)
parser.add_argument(
@@ -102,7 +96,6 @@ class CreateVolume(show.ShowOne):
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
identity_client = self.app.client_manager.identity
@@ -166,8 +159,6 @@ class CreateVolume(show.ShowOne):
class DeleteVolume(command.Command):
"""Delete volume(s)"""
- log = logging.getLogger(__name__ + '.DeleteVolume')
-
def get_parser(self, prog_name):
parser = super(DeleteVolume, self).get_parser(prog_name)
parser.add_argument(
@@ -186,7 +177,6 @@ class DeleteVolume(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
for volume in parsed_args.volumes:
@@ -198,11 +188,9 @@ class DeleteVolume(command.Command):
volume_client.volumes.delete(volume_obj.id)
-class ListVolume(lister.Lister):
+class ListVolume(command.Lister):
"""List volumes"""
- log = logging.getLogger(__name__ + '.ListVolume')
-
def get_parser(self, prog_name):
parser = super(ListVolume, self).get_parser(prog_name)
parser.add_argument(
@@ -229,7 +217,6 @@ class ListVolume(lister.Lister):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
@@ -316,8 +303,6 @@ class ListVolume(lister.Lister):
class SetVolume(command.Command):
"""Set volume properties"""
- log = logging.getLogger(__name__ + '.SetVolume')
-
def get_parser(self, prog_name):
parser = super(SetVolume, self).get_parser(prog_name)
parser.add_argument(
@@ -350,7 +335,6 @@ class SetVolume(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
volume = utils.find_resource(volume_client.volumes, parsed_args.volume)
@@ -382,11 +366,9 @@ class SetVolume(command.Command):
self.app.log.error("No changes requested\n")
-class ShowVolume(show.ShowOne):
+class ShowVolume(command.ShowOne):
"""Show volume details"""
- log = logging.getLogger(__name__ + '.ShowVolume')
-
def get_parser(self, prog_name):
parser = super(ShowVolume, self).get_parser(prog_name)
parser.add_argument(
@@ -396,7 +378,6 @@ class ShowVolume(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
volume = utils.find_resource(volume_client.volumes, parsed_args.volume)
@@ -418,8 +399,6 @@ class ShowVolume(show.ShowOne):
class UnsetVolume(command.Command):
"""Unset volume properties"""
- log = logging.getLogger(__name__ + '.UnsetVolume')
-
def get_parser(self, prog_name):
parser = super(UnsetVolume, self).get_parser(prog_name)
parser.add_argument(
@@ -438,7 +417,6 @@ class UnsetVolume(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
volume = utils.find_resource(
diff --git a/openstackclient/volume/v1/volume_type.py b/openstackclient/volume/v1/volume_type.py
index b664adfb..24d0b235 100644
--- a/openstackclient/volume/v1/volume_type.py
+++ b/openstackclient/volume/v1/volume_type.py
@@ -15,22 +15,16 @@
"""Volume v1 Type action implementations"""
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import parseractions
from openstackclient.common import utils
-class CreateVolumeType(show.ShowOne):
+class CreateVolumeType(command.ShowOne):
"""Create new volume type"""
- log = logging.getLogger(__name__ + '.CreateVolumeType')
-
def get_parser(self, prog_name):
parser = super(CreateVolumeType, self).get_parser(prog_name)
parser.add_argument(
@@ -47,7 +41,6 @@ class CreateVolumeType(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
volume_type = volume_client.volume_types.create(parsed_args.name)
@@ -64,8 +57,6 @@ class CreateVolumeType(show.ShowOne):
class DeleteVolumeType(command.Command):
"""Delete volume type"""
- log = logging.getLogger(__name__ + '.DeleteVolumeType')
-
def get_parser(self, prog_name):
parser = super(DeleteVolumeType, self).get_parser(prog_name)
parser.add_argument(
@@ -75,7 +66,6 @@ class DeleteVolumeType(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
volume_type_id = utils.find_resource(
@@ -83,11 +73,9 @@ class DeleteVolumeType(command.Command):
volume_client.volume_types.delete(volume_type_id)
-class ListVolumeType(lister.Lister):
+class ListVolumeType(command.Lister):
"""List volume types"""
- log = logging.getLogger(__name__ + '.ListVolumeType')
-
def get_parser(self, prog_name):
parser = super(ListVolumeType, self).get_parser(prog_name)
parser.add_argument(
@@ -97,7 +85,6 @@ class ListVolumeType(lister.Lister):
help='List additional fields in output')
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
if parsed_args.long:
columns = ('ID', 'Name', 'Extra Specs')
@@ -116,8 +103,6 @@ class ListVolumeType(lister.Lister):
class SetVolumeType(command.Command):
"""Set volume type properties"""
- log = logging.getLogger(__name__ + '.SetVolumeType')
-
def get_parser(self, prog_name):
parser = super(SetVolumeType, self).get_parser(prog_name)
parser.add_argument(
@@ -134,7 +119,6 @@ class SetVolumeType(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
volume_type = utils.find_resource(
@@ -147,8 +131,6 @@ class SetVolumeType(command.Command):
class UnsetVolumeType(command.Command):
"""Unset volume type properties"""
- log = logging.getLogger(__name__ + '.UnsetVolumeType')
-
def get_parser(self, prog_name):
parser = super(UnsetVolumeType, self).get_parser(prog_name)
parser.add_argument(
@@ -167,7 +149,6 @@ class UnsetVolumeType(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
volume_type = utils.find_resource(
@@ -181,11 +162,9 @@ class UnsetVolumeType(command.Command):
self.app.log.error("No changes requested\n")
-class ShowVolumeType(show.ShowOne):
+class ShowVolumeType(command.ShowOne):
"""Display volume type details"""
- log = logging.getLogger(__name__ + ".ShowVolumeType")
-
def get_parser(self, prog_name):
parser = super(ShowVolumeType, self).get_parser(prog_name)
parser.add_argument(
@@ -196,7 +175,6 @@ class ShowVolumeType(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action: (%s)", parsed_args)
volume_client = self.app.client_manager.volume
volume_type = utils.find_resource(
volume_client.volume_types, parsed_args.volume_type)
diff --git a/openstackclient/volume/v2/backup.py b/openstackclient/volume/v2/backup.py
index bc919d0b..64ca97ae 100644
--- a/openstackclient/volume/v2/backup.py
+++ b/openstackclient/volume/v2/backup.py
@@ -15,21 +15,16 @@
"""Volume v2 Backup action implementations"""
import copy
-import logging
-from cliff import command
-from cliff import lister
-from cliff import show
import six
+from openstackclient.common import command
from openstackclient.common import utils
-class CreateBackup(show.ShowOne):
+class CreateBackup(command.ShowOne):
"""Create new backup"""
- log = logging.getLogger(__name__ + ".CreateBackup")
-
def get_parser(self, prog_name):
parser = super(CreateBackup, self).get_parser(prog_name)
parser.add_argument(
@@ -56,7 +51,6 @@ class CreateBackup(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action: (%s)", parsed_args)
volume_client = self.app.client_manager.volume
volume_id = utils.find_resource(
volume_client.volumes, parsed_args.volume).id
@@ -73,8 +67,6 @@ class CreateBackup(show.ShowOne):
class DeleteBackup(command.Command):
"""Delete backup(s)"""
- log = logging.getLogger(__name__ + ".DeleteBackup")
-
def get_parser(self, prog_name):
parser = super(DeleteBackup, self).get_parser(prog_name)
parser.add_argument(
@@ -86,7 +78,6 @@ class DeleteBackup(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action: (%s)", parsed_args)
volume_client = self.app.client_manager.volume
for backup in parsed_args.backups:
backup_id = utils.find_resource(
@@ -94,11 +85,9 @@ class DeleteBackup(command.Command):
volume_client.backups.delete(backup_id)
-class ListBackup(lister.Lister):
+class ListBackup(command.Lister):
"""List backups"""
- log = logging.getLogger(__name__ + ".ListBackup")
-
def get_parser(self, prog_name):
parser = super(ListBackup, self).get_parser(prog_name)
parser.add_argument(
@@ -110,7 +99,6 @@ class ListBackup(lister.Lister):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action: (%s)", parsed_args)
def _format_volume_id(volume_id):
"""Return a volume name if available
@@ -151,11 +139,9 @@ class ListBackup(lister.Lister):
) for s in data))
-class RestoreBackup(show.ShowOne):
+class RestoreBackup(command.ShowOne):
"""Restore backup"""
- log = logging.getLogger(__name__ + ".RestoreBackup")
-
def get_parser(self, prog_name):
parser = super(RestoreBackup, self).get_parser(prog_name)
parser.add_argument(
@@ -171,7 +157,6 @@ class RestoreBackup(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action: (%s)", parsed_args)
volume_client = self.app.client_manager.volume
backup = utils.find_resource(volume_client.backups, parsed_args.backup)
destination_volume = utils.find_resource(volume_client.volumes,
@@ -179,11 +164,9 @@ class RestoreBackup(show.ShowOne):
return volume_client.restores.restore(backup.id, destination_volume.id)
-class ShowBackup(show.ShowOne):
+class ShowBackup(command.ShowOne):
"""Display backup details"""
- log = logging.getLogger(__name__ + ".ShowBackup")
-
def get_parser(self, prog_name):
parser = super(ShowBackup, self).get_parser(prog_name)
parser.add_argument(
@@ -193,7 +176,6 @@ class ShowBackup(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action: (%s)", parsed_args)
volume_client = self.app.client_manager.volume
backup = utils.find_resource(volume_client.backups,
parsed_args.backup)
diff --git a/openstackclient/volume/v2/qos_specs.py b/openstackclient/volume/v2/qos_specs.py
index 678fde4f..961cc27e 100644
--- a/openstackclient/volume/v2/qos_specs.py
+++ b/openstackclient/volume/v2/qos_specs.py
@@ -15,13 +15,9 @@
"""Volume v2 QoS action implementations"""
-import logging
import six
-from cliff import command
-from cliff import lister
-from cliff import show
-
+from openstackclient.common import command
from openstackclient.common import parseractions
from openstackclient.common import utils
@@ -29,8 +25,6 @@ from openstackclient.common import utils
class AssociateQos(command.Command):
"""Associate a QoS specification to a volume type"""
- log = logging.getLogger(__name__ + '.AssociateQos')
-
def get_parser(self, prog_name):
parser = super(AssociateQos, self).get_parser(prog_name)
parser.add_argument(
@@ -45,7 +39,6 @@ class AssociateQos(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
qos_spec = utils.find_resource(volume_client.qos_specs,
@@ -56,11 +49,9 @@ class AssociateQos(command.Command):
volume_client.qos_specs.associate(qos_spec.id, volume_type.id)
-class CreateQos(show.ShowOne):
+class CreateQos(command.ShowOne):
"""Create new QoS specification"""
- log = logging.getLogger(__name__ + '.CreateQos')
-
def get_parser(self, prog_name):
parser = super(CreateQos, self).get_parser(prog_name)
parser.add_argument(
@@ -86,7 +77,6 @@ class CreateQos(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
specs = {}
@@ -103,8 +93,6 @@ class CreateQos(show.ShowOne):
class DeleteQos(command.Command):
"""Delete QoS specification"""
- log = logging.getLogger(__name__ + '.DeleteQos')
-
def get_parser(self, prog_name):
parser = super(DeleteQos, self).get_parser(prog_name)
parser.add_argument(
@@ -115,7 +103,6 @@ class DeleteQos(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
for qos in parsed_args.qos_specs:
@@ -126,8 +113,6 @@ class DeleteQos(command.Command):
class DisassociateQos(command.Command):
"""Disassociate a QoS specification from a volume type"""
- log = logging.getLogger(__name__ + '.DisassociateQos')
-
def get_parser(self, prog_name):
parser = super(DisassociateQos, self).get_parser(prog_name)
parser.add_argument(
@@ -150,7 +135,6 @@ class DisassociateQos(command.Command):
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
qos_spec = utils.find_resource(volume_client.qos_specs,
@@ -164,12 +148,9 @@ class DisassociateQos(command.Command):
volume_client.qos_specs.disassociate_all(qos_spec.id)
-class ListQos(lister.Lister):
+class ListQos(command.Lister):
"""List QoS specifications"""
- log = logging.getLogger(__name__ + '.ListQos')
-
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
qos_specs_list = volume_client.qos_specs.list()
@@ -195,8 +176,6 @@ class ListQos(lister.Lister):
class SetQos(command.Command):
"""Set QoS specification properties"""
- log = logging.getLogger(__name__ + '.SetQos')
-
def get_parser(self, prog_name):
parser = super(SetQos, self).get_parser(prog_name)
parser.add_argument(
@@ -213,7 +192,6 @@ class SetQos(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
qos_spec = utils.find_resource(volume_client.qos_specs,
@@ -226,11 +204,9 @@ class SetQos(command.Command):
self.app.log.error("No changes requested\n")
-class ShowQos(show.ShowOne):
+class ShowQos(command.ShowOne):
"""Display QoS specification details"""
- log = logging.getLogger(__name__ + '.ShowQos')
-
def get_parser(self, prog_name):
parser = super(ShowQos, self).get_parser(prog_name)
parser.add_argument(
@@ -240,7 +216,6 @@ class ShowQos(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
qos_spec = utils.find_resource(volume_client.qos_specs,
@@ -261,8 +236,6 @@ class ShowQos(show.ShowOne):
class UnsetQos(command.Command):
"""Unset QoS specification properties"""
- log = logging.getLogger(__name__ + '.SetQos')
-
def get_parser(self, prog_name):
parser = super(UnsetQos, self).get_parser(prog_name)
parser.add_argument(
@@ -280,7 +253,6 @@ class UnsetQos(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
qos_spec = utils.find_resource(volume_client.qos_specs,
diff --git a/openstackclient/volume/v2/snapshot.py b/openstackclient/volume/v2/snapshot.py
index f939a553..4d00b726 100644
--- a/openstackclient/volume/v2/snapshot.py
+++ b/openstackclient/volume/v2/snapshot.py
@@ -15,22 +15,17 @@
"""Volume v2 snapshot action implementations"""
import copy
-import logging
-from cliff import command
-from cliff import lister
-from cliff import show
import six
+from openstackclient.common import command
from openstackclient.common import parseractions
from openstackclient.common import utils
-class CreateSnapshot(show.ShowOne):
+class CreateSnapshot(command.ShowOne):
"""Create new snapshot"""
- log = logging.getLogger(__name__ + ".CreateSnapshot")
-
def get_parser(self, prog_name):
parser = super(CreateSnapshot, self).get_parser(prog_name)
parser.add_argument(
@@ -59,7 +54,6 @@ class CreateSnapshot(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action: (%s)", parsed_args)
volume_client = self.app.client_manager.volume
volume_id = utils.find_resource(
volume_client.volumes, parsed_args.volume).id
@@ -78,8 +72,6 @@ class CreateSnapshot(show.ShowOne):
class DeleteSnapshot(command.Command):
"""Delete volume snapshot(s)"""
- log = logging.getLogger(__name__ + ".DeleteSnapshot")
-
def get_parser(self, prog_name):
parser = super(DeleteSnapshot, self).get_parser(prog_name)
parser.add_argument(
@@ -91,7 +83,6 @@ class DeleteSnapshot(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action: (%s)", parsed_args)
volume_client = self.app.client_manager.volume
for snapshot in parsed_args.snapshots:
snapshot_id = utils.find_resource(
@@ -99,11 +90,9 @@ class DeleteSnapshot(command.Command):
volume_client.volume_snapshots.delete(snapshot_id)
-class ListSnapshot(lister.Lister):
+class ListSnapshot(command.Lister):
"""List snapshots"""
- log = logging.getLogger(__name__ + ".ListSnapshot")
-
def get_parser(self, prog_name):
parser = super(ListSnapshot, self).get_parser(prog_name)
parser.add_argument(
@@ -121,7 +110,6 @@ class ListSnapshot(lister.Lister):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action: (%s)", parsed_args)
def _format_volume_id(volume_id):
"""Return a volume name if available
@@ -171,8 +159,6 @@ class ListSnapshot(lister.Lister):
class SetSnapshot(command.Command):
"""Set snapshot properties"""
- log = logging.getLogger(__name__ + '.SetSnapshot')
-
def get_parser(self, prog_name):
parser = super(SetSnapshot, self).get_parser(prog_name)
parser.add_argument(
@@ -196,7 +182,6 @@ class SetSnapshot(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
snapshot = utils.find_resource(volume_client.volume_snapshots,
@@ -218,11 +203,9 @@ class SetSnapshot(command.Command):
volume_client.volume_snapshots.update(snapshot.id, **kwargs)
-class ShowSnapshot(show.ShowOne):
+class ShowSnapshot(command.ShowOne):
"""Display snapshot details"""
- log = logging.getLogger(__name__ + ".ShowSnapshot")
-
def get_parser(self, prog_name):
parser = super(ShowSnapshot, self).get_parser(prog_name)
parser.add_argument(
@@ -233,7 +216,6 @@ class ShowSnapshot(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action: (%s)", parsed_args)
volume_client = self.app.client_manager.volume
snapshot = utils.find_resource(
volume_client.volume_snapshots, parsed_args.snapshot)
@@ -246,8 +228,6 @@ class ShowSnapshot(show.ShowOne):
class UnsetSnapshot(command.Command):
"""Unset snapshot properties"""
- log = logging.getLogger(__name__ + '.UnsetSnapshot')
-
def get_parser(self, prog_name):
parser = super(UnsetSnapshot, self).get_parser(prog_name)
parser.add_argument(
@@ -265,7 +245,6 @@ class UnsetSnapshot(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
snapshot = utils.find_resource(
diff --git a/openstackclient/volume/v2/volume.py b/openstackclient/volume/v2/volume.py
index c636cf2f..436ec689 100644
--- a/openstackclient/volume/v2/volume.py
+++ b/openstackclient/volume/v2/volume.py
@@ -15,23 +15,18 @@
"""Volume V2 Volume action implementations"""
import copy
-import logging
-from cliff import command
-from cliff import lister
-from cliff import show
import six
+from openstackclient.common import command
from openstackclient.common import parseractions
from openstackclient.common import utils
from openstackclient.identity import common as identity_common
-class CreateVolume(show.ShowOne):
+class CreateVolume(command.ShowOne):
"""Create new volume"""
- log = logging.getLogger(__name__ + ".CreateVolume")
-
def get_parser(self, prog_name):
parser = super(CreateVolume, self).get_parser(prog_name)
parser.add_argument(
@@ -96,8 +91,6 @@ class CreateVolume(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action: (%s)", parsed_args)
-
identity_client = self.app.client_manager.identity
volume_client = self.app.client_manager.volume
image_client = self.app.client_manager.image
@@ -159,8 +152,6 @@ class CreateVolume(show.ShowOne):
class DeleteVolume(command.Command):
"""Delete volume(s)"""
- log = logging.getLogger(__name__ + ".DeleteVolume")
-
def get_parser(self, prog_name):
parser = super(DeleteVolume, self).get_parser(prog_name)
parser.add_argument(
@@ -180,7 +171,6 @@ class DeleteVolume(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action: (%s)", parsed_args)
volume_client = self.app.client_manager.volume
for volume in parsed_args.volumes:
volume_obj = utils.find_resource(
@@ -191,11 +181,9 @@ class DeleteVolume(command.Command):
volume_client.volumes.delete(volume_obj.id)
-class ListVolume(lister.Lister):
+class ListVolume(command.Lister):
"""List volumes"""
- log = logging.getLogger(__name__ + '.ListVolume')
-
def get_parser(self, prog_name):
parser = super(ListVolume, self).get_parser(prog_name)
parser.add_argument(
@@ -234,7 +222,6 @@ class ListVolume(lister.Lister):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
@@ -328,8 +315,6 @@ class ListVolume(lister.Lister):
class SetVolume(command.Command):
"""Set volume properties"""
- log = logging.getLogger(__name__ + '.SetVolume')
-
def get_parser(self, prog_name):
parser = super(SetVolume, self).get_parser(prog_name)
parser.add_argument(
@@ -362,7 +347,6 @@ class SetVolume(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
volume = utils.find_resource(volume_client.volumes, parsed_args.volume)
@@ -394,11 +378,9 @@ class SetVolume(command.Command):
self.app.log.error("No changes requested\n")
-class ShowVolume(show.ShowOne):
+class ShowVolume(command.ShowOne):
"""Display volume details"""
- log = logging.getLogger(__name__ + '.ShowVolume')
-
def get_parser(self, prog_name):
parser = super(ShowVolume, self).get_parser(prog_name)
parser.add_argument(
@@ -408,7 +390,6 @@ class ShowVolume(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
volume = utils.find_resource(volume_client.volumes, parsed_args.volume)
@@ -421,8 +402,6 @@ class ShowVolume(show.ShowOne):
class UnsetVolume(command.Command):
"""Unset volume properties"""
- log = logging.getLogger(__name__ + '.UnsetVolume')
-
def get_parser(self, prog_name):
parser = super(UnsetVolume, self).get_parser(prog_name)
parser.add_argument(
@@ -441,7 +420,6 @@ class UnsetVolume(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
volume = utils.find_resource(
diff --git a/openstackclient/volume/v2/volume_type.py b/openstackclient/volume/v2/volume_type.py
index 06ab8f82..d2b3ed6a 100644
--- a/openstackclient/volume/v2/volume_type.py
+++ b/openstackclient/volume/v2/volume_type.py
@@ -14,22 +14,16 @@
"""Volume v2 Type action implementations"""
-import logging
-
-from cliff import command
-from cliff import lister
-from cliff import show
import six
+from openstackclient.common import command
from openstackclient.common import parseractions
from openstackclient.common import utils
-class CreateVolumeType(show.ShowOne):
+class CreateVolumeType(command.ShowOne):
"""Create new volume type"""
- log = logging.getLogger(__name__ + ".CreateVolumeType")
-
def get_parser(self, prog_name):
parser = super(CreateVolumeType, self).get_parser(prog_name)
parser.add_argument(
@@ -66,7 +60,6 @@ class CreateVolumeType(show.ShowOne):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
@@ -93,8 +86,6 @@ class CreateVolumeType(show.ShowOne):
class DeleteVolumeType(command.Command):
"""Delete volume type"""
- log = logging.getLogger(__name__ + ".DeleteVolumeType")
-
def get_parser(self, prog_name):
parser = super(DeleteVolumeType, self).get_parser(prog_name)
parser.add_argument(
@@ -105,18 +96,15 @@ class DeleteVolumeType(command.Command):
return parser
def take_action(self, parsed_args):
- self.log.info("take_action: (%s)", parsed_args)
volume_client = self.app.client_manager.volume
volume_type = utils.find_resource(
volume_client.volume_types, parsed_args.volume_type)
volume_client.volume_types.delete(volume_type.id)
-class ListVolumeType(lister.Lister):
+class ListVolumeType(command.Lister):
"""List volume types"""
- log = logging.getLogger(__name__ + '.ListVolumeType')
-
def get_parser(self, prog_name):
parser = super(ListVolumeType, self).get_parser(prog_name)
parser.add_argument(
@@ -126,7 +114,6 @@ class ListVolumeType(lister.Lister):
help='List additional fields in output')
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
if parsed_args.long:
columns = ['ID', 'Name', 'Description', 'Extra Specs']
@@ -145,8 +132,6 @@ class ListVolumeType(lister.Lister):
class SetVolumeType(command.Command):
"""Set volume type properties"""
- log = logging.getLogger(__name__ + '.SetVolumeType')
-
def get_parser(self, prog_name):
parser = super(SetVolumeType, self).get_parser(prog_name)
parser.add_argument(
@@ -173,7 +158,6 @@ class SetVolumeType(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
volume_type = utils.find_resource(
@@ -201,11 +185,9 @@ class SetVolumeType(command.Command):
volume_type.set_keys(parsed_args.property)
-class ShowVolumeType(show.ShowOne):
+class ShowVolumeType(command.ShowOne):
"""Display volume type details"""
- log = logging.getLogger(__name__ + ".ShowVolumeType")
-
def get_parser(self, prog_name):
parser = super(ShowVolumeType, self).get_parser(prog_name)
parser.add_argument(
@@ -216,7 +198,6 @@ class ShowVolumeType(show.ShowOne):
return parser
def take_action(self, parsed_args):
- self.log.debug("take_action: (%s)", parsed_args)
volume_client = self.app.client_manager.volume
volume_type = utils.find_resource(
volume_client.volume_types, parsed_args.volume_type)
@@ -228,8 +209,6 @@ class ShowVolumeType(show.ShowOne):
class UnsetVolumeType(command.Command):
"""Unset volume type properties"""
- log = logging.getLogger(__name__ + '.UnsetVolumeType')
-
def get_parser(self, prog_name):
parser = super(UnsetVolumeType, self).get_parser(prog_name)
parser.add_argument(
@@ -247,7 +226,6 @@ class UnsetVolumeType(command.Command):
)
return parser
- @utils.log_method(log)
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
volume_type = utils.find_resource(