Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
385cca3
chore(plugins): remove unused code
k-fabryczny Jun 29, 2026
4db5ed3
Remove plugin reference tests
k-fabryczny Jun 30, 2026
fda4563
Remove trackedObjects from flux controller
k-fabryczny Jun 30, 2026
4c5af78
Fix linter issue
k-fabryczny Jun 30, 2026
114b5fd
Remove deprecated plugin integration test suite
k-fabryczny Jul 2, 2026
2975dc0
Remove expressionEvaluationEnabled and integrationEnabled for plugin
k-fabryczny Jul 2, 2026
1758a55
Remove unused fields from test
k-fabryczny Jul 2, 2026
8d2afed
Improve error message for option values
k-fabryczny Jul 2, 2026
57467b7
Remove outdated comment from startPluginReconciler
k-fabryczny Jul 2, 2026
ed69502
Update tests description, merge tests
k-fabryczny Jul 2, 2026
1b88835
Remove unused constant
k-fabryczny Jul 2, 2026
2058f7f
Add one test case, fix second one
k-fabryczny Jul 2, 2026
059caaf
Fix error message
k-fabryczny Jul 2, 2026
0bbfeea
Remove deprecated fields from plugin, remove unused functions, fix tests
k-fabryczny Jul 3, 2026
ab155b5
Automatic generation of CRD API Docs
cloud-operator-bot[bot] Jul 3, 2026
5733bed
Fix linter problem
k-fabryczny Jul 3, 2026
2232cc8
Fix doc comment
k-fabryczny Jul 6, 2026
f7a6b44
Fix tests, remove expression from parameters
k-fabryczny Jul 7, 2026
561df2d
Restore tests, add validatePresetPluginOptionValues, remove convertPr…
k-fabryczny Jul 7, 2026
f5eaae7
Add nolint unparam to validatePluginOptionValues
k-fabryczny Jul 7, 2026
d70ae16
Improve validatePresetPluginOptionValues function
k-fabryczny Jul 7, 2026
e76fb7e
Remove 'expression' from error message and comment
k-fabryczny Jul 7, 2026
635d0ec
Add secret validation to plugin
k-fabryczny Jul 8, 2026
98cded2
Improve source validatation for plugin preset
k-fabryczny Jul 8, 2026
057d5ca
Align check with plugin webhook
k-fabryczny Jul 8, 2026
131d907
Continue on error
k-fabryczny Jul 8, 2026
8b3167f
Remove expression from plugin doc
k-fabryczny Jul 9, 2026
92e6648
Remove unsupported flags from plugin
k-fabryczny Jul 9, 2026
3721eae
Remove unused const and function call
k-fabryczny Jul 9, 2026
d81ecd3
Remove TrackedObjects from plugin
k-fabryczny Jul 10, 2026
2b1c4bf
Remove unused const LabelKeyPluginIntegration
k-fabryczny Jul 10, 2026
f223157
Remove tracking from plugin
k-fabryczny Jul 13, 2026
ffe276d
Remove unnecessary newline
k-fabryczny Jul 13, 2026
8891620
Remove unused const AnnotationKeyPluginTackingID
k-fabryczny Jul 15, 2026
7e31c48
Make example more readable
k-fabryczny Jul 15, 2026
6d5a8c4
Remove plugipreset webhook changes,comment out expression tests for now
k-fabryczny Jul 15, 2026
a428357
Remove unsused nolint:unparam
k-fabryczny Jul 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 1 addition & 18 deletions api/v1alpha1/plugin_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,25 +66,13 @@ type PluginOptionValue struct {
Value *apiextensionsv1.JSON `json:"value,omitempty"`
// ValueFrom references value in another source.
ValueFrom *PluginValueFromSource `json:"valueFrom,omitempty"`
// Expression is a YAML string with ${...} placeholders that will be evaluated as CEL expressions.
//
// Deprecated: Expression is deprecated on standalone Plugins and will be removed in a future release.
// Consider using a PluginPreset to deploy Plugins utilizing the Expression field.
Expression *string `json:"expression,omitempty"`
}

// PluginValueFromSource defines how to extract dynamic values
// only one of secret or ref can be set
// +kubebuilder:validation:XValidation:rule="!(has(self.secret) && has(self.ref))",message="both secret and ref cannot be set"
// +kubebuilder:validation:XValidation:rule="has(self.secret) || has(self.ref)",message="one of secret or ref must be set"
// +kubebuilder:validation:XValidation:rule="has(self.secret)",message="secret must be set"
type PluginValueFromSource struct {
// Secret references the v1.Secret containing the value that needs to be extracted
Secret *SecretKeyReference `json:"secret,omitempty"`
// Ref references values defined in another resource (Plugin, PluginPreset)
//
// Deprecated: Ref is deprecated on standalone Plugins and will be removed in a future release.
// Consider using a PluginPreset to deploy Plugins utilizing the Ref field.
Ref *ExternalValueSource `json:"ref,omitempty"`
}
Comment thread
k-fabryczny marked this conversation as resolved.

// ExternalValueSource defines how to extract values from external resources
Expand Down Expand Up @@ -217,11 +205,6 @@ type PluginStatus struct {
// +Optional
LastReconciledAt string `json:"lastReconciledAt,omitempty"`

// TrackedObjects contains a list of objects being tracked via the greenhouse.sap/tracking-id annotation.
// Each entry is in the format "kind/name" (e.g., "Plugin/my-plugin").
// +Optional
TrackedObjects []string `json:"trackedObjects,omitempty"`

// ImageReplication contains a list of container image references that have been
// successfully replicated to the configured mirror registry.
// Used to skip redundant replication on subsequent reconciliations.
Expand Down
15 changes: 0 additions & 15 deletions api/v1alpha1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 0 additions & 4 deletions api/well_known.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,12 +75,8 @@ const (

// LabelKeyPluginExposedServices is used to identify Plugins that expose services.
LabelKeyPluginExposedServices = "greenhouse.sap/plugin-exposed-services"
// LabelKeyPluginIntegration is used to identify resources that are part of plugin-plugin integration scenarios.
LabelKeyPluginIntegration = "greenhouse.sap/integration"
// LabelValuePluginIntegration will be used as list selector value to identify resources that are part of plugin-plugin integration scenarios.
LabelValuePluginIntegration = "true"
// AnnotationKeyPluginTackingID is used to identify the resources that are resolving values from the tracked plugin.
AnnotationKeyPluginTackingID = "greenhouse.sap/tracking-id"

FluxReconcileRequestAnnotation = "reconcile.fluxcd.io/requestedAt"
)
Expand Down
2 changes: 0 additions & 2 deletions charts/greenhouse/ci/test-values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@ global:
postgresqlUsername: dex
# Plugin configuration for Greenhouse.
plugin:
expressionEvaluationEnabled: false
integrationEnabled: false
ociMirroringEnabled: false
# PluginPreset configuration for Greenhouse.
pluginPreset:
Expand Down
2 changes: 0 additions & 2 deletions charts/greenhouse/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@ global:
postgresqlUsername:
# Plugin configuration for Greenhouse.
plugin:
expressionEvaluationEnabled: false
integrationEnabled: false
ociMirroringEnabled: false
# PluginPreset configuration for Greenhouse.
pluginPreset:
Expand Down
2 changes: 0 additions & 2 deletions charts/manager/ci/test-values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@ global:
postgresqlPort: 5432
postgresqlUsername: dex
plugin:
expressionEvaluationEnabled: false
integrationEnabled: false
ociMirroringEnabled: false
pluginPreset:
expressionEvaluationEnabled: true
Expand Down
101 changes: 2 additions & 99 deletions charts/manager/crds/greenhouse.sap_plugins.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -123,13 +123,6 @@ spec:
items:
description: PluginOptionValue is the value for a PluginOption.
properties:
expression:
description: |-
Expression is a YAML string with ${...} placeholders that will be evaluated as CEL expressions.

Deprecated: Expression is deprecated on standalone Plugins and will be removed in a future release.
Consider using a PluginPreset to deploy Plugins utilizing the Expression field.
type: string
name:
description: Name of the values.
type: string
Expand All @@ -139,87 +132,6 @@ spec:
valueFrom:
description: ValueFrom references value in another source.
properties:
Comment thread
k-fabryczny marked this conversation as resolved.
ref:
description: |-
Ref references values defined in another resource (Plugin, PluginPreset)

Deprecated: Ref is deprecated on standalone Plugins and will be removed in a future release.
Consider using a PluginPreset to deploy Plugins utilizing the Ref field.
properties:
expression:
description: Expression is a CEL expression to extract
the value from the referenced resource
type: string
kind:
description: |-
Kind is the resource kind to target
if not set, defaults to the same kind as the referencing resource (Plugin or PluginPreset)
enum:
- Plugin
- PluginPreset
type: string
name:
description: |-
Name is the name of the resource to target
this field is mutually exclusive with LabelSelector
minLength: 1
type: string
selector:
description: |-
Selector selects the resources to target based on labels
this field is mutually exclusive with Name
properties:
matchExpressions:
description: matchExpressions is a list of label
selector requirements. The requirements are ANDed.
items:
description: |-
A label selector requirement is a selector that contains values, a key, and an operator that
relates the key and values.
properties:
key:
description: key is the label key that the
selector applies to.
type: string
operator:
description: |-
operator represents a key's relationship to a set of values.
Valid operators are In, NotIn, Exists and DoesNotExist.
type: string
values:
description: |-
values is an array of string values. If the operator is In or NotIn,
the values array must be non-empty. If the operator is Exists or DoesNotExist,
the values array must be empty. This array is replaced during a strategic
merge patch.
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
description: |-
matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
map is equivalent to an element of matchExpressions, whose key field is "key", the
operator is "In", and the values array contains only "value". The requirements are ANDed.
type: object
type: object
x-kubernetes-map-type: atomic
required:
- expression
type: object
x-kubernetes-validations:
- message: exactly one of the fields in [name selector]
must be set
rule: '[has(self.name),has(self.selector)].filter(x,x==true).size()
== 1'
secret:
description: Secret references the v1.Secret containing
the value that needs to be extracted
Expand All @@ -236,10 +148,8 @@ spec:
type: object
type: object
x-kubernetes-validations:
- message: both secret and ref cannot be set
rule: '!(has(self.secret) && has(self.ref))'
- message: one of secret or ref must be set
rule: has(self.secret) || has(self.ref)
- message: secret must be set
rule: has(self.secret)
required:
- name
type: object
Expand Down Expand Up @@ -437,13 +347,6 @@ spec:
- type
x-kubernetes-list-type: map
type: object
trackedObjects:
description: |-
TrackedObjects contains a list of objects being tracked via the greenhouse.sap/tracking-id annotation.
Each entry is in the format "kind/name" (e.g., "Plugin/my-plugin").
items:
type: string
type: array
uiApplication:
description: UIApplication contains a reference to the frontend that
is used for the deployed pluginDefinition version.
Expand Down
7 changes: 0 additions & 7 deletions charts/manager/templates/_helpers.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -107,13 +107,6 @@ Define postgresql helpers
{{- define "dex.backend" -}}
{{- printf "%s" (required "global.dex.backend missing" .Values.global.dex.backend) }}
{{- end }}
{{/* Render the plugin expression evaluation flag */}}
{{- define "plugin.expressionEvaluationEnabled" -}}
{{- printf "%t" (required "global.plugin.expressionEvaluationEnabled missing" .Values.global.plugin.expressionEvaluationEnabled) }}
{{- end }}
{{- define "plugin.integrationEnabled" -}}
{{- printf "%t" (required "global.plugin.integrationEnabled missing" .Values.global.plugin.integrationEnabled) }}
{{- end }}
{{- define "plugin.ociMirroringEnabled" -}}
{{- printf "%t" (required "global.plugin.ociMirroringEnabled missing" .Values.global.plugin.ociMirroringEnabled) }}
{{- end }}
Expand Down
11 changes: 1 addition & 10 deletions charts/manager/templates/manager/feature-flag.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ kind: ConfigMap
metadata:
name: {{ include "manager.fullname" . }}-feature-flags
data:
_example: >
_example: |
################################
# #
# EXAMPLE CONFIGURATION #
Expand All @@ -15,16 +15,9 @@ data:
dex: |
storage: kubernetes / postgres
# enable plugin features
# expressionEvaluationEnabled allows you to enable or disable expression evaluation for plugin option values
# set to false to disable expression evaluation (expressions will be used as literal values)
# set to true to enable expression evaluation (expressions will be evaluated using CEL)
# integrationEnabled allows you to enable or disable plugin to plugin integration features
# set true to enable value references from another plugin via CEL expressions
Comment thread
k-fabryczny marked this conversation as resolved.
# ociMirroringEnabled allows you to enable or disable OCI mirroring
# set to true to enable OCI mirroring, defaults to false
plugin: |
expressionEvaluationEnabled: false / true
integrationEnabled: false / true
ociMirroringEnabled: false / true
# enable pluginPreset features
# expressionEvaluationEnabled allows you to enable or disable CEL expression evaluation in PluginPreset
Expand All @@ -34,8 +27,6 @@ data:
dex: |
storage: {{ include "dex.backend" $ }}
plugin: |
expressionEvaluationEnabled: {{ include "plugin.expressionEvaluationEnabled" $ }}
integrationEnabled: {{ include "plugin.integrationEnabled" $ }}
ociMirroringEnabled: {{ include "plugin.ociMirroringEnabled" $ }}
pluginPreset: |
expressionEvaluationEnabled: {{ include "pluginPreset.expressionEvaluationEnabled" $ }}
1 change: 0 additions & 1 deletion charts/manager/templates/webhook/webhooks.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,6 @@ webhooks:
operations:
- CREATE
- UPDATE
- DELETE
Comment thread
Zaggy21 marked this conversation as resolved.
resources:
- clusters
sideEffects: None
Expand Down
11 changes: 4 additions & 7 deletions cmd/greenhouse/controllers.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,15 +81,12 @@ func startOrganizationReconciler(name string, mgr ctrl.Manager) error {
}

// startPluginReconciler initializes the plugin reconciler.
// Resolves expression evaluation feature flag from greenhouse-feature-flags.
func startPluginReconciler(name string, mgr ctrl.Manager) error {
return (&plugincontrollers.PluginReconciler{
KubeRuntimeOpts: kubeClientOpts,
ExpressionEvaluationEnabled: featureFlags.IsExpressionEvaluationEnabled(),
IntegrationEnabled: featureFlags.IsIntegrationEnabled(),
OCIMirroringEnabled: featureFlags.IsOCIMirroringEnabled(),
StoragePath: artifactStoragePath,
HTTPRetry: artifactRetries,
KubeRuntimeOpts: kubeClientOpts,
OCIMirroringEnabled: featureFlags.IsOCIMirroringEnabled(),
StoragePath: artifactStoragePath,
Comment thread
k-fabryczny marked this conversation as resolved.
HTTPRetry: artifactRetries,
}).SetupWithManager(name, mgr)
}

Expand Down
2 changes: 0 additions & 2 deletions dev-env/dev.values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,6 @@ global:
dex:
backend: kubernetes
plugin:
expressionEvaluationEnabled: true
integrationEnabled: true
ociMirroringEnabled: true
pluginPreset:
expressionEvaluationEnabled: true
Expand Down
Loading
Loading