Rover Domain
The Rover domain is the primary user-facing entry point for the Control Plane. Users define their API exposures, subscriptions, and event configurations in a declarative Rover file, and the operator translates them into resources across multiple other domains.
Custom Resources
AgentSpecification
AgentSpecification is the Schema for the agentspecifications API
Group: rover.cp.ei.telekom.de · Version: v1 · Scope: Namespaced
AgentSpecificationSpec
Appears in: AgentSpecification, McpSpecification
| Field | Type | Default | Validation |
|---|---|---|---|
basepath | string | — | Required, maxLength: 200, pattern: ^/.*$ |
category | string | other | Required |
description | string | — | Optional |
hash | string | — | Required |
name | string | — | Required |
scopes | string[] | — | Optional |
specification | string | — | Required |
version | string | — | Required, pattern: ^\d+.*$ |
AgentSpecificationStatus
Appears in: AgentSpecification
| Field | Type | Default | Validation |
|---|---|---|---|
agentCard | AgentCard | — | Optional |
conditions | Condition[] | — | Optional |
AgentCard
Appears in: AgentSpecificationStatus, ApiSpecificationStatus, EventSpecificationStatus, FileSpecificationStatus, McpSpecificationStatus, RoverStatus
AgentCard reference
| Field | Type | Default | Validation |
|---|---|---|---|
name | string | — | Required |
namespace | string | — | Required |
uid | string | — | Optional |
Condition
Appears in: AgentSpecificationStatus, ApiChangelogStatus, ApiSpecificationStatus, EventSpecificationStatus, FileSpecificationStatus, McpSpecificationStatus, RoverStatus
| Field | Type | Default | Validation |
|---|---|---|---|
lastTransitionTime | string | — | Required, Format: date-time |
message | string | — | Required, maxLength: 32768 |
observedGeneration | integer | — | Optional, Format: int64, minimum: 0 |
reason | string | — | Required, minLength: 1, maxLength: 1024, pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ |
status | string | — | Required, Enum: True \| False \| Unknown |
type | string | — | Required, maxLength: 316, pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ |
ApiChangelog
ApiChangelog is the Schema for the apichangelogs API The ApiChangelog name is the normalized basePath with major version removed Example: basePath "/eni/my-api/v1" → changelog name "eni-my-api"
Group: rover.cp.ei.telekom.de · Version: v1 · Scope: Namespaced
ApiChangelogSpec
Appears in: ApiChangelog, Roadmap
ApiChangelogSpec defines the desired state of ApiChangelog
| Field | Type | Default | Validation |
|---|---|---|---|
contents | string | — | Required |
hash | string | — | Required |
specificationRef | SpecificationRef | — | Required |
SpecificationRef
Appears in: ApiChangelogSpec
SpecificationRef is a reference to the ApiSpecification this changelog describes The referenced specification may or may not exist yet
| Field | Type | Default | Validation |
|---|---|---|---|
apiVersion | string | — | Optional |
kind | string | — | Optional |
name | string | — | Required |
namespace | string | — | Required |
uid | string | — | Optional |
ApiChangelogStatus
Appears in: ApiChangelog, Roadmap
ApiChangelogStatus defines the observed state of ApiChangelog
| Field | Type | Default | Validation |
|---|---|---|---|
conditions | Condition[] | — | Optional |
ApiSpecification
ApiSpecification is the Schema for the apispecifications API
Group: rover.cp.ei.telekom.de · Version: v1 · Scope: Namespaced
ApiSpecificationSpec
Appears in: ApiSpecification
| Field | Type | Default | Validation |
|---|---|---|---|
basepath | string | — | Required, maxLength: 200, pattern: ^/.*$ |
category | string | other | Required |
hash | string | — | Required |
lint | Lint | — | Optional |
scopes | string[] | — | Optional |
specification | string | — | Required |
version | string | — | Required, pattern: ^\d+.*$ |
xvendor | boolean | false | Optional |
Lint
Appears in: ApiSpecificationSpec
Lint contains the result of the OAS linting performed by rover-server.
| Field | Type | Default | Validation |
|---|---|---|---|
dashboardUrl | string | — | Optional |
message | string | — | Optional |
passed | boolean | — | Required |
ApiSpecificationStatus
Appears in: ApiSpecification
| Field | Type | Default | Validation |
|---|---|---|---|
api | AgentCard | — | Optional |
conditions | Condition[] | — | Optional |
EventSpecification
EventSpecification is the Schema for the eventspecifications API. It defines an event type's metadata and creates the corresponding EventType singleton in the event domain, analogous to how ApiSpecification creates Api resources.
Group: rover.cp.ei.telekom.de · Version: v1 · Scope: Namespaced
EventSpecificationSpec
Appears in: EventSpecification
EventSpecificationSpec defines the desired state of EventSpecification.
| Field | Type | Default | Validation |
|---|---|---|---|
category | string | other | Optional, pattern: ^[a-z]+$ |
description | string | — | Optional |
specification | string | — | Optional |
type | string | — | Required, minLength: 1, maxLength: 253, pattern: ^[a-z0-9]+([.-][a-z0-9]+)*$ |
version | string | — | Required, pattern: ^\d+.*$ |
EventSpecificationStatus
Appears in: EventSpecification
EventSpecificationStatus defines the observed state of EventSpecification.
| Field | Type | Default | Validation |
|---|---|---|---|
conditions | Condition[] | — | Optional |
eventType | AgentCard | — | Optional |
FileSpecification
FileSpecification is the Schema for the filespecifications API. It defines a file type's metadata and creates the corresponding file-domain FileType, analogous to how ApiSpecification creates Api resources and EventSpecification creates EventType resources.
Group: rover.cp.ei.telekom.de · Version: v1 · Scope: Namespaced
FileSpecificationSpec
Appears in: FileSpecification
FileSpecificationSpec defines the desired state of FileSpecification.
| Field | Type | Default | Validation |
|---|---|---|---|
description | string | — | Optional |
specification | string | — | Optional |
storageType | string | sftp | Optional, Enum: sftp |
type | string | — | Required, minLength: 1, maxLength: 253 |
version | string | — | Required, pattern: ^\d+.*$ |
FileSpecificationStatus
Appears in: FileSpecification
FileSpecificationStatus defines the observed state of FileSpecification.
| Field | Type | Default | Validation |
|---|---|---|---|
conditions | Condition[] | — | Optional |
fileType | AgentCard | — | Optional |
McpSpecification
McpSpecification is the Schema for the mcpspecifications API
Group: rover.cp.ei.telekom.de · Version: v1 · Scope: Namespaced
McpSpecificationStatus
Appears in: McpSpecification
| Field | Type | Default | Validation |
|---|---|---|---|
conditions | Condition[] | — | Optional |
mcpServer | AgentCard | — | Optional |
Roadmap
Roadmap is the Schema for the roadmaps API The Roadmap name is the normalized basePath with major version removed Example: basePath "/eni/my-api/v1" → roadmap name "eni-my-api"
Group: rover.cp.ei.telekom.de · Version: v1 · Scope: Namespaced
Rover
Rover is the Schema for the rovers API Rover resources define API exposures and subscriptions for applications
Group: rover.cp.ei.telekom.de · Version: v1 · Scope: Namespaced
RoverSpec
Appears in: Rover
Spec defines the desired state of the Rover resource
| Field | Type | Default | Validation |
|---|---|---|---|
authentication | Authentication | — | Optional |
clientSecret | string | — | Optional |
exposures | Exposures[] | — | Optional, maxItems: 150 |
externalIds | ExternalId[] | — | Optional, maxItems: 16 |
ipRestrictions | IpRestrictions | — | Optional |
listenerSubscription | ListenerSubscription | — | Optional |
listeners | Listeners[] | — | Optional |
permissions | Permissions[] | — | Optional, maxItems: 150 |
subscriptions | Subscriptions[] | — | Optional, maxItems: 150 |
zone | string | — | Required, minLength: 1 |
Authentication
Appears in: RoverSpec
Authentication defines the authentication configuration for this application
| Field | Type | Default | Validation |
|---|---|---|---|
m2m | M2M | — | Optional |
M2M
Appears in: Authentication
M2M defines machine-to-machine authentication settings for the application
| Field | Type | Default | Validation |
|---|---|---|---|
tokenRequest | string | client_secret_basic | Optional, Enum: client_secret_basic \| client_secret_post |
Exposures
Appears in: RoverSpec
Exposures is a list of APIs and Events that this Rover exposes to consumers
| Field | Type | Default | Validation |
|---|---|---|---|
agentic | Agentic | — | Optional |
api | Api | — | Optional |
event | Event | — | Optional |
file | File | — | Optional |
Agentic
Appears in: Exposures
Agentic defines an Agentic(MCP or agent) server exposure configuration
| Field | Type | Default | Validation |
|---|---|---|---|
approval | Approval | — | Required |
basePath | string | — | Required, pattern: ^/[a-z0-9-/]+$ |
security | Security | — | Optional |
traffic | Traffic | — | Optional |
transformation | Transformation | — | Optional |
upstreams | Upstreams[] | — | Required, minItems: 1, maxItems: 12 |
variant | string | MCP | Required, Enum: MCP \| TELECONTEXTMCP \| AGENT |
visibility | string | Enterprise | Required, Enum: World \| Zone \| Enterprise |
Approval
Appears in: Agentic, Api, Event, File
Approval defines the approval workflow for subscriptions to this MCP server
| Field | Type | Default | Validation |
|---|---|---|---|
strategy | string | Simple | Required, Enum: Auto \| Simple \| FourEyes |
trustedTeams | TrustedTeam[] | — | Optional, minItems: 0, maxItems: 10 |
TrustedTeam
Appears in: Approval
TrustedTeams identifies teams that are trusted for approving this API Per default your own team is trusted
| Field | Type | Default | Validation |
|---|---|---|---|
group | string | — | Required, minLength: 1 |
team | string | — | Required, minLength: 1 |
Security
Security defines optional security configuration
| Field | Type | Default | Validation |
|---|---|---|---|
m2m | RoverM2M | — | Optional |
RoverM2M
Appears in: Security
M2M defines machine-to-machine authentication configuration
| Field | Type | Default | Validation |
|---|---|---|---|
basic | Basic | — | Optional |
claims | Claims | — | Optional |
externalIDP | ExternalIDP | — | Optional |
scopes | string[] | — | Optional, maxItems: 100 |
Basic
Appears in: RoverM2M, ExternalIDP, RoverM2M2
Basic defines basic authentication configuration
| Field | Type | Default | Validation |
|---|---|---|---|
password | string | — | Required, minLength: 1, maxLength: 256 |
username | string | — | Required, minLength: 1, maxLength: 256 |
Claims
Appears in: RoverM2M
Claims defines token claims that must be present in the token reaching the upstream. Only valid on the platform-managed LMS token.
| Field | Type | Default | Validation |
|---|---|---|---|
aud | Aud | — | Optional |
Aud
Appears in: Claims
Aud defines the audience claim
| Field | Type | Default | Validation |
|---|---|---|---|
value | string | — | Optional, minLength: 1, maxLength: 256 |
valueFrom | string | — | Optional, Enum: ProviderClientId \| ConsumerClientId \| BasePath |
ExternalIDP
Appears in: RoverM2M
ExternalIDP defines external identity provider configuration
| Field | Type | Default | Validation |
|---|---|---|---|
basic | Basic | — | Optional |
client | Client | — | Optional |
grantType | string | — | Required, Enum: client_credentials \| authorization_code \| password \| refresh_token |
tokenEndpoint | string | — | Required, Format: uri, maxLength: 2048 |
tokenRequest | string | — | Required, Enum: client_secret_basic \| client_secret_post |
Client
Appears in: ExternalIDP, RoverM2M2
Client defines client credentials for the OAuth2 token request
| Field | Type | Default | Validation |
|---|---|---|---|
clientId | string | — | Optional, maxLength: 256 |
clientKey | string | — | Optional, maxLength: 8192 |
clientSecret | string | — | Optional, maxLength: 512 |
refreshToken | string | — | Optional |
Traffic
Traffic defines optional traffic management configuration
| Field | Type | Default | Validation |
|---|---|---|---|
circuitBreaker | CircuitBreaker | — | Optional |
failover | Failover | — | Optional |
loadBalancing | LoadBalancing | — | Optional |
rateLimit | RateLimit | — | Optional |
CircuitBreaker
Appears in: Traffic, RoverTraffic
CircuitBreaker defines the Kong circuit breaker configuration
| Field | Type | Default | Validation |
|---|---|---|---|
enabled | boolean | false | Optional |
Failover
Appears in: Traffic
Failover defines disaster recovery configuration for this API
| Field | Type | Default | Validation |
|---|---|---|---|
zones | string[] | — | Optional, maxItems: 10 |
LoadBalancing
Appears in: Traffic
LoadBalancing defines how traffic is distributed among multiple upstream servers
| Field | Type | Default | Validation |
|---|---|---|---|
strategy | string | RoundRobin | Optional, Enum: RoundRobin \| LeastConnections |
RateLimit
Appears in: Traffic
RateLimit defines request rate limiting for this API
| Field | Type | Default | Validation |
|---|---|---|---|
consumers | Consumers | — | Optional |
provider | Provider | — | Optional |
Consumers
Appears in: RateLimit
Consumers defines rate limits applied to API consumers (clients)
| Field | Type | Default | Validation |
|---|---|---|---|
default | Default | — | Optional |
overrides | Overrides[] | — | Optional, maxItems: 10 |
Default
Appears in: Consumers
Default defines the rate limit applied to all consumers not specifically overridden
| Field | Type | Default | Validation |
|---|---|---|---|
limits | Limits | — | Required |
Limits
Appears in: Default, Overrides, Provider
Limits defines the actual rate limit values for different time windows
| Field | Type | Default | Validation |
|---|---|---|---|
hour | integer | — | Optional, minimum: 0 |
minute | integer | — | Optional, minimum: 0 |
second | integer | — | Optional, minimum: 0 |
Overrides
Appears in: Consumers
Overrides defines consumer-specific rate limits
| Field | Type | Default | Validation |
|---|---|---|---|
consumer | string | — | Required, minLength: 1 |
limits | Limits | — | Required |
Provider
Appears in: RateLimit
Provider defines rate limits applied by the API provider (owner)
| Field | Type | Default | Validation |
|---|---|---|---|
limits | Limits | — | Optional |
options | RateLimitOptions | — | Optional |
RateLimitOptions
Appears in: Provider
RateLimitOptions defines additional configuration options for rate limiting
| Field | Type | Default | Validation |
|---|---|---|---|
faultTolerant | boolean | true | Optional |
hideClientHeaders | boolean | false | Optional |
Transformation
Appears in: Agentic, Api, RoverAgentic, RoverApi
Transformation defines optional request/response transformations
| Field | Type | Default | Validation |
|---|---|---|---|
request | Request | — | Optional |
Request
Appears in: Transformation
Request defines transformations applied to incoming API requests
| Field | Type | Default | Validation |
|---|---|---|---|
headers | Headers | — | Optional |
Headers
Appears in: Request
Headers defines HTTP header modifications for requests
| Field | Type | Default | Validation |
|---|---|---|---|
add | string[] | — | Optional, minItems: 1, maxItems: 5 |
remove | string[] | — | Optional, minItems: 1, maxItems: 5 |
Upstreams
Upstreams defines the backend MCP server endpoints
| Field | Type | Default | Validation |
|---|---|---|---|
url | string | — | Required, Format: uri |
weight | integer | 1 | Optional, minimum: 1, maximum: 100 |
Api
Appears in: Exposures
Api defines an API-based service exposure configuration
| Field | Type | Default | Validation |
|---|---|---|---|
approval | Approval | — | Required |
basePath | string | — | Required, pattern: ^/.*$ |
security | Security | — | Optional |
traffic | Traffic | — | Optional |
transformation | Transformation | — | Optional |
upstreams | Upstreams[] | — | Required, minItems: 1, maxItems: 12 |
visibility | string | Enterprise | Required, Enum: World \| Zone \| Enterprise |
Event
Appears in: Exposures
Event defines an Event-based service exposure configuration
| Field | Type | Default | Validation |
|---|---|---|---|
additionalPublisherIds | string[] | — | Optional |
approval | Approval | — | Required |
eventType | string | — | Required, minLength: 1, pattern: ^[a-z0-9]+([.-][a-z0-9]+)*$ |
scopes | Scopes[] | — | Optional |
visibility | string | Enterprise | Required, Enum: World \| Zone \| Enterprise |
Scopes
Appears in: Event
Scopes defines named scopes with optional publisher-side trigger filtering
| Field | Type | Default | Validation |
|---|---|---|---|
name | string | — | Required, minLength: 1 |
trigger | Trigger | — | Required |
Trigger
Appears in: Scopes, RoverEvent
Trigger defines publisher-side filtering criteria for this scope. Every scope must define a trigger.
| Field | Type | Default | Validation |
|---|---|---|---|
responseFilter | ResponseFilter | — | Optional |
selectionFilter | SelectionFilter | — | Optional |
ResponseFilter
Appears in: Trigger
ResponseFilter controls payload shaping (which fields to return).
| Field | Type | Default | Validation |
|---|---|---|---|
mode | string | Include | Optional, Enum: Include \| Exclude |
paths | string[] | — | Optional |
SelectionFilter
Appears in: Trigger
SelectionFilter controls event matching (which events to deliver).
| Field | Type | Default | Validation |
|---|---|---|---|
attributes | map<string, string> | — | Optional |
expression | object | — | Optional |
File
Appears in: Exposures
File defines a File-based (SFTP) service exposure configuration
| Field | Type | Default | Validation |
|---|---|---|---|
approval | Approval | — | Required |
fileType | string | — | Required, minLength: 1 |
sftp | Sftp | — | Optional |
variant | string | SFTP | Required, Enum: SFTP |
visibility | string | Enterprise | Required, Enum: World \| Zone \| Enterprise |
Sftp
SFTP configures provider-side SFTP access for this file exposure.
| Field | Type | Default | Validation |
|---|---|---|---|
publicKeys | PublicKeys[] | — | Required, minItems: 1 |
PublicKeys
Appears in: Sftp
PublicKeys contains SSH public keys for the SFTP user of the FileType.
| Field | Type | Default | Validation |
|---|---|---|---|
key | string | — | Required, minLength: 1 |
label | string | — | Optional, minLength: 1 |
ExternalId
Appears in: RoverSpec
ExternalIds carries business identifiers (e.g. PSI, ICTO) attached to this Rover. Each entry is tagged with a scheme. Format and presence are validated per-zone via the zone's ExternalIdPolicies.
| Field | Type | Default | Validation |
|---|---|---|---|
id | string | — | Required, minLength: 1, maxLength: 128 |
scheme | string | — | Required, minLength: 1, maxLength: 32, pattern: ^[a-z][a-z0-9]*$ |
IpRestrictions
Appears in: RoverSpec
IpRestrictions defines IP-based access restrictions for the entire Application
| Field | Type | Default | Validation |
|---|---|---|---|
allow | string[] | — | Optional, minItems: 0, maxItems: 10 |
deny | string[] | — | Optional, minItems: 0, maxItems: 10 |
ListenerSubscription
Appears in: RoverSpec
ListenerSubscription configures how listener events are delivered
| Field | Type | Default | Validation |
|---|---|---|---|
callback | string | — | Optional, Format: uri |
deliveryType | string | server_sent_event | Optional, Enum: callback \| server_sent_event |
Listeners
Appears in: RoverSpec
Listeners is a list of API traffic listeners
| Field | Type | Default | Validation |
|---|---|---|---|
apiBasePath | string | — | Optional, pattern: ^/.*$ |
consumer | string | — | Required, minLength: 1 |
eventFilter | EventFilter | — | Optional |
eventType | string | — | Optional |
provider | string | — | Required, minLength: 1 |
requestFilter | EventFilter | — | Optional |
responseFilter | EventFilter | — | Optional |
EventFilter
Appears in: Listeners
EventFilter defines filtering for event traffic
| Field | Type | Default | Validation |
|---|---|---|---|
payload | string[] | — | Optional |
trigger | map<string, string> | — | Optional |
Permissions
Appears in: RoverSpec
Permissions defines role-based access control permissions for this application
| Field | Type | Default | Validation |
|---|---|---|---|
actions | string[] | — | Optional, minItems: 1, maxItems: 75 |
entries | Entry[] | — | Optional, minItems: 1, maxItems: 75 |
resource | string | — | Optional, maxLength: 256 |
role | string | — | Optional, maxLength: 256 |
Entry
Appears in: Permissions
Entries lists role-resource-action tuples (used in resource-oriented and role-oriented formats)
| Field | Type | Default | Validation |
|---|---|---|---|
actions | string[] | — | Required, minItems: 1, maxItems: 75 |
resource | string | — | Optional |
role | string | — | Optional |
Subscriptions
Appears in: RoverSpec
Subscriptions is a list of APIs and Events that this Rover consumes from providers
| Field | Type | Default | Validation |
|---|---|---|---|
agentic | RoverAgentic | — | Optional |
api | RoverApi | — | Optional |
event | RoverEvent | — | Optional |
file | RoverFile | — | Optional |
RoverAgentic
Appears in: Subscriptions
Agentic defines an Agentic(MCP or agent) server subscription configuration
| Field | Type | Default | Validation |
|---|---|---|---|
basePath | string | — | Required, pattern: ^/[a-z0-9-/]+$ |
security | RoverSecurity | — | Optional |
traffic | RoverTraffic | — | Optional |
transformation | Transformation | — | Optional |
RoverSecurity
Appears in: RoverAgentic, RoverApi
Security defines optional security configuration
| Field | Type | Default | Validation |
|---|---|---|---|
m2m | RoverM2M2 | — | Optional |
RoverM2M2
Appears in: RoverSecurity
M2M defines machine-to-machine authentication configuration
| Field | Type | Default | Validation |
|---|---|---|---|
basic | Basic | — | Optional |
client | Client | — | Optional |
grantType | string | — | Optional, Enum: client_credentials \| authorization_code \| password \| refresh_token |
scopes | string[] | — | Optional, maxItems: 100 |
tokenRequest | string | — | Optional, Enum: client_secret_basic \| client_secret_post |
RoverTraffic
Appears in: RoverAgentic, RoverApi
Traffic defines optional traffic management configuration
| Field | Type | Default | Validation |
|---|---|---|---|
failover | CircuitBreaker | — | Optional |
RoverApi
Appears in: Subscriptions
Api defines an API-based service subscription configuration
| Field | Type | Default | Validation |
|---|---|---|---|
basePath | string | — | Required, pattern: ^/.*$ |
organization | string | — | Optional |
security | RoverSecurity | — | Optional |
traffic | RoverTraffic | — | Optional |
transformation | Transformation | — | Optional |
RoverEvent
Appears in: Subscriptions
Event defines an Event-based service subscription configuration
| Field | Type | Default | Validation |
|---|---|---|---|
delivery | Delivery | — | Required |
eventType | string | — | Required, minLength: 1, pattern: ^[a-z0-9]+([.-][a-z0-9]+)*$ |
scopes | string[] | — | Optional |
trigger | Trigger | — | Optional |
Delivery
Appears in: RoverEvent
Delivery configures how events are delivered to the subscriber
| Field | Type | Default | Validation |
|---|---|---|---|
callback | string | — | Optional, Format: uri |
circuitBreakerOptOut | boolean | — | Optional |
enforceGetHttpRequestMethodForHealthCheck | boolean | — | Optional |
eventRetentionTime | string | — | Optional, Format: duration |
payload | string | Data | Required, Enum: Data \| DataRef |
redeliveriesPerSecond | integer | — | Optional |
retryableStatusCodes | integer[] | — | Optional |
type | string | Callback | Required, Enum: Callback \| ServerSentEvent |
RoverFile
Appears in: Subscriptions
File defines a File-based (SFTP) service subscription configuration
| Field | Type | Default | Validation |
|---|---|---|---|
fileType | string | — | Required, minLength: 1 |
sftp | Sftp | — | Optional |
RoverStatus
Appears in: Rover
Status contains the observed state of the Rover resource
| Field | Type | Default | Validation |
|---|---|---|---|
aiExposures | AgentCard[] | — | Optional |
aiSubscriptions | AgentCard[] | — | Optional |
apiExposures | AgentCard[] | — | Optional |
apiSubscriptions | AgentCard[] | — | Optional |
application | AgentCard | — | Optional |
conditions | Condition[] | — | Optional |
eventExposures | AgentCard[] | — | Optional |
eventSubscriptions | AgentCard[] | — | Optional |
fileExposures | AgentCard[] | — | Optional |
fileSubscriptions | AgentCard[] | — | Optional |
permissionSets | AgentCard[] | — | Optional |
spectreApplications | AgentCard[] | — | Optional |
spectreListeners | AgentCard[] | — | Optional |
Entry Points
Users interact with the Rover domain through three paths:
| Path | Description |
|---|---|
| Rover-CTL | Command-line tool. Reads a local Rover file and sends it to the Rover Server. |
| Rover Server | REST API. Validates the configuration, uploads specifications to the File Manager, obfuscates secrets through the Secret Manager, and creates the Rover resource in Kubernetes. |
| Direct kubectl | Apply a Rover resource directly to the Kubernetes API (for advanced users or automation). |
Resource Names and Labels
The Rover Server accepts resource names between 2 and 90 characters. Names longer than 63 characters retain their full resource name, while the cp.ei.telekom.de/application label is shortened to fit Kubernetes' 63-character label-value limit. The shortened value retains the beginning and end of the name, with a deterministic hash in the middle.
The server also normalizes the environment, team, and group labels to lowercase, replaces spaces, underscores, and slashes with hyphens, trims leading and trailing hyphens, and shortens values exceeding the label-value limit.
Application Info Status
The status of roverctl get-info is the overall status of the Rover status endpoint. It includes every sub-resource owned by the Rover, also removed ones that are still being deleted, such as a Listener draining its capture, and reports processing or pending while the Rover or a sub-resource has a spec change that is not yet processed. A referenced sub-resource that cannot be read is listed in errors and does not fail the request. When the Rover itself is blocked or failed for a reason no sub-resource reports, for example a listener whose consumer application does not exist, both the status endpoint and get-info list it in errors as a problem of kind Rover. In get-info, this entry has the same shape as a problem from the status endpoint: cause is the condition reason and message is the condition message.
Domain Interactions
- Application domain — Creates Application resources.
- API domain — Creates Api, ApiExposure, and ApiSubscription resources.
- Event domain — Creates EventExposure and EventSubscription resources.
- File domain (SFTP) — Creates the SFTP user (shared space) from a
FileSpecificationand registers producer/consumer SSH public keys forfileTypeexposures and subscriptions. Gated behind thefilefeature flag. - Spectre domain —
spec.listenersentries create Listener CRs, which the Spectre operator reconciles into PubSub Subscribers, RouteListeners, and Approvals. - Gateway domain — Configures traffic management settings.
- Identity domain — Configures authentication settings.
- Approval domain — Integrates approval requirements for exposures.
File Types (SFTP)
Rover can configure an external SFTP file-transfer service without changing the customer-facing Rover file:
- A
FileSpecificationdefines aspec.type(e.g.dds-rc1-provider-file), itsspec.version, and a description. It can also include an optional YANL schema inspec.specification; Rover Server stores that document in File Manager and returns it through the FileSpecification API. Its metadata name must be the normalized type (lowercase, dots replaced by hyphens). - Apply FileSpecifications through Rover-CTL like other Rover resources; Rover Server persists the resource and the Rover controller creates the matching file-domain
FileType. - A
fileTypeexposure (producer) or subscription (consumer) withvariant: sftpand one or morepublicKeysregisters those SSH keys on the matching SFTP user.
apiVersion
ApiRoadmap, ApiChangelog, and FileSpecification accept both tcp.ei.telekom.de/v1 and rover.ei.telekom.de/v1 API versions. Existing manifests using tcp.ei.telekom.de/v1 remain supported.
apiVersion: rover.ei.telekom.de/v1
kind: FileSpecification
metadata:
name: invoice-monthly
spec:
type: invoice.monthly
version: 1.0.0
description: Monthly invoice exports
specification:
type: object
properties:
invoiceId:
type: string
Rover-CTL resolves handlers by the apiVersion/kind pair. A file with an unknown combination is skipped silently — apply logs Handler not found. Ignoring... and still exits with code 0.
Validation rules enforced by the Rover webhook:
fileTypeexposures/subscriptions are only allowed on thecetusandcaniszones.variant: sftpis optional.- At least one public key is required; both the key
labelandkeyvalue must be unique perfileType.
Because file transfer happens directly over SFTP, a Rover that only exposes/subscribes to file types yields a logical Application (needsClient and needsConsumer are false). If the same Rover also has an API or event subscription, an event exposure, or any listener, a client is still required. A listener needs the client to get a token for its SSE stream. Callback delivery keeps the client too, so switching between delivery types never removes the application's credentials.
Rover and Application Info Pagination
GET /rovers and GET /rovers/info read one page per request. The default and maximum limit are 20; the minimum is 1. Follow _links.next until it is empty to retrieve subsequent pages. Continuation URLs retain the page size and encode the cursor. Authorization scope is enforced on every request; application-info listing requires a team client.
For GET /rovers/info?names=app-a&names=app-b, the server directly looks up the named Rovers in the caller's team. Up to 100 names are accepted, duplicates are returned once, and missing names are skipped. All matches are returned in name order without pagination links. In this mode, limit and cursor do not affect selection, although supplied query values must still pass validation.
roverctl get-info follows application-info continuation links automatically when no names are supplied. Explicit-name lookups use a single request. Other endpoints retain their existing page-size limits. The sort and shallowInfo behavior is unchanged by this pagination update.
roverctl does not call the scheme, host or path of a next link. It rebuilds each follow-up request from the original request URL, keeps that request's query parameters, and takes only cursor and limit from the link. A link without exactly one non-empty cursor, with an invalid limit, or with a malformed URL or query fails with a fixed reason; the link itself is not printed. Values passed as a cursor that are not http(s):// URLs are sent unchanged as opaque cursors.
Pagination links behind a gateway prefix
Rover Server builds _links from the scheme and host of the incoming request, as reported by the web framework (which honours X-Forwarded-Host and X-Forwarded-Proto).
For the path, links use the requestPath claim from the authenticated JWT, preserving gateway prefixes such as /rover/api. The token issuer is responsible for providing the correct public request path.
- The claim is used whether or not Last-Mile Security (LMS) validation is enabled. LMS validation is disabled by default.
- If the claim is missing, empty or not a string, links use the incoming request path. Requests without JWT authentication, including internal-listener and mock-authentication requests, also use the incoming path.
When listeners.external.jwt.lms.basePath is set, the JWT middleware additionally checks that requestPath equals that base path plus the incoming request path and that operation matches the request method. These comparisons ignore case; mismatches are rejected before reaching the handlers. Each listener supports one configured LMS base path.