File: volume_v2.py

package info (click to toggle)
python-openstackclient 8.2.0-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 10,960 kB
  • sloc: python: 132,001; makefile: 140; sh: 22
file content (60 lines) | stat: -rw-r--r-- 2,165 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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