diff --git a/CHANGELOG.md b/CHANGELOG.md index dcce4ec..a38ddc5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,21 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). The format is based on [Keep a Changelog](http://keepachangelog.com/). +## Version 0.16.0 - 18-May-2026 + +### Added + +- Added `SubscriptionDependencyMode` support (`Auto`, `Always`, `Never`) to `serviceInstances` in `values.schema.json`. +- Added `startupProbe` field to workload definitions in `values.schema.json`. + +### Changed + +- Updated `getDependencies` and `dependenciesCallbacks` URLs in `runtime-values.yaml` to use the CAP Operator-managed endpoints (`/dependencies/{{providerSubaccountId}}/{{appName}}`), replacing the previous approuter callback URLs. **Use this version with CAP Operator `v0.29.2` or later.** +- Removed optional mutual TLS (`OptionalMutual`) configuration; TLS mode is now always set to `Simple`. +- Removed `sme.sap.com/vs-route-request-header-set` (`x-forwarded-client-cert`) annotation from CAPApplication templates. +- Improved validation logic for `appName` field during `runtime-values.yaml` generation. +- Simplified `Duration` type in `values.schema.json` from a nested object to a plain string. + ## Version 0.15.0 - 29-April-2026 ### Changed diff --git a/README.md b/README.md index fe3a3b5..67734d1 100644 --- a/README.md +++ b/README.md @@ -110,41 +110,49 @@ To integrate the CAP Operator Plugin into your project, follow these steps: ## Configure Your Chart -The generated `chart/values.yaml` contains two types of information: - - * Design-time deployment - * Without option `--with-configurable-templates` - - [serviceInstances](https://github.com/SAP/sap-btp-service-operator?tab=readme-ov-file#service-instance) - - [serviceBindings](https://github.com/SAP/sap-btp-service-operator?tab=readme-ov-file#service-binding) - - workloads - There are two types of workloads: - - [Deployment definition](https://sap.github.io/cap-operator/docs/usage/resources/capapplicationversion/#workloads-with-deploymentdefinition) - - [Job definition](https://sap.github.io/cap-operator/docs/usage/resources/capapplicationversion/#workloads-with-jobdefinition) - - [tenantOperations](https://sap.github.io/cap-operator/docs/usage/resources/capapplicationversion/#sequencing-tenant-operations) - - [contentJobs](https://sap.github.io/cap-operator/docs/usage/resources/capapplicationversion/#sequencing-content-jobs) - * With option `--with-configurable-templates` - - [serviceInstances](https://github.com/SAP/sap-btp-service-operator?tab=readme-ov-file#service-instance) - - [serviceBindings](https://github.com/SAP/sap-btp-service-operator?tab=readme-ov-file#service-binding) - - workloads - With this option all the workload configuations are maintained in `templates/cap-operator-cros.yaml` and in the `values.yaml` you can only define the images for the workloads. - - * Runtime deployment - - app - - Primary - Primary application domain is used to generate a wildcard TLS certificate. In clusters managed by project "Gardener", this is (usually) a subdomain of the cluster domain - - Secondary ***[DEPRECATED with v0.7.0]*** - Customer-specific domains to serve application endpoints (optional). Use `additionalDomainRefs` instead. - - additionalDomainRefs - References to exisiting customer specific `Domains` or `ClusterDomain` resources. For details, refer to the [CAP Operator documentation](https://sap.github.io/cap-operator/docs/usage/domain-management). - - IstioIngressGatewayLabels - Labels used to identify the Istio ingress-gateway component and its corresponding namespace. Usually {“app”:“istio-ingressgateway”,“istio”:“ingressgateway”} - - btp - - Subdomain - Subdomain of the provider subaccount to which you deploy the application. This is not required for services-only applications. - - TenantId - Tenant ID of the provider subaccount to which you deploy the application. This is not required for services-only applications. - - [imagePullSecrets](https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/) - Kubernetes secret used to pull the application docker images from a private container image registry or repository. - - env information inside workloads - - As a developer, you must fill in the design-time deployment information in the `values.yaml` file, which can then be pushed to your GitHub repository. The plugin auto-populates some values based on your project configuration, but verifying them and manually filling in any missing information is essential. You can refer to `values.schema.json` file for the structure of the `values.yaml` file. - - **Please fill the `values.yaml` according to the schema as it is tightly coupled to the predefined templates.** You can use a YAML schema validation extension such as [YAML](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml) or run the following command to validate your `values.yaml` file. You can ignore the errors from runtime values as they are not filled in yet. +The generated `chart/values.yaml` contains two categories of values: **design-time** and **runtime**. + +**Design-time values** describe your application's services and workloads. They are stable across environments and can be committed to your repository. The plugin auto-populates many of these from your project configuration, but you should verify them and fill in any gaps. + +Depending on whether you used `--with-configurable-templates`, the design-time section contains: + +- Basic chart (default): + - [serviceInstances](https://github.com/SAP/sap-btp-service-operator?tab=readme-ov-file#service-instance) (enhanced with [`subscriptionDependency`](https://sap.github.io/cap-operator/docs/usage/tenant-provisioning/#configuring-dependencies-with-subscriptiondependency) parameter) + - [serviceBindings](https://github.com/SAP/sap-btp-service-operator?tab=readme-ov-file#service-binding) + - workloads ([Deployment](https://sap.github.io/cap-operator/docs/usage/resources/capapplicationversion/#workloads-with-deploymentdefinition) or [Job](https://sap.github.io/cap-operator/docs/usage/resources/capapplicationversion/#workloads-with-jobdefinition) definitions) + - [tenantOperations](https://sap.github.io/cap-operator/docs/usage/resources/capapplicationversion/#sequencing-tenant-operations) + - [contentJobs](https://sap.github.io/cap-operator/docs/usage/resources/capapplicationversion/#sequencing-content-jobs) + - [serviceExposures](https://sap.github.io/cap-operator/docs/usage/resources/capapplicationversion/#serviceexposures-configuration) + +- Configurable templates chart (`--with-configurable-templates`): + - [serviceInstances](https://github.com/SAP/sap-btp-service-operator?tab=readme-ov-file#service-instance) (enhanced with [`subscriptionDependency`](https://sap.github.io/cap-operator/docs/usage/tenant-provisioning/#configuring-dependencies-with-subscriptiondependency) parameter) + - [serviceBindings](https://github.com/SAP/sap-btp-service-operator?tab=readme-ov-file#service-binding) + - workload images only — full workload configurations are defined in `templates/cap-operator-cros.yaml` + +**Runtime values** are environment-specific and must be provided separately at deploy time (see [Deploy Your Application](#deploy-your-application)). They include: + +- `app` + - `domains` + - `primary` — Primary application domain, used to generate a wildcard TLS certificate. In Gardener-managed clusters, this is typically a subdomain of the cluster domain. + - `additionalDomainRefs` — References to existing customer-specific `Domain` or `ClusterDomain` resources. See the [Domain Management](https://sap.github.io/cap-operator/docs/usage/domain-management) for details. + - `istioIngressGatewayLabels` — Labels identifying the Istio ingress-gateway and its namespace. Typically `{“app”:”istio-ingressgateway”,”istio”:”ingressgateway”}`. + - `enableCleanupMonitoring` — Enable monitoring for cleanup operations. +- `btp` + - `providerSubaccountId` — ID of the provider subaccount to which you deploy the application. + - `provider` + - `subdomain` — Subdomain of the provider subaccount. Not required for services-only applications. + - `tenantId` — Tenant ID of the provider subaccount. Not required for services-only applications. +- [imagePullSecrets](https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/) — Kubernetes secret for pulling images from a private registry. +- `env` — Environment variables defined inside individual workloads. + +> The `values.yaml` is tightly coupled to the predefined templates, so it must conform to `values.schema.json`. You can validate it with the [YAML extension](https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml) or by running: +> +> ```sh +> helm lint +> ``` +> +> You can ignore validation errors for runtime values, as those are filled in later. - ```sh - helm lint - ``` ## Deploy Your Application 1. You must generate the final Helm chart before deploying your application. You can do so by running `cds build`. During the build, the plugin generates the final Helm chart in your project's `gen` directory, which includes the predefined `templates` folder. @@ -157,7 +165,7 @@ The generated `chart/values.yaml` contains two types of information: The plugin requires the following information to generate the `runtime-values.yaml`: - * **Application name (appName) *[Mandatory]*** + * **Application name (appName) *[Mandatory]*** - Must consist of lowercase alphanumeric characters and hyphens only (`^[a-z0-9-]+$`). This value is used as `xsappname` in the saas-registry which have the same restriction. * **CAP Operator subdomain (capOperatorSubdomain) *[Mandatory]*** - In Kyma clusters, CAP Operator subdomain defaults to `cap-op`. But if you're using your "Gardener" cluster, you must provide the subdomain you used to install the CAP Operator. * **Cluster shoot domain (clusterDomain) *[Mandatory]*** - Shoot domain of your cluster. In Kyma clusters, you can get the shoot domain by running the following command. ```sh diff --git a/bin/cap-op-plugin.js b/bin/cap-op-plugin.js index 9f45e68..47057cd 100755 --- a/bin/cap-op-plugin.js +++ b/bin/cap-op-plugin.js @@ -187,14 +187,19 @@ async function generateRuntimeValues(option, inputYamlPath) { ? ['appName', 'capOperatorSubdomain', 'clusterDomain', 'providerSubaccountId'] : ['appName', 'capOperatorSubdomain', 'clusterDomain', 'providerSubaccountId', 'providerSubdomain', 'tenantId'] - const missingFields = requiredFields.filter(field => !answerStruct[field]) + const missingFields = requiredFields.filter(field => !answerStruct[field]?.trim()) if (missingFields.length) { throw new Error(`Missing mandatory fields in the input yaml file: ${missingFields.join(', ')}`) } + if (!isServiceOnly && !/^[a-z0-9-]+$/.test(answerStruct['appName']?.trim())) { + throw new Error(`Invalid app name '${answerStruct['appName']}': only a-z, 0-9 and - are allowed`) + } + } else { + const appNameValidator = !isServiceOnly ? (value) => /^[a-z0-9-]+$/.test(value?.trim()) || 'Only a-z, 0-9 and - are allowed' : undefined const questions = [ - ['Enter app name for deployment', appName, true], + ['Enter app name for deployment', appName, true, appNameValidator], ['Enter CAP Operator subdomain (In kyma cluster it is "cap-op" by default)', 'cap-op', true], ['Enter your cluster shoot domain', await getShootDomain(), true], ['Enter your provider sub-account ID', '', true], diff --git a/files/chart/values.schema.json b/files/chart/values.schema.json index 11d84b1..6564a02 100644 --- a/files/chart/values.schema.json +++ b/files/chart/values.schema.json @@ -624,6 +624,9 @@ "serviceAccountName": { "type": "string" }, + "startupProbe": { + "$ref": "#/$defs/Probe" + }, "stickiness": { "$ref": "#/$defs/Stickiness" }, @@ -745,16 +748,7 @@ "type": "object" }, "Duration": { - "additionalProperties": false, - "properties": { - "Duration": { - "$ref": "#/$defs/Duration" - } - }, - "required": [ - "Duration" - ], - "type": "object" + "type": "string" }, "EmptyDirVolumeSource": { "additionalProperties": false, @@ -893,8 +887,7 @@ "type": "object" }, "FieldsV1": { - "additionalProperties": false, - "properties": {}, + "additionalProperties": true, "type": "object" }, "FileKeySelector": { @@ -1249,24 +1242,14 @@ "type": "object" }, "IntOrString": { - "additionalProperties": false, - "properties": { - "IntVal": { + "anyOf": [ + { "type": "integer" }, - "StrVal": { + { "type": "string" - }, - "Type": { - "type": "integer" } - }, - "required": [ - "Type", - "IntVal", - "StrVal" - ], - "type": "object" + ] }, "JobDetails": { "additionalProperties": false, @@ -2774,9 +2757,7 @@ "type": "object" }, "Time": { - "additionalProperties": false, - "properties": {}, - "type": "object" + "type": "string" }, "Toleration": { "additionalProperties": false, @@ -3199,6 +3180,9 @@ "domains": { "$ref": "#/$defs/Domains" }, + "enableCleanupMonitoring": { + "type": "boolean" + }, "istioIngressGatewayLabels": { "additionalProperties": { "type": "string" @@ -3207,9 +3191,6 @@ }, "version": { "type": "string" - }, - "enableCleanupMonitoring": { - "type": "boolean" } }, "required": [ @@ -3403,6 +3384,14 @@ "shared": { "type": "boolean" }, + "subscriptionDependency": { + "enum": [ + "Auto", + "Always", + "Never" + ], + "type": "string" + }, "userInfo": { "$ref": "#/$defs/UserInfo" }, diff --git a/files/configurableTemplatesChart/values.schema.json b/files/configurableTemplatesChart/values.schema.json index 7bc905b..7764be9 100644 --- a/files/configurableTemplatesChart/values.schema.json +++ b/files/configurableTemplatesChart/values.schema.json @@ -122,6 +122,9 @@ "domains": { "$ref": "#/$defs/Domains" }, + "enableCleanupMonitoring": { + "type": "boolean" + }, "istioIngressGatewayLabels": { "additionalProperties": { "type": "string" @@ -130,9 +133,6 @@ }, "version": { "type": "string" - }, - "enableCleanupMonitoring": { - "type": "boolean" } }, "required": [ @@ -314,6 +314,14 @@ "shared": { "type": "boolean" }, + "subscriptionDependency": { + "enum": [ + "Auto", + "Always", + "Never" + ], + "type": "string" + }, "userInfo": { "$ref": "#/$defs/UserInfo" }, diff --git a/files/runtime-values.yaml.hbs b/files/runtime-values.yaml.hbs index 8a600f7..8e58c6e 100644 --- a/files/runtime-values.yaml.hbs +++ b/files/runtime-values.yaml.hbs @@ -8,12 +8,7 @@ serviceInstances: displayName: {{appName}} description: {{appDescription}} appUrls: - {{#isApp}} - getDependencies: "https://{{providerSubdomain}}.{{appName}}.{{clusterDomain}}/callback/v1.0/dependencies" - {{/isApp}} - {{#isService}} - getDependencies: "https://{{appName}}.{{clusterDomain}}/callback/v1.0/dependencies" - {{/isService}} + getDependencies: "https://{{capOperatorSubdomain}}.{{clusterDomain}}/dependencies/{{providerSubaccountId}}/{{appName}}" onSubscription: "https://{{capOperatorSubdomain}}.{{clusterDomain}}/provision/tenants/{tenantId}" {{/isApp}} {{xsuaaKeyName}}: @@ -31,7 +26,7 @@ serviceInstances: category: CAP appCallbacks: dependenciesCallbacks: - url: "https://{{providerSubdomain}}.{{appName}}.{{clusterDomain}}/v1.0/callback/tenants/{app_tid}/dependencies" + url: "https://{{capOperatorSubdomain}}.{{clusterDomain}}/sms/dependencies/{{providerSubaccountId}}/{{appName}}/{app_tid}" subscriptionCallbacks: url: "https://{{capOperatorSubdomain}}.{{clusterDomain}}/sms/provision/tenants/{app_tid}" {{/isApp}} diff --git a/hack/go.mod b/hack/go.mod index 2764e50..e6a58b7 100644 --- a/hack/go.mod +++ b/hack/go.mod @@ -1,23 +1,23 @@ module github.tools.sap/erp4sme/cap-operator-tools/hack -go 1.26.2 +go 1.26.3 require ( - github.com/SAP/sap-btp-service-operator v0.10.5 - github.com/invopop/jsonschema v0.13.0 - github.com/sap/cap-operator v0.28.0 + github.com/SAP/sap-btp-service-operator v0.10.7 + github.com/invopop/jsonschema v0.14.0 + github.com/sap/cap-operator v0.29.1 ) require ( github.com/bahlo/generic-list-go v0.2.0 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/buger/jsonparser v1.1.2 // indirect + github.com/buger/jsonparser v1.2.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/emicklei/go-restful/v3 v3.13.0 // indirect github.com/evanphx/json-patch/v5 v5.9.11 // indirect - github.com/fsnotify/fsnotify v1.9.0 // indirect - github.com/fxamacker/cbor/v2 v2.9.1 // indirect + github.com/fsnotify/fsnotify v1.10.1 // indirect + github.com/fxamacker/cbor/v2 v2.9.2 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-openapi/jsonpointer v0.23.1 // indirect github.com/go-openapi/jsonreference v0.21.5 // indirect @@ -44,6 +44,7 @@ require ( github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/pb33f/ordered-map/v2 v2.3.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/client_golang v1.23.2 // indirect github.com/prometheus/client_model v0.6.2 // indirect @@ -54,26 +55,27 @@ require ( github.com/x448/float16 v0.8.4 // indirect go.yaml.in/yaml/v2 v2.4.4 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/net v0.53.0 // indirect + go.yaml.in/yaml/v4 v4.0.0-rc.4 // indirect + golang.org/x/net v0.54.0 // indirect golang.org/x/oauth2 v0.36.0 // indirect golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.43.0 // indirect - golang.org/x/term v0.42.0 // indirect - golang.org/x/text v0.36.0 // indirect + golang.org/x/sys v0.44.0 // indirect + golang.org/x/term v0.43.0 // indirect + golang.org/x/text v0.37.0 // indirect golang.org/x/time v0.15.0 // indirect gomodules.xyz/jsonpatch/v2 v2.5.0 // indirect - google.golang.org/protobuf v1.36.11 // indirect + google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af // indirect gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/api v0.35.4 // indirect - k8s.io/apiextensions-apiserver v0.35.4 // indirect - k8s.io/apimachinery v0.35.4 // indirect - k8s.io/client-go v0.35.4 // indirect + k8s.io/api v0.36.0 // indirect + k8s.io/apiextensions-apiserver v0.36.0 // indirect + k8s.io/apimachinery v0.36.0 // indirect + k8s.io/client-go v0.36.0 // indirect k8s.io/klog/v2 v2.140.0 // indirect - k8s.io/kube-openapi v0.0.0-20260414162039-ec9c827d403f // indirect - k8s.io/utils v0.0.0-20260319190234-28399d86e0b5 // indirect - sigs.k8s.io/controller-runtime v0.23.3 // indirect + k8s.io/kube-openapi v0.0.0-20260509192518-b540ad9def2b // indirect + k8s.io/utils v0.0.0-20260507154919-ff6756f316d2 // indirect + sigs.k8s.io/controller-runtime v0.24.0 // indirect sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect sigs.k8s.io/randfill v1.0.0 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.7.0 // indirect diff --git a/hack/go.sum b/hack/go.sum index 207759f..7db9823 100644 --- a/hack/go.sum +++ b/hack/go.sum @@ -8,6 +8,8 @@ github.com/SAP/sap-btp-service-operator v0.10.4 h1:vmDtONuJta/xgum0/ePXdaa6hNc6z github.com/SAP/sap-btp-service-operator v0.10.4/go.mod h1:cD3StN7LqGJZaRes+rXe3TzTiEGhl8JPHk6iCS9Soh4= github.com/SAP/sap-btp-service-operator v0.10.5 h1:NLOXErEwjbahy8P2mA7JlvL0cprL43b/u1+NOdPD6tM= github.com/SAP/sap-btp-service-operator v0.10.5/go.mod h1:vkNj9cVEgqOemK1RjX4ZS/rxIZF8/ggjQjgeHqTsJqA= +github.com/SAP/sap-btp-service-operator v0.10.7 h1:2j+IuRG7Og65dXb15W0nBJ84FIxolXXDlZ0y121O4t0= +github.com/SAP/sap-btp-service-operator v0.10.7/go.mod h1:uTC4UF5o67YgMXb991gvt+AHcWV9hYwWsZXHXZJS3gI= github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk= github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -18,6 +20,8 @@ github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMU github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/buger/jsonparser v1.1.2 h1:frqHqw7otoVbk5M8LlE/L7HTnIq2v9RX6EJ48i9AxJk= github.com/buger/jsonparser v1.1.2/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= +github.com/buger/jsonparser v1.2.0 h1:4EFcvK1kD4jyj6YqNK6skK6w+y7FHHBR+XBCtxwu/6g= +github.com/buger/jsonparser v1.2.0/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -36,10 +40,14 @@ github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjT github.com/evanphx/json-patch/v5 v5.9.11/go.mod h1:3j+LviiESTElxA4p3EMKAB9HXj3/XEtnUf6OZxqIQTM= github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/fsnotify/fsnotify v1.10.1 h1:b0/UzAf9yR5rhf3RPm9gf3ehBPpf0oZKIjtpKrx59Ho= +github.com/fsnotify/fsnotify v1.10.1/go.mod h1:TLheqan6HD6GBK6PrDWyDPBaEV8LspOxvPSjC+bVfgo= github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM= github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= github.com/fxamacker/cbor/v2 v2.9.1 h1:2rWm8B193Ll4VdjsJY28jxs70IdDsHRWgQYAI80+rMQ= github.com/fxamacker/cbor/v2 v2.9.1/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= +github.com/fxamacker/cbor/v2 v2.9.2 h1:X4Ksno9+x3cz0TZv69ec1hxP/+tymuR8PXQJyDwfh78= +github.com/fxamacker/cbor/v2 v2.9.2/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= @@ -155,6 +163,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/invopop/jsonschema v0.13.0 h1:KvpoAJWEjR3uD9Kbm2HWJmqsEaHt8lBUpd0qHcIi21E= github.com/invopop/jsonschema v0.13.0/go.mod h1:ffZ5Km5SWWRAIN6wbDXItl95euhFz2uON45H2qjYt+0= +github.com/invopop/jsonschema v0.14.0 h1:MHQqLhvpNUZfw+hM3AZDYK7jxO8FZoQeQM77g8iyZjg= +github.com/invopop/jsonschema v0.14.0/go.mod h1:ygm6C2EaVNMBDPpaPlnOA2pFAxBnxGjFlMZABxm9n2I= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= @@ -194,8 +204,11 @@ github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042 github.com/onsi/ginkgo/v2 v2.22.0 h1:Yed107/8DjTr0lKCNt7Dn8yQ6ybuDRQoMGrNFKzMfHg= github.com/onsi/ginkgo/v2 v2.22.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo= github.com/onsi/ginkgo/v2 v2.27.2 h1:LzwLj0b89qtIy6SSASkzlNvX6WktqurSHwkk2ipF/Ns= +github.com/onsi/ginkgo/v2 v2.27.4 h1:fcEcQW/A++6aZAZQNUmNjvA9PSOzefMJBerHJ4t8v8Y= github.com/onsi/gomega v1.36.1 h1:bJDPBO7ibjxcbHMgSCoo4Yj18UWbKDlLwX1x9sybDcw= github.com/onsi/gomega v1.36.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog= +github.com/pb33f/ordered-map/v2 v2.3.1 h1:5319HDO0aw4DA4gzi+zv4FXU9UlSs3xGZ40wcP1nBjY= +github.com/pb33f/ordered-map/v2 v2.3.1/go.mod h1:qxFQgd0PkVUtOMCkTapqotNgzRhMPL7VvaHKbd1HnmQ= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -233,6 +246,10 @@ github.com/sap/cap-operator v0.26.0 h1:+I5UicDA11XoE/V54y5o30FuX5OPCBF24aF9aWjlZ github.com/sap/cap-operator v0.26.0/go.mod h1:8Z8wnLaB0InR0aZ2WDisZ6t2HmWQxl+5N0ziYbqbD6w= github.com/sap/cap-operator v0.28.0 h1:xvPMuZldbGQA9gIkk4sSVvCWh3T74kRMg670Nm+USNs= github.com/sap/cap-operator v0.28.0/go.mod h1:eVdoP21htw+5dTQ3Tf+7wKe5QHC457w7VjoLnULC/Qk= +github.com/sap/cap-operator v0.29.0 h1:XKUCYeFQexKIDFsvPInO6UYQuKaf1rSRKNbwb2NfWJA= +github.com/sap/cap-operator v0.29.0/go.mod h1:2m2Mw+ihZ5bTyFOA2By7qODtHjNslaNaP7HQeM3T/EI= +github.com/sap/cap-operator v0.29.1 h1:rptPpcxKCKsnSQ5DmYDmF0AaDAplUQUmyJ+pqq3ZN5I= +github.com/sap/cap-operator v0.29.1/go.mod h1:VB6qQXJBH3ba2xsXWwlj6G46tJqpD7Z6yQiScYBlKv0= github.com/spf13/pflag v1.0.7 h1:vN6T9TfwStFPFM5XzjsvmzZkLuaLX+HS+0SeFLRgU6M= github.com/spf13/pflag v1.0.7/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= @@ -266,6 +283,8 @@ go.yaml.in/yaml/v2 v2.4.4 h1:tuyd0P+2Ont/d6e2rl3be67goVK4R6deVxCUX5vyPaQ= go.yaml.in/yaml/v2 v2.4.4/go.mod h1:gMZqIpDtDqOfM0uNfy0SkpRhvUryYH0Z6wdMYcacYXQ= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= +go.yaml.in/yaml/v4 v4.0.0-rc.4 h1:UP4+v6fFrBIb1l934bDl//mmnoIZEDK0idg1+AIvX5U= +go.yaml.in/yaml/v4 v4.0.0-rc.4/go.mod h1:aZqd9kCMsGL7AuUv/m/PvWLdg5sjJsZ4oHDEnfPPfY0= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -285,6 +304,8 @@ golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0= golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw= golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= +golang.org/x/net v0.54.0 h1:2zJIZAxAHV/OHCDTCOHAYehQzLfSXuf/5SoL/Dv6w/w= +golang.org/x/net v0.54.0/go.mod h1:Sj4oj8jK6XmHpBZU/zWHw3BV3abl4Kvi+Ut7cQcY+cQ= golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= golang.org/x/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw= @@ -315,6 +336,8 @@ golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ= +golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4= golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw= golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q= @@ -325,6 +348,8 @@ golang.org/x/term v0.41.0 h1:QCgPso/Q3RTJx2Th4bDLqML4W6iJiaXFq2/ftQF13YU= golang.org/x/term v0.41.0/go.mod h1:3pfBgksrReYfZ5lvYM0kSO0LIkAl4Yl2bXOkKP7Ec2A= golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY= golang.org/x/term v0.42.0/go.mod h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY= +golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= +golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= @@ -337,6 +362,8 @@ golang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8= golang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA= golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= +golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= +golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= @@ -353,6 +380,7 @@ golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ= golang.org/x/tools v0.41.0 h1:a9b8iMweWG+S0OBnlU36rzLp20z1Rp10w+IY2czHTQc= golang.org/x/tools v0.42.0 h1:uNgphsn75Tdz5Ji2q36v/nsFSfR/9BRFvqhGBaJGd5k= golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s= +golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -363,6 +391,8 @@ google.golang.org/protobuf v1.36.7 h1:IgrO7UwFQGJdRNXH/sQux4R1Dj1WAKcLElzeeRaXV2 google.golang.org/protobuf v1.36.7/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= +google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af h1:+5/Sw3GsDNlEmu7TfklWKPdQ0Ykja5VEmq2i817+jbI= +google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= @@ -385,6 +415,8 @@ k8s.io/api v0.35.3 h1:pA2fiBc6+N9PDf7SAiluKGEBuScsTzd2uYBkA5RzNWQ= k8s.io/api v0.35.3/go.mod h1:9Y9tkBcFwKNq2sxwZTQh1Njh9qHl81D0As56tu42GA4= k8s.io/api v0.35.4 h1:P7nFYKl5vo9AGUp1Z+Pmd3p2tA7bX2wbFWCvDeRv988= k8s.io/api v0.35.4/go.mod h1:yl4lqySWOgYJJf9RERXKUwE9g2y+CkuwG+xmcOK8wXU= +k8s.io/api v0.36.0 h1:SgqDhZzHdOtMk40xVSvCXkP9ME0H05hPM3p9AB1kL80= +k8s.io/api v0.36.0/go.mod h1:m1LVrGPNYax5NBHdO+QuAedXyuzTt4RryI/qnmNvs34= k8s.io/apiextensions-apiserver v0.33.4 h1:rtq5SeXiDbXmSwxsF0MLe2Mtv3SwprA6wp+5qh/CrOU= k8s.io/apiextensions-apiserver v0.33.4/go.mod h1:mWXcZQkQV1GQyxeIjYApuqsn/081hhXPZwZ2URuJeSs= k8s.io/apiextensions-apiserver v0.34.3 h1:p10fGlkDY09eWKOTeUSioxwLukJnm+KuDZdrW71y40g= @@ -395,6 +427,8 @@ k8s.io/apiextensions-apiserver v0.35.3 h1:2fQUhEO7P17sijylbdwt0nBdXP0TvHrHj0KeqH k8s.io/apiextensions-apiserver v0.35.3/go.mod h1:tK4Kz58ykRpwAEkXUb634HD1ZAegEElktz/B3jgETd8= k8s.io/apiextensions-apiserver v0.35.4 h1:HeP+Upp7ItdvnyGmub0yoix+2z5+ev4M5cE5TCgtOUU= k8s.io/apiextensions-apiserver v0.35.4/go.mod h1:ogQlk+stIE8mnoRthSYCwlOS12fVqgWFiErMwPaXA7c= +k8s.io/apiextensions-apiserver v0.36.0 h1:Wt7E8J+VBCbj4FjiBfDTK/neXDDjyJVJc7xfuOHImZ0= +k8s.io/apiextensions-apiserver v0.36.0/go.mod h1:kGDjH0msuiIB3tgsYRV0kS9GqpMYMUsQ3GHv7TApyug= k8s.io/apimachinery v0.33.4 h1:SOf/JW33TP0eppJMkIgQ+L6atlDiP/090oaX0y9pd9s= k8s.io/apimachinery v0.33.4/go.mod h1:BHW0YOu7n22fFv/JkYOEfkUYNRN0fj0BlvMFWA7b+SM= k8s.io/apimachinery v0.34.3 h1:/TB+SFEiQvN9HPldtlWOTp0hWbJ+fjU+wkxysf/aQnE= @@ -405,6 +439,8 @@ k8s.io/apimachinery v0.35.3 h1:MeaUwQCV3tjKP4bcwWGgZ/cp/vpsRnQzqO6J6tJyoF8= k8s.io/apimachinery v0.35.3/go.mod h1:jQCgFZFR1F4Ik7hvr2g84RTJSZegBc8yHgFWKn//hns= k8s.io/apimachinery v0.35.4 h1:xtdom9RG7e+yDp71uoXoJDWEE2eOiHgeO4GdBzwWpds= k8s.io/apimachinery v0.35.4/go.mod h1:NNi1taPOpep0jOj+oRha3mBJPqvi0hGdaV8TCqGQ+cc= +k8s.io/apimachinery v0.36.0 h1:jZyPzhd5Z+3h9vJLt0z9XdzW9VzNzWAUw+P1xZ9PXtQ= +k8s.io/apimachinery v0.36.0/go.mod h1:FklypaRJt6n5wUIwWXIP6GJlIpUizTgfo1T/As+Tyxc= k8s.io/client-go v0.33.4 h1:TNH+CSu8EmXfitntjUPwaKVPN0AYMbc9F1bBS8/ABpw= k8s.io/client-go v0.33.4/go.mod h1:LsA0+hBG2DPwovjd931L/AoaezMPX9CmBgyVyBZmbCY= k8s.io/client-go v0.34.3 h1:wtYtpzy/OPNYf7WyNBTj3iUA0XaBHVqhv4Iv3tbrF5A= @@ -415,6 +451,8 @@ k8s.io/client-go v0.35.3 h1:s1lZbpN4uI6IxeTM2cpdtrwHcSOBML1ODNTCCfsP1pg= k8s.io/client-go v0.35.3/go.mod h1:RzoXkc0mzpWIDvBrRnD+VlfXP+lRzqQjCmKtiwZ8Q9c= k8s.io/client-go v0.35.4 h1:DN6fyaGuzK64UvnKO5fOA6ymSjvfGAnCAHAR0C66kD8= k8s.io/client-go v0.35.4/go.mod h1:2Pg9WpsS4NeOpoYTfHHfMxBG8zFMSAUi4O/qoiJC3nY= +k8s.io/client-go v0.36.0 h1:pOYi7C4RHChYjMiHpZSpSbIM6ZxVbRXBy7CuiIwqA3c= +k8s.io/client-go v0.36.0/go.mod h1:ZKKcpwF0aLYfkHFCjillCKaTK/yBkEDHTDXCFY6AS9Y= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/klog/v2 v2.140.0 h1:Tf+J3AH7xnUzZyVVXhTgGhEKnFqye14aadWv7bzXdzc= @@ -429,6 +467,10 @@ k8s.io/kube-openapi v0.0.0-20260319004828-5883c5ee87b9 h1:Sztf7ESG9tAXRW/ACJZjrj k8s.io/kube-openapi v0.0.0-20260319004828-5883c5ee87b9/go.mod h1:uGBT7iTA6c6MvqUvSXIaYZo9ukscABYi2btjhvgKGZ0= k8s.io/kube-openapi v0.0.0-20260414162039-ec9c827d403f h1:4Qiq0YAoQATdgmHALJWz9rJ4fj20pB3xebpB4CFNhYM= k8s.io/kube-openapi v0.0.0-20260414162039-ec9c827d403f/go.mod h1:uGBT7iTA6c6MvqUvSXIaYZo9ukscABYi2btjhvgKGZ0= +k8s.io/kube-openapi v0.0.0-20260507235316-19c3011e7fa0 h1:1h+/yvsq5zm1mP/1wxmkRjTdrGpNDmumj+lsiJgwWTQ= +k8s.io/kube-openapi v0.0.0-20260507235316-19c3011e7fa0/go.mod h1:V/QaCUYDa+0QpcHhVVc5l99Uz56wEMEXBSj9oCDkNDY= +k8s.io/kube-openapi v0.0.0-20260509192518-b540ad9def2b h1:uMjR3gZY5tZj+VduN5sj0nsvWUxuvoMVU0yQ0xk6yNA= +k8s.io/kube-openapi v0.0.0-20260509192518-b540ad9def2b/go.mod h1:V/QaCUYDa+0QpcHhVVc5l99Uz56wEMEXBSj9oCDkNDY= k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 h1:hwvWFiBzdWw1FhfY1FooPn3kzWuJ8tmbZBHi4zVsl1Y= k8s.io/utils v0.0.0-20250604170112-4c0f3b243397/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= k8s.io/utils v0.0.0-20251002143259-bc988d571ff4 h1:SjGebBtkBqHFOli+05xYbK8YF1Dzkbzn+gDM4X9T4Ck= @@ -437,6 +479,8 @@ k8s.io/utils v0.0.0-20260108192941-914a6e750570 h1:JT4W8lsdrGENg9W+YwwdLJxklIuKW k8s.io/utils v0.0.0-20260108192941-914a6e750570/go.mod h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk= k8s.io/utils v0.0.0-20260319190234-28399d86e0b5 h1:kBawHLSnx/mYHmRnNUf9d4CpjREbeZuxoSGOX/J+aYM= k8s.io/utils v0.0.0-20260319190234-28399d86e0b5/go.mod h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk= +k8s.io/utils v0.0.0-20260507154919-ff6756f316d2 h1:wU4tMEhLGgIbLvXQb1cfN+EcM0wf7zC6CPF+C79jroc= +k8s.io/utils v0.0.0-20260507154919-ff6756f316d2/go.mod h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk= sigs.k8s.io/controller-runtime v0.21.0 h1:CYfjpEuicjUecRk+KAeyYh+ouUBn4llGyDYytIGcJS8= sigs.k8s.io/controller-runtime v0.21.0/go.mod h1:OSg14+F65eWqIu4DceX7k/+QRAbTTvxeQSNSOQpukWM= sigs.k8s.io/controller-runtime v0.22.4 h1:GEjV7KV3TY8e+tJ2LCTxUTanW4z/FmNB7l327UfMq9A= @@ -445,6 +489,8 @@ sigs.k8s.io/controller-runtime v0.23.1 h1:TjJSM80Nf43Mg21+RCy3J70aj/W6KyvDtOlpKf sigs.k8s.io/controller-runtime v0.23.1/go.mod h1:B6COOxKptp+YaUT5q4l6LqUJTRpizbgf9KSRNdQGns0= sigs.k8s.io/controller-runtime v0.23.3 h1:VjB/vhoPoA9l1kEKZHBMnQF33tdCLQKJtydy4iqwZ80= sigs.k8s.io/controller-runtime v0.23.3/go.mod h1:B6COOxKptp+YaUT5q4l6LqUJTRpizbgf9KSRNdQGns0= +sigs.k8s.io/controller-runtime v0.24.0 h1:Ck6N2LdS8Lovy1o25BB4r1xjvLEKUl1s2o9kU+KWDE4= +sigs.k8s.io/controller-runtime v0.24.0/go.mod h1:vFkfY5fGt5xAC/sKb8IBFKgWPNKG9OUG29dR8Y2wImw= sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 h1:IpInykpT6ceI+QxKBbEflcR5EXP7sU1kvOlxwZh5txg= sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg= sigs.k8s.io/randfill v0.0.0-20250304075658-069ef1bbf016/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY= diff --git a/hack/schema-generation.go b/hack/schema-generation.go index 20781fc..39dd688 100644 --- a/hack/schema-generation.go +++ b/hack/schema-generation.go @@ -34,10 +34,19 @@ type app struct { EnableCleanupMonitoring bool `json:"enableCleanupMonitoring,omitempty"` } +type SubscriptionDependencyMode string + +const ( + SubscriptionDependencyAuto SubscriptionDependencyMode = "Auto" + SubscriptionDependencyAlways SubscriptionDependencyMode = "Always" + SubscriptionDependencyNever SubscriptionDependencyMode = "Never" +) + type serviceInstanceExt struct { Name string `json:"name"` *servicesv1.ServiceInstanceSpec - JsonParameters string `json:"jsonParameters,omitempty"` + JsonParameters string `json:"jsonParameters,omitempty"` + SubscriptionDependency SubscriptionDependencyMode `json:"subscriptionDependency,omitempty" jsonschema:"enum=Auto,enum=Always,enum=Never"` } type serviceBindingExt struct { @@ -86,12 +95,38 @@ func updateProperties(data []byte) []byte { rawExt["additionalProperties"] = true m["$defs"].(map[string]interface{})["RawExtension"] = rawExt + fieldsV1 := m["$defs"].(map[string]interface{})["FieldsV1"].(map[string]interface{}) + fieldsV1["additionalProperties"] = true + delete(fieldsV1, "properties") + m["$defs"].(map[string]interface{})["FieldsV1"] = fieldsV1 + quantity := m["$defs"].(map[string]interface{})["Quantity"].(map[string]interface{}) quantity["type"] = "string" delete(quantity, "properties") delete(quantity, "required") m["$defs"].(map[string]interface{})["Quantity"] = quantity + duration := m["$defs"].(map[string]interface{})["Duration"].(map[string]interface{}) + duration["type"] = "string" + delete(duration, "additionalProperties") + delete(duration, "properties") + delete(duration, "required") + m["$defs"].(map[string]interface{})["Duration"] = duration + + t := m["$defs"].(map[string]interface{})["Time"].(map[string]interface{}) + t["type"] = "string" + delete(t, "additionalProperties") + delete(t, "properties") + m["$defs"].(map[string]interface{})["Time"] = t + + intOrString := m["$defs"].(map[string]interface{})["IntOrString"].(map[string]interface{}) + delete(intOrString, "additionalProperties") + delete(intOrString, "properties") + delete(intOrString, "required") + delete(intOrString, "type") + intOrString["anyOf"] = []map[string]interface{}{{"type": "integer"}, {"type": "string"}} + m["$defs"].(map[string]interface{})["IntOrString"] = intOrString + serviceBindingSpec := m["$defs"].(map[string]interface{})["serviceBindingExt"].(map[string]interface{}) serviceBindingSpec["required"] = []string{"name", "serviceInstanceName", "secretName"} @@ -99,7 +134,7 @@ func updateProperties(data []byte) []byte { chartValue["additionalProperties"] = true m["$defs"].(map[string]interface{})["chartValue"] = chartValue - data, _ = json.Marshal(m) + data, _ = json.MarshalIndent(m, "", " ") return data } @@ -125,7 +160,7 @@ func updatePropertiesconfigurableChart(data []byte) []byte { configurableChartValue["additionalProperties"] = true m["$defs"].(map[string]interface{})["configurableChartValue"] = configurableChartValue - data, _ = json.Marshal(m) + data, _ = json.MarshalIndent(m, "", " ") return data } @@ -142,7 +177,7 @@ func main() { fmt.Println(string(data)) // write the whole body at once - err = os.WriteFile("../files/chart/values.schema.json", data, 0644) + err = os.WriteFile("../files/chart/values.schema.json", append(data, '\n'), 0644) if err != nil { panic(err) } @@ -159,7 +194,7 @@ func main() { fmt.Println(string(dataV2)) // write the whole body at once - err = os.WriteFile("../files/configurableTemplatesChart/values.schema.json", dataV2, 0644) + err = os.WriteFile("../files/configurableTemplatesChart/values.schema.json", append(dataV2, '\n'), 0644) if err != nil { panic(err) } diff --git a/lib/util.js b/lib/util.js index 26f73ab..0ed7cd6 100644 --- a/lib/util.js +++ b/lib/util.js @@ -83,14 +83,19 @@ function isServiceOnlyChart(chartFolderPath) { } async function ask(...args) { - const questions = args.map(([message, initial, mandatory], index) => { + const questions = args.map(([message, initial, mandatory, validator], index) => { + const validate = (mandatory || validator) ? (value) => { + if (mandatory && !value?.trim()) return 'This field is required' + if (validator && value?.trim()) return validator(value?.trim()) + return true + } : undefined return { type: 'input', name: String(index), message: mandatory ? `${message} *` : message, initial: initial || '', required: mandatory && !initial, - validate: mandatory ? (value) => value?.trim() ? true : `This field is required` : undefined, + validate, separator: '' } }) @@ -245,21 +250,9 @@ function writeCAPApplicationCRO(yaml, hasIas, isService) { yaml.block(['metadata:'], () => { yaml.push('name: {{ include "appName" $ }}') - if (hasIas) { - yaml.block(['annotations:'], () => { - yaml.push([ - 'sme.sap.com/vs-route-request-header-set: |', - ' {', - ' "x-forwarded-client-cert": "%DOWNSTREAM_PEER_CERT%"', - ' }', - 'sme.sap.com/enable-cleanup-monitoring: "{{ .Values.app.enableCleanupMonitoring }}"' - ]) - }) - } else { - yaml.block(['annotations:'], () => { - yaml.push('sme.sap.com/enable-cleanup-monitoring: "{{ .Values.app.enableCleanupMonitoring }}"') - }) - } + yaml.block(['annotations:'], () => { + yaml.push('sme.sap.com/enable-cleanup-monitoring: "{{ .Values.app.enableCleanupMonitoring }}"') + }) }) yaml.block(['spec:'], () => { @@ -643,48 +636,8 @@ function getDomainCroYaml(project) { '{{- range $k, $v := $.Values.app.istioIngressGatewayLabels }}', ' {{ $k }}: {{ $v | default "invalidValue" }}', '{{- end }}', + 'tlsMode: Simple', ]) - - if (hasIas) { - yaml.push([ - 'certConfig:', - ' additionalCACertificate: |', - ' -----BEGIN CERTIFICATE-----', - ' MIIFZjCCA06gAwIBAgIQGHcPvmUGa79M6pM42bGFYjANBgkqhkiG9w0BAQsFADBN', - ' MQswCQYDVQQGEwJERTERMA8GA1UEBwwIV2FsbGRvcmYxDzANBgNVBAoMBlNBUCBT', - ' RTEaMBgGA1UEAwwRU0FQIENsb3VkIFJvb3QgQ0EwHhcNMTkwMjEzMTExOTM2WhcN', - ' MzkwMjEzMTEyNjMyWjBNMQswCQYDVQQGEwJERTERMA8GA1UEBwwIV2FsbGRvcmYx', - ' DzANBgNVBAoMBlNBUCBTRTEaMBgGA1UEAwwRU0FQIENsb3VkIFJvb3QgQ0EwggIi', - ' MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChbHLXJoe/zFag6fB3IcN3d3HT', - ' Y14nSkEZIuUzYs7B96GFxQi0T/2s971JFiLfB4KaCG+UcG3dLXf1H/wewq8ahArh', - ' FTsu4UR71ePUQiYlk/G68EFSy2zWYAJliXJS5k0DFMIWHD1lbSjCF3gPVJSUKf+v', - ' HmWD5e9vcuiPBlSCaEnSeimYRhg0ITmi3RJ4Wu7H0Xp7tDd5z4HUKuyi9XRinfvG', - ' kPALiBaX01QRC51cixmo0rhVe7qsNh7WDnLNBZeA0kkxNhLKDl8J6fQHKDdDEzmZ', - ' KhK5KxL5p5YIZWZ8eEdNRoYRMXR0PxmHvRanzRvSVlXSbfqxaKlORfJJ1ah1bRNt', - ' o0ngAQchTghsrRuf3Qh/2Kn29IuBy4bjKR9CdNLxGrClvX/q26rUUlz6A3lbXbwJ', - ' EHSRnendRfEiia+xfZD+NG2oZW0IdTXSqkCbnBnign+uxGH5ECjuLEtvtUx6i9Ae', - ' xAvK2FqIuud+AchqiZBKzmQAhUjKUoACzNP2Bx2zgJOeB0BqGvf6aldG0n2hYxJF', - ' 8Xssc8TBlwvAqtiubP/UxJJPs+IHqU+zjm7KdP6dM2sbE+J9O3n8DzOP0SDyEmWU', - ' UCwnmoPOQlq1z6fH9ghcp9bDdbh6adXM8I+SUYUcfvupOzBU7rWHxDCXld/24tpI', - ' FA7FRzHwKXqMSjwtBQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/', - ' BAUwAwEB/zAdBgNVHQ4EFgQUHLxmKw7KjUufjZNxqQ/KZ0ZpEyIwDQYJKoZIhvcN', - ' AQELBQADggIBABdSKQsh3EfVoqplSIx6X43y2Pp+kHZLtEsRWMzgO5LhYy2/Fvel', - ' eRBw/XEiB5iKuEGhxHz/Gqe0gZixw3SsHB1Q464EbGT4tPQ2UiMhiiDho9hVe6tX', - ' qX1FhrhycAD1xHIxMxQP/buX9s9arFZauZrpw/Jj4tGp7aEj4hypWpO9tzjdBthy', - ' 5vXSviU8L2HyiQpVND/Rp+dNJmVYTiFLuULRY28QbikgFO2xp9s4RNkDBnbDeTrT', - ' CKWcVsmlZLPJJQZm0n2p8CvoeAsKzIULT9YSbEEBwmeqRlmbUaoT/rUGoobSFcrP', - ' jrBg66y5hA2w7S3tDH0GjMpRu16b2u0hYQocUDuMlyhrkhsO+Qtqkz1ubwHCJ8PA', - ' RJw6zYl9VeBtgI5F69AEJdkAgYfvPw5DJipgVuQDSv7ezi6ZcI75939ENGjSyLVy', - ' 4SuP99G7DuItG008T8AYFUHAM2h/yskVyvoZ8+gZx54TC9aY9gPIKyX++4bHv5BC', - ' qbEdU46N05R+AIBW2KvWozQkjhSQCbzcp6DHXLoZINI6y0WOImzXrvLUSIm4CBaj', - ' 6MTXInIkmitdURnmpxTxLva5Kbng/u20u5ylIQKqpcD8HWX97lLVbmbnPkbpKxo+', - ' LvHPhNDM3rMsLu06agF4JTbO8ANYtWQTx0PVrZKJu+8fcIaUp7MVBIVZ', - ' -----END CERTIFICATE-----', - 'tlsMode: OptionalMutual' - ]) - } else { - yaml.push('tlsMode: Simple') - } }) return yaml.toString() diff --git a/package-lock.json b/package-lock.json index 5f265f2..0f58a28 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@cap-js/cap-operator-plugin", - "version": "0.15.0", + "version": "0.16.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@cap-js/cap-operator-plugin", - "version": "0.15.0", + "version": "0.16.0", "license": "Apache-2.0", "dependencies": { "enquirer": "^2.4.1", diff --git a/package.json b/package.json index b57c95e..7f4a23a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@cap-js/cap-operator-plugin", - "version": "0.15.0", + "version": "0.16.0", "description": "Add/Build Plugin for CAP Operator", "homepage": "https://github.com/cap-js/cap-operator-plugin/blob/main/README.md", "repository": { diff --git a/test/add-services.test.js b/test/add-services.test.js index 1f63600..1a57794 100644 --- a/test/add-services.test.js +++ b/test/add-services.test.js @@ -93,7 +93,7 @@ describe('cds add cap-operator', () => { expect(getFileHash(join(__dirname,'files/expectedConfigurableTemplatesChart/values-svc-ias.yaml'))).to.equal(getFileHash(join(bookshop, 'chart/values.yaml'))) expect(getFileHash(join(__dirname,'files/expectedConfigurableTemplatesChart/templates/_helpers-ias.tpl'))).to.equal(getFileHash(join(bookshop, 'chart/templates/_helpers.tpl'))) expect(getFileHash(join(__dirname,'files/expectedConfigurableTemplatesChart/templates/cap-operator-cros-svc-ias.yaml'))).to.equal(getFileHash(join(bookshop, 'chart/templates/cap-operator-cros.yaml'))) - expect(getFileHash(join(__dirname,'files/domain-ias.yaml'))).to.equal(getFileHash(join(bookshop, 'chart/templates/domain.yaml'))) + expect(getFileHash(join(__dirname,'files/domain.yaml'))).to.equal(getFileHash(join(bookshop, 'chart/templates/domain.yaml'))) expect(getFileHash(join(__dirname,'../files/configurableTemplatesChart/values.schema.json'))).to.equal(getFileHash(join(bookshop, 'chart/values.schema.json'))) expect(getFileHash(join(__dirname,'../files/commonTemplates/service-binding.yaml'))).to.equal(getFileHash(join(bookshop, 'chart/templates/service-binding.yaml'))) diff --git a/test/add.test.js b/test/add.test.js index aa8798e..bc147d3 100644 --- a/test/add.test.js +++ b/test/add.test.js @@ -203,7 +203,7 @@ describe('cds add cap-operator', () => { expect(getFileHash(join(__dirname, 'files/expectedConfigurableTemplatesChart/values-ias.yaml'))).to.equal(getFileHash(join(bookshop, 'chart/values.yaml'))) expect(getFileHash(join(__dirname, 'files/expectedConfigurableTemplatesChart/templates/_helpers-ias.tpl'))).to.equal(getFileHash(join(bookshop, 'chart/templates/_helpers.tpl'))) expect(getFileHash(join(__dirname, 'files/expectedConfigurableTemplatesChart/templates/cap-operator-cros-ias.yaml'))).to.equal(getFileHash(join(bookshop, 'chart/templates/cap-operator-cros.yaml'))) - expect(getFileHash(join(__dirname, 'files/domain-ias.yaml'))).to.equal(getFileHash(join(bookshop, 'chart/templates/domain.yaml'))) + expect(getFileHash(join(__dirname, 'files/domain.yaml'))).to.equal(getFileHash(join(bookshop, 'chart/templates/domain.yaml'))) expect(getFileHash(join(__dirname, '../files/configurableTemplatesChart/values.schema.json'))).to.equal(getFileHash(join(bookshop, 'chart/values.schema.json'))) expect(getFileHash(join(__dirname, '../files/commonTemplates/service-binding.yaml'))).to.equal(getFileHash(join(bookshop, 'chart/templates/service-binding.yaml'))) diff --git a/test/cap-op-plugin.test.js b/test/cap-op-plugin.test.js index f85f7e2..1b21d85 100644 --- a/test/cap-op-plugin.test.js +++ b/test/cap-op-plugin.test.js @@ -248,4 +248,31 @@ EXAMPLES expect(getFileHash(join(__dirname, 'files/expectedChart/runtime-values-svc-ias.yaml'))).to.equal(getFileHash(join(bookshop, 'chart/runtime-values.yaml'))) }) + + it('Generate runtime-values via prompts - invalid app name raises error', async () => { + execSync(`cds add cap-operator`, { cwd: bookshop }) + + sinon.replaceGetter(enquirer, 'prompt', () => sinon.stub().callsFake((questions) => { + const answers = { '0': 'MyApp123', '1': 'cap-op', '2': 'c-abc.kyma.ondemand.com', '3': 'dc94db56-asda-adssa-dada-123456789012', '4': 'bem-aad-sadad-123456789012', '5': 'dasdsd-1234-1234-1234-123456789012', '6': 'sdasd-4c4d-4d4d-4d4d-123456789012', '7': 'regcred' } + for (const question of questions) { + if (question.validate) { + const result = question.validate(answers[question.name]) + if (result !== true) throw new Error(result) + } + } + return Promise.resolve(answers) + })) + + cds.root = bookshop + let error + try { + await capOperatorPlugin('generate-runtime-values') + } catch (e) { + error = e + } finally { + sinon.restore() + } + + expect(error?.message).to.equal('Only a-z, 0-9 and - are allowed') + }) }) diff --git a/test/files/domain-ias.yaml b/test/files/domain-ias.yaml deleted file mode 100644 index 7f55c2f..0000000 --- a/test/files/domain-ias.yaml +++ /dev/null @@ -1,45 +0,0 @@ -apiVersion: sme.sap.com/v1alpha1 -kind: Domain -metadata: - name: {{ include "domainName" $ }} -spec: - dnsMode: Wildcard - domain: {{ .Values.app.domains.primary }} - ingressSelector: - {{- range $k, $v := $.Values.app.istioIngressGatewayLabels }} - {{ $k }}: {{ $v | default "invalidValue" }} - {{- end }} - certConfig: - additionalCACertificate: | - -----BEGIN CERTIFICATE----- - MIIFZjCCA06gAwIBAgIQGHcPvmUGa79M6pM42bGFYjANBgkqhkiG9w0BAQsFADBN - MQswCQYDVQQGEwJERTERMA8GA1UEBwwIV2FsbGRvcmYxDzANBgNVBAoMBlNBUCBT - RTEaMBgGA1UEAwwRU0FQIENsb3VkIFJvb3QgQ0EwHhcNMTkwMjEzMTExOTM2WhcN - MzkwMjEzMTEyNjMyWjBNMQswCQYDVQQGEwJERTERMA8GA1UEBwwIV2FsbGRvcmYx - DzANBgNVBAoMBlNBUCBTRTEaMBgGA1UEAwwRU0FQIENsb3VkIFJvb3QgQ0EwggIi - MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChbHLXJoe/zFag6fB3IcN3d3HT - Y14nSkEZIuUzYs7B96GFxQi0T/2s971JFiLfB4KaCG+UcG3dLXf1H/wewq8ahArh - FTsu4UR71ePUQiYlk/G68EFSy2zWYAJliXJS5k0DFMIWHD1lbSjCF3gPVJSUKf+v - HmWD5e9vcuiPBlSCaEnSeimYRhg0ITmi3RJ4Wu7H0Xp7tDd5z4HUKuyi9XRinfvG - kPALiBaX01QRC51cixmo0rhVe7qsNh7WDnLNBZeA0kkxNhLKDl8J6fQHKDdDEzmZ - KhK5KxL5p5YIZWZ8eEdNRoYRMXR0PxmHvRanzRvSVlXSbfqxaKlORfJJ1ah1bRNt - o0ngAQchTghsrRuf3Qh/2Kn29IuBy4bjKR9CdNLxGrClvX/q26rUUlz6A3lbXbwJ - EHSRnendRfEiia+xfZD+NG2oZW0IdTXSqkCbnBnign+uxGH5ECjuLEtvtUx6i9Ae - xAvK2FqIuud+AchqiZBKzmQAhUjKUoACzNP2Bx2zgJOeB0BqGvf6aldG0n2hYxJF - 8Xssc8TBlwvAqtiubP/UxJJPs+IHqU+zjm7KdP6dM2sbE+J9O3n8DzOP0SDyEmWU - UCwnmoPOQlq1z6fH9ghcp9bDdbh6adXM8I+SUYUcfvupOzBU7rWHxDCXld/24tpI - FA7FRzHwKXqMSjwtBQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ - BAUwAwEB/zAdBgNVHQ4EFgQUHLxmKw7KjUufjZNxqQ/KZ0ZpEyIwDQYJKoZIhvcN - AQELBQADggIBABdSKQsh3EfVoqplSIx6X43y2Pp+kHZLtEsRWMzgO5LhYy2/Fvel - eRBw/XEiB5iKuEGhxHz/Gqe0gZixw3SsHB1Q464EbGT4tPQ2UiMhiiDho9hVe6tX - qX1FhrhycAD1xHIxMxQP/buX9s9arFZauZrpw/Jj4tGp7aEj4hypWpO9tzjdBthy - 5vXSviU8L2HyiQpVND/Rp+dNJmVYTiFLuULRY28QbikgFO2xp9s4RNkDBnbDeTrT - CKWcVsmlZLPJJQZm0n2p8CvoeAsKzIULT9YSbEEBwmeqRlmbUaoT/rUGoobSFcrP - jrBg66y5hA2w7S3tDH0GjMpRu16b2u0hYQocUDuMlyhrkhsO+Qtqkz1ubwHCJ8PA - RJw6zYl9VeBtgI5F69AEJdkAgYfvPw5DJipgVuQDSv7ezi6ZcI75939ENGjSyLVy - 4SuP99G7DuItG008T8AYFUHAM2h/yskVyvoZ8+gZx54TC9aY9gPIKyX++4bHv5BC - qbEdU46N05R+AIBW2KvWozQkjhSQCbzcp6DHXLoZINI6y0WOImzXrvLUSIm4CBaj - 6MTXInIkmitdURnmpxTxLva5Kbng/u20u5ylIQKqpcD8HWX97lLVbmbnPkbpKxo+ - LvHPhNDM3rMsLu06agF4JTbO8ANYtWQTx0PVrZKJu+8fcIaUp7MVBIVZ - -----END CERTIFICATE----- - tlsMode: OptionalMutual diff --git a/test/files/expectedChart/runtime-values-ias.yaml b/test/files/expectedChart/runtime-values-ias.yaml index 137c3a5..a605995 100644 --- a/test/files/expectedChart/runtime-values-ias.yaml +++ b/test/files/expectedChart/runtime-values-ias.yaml @@ -8,7 +8,7 @@ serviceInstances: category: CAP appCallbacks: dependenciesCallbacks: - url: https://bem-aad-sadad-123456789012.bkshop.c-abc.kyma.ondemand.com/v1.0/callback/tenants/{app_tid}/dependencies + url: https://cap-op.c-abc.kyma.ondemand.com/sms/dependencies/dc94db56-asda-adssa-dada-123456789012/bkshop/{app_tid} subscriptionCallbacks: url: https://cap-op.c-abc.kyma.ondemand.com/sms/provision/tenants/{app_tid} identity: diff --git a/test/files/expectedChart/runtime-values.yaml b/test/files/expectedChart/runtime-values.yaml index 4524dab..5b4f871 100644 --- a/test/files/expectedChart/runtime-values.yaml +++ b/test/files/expectedChart/runtime-values.yaml @@ -6,7 +6,7 @@ serviceInstances: displayName: bkshop description: bkshop appUrls: - getDependencies: https://bem-aad-sadad-123456789012.bkshop.c-abc.kyma.ondemand.com/callback/v1.0/dependencies + getDependencies: https://cap-op.c-abc.kyma.ondemand.com/dependencies/dc94db56-asda-adssa-dada-123456789012/bkshop onSubscription: https://cap-op.c-abc.kyma.ondemand.com/provision/tenants/{tenantId} xsuaa: parameters: diff --git a/test/files/expectedChart/templates/cap-operator-cros-ias.yaml b/test/files/expectedChart/templates/cap-operator-cros-ias.yaml index 3a5bc27..9d32442 100644 --- a/test/files/expectedChart/templates/cap-operator-cros-ias.yaml +++ b/test/files/expectedChart/templates/cap-operator-cros-ias.yaml @@ -4,10 +4,6 @@ kind: CAPApplication metadata: name: {{ include "appName" $ }} annotations: - sme.sap.com/vs-route-request-header-set: | - { - "x-forwarded-client-cert": "%DOWNSTREAM_PEER_CERT%" - } sme.sap.com/enable-cleanup-monitoring: "{{ .Values.app.enableCleanupMonitoring }}" spec: domainRefs: diff --git a/test/files/expectedChart/templates/cap-operator-cros-svc-ias.yaml b/test/files/expectedChart/templates/cap-operator-cros-svc-ias.yaml index 7249bf0..a8e4ea9 100644 --- a/test/files/expectedChart/templates/cap-operator-cros-svc-ias.yaml +++ b/test/files/expectedChart/templates/cap-operator-cros-svc-ias.yaml @@ -4,10 +4,6 @@ kind: CAPApplication metadata: name: {{ include "appName" $ }} annotations: - sme.sap.com/vs-route-request-header-set: | - { - "x-forwarded-client-cert": "%DOWNSTREAM_PEER_CERT%" - } sme.sap.com/enable-cleanup-monitoring: "{{ .Values.app.enableCleanupMonitoring }}" spec: domainRefs: diff --git a/test/files/expectedConfigurableTemplatesChart/runtime-values-ias.yaml b/test/files/expectedConfigurableTemplatesChart/runtime-values-ias.yaml index 0790d12..d7d655f 100644 --- a/test/files/expectedConfigurableTemplatesChart/runtime-values-ias.yaml +++ b/test/files/expectedConfigurableTemplatesChart/runtime-values-ias.yaml @@ -8,7 +8,7 @@ serviceInstances: category: CAP appCallbacks: dependenciesCallbacks: - url: https://bem-aad-sadad-123456789012.bkshop.c-abc.kyma.ondemand.com/v1.0/callback/tenants/{app_tid}/dependencies + url: https://cap-op.c-abc.kyma.ondemand.com/sms/dependencies/dc94db56-asda-adssa-dada-123456789012/bkshop/{app_tid} subscriptionCallbacks: url: https://cap-op.c-abc.kyma.ondemand.com/sms/provision/tenants/{app_tid} identity: diff --git a/test/files/expectedConfigurableTemplatesChart/runtime-values.yaml b/test/files/expectedConfigurableTemplatesChart/runtime-values.yaml index 693a393..0bf73d6 100644 --- a/test/files/expectedConfigurableTemplatesChart/runtime-values.yaml +++ b/test/files/expectedConfigurableTemplatesChart/runtime-values.yaml @@ -6,7 +6,7 @@ serviceInstances: displayName: bkshop description: bkshop appUrls: - getDependencies: https://bem-aad-sadad-123456789012.bkshop.c-abc.kyma.ondemand.com/callback/v1.0/dependencies + getDependencies: https://cap-op.c-abc.kyma.ondemand.com/dependencies/dc94db56-asda-adssa-dada-123456789012/bkshop onSubscription: https://cap-op.c-abc.kyma.ondemand.com/provision/tenants/{tenantId} xsuaa: parameters: diff --git a/test/files/expectedConfigurableTemplatesChart/templates/cap-operator-cros-ias.yaml b/test/files/expectedConfigurableTemplatesChart/templates/cap-operator-cros-ias.yaml index b41eff6..8c6b406 100644 --- a/test/files/expectedConfigurableTemplatesChart/templates/cap-operator-cros-ias.yaml +++ b/test/files/expectedConfigurableTemplatesChart/templates/cap-operator-cros-ias.yaml @@ -4,10 +4,6 @@ kind: CAPApplication metadata: name: {{ include "appName" $ }} annotations: - sme.sap.com/vs-route-request-header-set: | - { - "x-forwarded-client-cert": "%DOWNSTREAM_PEER_CERT%" - } sme.sap.com/enable-cleanup-monitoring: "{{ .Values.app.enableCleanupMonitoring }}" spec: domainRefs: diff --git a/test/files/expectedConfigurableTemplatesChart/templates/cap-operator-cros-svc-ias.yaml b/test/files/expectedConfigurableTemplatesChart/templates/cap-operator-cros-svc-ias.yaml index e5f5ac1..8c8bd6d 100644 --- a/test/files/expectedConfigurableTemplatesChart/templates/cap-operator-cros-svc-ias.yaml +++ b/test/files/expectedConfigurableTemplatesChart/templates/cap-operator-cros-svc-ias.yaml @@ -4,10 +4,6 @@ kind: CAPApplication metadata: name: {{ include "appName" $ }} annotations: - sme.sap.com/vs-route-request-header-set: | - { - "x-forwarded-client-cert": "%DOWNSTREAM_PEER_CERT%" - } sme.sap.com/enable-cleanup-monitoring: "{{ .Values.app.enableCleanupMonitoring }}" spec: domainRefs: diff --git a/test/files/runtime-values-of-simple-chart.yaml b/test/files/runtime-values-of-simple-chart.yaml index 4524dab..5b4f871 100644 --- a/test/files/runtime-values-of-simple-chart.yaml +++ b/test/files/runtime-values-of-simple-chart.yaml @@ -6,7 +6,7 @@ serviceInstances: displayName: bkshop description: bkshop appUrls: - getDependencies: https://bem-aad-sadad-123456789012.bkshop.c-abc.kyma.ondemand.com/callback/v1.0/dependencies + getDependencies: https://cap-op.c-abc.kyma.ondemand.com/dependencies/dc94db56-asda-adssa-dada-123456789012/bkshop onSubscription: https://cap-op.c-abc.kyma.ondemand.com/provision/tenants/{tenantId} xsuaa: parameters: diff --git a/test/files/updatedValues.schema.json b/test/files/updatedValues.schema.json index f1b247f..2eb7bd1 100644 --- a/test/files/updatedValues.schema.json +++ b/test/files/updatedValues.schema.json @@ -547,8 +547,7 @@ "type": "object" }, "FieldsV1": { - "properties": {}, - "additionalProperties": false, + "additionalProperties": true, "type": "object" }, "FlexVolumeSource": { @@ -770,23 +769,13 @@ ] }, "IntOrString": { - "properties": { - "Type": { + "anyOf": [ + { "type": "integer" }, - "IntVal": { - "type": "integer" - }, - "StrVal": { + { "type": "string" } - }, - "additionalProperties": false, - "type": "object", - "required": [ - "Type", - "IntVal", - "StrVal" ] }, "JobDetails": { @@ -1965,9 +1954,7 @@ "type": "object" }, "Time": { - "properties": {}, - "additionalProperties": false, - "type": "object" + "type": "string" }, "Toleration": { "properties": {