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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
# 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.
from openstack.baremetal.v1 import _common
from openstack import exceptions
from openstack import resource
from openstack import utils
class Allocation(_common.Resource):
resources_key = 'allocations'
base_path = '/allocations'
# capabilities
allow_create = True
allow_fetch = True
allow_commit = True
allow_delete = True
allow_list = True
allow_patch = True
commit_method = 'PATCH'
commit_jsonpatch = True
_query_mapping = resource.QueryParameters(
'node',
'resource_class',
'state',
'owner',
fields={'type': _common.fields_type},
)
# Allocation update is available since 1.57
# Backfilling allocations is available since 1.58
# owner attribute is available since 1.60
_max_microversion = '1.60'
#: The candidate nodes for this allocation.
candidate_nodes = resource.Body('candidate_nodes', type=list)
#: Timestamp at which the allocation was created.
created_at = resource.Body('created_at')
#: A set of one or more arbitrary metadata key and value pairs.
extra = resource.Body('extra', type=dict)
#: The UUID for the allocation.
id = resource.Body('uuid', alternate_id=True)
#: The last error for the allocation.
last_error = resource.Body("last_error")
#: A list of relative links, including the self and bookmark links.
links = resource.Body('links', type=list)
#: The name of the allocation.
name = resource.Body('name')
#: The node UUID or name to create the allocation against,
#: bypassing the normal allocation process.
node = resource.Body('node')
#: UUID of the node this allocation belongs to.
node_id = resource.Body('node_uuid')
#: The tenant who owns the object
owner = resource.Body('owner')
#: The requested resource class.
resource_class = resource.Body('resource_class')
#: The state of the allocation.
state = resource.Body('state')
#: The requested traits.
traits = resource.Body('traits', type=list)
#: Timestamp at which the allocation was last updated.
updated_at = resource.Body('updated_at')
def wait(self, session, timeout=None, ignore_error=False):
"""Wait for the allocation to become active.
:param session: The session to use for making this request.
:type session: :class:`~keystoneauth1.adapter.Adapter`
:param timeout: How much (in seconds) to wait for the allocation.
The value of ``None`` (the default) means no client-side timeout.
:param ignore_error: If ``True``, this call will raise an exception
if the allocation reaches the ``error`` state. Otherwise the error
state is considered successful and the call returns.
:return: This :class:`Allocation` instance.
:raises: :class:`~openstack.exceptions.ResourceFailure` if allocation
fails and ``ignore_error`` is ``False``.
:raises: :class:`~openstack.exceptions.ResourceTimeout` on timeout.
"""
if self.state == 'active':
return self
for count in utils.iterate_timeout(
timeout, f"Timeout waiting for the allocation {self.id}"
):
self.fetch(session)
if self.state == 'error' and not ignore_error:
raise exceptions.ResourceFailure(
f"Allocation {self.id} failed: {self.last_error}"
)
elif self.state != 'allocating':
return self
session.log.debug(
'Still waiting for the allocation %(allocation)s '
'to become active, the current state is %(state)s',
{'allocation': self.id, 'state': self.state},
)
|