mirror of
https://github.com/Studio-Saelix/sencho.git
synced 2026-08-13 12:17:34 +00:00
fix: recognize clean one-shot completions in health gate and drift (#1691)
* fix: recognize clean one-shot completions in health gate and drift Treat exit 0 with restart policy no/absent as successful completion so init and migration jobs no longer fail post-update observation or show as service-missing, while long-running restart policies still fail closed. * fix: ignore residual health on clean one-shots and honor deploy.restart_policy Completed exit-0 jobs with no-restart intent no longer fail the health gate on leftover starting/unhealthy state, and Drift treats deploy.restart_policy with Compose precedence so any/on-failure services are not mistaken for one-shots. * fix: require explicit Compose restart no for one-shot recognition Docker inspect reports restart no for both intentional jobs and bare services that omit restart, so Health Gate and Drift now require declared restart:""no"" (or deploy.restart_policy condition none) and load Compose intent once per gate.
This commit is contained in:
@@ -28,9 +28,9 @@ The status badge at the top of the tab summarizes the comparison between the eff
|
||||
|
||||
| Status | Meaning |
|
||||
|--------|---------|
|
||||
| **In sync** | Running containers match the effective model: same services, images, and published ports. |
|
||||
| **Drifted** | Something running differs from the model. Specific findings are listed below the badge. |
|
||||
| **Not running** | The stack has no running containers. The file is present but nothing is up. |
|
||||
| **In sync** | Declared services match runtime: same running services, images, and published ports, or a declared one-shot finished cleanly (`Exited (0)` with explicit `restart: "no"` or `deploy.restart_policy.condition: none`). Omitting `restart:` does not count as a one-shot. |
|
||||
| **Not running** | The stack has no running containers, and no declared service is satisfied by a finished one-shot. The file is present but nothing is up. |
|
||||
| **Drifted** | Something differs from the model. Specific findings are listed below the badge. |
|
||||
| **Unreachable** | Docker could not be reached on the active node, so drift cannot be assessed. |
|
||||
|
||||
## Since your last deploy
|
||||
@@ -62,10 +62,10 @@ When a stack is drifted, each reason is listed in the **Findings** section again
|
||||
|---------|---------------|
|
||||
| **Image** | A running container uses a different image than the Compose file declares. Expected and actual values are shown side by side. |
|
||||
| **Ports** | The published ports of a service differ from what the Compose file declares. |
|
||||
| **Service missing** | The Compose file declares a service, but no running container matches it. |
|
||||
| **Service missing** | The Compose file declares a service, but no running container matches it and no clean one-shot completion satisfies it. |
|
||||
| **Undeclared service** | A container is running for the stack but no matching service exists in the Compose file. |
|
||||
| **Network undeclared** | A running service is attached to a network that is not declared in the Compose file. |
|
||||
| **Network missing** | A network declared in the Compose file is not used by any running service or is absent from the runtime. |
|
||||
| **Network missing** | A network declared in the Compose file is not used by any running service or is absent from the runtime. Network usage still counts only running or restarting containers, so a finished one-shot does not keep a dedicated Compose network marked as in use. |
|
||||
|
||||
### Image comparison
|
||||
|
||||
@@ -157,7 +157,7 @@ Viewing the tab requires read access to the stack; any role that can see a stack
|
||||
|
||||
<AccordionGroup>
|
||||
<Accordion title="A stack I deliberately stopped shows as 'Not running'">
|
||||
That is expected. Drift compares the file on disk against what is actually running, so a stack with no running containers reports **Not running** even when you stopped it intentionally. Deploy it to return it to **In sync**.
|
||||
That is expected for long-running services. Drift compares the file on disk against what is actually running, so a stack with no running containers and no finished one-shot jobs reports **Not running** even when you stopped it intentionally. Deploy it to return it to **In sync**. A stack made only of one-shot jobs that already exited `0` with explicit `restart: "no"` (or `deploy.restart_policy.condition: none`) can show **In sync** (or **Drifted** for other findings such as unused networks) with no containers currently running.
|
||||
</Accordion>
|
||||
<Accordion title="The image finding flags a stack I just updated">
|
||||
Click **re-check** after the deploy finishes. During a rolling update, replicas can briefly run different images, and the report captures that moment. Once every container is on the declared image, the finding clears.
|
||||
|
||||
Reference in New Issue
Block a user