Observe

Dashboard Provisioning

Provision Folder, Datasource, and Dashboard resources as YAML manifests through a Source — with plan/apply, secrets-by-reference, and per-resource sync status.

Observe → Provisioning is Versus's own dashboards-as-code system — it manages Observe's native Folder, Datasource, and Dashboard objects directly. It is not a Grafana integration: there is no Grafana import step and nothing here talks to an external Grafana instance.

NoteThe page carries a "Phase A · API & File" badge — this is an early capability, and some pieces (like a visible drift badge on an out-of-sync resource) may still be rough around the edges.

Sources

Everything is organized under a Source — a named container for one manifest and its provisioning settings. Click New Source to create one:

  • Name — required.
  • Kind — API ("plan/apply via this UI or CI pipelines") or File ("server-side directory").
  • Enable prune — an optional checkbox: when on, applying a plan deletes any previously-provisioned resource that's no longer present in the manifest.
New Provisioning Source form with Name field, a Kind dropdown showing API (plan/apply via this UI or CI pipelines) selected, and an Enable prune checkbox
A Source's Kind is API or File — prune is opt-in per source, off by default.

The Manifest

Each source holds one Manifest YAML document — a multi-document YAML file (documents separated by ---), one document per resource. Every document needs an apiVersion: observe/v1, a kind of Folder, Datasource, or Dashboard, a metadata.uid that identifies the resource going forward, and a spec block with that resource's fields:

apiVersion: observe/v1
kind: Folder
metadata:
  uid: infra
spec:
  title: Infrastructure
---
apiVersion: observe/v1
kind: Datasource
metadata:
  uid: prom-prod
spec:
  name: Prometheus (prod)
  type: prometheus
  url: http://prometheus:9090
  jsonData:
    httpMethod: POST

Secrets are never inlined in plaintext — the header above the editor is explicit about this: "secrets via ref only". A field like a bearer token is written as an env:// reference (e.g. env://PROM_BEARER_TOKEN) and resolved from an environment variable at apply time, not stored in the manifest itself.

Provisioning page with a source named ADC Dashboards selected, showing the Manifest YAML editor pre-filled with a Folder and a Datasource document, and Plan / Apply buttons below
A source's detail view: the manifest editor, Plan and Apply buttons, and a Provisioned Resources list underneath.

Plan and Apply

1Click Plan

Versus diffs the manifest against what's already provisioned and shows a change list — each line is a create, update, or delete paired with the resource's kind and uid. A toast confirms "Plan ready: N change(s)".

Plan result showing 3 changes: create Folder infra, create Datasource prom-prod, create Dashboard adc-overview
Plan — 3 changes: every pending create, update, and delete is listed by kind and uid before you apply anything.
2Click Apply

Applying runs the plan for real. Each resource succeeds or fails independently — a failure in one resource doesn't block the others. In the example above, the Folder and Dashboard applied cleanly while the Datasource failed because its env://PROM_BEARER_TOKEN reference had no matching environment variable set, producing a toast of "Applied 2, 1 failed" and an inline error on the source card.

CautionAn unresolved secret reference fails that one resource's apply — it does not fail silently and does not fall back to an empty value. Set the referenced environment variable and re-run Plan/Apply to pick it up.

Provisioned Resources and Locking

Successfully applied resources appear under Provisioned Resources (N), each with a sync-status label (in_sync for a resource that matches its manifest) and a lock icon — provisioned resources are managed by their source going forward. The source header also shows a lock · drift indicator alongside the prune setting you chose when creating it.

Provisioned Resources list showing two in_sync resources — a Dashboard named adc-overview and a Folder named infra — each with a lock icon, plus a red error banner about an unresolved env secret reference
Provisioned Resources: applied resources show in_sync status and a lock icon; the failed Datasource is called out separately.

Quick Reference

ItemDetail
ContainerA Source — one manifest plus Kind (API/File) and a prune setting
Manifest formatMulti-document YAML: apiVersion: observe/v1, kind, metadata.uid, spec
Supported kindsFolder, Datasource, Dashboard
SecretsReferenced only, e.g. env://PROM_BEARER_TOKEN — never inlined
PlanDiffs manifest vs. current state; lists create/update/delete by kind + uid
ApplyApplies each resource independently; one failure doesn’t block the rest
PruneOff by default; when on, deletes resources absent from the manifest
Sync statusin_sync shown per provisioned resource, with a lock icon
GrafanaNot used — this provisions Versus Observe’s own native resources