Files
python-openstackclient/openstackclient/api/volume_v2.py
Stephen Finucane 504cbd24e2 volume: Migrate 'volume create' to SDK
We need a shim for consistency group support, which we may eventually
port to SDK but have not yet. Otherwise, this is rather straightforward.

Change-Id: Ic880b7a64cde2148c266d549c4768c669ba3f501
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
Depends-on: https://review.opendev.org/c/openstack/openstacksdk/+/943800
2025-07-17 16:41:46 +01:00

61 lines
2.1 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.
"""Volume v2 API Library
A collection of wrappers for deprecated Block Storage v2 APIs that are not
intentionally supported by SDK.
"""
import http
from openstack import exceptions as sdk_exceptions
from osc_lib import exceptions
# consistency groups
def find_consistency_group(compute_client, name_or_id):
"""Find the consistency group for a given name or ID
https://docs.openstack.org/api-ref/block-storage/v3/#show-a-consistency-group-s-details
:param volume_client: A volume client
:param name_or_id: The name or ID of the consistency group to look up
:returns: A consistency group object
:raises exception.NotFound: If a matching consistency group could not be
found or more than one match was found
"""
response = compute_client.get(f'/consistencygroups/{name_or_id}')
if response.status_code != http.HTTPStatus.NOT_FOUND:
# there might be other, non-404 errors
sdk_exceptions.raise_from_response(response)
return response.json()['consistencygroup']
response = compute_client.get('/consistencygroups')
sdk_exceptions.raise_from_response(response)
found = None
consistency_groups = response.json()['consistencygroups']
for consistency_group in consistency_groups:
if consistency_group['name'] == name_or_id:
if found:
raise exceptions.NotFound(
f'multiple matches found for {name_or_id}'
)
found = consistency_group
if not found:
raise exceptions.NotFound(f'{name_or_id} not found')
return found