Skip to content

Provisioning helpers

Utilities that bridge provisioning results with the controller.

cleanup_provisioned_nodes

cleanup_provisioned_nodes(provisioning_result, result, presenter)

Apply cleanup policy using controller authorization.

Expects result.summary.cleanup_allowed to indicate permission to teardown.

Source code in lb_provisioner/services/utils.py
 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
def cleanup_provisioned_nodes(
    provisioning_result: ProvisioningResult, result, presenter
) -> None:
    """
    Apply cleanup policy using controller authorization.

    Expects `result.summary.cleanup_allowed` to indicate permission to teardown.
    """
    if not provisioning_result:
        return
    allow_cleanup = bool(
        result
        and getattr(result, "summary", None)
        and getattr(result.summary, "cleanup_allowed", False)
    )
    if (
        result
        and getattr(result, "summary", None)
        and not getattr(result.summary, "success", True)
    ):
        presenter.warning("Run failed; preserving provisioned nodes for inspection.")
        provisioning_result.keep_nodes = True
    if not allow_cleanup:
        presenter.warning(
            "Controller did not authorize cleanup; provisioned nodes preserved."
        )
        provisioning_result.keep_nodes = True
    provisioning_result.destroy_all()

ProvisioningResult dataclass

ProvisioningResult(nodes, keep_nodes=False)

Aggregate provisioning outcome.

Attributes

keep_nodes class-attribute instance-attribute

keep_nodes = False

nodes instance-attribute

nodes

Functions

destroy_all

destroy_all()

Destroy all provisioned nodes in best-effort fashion.

Source code in lb_provisioner/models/types.py
61
62
63
64
65
66
def destroy_all(self) -> None:
    """Destroy all provisioned nodes in best-effort fashion."""
    if self.keep_nodes:
        return
    for node in self.nodes:
        node.teardown()