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
This commit is contained in:
@@ -64,7 +64,7 @@ def list_security_groups(compute_client, all_projects=None):
|
||||
|
||||
|
||||
def find_security_group(compute_client, name_or_id):
|
||||
"""Find the name for a given security group name or ID
|
||||
"""Find the security group for a given name or ID
|
||||
|
||||
https://docs.openstack.org/api-ref/compute/#show-security-group-details
|
||||
|
||||
@@ -240,7 +240,7 @@ def list_networks(compute_client):
|
||||
|
||||
|
||||
def find_network(compute_client, name_or_id):
|
||||
"""Find the ID for a given network name or ID
|
||||
"""Find the network for a given name or ID
|
||||
|
||||
https://docs.openstack.org/api-ref/compute/#show-network-details
|
||||
|
||||
|
||||
60
openstackclient/api/volume_v2.py
Normal file
60
openstackclient/api/volume_v2.py
Normal file
@@ -0,0 +1,60 @@
|
||||
# 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
|
||||
60
openstackclient/api/volume_v3.py
Normal file
60
openstackclient/api/volume_v3.py
Normal file
@@ -0,0 +1,60 @@
|
||||
# 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 v3 API Library
|
||||
|
||||
A collection of wrappers for deprecated Block Storage v3 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
|
||||
Reference in New Issue
Block a user