Sanari · deployment
Package and readiness
What we ship, what they must have, on-prem vs cloud. Bajaj is on-prem / hybrid: Jira Data Center does not live in our SaaS.
Where it runs. Bajaj: skip the cloud strip. Hybrid: UI may sit above the perimeter.
- Operator
- Hybrid UI
- Customer DC
- Query
- Execute
What is in the package
| Part | Form | Role |
|---|---|---|
| sanari-ui | Container | Control plane: inbox, case, blast, APPROVE, allow-list, audit. |
| sanari-collector | Container | Pollers, adapters, indexer, 8B client, case orchestrator. |
| sanari-worker | Container | Allow-listed execute after HITL. Vault checkout. Ansible / SQL / systemd. |
| PostgreSQL 16 + pgvector | Container or their existing PG | Cases, vectors, graph cache, case memory. |
| Local 8B runtime | llama.cpp or vLLM + pinned GGUF | Classifier, RCA prose, Jira comment, possible-fix. Optional GPU. |
| Prompt pack | Versioned files (vN) + GBNF schemas | classify / rca / comment / hint. Hash in the audit line. |
| Runbook pack | YAML, allow-listed | kill-session, restart-api, rollback-api. Restart-db off. |
| Install | Compose + Helm | Same images. On-prem namespace or two VMs. |
Also: SBOM, image hashes, prompt-pack hash, runbook checksum. Air-gap bundle is the same tarball minus outbound license ping.
Sizing
| Apps | Compute | GPU | Note |
|---|---|---|---|
| 2–5 (pilot) | 1 VM · 8 vCPU · 32 GB · 200 GB disk | None (CPU 8B) or 1× T4/L4 | Collector + UI + Postgres together. |
| 20 | 2 VM or 1 small k8s ns · 16 vCPU · 64 GB | 1× L4 | Split poller vs 8B if embed jobs fight CPU. |
| 100 | k8s · collector replicas · 32 vCPU · 128 GB | 1× L4/A10 | Optional Qdrant. Graph still Postgres until blast is slow. |
On-prem (Bajaj default)
Collector, UI, Postgres, and 8B in their DC. No inbound webhook from the internet. Tickets and SQL never leave the farm.
- Network path: collector → Jira DC, Snow, Prom/DT, ELK, Git, Vault, Ansible (egress inside DC).
- No inbound from Sanari cloud required. Optional outbound for license/heartbeat only.
- Service accounts: Jira project BAU (comment + transition), Snow incident (work notes).
- Vault (or CyberArk) path for DB and job-template creds. Short-lived. Worker stores nothing.
- SSO (Entra / AD FS) groups for who may type APPROVE.
- NTP, DNS, backup of Postgres, pinned GGUF on local registry or air-gap bundle.
- Change record: first two runbooks in CAB. Restart-database stays off.
Cloud / hybrid
Sanari is not a full SaaS for Jira Data Center. Cloud means the control plane may sit in our VPC; the collector still sits in theirs.
- Hybrid (typical): UI in Sanari cloud; collector + 8B + Postgres in their DC. TLS out, no inbound punch.
- Full SaaS only if Jira Cloud + all evidence already SaaS — not this tenant.
- Data residency: India collector = India data. Do not stream tickets to a US model API.
- Same service accounts and Vault as on-prem. Same HITL.
- Their firewall: outbound 443 to Sanari control plane (session, not bulk logs).
Readiness checklist
Required vs not. GPU and k8s are optional on the 5-app pilot. Public inbound is never required.
| Item | On-prem | Cloud / hybrid |
|---|---|---|
| Jira DC project + bot account (comment, transition) | Required | Required |
| ServiceNow subprod table incident (work notes) | Required | Required |
| Prometheus or Dynatrace query user (read) | Required | Required |
| SSO group for APPROVE | Required | Required |
| Vault/CyberArk path for runbook creds | Required | Required |
| Deploy-key read on payments-api (API-failure hints) | Required | Required |
| GPU for 8B (optional on pilot; CPU works) | Not required | Not required |
| Kubernetes namespace (optional; Compose is enough for 5 apps) | Not required | Not required |
| Public inbound webhook | Not required | Not required |
| Install OneAgent / extra APM | Not required | Not required |
Component map: architecture.