OpenCHAMI Boot Service is a Fabrica-generated REST API for managing node boot configuration in HPC environments, with legacy BSS-compatible endpoints.
- Go 1.24+
- GNU Make
pre-commit(optional, for local CI-style checks)
cp config.example.yaml config.yamlConfiguration precedence (highest to lowest):
- Command-line flags
- Environment variables (prefix
BOOT_SERVICE_) config.yaml- Built-in defaults
make buildBuild artifacts:
bin/serverbin/client
# Run from source
go run ./cmd/server serve
# Run built binary
./bin/server serve
# Example overrides
./bin/server serve --port 8082 --enable-auth --hsm-url http://localhost:27779GET /healthGET /openapi.jsonGET /docs
Generated CRUD/status endpoints for:
/bmcs/bootconfigurations/nodes
Routes are generated with trailing slashes and normalized by Chi middleware.
When enable_legacy_api: true, legacy routes are available under /boot/v1/.
Resource definitions live in:
.fabrica.yamlapis.yamlapis/boot.openchami.io/v1/*_types.go
Regenerate handlers/storage/client/openapi after API changes:
# Build automatically re-runs Fabrica generation first
make build
# CI-style drift check (requires a clean working tree)
make generate-check
# Optional: use local Fabrica checkout (sibling ../fabrica)
(cd ../fabrica && go build -o bin/fabrica ./cmd/fabrica)
# Makefile local mode passes --fabrica-source ../fabrica automatically
make generate FABRICA_LOCAL=1
make generate-check FABRICA_LOCAL=1Do not edit *_generated.go files manually.
# Main unit/integration-safe suite (examples excluded)
make test
# Bootscript integration test (opt-in)
make test-integration
# Override test timeout
make test TEST_TIMEOUT=4mmake test-integration sets BOOT_SERVICE_RUN_INTEGRATION=1 and runs:
TestBootLogicWithExistingData
make lint
make pre-commit-runUseful setup:
make setup-devKey settings are documented in config.example.yaml and in
docs/CONFIGURATION.md.
Common environment variable examples:
export BOOT_SERVICE_PORT=8082
export BOOT_SERVICE_ENABLE_AUTH=true
export BOOT_SERVICE_HSM_URL=http://localhost:27779
./bin/server serveDockerfile: runtime image expecting a prebuilt binaryDockerfile.standalone: multi-stage standalone build- The distroless runtime image does not ship
curlorwget; use/healthfrom an external probe instead of an in-container DockerHEALTHCHECK.
- If building with local Fabrica replacements and hitting module proxy issues,
try:
GOPROXY=direct go build -o bin/server ./cmd/server - If a legacy test appears to require an externally running server, use
make test-integrationinstead ofmake test.
docs/PROFILES.md- Boot profiles for configuration managementdocs/CONFIGURATION.md- Service configuration guidedocs/AUTHENTICATION.md- JWT authentication with TokenSmithdocs/AUTHENTICATION_TESTING.md- Testing authentication flows