230 lines
10 KiB
Python
230 lines
10 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 import _log
|
|
from openstack.baremetal.v1 import node as _node
|
|
from openstack.baremetal_introspection.v1 import introspection as _introspect
|
|
from openstack.baremetal_introspection.v1 import (
|
|
introspection_rule as _introspection_rule,
|
|
)
|
|
from openstack import exceptions
|
|
from openstack import proxy
|
|
|
|
|
|
_logger = _log.setup_logging('openstack')
|
|
|
|
|
|
class Proxy(proxy.Proxy):
|
|
_resource_registry = {
|
|
"introspection": _introspect.Introspection,
|
|
"introspection_rule": _introspection_rule.IntrospectionRule,
|
|
}
|
|
|
|
def introspections(self, **query):
|
|
"""Retrieve a generator of introspection records.
|
|
|
|
:param dict query: Optional query parameters to be sent to restrict
|
|
the records to be returned. Available parameters include:
|
|
|
|
* ``fields``: A list containing one or more fields to be returned
|
|
in the response. This may lead to some performance gain
|
|
because other fields of the resource are not refreshed.
|
|
* ``limit``: Requests at most the specified number of items be
|
|
returned from the query.
|
|
* ``marker``: Specifies the ID of the last-seen introspection. Use
|
|
the ``limit`` parameter to make an initial limited request and
|
|
use the ID of the last-seen introspection from the response as
|
|
the ``marker`` value in a subsequent limited request.
|
|
* ``sort_dir``: Sorts the response by the requested sort direction.
|
|
A valid value is ``asc`` (ascending) or ``desc``
|
|
(descending). Default is ``asc``. You can specify multiple
|
|
pairs of sort key and sort direction query parameters. If
|
|
you omit the sort direction in a pair, the API uses the
|
|
natural sorting direction of the server attribute that is
|
|
provided as the ``sort_key``.
|
|
* ``sort_key``: Sorts the response by the this attribute value.
|
|
Default is ``id``. You can specify multiple pairs of sort
|
|
key and sort direction query parameters. If you omit the
|
|
sort direction in a pair, the API uses the natural sorting
|
|
direction of the server attribute that is provided as the
|
|
``sort_key``.
|
|
|
|
:returns: A generator of :class:`~.introspection.Introspection`
|
|
objects
|
|
"""
|
|
return _introspect.Introspection.list(self, **query)
|
|
|
|
def start_introspection(self, node, manage_boot=None):
|
|
"""Create a new introspection from attributes.
|
|
|
|
:param node: The value can be either the name or ID of a node or
|
|
a :class:`~openstack.baremetal.v1.node.Node` instance.
|
|
:param bool manage_boot: Whether to manage boot parameters for the
|
|
node. Defaults to the server default (which is `True`).
|
|
|
|
:returns: :class:`~.introspection.Introspection` instance.
|
|
"""
|
|
node = self._get_resource(_node.Node, node)
|
|
res = _introspect.Introspection.new(
|
|
connection=self._get_connection(), id=node.id
|
|
)
|
|
kwargs = {}
|
|
if manage_boot is not None:
|
|
kwargs['manage_boot'] = manage_boot
|
|
return res.create(self, **kwargs)
|
|
|
|
def get_introspection(self, introspection):
|
|
"""Get a specific introspection.
|
|
|
|
:param introspection: The value can be the name or ID of an
|
|
introspection (matching bare metal node name or ID) or
|
|
an :class:`~.introspection.Introspection` instance.
|
|
:returns: :class:`~.introspection.Introspection` instance.
|
|
:raises: :class:`~openstack.exceptions.ResourceNotFound` when no
|
|
introspection matching the name or ID could be found.
|
|
"""
|
|
return self._get(_introspect.Introspection, introspection)
|
|
|
|
def get_introspection_data(self, introspection, processed=True):
|
|
"""Get introspection data.
|
|
|
|
:param introspection: The value can be the name or ID of an
|
|
introspection (matching bare metal node name or ID) or
|
|
an :class:`~.introspection.Introspection` instance.
|
|
:param processed: Whether to fetch the final processed data (the
|
|
default) or the raw unprocessed data as received from the ramdisk.
|
|
:returns: introspection data from the most recent successful run.
|
|
:rtype: dict
|
|
"""
|
|
res = self._get_resource(_introspect.Introspection, introspection)
|
|
return res.get_data(self, processed=processed)
|
|
|
|
def abort_introspection(self, introspection, ignore_missing=True):
|
|
"""Abort an introspection.
|
|
|
|
Note that the introspection is not aborted immediately, you may use
|
|
`wait_for_introspection` with `ignore_error=True`.
|
|
|
|
:param introspection: The value can be the name or ID of an
|
|
introspection (matching bare metal node name or ID) or
|
|
an :class:`~.introspection.Introspection` instance.
|
|
:param bool ignore_missing: When set to ``False``, an exception
|
|
:class:`~openstack.exceptions.ResourceNotFound` will be raised
|
|
when the introspection could not be found. When set to ``True``, no
|
|
exception will be raised when attempting to abort a non-existent
|
|
introspection.
|
|
:returns: nothing
|
|
"""
|
|
res = self._get_resource(_introspect.Introspection, introspection)
|
|
try:
|
|
res.abort(self)
|
|
except exceptions.ResourceNotFound:
|
|
if not ignore_missing:
|
|
raise
|
|
|
|
def wait_for_introspection(
|
|
self,
|
|
introspection,
|
|
timeout=None,
|
|
ignore_error=False,
|
|
):
|
|
"""Wait for the introspection to finish.
|
|
|
|
:param introspection: The value can be the name or ID of an
|
|
introspection (matching bare metal node name or ID) or
|
|
an :class:`~.introspection.Introspection` instance.
|
|
:param timeout: How much (in seconds) to wait for the introspection.
|
|
The value of ``None`` (the default) means no client-side timeout.
|
|
:param ignore_error: If ``True``, this call will raise an exception
|
|
if the introspection reaches the ``error`` state. Otherwise the
|
|
error state is considered successful and the call returns.
|
|
:returns: :class:`~.introspection.Introspection` instance.
|
|
:raises: :class:`~openstack.exceptions.ResourceFailure` if
|
|
introspection fails and ``ignore_error`` is ``False``.
|
|
:raises: :class:`~openstack.exceptions.ResourceTimeout` on timeout.
|
|
"""
|
|
res = self._get_resource(_introspect.Introspection, introspection)
|
|
return res.wait(self, timeout=timeout, ignore_error=ignore_error)
|
|
|
|
def create_introspection_rule(self, **attrs):
|
|
"""Create a new introspection rules from attributes.
|
|
|
|
:param dict attrs: Keyword arguments which will be used to create
|
|
a :class:`~.introspection_rule.IntrospectionRule`,
|
|
comprised of the properties on the IntrospectionRule class.
|
|
|
|
:returns: :class:`~.introspection_rule.IntrospectionRule` instance.
|
|
"""
|
|
return self._create(_introspection_rule.IntrospectionRule, **attrs)
|
|
|
|
def delete_introspection_rule(
|
|
self,
|
|
introspection_rule,
|
|
ignore_missing=True,
|
|
):
|
|
"""Delete an introspection rule.
|
|
|
|
:param introspection_rule: The value can be either the ID of an
|
|
introspection rule or a
|
|
:class:`~.introspection_rule.IntrospectionRule` instance.
|
|
:param bool ignore_missing: When set to ``False``, an
|
|
exception:class:`~openstack.exceptions.ResourceNotFound` will be
|
|
raised when the introspection rule could not be found. When set to
|
|
``True``, no exception will be raised when attempting to delete a
|
|
non-existent introspection rule.
|
|
|
|
:returns: ``None``
|
|
"""
|
|
self._delete(
|
|
_introspection_rule.IntrospectionRule,
|
|
introspection_rule,
|
|
ignore_missing=ignore_missing,
|
|
)
|
|
|
|
def get_introspection_rule(self, introspection_rule):
|
|
"""Get a specific introspection rule.
|
|
|
|
:param introspection_rule: The value can be the name or ID of an
|
|
introspection rule or a
|
|
:class:`~.introspection_rule.IntrospectionRule` instance.
|
|
|
|
:returns: :class:`~.introspection_rule.IntrospectionRule` instance.
|
|
:raises: :class:`~openstack.exceptions.ResourceNotFound` when no
|
|
introspection rule matching the name or ID could be found.
|
|
"""
|
|
return self._get(
|
|
_introspection_rule.IntrospectionRule,
|
|
introspection_rule,
|
|
)
|
|
|
|
def introspection_rules(self, **query):
|
|
"""Retrieve a generator of introspection rules.
|
|
|
|
:param dict query: Optional query parameters to be sent to restrict
|
|
the records to be returned. Available parameters include:
|
|
|
|
* ``uuid``: The UUID of the Ironic Inspector rule.
|
|
* ``limit``: List of a logic statementd or operations in rules,
|
|
that can be evaluated as True or False.
|
|
* ``actions``: List of operations that will be performed
|
|
if conditions of this rule are fulfilled.
|
|
* ``description``: Rule human-readable description.
|
|
* ``scope``: Scope of an introspection rule. If set, the rule
|
|
is only applied to nodes that have
|
|
matching inspection_scope property.
|
|
|
|
:returns: A generator of
|
|
:class:`~.introspection_rule.IntrospectionRule`
|
|
objects
|
|
"""
|
|
return self._list(_introspection_rule.IntrospectionRule, **query)
|