def take_action(self, parsed_args): share_client = self.app.client_manager.share identity_client = self.app.client_manager.identity # TODO(gouthamr): Add support for ~name, ~description # export_location filtering if parsed_args.long: columns = SHARE_ATTRIBUTES column_headers = SHARE_ATTRIBUTES_HEADERS else: columns = [ 'id', 'name', 'size', 'share_proto', 'status', 'is_public', 'share_type_name', 'host', 'availability_zone' ] column_headers = [ 'ID', 'Name', 'Size', 'Share Proto', 'Status', 'Is Public', 'Share Type Name', 'Host', 'Availability Zone' ] project_id = None if parsed_args.project: project_id = identity_common.find_project( identity_client, parsed_args.project, parsed_args.project_domain).id user_id = None if parsed_args.user: user_id = identity_common.find_user(identity_client, parsed_args.user, parsed_args.user_domain).id # set value of 'all_tenants' when using project option all_tenants = bool(parsed_args.project) or parsed_args.all_projects share_type_id = None if parsed_args.share_type: share_type_id = apiutils.find_resource(share_client.share_types, parsed_args.share_type).id snapshot_id = None if parsed_args.snapshot: snapshot_id = apiutils.find_resource(share_client.share_snapshots, parsed_args.snapshot).id share_network_id = None if parsed_args.share_network: share_network_id = apiutils.find_resource( share_client.share_networks, parsed_args.share_network).id share_group_id = None if parsed_args.share_group: share_group_id = apiutils.find_resource(share_client.share_groups, parsed_args.share_group).id share_server_id = None if parsed_args.share_server: share_server_id = apiutils.find_resource( share_client.share_servers, parsed_args.share_server).id search_opts = { 'all_tenants': all_tenants, 'is_public': parsed_args.public, 'metadata': utils.extract_key_value_options(parsed_args.property), 'extra_specs': utils.extract_key_value_options(parsed_args.extra_spec), 'limit': parsed_args.limit, 'name': parsed_args.name, 'status': parsed_args.status, 'host': parsed_args.host, 'share_server_id': share_server_id, 'share_network_id': share_network_id, 'share_type_id': share_type_id, 'snapshot_id': snapshot_id, 'share_group_id': share_group_id, 'project_id': project_id, 'user_id': user_id, 'offset': parsed_args.marker, } # NOTE(vkmc) We implemented sorting and filtering in manilaclient # but we will use the one provided by osc data = share_client.shares.list(search_opts=search_opts) data = oscutils.sort_items(data, parsed_args.sort, str) return (column_headers, (oscutils.get_item_properties( s, columns, formatters={'Metadata': oscutils.format_dict}, ) for s in data))
def take_action(self, parsed_args): # TODO(s0ru): the table shows 'Field', 'Value' share_client = self.app.client_manager.share share_type = None if parsed_args.share_type: share_type = apiutils.find_resource(share_client.share_types, parsed_args.share_type).id share_network = None if parsed_args.share_network: share_network = apiutils.find_resource( share_client.share_networks, parsed_args.share_network).id share_group = None if parsed_args.share_group: share_group = apiutils.find_resource(share_client.share_groups, parsed_args.share_group).id size = parsed_args.size snapshot_id = None if parsed_args.snapshot_id: snapshot = apiutils.find_resource(share_client.share_snapshots, parsed_args.snapshot_id) snapshot_id = snapshot.id size = max(size or 0, snapshot.size) scheduler_hints = {} if parsed_args.scheduler_hint: if share_client.api_version < api_versions.APIVersion('2.65'): raise exceptions.CommandError( 'Setting share scheduler hints for a share is ' 'available only for API microversion >= 2.65') else: scheduler_hints = utils.extract_key_value_options( parsed_args.scheduler_hint) same_host_hint_shares = scheduler_hints.get('same_host') different_host_hint_shares = scheduler_hints.get( 'different_host') if same_host_hint_shares: same_host_hint_shares = [ apiutils.find_resource(share_client.shares, sh).id for sh in same_host_hint_shares.split(',') ] scheduler_hints['same_host'] = ( ','.join(same_host_hint_shares)) if different_host_hint_shares: different_host_hint_shares = [ apiutils.find_resource(share_client.shares, sh).id for sh in different_host_hint_shares.split(',') ] scheduler_hints['different_host'] = ( ','.join(different_host_hint_shares)) body = { 'share_proto': parsed_args.share_proto, 'size': size, 'snapshot_id': snapshot_id, 'name': parsed_args.name, 'description': parsed_args.description, 'metadata': parsed_args.property, 'share_network': share_network, 'share_type': share_type, 'is_public': parsed_args.public, 'availability_zone': parsed_args.availability_zone, 'share_group_id': share_group, 'scheduler_hints': scheduler_hints } share = share_client.shares.create(**body) if parsed_args.wait: if not oscutils.wait_for_status(status_f=share_client.shares.get, res_id=share.id, success_status=['available']): LOG.error(_("ERROR: Share is in error state.")) share = apiutils.find_resource(share_client.shares, share.id) printable_share = share._info printable_share.pop('links', None) printable_share.pop('shares_type', None) return self.dict2columns(printable_share)