@startuml hide empty description state "./isle daemon -c ./daemon.yml" as init state AppDir { note "All relative paths are relative to the root of the AppDir" as N1 state "./bin/entrypoint daemon -c ./daemon.yml" as entrypoint { entrypoint : * Create runtime dir entrypoint : * Lock runtime dir entrypoint : * Merge given and default daemon.yml files entrypoint : * Copy bootstrap.json into state directory, if it's not there entrypoint : * Merge daemon.yml config into bootstrap.json entrypoint : * Create $RUNTIME_DIRECTORY/dnsmasq.conf entrypoint : * Create $RUNTIME_DIRECTORY/nebula.yml entrypoint : * Create $RUNTIME_DIRECTORY/garage-N.toml\n (one per storage allocation) entrypoint : * Spawn child processes entrypoint : * Wait for nebula & garage to initialize entrypoint : * Updates garage cluster layout entrypoint : * Stores host info in global bucket, based on latest bootstrap.json } init --> entrypoint : exec state "./bin/dnsmasq -d -C $RUNTIME_DIRECTORY/dnsmasq.conf" as dnsmasq entrypoint --> dnsmasq : child state "./bin/nebula -config $RUNTIME_DIRECTORY/nebula.yml" as nebula entrypoint --> nebula : child state "./bin/garage -c $RUNTIME_DIRECTORY/garage-N.toml server" as garage entrypoint --> garage : child (one per storage allocation) } @enduml