@startuml hide empty description state "./cryptic-net daemon -c ./daemon.yml" as init state AppDir { note "All relative paths are relative to the root of the AppDir" as N1 state "./AppRun" as AppRun { AppRun : * Set PATH to APPDIR/bin } state "./bin/entrypoint" as entrypoint { entrypoint : * Merge given and default daemon.yml files entrypoint : * Create runtime dir at $_RUNTIME_DIR_PATH entrypoint : * Lock runtime dir entrypoint : * Run child processes } init --> AppRun : exec AppRun --> entrypoint : exec state "./bin/dnsmasq-entrypoint" as dnsmasqEntrypoint { dnsmasqEntrypoint : * Create $_RUNTIME_DIR_PATH/dnsmasq.conf } state "./bin/dnsmasq -d -C $_RUNTIME_DIR_PATH/dnsmasq.conf" as dnsmasq entrypoint --> dnsmasqEntrypoint : child dnsmasqEntrypoint --> dnsmasq : exec state "./bin/nebula-entrypoint" as nebulaEntrypoint { nebulaEntrypoint : * Create $_RUNTIME_DIR_PATH/nebula.yml } state "./bin/nebula -config $_RUNTIME_DIR_PATH/nebula.yml" as nebula state "./bin/nebula-update-global-bucket" as nebulaUpdateGlobalBucket { nebulaUpdateGlobalBucket : * Runs once then exits nebulaUpdateGlobalBucket : * Updates network topo data in garage global bucket (used for bootstrapping) } entrypoint --> nebulaEntrypoint : child nebulaEntrypoint --> nebula : exec nebulaEntrypoint --> nebulaUpdateGlobalBucket : child state "./bin/garage-entrypoint" as garageEntrypoint { garageEntrypoint : * Create $_RUNTIME_DIR_PATH/garage-N.toml\n (one per storage allocation) garageEntrypoint : * Run child processes } state "./bin/garage -c $_RUNTIME_DIR_PATH/garage-N.toml server" as garage state "./bin/garage-apply-layout-diff" as garageApplyLayoutDiff { garageApplyLayoutDiff : * Runs once then exits garageApplyLayoutDiff : * Updates cluster topo } state "./bin/garage-update-global-bucket" as garageUpdateGlobalBucket { garageUpdateGlobalBucket : * Runs once then exits garageUpdateGlobalBucket : * Updates cluster topo data in garage global bucket (used for bootstrapping) } entrypoint --> garageEntrypoint : child (only if >1 storage allocation defined in daemon.yml) garageEntrypoint --> garage : child (one per storage allocation) garageEntrypoint --> garageApplyLayoutDiff : child garageEntrypoint --> garageUpdateGlobalBucket : child } @enduml