refactor: drop shared-service meta dependencies from service roles
podman, postgres, valkey, and nginx are shared services deployed once per host. Declaring them in meta/main.yml re-ran them on every service deploy, adding significant time to targeted runs. Playbooks now list shared services first (tagged 'infra') and every role entry carries a group tag plus its own name, so '--tags <role>' deploys just that role. Roles still fail fast when a shared service is missing (password asserts, postgresql tasks). Prerequisites are documented in role READMEs. CLAUDE.md updated to reflect the new convention.
This commit is contained in:
@@ -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 <role>`; 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
|
||||
|
||||
|
||||
@@ -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: []
|
||||
|
||||
@@ -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: []
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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: []
|
||||
|
||||
@@ -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: []
|
||||
|
||||
@@ -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: []
|
||||
|
||||
@@ -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: []
|
||||
|
||||
@@ -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: []
|
||||
|
||||
@@ -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: []
|
||||
|
||||
Reference in New Issue
Block a user