The ironic_inspector.node_cache
Module¶
Cache for nodes currently under introspection.
-
class
ironic_inspector.node_cache.
NodeInfo
(uuid, version_id=None, state=None, started_at=None, finished_at=None, error=None, node=None, ports=None, ironic=None, lock=None)[source]¶ Bases:
object
Record about a node in the cache.
This class optionally allows to acquire a lock on a node. Note that the class instance itself is NOT thread-safe, you need to create a new instance for every thread.
-
acquire_lock
(blocking=True)[source]¶ Acquire a lock on the associated node.
Exits with success if a lock is already acquired using this NodeInfo object.
Parameters: blocking – if True, wait for lock to be acquired, otherwise return immediately. Returns: boolean value, whether lock was acquired successfully
-
add_attribute
(name, value, session=None)[source]¶ Store look up attribute for a node in the database.
Parameters: - name – attribute name
- value – attribute value or list of possible values
- session – optional existing database session
-
attributes
¶ Node look up attributes as a dict.
-
create_ports
(ports, ironic=None)[source]¶ Create one or several ports for this node.
Parameters: - ports – List of ports with all their attributes e.g [{‘mac’: xx, ‘ip’: xx, ‘client_id’: None}, {‘mac’: xx, ‘ip’: None, ‘client_id’: None}] It also support the old style of list of macs. A warning is issued if port already exists on a node.
- ironic – Ironic client to use instead of self.ironic
-
delete_port
(port, ironic=None)[source]¶ Delete port.
Parameters: - port – port object or its MAC
- ironic – Ironic client to use instead of self.ironic
-
finished
(error=None)[source]¶ Record status for this node.
Also deletes look up attributes from the cache.
Parameters: error – error message
-
classmethod
from_row
(row, ironic=None, lock=None, node=None)[source]¶ Construct NodeInfo from a database row.
-
fsm_event
(event, strict=False)[source]¶ Update node_info.state based on a fsm.process_event(event) call.
An AutomatonException triggers an error event. If strict, node_info.finished(error=str(exc)) is called with the AutomatonException instance and a EventError raised.
Parameters: event – an event to process by the fsm Strict: whether to fail the introspection upon an invalid event Raises: NodeStateInvalidEvent
-
get_by_path
(path)[source]¶ Get field value by ironic-style path (e.g. /extra/foo).
Parameters: path – path to a field Returns: field value Raises: KeyError if field was not found
-
ironic
¶ Ironic client instance.
-
options
¶ Node introspection options as a dict.
-
patch
(patches, ironic=None)[source]¶ Apply JSON patches to a node.
Refreshes cached node instance.
Parameters: - patches – JSON patches to apply
- ironic – Ironic client to use instead of self.ironic
Raises: ironicclient exceptions
-
patch_port
(port, patches, ironic=None)[source]¶ Apply JSON patches to a port.
Parameters: - port – port object or its MAC
- patches – JSON patches to apply
- ironic – Ironic client to use instead of self.ironic
-
ports
(ironic=None)[source]¶ Get Ironic port objects associated with the cached node record.
This value is cached as well, use invalidate_cache() to clean.
Returns: dict MAC -> port object
-
release_lock
()[source]¶ Release a lock on a node.
Does nothing if lock was not acquired using this NodeInfo object.
-
replace_field
(path, func, **kwargs)[source]¶ Replace a field on ironic node.
Parameters: - path – path to a field as used by the ironic client
- func – function accepting an old value and returning a new one
- kwargs – if ‘default’ value is passed here, it will be used when no existing value is found.
Raises: KeyError if value is not found and default is not set
Raises: everything that patch() may raise
-
state
¶ State of the node_info object.
-
update_capabilities
(ironic=None, **caps)[source]¶ Update capabilities on a node.
Parameters: - caps – capabilities to update
- ironic – Ironic client to use instead of self.ironic
-
update_properties
(ironic=None, **props)[source]¶ Update properties on a node.
Parameters: - props – properties to update
- ironic – Ironic client to use instead of self.ironic
-
version_id
¶ Get the version id
-
-
ironic_inspector.node_cache.
active_macs
()[source]¶ List all MAC’s that are on introspection right now.
-
ironic_inspector.node_cache.
add_node
(uuid, state, **attributes)[source]¶ Store information about a node under introspection.
All existing information about this node is dropped. Empty values are skipped.
Parameters: - uuid – Ironic node UUID
- state – The initial state of the node
- attributes – attributes known about this node (like macs, BMC etc); also ironic client instance may be passed under ‘ironic’
Returns: NodeInfo
-
ironic_inspector.node_cache.
clean_up
()[source]¶ Clean up the cache.
- Finish introspection for timed out nodes.
- Drop outdated node status information.
Returns: list of timed out node UUID’s
-
ironic_inspector.node_cache.
create_node
(driver, ironic=None, **attributes)[source]¶ Create ironic node and cache it.
- Create new node in ironic.
- Cache it in inspector.
- Sets node_info state to enrolling.
Parameters: - driver – driver for Ironic node.
- ironic – ronic client instance.
- attributes – dict, additional keyword arguments to pass to the ironic client on node creation.
Returns: NodeInfo, or None in case error happened.
-
ironic_inspector.node_cache.
delete_nodes_not_in_list
(uuids)[source]¶ Delete nodes which don’t exist in Ironic node UUIDs.
Parameters: uuids – Ironic node UUIDs
-
ironic_inspector.node_cache.
find_node
(**attributes)[source]¶ Find node in cache.
Looks up a node based on attributes in a best-match fashion. This function acquires a lock on a node.
Parameters: attributes – attributes known about this node (like macs, BMC etc) also ironic client instance may be passed under ‘ironic’ Returns: structure NodeInfo with attributes uuid
andcreated_at
Raises: Error if node is not found or multiple nodes match the attributes
-
ironic_inspector.node_cache.
fsm_event_after
(event, strict=False)[source]¶ Trigger an fsm event after the function execution.
It is assumed the first function arg of the decorated function is always a NodeInfo instance.
Parameters: - event – the event to process after the function call
- strict – make an invalid fsm event trigger an error event
-
ironic_inspector.node_cache.
fsm_event_before
(event, strict=False)[source]¶ Trigger an fsm event before the function execution.
It is assumed the first function arg of the decorated function is always a NodeInfo instance.
Parameters: - event – the event to process before the function call
- strict – make an invalid fsm event trigger an error event
-
ironic_inspector.node_cache.
fsm_transition
(event, reentrant=True, **exc_kwargs)[source]¶ Decorate a function to perform a (non-)reentrant transition.
If True, reentrant transition will be performed at the end of a function call. If False, the transition will be performed before the function call. The function is decorated with the triggers_fsm_error_transition decorator as well.
Parameters: - event – the event to bind the transition to.
- reentrant – whether the transition is reentrant.
- exc_kwargs – passed on to the triggers_fsm_error_transition decorator
-
ironic_inspector.node_cache.
get_node
(node_id, ironic=None, locked=False)[source]¶ Get node from cache.
Parameters: - node_id – node UUID or name.
- ironic – optional ironic client instance
- locked – if True, get a lock on node before fetching its data
Returns: structure NodeInfo.
-
ironic_inspector.node_cache.
get_node_list
(ironic=None, marker=None, limit=None)[source]¶ Get node list from the cache.
The list of the nodes is ordered based on the (started_at, uuid) attribute pair, newer items first.
Parameters: - ironic – optional ironic client instance
- marker – pagination marker (an UUID or None)
- limit – pagination limit; None for default CONF.api_max_limit
Returns: a list of NodeInfo instances.
-
ironic_inspector.node_cache.
introspection_active
()[source]¶ Check if introspection is active for at least one node.
-
ironic_inspector.node_cache.
release_lock
(func)[source]¶ Decorate a node_info-function to release the node_info lock.
Assumes the first parameter of the function func is always a NodeInfo instance.
-
ironic_inspector.node_cache.
start_introspection
(uuid, **kwargs)[source]¶ Start the introspection of a node.
If a node_info record exists in the DB, a start transition is used rather than dropping the record in order to check for the start transition validity in particular node state.
Parameters: - uuid – Ironic node UUID
- kwargs – passed on to add_node()
Raises: NodeStateInvalidEvent in case the start transition is invalid in the current node state
Raises: NodeStateRaceCondition if a mismatch was detected between the node_info cache and the DB
Returns: NodeInfo
-
ironic_inspector.node_cache.
triggers_fsm_error_transition
(errors=(<type ‘exceptions.Exception’>, ), no_errors=(<class ‘ironic_inspector.utils.NodeStateInvalidEvent’>, <class ‘ironic_inspector.utils.NodeStateRaceCondition’>))[source]¶ Trigger an fsm error transition upon certain errors.
It is assumed the first function arg of the decorated function is always a NodeInfo instance.
Parameters: - errors – a tuple of exceptions upon which an error event is triggered. Re-raised.
- no_errors – a tuple of exceptions that won’t trigger the error event.