frisch
Deployment version visibility for the Nectar Research Cloud.
Nectar services are deployed three ways: ArgoCD applications on kubernetes, docker containers on puppet-managed VMs, and debian packages on VMs and bare metal, each in a test and a prod environment (test is upgraded first). frisch collects the deployed version of every service in both environments, records when each environment changed to that version, and serves a dashboard that shows the version matrix and per-service history, making promotion lag from test to prod visible at a glance.
How it works
collectors -> Observation -> ingest (single writer) -> MariaDB -> API -> SPA
Three collectors, one normalised record:
- argocd (git-declared): walks the history of the per-environment
ArgoCD apps repos, parsing each Application CRD's
spec.source.targetRevision(andspec.sourcesfor multi-source apps). Change dates are exact git commit times; the full history is backfillable. - puppet (git-declared): walks the puppet site repos (one per
environment) and the shared
hieradatarepo, scanning hiera*::image_tagkeys and their# renovate:annotations. Also exact, backfillable. - deb (live): queries the PuppetDB package inventory in each environment for configured package names/patterns. Package versions are not in git, so frisch's own records are the only durable history; change times are intervals ("changed between X and Y"), bounded by the collection interval.
Versions are opaque strings everywhere -- they are never compared or ordered, only equality-checked and timestamped.
Running
pip install -e '.[test]'
frisch db upgrade # create/upgrade the schema
frisch-collect --backfill # first run: full git history
frisch-collect # incremental (the CronJob entry point)
frisch-web # serve the dashboard on :8080
frisch show matrix # the same table, in a terminal
Configuration is layered: FRISCH_* environment variables over a YAML config
file (--config, FRISCH_CONFIG, ~/.config/frisch/frisch.yaml or
/etc/frisch/frisch.yaml) over defaults. See etc/frisch.yaml.sample.
For local development, point the repo urls at your existing checkouts and use
the default SQLite database.
The SPA lives in frontend/ (vite + React); npm run dev proxies /api to a
locally running frisch-web. In the container image the built bundle is
served by the backend.
Deployment prerequisites
- A database and user on the MariaDB cluster in each environment.
- A read-only deploy key for the five source repos.
- PuppetDB package inventory enabled (
package_inventory_enabledon agents) and network/auth access to the PuppetDB endpoints; until then the deb source reports itself unavailable on the status page.
Development
tox # unit tests and lint
tox -e pep8 # lint only
tox -e frontend # build the SPA (needs npm)
Releases use reno for release notes.
Contributions go through gerrit; use conventional commits and git commit -s.
Release files for frisch 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| frisch-0.1.1.tar.gz | 80.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| frisch-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 121.2 kB
Release files / frisch-0.1.1.tar.gz
| Download URL | frisch-0.1.1.tar.gz |
|---|---|
| Size | 80.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
49229899b1a7984a9475bb60e31ddb34d5bb72197028a38433e6ebcb1be71fff
|
|
BLAKE2b-256 checksum How to use checksums |
10b8dcfbbd166f5d195999e89e6c4f8cc3dc4ccf74e9cf97bcb203bb3a2ef33a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / frisch-0.1.1-py3-none-any.whl
| Download URL | frisch-0.1.1-py3-none-any.whl |
|---|---|
| Size | 40.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cfd58cc7fab827f172b8630a3ad8f4b01f311bcd62004ce51ed05328fdf81ee9
|
|
BLAKE2b-256 checksum How to use checksums |
978639d8114d19de52dff01458762b73bcda64653fbfeee35b21367863997744
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|