python-openstackclient/openstackclient/volume/v3/block_storage_cleanup.py
Stephen Finucane 35ba1d8f13 Blacken openstackclient.volume
Black used with the '-l 79 -S' flags.

A future change will ignore this commit in git-blame history by adding a
'git-blame-ignore-revs' file.

Change-Id: Ic318617c67ab7ce6527f9016b759a1d4b0b80802
Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
2023-05-10 10:51:30 +01:00

154 lines
4.8 KiB
Python

# 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.
from cinderclient import api_versions
from osc_lib.command import command
from osc_lib import exceptions
from openstackclient.i18n import _
def _format_cleanup_response(cleaning, unavailable):
column_headers = (
'ID',
'Cluster Name',
'Host',
'Binary',
'Status',
)
combined_data = []
for obj in cleaning:
details = (obj.id, obj.cluster_name, obj.host, obj.binary, 'Cleaning')
combined_data.append(details)
for obj in unavailable:
details = (
obj.id,
obj.cluster_name,
obj.host,
obj.binary,
'Unavailable',
)
combined_data.append(details)
return (column_headers, combined_data)
class BlockStorageCleanup(command.Lister):
"""Do block storage cleanup.
This command requires ``--os-volume-api-version`` 3.24 or greater.
"""
def get_parser(self, prog_name):
parser = super().get_parser(prog_name)
parser.add_argument(
'--cluster',
metavar='<cluster>',
help=_(
'Name of block storage cluster in which cleanup needs '
'to be performed (name only)'
),
)
parser.add_argument(
"--host",
metavar="<host>",
default=None,
help=_("Host where the service resides. (name only)"),
)
parser.add_argument(
'--binary',
metavar='<binary>',
default=None,
help=_("Name of the service binary."),
)
service_up_parser = parser.add_mutually_exclusive_group()
service_up_parser.add_argument(
'--up',
dest='is_up',
action='store_true',
default=None,
help=_(
'Filter by up status. If this is set, services need to be up.'
),
)
service_up_parser.add_argument(
'--down',
dest='is_up',
action='store_false',
help=_(
'Filter by down status. If this is set, services need to be '
'down.'
),
)
service_disabled_parser = parser.add_mutually_exclusive_group()
service_disabled_parser.add_argument(
'--disabled',
dest='disabled',
action='store_true',
default=None,
help=_('Filter by disabled status.'),
)
service_disabled_parser.add_argument(
'--enabled',
dest='disabled',
action='store_false',
help=_('Filter by enabled status.'),
)
parser.add_argument(
'--resource-id',
metavar='<resource-id>',
default=None,
help=_('UUID of a resource to cleanup.'),
)
parser.add_argument(
'--resource-type',
metavar='<Volume|Snapshot>',
choices=('Volume', 'Snapshot'),
help=_('Type of resource to cleanup.'),
)
parser.add_argument(
'--service-id',
type=int,
default=None,
help=_(
'The service ID field from the DB, not the UUID of the '
'service.'
),
)
return parser
def take_action(self, parsed_args):
volume_client = self.app.client_manager.volume
if volume_client.api_version < api_versions.APIVersion('3.24'):
msg = _(
"--os-volume-api-version 3.24 or greater is required to "
"support the 'block storage cleanup' command"
)
raise exceptions.CommandError(msg)
filters = {
'cluster_name': parsed_args.cluster,
'host': parsed_args.host,
'binary': parsed_args.binary,
'is_up': parsed_args.is_up,
'disabled': parsed_args.disabled,
'resource_id': parsed_args.resource_id,
'resource_type': parsed_args.resource_type,
'service_id': parsed_args.service_id,
}
filters = {k: v for k, v in filters.items() if v is not None}
cleaning, unavailable = volume_client.workers.clean(**filters)
return _format_cleanup_response(cleaning, unavailable)