diff --git a/CLAUDE.md b/CLAUDE.md index 862daf8..ca9133f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -159,13 +159,17 @@ roles/myservice/ ### 2. Meta Dependencies ```yaml -dependencies: - - role: podman # If using containers - - role: postgres # If needs database - - role: redis # If needs cache +dependencies: [] ``` -**Important:** Only include dependencies that are **always** required. Optional dependencies (like nginx for reverse proxy) should be added explicitly in playbooks, not in `meta/main.yml`. +**Do NOT declare shared services (podman, postgres, valkey, nginx) as meta dependencies.** They are deployed once via playbook role ordering and would otherwise re-run on every service deploy. Instead: + +- Playbooks list shared services before service roles, tagged `infra` +- Every role entry in a playbook carries tags: a group tag (`system`, `net`, `infra`, `monitoring`, `services`) plus its own name +- Targeted deploys use `--tags `; fresh installs run the full playbook (or `--tags infra` first) +- Service roles fail fast when a shared service is missing (password asserts, postgresql tasks) + +Document prerequisites in the role README instead of `meta/main.yml`. ### 3. Rootless Podman and User Systemd Services diff --git a/roles/fdroid/meta/main.yml b/roles/fdroid/meta/main.yml index d80fa53..7a29b9a 100644 --- a/roles/fdroid/meta/main.yml +++ b/roles/fdroid/meta/main.yml @@ -1,3 +1,5 @@ --- -dependencies: - - role: podman +# No meta dependencies: shared services (podman) are deployed once via +# playbook role ordering (tagged 'infra'), not re-run on every deploy of +# this role. See playbooks/*.yml. +dependencies: [] diff --git a/roles/gitea/meta/main.yml b/roles/gitea/meta/main.yml index 0eff038..1b65799 100644 --- a/roles/gitea/meta/main.yml +++ b/roles/gitea/meta/main.yml @@ -1,4 +1,5 @@ --- -dependencies: - - role: podman - - role: postgres +# No meta dependencies: shared services (podman, postgres) are deployed once via +# playbook role ordering (tagged 'infra'), not re-run on every deploy of +# this role. See playbooks/*.yml. +dependencies: [] diff --git a/roles/immich/README.md b/roles/immich/README.md index 7ec80c6..552b5ac 100644 --- a/roles/immich/README.md +++ b/roles/immich/README.md @@ -2,6 +2,10 @@ This Ansible role deploys [Immich](https://immich.app/) - a high performance self-hosted photo and video management solution - using Podman with k8s files. +## Prerequisites + +The `podman`, `postgres`, `valkey`, and `nginx` roles must have been applied to the host first (they are shared services, intentionally not declared in `meta/main.yml` to keep immich deploys fast). Order them before `immich` in the playbook for fresh installs. + ## Role Variables See `defaults/main.yml` for all available variables and their default values. diff --git a/roles/immich/meta/main.yml b/roles/immich/meta/main.yml index 0be1062..df43734 100644 --- a/roles/immich/meta/main.yml +++ b/roles/immich/meta/main.yml @@ -1,6 +1,7 @@ --- -dependencies: - - role: podman - - role: postgres - - role: valkey - - role: nginx +# No meta dependencies: podman, postgres, valkey, and nginx are shared +# services deployed once via the playbook (see playbooks/andromeda.yml +# role ordering). Declaring them here would re-run them on every immich +# deploy. The role fails fast if they are missing (password asserts, +# postgresql_* tasks). +dependencies: [] diff --git a/roles/metabase/meta/main.yml b/roles/metabase/meta/main.yml index 0eff038..1b65799 100644 --- a/roles/metabase/meta/main.yml +++ b/roles/metabase/meta/main.yml @@ -1,4 +1,5 @@ --- -dependencies: - - role: podman - - role: postgres +# No meta dependencies: shared services (podman, postgres) are deployed once via +# playbook role ordering (tagged 'infra'), not re-run on every deploy of +# this role. See playbooks/*.yml. +dependencies: [] diff --git a/roles/ntfy/meta/main.yml b/roles/ntfy/meta/main.yml index d80fa53..7a29b9a 100644 --- a/roles/ntfy/meta/main.yml +++ b/roles/ntfy/meta/main.yml @@ -1,3 +1,5 @@ --- -dependencies: - - role: podman +# No meta dependencies: shared services (podman) are deployed once via +# playbook role ordering (tagged 'infra'), not re-run on every deploy of +# this role. See playbooks/*.yml. +dependencies: [] diff --git a/roles/static_web/meta/main.yml b/roles/static_web/meta/main.yml index 8b662c9..c7ae376 100644 --- a/roles/static_web/meta/main.yml +++ b/roles/static_web/meta/main.yml @@ -1,3 +1,5 @@ --- -dependencies: - - role: nginx +# No meta dependencies: shared services (nginx) are deployed once via +# playbook role ordering (tagged 'infra'), not re-run on every deploy of +# this role. See playbooks/*.yml. +dependencies: [] diff --git a/roles/unifi/meta/main.yml b/roles/unifi/meta/main.yml index d80fa53..7a29b9a 100644 --- a/roles/unifi/meta/main.yml +++ b/roles/unifi/meta/main.yml @@ -1,3 +1,5 @@ --- -dependencies: - - role: podman +# No meta dependencies: shared services (podman) are deployed once via +# playbook role ordering (tagged 'infra'), not re-run on every deploy of +# this role. See playbooks/*.yml. +dependencies: [] diff --git a/roles/uptime_kuma/meta/main.yml b/roles/uptime_kuma/meta/main.yml index d80fa53..7a29b9a 100644 --- a/roles/uptime_kuma/meta/main.yml +++ b/roles/uptime_kuma/meta/main.yml @@ -1,3 +1,5 @@ --- -dependencies: - - role: podman +# No meta dependencies: shared services (podman) are deployed once via +# playbook role ordering (tagged 'infra'), not re-run on every deploy of +# this role. See playbooks/*.yml. +dependencies: []