impuls/lib/python3.11/site-packages/openstack/baremetal/v1/allocation.py

109 lines
4.2 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.
from openstack.baremetal.v1 import _common
from openstack import exceptions
from openstack import resource
from openstack import utils
class Allocation(_common.ListMixin, resource.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',
fields={'type': _common.fields_type},
)
# Allocation update is available since 1.57
# Backfilling allocations is available since 1.58
_max_microversion = '1.58'
#: 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 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, "Timeout waiting for the allocation %s" % self.id
):
self.fetch(session)
if self.state == 'error' and not ignore_error:
raise exceptions.ResourceFailure(
"Allocation %(allocation)s failed: %(error)s"
% {'allocation': self.id, 'error': 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},
)