digraph BaremetalHost {
    Created [shape=house]
    Created -> Discovered [label="BMC.* == \"\""]
    Created -> Registering [label="BMC.* != \"\""]

    Discovered [shape=doublecircle]
    Discovered -> Registering [label="BMC.* != \"\""]
    Discovered -> Deleted1 [label="!DeletionTimestamp.IsZero()"]

    Deleted1 [shape=point]

    ExternallyProvisioned [label="Externally\nProvisioned"]

    Registering -> Inspecting [label="!externallyProvisioned && NeedsHardwareInspection()"]
    Registering -> ExternallyProvisioned [label="externallyProvisioned"]
    Registering -> RegistrationError [shape=doublecircle label="registration error"]
    Registering -> Deleted2 [label="!DeletionTimestamp.IsZero()"]

    Deleted2 [shape=point]

    ExternallyProvisioned -> Inspecting [label="!externallyProvisioned && NeedsHardwareInspection()"]
    ExternallyProvisioned -> Ready [label="!externallyProvisioned"]
    Ready -> ExternallyProvisioned [label="externallyProvisioned"]

    Inspecting -> Ready [label="done"]
    Inspecting -> Deleted3 [label="!DeletionTimestamp.IsZero()"]

    Deleted3 [shape=point]

    RegistrationError [shape=doublecircle label="Error"]
    RegistrationError -> Registering [label="(user edits settings)"]
    RegistrationError -> Deleted4 [label="!DeletionTimestamp.IsZero()"]

    Deleted4 [shape=point]

    Ready [shape=doublecircle]
    Ready -> Provisioning [label="NeedsProvisioning()"]
    Ready -> Deleted5 [label="!DeletionTimestamp.IsZero()"]

    Deleted5 [shape=point]

    Provisioning -> Provisioned [label=done]
    Provisioning -> ProvisioningError [label="provisioning error"]
    Provisioning -> Deprovisioning [label="!DeletionTimestamp.IsZero()"]

    ProvisioningError [shape=doublecircle label="Error"]
    ProvisioningError -> Provisioning [label="?"]
    ProvisioningError -> Deprovisioning [label="!DeletionTimestamp.IsZero()"]

    Provisioned [shape=doublecircle]
    Provisioned -> Deprovisioning [label="NeedsDeprovisioning()"]
    Provisioned -> Deprovisioning [label="!DeletionTimestamp.IsZero()"]

    ExternallyProvisioned [shape=doublecircle]
    ExternallyProvisioned -> Deleted [label="!DeletionTimestamp.IsZero()"]

    Deprovisioning -> Provisioning [label="NeedsProvisioning()"]
    Deprovisioning -> Ready [label="!NeedsProvisioning()"]
    Deprovisioning -> Deleted [label="!DeletionTimestamp.IsZero()"]

    Deleted [shape=doublecircle]
}
