The diskimage_builder.block_device.plugin
Module¶
-
class
diskimage_builder.block_device.plugin.
NodeBase
(name)¶ Bases:
object
A configuration node entry
This is the main driver class for dib-block-device operation.
The final operations graph is composed of instantiations of this class. The graph undergoes a topological sort (i.e. is linearised in dependency order) and each node has
create()
called in order to perform its operations.Every node has a unique string
name
. This is its key in the graph and used for edge relationships. Implementations must ensure they initalize it; e.g.class FooNode(NodeBase): def __init__(name, arg1, ...): super(FooNode, self).__init__(name)
-
cleanup
(state)¶ Cleanup actions
Actions to taken when
dib-block-device cleanup
is called. This is the cleanup path in the success case. The nodes are called in the reverse order tocreate()
Parameters: state – the current state dictionary. This is the results dictionary from create()
before this call is made.Returns: None
-
create
(results, rollback)¶ Main creation driver
This is the main driver function. After the graph is linearised, each node has it’s
create()
function called.Arguments:
Parameters: - results – A shared dictionary of prior results. This
dictionary is passed by reference to each call, meaning any
entries inserted will be available to subsequent
create()
calls of following nodes. - rollback – A shared list of functions to be called in the failure case. Nodes should only append to this list. On failure, the callbacks will be processed in reverse order.
Raises: Exception – A failure should raise an exception. This will initiate the rollback
Returns: None
- results – A shared dictionary of prior results. This
dictionary is passed by reference to each call, meaning any
entries inserted will be available to subsequent
-
delete
(state)¶ Cleanup actions
Actions to taken when
dib-block-device delete
is called. This is the cleanup path in case of a reported external failure. The nodes are called in the reverse order tocreate()
Parameters: state – the current state dictionary. This is the results dictionary from create()
before this call is made.Returns: None
-
get_edges
()¶ Return the dependencies/edges for this node
This function will be called after all nodes are created (this is because some plugins need to know the global state of all nodes to decide their dependencies).
This function returns a tuple with two lists
edges_from
: a list of node names that point to usedges_to
: a list of node names we point to
In most cases, node creation will have saved a single parent that was given in the
base
parameter of the configuration. A usual return might look like:def get_edges(self): return ( [self.base], [] )
Some nodes (
level0
) don’t have a base, however
-
get_name
()¶
-
-
class
diskimage_builder.block_device.plugin.
PluginBase
¶ Bases:
object
The base plugin object
This is the base plugin object. Plugins are an instantiation of this class. There should be an entry-point (see setup.cfg) defined under
diskimage_builder.block_device.plugin
for each plugin, e.g.foo = diskimage_builder.block_device.levelX.foo:FooA configuration entry in the graph config that matches this entry point will create an instance of this class, e.g.
foo: name: foo_node base: parent_node argument_a: bar argument_b: baz
The
__init__
function will be passed two arguments:config
- The full configuration dictionary for the entry.
A unique
name
entry can be assumed. In most cases abase
entry will be present giving the parent node (seeNodeBase.get_edges()
). defaults
- The global defaults dictionary (see
--params
)
get_nodes()
should return the node object(s) created by the config for insertion into the final configuration graph. In the simplest case, this is probably a single node created during instantiation. e.g.class Foo(PluginBase): def __init__(self, config, defaults): super(Foo, self).__init__() self.node = FooNode(config.name, ...) def get_nodes(self): return [self.node]
Some plugins require more, however.