---
paths:
  - "notes/operations-center-guide.md"
  - "incusos/incusos-proxmox"
  - "incusos/examples/*oc*"
---

# Operations Center

## Basics

- **CLI**: `operations-center` (from GitHub releases or `github.com/FuturFusion/operations-center`).
- **Config**: `~/.config/operations-center/` (copy certs from `~/.config/incus/`).
- **Port**: 8443. Browser needs PKCS#12 client cert (`client.pfx`). Web UI at `/ui/`.
- **v0.3.0** (active dev). Use `--version` to check.
- **No `remote:` suffix**: requires `operations-center remote switch NAME`.

## Provisioning workflow

- **No brownfield**: nodes must boot from OC-provisioned ISO.
- **Token seeds**: `provisioning token seed add/get-image`. No `force_reboot` for Proxmox.
  ```bash
  operations-center provisioning token seed add <UUID> proxmox-preseed \
      /tmp/preseed.yaml --description "No force_reboot for Proxmox"
  operations-center provisioning token seed get-image <UUID> proxmox-preseed \
      /tmp/IncusOS-oc.iso --type iso --architecture x86_64 --channel old-stable
  ```
- **Hybrid deploy** (recommended):
  `incusos-proxmox --iso /tmp/IncusOS-oc.iso --yes lab-oc-nodes.yaml`
- **Self-registration**: nodes register with OC in ~30s after first boot.

## needs_update blocker (critical)

- OC requires `needs_update: false` for `provisioning cluster add`.
- Nodes from latest ISO are `needs_update: true` (never went through OC pipeline).
- **Fix**: use `--channel old-stable` for ISO. OC pushes update, clears flag.

## Cluster formation

```bash
echo '{}' > /tmp/oc-app-config.yaml
operations-center provisioning cluster add oc-cluster \
    https://<NODE_01_IP>:8443 \
    --server-names oc-node-01,oc-node-02,oc-node-03 \
    --server-type incus \
    --application-seed-config /tmp/oc-app-config.yaml
```
- Use `apply_defaults: false` for OC nodes (recommended).
- Empty `{}` app config if cert already in trust store from SEED_DATA.

## Tested limitations

- Inventory NOT real-time -- requires `cluster resync`
- OC reboot breaks OC-managed Proxmox nodes (daemon crash from invalid state.txt)
  - Fix: destroy and redeploy. Proxmox stop/start is safe.
- No cluster member state tracking (always shows `ready`)
- Stale entries from out-of-band changes persist
- Server removal blocked if part of OC cluster
- `needs_update` is pipeline-based, not version-based
- OVN LB has no health checks

## ISO upload skip bug (fixed)

- `--iso` now deletes existing ISO before re-upload (prevents stale reuse).
