Platform Manager 16.0.0 Readme
Overview
The Management API is part of the Topic Catalog system, designed to serve as a customer portal for managing and interacting with their part of the Axual Platform. It is used to administer the Axual platform to perform activities like:
-
View Topic availability on different environments
-
Request Topic deployments
-
Manage own environments
-
and more…
Installation & Configuration
Default Roles
When a new user is created in Platform Manager, certain roles can be
automatically granted. These roles can be defined in the
application.yml config as below:
axual:
default-roles: APPLICATION_AUTHOR, ENVIRONMENT_AUTHOR, STREAM_AUTHOR
By default, APPLICATION_AUTHOR, ENVIRONMENT_AUTHOR and
STREAM_AUTHOR roles are automatically granted to every new user in
Self Service.
Schema Compatibility Checks
During stream deployment, a mandatory step is to verify the compatibility of the AVRO, PROTOBUF or Json schema (if changed). In some cases, it is desirable to force the topic apply.
This force field is added in the StreamConfig object.
{
"keySchemaVersion": "http://localhost:8080/schema_versions/5322f72742cd4c6db07b9a71a825fe4f",
"force": true
}
Flyway DB Migration
We use Flyway for version control and easy schema evolving of a Platform Manager database. Flyway will automatically run the SQL files to upgrade the database to required level.
Cross Origin Resource Sharing (CORS)
By default, CORS is enabled for all origins, methods and headers. To change this behaviour, Cross Origin Resource Sharing can be configured as below:
cors-allowed-origin-patterns is a list of accepted origin urls with
which the response can be shared. To accept all, use the value '*'
cors-allowed-methods is a list of allowed HTTP methods in response to
a pre-flight request. By default GET, POST, PUT, PATCH, HEAD
and DELETE are allowed.
cors-allowed-headers is a list of accepted headers. To accept all, use
the value '*'
cors-exposed-headers is a list of headers that can be exposed
(accessed by clients). Simple response headers Cache-Control,
Content-Language, Content-Type, Expires, Last-Modified and
Pragma are already safe-listed so can be ignored in this list. Refer
https://developer.mozilla.org/en-US/docs/Glossary/Simple_response_header
for more details.
cors-max-age defines the time in seconds the client should cache the
pre-flight response. In Platform Manager it is set to 3600 by default.
Example #1 - Allow all origins and all headers, with default methods
axual:
rest:
cors-allowed-origin-patterns:
- '*'
cors-allowed-headers:
- '*'
Example #2 - Allow origin http://localhost and https://somewhere
to access the service for the GET and POST methods for all headers:
axual:
rest:
cors-allowed-origin-patterns:
- 'http://localhost'
- 'https://somewhere'
cors-allowed-methods:
- 'GET'
- 'POST'
cors-allowed-headers:
- '*'
Example #3 - Allow all origins to access the service for the GET
and POST methods for Origin, Content-type and X-Requested-With
headers:
axual:
rest:
cors-allowed-origin-patterns:
- 'http://localhost'
- 'https://somewhere'
cors-allowed-methods:
- 'GET'
- 'POST'
cors-allowed-headers:
- 'Origin'
- 'Content-Type'
- 'X-Requested-With'
Vault Configuration
Platform Manager supports HashiCorp Vault for secure storage of credentials, certificates, and secrets. There are four distinct vault types, each serving different purposes:
| Vault Type | Purpose | Scope |
|---|---|---|
Governance Vault |
Stores KSML application secrets, cluster credentials, and schema registry details |
Single vault for entire governance system |
Connector Vault |
Stores connector certificates for legacy Axual Connect applications |
Single vault shared across all tenant-instances |
Instance Connector Vault |
Stores connector certificates for legacy Axual Connect applications |
Isolated vault per tenant-instance |
Kafka Connect Cluster Vault |
Stores mTLS/SASL_SCRAM credentials for a registered Kafka Connect cluster |
Isolated vault per registered
|
Note: Use either Connector Vault OR Instance Connector Vault, not both. Instance Connector Vault provides better isolation for multi-tenant deployments. Kafka Connect Cluster Vault is independent of both — it applies only to connector applications deployed to a registered Kafka Connect cluster (see below), and is configured per cluster, not via
application.yml.
Governance Vault
The Governance Vault stores high-level secrets for KSML applications, clusters, and schema registries. It is mandatory for production deployments.
Configuration Properties:
governance:
vault:
enabled: true
uri: https://vault.example.com:8200
role-id: a876f265-b031-861f-d51b-2113602a1c34
secret-id: e90bcb18-6a80-a8ee-ea34-5a607ef76bff
path: governance # KV secret engine path (default: governance)
namespace: my-namespace # optional - Vault Enterprise namespace
approle-path: approle # optional - custom AppRole mount path (default: approle)
| Property | Required | Default | Description |
|---|---|---|---|
|
Yes |
|
Enables Governance Vault integration |
|
Yes |
- |
Vault server URI |
|
Yes |
- |
AppRole Role ID for authentication |
|
Yes |
- |
AppRole Secret ID for authentication |
|
No |
|
KV v2 secret engine mount path |
|
No |
- |
Vault Enterprise namespace (if applicable) |
|
No |
|
Custom AppRole authentication mount path |
Resources Stored:
| Resource | Path Pattern | Description |
|---|---|---|
KSML Application Principals |
|
Private keys for KSML application authentication |
Cluster Credentials |
|
Kafka cluster bootstrap servers and security credentials |
Schema Registry Credentials |
|
Schema Registry authentication details and Keycloak admin passwords |
Distribution Secrets |
|
Distribution deployment credentials |
Connector Vault (Single Vault)
The Connector Vault stores connector certificates for Kafka Connect applications in a single vault shared across all tenant-instances.
Configuration Properties:
vault:
enabled: true
uri: https://vault.example.com:8200
role-id: a876f265-b031-861f-d51b-2113602a1c34
secret-id: e90bcb18-6a80-a8ee-ea34-5a607ef76bff
connectors-path: connectors # KV engine path for SSL certificates
credentials-path: credentials # KV engine path for SASL credentials
private-key-name: private.key # Key name for private keys in Vault
cert-chain-key-name: certificate.chain # Key name for certificate chains in Vault
namespace: my-namespace # optional - Vault Enterprise namespace
approle-path: approle # optional - custom AppRole mount path (default: approle)
| Property | Required | Default | Description |
|---|---|---|---|
|
Yes |
|
Enables Connector Vault integration |
|
Yes |
- |
Vault server URI |
|
Yes |
- |
AppRole Role ID for authentication |
|
Yes |
- |
AppRole Secret ID for authentication |
|
Yes |
- |
KV v2 path for storing SSL certificates |
|
Yes |
- |
KV v2 path for storing SASL credentials |
|
Yes |
- |
Map key name for private keys (e.g.,
|
|
Yes |
- |
Map key name for certificate chains
(e.g., |
|
No |
- |
Vault Enterprise namespace (if applicable) |
|
No |
|
Custom AppRole authentication mount path |
Resources Stored:
| Resource | Engine Path | Secret Path | Description |
|---|---|---|---|
Application SSL Principals |
|
|
Private keys and certificate chains for application authentication |
SASL/SCRAM Credentials |
|
|
Username/password pairs (SCRAM_SHA_256, SCRAM_SHA_512, PLAIN) |
Instance Connector Vault (Per Tenant-Instance)
The Instance Connector Vault stores connector certificates for Kafka Connect applications, with isolated vaults per tenant-instance for enhanced security and separation. Recommended for multi-tenant installations where strict data isolation is required.
Configuration Properties:
connector-vault:
enabled: true
instances:
axual-qa: # tenant-instance name (format: {tenant}-{instance})
uri: https://vault.example.com:8200
role-id: a876f265-b031-861f-d51b-2113602a1c34
secret-id: e90bcb18-6a80-a8ee-ea34-5a607ef76bff
connectors-path: connectors
credentials-path: credentials
private-key-name: private.key
cert-chain-key-name: certificate.chain
namespace: ns1 # optional - Vault Enterprise namespace
approle-path: approle # optional - custom AppRole mount path (default: approle)
key-store: classpath:client.jks # optional - client keystore for mTLS
key-password: notsecret # optional - private key password
key-store-password: notsecret # optional - keystore password
trust-store: classpath:truststore.jks # optional - truststore for server verification
trust-store-password: notsecret # optional - truststore password
axual-prod:
uri: https://vault-prod.example.com:8200
role-id: b987f376-c142-972g-e62c-3224713b2d45
secret-id: f01cdc29-7b91-b9ff-fb45-6b718fg87cgg
connectors-path: connectors
credentials-path: credentials
private-key-name: private.key
cert-chain-key-name: certificate.chain
namespace: ns2
approle-path: custom-approle # example of custom AppRole path
| Property | Required | Default | Description |
|---|---|---|---|
|
Yes |
|
Enables Instance Connector Vault integration |
|
Yes |
- |
Vault server URI for this tenant-instance |
|
Yes |
- |
AppRole Role ID for authentication |
|
Yes |
- |
AppRole Secret ID for authentication |
|
Yes |
- |
KV v2 path for storing SSL certificates |
|
Yes |
- |
KV v2 path for storing SASL credentials |
|
Yes |
- |
Map key name for private keys |
|
Yes |
- |
Map key name for certificate chains |
|
No |
- |
Vault Enterprise namespace |
|
No |
|
Custom AppRole authentication mount path |
|
No |
- |
Path to client keystore for mTLS with Vault |
|
No |
- |
Password for the private key in keystore |
|
No |
- |
Password for the keystore |
|
No |
- |
Path to truststore for Vault server verification |
|
No |
- |
Password for the truststore |
Resources Stored:
| Resource | Engine Path | Secret Path | Description |
|---|---|---|---|
Application SSL Principals |
|
|
Private keys and certificate chains for application authentication |
SASL/SCRAM Credentials |
|
|
Username/password pairs (SCRAM_SHA_256, SCRAM_SHA_512, PLAIN) |
Kafka Connect Cluster Vault (AXPD-11425)
Each registered ConnectCluster (Kafka Connect deployment target, added
under System Management) can have its own Connector Vault, entirely
separate from the Governance/Connector/Instance Connector Vaults above.
Unlike those, most of it is not configured via application.yml; it
is a set of fields on the ConnectCluster entity itself, set when the
cluster is registered (POST/PUT on the Connect cluster resource), so
every Kafka Connect cluster can point at a different Vault instance and
AppRole. The one exception is the Vault engine mount name: that is
shared by every registered cluster and configured once by the operator
at PM startup.
PM Startup Configuration:
axual:
systemmanagement:
kafka-connect:
vault:
engine-path: connector-auth # optional - KV v2 engine mount every ConnectCluster's Vault shares
| Property | Required | Default | Description |
|---|---|---|---|
|
No |
|
Vault KV v2 secret engine mount name shared by every
registered |
ConnectCluster Vault Fields:
| Field | Required | Default | Description |
|---|---|---|---|
|
Yes |
- |
Vault server URI for this cluster’s Connector Vault |
|
Yes |
- |
Data-path prefix segment for this cluster, under the shared engine mount above (not an engine name itself) |
|
No |
|
Custom AppRole authentication mount path |
AppRole role-id / secret-id |
Yes |
- |
Resolved per
cluster+environment via |
Resources Stored (under the engine-path mount from PM startup
config):
| Resource | Path Pattern | Description |
|---|---|---|
mTLS active secret |
|
Cert chain (PEM) + private key for the currently active principal |
mTLS storage secret |
|
Private key only, written on principal upload, keyed by principal id — always present regardless of the cluster’s current auth method |
SASL_SCRAM credential |
|
Username/password for the connector’s Kafka credential (currently
always |
SR basic-auth credential |
|
Username/password for the connector’s Schema Registry credential
(currently always |
Required Vault ACL policy for the AppRole: grant on a nested glob
under connectorVaultPath, not the bare path itself — no secret is ever
written directly at {connectorVaultPath}, only under it (see
Resources Stored above). Vault ACL globs are literal prefix matches, so
…/{connectorVaultPath}/* never covers the bare path without
the trailing segment — no separate exact-match stanza is needed. KV v2
delete uses separate delete/destroy sub-paths from
data/metadata, so all four are required or deletes 403:
path "{engine-path}/data/{connectorVaultPath}/*" { capabilities = ["create", "read", "update", "delete"] }
path "{engine-path}/metadata/{connectorVaultPath}/*" { capabilities = ["list", "read", "delete"] }
path "{engine-path}/delete/{connectorVaultPath}/*" { capabilities = ["update"] }
path "{engine-path}/destroy/{connectorVaultPath}/*" { capabilities = ["update"] }
How it differs from the Connector/Instance Connector Vault above:
-
Scope: the Vault URL, AppRole, and
connectorVaultPathprefix are per-ConnectClusterrow, not per-tenant-instance or global — a single Instance can have multiple registered Connect clusters, each pointing at its own Vault. Only the engine mount name (engine-path) is shared globally, set once at PM startup. -
mTLS credential format: PEM cert chain + PEM private key only. No JKS/keystore support.
-
Two-phase mTLS: uploading a principal (
POST /application_principals) always writes its private key to the uid-suffixed storage path, independent of the cluster’sauthMethodat that time. The cert itself is only ever combined with the key and written to the shared active path onPOST /application_principals/{id}/activate— which is also where the cluster’sauthMethodis actually enforced (MTLSrequired;SASL_SCRAMrejects activation with a clear error). This means a cluster can be switched betweenSASL_SCRAMandMTLSafter a principal is uploaded without losing the ability to activate it later. -
SASL_SCRAM rotation: a new credential simply overwrites the existing one at the same path — no versioned storage path like mTLS.
-
Schema Registry credential: generated automatically the first time a connector is started (not at grant time, and regardless of which Topics have grants) — always basic-auth, never OAuth or mTLS. A no-op if a credential already exists, or if the target cluster’s
InstanceClusterisn’t configured for Apicurio basic-auth. -
Delete: an inactive, non-last principal’s own uid-path secret is always removed on delete regardless of active/inactive status (it is never shared with another principal); the shared active-path secret is only removed by whichever principal currently owns it. Both deletes resolve the target cluster regardless of its current
authMethod, so a secret written before aSASL_SCRAM↔MTLSswitch is still reachable and doesn’t get orphaned in Vault.
AppRole Authentication Path (approle-path)
The approle-path configuration allows you to specify a custom mount
path for AppRole authentication in HashiCorp Vault. This is useful when:
-
Your Vault instance has AppRole enabled at a non-standard path
-
You have multiple AppRole auth methods for different purposes
-
Your organization uses a naming convention for auth method paths
Default: approle (the standard HashiCorp Vault default)
Example with custom path:
governance:
vault:
enabled: true
uri: https://vault.example.com:8200
role-id: ...
secret-id: ...
approle-path: platform-manager-auth # Custom AppRole mount path
This corresponds to the Vault CLI command:
vault auth enable -path=platform-manager-auth approle
Development Profile (Database-backed Vault)
For development environments, Platform Manager provides a database-backed vault alternative that doesn’t require a real HashiCorp Vault instance.
Configuration:
spring:
profiles:
active: dev
When vault is disabled, credentials are stored in the
credentials_store database table. This should never be used in
production environments.
OpenTelemetry Tracing Configuration
The service uses spring-boot-starter-opentelemetry for distributed
tracing.
By default, tracing is enabled with 100% sampling, but OTLP export is disabled.
Enabling Trace Export
To export traces to an OTLP collector (such as Jaeger, Prometheus, or others), configure:
management:
tracing:
export:
enabled: true
opentelemetry:
tracing:
export:
otlp:
endpoint: http://otlp-collector:4317 # Replace with your OTLP collector URL
transport: grpc # Export protocol: grpc or http/protobuf
headers: # Custom HTTP headers you want to pass to the collector, for example auth headers.
key: value
Depending on the instrumentation backend, you may want to add custom headers.
-
For Elastic APM, refer to https://www.elastic.co/guide/en/apm/get-started/current/open-telemetry-elastic.html
-
For Grafana Tempo, refer to https://grafana.com/blog/2021/04/13/how-to-send-traces-to-grafana-clouds-tempo-service-with-opentelemetry-collector/
-
For Honeycomb, refer to https://docs.honeycomb.io/getting-data-in/opentelemetry/otel-collector/
To add additional tracing metrics, please refer to Spring Boot documentation: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#actuator.micrometer-tracing
Adjusting Sampling
The trace.sampling.probability property controls the fraction of spans
that are collected. Setting it to 1.0 means all spans will be
exported.
To adjust the sampling rate (default is 100%):
management:
tracing:
sampling:
probability: 0.1 # 10% sampling
Support for Spring Boot 3.5.x properties
The service has support for Spring Boot 3.5.x OpenTelemetry properties.
You can use the following Spring Boot 3.5.x properties to configure OpenTelemetry:
management:
tracing:
enabled: true
otlp:
tracing:
endpoint: http://otlp-collector:4317 # Replace with your OTLP collector URL
transport: grpc # Export protocol: grpc or http/protobuf
headers: # Custom HTTP headers you want to pass to the collector, for example auth headers.
key: value
The service will map each Spring Boot 3.5.x property to the corresponding Spring Boot 4.x OpenTelemetry property.
| Spring Boot 3.5.x property | Spring Boot 4.x property | Default value |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Schema Registry OAuth
Platform Manager supports OAuth authentication for Schema Registry (Apicurio) via Keycloak. When enabled, applications can register as OAuth clients in Keycloak instead of using Basic Auth credentials.
To enable Schema Registry OAuth, configure the client secret salt used for deterministic secret generation:
axual:
application-management:
apicurio:
clientSecretSalt: "<your-secret-salt>"
clientSecretAlgorithm: HmacSHA256 # optional, defaults to HmacSHA256
| Property | Required | Default | Description |
|---|---|---|---|
|
Yes |
- |
Salt used as HMAC key for deterministic client secret generation. Without this property, Schema Registry OAuth is disabled. |
|
No |
|
Cryptographic algorithm used for client secret generation. |
Note: Schema Registry OAuth is not supported for Axual Managed KSML applications.
Helm Chart: Audit Log File Output
The Platform Manager Helm chart deploys the application as a
Deployment resource. When auditLog.enabled: true, audit events are
written as JSONL (one JSON object per line) to a rolling log file inside
the pod’s /logs directory, which is backed by an emptyDir volume.
Logs do not survive pod restarts. To ship logs to an external system,
add a sidecar container via extraContainers that reads from the same
/logs volume.
Loggers
Below is a per-package breakdown of important packages to help operators configure logging:
| Package | Logger | Description |
|---|---|---|
|
Root Package |
Platform Manager root package |
|
Application Management |
Kafka application credentials, principals, access grants, and authentication |
|
Application API |
REST API endpoints for application management operations |
|
Connect Lifecycle |
Kafka Connect connector deployments, lifecycle management, and status monitoring |
|
KSML Lifecycle |
KSML application deployments, lifecycle operations, and state transitions |
|
Topic Processing |
Topic configuration deployment, resolution, and topic mapping operations |
|
Topic Validation |
Topic configuration validation and ACL collision detection |
|
Topic API |
REST API endpoints for Topic management operations |
|
Schema Management |
Avro, JSON, and Protobuf schema version management and validation |
|
Schema API |
REST API endpoints for schema management operations |
|
System Management |
Cluster, Instance, Environment, and Schema Registry infrastructure management |
|
Connect System |
Kafka Connect system integration, ACL operations, and cluster operations |
|
Connect REST Client |
REST client communication with Kafka Connect clusters |
|
Keycloak Integration |
Keycloak SSO integration and client configuration |
|
System API |
REST API endpoints for system management operations |
|
User Management |
User account and profile management operations |
|
Group Management |
Group management operations |
|
Tenant API |
REST API endpoints for tenant operations |
|
Kameleon Governance |
Core governance operations on Kafka clusters (topic details, ACL operations) |
|
Kafka Cluster Operations |
Kafka AdminClient operations and cluster management |
|
Kafka Topic Operations |
Topic creation, update, and management operations |
|
Kafka ACL Operations |
ACL binding creation and management |
|
Cluster Import |
Cluster discovery and import operations |
|
Import Processor |
Cluster import processing for topics, ACLs, and system entities |
|
Security Filters |
HTTP authentication filters and request processing |
|
ABAC Authorization |
Attribute-Based Access Control (ABAC) permission evaluation |
|
Notification Service |
Email and event notifications |
|
DB Vault |
Database-backed vault for credential storage (development profile) |
|
HashiCorp Vault |
HashiCorp Vault integration for credential management |
|
Offboarding Service |
Tenant offboarding and cleanup operations |
|
Organization Keycloak |
Keycloak event listening and organization SSO integration |
|
Exception Handler |
Global exception handling and error responses |
|
Audit Service |
Audit event listener and trail operations |
|
Audit Logger |
Main audit logging facility for all governance events and changes |
|
AsyncAPI Documentation |
AsyncAPI documentation generation service |
|
Distribution Lifecycle |
Distribution deployment configuration and operations |
|
Topic Browse |
Topic data browsing operations |
|
Admin Insights |
Scheduled collection of aggregated platform usage data (resource ownership, topic volume, unused topics) |
|
Insights API |
REST API endpoints for insights queries |
The Kafka client config dump (AbstractConfig), AppInfoParser,
Metrics and AbstractLogin loggers are set to WARN by default,
since every short-lived AdminClient would otherwise log its full
configuration and lifecycle at INFO.
Notifications Service Configuration
You can enable Notifications service using SMTP server for the Platform
Manager, to notify application and stream owners by receiving emails
whenever something important happens with their applications or streams.
Below you can find the configurations that are defined to enable/disable
the Notifications service for the Platform Manager application.
Currently, we only support the SMTP server, and it needs to be enabled
when the notifications is enabled.
platform-manager:
config:
axual:
# Notifications Configuration
notifications:
enabled: true
sender: [email address of the notification sender]
smtp:
enabled: true
Then you need to provide Spring configurations of the SMTP server:
platform-manager:
config:
spring:
mail:
host: [domain names or IP addresses of SMTP servers, e.g : smtp.gmail.com]
port: [port number of the SMTP server]
username: [username corresponds to the sender email account]
password: [password corresponds to the sender email account]
properties:
mail:
smtp:
auth: true
starttls:
enable: true
Event Publication Completion Mode Configuration
By default, event publications are marked as completed when a
transactional execution completes successfully. The completion is
registered by setting the completion date on an EventPublication. This
means that completed publications remain in the Event Publication
Registry indefinitely, and the database table will grow unbounded over
time.
Spring Modulith provides the spring.modulith.events.completion-mode
configuration property to control how completed event publications are
handled. The default mode for Axual Platform Manager is DELETE, which
automatically removes event publications from the database upon
completion.
platform-manager:
config:
spring:
modulith:
events:
# -- Completion mode for event publications (UPDATE, DELETE, or ARCHIVE)
completion-mode: DELETE
With the DELETE mode enabled, completed event publications are
automatically removed from the database, preventing the persistence
store from growing unbounded. The CompletedEventPublications interface
will not return any publications. If you are upgrading from a previous
configuration where completed events were being accumulated, you can
clean up existing completed event publications using the following SQL
script:
--
-- Clear completed event publications from the EVENT_PUBLICATION table
-- This script removes all completed event publications to prevent database bloat.
-- With spring.modulith.events.completion-mode=DELETE, new completed publications
-- will be automatically deleted from the database.
--
DELETE FROM EVENT_PUBLICATION
WHERE COMPLETION_DATE IS NOT NULL;
Scheduler Timestamp Configuration
Scheduled tasks (db-scheduler) store their execution times in zone-less
DATETIME/TIMESTAMP columns. Platform Manager persists these
timestamps in UTC so they are read back correctly regardless of the JVM
or database timezone.
platform-manager:
config:
db-scheduler:
always-persist-timestamp-in-utc: true
| Property | Required | Default | Description |
|---|---|---|---|
|
No |
|
Persist scheduled task timestamps in UTC instead of the JVM default timezone |
Insights Configuration
The Insights feature collects aggregated platform usage data on a configurable schedule. Two background jobs run independently:
-
Resource ownership: counts topics, application deployments, and environments per group
-
Topic volume: tracks message counts and identifies unused topics per environment
Both schedules use standard cron expressions and default to running daily at midnight.
scheduler:
insights:
resources:
cron: "0 0 0 * * ?" # Resource ownership collection schedule
topic-volume:
cron: "0 0 0 * * ?" # Topic volume collection schedule
| Property | Required | Default | Description |
|---|---|---|---|
|
Yes |
|
Cron schedule for the resource ownership insights job |
|
Yes |
|
Cron schedule for the topic volume insights job |
Audit History Retention & Cleanup
When auditing is enabled (axual.audit.enabled=true), audit events are
persisted to the database. A scheduled job periodically deletes audit
history older than the configured retention period, in batches, to keep
the table from growing unbounded.
axual:
audit:
enabled: false
history-retention-days: 365
cleanup-cron: "0 0 3 * * ?" # daily at 3 AM
cleanup-batch-size: 1000
cleanup-batch-delay-ms: 50
| Property | Required | Default | Description |
|---|---|---|---|
|
No |
|
Master switch for audit event
persistence (also exposed as |
|
No |
|
Age, in days, beyond which audit history rows are deleted by the cleanup job. |
|
No |
|
Cron schedule for the audit history cleanup job. |
|
No |
|
Number of audit rows deleted per batch. |
|
No |
|
Delay, in milliseconds, between consecutive delete batches (throttles database load). |
Certificate Expiry Checks
A scheduled job inspects managed certificates and publishes expiry events as they approach their expiration date — daily once within the daily threshold, weekly once within the (wider) weekly threshold.
axual:
system-management:
scheduler:
certificate-expiry:
cron: "0 0 9 * * ?" # daily at 9 AM
daily-threshold-days: 7
weekly-threshold-days: 30
| Property | Required | Default | Description |
|---|---|---|---|
|
No |
|
Cron schedule for the certificate expiry check job. |
|
No |
|
Days before expiry within which expiry events are published daily. |
|
No |
|
Days before expiry within which expiry events are published weekly. |
Note: this key uses the hyphenated
axual.system-managementprefix, which is distinct from theaxual.systemmanagementprefix used by the Kafka Connect plugin scan below.
KSML Deployment Sizes
The catalog of deployment sizes (CPU / memory presets) and streams state-store sizes that KSML applications can be deployed with. Both lists are validated at startup — the application fails to start if either is empty. Exactly one deployment size may be marked as the default; if none is marked, the first entry is used and a warning is logged.
axual:
application-deployment:
ksml:
deployment-sizes:
- name: "XS"
cpu: "0.5"
memory: 2Gi
- name: "S"
default-size: true
cpu: "1"
memory: 4Gi
# ... M, L, XL
streams-state-store:
sizes-megabytes:
- 256
- 512
- 1024
- 2048
- 4096
| Property | Required | Default | Description |
|---|---|---|---|
|
Yes |
- |
List of
selectable KSML deployment sizes. Each entry has |
|
Yes |
- |
List of selectable streams state-store sizes, in megabytes. At
least one positive value. Sizes ≥ 1024 render as |
Flink Deployment Sizes
The catalog of deployment sizes (TaskManager CPU / memory presets) for Flink SQL applications. The list is validated at startup — the application fails to start if empty. Exactly one deployment size may be marked as the default; if none is marked, the first entry is used and a warning is logged.
axual:
application-deployment:
flink:
deployment-sizes:
- name: "XS"
cpu: "0.5"
memory: 2Gi
- name: "S"
default-size: true
cpu: "1"
memory: 4Gi
- name: "M"
cpu: "2"
memory: 8Gi
- name: "L"
cpu: "3"
memory: 12Gi
- name: "XL"
cpu: "4"
memory: 16Gi
| Property | Required | Default | Description |
|---|---|---|---|
|
Yes |
- |
List of
selectable Flink deployment sizes (TaskManager sizing). Each entry has
|
Generated Credential Passwords
Controls how randomly-generated passwords (used for SASL/SCRAM
application credentials) are produced. Each password is length
characters long; each character is a random code point in the
[origin, bound) range.
axual:
credentials:
password:
length: 10
origin: 1
bound: 122
| Property | Required | Default | Description |
|---|---|---|---|
|
Yes |
|
Number of characters in a generated password. |
|
Yes |
|
Inclusive lower bound of the random character code-point range. |
|
Yes |
|
Exclusive upper bound of the random character code-point range. |
Note: these properties have no built-in fallback in code; they ship with the values above in the default
application.yml. Overriding them is optional, but removing them entirely prevents startup.
Connector & KSML Deployment State Polling
The database only stores the desired deployment state; the actual state is fetched live from the provisioner / Kafka Connect REST interface on a configurable cadence (see AXPD-11147). When the fetcher detects that the actual state diverges from the desired state, it publishes a deployment-failure event (which in turn drives the throttled notification described below). These poll jobs never write the actual state back to the database.
axual:
applicationlifecycle:
connector:
state:
poll:
cron: "0 */5 * ? * *" # every 5 minutes
ksml:
state:
poll:
cron: "0 */5 * ? * *" # every 5 minutes
| Property | Required | Default | Description |
|---|---|---|---|
|
No |
|
Cron schedule for polling the actual
Connector deployment state from Kafka Connect. Falls back to the legacy
|
|
No |
|
Cron schedule for polling the actual
KSML deployment state. Falls back to the legacy
|
Service Accounts
Service accounts (AXPD-11914) are non-human identities that call the
Platform Manager API. Each one is a confidential client in the tenant’s
own identity realm plus a Platform Manager user of type SA, created,
updated, rotated and deleted through /api/service-accounts by tenant
administrators. Reading them (list, get, search, and the federated-mode
options) is open to any user of the tenant — a service account turns up
as a group member, so a team has to be able to resolve one, and the
federation values are what an engineer needs to configure the workload
that authenticates as it.
Configuration
Both defaults suit a hosted deployment and need no change. An on-premises deployment may want its own identity domain, and a deployment whose tenants tune their own realms may want to hand the token lifetime back to Keycloak.
axual:
tenantmanagement:
serviceaccount:
access-token-lifespan-seconds: 300 # 0 or less: let each realm decide
identity-domain: sa.axual.io
| Property | Required | Default | Description |
|---|---|---|---|
|
No |
|
Written as the |
|
No |
|
The domain of a service account’s reserved identity,
|
Federated (secretless) service accounts — per-realm prerequisite
A service account can authenticate with an assertion signed by the customer’s identity provider instead of a client secret. This needs realm configuration that Platform Manager does not create, and which is therefore an operator task, once per realm:
-
An enabled identity provider with
supportsClientAssertionsset, configured with the external provider’sissuer,jwksUrl,validateSignature, and theclientIdthat assertions must carry as theiraud(viaallowClientIdAsAudience). Exactly one such provider must be enabled: with none, federation is reported as unavailable; with more than one, Platform Manager refuses to guess and logs a warning naming the competing aliases.Note this is not the separate
jwtAuthorizationGrantEnabledflag, nor thejwt-authorization-grantprovider type — Keycloak models those as a different feature, and a provider of that type can never authenticate a federated client.For Entra the provider also needs
supportsClientAssertionReuse(Entra tokens carryuti, notjti, so reuse checks reject them otherwise) and a raisedfedClientAssertionMaxExp(Azure caches managed-identity tokens for hours, which the default past-age check rejects). -
The
federated-jwtexecution in the realm’s bound Client Authentication flow. Realms created on Keycloak 26.6 or later already have it. Realms upgraded from an older version do not — Keycloak does not retrofit built-in flows on upgrade, and the built-in flow cannot be edited in place, so an operator has to duplicate theclientsflow, add “Signed JWT - Federated” as Alternative, and bind the copy as the Client Authentication flow. The execution is also gated on theclient-auth-federatedfeature flag, so the server must be started with it enabled.
Both are checked before anything is created, and creation fails with an
error naming the missing prerequisite. If the execution is missing and
the check is bypassed, the failure surfaces at token time as a
misleading client_not_found.
GET /api/service-accounts/federation-options reports the realm’s
status, so the condition is visible without attempting a creation.
The whole exchange is covered end to end by
ServiceAccountFederationKeycloakIT, which uses a second Keycloak realm
as the external provider — so the setup above is executable
documentation rather than prose.
Flink SQL Deployment Configuration
Flink SQL application deployments (AXPD-11711) are provisioned on the Ververica platform. The Ververica engine version applied to SQL-script deployments is configurable, so a new engine can be rolled out without a code change. The base URL and API token are resolved per Flink cluster (from cluster config + Vault) and are not set here.
Deployments are created, read, updated and deleted through Ververica’s
v1 (Kubernetes-style) deployment API, because that is the only one
that models pod customization: spec.template.spec.kubernetes.pods. The
update runs on v1 for the same reason as the create: a v2 update carries
no kubernetes block, so it would drop the pod options off an existing
deployment - and every start, resume and SQL save updates the deployment
first. Because the v1 PUT replaces the whole resource, an update reads
the deployment back first and overwrites only what Platform Manager owns
(the SQL, the versions, the pod options and, when starting, the
resources), so a change to pods reaches deployments that already
exist. Only the job endpoints (start, stop, latest job) are on the v2
API, which has no v1 equivalent. The pod options are configured as a
block of YAML rather than as nested properties, since they are
Kubernetes API objects whose camel-case keys (nodeAffinity) must reach
the platform unchanged. Either pods or the pod templates can be
used, not both, and Ververica validates the object lazily at Flink
cluster creation time - so a wrong affinity shows up as a deployment
that does not schedule, not as a rejected request.
When a Flink SQL deployment is started (AXPD-11713), the resources of its job are pushed to Ververica. TaskManager CPU and memory come from the deployment’s own selected size (see Flink Deployment Sizes), because that is the application owner’s choice; the parallelism and the JobManager sizing are properties of how this platform runs Flink and are therefore configured here, once, for every Flink SQL job.
A Flink SQL deployment’s JobManager log can also be followed live (AXPD-11820). Ververica serves the log as a finite document with a byte offset rather than as a stream, so an open Server-Sent Events stream polls it: the first poll sends the tail of the log, and each one after that transfers only what has been written since. The interval is configurable because it trades how live the viewer feels against how many requests each open viewer costs.
axual:
applicationlifecycle:
flink:
engine-version: "vera-4.5-jdk11-flink-1.20"
flink-version: "1.20"
parallelism: 1
jobmanager:
cpu: 1
memory: 1Gi
kubernetes:
pods: |
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: axual.io/flink
operator: In
values: ["true"]
logs:
poll-interval: 5s
| Property | Required | Default | Description |
|---|---|---|---|
|
No |
|
Ververica engine version applied to Flink SQL-script deployments. |
|
No |
|
Parallelism a started Flink SQL job runs with. |
|
No |
|
JobManager
CPU cores. Ververica requires a number of at least |
|
No |
|
JobManager memory, with a Kubernetes unit suffix (for example |
|
No |
|
Flink
version of the engine image, sent as the v1 SQL artifact’s
|
|
No |
(unset) |
Kubernetes pod options ( |
|
No |
|
How often an open SSE log stream asks Ververica for newly written JobManager log lines. |
Deployment-Failure Notification Throttling
When a Connector or KSML deployment failure is detected during polling, a notification is sent to the application owners. To avoid alert storms, consecutive failure notifications for the same deployment are throttled: at most one notification per deployment within the configured interval.
axual:
notification:
connector:
max-frequency-minutes: 60
ksml:
max-frequency-minutes: 60
| Property | Required | Default | Description |
|---|---|---|---|
|
No |
|
Minimum interval, in minutes, between consecutive Connector deployment-failure notifications for the same deployment. |
|
No |
|
Minimum
interval, in minutes, between consecutive KSML deployment-failure
notifications for the same deployment. Falls back to the legacy
|
Kafka Connect Plugin Scan
Platform Manager periodically scans the managed Kafka Connect instances to refresh the catalog of available connector plugins. The scan cadence is configurable.
axual:
systemmanagement:
connect:
plugins-scan:
cron: "0 * */12 ? * *" # every 12 hours
| Property | Required | Default | Description |
|---|---|---|---|
|
No |
|
Cron schedule for scanning managed
Connect instances for available connector plugins. Falls back to the
legacy |
Kafka Connect Cluster Plugin Discovery
For registered Kafka Connect clusters (not the legacy Axual Connect above), Platform Manager discovers the connector plugins installed on each cluster and stores them in a local catalog. A background job refreshes the catalog on a schedule, and each cluster is queried over its REST API with a per-cluster timeout. The same timeout is also used when validating a cluster during registration.
axual:
systemmanagement:
kafka-connect:
plugins-scan:
cron: "0 0 4 * * ?" # daily at 4 AM
rest:
timeout-ms: 10000 # per-cluster Connect REST API timeout (connect + response)
| Property | Required | Default | Description |
|---|---|---|---|
|
No |
|
Cron schedule for the background job that discovers connector plugins from every registered Kafka Connect cluster. Runs on a single node. |
|
No |
|
Timeout in milliseconds for connecting to and reading from a Kafka Connect cluster’s REST API. Used by both plugin discovery and cluster validation. |
Kafka Connect Log Viewer Credentials
A Kafka Connect cluster can name a runtime provisioner in its
logViewerUrl. Platform Manager calls that address to read the worker
logs of a connector deployment, as a JSON batch or as a live stream. If
the provisioner requires basic authentication, set the credentials
below.
These are separate from ksml-provisioner.username and
ksml-provisioner.password on purpose. The log viewer address is stored
per Connect cluster and the KSML address per instance, so the two may be
different deployments with different credentials.
axual:
application-deployment:
connect:
log-viewer:
username: ""
password: ""
| Property | Required | Default | Description |
|---|---|---|---|
|
No |
- |
Basic authentication user for the runtime provisioner that serves Kafka Connect worker logs. Leave empty to send no authentication header. |
|
No |
- |
Password that goes with the user above. Both must be set before a header is sent. |
JVM memory
The image sizes the heap at 80% of the container memory limit
(-XX:MaxRAMPercentage=80). That suits a deployment with a few GB: the
JVM’s non-heap footprint — metaspace, code cache, thread stacks, direct
buffers — is broadly fixed rather than proportional, so the heap
ceiling plus non-heap still fits.
It does not suit small limits. Below roughly 1.5Gi the same 80% leaves
less than the fixed non-heap needs, so the JVM may commit more than the
container can hold and the kernel OOMKills it — with no
OutOfMemoryError in the log, because the heap itself never exhausts.
Lower the ceiling on such deployments through the chart’s env, which
is appended after the image defaults so later -XX flags win:
env:
- name: JAVA_OPTS
value: "-XX:MaxRAMPercentage=55 -XX:+UseG1GC -XX:G1PeriodicGCInterval=300000"
|
Pick it so |
|
Worth pinning below 1792MiB of container memory, where the JVM otherwise selects SerialGC — which never returns freed memory to the OS, so usage only ratchets upward. |
|
Lets G1 uncommit while idle; without it G1 only uncommits at Remark and Full GC. |
env is a list, so keep any other entries the deployment needs in the
same block — a later values layer that sets env replaces it wholesale
rather than merging.
Docker environment variables
In this table, you can find a description of each environment variable that should be configured for deploying the application.
| Name | Possible Values | Required | Description |
|---|---|---|---|
SPRING_DATASOURCE_URL |
A string of jdbc url “no default” |
YES |
Specifies the JDBC URL used to connect to any database. |
SPRING_DATASOURCE_NAME |
A string defining the datasource name default value: governancedb |
NO |
This is typically used when you have multiple data sources in your application. It provides a name or identifier for the datasource. |
SPRING_DATASOURCE_DRIVER-CLASS-NAME |
A string defining the datasource driverClassName com.mysql.cj.jdbc.Driver | org.mariadb.jdbc.Driver “no default” |
YES |
Specifies the fully-qualified class name of the JDBC driver that should be used for the database connection. |
SPRING_DATASOURCE_USERNAME |
A string defining the username “no default” |
YES |
This sets the username used to authenticate with the database. |
SPRING_DATASOURCE_PASSWORD |
A string defining the password “no default” |
YES |
This sets the password for the database connection. |
SPRING_JPA_HIBERNATE_DATABASE-PLATFORM |
org.hibernate.dialect.MariaDBDialect | org.hibernate.dialect.MySQLDialect “no default” |
YES |
This is used to specify the SQL dialect that should be used by JPA and Hibernate when generating or interpreting SQL statements for a specific database. |
SPRING_JPA_HIBERNATE_DDL-AUTO |
none | validate | update | create | create-drop Default value: validate |
NO |
controls the behavior of database schema generation and modification during application startup. none: This is the default value. It means that no schema generation or modification is done by Hibernate. You are responsible for managing the database schema manually. validate: Hibernate validates the existing schema against the current entity mappings. It will not make any changes to the schema, but it will report any discrepancies or errors. update: Hibernate updates the schema automatically based on the entity mappings. It will create tables, columns, and constraints if they don’t exist in the database. However, it will not drop any tables or columns that are no longer needed. create: Hibernate creates the schema from scratch during application startup. It will drop and re-create the tables every time the application starts. Be cautious with this option as it can result in data loss in a production environment. create-drop: Similar to create, but it also drops the schema when the application shuts down. This is typically used for testing and development environments. |
SPRING_FLYWAY_VENDOR |
mysql/mariadb Default value: mariadb |
NO |
This is used to specify the database vendor for which Flyway should generate or apply database migration scripts. |
SPRING_MODULITH_EVENTS_COMPLETION-MODE |
UPDATE | DELETE | ARCHIVE Spring default: UPDATE Configured value: DELETE |
NO |
Controls how completed event publications from the Spring
Modulith event publication system are handled. |
SPRING_MAIL_HOST |
A string defining SMTP server “no default” |
Conditionally YES |
Specifies the SMTP server that will be
used to send emails. Possible values include domain names or IP
addresses of SMTP servers, e.g., |
SPRING_MAIL_PORT |
A valid port number “no default” Possible value to be set for SMTP using TLS/STARTTLS is 587, using SSL is 465. |
Conditionally YES |
Specifies the port number of the SMTP server, is
mandatory if |
SPRING_MAIL_USERNAME |
A string defining the username “no default” |
Conditionally YES |
Specifies the username used to
authenticate with the SMTP server. It corresponds to the email account
from which emails will be sent, is mandatory if
|
SPRING_MAIL_PASSWORD |
A string defining the password “no default” |
Conditionally YES |
Specifies the password used to
authenticate with the SMTP server. It should be the password associated
with the provided username, is mandatory if
|
SPRING_MAIL_PROPERTIES_MAIL_SMTP_AUTH |
A boolean value [true | false] Default value: false |
Conditionally YES |
Specifies whether authentication (user identification) is required
by the SMTP server, it is mandatory to be set as |
SPRING_MAIL_PROPERTIES_MAIL_SMTP_STARTTLS_ENABLE |
A boolean value [true | false] Default value: false |
Conditionally YES |
Specifies whether to enable the use of the STARTTLS
command (which initiates a secure connection) when connecting to the
SMTP server, it is mandatory to be set as |
SPRING_MAIL_PROPERTIES_MAIL_SMTP_LOCALHOST |
A string representing the HELO/EHLO domain name. “no default” if it’s not set, the system’s hostname (e.g., Internal Kubernetes pod name) will be appear in the header |
Conditionally YES |
Specifies the domain name
sent in the SMTP HELO/EHLO command. Setting this prevents the default
pod hostname from appearing in email headers, such as “Received”. It
helps mask internal infrastructure details when sending emails from a
Kubernetes pod. it is mandatory to be set if
|
VAULT_ENABLED |
A boolean value [true | false] “no default” |
YES |
Controls supporting Vault for persisting application credentials. |
VAULT_URI |
A valid uri “no default” |
Conditionally YES |
Specifies the uri of the Vault. It is mandatory only if
|
VAULT_ROLE-ID |
A valid RoleId “no default” |
Conditionally YES |
Role ID is used to identify the specific AppRole configured in Vault
that the application is using for authentication. It is mandatory only
if |
VAULT_SECRET-ID |
A valid secretId “no default” |
Conditionally YES |
The Secret ID is a secret token associated with a particular Role
ID that proves the application’s identity and authorization to access
secrets. It is mandatory only if |
SERVER_HTTP2_ENABLED |
A boolean value [true | false] Default value: false |
NO |
Is used in the configuration of a web server to enable or disable HTTP/2 support. |
SERVER_SSL_ENABLED |
A boolean value [true | false] Default value: true |
NO |
Enables SSL/TLS support for secure communication. |
SERVER_SSL_KEY_STORE |
A string of file path to the key-store “no default” |
Conditionally YES |
Specifies the file path
to the Java KeyStore (JKS) file that contains the server’s SSL
certificate and private key, is mandatory only if
|
SERVER_SSL_KEY_STORE_PASSWORD |
A string defining the password “no default” |
Conditionally YES |
Specifies the password
required to access the keystore itself, is mandatory only if
|
SERVER_SSL_ENABLED-PROTOCOLS |
A comma separated list of these values [TLSv1.0, TLSv1.1, TLSv1.2, TLSv1.3] “no default” |
Conditionally YES |
Specifies the list of allowed SSL/TLS protocols, is
mandatory only if |
AXUAL_API_AVAILABLE_AUTH_METHODS |
A comma seperated list of String containing these items : SSL,SCRAM_SHA_256,SCRAM_SHA_512,PLAIN Default value: SSL |
NO |
Specifies the available authentication methods which can be used for applications to be authenticated while getting access to topics. |
AXUAL_MULTI_TENANT |
A boolean value [true | false] Default value: true |
NO |
Specifies if the cluster is multi-tenant or
not. In case it is set to |
AXUAL_DEFAULT_ROLES |
A comma seperated List of strings containing default user roles. The list of existing roles in Axual is as follows: SUPER_ADMIN, TENANT_ADMIN, APPLICATION_ADMIN, STREAM_ADMIN, ENVIRONMENT_ADMIN, APPLICATION_AUTHOR, STREAM_AUTHOR, ENVIRONMENT_AUTHOR, BILLING_INTERNAL, BILLING_VIEWE, SCHEMA_AUTHOR, SCHEMA_ADMIN Default value: APPLICATION_AUTHOR, ENVIRONMENT_AUTHOR, STREAM_AUTHOR |
NO |
Specifies the default roles which can be automatically granted to a user when a new user is created. |
AXUAL_DEFAULT_PARTITIONS |
A valid number Default value: 2 |
NO |
Specifies the number of partitions per each topic. Must be at least 1 and at most 120000. |
AXUAL_DEFAULT_REPLICATION_FACTOR |
A valid number “no default” |
YES |
Specifies how many copies (replicas) of each partition of a Kafka topic should be maintained across different broker nodes. It’s a crucial factor for ensuring fault tolerance and high availability in Kafka clusters. |
AXUAL_DEFAULT_SEGMENT_TIME |
A valid number (time in milliseconds) Default value: 604800000 (7 days) |
NO |
Controls the period of time after which Kafka will force the log to roll even if the segment file isn’t full to ensure that retention can delete or compact old data. |
AXUAL_DEFAULT_RETENTION_TIME |
A valid number (time in milliseconds) Default value: 604800000 (7 days) |
NO |
Controls the
maximum time Kafka will retain a log before discarding old log segments
to free up space if the retention policy is equal to “delete”. This
represents an SLA on how soon consumers must read their data. If set to
|
AXUAL_DEFAULT_CLEANUP_POLICY |
delete | compact | delete,compact | compact,delete Default value: delete |
NO |
Specifies the cleanup policy for log segments in a topic. This property determines when log segments can be deleted to reclaim disk space. delete: This is the default cleanup policy. When this policy is applied, Kafka will delete log segments as soon as they are no longer needed for any active consumers or replication. compact: This policy is used for log compaction. With this policy, Kafka retains the latest value for each unique key in the log and deletes older versions of the same key. Log compaction is often used for Kafka topics that store changelog or event sourcing data, ensuring that the latest state of each key is always available.delete,compact: This policy combines both deletion and compaction. It deletes log segments that are no longer needed by any active consumers while also performing log compaction on the remaining data.compact,delete: Similar to the previous option, this policy combines both deletion and compaction, but it prioritizes log compaction before deletion. |
AXUAL_DEFAULT_ENVIRONMENT_COLOR |
A string defining a hexadecimal color code Default value: “#80affe” |
NO |
Specifies the default color of environment in UI. |
AXUAL_DEFAULT_SKIP-ONBOARDING |
A boolean value [true | false] Default value: true |
NO |
Controls whether the onboarding flow is skipped for newly created users. |
AXUAL_BILLING_ENABLED |
A boolean value [true | false] Default value: false |
NO |
This is used to enable billing component. |
AXUAL_CSRF_ENABLED |
A boolean value [true | false] Default value: false |
NO |
This is used for enabling Cross-Site Request Forgery (CSRF) protection. |
AXUAL_ALLOW_OVERLAPPING_CA |
A boolean value [true | false] Default value: false |
NO |
Allows Using one
CERTIFICATE AUTHORITY (CA) on multiple tenants if it’s set to |
AXUAL_VALIDATE_DUPLICATE_SCHEMAS |
A boolean value [true | false] Default value: true |
NO |
Controls validation of a
duplicate schema. If it’s set to |
AXUAL_CREATE_STREAM_DISABLE_TIME |
A valid number [0, …] Default value: 0 |
NO |
Controls Disabling the StreamConfig resource creation for the specified time in minutes. |
AXUAL_CLIENT_SOCKET_TIMEOUT |
A valid number Default value: 90000 |
NO |
Specifies the maximum amount of time in milliseconds that a client will wait for a response from a server before considering the operation as timed out or failed |
AXUAL_ORGANIZATION_MANAGER_AUTH_PROVIDER |
Supported auth provider: none, keycloak Default value: none |
NO |
Determines the authorization server for authenticating local users. ‘none’ disabled Organization Manager module. |
AXUAL_ORGANIZATION_MANAGER_KEYCLOAK_URL |
URL to access Keycloak “no default”: |
YES |
URL to access Keycloak. |
AXUAL_ORGANIZATION_MANAGER_KEYCLOAK_USERNAME |
Username to authenticate with Keycloak “no default”: |
YES |
Username to authenticate with Keycloak. |
AXUAL_ORGANIZATION_MANAGER_KEYCLOAK_PASSWORD |
Password to authenticate with Keycloak “no default”: |
YES |
Password to authenticate with Keycloak. |
AXUAL_ORGANIZATION_MANAGER_KEYCLOAK_LOCAL_REALM |
Name of local realm in Keycloak Default value: local |
YES |
Name of local realm in Keycloak. |
AXUAL_ORGANIZATION_MANAGER_KEYCLOAK_MASTER_REALM |
Name of master realm in Keycloak Default value: master |
YES |
Name of master realm in Keycloak. |
AXUAL_ORGANIZATION_MANAGER_KEYCLOAK_CLIENT_ID |
Client ID to use when authenticating with master realm of Keycloak Default value: admin-cli |
YES |
Admin client to authenticate with Keycloak. |
AXUAL_ORGANIZATION_MANAGER_KEYCLOAK_CONNECT-TIMEOUT-SECONDS |
A valid number (seconds) Default value: 5 |
NO |
Connection timeout, in
seconds, for the Keycloak admin client. Applies only when
|
AXUAL_ORGANIZATION_MANAGER_KEYCLOAK_READ-TIMEOUT-SECONDS |
A valid number (seconds) Default value: 5 |
NO |
Read timeout, in
seconds, for the Keycloak admin client. Applies only when
|
AXUAL_SECURITY_DOCS-USERNAME |
A string defining the username Default value: axual |
NO |
This sets the username used to authenticate with the docs. |
AXUAL_SECURITY_DOCS-PASSWORD |
A string defining the password Default value: notsecret |
NO |
This sets the password used to authenticate with the docs. |
AXUAL_SECURITY_TRUST_STORE |
A string of file path to the trust-store “no default” |
YES |
Specifies the file path to the trust store. |
AXUAL_SECURITY_TRUST_STORE_PASSWORD |
A string defining the password “no default” |
YES |
Specifies the password required to access and manipulate the trust store. |
AXUAL_SECURITY_KEY_STORE |
A string of file path to the key-store “no default” |
YES |
Specifies the file path to the key store. |
AXUAL_SECURITY_KEY_STORE_PASSWORD |
A string defining the key-strore password “no default” |
YES |
Specifies the password required to access and manipulate the key store. |
AXUAL_SECURITY_KEY_PASSWORD |
A string defining the key password “no default” |
YES |
Specifies the password required to unlock the private key within the key store. |
AXUAL_KEYCLOAK_USERNAME |
A string defining the username Default value: admin |
YES |
The administrative username that would be used to log in to the Keycloak administration console or authenticate API requests. |
AXUAL_KEYCLOAK_PASSWORD |
A string defining the password Default value: admin123 |
YES |
The administrative password that would be used to log in to the Keycloak administration console or authenticate API requests. |
AXUAL_CONNECT_AVAILABLE |
A boolean value [true | false] Default value: false |
Conditionally YES |
Controls the direct connection to Axual-Connect. |
AXUAL_CONNECT_INSTANCE-CONNECT-CREDENTIALS_[tenantShortName-instanceShortName]_AUTHORIZER |
basic Default value: basic |
Conditionally YES |
Specifies the type of
authorization per tenant-instance, is mandatory if
|
AXUAL_CONNECT_INSTANCE-CONNECT-CREDENTIALS_[tenantShortName-instanceShortName]_USERNAME |
A string defining the username “no default” |
Conditionally YES |
This sets the username per tenant-instance used to authenticate with
the Axual-Connect, is mandatory if
|
AXUAL_CONNECT_INSTANCE-CONNECT-CREDENTIALS_[tenantShortName-instanceShortName]_PASSWORD |
A string defining the password “no default” |
Conditionally YES |
This sets the password per tenant-instance used to authenticate with
the Axual-Connect, is mandatory if
|
AXUAL_DEFAULT-CLUSTER-PATTERN_TOPIC-RESOLVER |
A string of fully-qualified class name of topicResolver Default value: “io.axual.common.resolver.TopicPatternResolver” |
NO |
Specifies the fully-qualified class name of topicResolver which is used for resolving topics. |
AXUAL_DEFAULT-CLUSTER-PATTERN_TOPIC-PATTERN |
A string of topic pattern [“{topic}” | “{environment}-{topic}” | {instance}-{environment}-{topic} | {tenant}-{instance}-{environment}-{topic} ] Default value: “{topic}” |
NO |
Specifies the topic pattern for any kafka
cluster owned by a Tenant and not having a defined topic pattern. This
pattern is used when resolving the kafka topic name. “{topic}”
this pattern means that this cluster does not support multi-environment,
multi_instance and multi-tenant “{environment}-{topic}”
this pattern means that the cluster is a multi-environment one and
combination of |
AXUAL_DEFAULT-CLUSTER-PATTERN_GROUP-ID-RESOLVER |
A string of fully-qualified class name of groupIdResolver Default value: “io.axual.common.resolver.GroupPatternResolver” |
NO |
Specifies the fully-qualified class name of groupIdResolver which is used for resolving groups. |
AXUAL_DEFAULT-CLUSTER-PATTERN_GROUP-ID-PATTERN |
A string of groupId pattern [“{group}” | “{environment}-{group}” | {instance}-{environment}-{group} | {tenant}-{instance}-{environment}-{group} ] Default value: “{group}” |
NO |
Specifies the groupId pattern for any kafka
cluster owned by a Tenant and not having a defined groupId pattern. This
pattern is used when resolving the group name. “{group}” this
pattern means that this cluster does not support multi-environment,
multi_instance and multi-tenant “{environment}-{group}”
this pattern means that the cluster is a multi-environment one and
combination of |
AXUAL_DEFAULT-CLUSTER-PATTERN_TRANSACTIONAL-ID-RESOLVER |
A string of fully-qualified class name of transactionalIdResolver Default value: “io.axual.common.resolver.TransactionalIdPatternResolver” |
NO |
Specifies the fully-qualified class name of transactionalIdResolver which is used for resolving transactions. |
AXUAL_DEFAULT-CLUSTER-PATTERN_TRANSACTIONAL-ID-PATTERN |
A string of transactionalId pattern [“{transactional.id}” | “{environment}-{app.id}” | {instance}-{environment}-{transactional.id} | {tenant}-{instance}-{environment}-{transactional.id} ] Default value: “{transactional.id}” |
NO |
Specifies the
transactionalId pattern for any kafka cluster owned by a Tenant and not
having a defined transactionalId pattern. This pattern is used when
resolving the transactionalId. “{transactional.id}” this pattern
means that the cluster does not support multi-environment,
multi_instance and multi-tenant
“{environment}-{transactional.id}” this pattern means that
the cluster is multi-environment and combination of
|
AXUAL_DEFAULT-CLUSTER-PATTERN_MULTI-TENANT-TOPIC-PATTERN |
A string of multi-tenant topic pattern Default value: “{tenant}-{instance}-{environment}-{topic}” |
NO |
Specifies the topic pattern for any kafka cluster not owned by a Tenant
and not having a defined topic pattern. This pattern is used when
resolving the kafka topic name.
“{tenant}-{instance}-{environment}-{topic}” this
pattern means that the cluster is a multi-environment, multi-instance
and multi_tenant and combination of
|
AXUAL_DEFAULT-CLUSTER-PATTERN_MULTI-TENANT-GROUP-ID-PATTERN |
A string of multi-tenant groupId pattern Default value: “{tenant}-{instance}-{environment}-{group}” |
NO |
Specifies the groupId pattern for any kafka cluster not owned by a
Tenant and not having a defined groupId pattern. This pattern is used
when resolving the kafka group name.
“{tenant}-{instance}-{environment}-{group}” this
pattern means that the cluster is a multi-environment, multi-instance
and multi_tenant and combination of
|
AXUAL_DEFAULT-CLUSTER-PATTERN_MULTI-TENANT-TRANSACTIONAL-ID-PATTERN |
A string of multi-tenant transactionalId pattern Default value: “{tenant}-{instance}-{environment}-{transactional.id}” |
NO |
Specifies the transactionalId pattern for any kafka cluster not
owned by a Tenant and not having a defined transactionalId pattern. This
pattern is used when resolving the transactionalId.
“{tenant}-{instance}-{environment}-{transactional.id}”
this pattern means that the cluster is multi-environment, multi-instance
and multi-tenant and combination of
|
AXUAL_NOTIFICATIONS_ENABLED |
A boolean value [true | false] Default value: false |
NO |
Enables Notification service for the application. |
AXUAL_NOTIFICATIONS_SENDER |
A valid email address “no default” |
Conditionally YES |
Represents the email address of the
notification sender, it can be the same value as
|
AXUAL_NOTIFICATIONS_SMTP_ENABLED |
A boolean value [true | false] no default: |
Conditionally YES |
Enables Notification
service to use SMTP for on-prem installation. It is mandatory if
|
GOVERNANCE_VAULT_ENABLED |
A boolean value [true | false] Default value: false |
Conditionally YES |
Controls supporting Hashicorp Key Vault for governance to persist application credentials. |
GOVERNANCE_VAULT_URI |
A valid uri “no default” |
Conditionally YES |
Specifies the URI or endpoint of the Hashicorp Key
Vault instance. It is mandatory only if
|
GOVERNANCE_VAULT_ROLE-ID |
A valid RoleId “no default” |
Conditionally YES |
Role ID is used to identify the specific AppRole
configured in Hashicorp Vault that the application is using for
authentication. It is mandatory only if
|
GOVERNANCE_VAULT_SECRET-ID |
A valid secretId “no default” |
Conditionally YES |
The Secret ID is a secret token associated with a
particular Role ID that proves the application’s identity and
authorization to access secrets. It is mandatory only if
|
GOVERNANCE_VAULT_PATH |
A string defining path Default value: “governance” |
Conditionally YES |
Defines the specific path within
Vault’s storage hierarchy where the application expects to read or write
secrets or other data. It is mandatory only if
|
GOVERNANCE_VAULT_NAMESPACE |
A string defining the namespace “no default” |
Conditionally YES |
Specifies the Vault namespace to
use. A Vault namespace allows you to create isolated environments within
a Vault server, is mandatory if |
SCHEDULER_RECONCILIATION_CONNECT_PLUGINS_CRON |
A string defining a cron expression Default value: “0 * /12 ? *” (evey 12 hours) |
NO |
Deprecated — use
|
SCHEDULER_RECONCILIATION_CONNECT_DEPLOYMENTS_CRON |
A string defining a cron expression Default value: “0 /5 ? * *” (evey 5 minutes) |
NO |
Deprecated — use
|
CONNECTOR-VAULT_ENABLED |
A boolean value [true | false] Default value: false |
Conditionally YES |
Controls supporting Vault for persisting connectors secrets per tenant-instance. |
CONNECTOR-VAULT_INSTANCES_[tenantShortName-instanceShortName]_URI |
The URI of the vault “no default” |
Conditionally YES |
Specifies the
type of authorization per tenant-instance, is mandatory if
|
CONNECTOR-VAULT_INSTANCES_[tenantShortName-instanceShortName]_ROLE-ID |
A valid RoleId “no default” |
Conditionally YES |
Role ID is used to
identify the specific AppRole per tenant-instance configured in
Hashicorp Vault that the application is using for authentication, is
mandatory if |
CONNECTOR-VAULT_INSTANCES_[tenantShortName-instanceShortName]_SECRET-ID |
A valid secretId “no default” |
Conditionally YES |
The Secret ID is
a secret token associated with a particular Role ID per tenant-instance
that proves the application’s identity and authorization to access
secrets, is mandatory if |
CONNECTOR-VAULT_INSTANCES_[tenantShortName-instanceShortName]_NAMESPACE |
A string defining the namespace “no default” |
Conditionally YES |
Specifies the Vault namespace per tenant-instance to use. A Vault
namespace allows you to create isolated environments within a Vault
server, is mandatory if |
CONNECTOR-VAULT_INSTANCES_[tenantShortName-instanceShortName]_CONNECTORS-PATH |
A string defining path “no default” |
Conditionally YES |
Specifies a
path within Vault per tenant-instance where connectors or secrets may be
stored or managed, is mandatory if |
CONNECTOR-VAULT_INSTANCES_[tenantShortName-instanceShortName]_PRIVATE-KEY-NAME |
A string defining the privateKey name “no default” |
Conditionally YES |
Specifies the name of a private key per tenant-instance within
Vault, is mandatory if |
CONNECTOR-VAULT_INSTANCES_[tenantShortName-instanceShortName]_CERT-CHAIN-KEY-NAME |
A string defining the certChainKey name “no default” |
Conditionally YES |
Specifies the name of a certificate chain or certificate-related
resource per tenant-instance within Vault per tenant-instance, is
mandatory if |
CONNECTOR-VAULT_INSTANCES_[tenantShortName-instanceShortName]_TRUST-STORE |
A string of file path to the trust-store “no default” |
NO |
Specifies the file path to the trust store within Vault per
tenant-instance, if it’s not set, the
|
CONNECTOR-VAULT_INSTANCES_[tenantShortName-instanceShortName]_TRUST-STORE-PASSWORD |
A string defining the password “no default” |
NO |
Specifies the
password required to access and manipulate the trust store within Vault
per tenant-instance, if it’s not set, the
|
CONNECTOR-VAULT_INSTANCES_[tenantShortName-instanceShortName]_KEY-STORE |
A string of file path to the key-store “no default” |
NO |
Specifies
the file path to the key store within Vault per tenant-instance, if it’s
not set, the |
CONNECTOR-VAULT_INSTANCES_[tenantShortName-instanceShortName]_KEY-STORE-PASSWORD |
A string defining the key-store password “no default” |
NO |
Specifies the password required to access and manipulate the key store
within Vault per tenant-instance, if it’s not set, the
|
CONNECTOR-VAULT_INSTANCES_[tenantShortName-instanceShortName]_KEY-PASSWORD |
A string defining the key password “no default” |
NO |
Specifies the
password required to unlock the client’s private key within the key
store within Vault per tenant-instance, if it’s not set, the
|
AXUAL_AUDIT_ENABLED |
A boolean value [true | false] Default value: false |
NO |
Enables Auditing for the application. |
AXUAL_APPLICATION-DEPLOYMENT_CONNECT_LOG-VIEWER_USERNAME |
A string defining the username “no default” |
NO |
Basic
authentication user for the runtime provisioner that serves Kafka
Connect worker logs (the |
AXUAL_APPLICATION-DEPLOYMENT_CONNECT_LOG-VIEWER_PASSWORD |
A string defining the password “no default” |
NO |
Password that goes with the user above. Both must be set before Platform Manager sends a basic authentication header to the log viewer. |