feat: podman-compose stack units and root/user execution scopes
- syncup: podman first, docker only as fallback (podman wins on name clash;
existing docker units found in podman switch to podman)
- syncup: group podman-compose containers into one `kind: stack` unit per
project (project, working_dir, compose_files, compose_bin from labels);
disable existing member units ("part of stack <project>")
- generator: compose mode (podman-compose up/stop, WorkingDirectory) with
pod start/stop fallback when compose binary/dir/files are missing
- reconcile: stacks disabled with "stack not found" when neither compose
files nor pod exist
- root: scan root + rootless users listed in `users:` (podman only)
- non-root: config ~/.config/unitdore/units.yaml, own user units only
- sysuser package: runuser with XDG_RUNTIME_DIR/DBUS env, home/linger lookup
- install: warn when linger is not enabled for user units
- testdata/stack: podman-compose test stack and captured podman ps fixture
- docs: README, generated-units, man page, AGENTS, PLAN
This commit is contained in:
@@ -277,6 +277,59 @@ units:
|
||||
|
||||
---
|
||||
|
||||
## Stack Unit (podman-compose, compose mode)
|
||||
|
||||
Used when `compose_bin`, `working_dir` and all `compose_files` exist.
|
||||
|
||||
```yaml
|
||||
- name: shop
|
||||
kind: stack
|
||||
runtime: podman
|
||||
project: shop
|
||||
working_dir: /srv/shop
|
||||
compose_files: [compose.yaml]
|
||||
compose_bin: /usr/bin/podman-compose
|
||||
enabled: true
|
||||
```
|
||||
|
||||
```ini
|
||||
# /etc/systemd/system/unitdore-shop.service
|
||||
# Generated by unitdore — do not edit manually
|
||||
|
||||
[Unit]
|
||||
Description=Unitdore: shop (podman-compose stack)
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
WorkingDirectory=/srv/shop
|
||||
ExecStart=/usr/bin/podman-compose -p shop -f compose.yaml up
|
||||
ExecStop=-/usr/bin/podman-compose -p shop -f compose.yaml stop
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Stack Unit (pod fallback)
|
||||
|
||||
Used when the compose binary, working dir or a compose file is missing. Requires pod `pod_<project>`.
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=Unitdore: shop (podman pod)
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
ExecStart=/usr/bin/podman pod start pod_shop
|
||||
ExecStop=-/usr/bin/podman pod stop pod_shop
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Quick Reference: Service File Locations
|
||||
|
||||
| Scenario | Path |
|
||||
|
||||
Reference in New Issue
Block a user