# Copyright 2020, Red Hat Inc. # # 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 Server action implementations""" from novaclient import api_versions from osc_lib.command import command from osc_lib import utils from openstackclient.i18n import _ class ListServerVolume(command.Lister): """List all the volumes attached to a server.""" def get_parser(self, prog_name): parser = super().get_parser(prog_name) parser.add_argument( 'server', help=_('Server to list volume attachments for (name or ID)'), ) return parser def take_action(self, parsed_args): compute_client = self.app.client_manager.compute server = utils.find_resource( compute_client.servers, parsed_args.server, ) volumes = compute_client.volumes.get_server_volumes(server.id) columns = ( 'id', 'device', 'serverId', 'volumeId', ) column_headers = ( 'ID', 'Device', 'Server ID', 'Volume ID', ) if compute_client.api_version >= api_versions.APIVersion('2.70'): columns += ('tag',) column_headers += ('Tag',) if compute_client.api_version >= api_versions.APIVersion('2.79'): columns += ('delete_on_termination',) column_headers += ('Delete On Termination?',) return ( column_headers, ( utils.get_item_properties( s, columns, mixed_case_fields=('serverId', 'volumeId') ) for s in volumes ), )