feat: order/delay in service files, enable cmd, --all on unit commands
- install/uninstall/start/stop/enable take <name> or --all; *all kept as shortcuts - add enable (enable at boot + start); startall no longer enables - order/delay resolved by config.ResolveOrder and written into systemd, OpenRC and runit service files (After=/sleep), so they apply at boot - install --all stops and disables units before removing their files - update regenerates all installed, enabled units and removes disabled ones - edit creates the config dir; docs and man page updated - tests: fake Init for cmd, ResolveOrder, backend ordering output
This commit is contained in:
@@ -27,8 +27,10 @@ make release-version # Bump patch version, commit, tag, and push
|
||||
## Architecture
|
||||
|
||||
```
|
||||
cmd/ # Cobra commands (edit, install, list, root, start, startall,
|
||||
# status, stop, stopall, syncup, uninstall, update)
|
||||
cmd/ # Cobra commands (edit, install, enable, list, root, start, status,
|
||||
# stop, syncup, uninstall, update; each of install/enable/start/
|
||||
# stop/uninstall takes <name> or --all, *all = shortcuts in
|
||||
# bulk.go); order.go = ordering; bulk_test.go = fake Init
|
||||
config/ # Config struct + YAML load/save (units.yaml)
|
||||
runtime/ # Docker and Podman runtime abstraction, compose labels
|
||||
sysuser/ # run commands as root/user (runuser), home/linger lookup
|
||||
@@ -43,7 +45,7 @@ docs/ # generated-units.md (unit file examples), unitdore.1 (man page)
|
||||
|
||||
### Key packages
|
||||
|
||||
- **`config`** — `Unit` and `Config` structs; `Load`, `Save`, `FindUnit`, `AddUnit`
|
||||
- **`config`** — `Unit` and `Config` structs; `Load`, `Save`, `FindUnit`, `AddUnit`, `ResolveOrder` (fills `Unit.After`/`StartDelay`, run by `Load`)
|
||||
- **`runtime`** — `ContainerRuntime` interface; `docker.go`, `podman.go` implementations
|
||||
- **`service`** — `Resolve(unit)` → start/stop commands, type, workdir; shared by all backends
|
||||
- **`initsys`** — `Init` interface; `New(cfg)` picks backend; cmd/ only talks to `Init`
|
||||
@@ -66,8 +68,8 @@ units:
|
||||
runtime: podman # podman | docker | script | exec
|
||||
user: "" # empty = system unit; set for rootless user unit
|
||||
command: "" # override ExecStart entirely
|
||||
order: 1 # startup order, lower = earlier; same = parallel
|
||||
delay: 0s # delay after previous order group
|
||||
order: 1 # startup order, lower = earlier; same = parallel; written into service files (After=/sleep)
|
||||
delay: 0s # wait before start, own value, ignored in first group
|
||||
enabled: true
|
||||
disabled_reason: "" # auto-set by syncup reconciliation
|
||||
restart: false # Restart=on-failure
|
||||
@@ -109,6 +111,7 @@ Tests exist in:
|
||||
- `config/config_test.go`
|
||||
- `runtime/runtime_test.go`
|
||||
- `cmd/syncup_test.go`
|
||||
- `cmd/bulk_test.go`
|
||||
- `sysuser/sysuser_test.go`
|
||||
- `service/spec_test.go`
|
||||
- `initsys/initsys_test.go`
|
||||
|
||||
Reference in New Issue
Block a user