diff --git a/api/v1beta1/openstacklightspeed_types.go b/api/v1beta1/openstacklightspeed_types.go index 65546e9..040ab30 100644 --- a/api/v1beta1/openstacklightspeed_types.go +++ b/api/v1beta1/openstacklightspeed_types.go @@ -181,12 +181,13 @@ type OpenStackLightspeedCore struct { LLMAPIVersion string `json:"llmAPIVersion,omitempty"` // +kubebuilder:validation:Optional - // Disable feedback collection - FeedbackDisabled bool `json:"feedbackDisabled,omitempty"` + // +kubebuilder:default=true + // Enable feedback collection + FeedbackEnabled *bool `json:"feedbackEnabled,omitempty"` // +kubebuilder:validation:Optional - // Disable conversation transcripts collection - TranscriptsDisabled bool `json:"transcriptsDisabled,omitempty"` + // Enable conversation transcripts collection + TranscriptsEnabled bool `json:"transcriptsEnabled,omitempty"` // +kubebuilder:validation:Optional // +kubebuilder:default={} diff --git a/api/v1beta1/zz_generated.deepcopy.go b/api/v1beta1/zz_generated.deepcopy.go index 7ccfe25..4fec34e 100644 --- a/api/v1beta1/zz_generated.deepcopy.go +++ b/api/v1beta1/zz_generated.deepcopy.go @@ -131,6 +131,11 @@ func (in *OpenStackLightspeed) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *OpenStackLightspeedCore) DeepCopyInto(out *OpenStackLightspeedCore) { *out = *in + if in.FeedbackEnabled != nil { + in, out := &in.FeedbackEnabled, &out.FeedbackEnabled + *out = new(bool) + **out = **in + } out.Logging = in.Logging } @@ -194,7 +199,7 @@ func (in *OpenStackLightspeedList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *OpenStackLightspeedSpec) DeepCopyInto(out *OpenStackLightspeedSpec) { *out = *in - out.OpenStackLightspeedCore = in.OpenStackLightspeedCore + in.OpenStackLightspeedCore.DeepCopyInto(&out.OpenStackLightspeedCore) if in.Database != nil { in, out := &in.Database, &out.Database *out = new(DatabaseSpec) diff --git a/bundle/manifests/lightspeed.openstack.org_openstacklightspeeds.yaml b/bundle/manifests/lightspeed.openstack.org_openstacklightspeeds.yaml index 9582ee5..0a05a43 100644 --- a/bundle/manifests/lightspeed.openstack.org_openstacklightspeeds.yaml +++ b/bundle/manifests/lightspeed.openstack.org_openstacklightspeeds.yaml @@ -75,8 +75,9 @@ spec: This section is not part of the stable API and may change at any time without backward compatibility. type: object x-kubernetes-preserve-unknown-fields: true - feedbackDisabled: - description: Disable feedback collection + feedbackEnabled: + default: true + description: Enable feedback collection type: boolean llmAPIVersion: description: LLM API Version for LLM providers that require it (e.g., @@ -171,8 +172,8 @@ spec: tlsCACertBundle: description: Configmap name containing a CA Certificates bundle type: string - transcriptsDisabled: - description: Disable conversation transcripts collection + transcriptsEnabled: + description: Enable conversation transcripts collection type: boolean required: - llmCredentials diff --git a/bundle/manifests/openstack-lightspeed-operator.clusterserviceversion.yaml b/bundle/manifests/openstack-lightspeed-operator.clusterserviceversion.yaml index 25e2af9..cf7f1fb 100644 --- a/bundle/manifests/openstack-lightspeed-operator.clusterserviceversion.yaml +++ b/bundle/manifests/openstack-lightspeed-operator.clusterserviceversion.yaml @@ -25,7 +25,7 @@ metadata: ] capabilities: Basic Install categories: AI/Machine Learning - createdAt: "2026-07-09T10:17:14Z" + createdAt: "2026-07-13T09:32:13Z" description: AI-powered virtual assistant for Red Hat OpenStack Services on OpenShift features.operators.openshift.io/cnf: "false" features.operators.openshift.io/cni: "false" diff --git a/config/crd/bases/lightspeed.openstack.org_openstacklightspeeds.yaml b/config/crd/bases/lightspeed.openstack.org_openstacklightspeeds.yaml index f321107..1371ad0 100644 --- a/config/crd/bases/lightspeed.openstack.org_openstacklightspeeds.yaml +++ b/config/crd/bases/lightspeed.openstack.org_openstacklightspeeds.yaml @@ -75,8 +75,9 @@ spec: This section is not part of the stable API and may change at any time without backward compatibility. type: object x-kubernetes-preserve-unknown-fields: true - feedbackDisabled: - description: Disable feedback collection + feedbackEnabled: + default: true + description: Enable feedback collection type: boolean llmAPIVersion: description: LLM API Version for LLM providers that require it (e.g., @@ -171,8 +172,8 @@ spec: tlsCACertBundle: description: Configmap name containing a CA Certificates bundle type: string - transcriptsDisabled: - description: Disable conversation transcripts collection + transcriptsEnabled: + description: Enable conversation transcripts collection type: boolean required: - llmCredentials diff --git a/internal/controller/lcore_config.go b/internal/controller/lcore_config.go index 09f642f..bc52a0c 100644 --- a/internal/controller/lcore_config.go +++ b/internal/controller/lcore_config.go @@ -100,8 +100,8 @@ func buildLCoreLlamaStackConfig() map[string]interface{} { } func buildLCoreUserDataCollectionConfig(_ *common_helper.Helper, instance *apiv1beta1.OpenStackLightspeed) map[string]interface{} { - feedbackEnabled := !instance.Spec.FeedbackDisabled - transcriptsEnabled := !instance.Spec.TranscriptsDisabled + feedbackEnabled := instance.Spec.FeedbackEnabled == nil || *instance.Spec.FeedbackEnabled + transcriptsEnabled := instance.Spec.TranscriptsEnabled return map[string]interface{}{ "feedback_enabled": feedbackEnabled, @@ -176,7 +176,7 @@ func buildLCoreConversationCacheConfig(h *common_helper.Helper, _ *apiv1beta1.Op // isDataCollectionEnabled returns true if at least one of feedback or transcripts is enabled. func isDataCollectionEnabled(instance *apiv1beta1.OpenStackLightspeed) bool { - return !instance.Spec.FeedbackDisabled || !instance.Spec.TranscriptsDisabled + return (instance.Spec.FeedbackEnabled == nil || *instance.Spec.FeedbackEnabled) || instance.Spec.TranscriptsEnabled } // buildExporterConfigMap creates the ConfigMap for the dataverse exporter sidecar. diff --git a/test/kuttl/common/expected-configs/lightspeed-stack.yaml b/test/kuttl/common/expected-configs/lightspeed-stack.yaml index 27de495..abec139 100644 --- a/test/kuttl/common/expected-configs/lightspeed-stack.yaml +++ b/test/kuttl/common/expected-configs/lightspeed-stack.yaml @@ -92,5 +92,5 @@ service: user_data_collection: feedback_enabled: true feedback_storage: /tmp/data/feedback - transcripts_enabled: true + transcripts_enabled: false transcripts_storage: /tmp/data/transcripts diff --git a/test/kuttl/tests/update-openstacklightspeed/07-update-openstack-lightspeed-instance.yaml b/test/kuttl/tests/update-openstacklightspeed/07-update-openstack-lightspeed-instance.yaml index 88e0d59..e845505 100644 --- a/test/kuttl/tests/update-openstacklightspeed/07-update-openstack-lightspeed-instance.yaml +++ b/test/kuttl/tests/update-openstacklightspeed/07-update-openstack-lightspeed-instance.yaml @@ -28,8 +28,8 @@ spec: llmProjectID: test-project-id-UPDATE llmDeploymentName: test-deployment-name-UPDATE llmAPIVersion: v1.1 - feedbackDisabled: true - transcriptsDisabled: true + feedbackEnabled: false + transcriptsEnabled: false logging: ogxLogLevel: "core=debug,providers=info" lightspeedStackLogLevel: ERROR diff --git a/test/kuttl/tests/update-openstacklightspeed/08-assert-openstacklightspeed-update.yaml b/test/kuttl/tests/update-openstacklightspeed/08-assert-openstacklightspeed-update.yaml index 8b32c33..fe43f9d 100644 --- a/test/kuttl/tests/update-openstacklightspeed/08-assert-openstacklightspeed-update.yaml +++ b/test/kuttl/tests/update-openstacklightspeed/08-assert-openstacklightspeed-update.yaml @@ -271,8 +271,8 @@ spec: llmProjectID: test-project-id-UPDATE llmDeploymentName: test-deployment-name-UPDATE llmAPIVersion: v1.1 - feedbackDisabled: true - transcriptsDisabled: true + feedbackEnabled: false + transcriptsEnabled: false logging: ogxLogLevel: "core=debug,providers=info" lightspeedStackLogLevel: ERROR