Audience: Operators deploying and configuring the hyperfleet-adapter service.
This document describes the deployment-level AdapterConfig options and how to set them
in three formats: YAML, command-line flags, and environment variables.
Overrides are applied in this order: CLI flags > environment variables > YAML file > defaults.
You can point the adapter at a deployment config file with either:
- CLI:
--config(or-c) - Env:
HYPERFLEET_ADAPTER_CONFIG
Task config is separate (--task-config / HYPERFLEET_TASK_CONFIG) and not covered here.
All fields use snake_case naming.
adapter:
name: example-adapter
version: "0.1.0"
debug_config: false
log:
level: "info"
format: "json"
output: "stdout"
clients:
maestro:
grpc_server_address: "maestro-grpc.maestro.svc.cluster.local:8090"
http_server_address: "https://maestro-api.maestro.svc.cluster.local"
source_id: "hyperfleet-adapter"
client_id: "hyperfleet-adapter-client"
auth:
type: "tls"
tls_config:
ca_file: "/etc/maestro/certs/grpc/ca.crt"
cert_file: "/etc/maestro/certs/grpc/client.crt"
key_file: "/etc/maestro/certs/grpc/client.key"
http_ca_file: "/etc/maestro/certs/https/ca.crt"
timeout: "30s"
server_healthiness_timeout: "20s"
retry_attempts: 3
keepalive:
time: "30s"
timeout: "10s"
insecure: false
hyperfleet_api:
base_url: "http://hyperfleet-api:8000"
version: "v1"
timeout: "10s"
retry_attempts: 3
retry_backoff: "exponential"
base_delay: "1s"
max_delay: "30s"
default_headers:
X-Example: "value"
broker:
subscription_id: "example-subscription"
topic: "example-topic"
kubernetes:
api_version: "v1"
kube_config_path: "/path/to/kubeconfig"
qps: 100
burst: 200adapter.name(string, required): Adapter name.adapter.version(string, optional): when set, the binary validates it matches the running version. Only major and minor versions are compared — patch differences are allowed (e.g., config1.2.0with binary1.2.3is valid). Non-semver versions (e.g.,dev,latest, custom tags) skip validation gracefully.debug_config(bool, optional): Log the merged config after load. Default:false.
log.level(string, optional): Log level (debug,info,warn,error). Default:info.log.format(string, optional): Log format (text,json). Default:json.log.output(string, optional): Log output destination (stdout,stderr). Default:stdout.
grpc_server_address(string): Maestro gRPC endpoint.http_server_address(string): Maestro HTTP API endpoint.source_id(string): CloudEvents source identifier.client_id(string): Maestro client identifier.auth.type(string): Authentication type (tlsornone).auth.tls_config.ca_file(string): gRPC CA certificate path.auth.tls_config.cert_file(string): gRPC client certificate path.auth.tls_config.key_file(string): gRPC client key path.auth.tls_config.http_ca_file(string, optional): CA certificate for the HTTP API. Falls back toca_fileif unset.timeout(duration string): Request timeout (e.g.30s).server_healthiness_timeout(duration string, optional): Timeout for the server healthiness check (e.g.20s).retry_attempts(int): Number of retry attempts.keepalive.time(duration string): gRPC keepalive ping interval.keepalive.timeout(duration string): gRPC keepalive ping timeout.insecure(bool): Allow insecure connection.
base_url(string): Base URL for HyperFleet API requests.version(string): API version. Default:v1.timeout(duration string): HTTP client timeout. Default:10s.retry_attempts(int): Retry attempts. Default:3.retry_backoff(string): Backoff strategy (exponential,linear,constant). Default:exponential.base_delay(duration string): Initial retry delay. Default:1s.max_delay(duration string): Maximum retry delay. Default:30s.default_headers(map[string]string): Headers added to all API requests.
These fields appear in the adapter deployment config and control which events the adapter consumes. The actual broker connection details (URL, credentials, exchange) live in a separate broker.yaml file managed by the Helm chart.
subscription_id(string, required): A unique identifier for this adapter instance's subscription. Must be unique across adapter instances that should each receive all events independently (fan-out). Two adapters with the samesubscription_idand same queue name will share a queue and compete for messages — each event goes to only one of them.topic(string, required): For RabbitMQ, this is the AMQP queue name prefix (not a routing key — see below). Set it to a meaningful value that identifies this adapter's event stream (e.g.hyperfleet-clusters). For Google Pub/Sub this is the Pub/Sub topic name.
Set these values directly in the adapter config YAML. The env var overrides (HYPERFLEET_BROKER_SUBSCRIPTION_ID, HYPERFLEET_BROKER_TOPIC) exist as an escape hatch but are not required — values in the YAML take effect without them.
The broker connection is configured separately, via a mounted broker.yaml (or the Helm broker.* values). This file is read by the hyperfleet-broker library directly and does not support Viper/env var overrides — it is pure YAML.
broker:
type: googlepubsub
googlepubsub:
project_id: "my-gcp-project"
topic: "cluster-events"
subscription_id: "my-adapter-sub"
dead_letter_topic: "" # optional
create_topic_if_missing: false
create_subscription_if_missing: falsebroker:
type: rabbitmq
rabbitmq:
url: "amqp://user:pass@rabbitmq:5672/" # required; amqp:// or amqps://
exchange: "hyperfleet-clusters" # required; must match sentinel's clients.broker.topic
exchange_type: "topic" # optional; default: topic
queue: "my-adapter" # optional; see queue naming below
prefetch_count: 0 # optional; 0 = broker default
prefetch_size: 0 # optional; 0 = no limit
consumer_tag: "" # optional; auto-assigned if empty
publisher_confirm: false # optional; enable publisher confirmsConnecting to the sentinel. The sentinel publishes events to a RabbitMQ exchange whose name equals the sentinel's clients.broker.topic (e.g. hyperfleet-clusters). The adapter's broker.yaml exchange field must match this value exactly — this is the only coupling point between sentinel and adapter.
Queue naming in RabbitMQ. The adapter binds a queue to the exchange and consumes from it. The queue name is derived as:
- If
queueis set:{queue}-{subscription_id}(e.g.my-adapter-adapter-1) - If
queueis omitted:{topic}-{subscription_id}(e.g.hyperfleet-clusters-adapter-1)
The queue-to-exchange binding always uses an empty routing key — all queues bound to the same exchange receive all messages published to it.
Fan-out vs competing consumers. Because queue name is derived from both topic and subscription_id, two adapters sharing the same values for both fields will land on the same queue and compete (each event goes to one adapter). Give each adapter instance a unique subscription_id in its adapter config YAML to ensure each gets an independent copy of every event.
url and exchange are required. queue is optional.
api_version(string): Kubernetes API version.kube_config_path(string): Path to kubeconfig (empty uses in-cluster auth).qps(float): Client-side QPS limit (0 uses defaults).burst(int): Client-side burst limit (0 uses defaults).
Tracing is configured entirely through environment variables — there is no YAML section.
HYPERFLEET_TRACING_ENABLED(bool): Enable or disable tracing. Default:truein the binary,falsein the Helm chart. Set tofalseto suppress OTLP export errors when no collector is available.
When tracing is enabled, the adapter uses standard OpenTelemetry environment variables:
| Variable | Description | Default |
|---|---|---|
OTEL_EXPORTER_OTLP_ENDPOINT |
OTLP collector endpoint (e.g., http://otel-collector:4317) |
— (stdout exporter) |
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT |
Signal-specific endpoint; overrides the above for traces only | — |
OTEL_EXPORTER_OTLP_PROTOCOL |
Protocol: grpc or http/protobuf |
grpc |
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL |
Signal-specific protocol override | — |
OTEL_SERVICE_NAME |
Service name reported in spans | adapter.name from config |
OTEL_TRACES_SAMPLER |
Sampler type (always_on, always_off, traceidratio, parentbased_*) |
parentbased_traceidratio |
OTEL_TRACES_SAMPLER_ARG |
Sampling ratio (0.0–1.0) | 1.0 |
When no OTEL_EXPORTER_OTLP_ENDPOINT is set, traces are written to stdout for local development.
The Helm chart exposes tracing.enabled, tracing.otlpEndpoint, tracing.otlpProtocol, tracing.serviceName, tracing.sampler, tracing.samplerArg, and tracing.propagators in values.yaml which map to these environment variables. For Helm deployment details, see the Deployment Guide — Tracing.
The following CLI flags override YAML values:
General
--debug-config->debug_config--log-level->log.level--log-format->log.format--log-output->log.output
Maestro
--maestro-grpc-server-address->clients.maestro.grpc_server_address--maestro-http-server-address->clients.maestro.http_server_address--maestro-source-id->clients.maestro.source_id--maestro-client-id->clients.maestro.client_id--maestro-auth-type->clients.maestro.auth.type--maestro-ca-file->clients.maestro.auth.tls_config.ca_file--maestro-cert-file->clients.maestro.auth.tls_config.cert_file--maestro-key-file->clients.maestro.auth.tls_config.key_file--maestro-http-ca-file->clients.maestro.auth.tls_config.http_ca_file--maestro-timeout->clients.maestro.timeout--maestro-server-healthiness-timeout->clients.maestro.server_healthiness_timeout--maestro-retry-attempts->clients.maestro.retry_attempts--maestro-keepalive-time->clients.maestro.keepalive.time--maestro-keepalive-timeout->clients.maestro.keepalive.timeout--maestro-insecure->clients.maestro.insecure
HyperFleet API
--hyperfleet-api-base-url->clients.hyperfleet_api.base_url--hyperfleet-api-version->clients.hyperfleet_api.version--hyperfleet-api-timeout->clients.hyperfleet_api.timeout--hyperfleet-api-retry->clients.hyperfleet_api.retry_attempts--hyperfleet-api-retry-backoff->clients.hyperfleet_api.retry_backoff--hyperfleet-api-base-delay->clients.hyperfleet_api.base_delay--hyperfleet-api-max-delay->clients.hyperfleet_api.max_delay
Broker
--broker-subscription-id->clients.broker.subscription_id--broker-topic->clients.broker.topic
Kubernetes
--kubernetes-api-version->clients.kubernetes.api_version--kubernetes-kube-config-path->clients.kubernetes.kube_config_path--kubernetes-qps->clients.kubernetes.qps--kubernetes-burst->clients.kubernetes.burst
All deployment overrides use the HYPERFLEET_ prefix unless noted.
General
HYPERFLEET_DEBUG_CONFIG->debug_configLOG_LEVEL->log.levelLOG_FORMAT->log.formatLOG_OUTPUT->log.output
Maestro
HYPERFLEET_MAESTRO_GRPC_SERVER_ADDRESS->clients.maestro.grpc_server_addressHYPERFLEET_MAESTRO_HTTP_SERVER_ADDRESS->clients.maestro.http_server_addressHYPERFLEET_MAESTRO_SOURCE_ID->clients.maestro.source_idHYPERFLEET_MAESTRO_CLIENT_ID->clients.maestro.client_idHYPERFLEET_MAESTRO_AUTH_TYPE->clients.maestro.auth.typeHYPERFLEET_MAESTRO_CA_FILE->clients.maestro.auth.tls_config.ca_fileHYPERFLEET_MAESTRO_CERT_FILE->clients.maestro.auth.tls_config.cert_fileHYPERFLEET_MAESTRO_KEY_FILE->clients.maestro.auth.tls_config.key_fileHYPERFLEET_MAESTRO_HTTP_CA_FILE->clients.maestro.auth.tls_config.http_ca_fileHYPERFLEET_MAESTRO_TIMEOUT->clients.maestro.timeoutHYPERFLEET_MAESTRO_SERVER_HEALTHINESS_TIMEOUT->clients.maestro.server_healthiness_timeoutHYPERFLEET_MAESTRO_RETRY_ATTEMPTS->clients.maestro.retry_attemptsHYPERFLEET_MAESTRO_KEEPALIVE_TIME->clients.maestro.keepalive.timeHYPERFLEET_MAESTRO_KEEPALIVE_TIMEOUT->clients.maestro.keepalive.timeoutHYPERFLEET_MAESTRO_INSECURE->clients.maestro.insecure
HyperFleet API
HYPERFLEET_API_BASE_URL->clients.hyperfleet_api.base_urlHYPERFLEET_API_VERSION->clients.hyperfleet_api.versionHYPERFLEET_API_TIMEOUT->clients.hyperfleet_api.timeoutHYPERFLEET_API_RETRY_ATTEMPTS->clients.hyperfleet_api.retry_attemptsHYPERFLEET_API_RETRY_BACKOFF->clients.hyperfleet_api.retry_backoffHYPERFLEET_API_BASE_DELAY->clients.hyperfleet_api.base_delayHYPERFLEET_API_MAX_DELAY->clients.hyperfleet_api.max_delay
Broker
HYPERFLEET_BROKER_SUBSCRIPTION_ID->clients.broker.subscription_idHYPERFLEET_BROKER_TOPIC->clients.broker.topic
Kubernetes
HYPERFLEET_KUBERNETES_API_VERSION->clients.kubernetes.api_versionHYPERFLEET_KUBERNETES_KUBE_CONFIG_PATH->clients.kubernetes.kube_config_pathHYPERFLEET_KUBERNETES_QPS->clients.kubernetes.qpsHYPERFLEET_KUBERNETES_BURST->clients.kubernetes.burst
Legacy broker environment variables (used only if the prefixed version is unset):
BROKER_SUBSCRIPTION_ID->clients.broker.subscription_idBROKER_TOPIC->clients.broker.topic