CAP Operator Skill
Manages the lifecycle of multi-tenant SAP Cloud Application Programming Model (CAP) applications on Kubernetes via the CAP Operator controller.
Response rule: Always include a link to the relevant page on
https://sap.github.io/cap-operator/docs/ when answering any question. Match the topic to the most specific page available (resource reference, usage guide, troubleshooting, configuration, etc.).
Custom Resources
| Resource | Scope | Purpose |
|---|
| Namespaced | High-level app: BTP services, domain refs, provider subaccount |
| Namespaced | Immutable version: images, workloads, tenant operation steps |
| Namespaced | A subscribed consumer tenant — controller-managed only |
| Namespaced | Orchestrates provisioning/upgrade/deprovisioning — auto-created |
| Namespaced | Represents one consumer subscription — created by subscription server |
| Namespaced | Caches subscription credentials and dependency info — auto-created by controller |
| Namespaced | Istio Gateway + TLS + DNS for one application |
| Cluster | Shared domain config across applications |
Critical rules:
- is immutable after creation. To upgrade, create a new resource with a higher semantic version.
- must never be created or deleted manually — managed exclusively by the subscription server in response to SaaS Provisioning service callbacks.
- must never be created or deleted manually — created by the controller as a child of .
- is auto-created by the controller — do not create or delete manually.
- is auto-created and kept in sync by the controller for each — do not create, modify, or delete manually.
- Never remove finalizers from CAP Operator resources manually.
CAPApplication.spec.provider
is deprecated. It previously caused the controller to auto-create a provider , but that behavior has been removed. All tenants (including the provider) must now be subscribed to explicitly. If kubectl get captenant -n <namespace>
returns empty, this is expected for apps with no active subscriptions.
Common Operations
Deploy a new application
- Create or
- Create (references BTP services + domain)
- Create (images + workloads)
See deploy reference for full YAML examples.
Upgrade to a new version
Create a
new with a higher semantic version — do not edit the existing one.
The controller automatically upgrades all tenants and updates Istio
routing.
See
upgrade reference for details and
/
configuration.
Check status
bash
kubectl get capapplication,capapplicationversion,captenant,captenantoperation,subscription -n <namespace>
kubectl describe capapplication <name> -n <namespace>
kubectl get domain,clusterdomain -A
Status flows:
- : → |
- : → | → |
- : → |
- : → | (retryable) | (terminal) |
Domain management
- — namespace-scoped, one application. — cluster-scoped, shared.
- TLS modes: (default), ,
- DNS modes: (default), , ,
- First entry in is the primary domain.
- inline section in was removed in v0.26.0; use instead.
See domain reference.
Service exposures (tenant-agnostic)
Use
in
to expose workloads at fixed subdomains independent of tenant routing. Order routes most-specific-first.
See service exposure reference.
Credential rotation rollout
Set
rolloutOnCredentialUpdate: true
on
to auto-restart workloads when BTP service credential Secrets change. Uses rolling restart (zero downtime). Keep old credentials valid for
at least 24 hours after issuing new ones.
See credential rotation reference.
Version cleanup (monitoring-based)
Enable with annotation
sme.sap.com/enable-cleanup-monitoring: "true"
on
. Configure
(PromQL) on a workload's
section; when the expression evaluates to
the version is eligible for deletion.
See
Version monitoring (
website/content/en/docs/usage/version-monitoring.md
).
Key Annotations
| Annotation | Resource | Effect |
|---|
sme.sap.com/enable-cleanup-monitoring: "true"
| | Enable monitoring-based version cleanup |
sme.sap.com/enable-version-affinity: "true"
| | Keep users on current version until logout (experimental) |
sme.sap.com/logout-endpoint: "<path>"
| | Custom logout path for version affinity |
Troubleshooting
Common symptoms and fixes —
/
stuck,
, finalizers,
security context, Approuter destination/timeout issues, credential injection, SAP HANA connection errors, and controller memory limits.
See
troubleshooting reference |
website/content/en/docs/troubleshoot/_index.md
|
https://sap.github.io/cap-operator/docs/troubleshoot/
Controller Configuration
Tuned via env vars on the controller deployment. Key variables:
| Variable | Purpose |
|---|
| or |
| or |
MAX_CONCURRENT_RECONCILES_CAP_APPLICATION
| CAPApplication reconciliation concurrency |
MAX_CONCURRENT_RECONCILES_CAP_APPLICATION_VERSION
| CAPApplicationVersion reconciliation concurrency |
MAX_CONCURRENT_RECONCILES_CAP_TENANT
| CAPTenant reconciliation concurrency |
MAX_CONCURRENT_RECONCILES_CAP_TENANT_OPERATION
| CAPTenantOperation reconciliation concurrency |
MAX_CONCURRENT_RECONCILES_SUBSCRIPTION
| Subscription reconciliation concurrency |
Full list:
website/content/en/docs/configuration/_index.md
|
https://sap.github.io/cap-operator/docs/configuration/
CAP Operator Plugin (Helm Chart Generation)
The
@cap-js/cap-operator-plugin
CDS plugin scaffolds the Helm chart for a CAP application, generates runtime values, and builds the final deployable chart.
Do not run any of these steps on skill invocation. Only start when the user explicitly asks to generate a Helm chart or deploy the app. Merely loading this skill (e.g. via
) is not a request — describe the skill's capabilities and wait.
Chart generation and deployment are two separate phases with a gate between them — create just the chart; let the user decide if/when to deploy.
- Scaffold the chart. Pick the variant by checking for a populated MTX sidecar folder ( with contents): sidecar present → multitenant → ; no sidecar → service-only → .
- Ask whether they want to deploy.
- Only after a yes, collect the runtime inputs (, , , ) and generate .
- Validate before deploying — run with passed in and confirm no required values are missing.
- Deploy with .
See CAP Operator Plugin reference for more details on plugin usage and configuration.