Files
vmware-api-simulator/docs/operations.md
T
inecs 131e2e63d2 Document 2026-07-18 lab test results across EN/RU guides.
Record offline 161 passed, green test-vsphere probes, and full pulumi-tests
7/7 with REST matrix 1987/1987 (critical=0); note the Terraform cookbook
binary mismatch separately.
2026-07-18 09:38:37 +03:00

150 lines
4.5 KiB
Markdown

**Language / Язык:** [English](operations.md) | [Русский](ru/operations.md)
# Operations
## Day-2 commands
```bash
make up # start stack
make down # stop stack
make restart
make logs
make dev # foreground reload-oriented workflow
make db-migrate # idempotent migrations
make seed # atomic reseed (SEED_VSPHERE_PROFILE=large by default)
make shell # interactive tools container
```
## Migrations
Ordered SQL files apply transactionally and record SHA-256 checksums.
Re-running `make db-migrate` is safe. Altering an already-applied migration
is rejected. `/health/ready` stays unavailable until the latest packaged
migration is present.
## Reseed
```bash
make seed # large (default)
VSPHERE_PROFILE=small make seed
VSPHERE_PROFILE=demo-cluster make seed
```
Reseed replaces the PostgreSQL inventory atomically. External automation
state (Terraform state files, Pulumi stacks, Ansible inventories that encode
VM MOIDs/names) may then drift — refresh or recreate those side channels.
See [Seed profiles](seed-profiles.md).
## Worker recovery
CIS task workers use PostgreSQL leases (`FOR UPDATE SKIP LOCKED`). After a
crash or restart, expired leases are reclaimed and incomplete work can resume
safely. Tunables: `TASK_WORKER_CONCURRENCY`, `TASK_LEASE_SECONDS`,
`SIMULATION_TIME_SCALE`.
## Changing the default catalog major
1. The default catalog major is **9** (8.0 U2 / Automation 9.1 surface) at
cold start; this does not gate the runtime route table (see
[API versions](api-versions.md)).
2. Use the Web UI "Apply as runtime" or
`POST /ui/api/contract/apply?major=N` to switch the catalog major
process-locally for browse/evidence purposes.
## Backing up lab state
PostgreSQL is the system of record. Use normal Postgres backup/restore
(`pg_dump` / volume snapshots) if you need to preserve a seeded laboratory.
Application containers are disposable when the database volume remains.
## Publishing to Docker Hub
`make release` builds the **runtime** image (the `runtime` build target — not
the local bind-mounted `dev` image) and pushes it to Docker Hub:
```bash
docker login # once; account must own or can push to DOCKERHUB_USER
make release
```
Defaults:
| Variable | Default | Meaning |
|---|---|---|
| `DOCKERHUB_USER` | `inecs` | Docker Hub namespace/org |
| `IMAGE_NAME` | `vmware-api-simulator` | Repository name |
| `VERSION` | from `pyproject.toml` | Image tag |
| `PUSH_LATEST` | `1` | Also tag/push `:latest` |
Examples:
```bash
make release
make release VERSION=0.2.0
make release DOCKERHUB_USER=myorg PUSH_LATEST=0
make release-build # build/tag locally without pushing
```
Published tags:
- `inecs/vmware-api-simulator:<version>`
- `inecs/vmware-api-simulator:latest` (unless `PUSH_LATEST=0`)
## Quick start with the published compose file
[`docker-compose.release.yml`](../docker-compose.release.yml) pulls the Hub
runtime image and starts PostgreSQL + migrate + simulator + the HTTPS
gateway:
```bash
docker compose -f docker-compose.release.yml up -d
docker compose -f docker-compose.release.yml run --rm --entrypoint python \
simulator -m app.simulation.seed_cli
curl -sk https://localhost/health/ready
open https://localhost/
```
Helpers from a git checkout:
```bash
make release-up
make release-seed PROFILE=small
make release-down
```
Useful overrides:
| Variable | Default | Meaning |
|---|---|---|
| `DOCKER_IMAGE` | `inecs/vmware-api-simulator` | Image repository |
| `IMAGE_TAG` | `latest` | Tag to pull |
| `HTTP_PORT` | `80` | Host HTTP port |
| `HTTPS_PORT` | `443` | Host HTTPS port |
| `POSTGRES_PORT` | `127.0.0.1:5434` | Host Postgres bind |
| `TICKET_SIGNING_KEY` | lab default | Change outside toy labs |
| `POSTGRES_PASSWORD` | `vmware` | DB password |
For Kubernetes with public TLS (cert-manager / Let's Encrypt), use the Helm
chart — see [Kubernetes / Helm](kubernetes.md).
## Upgrades
1. Pull / rebuild images (`make install` / `make docker-build` as appropriate).
2. Run migrations (`make db-migrate`).
3. Confirm `/health/ready`.
4. Re-check `/ui/api/compatibility?major=9` and `/api/appliance/system/version`.
5. Re-run `make test-vsphere` / `make vsphere-matrix` / `make pulumi-tests`
if you validate the surface after upgrading. Latest recorded lab numbers:
[Compatibility — Latest lab run](compatibility.md#latest-lab-run-2026-07-18).
## Resetting a lab
```bash
make seed PROFILE=small
# or via UI: unload demo → small, then seed again
```
For a hard database reset use `make db-reset` (destructive — see Makefile
help).