- 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
101 lines
3.0 KiB
JSON
101 lines
3.0 KiB
JSON
[
|
|
{
|
|
"AutoRemove": false,
|
|
"Command": [
|
|
"sleep",
|
|
"infinity"
|
|
],
|
|
"CreatedAt": "6 seconds ago",
|
|
"CIDFile": "",
|
|
"Exited": false,
|
|
"ExitedAt": -62135596800,
|
|
"ExitCode": 0,
|
|
"ExposedPorts": null,
|
|
"Id": "6d5a1e4d8ab39d64b26842a0e50b5943cfa62d71c70d63ce5c2ad92f598811b9",
|
|
"Image": "docker.io/library/alpine:latest",
|
|
"ImageID": "a40c03cbb81c59bfb0e0887ab0b1859727075da7b9cc576a1cec2c771f38c5fb",
|
|
"IsInfra": false,
|
|
"Labels": {
|
|
"PODMAN_SYSTEMD_UNIT": "podman-compose@unitdore-test.service",
|
|
"com.docker.compose.container-number": "1",
|
|
"com.docker.compose.project": "unitdore-test",
|
|
"com.docker.compose.project.config_files": "compose.yaml",
|
|
"com.docker.compose.project.working_dir": "/home/warkanum/dev/unitdore/testdata/stack",
|
|
"com.docker.compose.service": "db",
|
|
"io.podman.compose.config-hash": "1a54723a4ead4531f2ddce5aa7e85019b4ebd1612ca8973b85cd9026f4f87949",
|
|
"io.podman.compose.project": "unitdore-test",
|
|
"io.podman.compose.service": "db",
|
|
"io.podman.compose.version": "1.6.0"
|
|
},
|
|
"Mounts": [],
|
|
"Names": [
|
|
"unitdore-test_db_1"
|
|
],
|
|
"Namespaces": {
|
|
|
|
},
|
|
"Networks": [
|
|
"unitdore-test_default"
|
|
],
|
|
"Pid": 75799,
|
|
"Pod": "235775e179ed8413b84b823ff63a812a053d929b8399b2d48cc19f9a4eeef410",
|
|
"PodName": "",
|
|
"Ports": null,
|
|
"Restarts": 0,
|
|
"Size": null,
|
|
"StartedAt": 1791823934,
|
|
"State": "running",
|
|
"Status": "Up 6 seconds",
|
|
"Created": 1791823933
|
|
},
|
|
{
|
|
"AutoRemove": false,
|
|
"Command": [
|
|
"sleep",
|
|
"infinity"
|
|
],
|
|
"CreatedAt": "6 seconds ago",
|
|
"CIDFile": "",
|
|
"Exited": false,
|
|
"ExitedAt": -62135596800,
|
|
"ExitCode": 0,
|
|
"ExposedPorts": null,
|
|
"Id": "b6b364f2a885baa583b7112cd7d37832e7f11f9091698ef76ca4c44259e501cc",
|
|
"Image": "docker.io/library/alpine:latest",
|
|
"ImageID": "a40c03cbb81c59bfb0e0887ab0b1859727075da7b9cc576a1cec2c771f38c5fb",
|
|
"IsInfra": false,
|
|
"Labels": {
|
|
"PODMAN_SYSTEMD_UNIT": "podman-compose@unitdore-test.service",
|
|
"com.docker.compose.container-number": "1",
|
|
"com.docker.compose.project": "unitdore-test",
|
|
"com.docker.compose.project.config_files": "compose.yaml",
|
|
"com.docker.compose.project.working_dir": "/home/warkanum/dev/unitdore/testdata/stack",
|
|
"com.docker.compose.service": "web",
|
|
"io.podman.compose.config-hash": "f38934df837f52ead7f2848b58acef10380a7929125a7c4f61199ad5b557302f",
|
|
"io.podman.compose.project": "unitdore-test",
|
|
"io.podman.compose.service": "web",
|
|
"io.podman.compose.version": "1.6.0"
|
|
},
|
|
"Mounts": [],
|
|
"Names": [
|
|
"unitdore-test_web_1"
|
|
],
|
|
"Namespaces": {
|
|
|
|
},
|
|
"Networks": [
|
|
"unitdore-test_default"
|
|
],
|
|
"Pid": 75919,
|
|
"Pod": "235775e179ed8413b84b823ff63a812a053d929b8399b2d48cc19f9a4eeef410",
|
|
"PodName": "",
|
|
"Ports": null,
|
|
"Restarts": 0,
|
|
"Size": null,
|
|
"StartedAt": 1791823934,
|
|
"State": "running",
|
|
"Status": "Up 6 seconds",
|
|
"Created": 1791823933
|
|
}
|
|
]
|