Volumes
flowchart LR
vol_data["socialhome_data"]
vol_data -->|"role is manager-pinned"| local_data["node-local on the manager"]:::local
classDef shared fill:#e6f4ea,stroke:#137333,color:#0b2e13;
classDef local fill:#fef7e0,stroke:#b06000,color:#3d2600;
Condition |
Effect |
swarm, storage.backend: nfs, no nfs: false, role not pinned |
shared over NFS |
any one of those missing |
node-local |
All four conditions must hold, so pinning a role takes every one of its volumes node-local. Only the roleβs primary entry counts as pinned here: a placement on any other service pins that service alone and leaves the backing of every volume unchanged. The chain is drawn rather than its result, because that coupling is what makes a placement change move data without saying so.
Social Home ArchitectureΒΆ
Compose π³ΒΆ
flowchart LR none["web-app-socialhome declares no service"]Swarm πΒΆ
flowchart LR none["web-app-socialhome declares no service"]VolumesΒΆ
flowchart LR vol_data["socialhome_data"] vol_data -->|"role is manager-pinned"| local_data["node-local on the manager"]:::local classDef shared fill:#e6f4ea,stroke:#137333,color:#0b2e13; classDef local fill:#fef7e0,stroke:#b06000,color:#3d2600;Condition
Effect
swarm,
storage.backend: nfs, nonfs: false, role not pinnedshared over NFS
any one of those missing
node-local
All four conditions must hold, so pinning a role takes every one of its volumes node-local. Only the roleβs primary entry counts as pinned here: a
placementon any other service pins that service alone and leaves the backing of every volume unchanged. The chain is drawn rather than its result, because that coupling is what makes a placement change move data without saying so.DependenciesΒΆ
flowchart LR subgraph deps [Dependencies] dep_svc_bkp_volume_2_local["svc-bkp-volume-2-local π»"] dep_svc_net_tor["svc-net-tor π³π"] dep_web_app_dashboard["web-app-dashboard π³π"] dep_web_app_docs["web-app-docs π³π"] dep_web_app_keycloak["web-app-keycloak π³π"] dep_web_app_prometheus["web-app-prometheus π³π"] dep_web_svc_coturn["web-svc-coturn π³π"] dep_web_svc_design["web-svc-design π»"] dep_web_svc_logout["web-svc-logout π³π"] end subgraph role [web-app-socialhome π³π] svc_socialhome["socialhome"] svc_coturn["coturn"] svc_design["design"] svc_prometheus["prometheus"] svc_logout["logout"] svc_dashboard["dashboard"] svc_sso["sso β"] svc_tor["tor"] svc_container_backup["container_backup"] svc_docs["docs"] end dep_svc_bkp_volume_2_local -. "0..1" .-> svc_container_backup dep_svc_net_tor -. "0..1" .-> svc_tor dep_web_app_dashboard -. "0..1" .-> svc_dashboard dep_web_app_docs -. "0..1" .-> svc_docs dep_web_app_keycloak -- "0..0" --> svc_sso dep_web_app_prometheus -. "0..1" .-> svc_prometheus dep_web_svc_coturn -. "0..1" .-> svc_coturn dep_web_svc_design -. "0..1" .-> svc_design dep_web_svc_logout -. "0..1" .-> svc_logout linkStyle 4 stroke:red;Symbol
Meaning
1:1solidfixed relationship
0..1dashedconditional, enabled only in matching deployments
0..0reddeclared but turned off in this role
π»
deploys to the host
π³
deploys under compose
π
deploys under swarm
β
service explicitly turned off
βοΈ
Ansible role dependency from
meta/main.ymlEvery dependency and dependent is listed; the graph is not truncated.