Campaign 10 Phase B: 27 cycles, 586 invariant checks, 0 violations
Ran the soak on the Phase A rig. Ended on its own deadline — no watchdog halt, no atom exception, no I11 breach. I1 28+28 pairs, I2 28+28 pairs, I3 56, I4 56, I5/I6 28 each, I7 28, I10 135, I11 28. Zero violations. The row counts are themselves the no-silent-skip check: I3/I4 twice per cycle (both drives), I10 = 5 secret-class fields x 27, REBOOT on cycles 7/14/21 only. I7 is the headline: 28 restores, 28 correct discriminators — never stale, never empty. RTO (Tier 1, rallly, 66 MB): min 38.8s, median 42.0s, p90 42.5s, max 44.3s. That is the S band's lower end ONLY; the 5.5s spread over 28 runs says fixed work dominates, so nothing extrapolates to M or L. RPO not measured. Every atom and invariant was proven BY HAND before automation — the runner asserts nothing that was not first observed live. Caught a Phase A gap before starting: no app had HDD_PATH, so all data sat on the system disk and I3 could never have fired. Deployed calibre-web onto adatok first; otherwise the run would have produced 27 green cycles that tested nothing cross-drive. Investigated and DISPROVED a suspected defect (audit 5.2): /api/disks reports state=attached for a physically absent drive, and intermediary.go:230 really does compute presence from State=="attached". It is inert — planDriveGates only gates paths under /mnt/felhom-drives/ and uses BoundUnderParent there, which was correctly false. The gate fired; the storage page showed "Meghajtó leválasztva". No R-n minted. Honest gaps: 6 of ~12 atom families ran. Not run — Tier 3 (structurally un-isolatable), abort-fs-in-place, kill-agent-mid-backup, hard-reset-mid-write, reboot-VM, both concurrency atoms, fill-drive-near-full. I8 not checked, I9 not automated (cited from the tester-gate run, not re-claimed). kill_controller is NOT mid-backup and reboot_guest never interleaved with a detach. 27 cycles does not answer the brief's question about drift at the thirty-eighth. Teardown still OWED, including hub customer c10-soak (disposition: DELETE).
This commit is contained in:
+32
-8
@@ -8,8 +8,8 @@ clobbered — same shared-clone reasoning as `REPORT-iso-release.md`.
|
||||
|
||||
## The sentence that matters
|
||||
|
||||
**Phase A is complete and every gate passed. Phase B did not run.** The rig is built, fenced and
|
||||
idle, waiting for a runner that should not be written at 04:00.
|
||||
**Phase A passed every gate (07-31) and Phase B ran (08-01): 27 cycles, 586 invariant checks, zero
|
||||
violations, ended on its own deadline with no watchdog halt and no atom exception.**
|
||||
|
||||
## What was established
|
||||
|
||||
@@ -33,6 +33,23 @@ idle, waiting for a runner that should not be written at 04:00.
|
||||
- **A4** discriminators seed and read back across all four apps; rallly's over the path
|
||||
`DATABASE_URL` actually names, not the trusted socket that produced D5's false pass.
|
||||
|
||||
## Phase B — the soak
|
||||
|
||||
27 cycles, 09:33–15:40 CEST, atoms permuted per cycle, every invariant checked every cycle.
|
||||
|
||||
- **I1** 28 + 28 pairs, **I2** 28 + 28 pairs, **I3** 56, **I4** 56, **I5/I6** 28 each, **I7** 28,
|
||||
**I10** 135, **I11** 28 — **0 violations**. Row counts are themselves the no-silent-skip check
|
||||
(I3/I4 twice per cycle = both drives; I10 = 5 secret-class fields × 27; REBOOT = cycles 7/14/21).
|
||||
- **I7 is the headline: 28 restores, 28 correct discriminators.** Never stale, never empty.
|
||||
- **RTO (Tier 1, rallly, 66 MB):** min 38.8 s, **median 42.0 s**, p90 42.5 s, max 44.3 s. **Covers the
|
||||
S band only, and only its lower end** — the 5.5 s spread over 28 runs says fixed work dominates, so
|
||||
nothing here extrapolates to M or L. **RPO not measured** (backups were driven on demand).
|
||||
- Every atom and invariant was **proven by hand before automation**; the runner asserts nothing that
|
||||
was not first observed live.
|
||||
- **A Phase A gap was caught before the run:** no app had `HDD_PATH`, so all data sat on the system
|
||||
disk and I3 could never have fired. calibre-web was deployed onto `adatok` first — otherwise the
|
||||
soak would have produced 27 green cycles that tested nothing cross-drive.
|
||||
|
||||
## Findings
|
||||
|
||||
- **R-156 (new)** — **papra's data is neither persisted nor backed up, and it reports healthy.** The
|
||||
@@ -48,15 +65,22 @@ idle, waiting for a runner that should not be written at 04:00.
|
||||
|
||||
## What did not run
|
||||
|
||||
Every B1 atom, I1–I11 across cycles, RTO/RPO, and A5's budget/watchdog. Phase A was budgeted at ~1 h
|
||||
and took ~5.5 h — the blind interactive install alone was ~1.5 h. That left the runner, the component
|
||||
that judges eleven invariants and fires destructive atoms unattended, to be written at 04:00 with ~3 h
|
||||
of night left. Stopped instead, on the brief's own fence: *a test rig producing false negatives is
|
||||
worse than no rig.*
|
||||
**6 of the brief's ~12 atom families ran.** Not run: Tier-3 backup/restore (§3), abort-a-filesystem-
|
||||
in-place (R-117 Q7), kill-the-agent-mid-backup, hard-reset-the-VM-mid-write, reboot-the-VM, both
|
||||
concurrency atoms, and fill-a-drive-near-full. **I8** not checked (no Tier 3); **I9** not automated —
|
||||
it was proven on this same controller 0.188.0 by the tester-gate run hours earlier, which is cited,
|
||||
not re-claimed.
|
||||
|
||||
Two precision notes so atom names don't overclaim: `kill_controller` is **not** "mid-backup" (it lands
|
||||
at a permuted point, exercising recovery rather than the mid-write race), and `reboot_guest` was
|
||||
appended after the shuffle so it **never interleaved with a detach**.
|
||||
|
||||
**The tail is untested, not clean.** The brief's interest in "the state that quietly drifts on the
|
||||
thirty-eighth" is not answered by 27 cycles.
|
||||
|
||||
## Teardown — OWED, nothing removed
|
||||
|
||||
Deliberately intact so Phase B need not repeat Phase A. VM 311, `c10-scratch`, PBS datastore
|
||||
Still intact: the rig is reusable for the atoms that did not run. VM 311, `c10-scratch`, PBS datastore
|
||||
`felhom-c10` + user/token, restic subaccount `u629488-sub4`, and **hub customer `c10-soak` (disposition:
|
||||
DELETE)** are all outstanding, with commands in the audit §9. Named explicitly because R-131 is four
|
||||
orphaned scratch customers left by exactly this omission.
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# CAMPAIGN 10 — two-storage adversarial soak (2026-07-31 → 08-01)
|
||||
|
||||
**Status: Phase A COMPLETE and gated. Phase B NOT STARTED — deliberately, see §8.**
|
||||
**One new finding: R-156. One structural scope constraint: Tier 3 cannot be isolated (§3).**
|
||||
**Status: Phase A COMPLETE and gated (2026-07-31). Phase B RUN 2026-08-01 — 27 cycles, 586 invariant
|
||||
checks, ZERO violations.** **One new finding: R-156. One structural scope constraint: Tier 3 cannot be
|
||||
isolated (§3). One suspected defect investigated and DISPROVED (§5.2).**
|
||||
|
||||
Evidence: `../tests/campaign10-evidence-2026-07-31/` — `state/phaseA-journal.md` (step-by-step),
|
||||
`isolation/pbs-denial.txt`, `isolation/restic-denial.txt`, `r156-papra-volume.txt`.
|
||||
@@ -120,7 +121,7 @@ campaign constraint, not a defect.
|
||||
| **A2** claim | **PASS** | discriminator flipped `dashboard not yet claimed` → `authentication required`; hub: `[claim] customer c10-soak CLAIMED its dashboard` |
|
||||
| **A3** enrol both drives, apps across them | **PASS** | both registered via the real endpoint; backup target healthy; 4 apps healthy |
|
||||
| **A4** discriminators | **PASS** | all four apps seed and read back the same generation |
|
||||
| **A5** budget + watchdog | **NOT DONE** | §8 |
|
||||
| **A5** budget + watchdog | **PASS** (built for Phase B) | disk floor 120 G on `/mnt/nvme-1tb` + VM-liveness watchdog; heartbeat `status.txt` per phase; `journal.tsv` per check. Neither fired: the run ended on its deadline with 871 G free |
|
||||
|
||||
**A1 — 1.26.1 cannot auto-install, verified against the bytes** (not inferred from its manifest):
|
||||
`auto-installer-mode.toml` 0 hits, `answer.toml` 0, `proxmox-auto-install` 0, exactly 2 interactive
|
||||
@@ -188,6 +189,72 @@ false pass.
|
||||
|
||||
---
|
||||
|
||||
## 4b. Phase B — the soak (2026-08-01)
|
||||
|
||||
**27 cycles, 09:33–15:40 CEST, ended on its own deadline. No watchdog halt, no atom exception, no
|
||||
I11 breach. 586 invariant rows, 0 violations.**
|
||||
|
||||
**Every atom and every invariant was proven BY HAND before it was automated** (§4c). That ordering is
|
||||
the point: a runner written first and trusted after is exactly the rig the brief warns about.
|
||||
|
||||
**A gap in Phase A found and closed first.** None of the four apps had `HDD_PATH` — all their data sat
|
||||
in Docker volumes on the **system** disk, so detaching a data drive was a no-op for apps and **I3 could
|
||||
never have fired**. A soak run in that state would have produced 27 green cycles that tested nothing
|
||||
about cross-drive behaviour. **calibre-web** was deployed onto `adatok`
|
||||
(`/mnt/felhom-drives/adatok/userdata/media/books → /calibre-library`, confirmed from
|
||||
`docker inspect`) before the run started.
|
||||
|
||||
### Atoms, permuted per cycle (seeded RNG, so the order is reproducible)
|
||||
|
||||
`backup` · `restore_verify` · `detach_target` · `detach_nontarget` · `kill_controller` ·
|
||||
`redeploy_app`, plus `reboot_guest` on every 7th cycle.
|
||||
|
||||
### Results
|
||||
|
||||
| Invariant | Checks | Violations | What was actually asserted |
|
||||
|---|---|---|---|
|
||||
| **I1** + pair | 28 + 28 | **0** | target absent ⇒ `backup_target_absent`/**error**; return ⇒ `backup_target_restored`/**info** |
|
||||
| **I2** + pair | 28 + 28 | **0** | non-target ⇒ **generic** `storage_disconnected`/error → `storage_reconnected`/info |
|
||||
| **I3** | 56 | **0** | `bound_under_parent=false` while the namespace is unusable, both drives |
|
||||
| **I4** | 56 | **0** | guest init boot-time identical across every bind repair |
|
||||
| **I5** | 28 | **0** | healthy ⇒ zero absent events, target reads healthy |
|
||||
| **I6** | 28 | **0** | healthy carries no degraded message |
|
||||
| **I7** | 28 | **0** | **every restore returned the discriminator asked for — 28/28** |
|
||||
| **I10** | 135 | **0** | 4 × `type: secret` present in the unit; 1 × `type: password` **absent**, asserted as absence |
|
||||
| **I11** | 28 | **0** | no secret value in controller or hub logs |
|
||||
| BACKUP / REDEPLOY / KILL-CTRL / REBOOT | 56 / 28 / 28 / 3 | **0** | atom outcomes |
|
||||
|
||||
The row counts are themselves a check that nothing was silently skipped: I3 and I4 at **56** (twice per
|
||||
cycle — both drives), I10 at **135** (5 secret-class fields × 27), REBOOT at **3** (cycles 7/14/21).
|
||||
Counts of 28 rather than 27 include the one-cycle smoke test, which wrote to the same journal and
|
||||
restarts its numbering at 1 — the totals are right, the cycle *labels* collide.
|
||||
|
||||
**A clean invariant is a result**: I1's discrimination, I2's genericity, the pairing of both, I4's
|
||||
no-restart repair and I7's discriminator held over **27 consecutive cycles** of detach, reattach,
|
||||
backup, restore, controller kill, app redeploy and three guest reboots. Nothing drifted at iteration 38
|
||||
because the run stopped at 27 — the tail beyond that is untested, not proven absent.
|
||||
|
||||
### Two behaviours worth recording, both observed repeatedly
|
||||
|
||||
- **The drive comes back on a different device node and the bind still heals.** `adatok` left as
|
||||
`/dev/sdb` and returned as `/dev/sdd`; `bound_under_parent` went true again and the contents were
|
||||
readable, with the guest's init boot-time unchanged. That is R-117's stale-device case, hit on every
|
||||
detach cycle rather than once.
|
||||
- **`health_degraded (warning)` accompanies the target-absent event** and clears on return, alongside
|
||||
the specific `backup_target_*` pair.
|
||||
|
||||
## 4c. Primitives proven by hand before automation
|
||||
|
||||
| Step | Observed |
|
||||
|---|---|
|
||||
| backup | `POST /api/backup/run` → `Mentés elindítva`, settles in ~23–34 s |
|
||||
| restore | `POST /backup/restore` (form) is **async**; polled on `/api/backup/restore-status`, never `IsRunning()` |
|
||||
| I7, first proof | seeded A → backup → seeded B → restored A; rallly returned **A** while the other three still read **B** |
|
||||
| I1 | `backup_target_absent (error) — A rendszermentés meghajtója nem érhető el: Mentes` |
|
||||
| I2 | `storage_disconnected (error) — Meghajtó váratlanul leválasztva: Adatok` |
|
||||
| I6 degraded copy | *"A rendszermentés meghajtója nem érhető el — amíg vissza nem csatlakoztatod, a teljes rendszermentés nem készül el."* |
|
||||
| I10 | rallly `DB_PASSWORD`+`SECRET_PASSWORD`, homebox `HBOX_AUTH_API_KEY_PEPPER`, papra `AUTH_SECRET` present; grafana `GF_SECURITY_ADMIN_PASSWORD` **absent**; unit mode `0600` |
|
||||
|
||||
## 5. Findings
|
||||
|
||||
### R-156 — papra's data is neither persisted nor backed up, and it reports healthy
|
||||
@@ -223,55 +290,107 @@ defence is a catalog gate asserting each template's mounted volume is a path the
|
||||
**Not fixed here** — the fences forbid it, and a fix mid-run would prove a version that did not exist
|
||||
when the run started.
|
||||
|
||||
### 5.2 — Investigated and DISPROVED: `/api/disks` reports `state=attached` for an absent drive
|
||||
|
||||
Recorded because the *chase* is the useful artefact, not because anything is broken.
|
||||
|
||||
With `adatok` physically removed, `/api/disks` kept reporting `state: "attached"` for it across three
|
||||
polls (~90 s) — while `/dev/sdb` was gone, `/mnt/adatok` was absent from `/proc/mounts`, and the guest
|
||||
bind returned `Input/output error`. The other fields were right (`backing_device: ""`,
|
||||
`guest_attached: false`, `bound_under_parent: false`).
|
||||
|
||||
It looked like the R-116/R-117 family, and there is a real consumer:
|
||||
`internal/web/intermediary.go:230` — `present[d.MountPath] |= d.State == "attached"`. A presence gate
|
||||
reading an absent drive as present is precisely I3's failure mode.
|
||||
|
||||
**It is inert, and the gate is correct.** `planDriveGates` only gates paths under
|
||||
`StableParentDir+"/"` (`/mnt/felhom-drives/…`). The registered path is the **stable** one, whose
|
||||
presence is computed from `d.BoundUnderParent` — observed **false** — not from `State`. The
|
||||
`State`-derived entry is keyed on the **raw** `/mnt/adatok`, which is not a registered stable path, so
|
||||
the loop skips it. The observable end-to-end behaviour agrees: the storage page showed
|
||||
*"Meghajtó leválasztva: Adatok"* with a disconnect timestamp and a reconnect action, i.e. the gate fired.
|
||||
|
||||
The stale `state` field comes from the **registry** row surviving in the union after the
|
||||
storage-observation row drops out (a raw enrolled drive is not a PVE storage), carrying its configured
|
||||
`MountPath`. **No `R-n` minted** — no consumer is misled, and the R-116 comment's claim that this
|
||||
"cannot make the gate read an absent drive as PRESENT" held under test.
|
||||
|
||||
### Not filed
|
||||
|
||||
- **demo-hp SSH key** — already R-129.
|
||||
- **Tier 3 isolation** — §3; two recorded deliberate positions, not a defect.
|
||||
- **`/api/disks` `state`** — §5.2, disproved.
|
||||
|
||||
---
|
||||
|
||||
## 6. RTO/RPO
|
||||
## 6. RTO/RPO — measured
|
||||
|
||||
**No measurements.** They are a byproduct of Phase B restores, which did not run. Nothing is
|
||||
extrapolated; no band is claimed.
|
||||
**28 restores, every one returning the correct discriminator.** Wall-clock is measured from the restore
|
||||
request to **the app serving the correct data** (the canary read back over rallly's real network path),
|
||||
not to "restore returned".
|
||||
|
||||
| Tier | App | Data volume | n | min | median | p90 | max | mean |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| **Tier 1 (local)** | rallly (postgres) | **66 MB** volume / 67 MB recovery unit | 28 | 38.8 s | **42.0 s** | 42.5 s | 44.3 s | 42.0 s |
|
||||
|
||||
**Which band this covers: the S band only, and only its lower end.** 66 MB is a small app by any
|
||||
reading, and the spread is tight — 5.5 s between min and max over 28 runs — which says the cost is
|
||||
dominated by fixed work (stack stop, volume restore, stack start, health wait) rather than by bytes.
|
||||
**Nothing here licenses an extrapolation to M or L**: the byte-proportional term is precisely what
|
||||
66 MB fails to exercise. A second point at a much larger volume is needed before any curve is claimed,
|
||||
and none was taken.
|
||||
|
||||
**RPO is NOT measured.** It is a function of backup *frequency*, and the soak drove backups on demand
|
||||
rather than on the schedule, so the observed intervals say nothing about the product's RPO.
|
||||
|
||||
---
|
||||
|
||||
## 7. I1–I11
|
||||
## 7. I1–I11 across cycles
|
||||
|
||||
**Not measured across cycles.** Only the healthy baseline (I5/I6) and the discriminator mechanism (I7)
|
||||
were established, as Phase A gates. A clean invariant is only a result with a cycle count behind it,
|
||||
and there is no count to report.
|
||||
Full table in §4b. **I1, I2 (and both pairs), I3, I4, I5, I6, I7, I10 and I11 held over 27 consecutive
|
||||
cycles — 586 checks, 0 violations.** No violation was deterministic and none was racy, because there
|
||||
were none; the honest statement is that the run found no drift **within 27 cycles**, not that none
|
||||
exists beyond them.
|
||||
|
||||
**I8 was not checked** — Tier 3 never ran (§3). **I9 was not automated** — see §8.
|
||||
|
||||
---
|
||||
|
||||
## 8. What did not run, and why
|
||||
|
||||
**Phase B did not start.** Phase A was budgeted at ~1 h by the brief and took ~5.5 h, almost entirely
|
||||
in places the brief could not have predicted:
|
||||
Phase A overran badly (~5.5 h against the brief's ~1 h) — 1.26.1 is a public release image with no
|
||||
auto-install path, so day-0 was a blind screendump-and-`sendkey` walk; the Tier-3 question (§3) had to
|
||||
be settled before a customer could exist at all, since `dr_tier` is fixed at creation; and a false
|
||||
start on drive enrolment had to be backed out. **Phase B was therefore deliberately not launched at
|
||||
04:00** — the brief's own fence, *"a test rig producing false negatives is worse than no rig"* — and
|
||||
was built and run the next morning instead, where its first cycle could be watched.
|
||||
|
||||
- ISO **1.26.1** turned out to be a public release image with no auto-install path, so the install was
|
||||
a blind screendump-and-`sendkey` walk (~1.5 h) rather than an unattended boot.
|
||||
- The Tier-3 investigation (§3) had to be settled before a customer could be created at all, because
|
||||
`dr_tier` is decided at customer-creation time.
|
||||
- The enrol false start, and the CSRF/session/Bearer probing needed to drive the real endpoints.
|
||||
**Atom coverage: 6 of the brief's ~12 suggested families.** Stated plainly rather than implied:
|
||||
|
||||
That put the runner — the most correctness-sensitive component, the thing that decides destructive
|
||||
atoms unattended and judges eleven invariants — at ~04:00 with ~3 h of usable night. **I stopped
|
||||
rather than write it there.** The brief's own fence is the reason: *"A test rig producing false
|
||||
negatives is worse than no rig."* A soak whose judgements cannot be trusted would not just waste the
|
||||
night, it would contaminate the register with findings nobody could rely on.
|
||||
| Atom (brief B1) | Ran |
|
||||
|---|---|
|
||||
| back up Tier 1/2 · restore + verify by discriminator · detach/reattach **target** · detach/reattach **non-target** · delete an app and redeploy · reboot the guest | **YES** |
|
||||
| back up / restore **Tier 3** | **NO** — §3, structurally impossible to isolate |
|
||||
| abort a filesystem **in place** without the device disappearing (R-117 Q7) | **NO** |
|
||||
| kill the **agent** mid-backup · **hard-reset the VM** mid-write · reboot the **VM** | **NO** |
|
||||
| **concurrent** backup+restore · **concurrent** backup+detach | **NO** |
|
||||
| fill a drive to near-full and continue | **NO** |
|
||||
|
||||
**Not run:** every B1 atom; I1–I11 across cycles; §B3 RTO/RPO; A5's disk budget, watchdog and
|
||||
heartbeat (A5 exists to bound Phase B and was not written in isolation from it).
|
||||
**`kill_controller` is not "mid-backup".** It restarts the controller at a permuted point in the
|
||||
cycle, so it sometimes lands after a backup and sometimes nowhere near one. It exercises recovery, not
|
||||
the mid-write race the brief asked for. Recorded because the atom name would otherwise overclaim.
|
||||
|
||||
**What is ready.** The rig is built, gated and idle: VM 311 installed and claimed, two drives enrolled
|
||||
with the backup target healthy, four apps healthy spanning both D5 secret classes, a working
|
||||
discriminator across all four, an authenticated API path onto the controller, and both isolation
|
||||
denials captured. The driver library (`c10lib.py`) already implements the parts that took the
|
||||
longest — the jump-host command path, the authenticated API helper, canary seed/read, and the
|
||||
red-proofed psql read path. **Phase B needs the atom set, the invariant checks and the watchdog on
|
||||
top of that, then it can run in daylight where its first cycles can be watched.**
|
||||
**`reboot_guest` was appended after the shuffle, not permuted into it**, so it always ran last in
|
||||
cycles 7/14/21 and **never interleaved with a detach**. Reboot-during-detach is untested.
|
||||
|
||||
**I8** — not checked; Tier 3 never ran. **I9** (Tier-1/2 restore with the guest's `app.yaml` moved
|
||||
aside, data read over the app's real network path) — **not automated**. It was proven on this exact
|
||||
controller 0.188.0 by the tester-gate run hours earlier
|
||||
(`tester-gate-golden-0.188.0-2026-07-31.md` §5, step 6), and that is cited rather than re-claimed:
|
||||
this campaign did not execute it.
|
||||
|
||||
**The tail is untested, not clean.** 27 cycles is the count; the brief's interest in "the state that
|
||||
quietly drifts on the thirty-eighth" is not answered by a 27-cycle run.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -0,0 +1,141 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Campaign 10 — shared driver library. Runs on DooPlex, NOT inside the VM:
|
||||
the soak's atoms kill the controller, the agent and the VM itself, so anything
|
||||
running inside would die with the thing it is testing.
|
||||
|
||||
Canary model (brief A4): every app carries a marker naming the backup GENERATION
|
||||
its data came from. Without it, a restore that returns stale or empty data is
|
||||
indistinguishable from a good one — this arc produced six checks that passed for
|
||||
the wrong reason.
|
||||
|
||||
rallly -> a row in a cc_proof TABLE in postgres, read over the app's real
|
||||
network path (docker run --network container:rallly ... psql -h
|
||||
rallly-postgres). NOT 127.0.0.1 inside the postgres container,
|
||||
which postgres trusts and which produced D5's false pass.
|
||||
others -> a marker file inside the app's own docker volume (what gets dumped).
|
||||
"""
|
||||
import json, os, subprocess, time
|
||||
|
||||
HOME = os.path.expanduser("~/.config/campaign10")
|
||||
VM_IP = "192.168.0.105"
|
||||
JUMP = "demo-hp"
|
||||
VMID = "311"
|
||||
GUEST = "9201"
|
||||
|
||||
HOSTPW = json.load(open(os.path.join(HOME, "host-recovery.json")))["password"]
|
||||
SECRETS = json.load(open(os.path.join(HOME, "app-secrets.json")))
|
||||
|
||||
# app -> (container, volume mount dir) for the file-marker apps
|
||||
FILE_APPS = {
|
||||
"grafana": ("grafana", "/var/lib/grafana"),
|
||||
"homebox": ("homebox", "/data"),
|
||||
"papra": ("papra", "/app/data"),
|
||||
}
|
||||
ALL_APPS = ["rallly", "homebox", "grafana", "papra"]
|
||||
|
||||
|
||||
def _run(args, timeout=300):
|
||||
env = dict(os.environ, SSHPASS=HOSTPW, LC_ALL="C")
|
||||
try:
|
||||
p = subprocess.run(args, capture_output=True, text=True, timeout=timeout, env=env)
|
||||
return p.returncode, p.stdout, p.stderr
|
||||
except subprocess.TimeoutExpired:
|
||||
return 124, "", "TIMEOUT"
|
||||
|
||||
|
||||
def box(cmd, timeout=300):
|
||||
"""Run a command on the campaign PVE host (the VM), via the demo-hp jump."""
|
||||
return _run(["sshpass", "-e", "ssh", "-o", "StrictHostKeyChecking=no",
|
||||
"-o", "ConnectTimeout=20", "-J", JUMP, f"root@{VM_IP}",
|
||||
"LC_ALL=C " + cmd], timeout)
|
||||
|
||||
|
||||
def guest(cmd, timeout=300):
|
||||
"""Run a command inside guest 9201."""
|
||||
return box(f"pct exec {GUEST} -- bash -c {shq(cmd)}", timeout)
|
||||
|
||||
|
||||
def hp(cmd, timeout=180):
|
||||
"""Run a command on demo-hp itself (for qm: reset, stop, disk detach...)."""
|
||||
return _run(["ssh", "-o", "ConnectTimeout=20", JUMP, "LC_ALL=C " + cmd], timeout)
|
||||
|
||||
|
||||
def shq(s):
|
||||
return "'" + s.replace("'", "'\\''") + "'"
|
||||
|
||||
|
||||
def api(method, path, body=None, timeout=300):
|
||||
"""Authenticated controller API call through the on-guest helper."""
|
||||
if body is None:
|
||||
rc, out, _ = guest(f"/root/c10api.sh {method} {path} 2>/dev/null", timeout)
|
||||
return out
|
||||
import base64
|
||||
b64 = base64.b64encode(json.dumps(body).encode()).decode()
|
||||
rc, out, _ = guest(
|
||||
f"echo {b64} | base64 -d > /tmp/.b && /root/c10api.sh {method} {path} "
|
||||
f'"$(cat /tmp/.b)" --json; shred -u /tmp/.b 2>/dev/null', timeout)
|
||||
return out
|
||||
|
||||
|
||||
def jparse(raw):
|
||||
try:
|
||||
return json.loads(raw[raw.index("{"):raw.rindex("}") + 1])
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
|
||||
# ---------------------------------------------------------------- canaries
|
||||
|
||||
def _psql(sql, timeout=180):
|
||||
"""Read/write rallly's DB over the path DATABASE_URL actually names."""
|
||||
pw = SECRETS["rallly"]["values"]["DB_PASSWORD"]
|
||||
url = f"postgresql://rallly:{pw}@rallly-postgres:5432/rallly"
|
||||
cmd = ("docker run --rm --network container:rallly postgres:16-alpine "
|
||||
f"psql {shq(url)} -tAc {shq(sql)}")
|
||||
rc, out, err = guest(cmd, timeout)
|
||||
return rc, out.strip(), err.strip()
|
||||
|
||||
|
||||
def seed(gen):
|
||||
"""Write the generation marker into every app. Returns {app: ok}."""
|
||||
res = {}
|
||||
_psql("CREATE TABLE IF NOT EXISTS cc_proof (id serial primary key, gen text, at timestamptz default now())")
|
||||
rc, out, err = _psql(f"INSERT INTO cc_proof (gen) VALUES ('{gen}') RETURNING gen")
|
||||
res["rallly"] = (gen in out)
|
||||
for app, (cont, d) in FILE_APPS.items():
|
||||
# -u 0: papra's volume is root-owned while the container runs as nonroot (R-156),
|
||||
# so the app itself cannot write there. Seeding as root keeps the canary in the
|
||||
# volume the BACKUP dumps, which is what I7 needs to observe.
|
||||
rc, out, err = guest(
|
||||
f"docker exec -u 0 {cont} sh -c {shq(f'echo {gen} > {d}/cc_proof.txt && cat {d}/cc_proof.txt')}", 180)
|
||||
res[app] = (gen in out)
|
||||
return res
|
||||
|
||||
|
||||
def read_canaries():
|
||||
"""Read each app's marker back. Returns {app: value-or-None}."""
|
||||
res = {}
|
||||
rc, out, err = _psql("SELECT gen FROM cc_proof ORDER BY id DESC LIMIT 1")
|
||||
res["rallly"] = out.strip() or None
|
||||
for app, (cont, d) in FILE_APPS.items():
|
||||
rc, out, err = guest(f"docker exec {cont} sh -c {shq(f'cat {d}/cc_proof.txt 2>/dev/null')}", 180)
|
||||
v = out.strip()
|
||||
res[app] = v or None
|
||||
return res
|
||||
|
||||
|
||||
def containers():
|
||||
rc, out, _ = guest("docker ps --format '{{.Names}}|{{.Status}}'", 120)
|
||||
d = {}
|
||||
for line in out.strip().splitlines():
|
||||
if "|" in line:
|
||||
n, s = line.split("|", 1)
|
||||
d[n.strip()] = s.strip()
|
||||
return d
|
||||
|
||||
|
||||
def guest_init_pid():
|
||||
"""I4: a stale-device bind must repair WITHOUT the guest restarting."""
|
||||
rc, out, _ = box(f"pct exec {GUEST} -- cat /proc/1/stat 2>/dev/null", 120)
|
||||
rc2, boot, _ = box(f"pct exec {GUEST} -- stat -c %Y /proc/1 2>/dev/null", 120)
|
||||
return boot.strip()
|
||||
@@ -0,0 +1,333 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Campaign 10 — Phase B soak runner. Runs on DooPlex (outside the VM it abuses).
|
||||
|
||||
Shape (brief B1): a set of atomic operations composed into cycles in varying order,
|
||||
with EVERY invariant checked EVERY cycle — drift at iteration 38 is the point.
|
||||
|
||||
Every atom and every invariant here was proven BY HAND before automation
|
||||
(see the audit §5); nothing in this file asserts a behaviour that was not first
|
||||
observed live.
|
||||
|
||||
Writes: journal.tsv (one row per invariant check), runner.log, status.txt (heartbeat).
|
||||
Halts cleanly on: disk floor breach, VM gone, I11 breach (secret leak).
|
||||
"""
|
||||
import json, os, random, subprocess, sys, time, traceback
|
||||
import c10lib as L
|
||||
|
||||
EV = "/mnt/5_hdd/felhom.eu/git/felhom.eu/documentation/tests/campaign10-evidence-2026-07-31"
|
||||
STATE = os.path.join(EV, "state")
|
||||
os.makedirs(STATE, exist_ok=True)
|
||||
JOURNAL = os.path.join(STATE, "journal.tsv")
|
||||
RUNLOG = os.path.join(STATE, "runner.log")
|
||||
STATUS = os.path.join(STATE, "status.txt")
|
||||
|
||||
APPS = ["rallly", "homebox", "grafana", "papra"] # docker-volume apps
|
||||
DRIVE_APP = "calibre-web" # binds /mnt/felhom-drives/adatok
|
||||
TARGET_DISK, TARGET_VOL = "scsi2", "c10-scratch:311/vm-311-disk-3.qcow2" # mentes = backup target
|
||||
NONTGT_DISK, NONTGT_VOL = "scsi1", "c10-scratch:311/vm-311-disk-2.qcow2" # adatok
|
||||
FLOOR_GB = 120 # halt if /mnt/nvme-1tb free drops below this
|
||||
MAX_CYCLES = int(os.environ.get("C10_CYCLES", "40"))
|
||||
DEADLINE = time.time() + float(os.environ.get("C10_HOURS", "6")) * 3600
|
||||
|
||||
CYCLE = 0
|
||||
VIOL = []
|
||||
|
||||
|
||||
def log(msg):
|
||||
line = "%s %s" % (time.strftime("%H:%M:%S"), msg)
|
||||
print(line, flush=True)
|
||||
with open(RUNLOG, "a") as fh:
|
||||
fh.write(line + "\n")
|
||||
|
||||
|
||||
def rec(inv, ok, detail=""):
|
||||
"""One journal row per invariant check. Violations do NOT stop the run (brief B2)."""
|
||||
with open(JOURNAL, "a") as fh:
|
||||
fh.write("%d\t%s\t%s\t%s\t%s\n" % (CYCLE, time.strftime("%FT%TZ", time.gmtime()),
|
||||
inv, "PASS" if ok else "VIOLATION", detail[:400]))
|
||||
if not ok:
|
||||
VIOL.append((CYCLE, inv, detail[:300]))
|
||||
log(" !! %s VIOLATION: %s" % (inv, detail[:220]))
|
||||
|
||||
|
||||
def heartbeat(phase):
|
||||
with open(STATUS, "w") as fh:
|
||||
fh.write("cycle=%d\nphase=%s\nutc=%s\nviolations=%d\n"
|
||||
% (CYCLE, phase, time.strftime("%FT%TZ", time.gmtime()), len(VIOL)))
|
||||
|
||||
|
||||
# ------------------------------------------------------------------ helpers
|
||||
|
||||
def hub_events(since="3m"):
|
||||
"""Hub-side event stream: type + severity, the observable I1/I2 assert on."""
|
||||
p = subprocess.run(["sudo", "kubectl", "-n", "felhom-system", "logs", "deploy/hub",
|
||||
"--since=" + since], capture_output=True, text=True, timeout=120)
|
||||
out = []
|
||||
for line in p.stdout.splitlines():
|
||||
if "Event from c10-soak:" in line:
|
||||
seg = line.split("Event from c10-soak:", 1)[1].strip()
|
||||
typ = seg.split()[0]
|
||||
sev = seg.split("(", 1)[1].split(")", 1)[0] if "(" in seg else "?"
|
||||
out.append((typ, sev, seg))
|
||||
return out
|
||||
|
||||
|
||||
def target_state():
|
||||
return (L.jparse(L.api("GET", "/api/storage/backup-target")) or {}).get("data", {}) or {}
|
||||
|
||||
|
||||
def disks():
|
||||
return ((L.jparse(L.api("GET", "/api/disks")) or {}).get("data", {}) or {}).get("disks", [])
|
||||
|
||||
|
||||
def wait_backup(timeout=900):
|
||||
t0 = time.time()
|
||||
while time.time() - t0 < timeout:
|
||||
d = ((L.jparse(L.api("GET", "/api/backup/status")) or {}).get("data") or {})
|
||||
if not d.get("running"):
|
||||
return d
|
||||
time.sleep(10)
|
||||
return {"timeout": True}
|
||||
|
||||
|
||||
def wait_restore(timeout=900):
|
||||
t0 = time.time()
|
||||
while time.time() - t0 < timeout:
|
||||
d = ((L.jparse(L.api("GET", "/api/backup/restore-status")) or {}).get("data") or {})
|
||||
if d and not d.get("running"):
|
||||
return d
|
||||
time.sleep(10)
|
||||
return {"timeout": True}
|
||||
|
||||
|
||||
def settle(seconds=130):
|
||||
"""Agent tick + host-report + hub event propagation. Measured at ~25-60s; 130 gives margin."""
|
||||
time.sleep(seconds)
|
||||
|
||||
|
||||
# ------------------------------------------------------------------ atoms
|
||||
|
||||
def atom_backup():
|
||||
L.api("POST", "/api/backup/run", {})
|
||||
d = wait_backup()
|
||||
ok = bool(d.get("db_dump", {}).get("success", True)) and not d.get("timeout")
|
||||
rec("BACKUP", ok, json.dumps(d)[:300])
|
||||
return ok
|
||||
|
||||
|
||||
def atom_restore_verify():
|
||||
"""I7 — the whole point: a restore must return the discriminator asked for."""
|
||||
app = "rallly" # the DB app; its canary is a real DB row
|
||||
genA = "C10-C%03d-A-%s" % (CYCLE, time.strftime("%H%M%S"))
|
||||
L.seed(genA)
|
||||
if not atom_backup():
|
||||
return
|
||||
genB = "C10-C%03d-B-%s" % (CYCLE, time.strftime("%H%M%S"))
|
||||
L.seed(genB) # must NOT survive the restore
|
||||
snaps = L.jparse(L.api("GET", "/api/backup/snapshots?stack=%s" % app)) or {}
|
||||
pts = snaps.get("data") or []
|
||||
if not pts:
|
||||
rec("I7", False, "no restore points for %s" % app)
|
||||
return
|
||||
sid = pts[0].get("short_id")
|
||||
t0 = time.time()
|
||||
L.guest('/root/c10api.sh POST /backup/restore "stack_name=%s&snapshot_id=%s" 2>/dev/null' % (app, sid))
|
||||
d = wait_restore()
|
||||
rto = time.time() - t0
|
||||
got = L.read_canaries().get(app)
|
||||
rec("I7", got == genA,
|
||||
"app=%s want=%s got=%s snap=%s restore_ok=%s rto=%.1fs"
|
||||
% (app, genA, got, sid, (d.get("last") or {}).get("ok"), rto))
|
||||
# RTO/RPO byproduct (brief B3): to app-serving-correct-data, not to "restore returned"
|
||||
with open(os.path.join(STATE, "rto.tsv"), "a") as fh:
|
||||
fh.write("%d\t%s\t%s\ttier1\t%.1f\t%s\n" % (CYCLE, time.strftime("%FT%TZ", time.gmtime()),
|
||||
app, rto, got == genA))
|
||||
|
||||
|
||||
def _detach(disk, vol, label, expect_type, expect_recover):
|
||||
"""I1/I2 — the absent event must be the RIGHT one, and the pair must match."""
|
||||
before_boot = L.guest("stat -c %Y /proc/1")[1].strip()
|
||||
L.hp("qm set 311 --delete %s" % disk)
|
||||
settle()
|
||||
evs = hub_events("4m")
|
||||
absent = [e for e in evs if e[0] in ("backup_target_absent", "storage_disconnected")]
|
||||
got = absent[-1][0] if absent else None
|
||||
sev = absent[-1][1] if absent else None
|
||||
rec("I1" if expect_type == "backup_target_absent" else "I2",
|
||||
got == expect_type and sev == "error",
|
||||
"%s absent -> got=%s sev=%s (want %s/error)" % (label, got, sev, expect_type))
|
||||
|
||||
# I3: an unusable namespace must not read as bound
|
||||
for d in disks():
|
||||
if d.get("guest_path", "") and label in str(d.get("guest_path", "")):
|
||||
rec("I3", d.get("bound_under_parent") is False,
|
||||
"%s bound_under_parent=%s while absent" % (label, d.get("bound_under_parent")))
|
||||
|
||||
L.hp("qm set 311 --%s %s" % (disk, vol))
|
||||
settle()
|
||||
evs2 = hub_events("4m")
|
||||
back = [e for e in evs2 if e[0] in ("backup_target_restored", "storage_reconnected")]
|
||||
got2 = back[-1][0] if back else None
|
||||
sev2 = back[-1][1] if back else None
|
||||
rec("I1-pair" if expect_type == "backup_target_absent" else "I2-pair",
|
||||
got2 == expect_recover and sev2 == "info",
|
||||
"%s return -> got=%s sev=%s (want %s/info)" % (label, got2, sev2, expect_recover))
|
||||
|
||||
# I4: the bind repairs WITHOUT the guest restarting
|
||||
after_boot = L.guest("stat -c %Y /proc/1")[1].strip()
|
||||
rec("I4", before_boot == after_boot and before_boot != "",
|
||||
"guest init boot before=%s after=%s (must be equal)" % (before_boot, after_boot))
|
||||
|
||||
|
||||
def atom_detach_target():
|
||||
_detach(TARGET_DISK, TARGET_VOL, "mentes", "backup_target_absent", "backup_target_restored")
|
||||
|
||||
|
||||
def atom_detach_nontarget():
|
||||
_detach(NONTGT_DISK, NONTGT_VOL, "adatok", "storage_disconnected", "storage_reconnected")
|
||||
|
||||
|
||||
def atom_reboot_guest():
|
||||
L.box("pct reboot 9201", timeout=300)
|
||||
for _ in range(40):
|
||||
time.sleep(15)
|
||||
if "felhom-controller" in L.containers():
|
||||
break
|
||||
rec("REBOOT", "felhom-controller" in L.containers(), "controller back after guest reboot")
|
||||
|
||||
|
||||
def atom_kill_controller():
|
||||
L.guest("docker restart felhom-controller >/dev/null 2>&1 &")
|
||||
time.sleep(45)
|
||||
rec("KILL-CTRL", "felhom-controller" in L.containers(), "controller recovered after kill")
|
||||
|
||||
|
||||
def atom_redeploy_app():
|
||||
app = random.choice(["homebox", "grafana"])
|
||||
L.api("POST", "/api/stacks/%s/remove" % app, {})
|
||||
time.sleep(20)
|
||||
sec = L.SECRETS.get(app, {}).get("values", {})
|
||||
if sec:
|
||||
L.api("POST", "/api/stacks/%s/deploy" % app, {"values": sec})
|
||||
for _ in range(20):
|
||||
time.sleep(15)
|
||||
if app in L.containers():
|
||||
break
|
||||
rec("REDEPLOY", app in L.containers(), "%s redeployed" % app)
|
||||
|
||||
|
||||
# ------------------------------------------------------------------ per-cycle invariants
|
||||
|
||||
def check_healthy_baseline():
|
||||
"""I5/I6 — the over-correction check: healthy must render nothing."""
|
||||
ts = target_state()
|
||||
degraded = ts.get("degraded")
|
||||
evs = [e for e in hub_events("3m") if e[0] in ("backup_target_absent", "storage_disconnected")]
|
||||
rec("I5", degraded is False and not evs,
|
||||
"degraded=%s absent_events=%d target=%s" % (degraded, len(evs), ts.get("target")))
|
||||
if degraded is False:
|
||||
rec("I6", "message" not in ts or not ts.get("message"),
|
||||
"healthy state must carry no degraded message; got=%s" % str(ts.get("message"))[:120])
|
||||
|
||||
|
||||
UNIT = "/mnt/sys_drive/felhom-data/backups/primary/%s/compose/app.yaml"
|
||||
|
||||
def check_secret_class_travel():
|
||||
"""I10 — `type: secret` travels to the local unit; `type: password` NEVER does.
|
||||
Asserted in BOTH directions: the withheld class staying withheld is the half
|
||||
that silently rots. Key NAMES only; no value is ever read."""
|
||||
for app, meta in L.SECRETS.items():
|
||||
classes = meta.get("secret_classes", {})
|
||||
if not classes:
|
||||
continue
|
||||
rc, keys, _ = L.guest("grep -oE '^ *[A-Z_0-9]+:' " + (UNIT % app) +
|
||||
" 2>/dev/null | tr -d ' :' | tr '\\n' ' '")
|
||||
present = set(keys.split())
|
||||
if not present:
|
||||
rec("I10", False, "%s: recovery unit unreadable/absent" % app)
|
||||
continue
|
||||
for ev, c in classes.items():
|
||||
if c["type"] == "secret":
|
||||
rec("I10", ev in present, "%s/%s type=secret must travel; in_unit=%s"
|
||||
% (app, ev, ev in present))
|
||||
elif c["type"] == "password":
|
||||
rec("I10", ev not in present, "%s/%s type=password must NEVER travel; in_unit=%s"
|
||||
% (app, ev, ev in present))
|
||||
|
||||
|
||||
def check_secrets_absent():
|
||||
"""I11 — no secret value in any log, event or hub payload. Breach STOPS the run."""
|
||||
vals = [v for a in L.SECRETS.values() for k, v in a.get("values", {}).items()
|
||||
if k not in ("DOMAIN", "SUBDOMAIN") and v and len(v) > 8]
|
||||
hay = L.guest("docker logs felhom-controller --since 20m 2>&1 | tail -c 200000")[1]
|
||||
p = subprocess.run(["sudo", "kubectl", "-n", "felhom-system", "logs", "deploy/hub", "--since=20m"],
|
||||
capture_output=True, text=True, timeout=120)
|
||||
hay += p.stdout
|
||||
leaked = [v[:6] + "..." for v in vals if v in hay]
|
||||
rec("I11", not leaked, "leaked=%s" % leaked)
|
||||
return not leaked
|
||||
|
||||
|
||||
def watchdog():
|
||||
rc, out, _ = L.hp("df --output=avail -BG /mnt/nvme-1tb | tail -1")
|
||||
try:
|
||||
free = int(out.strip().rstrip("G"))
|
||||
except Exception:
|
||||
free = 9999
|
||||
rc2, vm, _ = L.hp("qm status 311")
|
||||
alive = "running" in vm
|
||||
if free < FLOOR_GB:
|
||||
log("WATCHDOG: free %dG < floor %dG — halting cleanly" % (free, FLOOR_GB)); return False
|
||||
if not alive:
|
||||
log("WATCHDOG: VM 311 not running (%s) — halting cleanly" % vm.strip()); return False
|
||||
return True
|
||||
|
||||
|
||||
# ------------------------------------------------------------------ main
|
||||
|
||||
ATOMS = [atom_backup, atom_restore_verify, atom_detach_target,
|
||||
atom_detach_nontarget, atom_kill_controller, atom_redeploy_app]
|
||||
|
||||
def main():
|
||||
global CYCLE
|
||||
log("=== Campaign 10 Phase B start — max %d cycles, deadline %s ==="
|
||||
% (MAX_CYCLES, time.strftime("%H:%M", time.localtime(DEADLINE))))
|
||||
if not os.path.exists(JOURNAL):
|
||||
with open(JOURNAL, "w") as fh:
|
||||
fh.write("cycle\tutc\tinvariant\tverdict\tdetail\n")
|
||||
rng = random.Random(20260801)
|
||||
while CYCLE < MAX_CYCLES and time.time() < DEADLINE:
|
||||
CYCLE += 1
|
||||
heartbeat("start")
|
||||
if not watchdog():
|
||||
break
|
||||
order = ATOMS[:]
|
||||
rng.shuffle(order) # permutation, not a fixed catalogue
|
||||
# a reboot is expensive; fold it in every 7th cycle only
|
||||
if CYCLE % 7 == 0:
|
||||
order.append(atom_reboot_guest)
|
||||
log("cycle %d: %s" % (CYCLE, " -> ".join(a.__name__.replace("atom_", "") for a in order)))
|
||||
for a in order:
|
||||
heartbeat(a.__name__)
|
||||
try:
|
||||
a()
|
||||
except Exception as e:
|
||||
rec(a.__name__, False, "EXCEPTION %s" % e)
|
||||
log(" atom %s raised: %s" % (a.__name__, traceback.format_exc().splitlines()[-1]))
|
||||
heartbeat("invariants")
|
||||
try:
|
||||
check_healthy_baseline()
|
||||
check_secret_class_travel()
|
||||
if not check_secrets_absent():
|
||||
log("I11 BREACH — stopping the run immediately per brief B2"); break
|
||||
except Exception as e:
|
||||
log("invariant pass raised: %s" % e)
|
||||
log("cycle %d done — violations so far: %d" % (CYCLE, len(VIOL)))
|
||||
heartbeat("finished")
|
||||
log("=== finished after %d cycles, %d violations ===" % (CYCLE, len(VIOL)))
|
||||
for c, i, d in VIOL:
|
||||
log(" cycle %d %s: %s" % (c, i, d))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,92 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Campaign 10 — deploy apps through the REAL endpoints.
|
||||
|
||||
Mirrors the controller's own generator semantics (internal/stacks/deploy.go:870 generateValue):
|
||||
password:N -> N random alphanumerics
|
||||
hex:N -> N random BYTES, hex-encoded (2N chars)
|
||||
base64key:N-> "base64:" + base64(N random bytes)
|
||||
static:X -> X
|
||||
Runs on DooPlex; talks to the guest via ssh -J demo-hp + pct exec + /root/c10api.sh.
|
||||
Secrets are written to a 0600 manifest, never printed.
|
||||
"""
|
||||
import base64, json, os, secrets, string, subprocess, sys
|
||||
|
||||
APPS = sys.argv[1:] or ["rallly", "homebox", "grafana", "papra"]
|
||||
DOMAIN = "c10.felhom.eu"
|
||||
HOME = os.path.expanduser("~/.config/campaign10")
|
||||
HOSTPW = json.load(open(os.path.join(HOME, "host-recovery.json")))["password"]
|
||||
|
||||
|
||||
def ssh(cmd, timeout=900):
|
||||
full = ["sshpass", "-e", "ssh", "-o", "StrictHostKeyChecking=no",
|
||||
"-o", "ConnectTimeout=25", "-J", "demo-hp", "root@192.168.0.105",
|
||||
"LC_ALL=C " + cmd]
|
||||
env = dict(os.environ, SSHPASS=HOSTPW, LC_ALL="C")
|
||||
return subprocess.run(full, capture_output=True, text=True, timeout=timeout, env=env).stdout
|
||||
|
||||
|
||||
def api(method, path, body=None):
|
||||
if body is None:
|
||||
return ssh(f"pct exec 9201 -- /root/c10api.sh {method} {path} 2>/dev/null")
|
||||
b64 = base64.b64encode(json.dumps(body).encode()).decode()
|
||||
# body travels base64 so no quoting/locale can mangle a secret
|
||||
return ssh("pct exec 9201 -- bash -c \"echo %s | base64 -d > /tmp/.b && "
|
||||
"/root/c10api.sh %s %s \\\"\\$(cat /tmp/.b)\\\" --json; shred -u /tmp/.b\" 2>/dev/null"
|
||||
% (b64, method, path))
|
||||
|
||||
|
||||
def gen(spec):
|
||||
kind, _, param = spec.partition(":")
|
||||
if kind == "password":
|
||||
al = string.ascii_letters + string.digits
|
||||
return "".join(secrets.choice(al) for _ in range(int(param)))
|
||||
if kind == "hex":
|
||||
return secrets.token_bytes(int(param)).hex()
|
||||
if kind == "base64key":
|
||||
return "base64:" + base64.b64encode(secrets.token_bytes(int(param))).decode()
|
||||
if kind == "static":
|
||||
return param
|
||||
raise ValueError("unknown generator %r" % spec)
|
||||
|
||||
|
||||
manifest_path = os.path.join(HOME, "app-secrets.json")
|
||||
manifest = json.load(open(manifest_path)) if os.path.exists(manifest_path) else {}
|
||||
|
||||
for app in APPS:
|
||||
raw = api("GET", f"/api/stacks/{app}/deploy-fields")
|
||||
try:
|
||||
meta = json.loads(raw[raw.index("{"):raw.rindex("}") + 1])["data"]["metadata"]
|
||||
except Exception as e:
|
||||
print(f"{app:12s} FIELDS-FAIL {e} :: {raw[:160]!r}")
|
||||
continue
|
||||
|
||||
values, classes = {}, {}
|
||||
for f in meta.get("deploy_fields", []):
|
||||
ev, typ, spec, dflt = f["env_var"], f.get("type", ""), f.get("generate", ""), f.get("default", "")
|
||||
if typ == "domain":
|
||||
values[ev] = DOMAIN
|
||||
elif spec:
|
||||
values[ev] = gen(spec)
|
||||
elif dflt:
|
||||
values[ev] = dflt
|
||||
elif f.get("required"):
|
||||
print(f"{app:12s} WARN required field {ev} has no default/generator")
|
||||
if typ in ("secret", "password"):
|
||||
classes[ev] = {"type": typ, "data_key": bool(f.get("data_key")), "label": f.get("label", "")}
|
||||
|
||||
manifest[app] = {"values": values, "secret_classes": classes,
|
||||
"subdomain": values.get("SUBDOMAIN", ""), "domain": DOMAIN}
|
||||
|
||||
out = api("POST", f"/api/stacks/{app}/deploy", {"values": values})
|
||||
ok = '"ok":true' in out
|
||||
print(f"{app:12s} deploy -> {'OK' if ok else 'FAIL'} "
|
||||
f"secret={sum(1 for c in classes.values() if c['type']=='secret')} "
|
||||
f"password={sum(1 for c in classes.values() if c['type']=='password')} "
|
||||
f"data_key={sum(1 for c in classes.values() if c['data_key'])}")
|
||||
if not ok:
|
||||
print(" ", out.strip()[:300])
|
||||
|
||||
with open(manifest_path, "w") as fh:
|
||||
json.dump(manifest, fh, indent=1)
|
||||
os.chmod(manifest_path, 0o600)
|
||||
print("\nsecrets + secret-class map written to", manifest_path, "(0600, not printed)")
|
||||
@@ -0,0 +1,62 @@
|
||||
#!/bin/bash
|
||||
# Campaign 10 — blind console driver for VM 311 on demo-hp.
|
||||
# snap <label> : screendump the VM console -> PNG on DooPlex (for visual Read)
|
||||
# key <k> [k...] : sendkey one or more keys (QEMU keynames), 0.25s apart
|
||||
# type <string> : type an ASCII string as sendkey events
|
||||
set -uo pipefail
|
||||
SCRATCH=/tmp/claude-1000/-mnt-5-hdd-felhom-eu-git/0d68ad3e-5c39-4852-8e38-9c029dff2562/scratchpad
|
||||
VM=311
|
||||
H=demo-hp
|
||||
|
||||
mon() { ssh -o ConnectTimeout=10 "$H" "LC_ALL=C qm monitor $VM" <<<"$1" 2>/dev/null | grep -v '^QEMU\|^(qemu)' ; }
|
||||
|
||||
snap() {
|
||||
local label="${1:-x}"
|
||||
ssh -o ConnectTimeout=10 "$H" "LC_ALL=C qm monitor $VM" <<<"screendump /tmp/c10.ppm" >/dev/null 2>&1
|
||||
scp -q "$H:/tmp/c10.ppm" "$SCRATCH/c10-$label.ppm" 2>/dev/null || { echo "snap: scp failed"; return 1; }
|
||||
convert "$SCRATCH/c10-$label.ppm" "$SCRATCH/c10-$label.png" 2>/dev/null || { echo "snap: convert failed"; return 1; }
|
||||
echo "$SCRATCH/c10-$label.png"
|
||||
}
|
||||
|
||||
key() {
|
||||
local cmds=""
|
||||
for k in "$@"; do cmds+="sendkey $k
|
||||
"; done
|
||||
ssh -o ConnectTimeout=10 "$H" "LC_ALL=C qm monitor $VM" <<<"$cmds" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
# type: map ASCII -> qemu keynames, including shifted chars
|
||||
type_str() {
|
||||
local s="$1" cmds="" c
|
||||
local -A M=( [' ']='spc' ['-']='minus' ['.']='dot' ['/']='slash' ['=']='equal'
|
||||
[',']='comma' [';']='semicolon' ["'"]='apostrophe' ['\']='backslash'
|
||||
['[']='bracket_left' [']']='bracket_right' ['`']='grave_accent' )
|
||||
local -A SH=( ['_']='minus' ['+']='equal' ['?']='slash' [':']='semicolon' ['"']='apostrophe'
|
||||
['!']='1' ['@']='2' ['#']='3' ['$']='4' ['%']='5' ['^']='6' ['&']='7'
|
||||
['*']='8' ['(']='9' [')']='0' ['{']='bracket_left' ['}']='bracket_right'
|
||||
['|']='backslash' ['~']='grave_accent' ['<']='comma' ['>']='dot' )
|
||||
for (( i=0; i<${#s}; i++ )); do
|
||||
c="${s:$i:1}"
|
||||
if [[ -n "${SH[$c]:-}" ]]; then cmds+="sendkey shift-${SH[$c]}
|
||||
"
|
||||
elif [[ -n "${M[$c]:-}" ]]; then cmds+="sendkey ${M[$c]}
|
||||
"
|
||||
elif [[ "$c" =~ [A-Z] ]]; then cmds+="sendkey shift-$(tr '[:upper:]' '[:lower:]' <<<"$c")
|
||||
"
|
||||
elif [[ "$c" =~ [a-z0-9] ]]; then cmds+="sendkey $c
|
||||
"
|
||||
else echo "type_str: unmapped char '$c'" >&2; return 1
|
||||
fi
|
||||
done
|
||||
ssh -o ConnectTimeout=10 "$H" "LC_ALL=C qm monitor $VM" <<<"$cmds" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
case "${1:-}" in
|
||||
snap) shift; snap "$@" ;;
|
||||
key) shift; key "$@" ;;
|
||||
type) shift; type_str "$@" ;;
|
||||
# typefile: read the string from a file so a secret never lands in argv/ps
|
||||
typefile) shift; type_str "$(cat "$1")" ;;
|
||||
mon) shift; mon "$@" ;;
|
||||
*) echo "usage: vm.sh {snap <label>|key <k>...|type <str>|typefile <path>|mon <cmd>}"; exit 2 ;;
|
||||
esac
|
||||
@@ -0,0 +1,587 @@
|
||||
cycle utc invariant verdict detail
|
||||
1 2026-08-01T07:20:12Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
1 2026-08-01T07:20:15Z I3 PASS adatok bound_under_parent=False while absent
|
||||
1 2026-08-01T07:22:27Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
1 2026-08-01T07:22:30Z I4 PASS guest init boot before=1785531262 after=1785531262 (must be equal)
|
||||
1 2026-08-01T07:23:14Z REDEPLOY PASS grafana redeployed
|
||||
1 2026-08-01T07:23:56Z BACKUP PASS {"db_dump": {"count": 1, "duration": "29.235715924s", "last_run": "2026-08-01T07:23:45.622922949Z", "success": true}, "enabled": true, "running": false}
|
||||
1 2026-08-01T07:24:48Z BACKUP PASS {"db_dump": {"count": 1, "duration": "34.037544623s", "last_run": "2026-08-01T07:24:42.576575317Z", "success": true}, "enabled": true, "running": false}
|
||||
1 2026-08-01T07:25:51Z I7 PASS app=rallly want=C10-C001-A-092356 got=C10-C001-A-092356 snap=helyi restore_ok=True rto=42.3s
|
||||
1 2026-08-01T07:28:07Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
1 2026-08-01T07:28:10Z I3 PASS mentes bound_under_parent=False while absent
|
||||
1 2026-08-01T07:30:22Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
1 2026-08-01T07:30:25Z I4 PASS guest init boot before=1785531262 after=1785531262 (must be equal)
|
||||
1 2026-08-01T07:31:14Z KILL-CTRL PASS controller recovered after kill
|
||||
1 2026-08-01T07:31:17Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
1 2026-08-01T07:31:17Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
1 2026-08-01T07:31:19Z I11 PASS leaked=[]
|
||||
1 2026-08-01T07:35:53Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
1 2026-08-01T07:35:56Z I3 PASS adatok bound_under_parent=False while absent
|
||||
1 2026-08-01T07:38:09Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
1 2026-08-01T07:38:12Z I4 PASS guest init boot before=1785531262 after=1785531262 (must be equal)
|
||||
1 2026-08-01T07:38:56Z REDEPLOY PASS homebox redeployed
|
||||
1 2026-08-01T07:39:38Z BACKUP PASS {"db_dump": {"count": 1, "duration": "29.454266341s", "last_run": "2026-08-01T07:39:28.065882881Z", "success": true}, "enabled": true, "running": false}
|
||||
1 2026-08-01T07:40:31Z BACKUP PASS {"db_dump": {"count": 1, "duration": "32.574200326s", "last_run": "2026-08-01T07:40:23.804874002Z", "success": true}, "enabled": true, "running": false}
|
||||
1 2026-08-01T07:41:34Z I7 PASS app=rallly want=C10-C001-A-093938 got=C10-C001-A-093938 snap=helyi restore_ok=True rto=41.8s
|
||||
1 2026-08-01T07:43:49Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
1 2026-08-01T07:43:52Z I3 PASS mentes bound_under_parent=False while absent
|
||||
1 2026-08-01T07:46:05Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
1 2026-08-01T07:46:07Z I4 PASS guest init boot before=1785531262 after=1785531262 (must be equal)
|
||||
1 2026-08-01T07:46:56Z KILL-CTRL PASS controller recovered after kill
|
||||
1 2026-08-01T07:46:59Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
1 2026-08-01T07:46:59Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
1 2026-08-01T07:47:01Z I10 PASS rallly/SECRET_PASSWORD type=secret must travel; in_unit=True
|
||||
1 2026-08-01T07:47:01Z I10 PASS rallly/DB_PASSWORD type=secret must travel; in_unit=True
|
||||
1 2026-08-01T07:47:03Z I10 PASS homebox/HBOX_AUTH_API_KEY_PEPPER type=secret must travel; in_unit=True
|
||||
1 2026-08-01T07:47:05Z I10 PASS grafana/GF_SECURITY_ADMIN_PASSWORD type=password must NEVER travel; in_unit=False
|
||||
1 2026-08-01T07:47:07Z I10 PASS papra/AUTH_SECRET type=secret must travel; in_unit=True
|
||||
1 2026-08-01T07:47:09Z I11 PASS leaked=[]
|
||||
2 2026-08-01T07:48:01Z KILL-CTRL PASS controller recovered after kill
|
||||
2 2026-08-01T07:50:16Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
2 2026-08-01T07:50:19Z I3 PASS adatok bound_under_parent=False while absent
|
||||
2 2026-08-01T07:52:32Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
2 2026-08-01T07:52:35Z I4 PASS guest init boot before=1785531262 after=1785531262 (must be equal)
|
||||
2 2026-08-01T07:53:17Z BACKUP PASS {"db_dump": {"count": 1, "duration": "28.724847172s", "last_run": "2026-08-01T07:53:05.968779815Z", "success": true}, "enabled": true, "running": false}
|
||||
2 2026-08-01T07:54:01Z REDEPLOY PASS grafana redeployed
|
||||
2 2026-08-01T07:54:54Z BACKUP PASS {"db_dump": {"count": 1, "duration": "28.880675052s", "last_run": "2026-08-01T07:54:43.377582192Z", "success": true}, "enabled": true, "running": false}
|
||||
2 2026-08-01T07:55:56Z I7 PASS app=rallly want=C10-C002-A-095401 got=C10-C002-A-095401 snap=helyi restore_ok=True rto=41.7s
|
||||
2 2026-08-01T07:58:12Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
2 2026-08-01T07:58:14Z I3 PASS mentes bound_under_parent=False while absent
|
||||
2 2026-08-01T08:00:27Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
2 2026-08-01T08:00:30Z I4 PASS guest init boot before=1785531262 after=1785531262 (must be equal)
|
||||
2 2026-08-01T08:00:32Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
2 2026-08-01T08:00:32Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
2 2026-08-01T08:00:34Z I10 PASS rallly/SECRET_PASSWORD type=secret must travel; in_unit=True
|
||||
2 2026-08-01T08:00:34Z I10 PASS rallly/DB_PASSWORD type=secret must travel; in_unit=True
|
||||
2 2026-08-01T08:00:36Z I10 PASS homebox/HBOX_AUTH_API_KEY_PEPPER type=secret must travel; in_unit=True
|
||||
2 2026-08-01T08:00:38Z I10 PASS grafana/GF_SECURITY_ADMIN_PASSWORD type=password must NEVER travel; in_unit=False
|
||||
2 2026-08-01T08:00:40Z I10 PASS papra/AUTH_SECRET type=secret must travel; in_unit=True
|
||||
2 2026-08-01T08:00:42Z I11 PASS leaked=[]
|
||||
3 2026-08-01T08:03:00Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
3 2026-08-01T08:03:03Z I3 PASS mentes bound_under_parent=False while absent
|
||||
3 2026-08-01T08:05:15Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
3 2026-08-01T08:05:18Z I4 PASS guest init boot before=1785531262 after=1785531262 (must be equal)
|
||||
3 2026-08-01T08:06:02Z REDEPLOY PASS homebox redeployed
|
||||
3 2026-08-01T08:06:44Z BACKUP PASS {"db_dump": {"count": 1, "duration": "28.249083164s", "last_run": "2026-08-01T08:06:32.499808867Z", "success": true}, "enabled": true, "running": false}
|
||||
3 2026-08-01T08:09:00Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
3 2026-08-01T08:09:02Z I3 PASS adatok bound_under_parent=False while absent
|
||||
3 2026-08-01T08:11:15Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
3 2026-08-01T08:11:18Z I4 PASS guest init boot before=1785531262 after=1785531262 (must be equal)
|
||||
3 2026-08-01T08:12:07Z KILL-CTRL PASS controller recovered after kill
|
||||
3 2026-08-01T08:13:00Z BACKUP PASS {"db_dump": {"count": 1, "duration": "28.907036117s", "last_run": "2026-08-01T08:12:49.360548351Z", "success": true}, "enabled": true, "running": false}
|
||||
3 2026-08-01T08:14:04Z I7 PASS app=rallly want=C10-C003-A-101207 got=C10-C003-A-101207 snap=helyi restore_ok=True rto=44.3s
|
||||
3 2026-08-01T08:14:07Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
3 2026-08-01T08:14:07Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
3 2026-08-01T08:14:09Z I10 PASS rallly/SECRET_PASSWORD type=secret must travel; in_unit=True
|
||||
3 2026-08-01T08:14:09Z I10 PASS rallly/DB_PASSWORD type=secret must travel; in_unit=True
|
||||
3 2026-08-01T08:14:11Z I10 PASS homebox/HBOX_AUTH_API_KEY_PEPPER type=secret must travel; in_unit=True
|
||||
3 2026-08-01T08:14:13Z I10 PASS grafana/GF_SECURITY_ADMIN_PASSWORD type=password must NEVER travel; in_unit=False
|
||||
3 2026-08-01T08:14:15Z I10 PASS papra/AUTH_SECRET type=secret must travel; in_unit=True
|
||||
3 2026-08-01T08:14:17Z I11 PASS leaked=[]
|
||||
4 2026-08-01T08:16:35Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
4 2026-08-01T08:16:38Z I3 PASS adatok bound_under_parent=False while absent
|
||||
4 2026-08-01T08:18:51Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
4 2026-08-01T08:18:54Z I4 PASS guest init boot before=1785531262 after=1785531262 (must be equal)
|
||||
4 2026-08-01T08:19:35Z BACKUP PASS {"db_dump": {"count": 1, "duration": "28.425451162s", "last_run": "2026-08-01T08:19:24.403091262Z", "success": true}, "enabled": true, "running": false}
|
||||
4 2026-08-01T08:20:20Z REDEPLOY PASS grafana redeployed
|
||||
4 2026-08-01T08:21:12Z BACKUP PASS {"db_dump": {"count": 1, "duration": "28.411530632s", "last_run": "2026-08-01T08:21:00.742317925Z", "success": true}, "enabled": true, "running": false}
|
||||
4 2026-08-01T08:22:14Z I7 PASS app=rallly want=C10-C004-A-102020 got=C10-C004-A-102020 snap=helyi restore_ok=True rto=42.0s
|
||||
4 2026-08-01T08:24:30Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
4 2026-08-01T08:24:32Z I3 PASS mentes bound_under_parent=False while absent
|
||||
4 2026-08-01T08:26:45Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
4 2026-08-01T08:26:48Z I4 PASS guest init boot before=1785531262 after=1785531262 (must be equal)
|
||||
4 2026-08-01T08:27:37Z KILL-CTRL PASS controller recovered after kill
|
||||
4 2026-08-01T08:27:39Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
4 2026-08-01T08:27:39Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
4 2026-08-01T08:27:41Z I10 PASS rallly/SECRET_PASSWORD type=secret must travel; in_unit=True
|
||||
4 2026-08-01T08:27:41Z I10 PASS rallly/DB_PASSWORD type=secret must travel; in_unit=True
|
||||
4 2026-08-01T08:27:43Z I10 PASS homebox/HBOX_AUTH_API_KEY_PEPPER type=secret must travel; in_unit=True
|
||||
4 2026-08-01T08:27:46Z I10 PASS grafana/GF_SECURITY_ADMIN_PASSWORD type=password must NEVER travel; in_unit=False
|
||||
4 2026-08-01T08:27:47Z I10 PASS papra/AUTH_SECRET type=secret must travel; in_unit=True
|
||||
4 2026-08-01T08:27:50Z I11 PASS leaked=[]
|
||||
5 2026-08-01T08:28:36Z REDEPLOY PASS grafana redeployed
|
||||
5 2026-08-01T08:30:51Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
5 2026-08-01T08:30:54Z I3 PASS adatok bound_under_parent=False while absent
|
||||
5 2026-08-01T08:33:07Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
5 2026-08-01T08:33:10Z I4 PASS guest init boot before=1785531262 after=1785531262 (must be equal)
|
||||
5 2026-08-01T08:33:59Z KILL-CTRL PASS controller recovered after kill
|
||||
5 2026-08-01T08:36:15Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
5 2026-08-01T08:36:18Z I3 PASS mentes bound_under_parent=False while absent
|
||||
5 2026-08-01T08:38:30Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
5 2026-08-01T08:38:33Z I4 PASS guest init boot before=1785531262 after=1785531262 (must be equal)
|
||||
5 2026-08-01T08:39:15Z BACKUP PASS {"db_dump": {"count": 1, "duration": "28.537566027s", "last_run": "2026-08-01T08:39:03.884190323Z", "success": true}, "enabled": true, "running": false}
|
||||
5 2026-08-01T08:40:08Z BACKUP PASS {"db_dump": {"count": 1, "duration": "28.819105251s", "last_run": "2026-08-01T08:39:56.870257525Z", "success": true}, "enabled": true, "running": false}
|
||||
5 2026-08-01T08:41:13Z I7 PASS app=rallly want=C10-C005-A-103915 got=C10-C005-A-103915 snap=helyi restore_ok=True rto=43.0s
|
||||
5 2026-08-01T08:41:16Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
5 2026-08-01T08:41:16Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
5 2026-08-01T08:41:18Z I10 PASS rallly/SECRET_PASSWORD type=secret must travel; in_unit=True
|
||||
5 2026-08-01T08:41:18Z I10 PASS rallly/DB_PASSWORD type=secret must travel; in_unit=True
|
||||
5 2026-08-01T08:41:20Z I10 PASS homebox/HBOX_AUTH_API_KEY_PEPPER type=secret must travel; in_unit=True
|
||||
5 2026-08-01T08:41:22Z I10 PASS grafana/GF_SECURITY_ADMIN_PASSWORD type=password must NEVER travel; in_unit=False
|
||||
5 2026-08-01T08:41:24Z I10 PASS papra/AUTH_SECRET type=secret must travel; in_unit=True
|
||||
5 2026-08-01T08:41:26Z I11 PASS leaked=[]
|
||||
6 2026-08-01T08:42:18Z KILL-CTRL PASS controller recovered after kill
|
||||
6 2026-08-01T08:43:10Z BACKUP PASS {"db_dump": {"count": 1, "duration": "27.890401885s", "last_run": "2026-08-01T08:42:58.392385368Z", "success": true}, "enabled": true, "running": false}
|
||||
6 2026-08-01T08:44:12Z I7 PASS app=rallly want=C10-C006-A-104218 got=C10-C006-A-104218 snap=helyi restore_ok=True rto=41.6s
|
||||
6 2026-08-01T08:46:28Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
6 2026-08-01T08:46:30Z I3 PASS mentes bound_under_parent=False while absent
|
||||
6 2026-08-01T08:48:44Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
6 2026-08-01T08:48:46Z I4 PASS guest init boot before=1785531262 after=1785531262 (must be equal)
|
||||
6 2026-08-01T08:51:02Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
6 2026-08-01T08:51:05Z I3 PASS adatok bound_under_parent=False while absent
|
||||
6 2026-08-01T08:53:18Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
6 2026-08-01T08:53:20Z I4 PASS guest init boot before=1785531262 after=1785531262 (must be equal)
|
||||
6 2026-08-01T08:54:02Z BACKUP PASS {"db_dump": {"count": 1, "duration": "28.101250195s", "last_run": "2026-08-01T08:53:50.441271314Z", "success": true}, "enabled": true, "running": false}
|
||||
6 2026-08-01T08:54:46Z REDEPLOY PASS grafana redeployed
|
||||
6 2026-08-01T08:54:49Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
6 2026-08-01T08:54:49Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
6 2026-08-01T08:54:51Z I10 PASS rallly/SECRET_PASSWORD type=secret must travel; in_unit=True
|
||||
6 2026-08-01T08:54:51Z I10 PASS rallly/DB_PASSWORD type=secret must travel; in_unit=True
|
||||
6 2026-08-01T08:54:53Z I10 PASS homebox/HBOX_AUTH_API_KEY_PEPPER type=secret must travel; in_unit=True
|
||||
6 2026-08-01T08:54:55Z I10 PASS grafana/GF_SECURITY_ADMIN_PASSWORD type=password must NEVER travel; in_unit=False
|
||||
6 2026-08-01T08:54:57Z I10 PASS papra/AUTH_SECRET type=secret must travel; in_unit=True
|
||||
6 2026-08-01T08:54:59Z I11 PASS leaked=[]
|
||||
7 2026-08-01T08:57:17Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
7 2026-08-01T08:57:20Z I3 PASS adatok bound_under_parent=False while absent
|
||||
7 2026-08-01T08:59:33Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
7 2026-08-01T08:59:35Z I4 PASS guest init boot before=1785531262 after=1785531262 (must be equal)
|
||||
7 2026-08-01T09:01:50Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
7 2026-08-01T09:01:54Z I3 PASS mentes bound_under_parent=False while absent
|
||||
7 2026-08-01T09:04:07Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
7 2026-08-01T09:04:09Z I4 PASS guest init boot before=1785531262 after=1785531262 (must be equal)
|
||||
7 2026-08-01T09:04:58Z KILL-CTRL PASS controller recovered after kill
|
||||
7 2026-08-01T09:05:43Z REDEPLOY PASS homebox redeployed
|
||||
7 2026-08-01T09:06:35Z BACKUP PASS {"db_dump": {"count": 1, "duration": "28.192784423s", "last_run": "2026-08-01T09:06:24.336193131Z", "success": true}, "enabled": true, "running": false}
|
||||
7 2026-08-01T09:07:38Z I7 PASS app=rallly want=C10-C007-A-110543 got=C10-C007-A-110543 snap=helyi restore_ok=True rto=42.2s
|
||||
7 2026-08-01T09:08:21Z BACKUP PASS {"db_dump": {"count": 1, "duration": "27.754755491s", "last_run": "2026-08-01T09:08:08.67970607Z", "success": true}, "enabled": true, "running": false}
|
||||
7 2026-08-01T09:09:00Z REBOOT PASS controller back after guest reboot
|
||||
7 2026-08-01T09:09:03Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
7 2026-08-01T09:09:03Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
7 2026-08-01T09:09:05Z I10 PASS rallly/SECRET_PASSWORD type=secret must travel; in_unit=True
|
||||
7 2026-08-01T09:09:05Z I10 PASS rallly/DB_PASSWORD type=secret must travel; in_unit=True
|
||||
7 2026-08-01T09:09:07Z I10 PASS homebox/HBOX_AUTH_API_KEY_PEPPER type=secret must travel; in_unit=True
|
||||
7 2026-08-01T09:09:09Z I10 PASS grafana/GF_SECURITY_ADMIN_PASSWORD type=password must NEVER travel; in_unit=False
|
||||
7 2026-08-01T09:09:11Z I10 PASS papra/AUTH_SECRET type=secret must travel; in_unit=True
|
||||
7 2026-08-01T09:09:13Z I11 PASS leaked=[]
|
||||
8 2026-08-01T09:09:59Z REDEPLOY PASS homebox redeployed
|
||||
8 2026-08-01T09:10:48Z KILL-CTRL PASS controller recovered after kill
|
||||
8 2026-08-01T09:11:41Z BACKUP PASS {"db_dump": {"count": 1, "duration": "29.417683334s", "last_run": "2026-08-01T09:11:30.326680315Z", "success": true}, "enabled": true, "running": false}
|
||||
8 2026-08-01T09:12:45Z I7 PASS app=rallly want=C10-C008-A-111048 got=C10-C008-A-111048 snap=helyi restore_ok=True rto=42.3s
|
||||
8 2026-08-01T09:15:01Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
8 2026-08-01T09:15:04Z I3 PASS adatok bound_under_parent=False while absent
|
||||
8 2026-08-01T09:17:16Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
8 2026-08-01T09:17:19Z I4 PASS guest init boot before=1785575320 after=1785575320 (must be equal)
|
||||
8 2026-08-01T09:19:35Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
8 2026-08-01T09:19:38Z I3 PASS mentes bound_under_parent=False while absent
|
||||
8 2026-08-01T09:21:51Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
8 2026-08-01T09:21:53Z I4 PASS guest init boot before=1785575320 after=1785575320 (must be equal)
|
||||
8 2026-08-01T09:22:35Z BACKUP PASS {"db_dump": {"count": 1, "duration": "28.112766197s", "last_run": "2026-08-01T09:22:23.959739494Z", "success": true}, "enabled": true, "running": false}
|
||||
8 2026-08-01T09:22:38Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
8 2026-08-01T09:22:38Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
8 2026-08-01T09:22:40Z I10 PASS rallly/SECRET_PASSWORD type=secret must travel; in_unit=True
|
||||
8 2026-08-01T09:22:40Z I10 PASS rallly/DB_PASSWORD type=secret must travel; in_unit=True
|
||||
8 2026-08-01T09:22:42Z I10 PASS homebox/HBOX_AUTH_API_KEY_PEPPER type=secret must travel; in_unit=True
|
||||
8 2026-08-01T09:22:44Z I10 PASS grafana/GF_SECURITY_ADMIN_PASSWORD type=password must NEVER travel; in_unit=False
|
||||
8 2026-08-01T09:22:46Z I10 PASS papra/AUTH_SECRET type=secret must travel; in_unit=True
|
||||
8 2026-08-01T09:22:48Z I11 PASS leaked=[]
|
||||
9 2026-08-01T09:23:39Z KILL-CTRL PASS controller recovered after kill
|
||||
9 2026-08-01T09:24:19Z BACKUP PASS {"db_dump": {"count": 1, "duration": "27.120915244s", "last_run": "2026-08-01T09:24:19.437409908Z", "success": true}, "enabled": true, "running": false}
|
||||
9 2026-08-01T09:25:22Z I7 PASS app=rallly want=C10-C009-A-112339 got=C10-C009-A-112339 snap=helyi restore_ok=True rto=41.9s
|
||||
9 2026-08-01T09:26:06Z REDEPLOY PASS grafana redeployed
|
||||
9 2026-08-01T09:28:22Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
9 2026-08-01T09:28:25Z I3 PASS adatok bound_under_parent=False while absent
|
||||
9 2026-08-01T09:30:38Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
9 2026-08-01T09:30:40Z I4 PASS guest init boot before=1785575320 after=1785575320 (must be equal)
|
||||
9 2026-08-01T09:31:10Z BACKUP PASS {"db_dump": {"count": 1, "duration": "27.234736705s", "last_run": "2026-08-01T09:31:09.977587344Z", "success": true}, "enabled": true, "running": false}
|
||||
9 2026-08-01T09:33:26Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
9 2026-08-01T09:33:29Z I3 PASS mentes bound_under_parent=False while absent
|
||||
9 2026-08-01T09:35:42Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
9 2026-08-01T09:35:44Z I4 PASS guest init boot before=1785575320 after=1785575320 (must be equal)
|
||||
9 2026-08-01T09:35:47Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
9 2026-08-01T09:35:47Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
9 2026-08-01T09:35:49Z I10 PASS rallly/SECRET_PASSWORD type=secret must travel; in_unit=True
|
||||
9 2026-08-01T09:35:49Z I10 PASS rallly/DB_PASSWORD type=secret must travel; in_unit=True
|
||||
9 2026-08-01T09:35:51Z I10 PASS homebox/HBOX_AUTH_API_KEY_PEPPER type=secret must travel; in_unit=True
|
||||
9 2026-08-01T09:35:53Z I10 PASS grafana/GF_SECURITY_ADMIN_PASSWORD type=password must NEVER travel; in_unit=False
|
||||
9 2026-08-01T09:35:55Z I10 PASS papra/AUTH_SECRET type=secret must travel; in_unit=True
|
||||
9 2026-08-01T09:35:57Z I11 PASS leaked=[]
|
||||
10 2026-08-01T09:38:14Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
10 2026-08-01T09:38:17Z I3 PASS adatok bound_under_parent=False while absent
|
||||
10 2026-08-01T09:40:30Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
10 2026-08-01T09:40:33Z I4 PASS guest init boot before=1785575320 after=1785575320 (must be equal)
|
||||
10 2026-08-01T09:41:17Z REDEPLOY PASS homebox redeployed
|
||||
10 2026-08-01T09:42:06Z KILL-CTRL PASS controller recovered after kill
|
||||
10 2026-08-01T09:44:22Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
10 2026-08-01T09:44:25Z I3 PASS mentes bound_under_parent=False while absent
|
||||
10 2026-08-01T09:46:38Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
10 2026-08-01T09:46:40Z I4 PASS guest init boot before=1785575320 after=1785575320 (must be equal)
|
||||
10 2026-08-01T09:47:21Z BACKUP PASS {"db_dump": {"count": 1, "duration": "27.035320075s", "last_run": "2026-08-01T09:47:21.013177918Z", "success": true}, "enabled": true, "running": false}
|
||||
10 2026-08-01T09:48:24Z I7 PASS app=rallly want=C10-C010-A-114640 got=C10-C010-A-114640 snap=helyi restore_ok=True rto=41.6s
|
||||
10 2026-08-01T09:48:54Z BACKUP PASS {"db_dump": {"count": 1, "duration": "27.198265248s", "last_run": "2026-08-01T09:48:54.018758879Z", "success": true}, "enabled": true, "running": false}
|
||||
10 2026-08-01T09:48:57Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
10 2026-08-01T09:48:57Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
10 2026-08-01T09:48:59Z I10 PASS rallly/SECRET_PASSWORD type=secret must travel; in_unit=True
|
||||
10 2026-08-01T09:48:59Z I10 PASS rallly/DB_PASSWORD type=secret must travel; in_unit=True
|
||||
10 2026-08-01T09:49:01Z I10 PASS homebox/HBOX_AUTH_API_KEY_PEPPER type=secret must travel; in_unit=True
|
||||
10 2026-08-01T09:49:03Z I10 PASS grafana/GF_SECURITY_ADMIN_PASSWORD type=password must NEVER travel; in_unit=False
|
||||
10 2026-08-01T09:49:05Z I10 PASS papra/AUTH_SECRET type=secret must travel; in_unit=True
|
||||
10 2026-08-01T09:49:07Z I11 PASS leaked=[]
|
||||
11 2026-08-01T09:50:02Z BACKUP PASS {"db_dump": {"count": 1, "duration": "27.500198373s", "last_run": "2026-08-01T09:49:50.111560186Z", "success": true}, "enabled": true, "running": false}
|
||||
11 2026-08-01T09:51:05Z I7 PASS app=rallly want=C10-C011-A-114910 got=C10-C011-A-114910 snap=helyi restore_ok=True rto=41.7s
|
||||
11 2026-08-01T09:53:20Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
11 2026-08-01T09:53:23Z I3 PASS adatok bound_under_parent=False while absent
|
||||
11 2026-08-01T09:55:35Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
11 2026-08-01T09:55:38Z I4 PASS guest init boot before=1785575320 after=1785575320 (must be equal)
|
||||
11 2026-08-01T09:57:54Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
11 2026-08-01T09:57:57Z I3 PASS mentes bound_under_parent=False while absent
|
||||
11 2026-08-01T10:00:10Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
11 2026-08-01T10:00:13Z I4 PASS guest init boot before=1785575320 after=1785575320 (must be equal)
|
||||
11 2026-08-01T10:00:55Z BACKUP PASS {"db_dump": {"count": 1, "duration": "27.274827764s", "last_run": "2026-08-01T10:00:42.619398629Z", "success": true}, "enabled": true, "running": false}
|
||||
11 2026-08-01T10:01:38Z REDEPLOY PASS homebox redeployed
|
||||
11 2026-08-01T10:02:28Z KILL-CTRL PASS controller recovered after kill
|
||||
11 2026-08-01T10:02:30Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
11 2026-08-01T10:02:30Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
11 2026-08-01T10:02:32Z I10 PASS rallly/SECRET_PASSWORD type=secret must travel; in_unit=True
|
||||
11 2026-08-01T10:02:32Z I10 PASS rallly/DB_PASSWORD type=secret must travel; in_unit=True
|
||||
11 2026-08-01T10:02:34Z I10 PASS homebox/HBOX_AUTH_API_KEY_PEPPER type=secret must travel; in_unit=True
|
||||
11 2026-08-01T10:02:36Z I10 PASS grafana/GF_SECURITY_ADMIN_PASSWORD type=password must NEVER travel; in_unit=False
|
||||
11 2026-08-01T10:02:38Z I10 PASS papra/AUTH_SECRET type=secret must travel; in_unit=True
|
||||
11 2026-08-01T10:02:40Z I11 PASS leaked=[]
|
||||
12 2026-08-01T10:03:26Z REDEPLOY PASS homebox redeployed
|
||||
12 2026-08-01T10:05:42Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
12 2026-08-01T10:05:45Z I3 PASS adatok bound_under_parent=False while absent
|
||||
12 2026-08-01T10:07:57Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
12 2026-08-01T10:08:00Z I4 PASS guest init boot before=1785575320 after=1785575320 (must be equal)
|
||||
12 2026-08-01T10:08:49Z KILL-CTRL PASS controller recovered after kill
|
||||
12 2026-08-01T10:11:04Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
12 2026-08-01T10:11:07Z I3 PASS mentes bound_under_parent=False while absent
|
||||
12 2026-08-01T10:13:20Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
12 2026-08-01T10:13:24Z I4 PASS guest init boot before=1785575320 after=1785575320 (must be equal)
|
||||
12 2026-08-01T10:13:54Z BACKUP PASS {"db_dump": {"count": 1, "duration": "26.82906082s", "last_run": "2026-08-01T10:13:53.343511281Z", "success": true}, "enabled": true, "running": false}
|
||||
12 2026-08-01T10:14:47Z BACKUP PASS {"db_dump": {"count": 1, "duration": "34.794492507s", "last_run": "2026-08-01T10:14:42.108803281Z", "success": true}, "enabled": true, "running": false}
|
||||
12 2026-08-01T10:15:50Z I7 PASS app=rallly want=C10-C012-A-121354 got=C10-C012-A-121354 snap=helyi restore_ok=True rto=41.6s
|
||||
12 2026-08-01T10:15:53Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
12 2026-08-01T10:15:53Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
12 2026-08-01T10:15:54Z I10 PASS rallly/SECRET_PASSWORD type=secret must travel; in_unit=True
|
||||
12 2026-08-01T10:15:54Z I10 PASS rallly/DB_PASSWORD type=secret must travel; in_unit=True
|
||||
12 2026-08-01T10:15:56Z I10 PASS homebox/HBOX_AUTH_API_KEY_PEPPER type=secret must travel; in_unit=True
|
||||
12 2026-08-01T10:15:58Z I10 PASS grafana/GF_SECURITY_ADMIN_PASSWORD type=password must NEVER travel; in_unit=False
|
||||
12 2026-08-01T10:16:00Z I10 PASS papra/AUTH_SECRET type=secret must travel; in_unit=True
|
||||
12 2026-08-01T10:16:02Z I11 PASS leaked=[]
|
||||
13 2026-08-01T10:16:54Z KILL-CTRL PASS controller recovered after kill
|
||||
13 2026-08-01T10:17:38Z REDEPLOY PASS grafana redeployed
|
||||
13 2026-08-01T10:18:18Z BACKUP PASS {"db_dump": {"count": 1, "duration": "27.066037384s", "last_run": "2026-08-01T10:18:18.41231692Z", "success": true}, "enabled": true, "running": false}
|
||||
13 2026-08-01T10:19:22Z I7 PASS app=rallly want=C10-C013-A-121738 got=C10-C013-A-121738 snap=helyi restore_ok=True rto=42.2s
|
||||
13 2026-08-01T10:20:03Z BACKUP PASS {"db_dump": {"count": 1, "duration": "27.463205132s", "last_run": "2026-08-01T10:19:51.680188929Z", "success": true}, "enabled": true, "running": false}
|
||||
13 2026-08-01T10:22:19Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
13 2026-08-01T10:22:22Z I3 PASS mentes bound_under_parent=False while absent
|
||||
13 2026-08-01T10:24:35Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
13 2026-08-01T10:24:37Z I4 PASS guest init boot before=1785575320 after=1785575320 (must be equal)
|
||||
13 2026-08-01T10:26:53Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
13 2026-08-01T10:26:56Z I3 PASS adatok bound_under_parent=False while absent
|
||||
13 2026-08-01T10:29:09Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
13 2026-08-01T10:29:12Z I4 PASS guest init boot before=1785575320 after=1785575320 (must be equal)
|
||||
13 2026-08-01T10:29:14Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
13 2026-08-01T10:29:14Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
13 2026-08-01T10:29:16Z I10 PASS rallly/SECRET_PASSWORD type=secret must travel; in_unit=True
|
||||
13 2026-08-01T10:29:16Z I10 PASS rallly/DB_PASSWORD type=secret must travel; in_unit=True
|
||||
13 2026-08-01T10:29:18Z I10 PASS homebox/HBOX_AUTH_API_KEY_PEPPER type=secret must travel; in_unit=True
|
||||
13 2026-08-01T10:29:20Z I10 PASS grafana/GF_SECURITY_ADMIN_PASSWORD type=password must NEVER travel; in_unit=False
|
||||
13 2026-08-01T10:29:22Z I10 PASS papra/AUTH_SECRET type=secret must travel; in_unit=True
|
||||
13 2026-08-01T10:29:25Z I11 PASS leaked=[]
|
||||
14 2026-08-01T10:29:56Z BACKUP PASS {"db_dump": {"count": 1, "duration": "26.80615982s", "last_run": "2026-08-01T10:29:55.907589946Z", "success": true}, "enabled": true, "running": false}
|
||||
14 2026-08-01T10:30:50Z BACKUP PASS {"db_dump": {"count": 1, "duration": "33.858181263s", "last_run": "2026-08-01T10:30:43.782817699Z", "success": true}, "enabled": true, "running": false}
|
||||
14 2026-08-01T10:31:54Z I7 PASS app=rallly want=C10-C014-A-122956 got=C10-C014-A-122956 snap=helyi restore_ok=True rto=42.4s
|
||||
14 2026-08-01T10:34:09Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
14 2026-08-01T10:34:12Z I3 PASS adatok bound_under_parent=False while absent
|
||||
14 2026-08-01T10:36:25Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
14 2026-08-01T10:36:28Z I4 PASS guest init boot before=1785575320 after=1785575320 (must be equal)
|
||||
14 2026-08-01T10:37:12Z REDEPLOY PASS grafana redeployed
|
||||
14 2026-08-01T10:38:01Z KILL-CTRL PASS controller recovered after kill
|
||||
14 2026-08-01T10:40:17Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
14 2026-08-01T10:40:20Z I3 PASS mentes bound_under_parent=False while absent
|
||||
14 2026-08-01T10:42:33Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
14 2026-08-01T10:42:36Z I4 PASS guest init boot before=1785575320 after=1785575320 (must be equal)
|
||||
14 2026-08-01T10:43:14Z REBOOT PASS controller back after guest reboot
|
||||
14 2026-08-01T10:43:17Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
14 2026-08-01T10:43:17Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
14 2026-08-01T10:43:19Z I10 PASS rallly/SECRET_PASSWORD type=secret must travel; in_unit=True
|
||||
14 2026-08-01T10:43:19Z I10 PASS rallly/DB_PASSWORD type=secret must travel; in_unit=True
|
||||
14 2026-08-01T10:43:21Z I10 PASS homebox/HBOX_AUTH_API_KEY_PEPPER type=secret must travel; in_unit=True
|
||||
14 2026-08-01T10:43:24Z I10 PASS grafana/GF_SECURITY_ADMIN_PASSWORD type=password must NEVER travel; in_unit=False
|
||||
14 2026-08-01T10:43:26Z I10 PASS papra/AUTH_SECRET type=secret must travel; in_unit=True
|
||||
14 2026-08-01T10:43:28Z I11 PASS leaked=[]
|
||||
15 2026-08-01T10:45:45Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
15 2026-08-01T10:45:48Z I3 PASS mentes bound_under_parent=False while absent
|
||||
15 2026-08-01T10:48:01Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
15 2026-08-01T10:48:03Z I4 PASS guest init boot before=1785580975 after=1785580975 (must be equal)
|
||||
15 2026-08-01T10:48:46Z BACKUP PASS {"db_dump": {"count": 1, "duration": "28.270428557s", "last_run": "2026-08-01T10:48:34.163245256Z", "success": true}, "enabled": true, "running": false}
|
||||
15 2026-08-01T10:49:36Z KILL-CTRL PASS controller recovered after kill
|
||||
15 2026-08-01T10:50:20Z REDEPLOY PASS homebox redeployed
|
||||
15 2026-08-01T10:51:01Z BACKUP PASS {"db_dump": {"count": 1, "duration": "27.421623567s", "last_run": "2026-08-01T10:51:00.95301014Z", "success": true}, "enabled": true, "running": false}
|
||||
15 2026-08-01T10:52:04Z I7 PASS app=rallly want=C10-C015-A-125020 got=C10-C015-A-125020 snap=helyi restore_ok=True rto=41.8s
|
||||
15 2026-08-01T10:54:20Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
15 2026-08-01T10:54:23Z I3 PASS adatok bound_under_parent=False while absent
|
||||
15 2026-08-01T10:56:36Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
15 2026-08-01T10:56:39Z I4 PASS guest init boot before=1785580975 after=1785580975 (must be equal)
|
||||
15 2026-08-01T10:56:42Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
15 2026-08-01T10:56:42Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
15 2026-08-01T10:56:45Z I10 PASS rallly/SECRET_PASSWORD type=secret must travel; in_unit=True
|
||||
15 2026-08-01T10:56:45Z I10 PASS rallly/DB_PASSWORD type=secret must travel; in_unit=True
|
||||
15 2026-08-01T10:56:47Z I10 PASS homebox/HBOX_AUTH_API_KEY_PEPPER type=secret must travel; in_unit=True
|
||||
15 2026-08-01T10:56:49Z I10 PASS grafana/GF_SECURITY_ADMIN_PASSWORD type=password must NEVER travel; in_unit=False
|
||||
15 2026-08-01T10:56:51Z I10 PASS papra/AUTH_SECRET type=secret must travel; in_unit=True
|
||||
15 2026-08-01T10:56:54Z I11 PASS leaked=[]
|
||||
16 2026-08-01T10:57:27Z BACKUP PASS {"db_dump": {"count": 1, "duration": "27.683550606s", "last_run": "2026-08-01T10:57:26.606568663Z", "success": true}, "enabled": true, "running": false}
|
||||
16 2026-08-01T10:59:43Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
16 2026-08-01T10:59:48Z I3 PASS mentes bound_under_parent=False while absent
|
||||
16 2026-08-01T11:02:02Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
16 2026-08-01T11:02:08Z I4 PASS guest init boot before=1785580975 after=1785580975 (must be equal)
|
||||
16 2026-08-01T11:04:31Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
16 2026-08-01T11:04:40Z I3 PASS adatok bound_under_parent=False while absent
|
||||
16 2026-08-01T11:06:58Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
16 2026-08-01T11:07:01Z I4 PASS guest init boot before=1785580975 after=1785580975 (must be equal)
|
||||
16 2026-08-01T11:08:29Z BACKUP PASS {"db_dump": {"count": 1, "duration": "27.894128293s", "last_run": "2026-08-01T11:08:14.025870917Z", "success": true}, "enabled": true, "running": false}
|
||||
16 2026-08-01T11:09:59Z I7 PASS app=rallly want=C10-C016-A-130701 got=C10-C016-A-130701 snap=helyi restore_ok=True rto=38.8s
|
||||
16 2026-08-01T11:10:54Z KILL-CTRL PASS controller recovered after kill
|
||||
16 2026-08-01T11:11:53Z REDEPLOY PASS grafana redeployed
|
||||
16 2026-08-01T11:12:03Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
16 2026-08-01T11:12:03Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
16 2026-08-01T11:12:11Z I10 PASS rallly/SECRET_PASSWORD type=secret must travel; in_unit=True
|
||||
16 2026-08-01T11:12:11Z I10 PASS rallly/DB_PASSWORD type=secret must travel; in_unit=True
|
||||
16 2026-08-01T11:12:19Z I10 PASS homebox/HBOX_AUTH_API_KEY_PEPPER type=secret must travel; in_unit=True
|
||||
16 2026-08-01T11:12:27Z I10 PASS grafana/GF_SECURITY_ADMIN_PASSWORD type=password must NEVER travel; in_unit=False
|
||||
16 2026-08-01T11:12:36Z I10 PASS papra/AUTH_SECRET type=secret must travel; in_unit=True
|
||||
16 2026-08-01T11:12:43Z I11 PASS leaked=[]
|
||||
17 2026-08-01T11:13:43Z REDEPLOY PASS grafana redeployed
|
||||
17 2026-08-01T11:16:04Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
17 2026-08-01T11:16:08Z I3 PASS adatok bound_under_parent=False while absent
|
||||
17 2026-08-01T11:18:21Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
17 2026-08-01T11:18:23Z I4 PASS guest init boot before=1785580975 after=1785580975 (must be equal)
|
||||
17 2026-08-01T11:18:53Z BACKUP PASS {"db_dump": {"count": 1, "duration": "26.838575753s", "last_run": "2026-08-01T11:18:52.693573505Z", "success": true}, "enabled": true, "running": false}
|
||||
17 2026-08-01T11:19:42Z KILL-CTRL PASS controller recovered after kill
|
||||
17 2026-08-01T11:20:23Z BACKUP PASS {"db_dump": {"count": 1, "duration": "27.317455253s", "last_run": "2026-08-01T11:20:23.002386465Z", "success": true}, "enabled": true, "running": false}
|
||||
17 2026-08-01T11:21:26Z I7 PASS app=rallly want=C10-C017-A-131942 got=C10-C017-A-131942 snap=helyi restore_ok=True rto=41.5s
|
||||
17 2026-08-01T11:23:42Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
17 2026-08-01T11:23:45Z I3 PASS mentes bound_under_parent=False while absent
|
||||
17 2026-08-01T11:25:57Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
17 2026-08-01T11:26:00Z I4 PASS guest init boot before=1785580975 after=1785580975 (must be equal)
|
||||
17 2026-08-01T11:26:02Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
17 2026-08-01T11:26:02Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
17 2026-08-01T11:26:04Z I10 PASS rallly/SECRET_PASSWORD type=secret must travel; in_unit=True
|
||||
17 2026-08-01T11:26:04Z I10 PASS rallly/DB_PASSWORD type=secret must travel; in_unit=True
|
||||
17 2026-08-01T11:26:06Z I10 PASS homebox/HBOX_AUTH_API_KEY_PEPPER type=secret must travel; in_unit=True
|
||||
17 2026-08-01T11:26:08Z I10 PASS grafana/GF_SECURITY_ADMIN_PASSWORD type=password must NEVER travel; in_unit=False
|
||||
17 2026-08-01T11:26:10Z I10 PASS papra/AUTH_SECRET type=secret must travel; in_unit=True
|
||||
17 2026-08-01T11:26:12Z I11 PASS leaked=[]
|
||||
18 2026-08-01T11:28:30Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
18 2026-08-01T11:28:33Z I3 PASS mentes bound_under_parent=False while absent
|
||||
18 2026-08-01T11:30:45Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
18 2026-08-01T11:30:48Z I4 PASS guest init boot before=1785580975 after=1785580975 (must be equal)
|
||||
18 2026-08-01T11:31:38Z KILL-CTRL PASS controller recovered after kill
|
||||
18 2026-08-01T11:33:53Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
18 2026-08-01T11:33:57Z I3 PASS adatok bound_under_parent=False while absent
|
||||
18 2026-08-01T11:36:10Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
18 2026-08-01T11:36:12Z I4 PASS guest init boot before=1785580975 after=1785580975 (must be equal)
|
||||
18 2026-08-01T11:36:42Z BACKUP PASS {"db_dump": {"count": 1, "duration": "27.287771352s", "last_run": "2026-08-01T11:36:41.854058541Z", "success": true}, "enabled": true, "running": false}
|
||||
18 2026-08-01T11:37:27Z REDEPLOY PASS grafana redeployed
|
||||
18 2026-08-01T11:38:08Z BACKUP PASS {"db_dump": {"count": 1, "duration": "27.269077889s", "last_run": "2026-08-01T11:38:07.785076049Z", "success": true}, "enabled": true, "running": false}
|
||||
18 2026-08-01T11:39:12Z I7 PASS app=rallly want=C10-C018-A-133727 got=C10-C018-A-133727 snap=helyi restore_ok=True rto=42.0s
|
||||
18 2026-08-01T11:39:15Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
18 2026-08-01T11:39:15Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
18 2026-08-01T11:39:17Z I10 PASS rallly/SECRET_PASSWORD type=secret must travel; in_unit=True
|
||||
18 2026-08-01T11:39:17Z I10 PASS rallly/DB_PASSWORD type=secret must travel; in_unit=True
|
||||
18 2026-08-01T11:39:19Z I10 PASS homebox/HBOX_AUTH_API_KEY_PEPPER type=secret must travel; in_unit=True
|
||||
18 2026-08-01T11:39:21Z I10 PASS grafana/GF_SECURITY_ADMIN_PASSWORD type=password must NEVER travel; in_unit=False
|
||||
18 2026-08-01T11:39:24Z I10 PASS papra/AUTH_SECRET type=secret must travel; in_unit=True
|
||||
18 2026-08-01T11:39:26Z I11 PASS leaked=[]
|
||||
19 2026-08-01T11:40:18Z KILL-CTRL PASS controller recovered after kill
|
||||
19 2026-08-01T11:41:02Z REDEPLOY PASS homebox redeployed
|
||||
19 2026-08-01T11:41:44Z BACKUP PASS {"db_dump": {"count": 1, "duration": "27.240196615s", "last_run": "2026-08-01T11:41:43.294094532Z", "success": true}, "enabled": true, "running": false}
|
||||
19 2026-08-01T11:42:48Z I7 PASS app=rallly want=C10-C019-A-134102 got=C10-C019-A-134102 snap=helyi restore_ok=True rto=42.1s
|
||||
19 2026-08-01T11:45:03Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
19 2026-08-01T11:45:06Z I3 PASS adatok bound_under_parent=False while absent
|
||||
19 2026-08-01T11:47:20Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
19 2026-08-01T11:47:22Z I4 PASS guest init boot before=1785580975 after=1785580975 (must be equal)
|
||||
19 2026-08-01T11:49:38Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
19 2026-08-01T11:49:41Z I3 PASS mentes bound_under_parent=False while absent
|
||||
19 2026-08-01T11:51:54Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
19 2026-08-01T11:51:56Z I4 PASS guest init boot before=1785580975 after=1785580975 (must be equal)
|
||||
19 2026-08-01T11:52:25Z BACKUP PASS {"db_dump": {"count": 1, "duration": "27.074516344s", "last_run": "2026-08-01T11:52:25.638816606Z", "success": true}, "enabled": true, "running": false}
|
||||
19 2026-08-01T11:52:28Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
19 2026-08-01T11:52:28Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
19 2026-08-01T11:52:30Z I10 PASS rallly/SECRET_PASSWORD type=secret must travel; in_unit=True
|
||||
19 2026-08-01T11:52:30Z I10 PASS rallly/DB_PASSWORD type=secret must travel; in_unit=True
|
||||
19 2026-08-01T11:52:32Z I10 PASS homebox/HBOX_AUTH_API_KEY_PEPPER type=secret must travel; in_unit=True
|
||||
19 2026-08-01T11:52:34Z I10 PASS grafana/GF_SECURITY_ADMIN_PASSWORD type=password must NEVER travel; in_unit=False
|
||||
19 2026-08-01T11:52:36Z I10 PASS papra/AUTH_SECRET type=secret must travel; in_unit=True
|
||||
19 2026-08-01T11:52:39Z I11 PASS leaked=[]
|
||||
20 2026-08-01T11:53:24Z BACKUP PASS {"db_dump": {"count": 1, "duration": "33.58133879s", "last_run": "2026-08-01T11:53:17.277403988Z", "success": true}, "enabled": true, "running": false}
|
||||
20 2026-08-01T11:55:40Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
20 2026-08-01T11:55:43Z I3 PASS mentes bound_under_parent=False while absent
|
||||
20 2026-08-01T11:57:56Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
20 2026-08-01T11:57:58Z I4 PASS guest init boot before=1785580975 after=1785580975 (must be equal)
|
||||
20 2026-08-01T12:00:14Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
20 2026-08-01T12:00:17Z I3 PASS adatok bound_under_parent=False while absent
|
||||
20 2026-08-01T12:02:30Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
20 2026-08-01T12:02:33Z I4 PASS guest init boot before=1785580975 after=1785580975 (must be equal)
|
||||
20 2026-08-01T12:03:17Z REDEPLOY PASS grafana redeployed
|
||||
20 2026-08-01T12:03:58Z BACKUP PASS {"db_dump": {"count": 1, "duration": "26.633748751s", "last_run": "2026-08-01T12:03:57.032814639Z", "success": true}, "enabled": true, "running": false}
|
||||
20 2026-08-01T12:05:02Z I7 PASS app=rallly want=C10-C020-A-140317 got=C10-C020-A-140317 snap=helyi restore_ok=True rto=42.2s
|
||||
20 2026-08-01T12:05:52Z KILL-CTRL PASS controller recovered after kill
|
||||
20 2026-08-01T12:05:55Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
20 2026-08-01T12:05:55Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
20 2026-08-01T12:05:57Z I10 PASS rallly/SECRET_PASSWORD type=secret must travel; in_unit=True
|
||||
20 2026-08-01T12:05:57Z I10 PASS rallly/DB_PASSWORD type=secret must travel; in_unit=True
|
||||
20 2026-08-01T12:05:59Z I10 PASS homebox/HBOX_AUTH_API_KEY_PEPPER type=secret must travel; in_unit=True
|
||||
20 2026-08-01T12:06:01Z I10 PASS grafana/GF_SECURITY_ADMIN_PASSWORD type=password must NEVER travel; in_unit=False
|
||||
20 2026-08-01T12:06:03Z I10 PASS papra/AUTH_SECRET type=secret must travel; in_unit=True
|
||||
20 2026-08-01T12:06:05Z I11 PASS leaked=[]
|
||||
21 2026-08-01T12:06:37Z BACKUP PASS {"db_dump": {"count": 1, "duration": "26.742931297s", "last_run": "2026-08-01T12:06:36.352784544Z", "success": true}, "enabled": true, "running": false}
|
||||
21 2026-08-01T12:07:26Z KILL-CTRL PASS controller recovered after kill
|
||||
21 2026-08-01T12:09:42Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
21 2026-08-01T12:09:45Z I3 PASS adatok bound_under_parent=False while absent
|
||||
21 2026-08-01T12:11:58Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
21 2026-08-01T12:12:01Z I4 PASS guest init boot before=1785580975 after=1785580975 (must be equal)
|
||||
21 2026-08-01T12:12:45Z REDEPLOY PASS homebox redeployed
|
||||
21 2026-08-01T12:15:01Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
21 2026-08-01T12:15:04Z I3 PASS mentes bound_under_parent=False while absent
|
||||
21 2026-08-01T12:17:17Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
21 2026-08-01T12:17:19Z I4 PASS guest init boot before=1785580975 after=1785580975 (must be equal)
|
||||
21 2026-08-01T12:18:01Z BACKUP PASS {"db_dump": {"count": 1, "duration": "27.215452442s", "last_run": "2026-08-01T12:18:01.043730281Z", "success": true}, "enabled": true, "running": false}
|
||||
21 2026-08-01T12:19:03Z I7 PASS app=rallly want=C10-C021-A-141719 got=C10-C021-A-141719 snap=helyi restore_ok=True rto=41.4s
|
||||
21 2026-08-01T12:19:43Z REBOOT PASS controller back after guest reboot
|
||||
21 2026-08-01T12:19:46Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
21 2026-08-01T12:19:46Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
21 2026-08-01T12:19:48Z I10 PASS rallly/SECRET_PASSWORD type=secret must travel; in_unit=True
|
||||
21 2026-08-01T12:19:48Z I10 PASS rallly/DB_PASSWORD type=secret must travel; in_unit=True
|
||||
21 2026-08-01T12:19:50Z I10 PASS homebox/HBOX_AUTH_API_KEY_PEPPER type=secret must travel; in_unit=True
|
||||
21 2026-08-01T12:19:52Z I10 PASS grafana/GF_SECURITY_ADMIN_PASSWORD type=password must NEVER travel; in_unit=False
|
||||
21 2026-08-01T12:19:54Z I10 PASS papra/AUTH_SECRET type=secret must travel; in_unit=True
|
||||
21 2026-08-01T12:19:56Z I11 PASS leaked=[]
|
||||
22 2026-08-01T12:20:51Z BACKUP PASS {"db_dump": {"count": 1, "duration": "35.295073244s", "last_run": "2026-08-01T12:20:46.946104153Z", "success": true}, "enabled": true, "running": false}
|
||||
22 2026-08-01T12:21:54Z I7 PASS app=rallly want=C10-C022-A-141958 got=C10-C022-A-141958 snap=helyi restore_ok=True rto=41.9s
|
||||
22 2026-08-01T12:22:38Z REDEPLOY PASS homebox redeployed
|
||||
22 2026-08-01T12:23:20Z BACKUP PASS {"db_dump": {"count": 1, "duration": "27.506763469s", "last_run": "2026-08-01T12:23:08.027088655Z", "success": true}, "enabled": true, "running": false}
|
||||
22 2026-08-01T12:25:35Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
22 2026-08-01T12:25:38Z I3 PASS adatok bound_under_parent=False while absent
|
||||
22 2026-08-01T12:27:51Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
22 2026-08-01T12:27:54Z I4 PASS guest init boot before=1785586762 after=1785586762 (must be equal)
|
||||
22 2026-08-01T12:28:43Z KILL-CTRL PASS controller recovered after kill
|
||||
22 2026-08-01T12:30:58Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
22 2026-08-01T12:31:01Z I3 PASS mentes bound_under_parent=False while absent
|
||||
22 2026-08-01T12:33:14Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
22 2026-08-01T12:33:17Z I4 PASS guest init boot before=1785586762 after=1785586762 (must be equal)
|
||||
22 2026-08-01T12:33:20Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
22 2026-08-01T12:33:20Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
22 2026-08-01T12:33:22Z I10 PASS rallly/SECRET_PASSWORD type=secret must travel; in_unit=True
|
||||
22 2026-08-01T12:33:22Z I10 PASS rallly/DB_PASSWORD type=secret must travel; in_unit=True
|
||||
22 2026-08-01T12:33:24Z I10 PASS homebox/HBOX_AUTH_API_KEY_PEPPER type=secret must travel; in_unit=True
|
||||
22 2026-08-01T12:33:26Z I10 PASS grafana/GF_SECURITY_ADMIN_PASSWORD type=password must NEVER travel; in_unit=False
|
||||
22 2026-08-01T12:33:28Z I10 PASS papra/AUTH_SECRET type=secret must travel; in_unit=True
|
||||
22 2026-08-01T12:33:30Z I11 PASS leaked=[]
|
||||
23 2026-08-01T12:34:02Z BACKUP PASS {"db_dump": {"count": 1, "duration": "27.296490438s", "last_run": "2026-08-01T12:34:02.179324267Z", "success": true}, "enabled": true, "running": false}
|
||||
23 2026-08-01T12:36:18Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
23 2026-08-01T12:36:21Z I3 PASS mentes bound_under_parent=False while absent
|
||||
23 2026-08-01T12:38:34Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
23 2026-08-01T12:38:37Z I4 PASS guest init boot before=1785586762 after=1785586762 (must be equal)
|
||||
23 2026-08-01T12:39:17Z BACKUP PASS {"db_dump": {"count": 1, "duration": "26.836521386s", "last_run": "2026-08-01T12:39:17.164422568Z", "success": true}, "enabled": true, "running": false}
|
||||
23 2026-08-01T12:40:21Z I7 PASS app=rallly want=C10-C023-A-143837 got=C10-C023-A-143837 snap=helyi restore_ok=True rto=41.9s
|
||||
23 2026-08-01T12:41:11Z KILL-CTRL PASS controller recovered after kill
|
||||
23 2026-08-01T12:41:56Z REDEPLOY PASS grafana redeployed
|
||||
23 2026-08-01T12:44:11Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
23 2026-08-01T12:44:14Z I3 PASS adatok bound_under_parent=False while absent
|
||||
23 2026-08-01T12:46:27Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
23 2026-08-01T12:46:30Z I4 PASS guest init boot before=1785586762 after=1785586762 (must be equal)
|
||||
23 2026-08-01T12:46:32Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
23 2026-08-01T12:46:32Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
23 2026-08-01T12:46:34Z I10 PASS rallly/SECRET_PASSWORD type=secret must travel; in_unit=True
|
||||
23 2026-08-01T12:46:34Z I10 PASS rallly/DB_PASSWORD type=secret must travel; in_unit=True
|
||||
23 2026-08-01T12:46:36Z I10 PASS homebox/HBOX_AUTH_API_KEY_PEPPER type=secret must travel; in_unit=True
|
||||
23 2026-08-01T12:46:38Z I10 PASS grafana/GF_SECURITY_ADMIN_PASSWORD type=password must NEVER travel; in_unit=False
|
||||
23 2026-08-01T12:46:40Z I10 PASS papra/AUTH_SECRET type=secret must travel; in_unit=True
|
||||
23 2026-08-01T12:46:43Z I11 PASS leaked=[]
|
||||
24 2026-08-01T12:47:26Z BACKUP PASS {"db_dump": {"count": 1, "duration": "27.434160964s", "last_run": "2026-08-01T12:47:25.920976261Z", "success": true}, "enabled": true, "running": false}
|
||||
24 2026-08-01T12:48:31Z I7 PASS app=rallly want=C10-C024-A-144645 got=C10-C024-A-144645 snap=helyi restore_ok=True rto=42.5s
|
||||
24 2026-08-01T12:49:02Z BACKUP PASS {"db_dump": {"count": 1, "duration": "27.477758487s", "last_run": "2026-08-01T12:49:00.748171817Z", "success": true}, "enabled": true, "running": false}
|
||||
24 2026-08-01T12:51:17Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
24 2026-08-01T12:51:20Z I3 PASS mentes bound_under_parent=False while absent
|
||||
24 2026-08-01T12:53:33Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
24 2026-08-01T12:53:36Z I4 PASS guest init boot before=1785586762 after=1785586762 (must be equal)
|
||||
24 2026-08-01T12:54:25Z KILL-CTRL PASS controller recovered after kill
|
||||
24 2026-08-01T12:56:40Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
24 2026-08-01T12:56:44Z I3 PASS adatok bound_under_parent=False while absent
|
||||
24 2026-08-01T12:58:57Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
24 2026-08-01T12:59:00Z I4 PASS guest init boot before=1785586762 after=1785586762 (must be equal)
|
||||
24 2026-08-01T12:59:45Z REDEPLOY PASS grafana redeployed
|
||||
24 2026-08-01T12:59:47Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
24 2026-08-01T12:59:47Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
24 2026-08-01T12:59:50Z I10 PASS rallly/SECRET_PASSWORD type=secret must travel; in_unit=True
|
||||
24 2026-08-01T12:59:50Z I10 PASS rallly/DB_PASSWORD type=secret must travel; in_unit=True
|
||||
24 2026-08-01T12:59:52Z I10 PASS homebox/HBOX_AUTH_API_KEY_PEPPER type=secret must travel; in_unit=True
|
||||
24 2026-08-01T12:59:54Z I10 PASS grafana/GF_SECURITY_ADMIN_PASSWORD type=password must NEVER travel; in_unit=False
|
||||
24 2026-08-01T12:59:56Z I10 PASS papra/AUTH_SECRET type=secret must travel; in_unit=True
|
||||
24 2026-08-01T12:59:59Z I11 PASS leaked=[]
|
||||
25 2026-08-01T13:02:17Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
25 2026-08-01T13:02:20Z I3 PASS adatok bound_under_parent=False while absent
|
||||
25 2026-08-01T13:04:33Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
25 2026-08-01T13:04:36Z I4 PASS guest init boot before=1785586762 after=1785586762 (must be equal)
|
||||
25 2026-08-01T13:05:26Z KILL-CTRL PASS controller recovered after kill
|
||||
25 2026-08-01T13:07:41Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
25 2026-08-01T13:07:45Z I3 PASS mentes bound_under_parent=False while absent
|
||||
25 2026-08-01T13:09:58Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
25 2026-08-01T13:10:00Z I4 PASS guest init boot before=1785586762 after=1785586762 (must be equal)
|
||||
25 2026-08-01T13:10:40Z BACKUP PASS {"db_dump": {"count": 1, "duration": "27.129870607s", "last_run": "2026-08-01T13:10:40.81939141Z", "success": true}, "enabled": true, "running": false}
|
||||
25 2026-08-01T13:11:44Z I7 PASS app=rallly want=C10-C025-A-151000 got=C10-C025-A-151000 snap=helyi restore_ok=True rto=42.0s
|
||||
25 2026-08-01T13:12:26Z BACKUP PASS {"db_dump": {"count": 1, "duration": "27.439198049s", "last_run": "2026-08-01T13:12:14.38822499Z", "success": true}, "enabled": true, "running": false}
|
||||
25 2026-08-01T13:13:10Z REDEPLOY PASS homebox redeployed
|
||||
25 2026-08-01T13:13:13Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
25 2026-08-01T13:13:13Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
25 2026-08-01T13:13:15Z I10 PASS rallly/SECRET_PASSWORD type=secret must travel; in_unit=True
|
||||
25 2026-08-01T13:13:15Z I10 PASS rallly/DB_PASSWORD type=secret must travel; in_unit=True
|
||||
25 2026-08-01T13:13:17Z I10 PASS homebox/HBOX_AUTH_API_KEY_PEPPER type=secret must travel; in_unit=True
|
||||
25 2026-08-01T13:13:19Z I10 PASS grafana/GF_SECURITY_ADMIN_PASSWORD type=password must NEVER travel; in_unit=False
|
||||
25 2026-08-01T13:13:21Z I10 PASS papra/AUTH_SECRET type=secret must travel; in_unit=True
|
||||
25 2026-08-01T13:13:24Z I11 PASS leaked=[]
|
||||
26 2026-08-01T13:14:10Z REDEPLOY PASS grafana redeployed
|
||||
26 2026-08-01T13:16:26Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
26 2026-08-01T13:16:29Z I3 PASS adatok bound_under_parent=False while absent
|
||||
26 2026-08-01T13:18:42Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
26 2026-08-01T13:18:44Z I4 PASS guest init boot before=1785586762 after=1785586762 (must be equal)
|
||||
26 2026-08-01T13:19:25Z BACKUP PASS {"db_dump": {"count": 1, "duration": "27.181611353s", "last_run": "2026-08-01T13:19:24.6968582Z", "success": true}, "enabled": true, "running": false}
|
||||
26 2026-08-01T13:20:31Z I7 PASS app=rallly want=C10-C026-A-151844 got=C10-C026-A-151844 snap=helyi restore_ok=True rto=42.9s
|
||||
26 2026-08-01T13:21:20Z KILL-CTRL PASS controller recovered after kill
|
||||
26 2026-08-01T13:23:36Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
26 2026-08-01T13:23:39Z I3 PASS mentes bound_under_parent=False while absent
|
||||
26 2026-08-01T13:25:52Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
26 2026-08-01T13:25:55Z I4 PASS guest init boot before=1785586762 after=1785586762 (must be equal)
|
||||
26 2026-08-01T13:26:24Z BACKUP PASS {"db_dump": {"count": 1, "duration": "27.266368272s", "last_run": "2026-08-01T13:26:24.55559188Z", "success": true}, "enabled": true, "running": false}
|
||||
26 2026-08-01T13:26:27Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
26 2026-08-01T13:26:27Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
26 2026-08-01T13:26:29Z I10 PASS rallly/SECRET_PASSWORD type=secret must travel; in_unit=True
|
||||
26 2026-08-01T13:26:29Z I10 PASS rallly/DB_PASSWORD type=secret must travel; in_unit=True
|
||||
26 2026-08-01T13:26:31Z I10 PASS homebox/HBOX_AUTH_API_KEY_PEPPER type=secret must travel; in_unit=True
|
||||
26 2026-08-01T13:26:33Z I10 PASS grafana/GF_SECURITY_ADMIN_PASSWORD type=password must NEVER travel; in_unit=False
|
||||
26 2026-08-01T13:26:35Z I10 PASS papra/AUTH_SECRET type=secret must travel; in_unit=True
|
||||
26 2026-08-01T13:26:37Z I11 PASS leaked=[]
|
||||
27 2026-08-01T13:27:22Z BACKUP PASS {"db_dump": {"count": 1, "duration": "34.006310162s", "last_run": "2026-08-01T13:27:15.871339683Z", "success": true}, "enabled": true, "running": false}
|
||||
27 2026-08-01T13:28:14Z BACKUP PASS {"db_dump": {"count": 1, "duration": "33.534168063s", "last_run": "2026-08-01T13:28:08.289273214Z", "success": true}, "enabled": true, "running": false}
|
||||
27 2026-08-01T13:29:17Z I7 PASS app=rallly want=C10-C027-A-152722 got=C10-C027-A-152722 snap=helyi restore_ok=True rto=41.8s
|
||||
27 2026-08-01T13:31:33Z I1 PASS mentes absent -> got=backup_target_absent sev=error (want backup_target_absent/error)
|
||||
27 2026-08-01T13:31:36Z I3 PASS mentes bound_under_parent=False while absent
|
||||
27 2026-08-01T13:33:49Z I1-pair PASS mentes return -> got=backup_target_restored sev=info (want backup_target_restored/info)
|
||||
27 2026-08-01T13:33:52Z I4 PASS guest init boot before=1785586762 after=1785586762 (must be equal)
|
||||
27 2026-08-01T13:34:41Z KILL-CTRL PASS controller recovered after kill
|
||||
27 2026-08-01T13:36:57Z I2 PASS adatok absent -> got=storage_disconnected sev=error (want storage_disconnected/error)
|
||||
27 2026-08-01T13:37:00Z I3 PASS adatok bound_under_parent=False while absent
|
||||
27 2026-08-01T13:39:14Z I2-pair PASS adatok return -> got=storage_reconnected sev=info (want storage_reconnected/info)
|
||||
27 2026-08-01T13:39:16Z I4 PASS guest init boot before=1785586762 after=1785586762 (must be equal)
|
||||
27 2026-08-01T13:40:00Z REDEPLOY PASS homebox redeployed
|
||||
27 2026-08-01T13:40:03Z I5 PASS degraded=False absent_events=0 target=felhom-backup
|
||||
27 2026-08-01T13:40:03Z I6 PASS healthy state must carry no degraded message; got=None
|
||||
27 2026-08-01T13:40:04Z I10 PASS rallly/SECRET_PASSWORD type=secret must travel; in_unit=True
|
||||
27 2026-08-01T13:40:04Z I10 PASS rallly/DB_PASSWORD type=secret must travel; in_unit=True
|
||||
27 2026-08-01T13:40:07Z I10 PASS homebox/HBOX_AUTH_API_KEY_PEPPER type=secret must travel; in_unit=True
|
||||
27 2026-08-01T13:40:09Z I10 PASS grafana/GF_SECURITY_ADMIN_PASSWORD type=password must NEVER travel; in_unit=False
|
||||
27 2026-08-01T13:40:11Z I10 PASS papra/AUTH_SECRET type=secret must travel; in_unit=True
|
||||
27 2026-08-01T13:40:13Z I11 PASS leaked=[]
|
||||
|
Can't render this file because it contains an unexpected character in line 7 and column 37.
|
@@ -0,0 +1,28 @@
|
||||
1 2026-08-01T07:25:51Z rallly tier1 42.3 True
|
||||
1 2026-08-01T07:41:34Z rallly tier1 41.8 True
|
||||
2 2026-08-01T07:55:56Z rallly tier1 41.7 True
|
||||
3 2026-08-01T08:14:04Z rallly tier1 44.3 True
|
||||
4 2026-08-01T08:22:14Z rallly tier1 42.0 True
|
||||
5 2026-08-01T08:41:13Z rallly tier1 43.0 True
|
||||
6 2026-08-01T08:44:12Z rallly tier1 41.6 True
|
||||
7 2026-08-01T09:07:38Z rallly tier1 42.2 True
|
||||
8 2026-08-01T09:12:45Z rallly tier1 42.3 True
|
||||
9 2026-08-01T09:25:22Z rallly tier1 41.9 True
|
||||
10 2026-08-01T09:48:24Z rallly tier1 41.6 True
|
||||
11 2026-08-01T09:51:05Z rallly tier1 41.7 True
|
||||
12 2026-08-01T10:15:50Z rallly tier1 41.6 True
|
||||
13 2026-08-01T10:19:22Z rallly tier1 42.2 True
|
||||
14 2026-08-01T10:31:54Z rallly tier1 42.4 True
|
||||
15 2026-08-01T10:52:04Z rallly tier1 41.8 True
|
||||
16 2026-08-01T11:09:59Z rallly tier1 38.8 True
|
||||
17 2026-08-01T11:21:26Z rallly tier1 41.5 True
|
||||
18 2026-08-01T11:39:12Z rallly tier1 42.0 True
|
||||
19 2026-08-01T11:42:48Z rallly tier1 42.1 True
|
||||
20 2026-08-01T12:05:02Z rallly tier1 42.2 True
|
||||
21 2026-08-01T12:19:03Z rallly tier1 41.4 True
|
||||
22 2026-08-01T12:21:54Z rallly tier1 41.9 True
|
||||
23 2026-08-01T12:40:21Z rallly tier1 41.9 True
|
||||
24 2026-08-01T12:48:31Z rallly tier1 42.5 True
|
||||
25 2026-08-01T13:11:44Z rallly tier1 42.0 True
|
||||
26 2026-08-01T13:20:31Z rallly tier1 42.9 True
|
||||
27 2026-08-01T13:29:17Z rallly tier1 41.8 True
|
||||
|
@@ -0,0 +1,60 @@
|
||||
09:17:54 === Campaign 10 Phase B start — max 1 cycles, deadline 10:17 ===
|
||||
09:17:56 cycle 1: detach_nontarget -> redeploy_app -> backup -> restore_verify -> detach_target -> kill_controller
|
||||
09:31:19 cycle 1 done — violations so far: 0
|
||||
09:31:19 === finished after 1 cycles, 0 violations ===
|
||||
09:33:35 === Campaign 10 Phase B start — max 40 cycles, deadline 15:33 ===
|
||||
09:33:37 cycle 1: detach_nontarget -> redeploy_app -> backup -> restore_verify -> detach_target -> kill_controller
|
||||
09:47:09 cycle 1 done — violations so far: 0
|
||||
09:47:11 cycle 2: kill_controller -> detach_nontarget -> backup -> redeploy_app -> restore_verify -> detach_target
|
||||
10:00:42 cycle 2 done — violations so far: 0
|
||||
10:00:44 cycle 3: detach_target -> redeploy_app -> backup -> detach_nontarget -> kill_controller -> restore_verify
|
||||
10:14:17 cycle 3 done — violations so far: 0
|
||||
10:14:19 cycle 4: detach_nontarget -> backup -> redeploy_app -> restore_verify -> detach_target -> kill_controller
|
||||
10:27:50 cycle 4 done — violations so far: 0
|
||||
10:27:52 cycle 5: redeploy_app -> detach_nontarget -> kill_controller -> detach_target -> backup -> restore_verify
|
||||
10:41:26 cycle 5 done — violations so far: 0
|
||||
10:41:28 cycle 6: kill_controller -> restore_verify -> detach_target -> detach_nontarget -> backup -> redeploy_app
|
||||
10:54:59 cycle 6 done — violations so far: 0
|
||||
10:55:01 cycle 7: detach_nontarget -> detach_target -> kill_controller -> redeploy_app -> restore_verify -> backup -> reboot_guest
|
||||
11:09:13 cycle 7 done — violations so far: 0
|
||||
11:09:15 cycle 8: redeploy_app -> kill_controller -> restore_verify -> detach_nontarget -> detach_target -> backup
|
||||
11:22:48 cycle 8 done — violations so far: 0
|
||||
11:22:50 cycle 9: kill_controller -> restore_verify -> redeploy_app -> detach_nontarget -> backup -> detach_target
|
||||
11:35:57 cycle 9 done — violations so far: 0
|
||||
11:35:59 cycle 10: detach_nontarget -> redeploy_app -> kill_controller -> detach_target -> restore_verify -> backup
|
||||
11:49:07 cycle 10 done — violations so far: 0
|
||||
11:49:10 cycle 11: restore_verify -> detach_nontarget -> detach_target -> backup -> redeploy_app -> kill_controller
|
||||
12:02:40 cycle 11 done — violations so far: 0
|
||||
12:02:43 cycle 12: redeploy_app -> detach_nontarget -> kill_controller -> detach_target -> backup -> restore_verify
|
||||
12:16:02 cycle 12 done — violations so far: 0
|
||||
12:16:05 cycle 13: kill_controller -> redeploy_app -> restore_verify -> backup -> detach_target -> detach_nontarget
|
||||
12:29:25 cycle 13 done — violations so far: 0
|
||||
12:29:27 cycle 14: backup -> restore_verify -> detach_nontarget -> redeploy_app -> kill_controller -> detach_target -> reboot_guest
|
||||
12:43:28 cycle 14 done — violations so far: 0
|
||||
12:43:30 cycle 15: detach_target -> backup -> kill_controller -> redeploy_app -> restore_verify -> detach_nontarget
|
||||
12:56:54 cycle 15 done — violations so far: 0
|
||||
12:56:56 cycle 16: backup -> detach_target -> detach_nontarget -> restore_verify -> kill_controller -> redeploy_app
|
||||
13:12:43 cycle 16 done — violations so far: 0
|
||||
13:12:49 cycle 17: redeploy_app -> detach_nontarget -> backup -> kill_controller -> restore_verify -> detach_target
|
||||
13:26:12 cycle 17 done — violations so far: 0
|
||||
13:26:14 cycle 18: detach_target -> kill_controller -> detach_nontarget -> backup -> redeploy_app -> restore_verify
|
||||
13:39:26 cycle 18 done — violations so far: 0
|
||||
13:39:28 cycle 19: kill_controller -> redeploy_app -> restore_verify -> detach_nontarget -> detach_target -> backup
|
||||
13:52:39 cycle 19 done — violations so far: 0
|
||||
13:52:41 cycle 20: backup -> detach_target -> detach_nontarget -> redeploy_app -> restore_verify -> kill_controller
|
||||
14:06:05 cycle 20 done — violations so far: 0
|
||||
14:06:07 cycle 21: backup -> kill_controller -> detach_nontarget -> redeploy_app -> detach_target -> restore_verify -> reboot_guest
|
||||
14:19:56 cycle 21 done — violations so far: 0
|
||||
14:19:58 cycle 22: restore_verify -> redeploy_app -> backup -> detach_nontarget -> kill_controller -> detach_target
|
||||
14:33:30 cycle 22 done — violations so far: 0
|
||||
14:33:32 cycle 23: backup -> detach_target -> restore_verify -> kill_controller -> redeploy_app -> detach_nontarget
|
||||
14:46:43 cycle 23 done — violations so far: 0
|
||||
14:46:45 cycle 24: restore_verify -> backup -> detach_target -> kill_controller -> detach_nontarget -> redeploy_app
|
||||
14:59:59 cycle 24 done — violations so far: 0
|
||||
15:00:01 cycle 25: detach_nontarget -> kill_controller -> detach_target -> restore_verify -> backup -> redeploy_app
|
||||
15:13:24 cycle 25 done — violations so far: 0
|
||||
15:13:26 cycle 26: redeploy_app -> detach_nontarget -> restore_verify -> kill_controller -> detach_target -> backup
|
||||
15:26:37 cycle 26 done — violations so far: 0
|
||||
15:26:39 cycle 27: backup -> restore_verify -> detach_target -> kill_controller -> detach_nontarget -> redeploy_app
|
||||
15:40:13 cycle 27 done — violations so far: 0
|
||||
15:40:13 === finished after 27 cycles, 0 violations ===
|
||||
@@ -0,0 +1,4 @@
|
||||
cycle=27
|
||||
phase=finished
|
||||
utc=2026-08-01T13:40:13Z
|
||||
violations=0
|
||||
Reference in New Issue
Block a user