From 147c6f4d897f1628443c4248b05c463481b41640 Mon Sep 17 00:00:00 2001 From: Gorka Eguileor Date: Wed, 12 Aug 2026 14:06:51 +0200 Subject: [PATCH 1/8] Revert "Move to lightspeed-stack:latest" This reverts commit 581680fb1a8a98a7da899d72d4ca3d0b15bf7ebf. --- api/v1beta1/openstacklightspeed_types.go | 2 +- .../openstack-lightspeed-operator.clusterserviceversion.yaml | 4 ++-- config/manager/manager.yaml | 2 +- hack/env.sh | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/api/v1beta1/openstacklightspeed_types.go b/api/v1beta1/openstacklightspeed_types.go index 3fbc9c4..e37e6ea 100644 --- a/api/v1beta1/openstacklightspeed_types.go +++ b/api/v1beta1/openstacklightspeed_types.go @@ -30,7 +30,7 @@ const ( OpenStackLightspeedContainerImage = "quay.io/openstack-lightspeed/rag-content:os-docs-2026.1-ogx" // LCoreContainerImage is the fall-back container image for LCore - LCoreContainerImage = "quay.io/lightspeed-core/lightspeed-stack:latest" + LCoreContainerImage = "quay.io/lightspeed-core/lightspeed-stack:dev-latest" // ExporterContainerImage is the fall-back container image for the Dataverse Exporter ExporterContainerImage = "quay.io/lightspeed-core/lightspeed-to-dataverse-exporter:latest" diff --git a/bundle/manifests/openstack-lightspeed-operator.clusterserviceversion.yaml b/bundle/manifests/openstack-lightspeed-operator.clusterserviceversion.yaml index da65504..0e2ad32 100644 --- a/bundle/manifests/openstack-lightspeed-operator.clusterserviceversion.yaml +++ b/bundle/manifests/openstack-lightspeed-operator.clusterserviceversion.yaml @@ -343,7 +343,7 @@ spec: - name: RELATED_IMAGE_OPENSTACK_LIGHTSPEED_IMAGE_URL_DEFAULT value: quay.io/openstack-lightspeed/rag-content:os-docs-2026.1-ogx - name: RELATED_IMAGE_LCORE_IMAGE_URL_DEFAULT - value: quay.io/lightspeed-core/lightspeed-stack:latest + value: quay.io/lightspeed-core/lightspeed-stack:dev-latest - name: RELATED_IMAGE_EXPORTER_IMAGE_URL_DEFAULT value: quay.io/lightspeed-core/lightspeed-to-dataverse-exporter:latest - name: RELATED_IMAGE_POSTGRES_IMAGE_URL_DEFAULT @@ -516,7 +516,7 @@ spec: relatedImages: - image: quay.io/openstack-lightspeed/rag-content:os-docs-2026.1-ogx name: openstack-lightspeed-image-url-default - - image: quay.io/lightspeed-core/lightspeed-stack:latest + - image: quay.io/lightspeed-core/lightspeed-stack:dev-latest name: lcore-image-url-default - image: quay.io/lightspeed-core/lightspeed-to-dataverse-exporter:latest name: exporter-image-url-default diff --git a/config/manager/manager.yaml b/config/manager/manager.yaml index a750f42..46a2d2b 100644 --- a/config/manager/manager.yaml +++ b/config/manager/manager.yaml @@ -76,7 +76,7 @@ spec: - name: RELATED_IMAGE_OPENSTACK_LIGHTSPEED_IMAGE_URL_DEFAULT value: quay.io/openstack-lightspeed/rag-content:os-docs-2026.1-ogx - name: RELATED_IMAGE_LCORE_IMAGE_URL_DEFAULT - value: quay.io/lightspeed-core/lightspeed-stack:latest + value: quay.io/lightspeed-core/lightspeed-stack:dev-latest - name: RELATED_IMAGE_EXPORTER_IMAGE_URL_DEFAULT value: quay.io/lightspeed-core/lightspeed-to-dataverse-exporter:latest - name: RELATED_IMAGE_POSTGRES_IMAGE_URL_DEFAULT diff --git a/hack/env.sh b/hack/env.sh index 007a16b..61f5646 100644 --- a/hack/env.sh +++ b/hack/env.sh @@ -1,5 +1,5 @@ #!/bin/bash -export RELATED_IMAGE_LCORE_IMAGE_URL_DEFAULT="quay.io/lightspeed-core/lightspeed-stack:latest" +export RELATED_IMAGE_LCORE_IMAGE_URL_DEFAULT="quay.io/lightspeed-core/lightspeed-stack:dev-latest" export RELATED_IMAGE_EXPORTER_IMAGE_URL_DEFAULT="quay.io/lightspeed-core/lightspeed-to-dataverse-exporter:latest" export RELATED_IMAGE_POSTGRES_IMAGE_URL_DEFAULT="registry.redhat.io/rhel9/postgresql-16:latest" # TODO(lpiwowar): Replace this with a stable (non-alpha) image version once From 054676271637bf0f1d779b13442b7832471b0df9 Mon Sep 17 00:00:00 2001 From: Gorka Eguileor Date: Tue, 4 Aug 2026 12:59:20 +0200 Subject: [PATCH 2/8] Revert "Fix asyncpg event loop bug with startup wrapper monkey-patch" This reverts commit 52e77fb023db91ef9e6ac9b792298d7be25463f5. --- .../assets/llama_startup_wrapper.py | 44 ------------------- internal/controller/constants.go | 11 ----- internal/controller/lcore_deployment.go | 7 +-- internal/controller/lcore_reconciler.go | 1 - .../assert-openstack-lightspeed-instance.yaml | 3 -- .../08-assert-openstacklightspeed-update.yaml | 3 -- 6 files changed, 1 insertion(+), 68 deletions(-) delete mode 100644 internal/controller/assets/llama_startup_wrapper.py diff --git a/internal/controller/assets/llama_startup_wrapper.py b/internal/controller/assets/llama_startup_wrapper.py deleted file mode 100644 index 8db962d..0000000 --- a/internal/controller/assets/llama_startup_wrapper.py +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env python3 -# Workaround for asyncpg event loop bug (llama-stack #5978). -# Monkey-patches StackApp to reset SQL engines after temp event loop init. -# Remove when the container image includes the upstream fix (PR #5837). - -import gc -import sys - -import llama_stack.core.server.server as server_mod -from llama_stack.core.storage.sqlstore.sqlalchemy_sqlstore import SqlAlchemySqlStoreImpl -from sqlalchemy.ext.asyncio import async_sessionmaker - -_orig_init = server_mod.StackApp.__init__ - - -class SessionMaker: - """Recreates the SQLAlchemy engine and session on the current event loop.""" - - def __init__(self, store): - self._store = store - self._maker = None - - def __call__(self): - if self._maker is None: - self._store._engine = self._store.create_engine() - self._maker = async_sessionmaker(self._store._engine) - self._store.async_session = self._maker - return self._maker() - - -def _patched_init(self, config, *args, **kwargs): - _orig_init(self, config, *args, **kwargs) - for obj in gc.get_objects(): - if isinstance(obj, SqlAlchemySqlStoreImpl): - obj._engine = None - obj.async_session = SessionMaker(obj) - - -server_mod.StackApp.__init__ = _patched_init - -from llama_stack.cli.llama import main # noqa: E402 - -sys.argv[0] = "llama" -main() diff --git a/internal/controller/constants.go b/internal/controller/constants.go index 1bdce76..bf71001 100644 --- a/internal/controller/constants.go +++ b/internal/controller/constants.go @@ -314,10 +314,6 @@ const ( // script is stored in the ConfigMap containing vector database init scripts. VectorDBBuildScriptKey = "vector_database_build.py" - // LlamaStartupWrapperKey is the ConfigMap key for the startup wrapper script - // that monkey-patches the asyncpg event loop bug fix. Remove with PR #5837 backport. - LlamaStartupWrapperKey = "llama_startup_wrapper.py" // #nosec G101 -- ConfigMap key, not a credential - // -- Resource Version Annotation -------------------------------------------- // These constants define annotation keys used to track the resource versions of specific ConfigMaps. @@ -449,13 +445,6 @@ var vectorDatabaseCollectScript string //go:embed assets/vector_database_build.py var vectorDatabaseBuildScript string -// llamaStartupWrapperScript is a Python monkey-patch that fixes the asyncpg -// event loop bug (ogx-ai/ogx#5978) by resetting SQL engines after StackApp -// initialization. Remove when the container image includes upstream PR #5837. -// -//go:embed assets/llama_startup_wrapper.py -var llamaStartupWrapperScript string - //go:embed assets/console_nginx.conf.tmpl var consoleNginxConfigTemplate string diff --git a/internal/controller/lcore_deployment.go b/internal/controller/lcore_deployment.go index 365bace..439a90d 100644 --- a/internal/controller/lcore_deployment.go +++ b/internal/controller/lcore_deployment.go @@ -63,16 +63,11 @@ func buildLCorePodTemplateSpec(ctx context.Context, h *common_helper.Helper, ins llamaStackMounts := []corev1.VolumeMount{} llamaStackMounts = append(llamaStackMounts, sharedMounts...) llamaStackMounts = append(llamaStackMounts, llamaCacheMounts...) - llamaStackMounts = append(llamaStackMounts, corev1.VolumeMount{ - Name: VectorDBScriptsVolumeName, - MountPath: VectorDBScriptsMountPath, - ReadOnly: true, - }) llamaStackContainer := corev1.Container{ Name: "llama-stack", Image: apiv1beta1.OpenStackLightspeedDefaultValues.LCoreImageURL, - Command: []string{"python3", VectorDBScriptsMountPath + "/" + LlamaStartupWrapperKey, "stack", "run", VectorDBVolumeOGXConfigPath}, + Command: []string{"llama", "stack", "run", VectorDBVolumeOGXConfigPath}, Ports: []corev1.ContainerPort{{Name: "llama-stack", ContainerPort: LlamaStackContainerPort}}, VolumeMounts: llamaStackMounts, Env: llamaEnvVars, diff --git a/internal/controller/lcore_reconciler.go b/internal/controller/lcore_reconciler.go index ecc25a8..d872b8a 100644 --- a/internal/controller/lcore_reconciler.go +++ b/internal/controller/lcore_reconciler.go @@ -297,7 +297,6 @@ func reconcileVectorDBScriptsConfigMap(ctx context.Context, h *common_helper.Hel cm.Data = map[string]string{ VectorDBCollectScriptKey: vectorDatabaseCollectScript, VectorDBBuildScriptKey: vectorDatabaseBuildScript, - LlamaStartupWrapperKey: llamaStartupWrapperScript, } return controllerutil.SetControllerReference(h.GetBeforeObject(), cm, h.GetScheme()) diff --git a/test/kuttl/common/openstack-lightspeed-instance/assert-openstack-lightspeed-instance.yaml b/test/kuttl/common/openstack-lightspeed-instance/assert-openstack-lightspeed-instance.yaml index 2a9da3b..81fb6f0 100644 --- a/test/kuttl/common/openstack-lightspeed-instance/assert-openstack-lightspeed-instance.yaml +++ b/test/kuttl/common/openstack-lightspeed-instance/assert-openstack-lightspeed-instance.yaml @@ -263,9 +263,6 @@ spec: mountPath: /vector-db-discovered-values - name: llama-cache mountPath: /tmp/llama-stack - - name: vector-db-scripts - mountPath: /scripts - readOnly: true - name: lightspeed-service-api resources: requests: 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 265ac9c..014b1bf 100644 --- a/test/kuttl/tests/update-openstacklightspeed/08-assert-openstacklightspeed-update.yaml +++ b/test/kuttl/tests/update-openstacklightspeed/08-assert-openstacklightspeed-update.yaml @@ -158,9 +158,6 @@ spec: mountPath: /vector-db-discovered-values - name: llama-cache mountPath: /tmp/llama-stack - - name: vector-db-scripts - mountPath: /scripts - readOnly: true - name: lightspeed-service-api resources: requests: From 97456e35bf9d60a8404c8c6d78af3fa34ee70be6 Mon Sep 17 00:00:00 2001 From: Gorka Eguileor Date: Wed, 12 Aug 2026 17:52:44 +0200 Subject: [PATCH 3/8] Support lcore v0.7.0 Lightspeed-stack version 0.7.0 updates it's llama-stack dependency version to ogx version 1.0.2 [1] in commit 6e5a4e6aed30cc6fa430679746ea17659468ff7e, which breaks us because there have been many changes in the llama-stack/OGX configuration file. Changes that breaks us, that this commit fixes, and the commit hash where they were introduced in the OGX project: - Changed `llama stack run` with `ogx run` [2162e860568132cfe13f4d1e7d5466d9882ba3cf] - Replaced `rag-runtime` with `file-search` [f979c4b00219de2f93e3f60f655f7e5e2cf51d9f] - Replaced `builtin::rag` to `builtin::file_search` [f979c4b00219de2f93e3f60f655f7e5e2cf51d9f] - Replaced `agents` with `responses` [f30e4863096b94eed89f08c5438f1ad9a9068a48] - Replaced `meta-reference` with `builtin` [236a23076ded819004c59f3a7fc67ae5a83cf195] - Removed `safety` api [5ad4753869a145bb0b618a1d3cf6969808cb4435] - Update the DB name from `llamastack` to `ogx` [1]: https://github.com/lightspeed-core/lightspeed-stack/pull/2293 --- .../assets/vector_database_build.py | 8 +++- internal/controller/constants.go | 2 +- internal/controller/lcore_deployment.go | 2 +- internal/controller/llama_stack_config.go | 39 +++++---------- .../expected-configs/ogx_config-update.yaml | 48 ++++++++----------- .../common/expected-configs/ogx_config.yaml | 48 ++++++++----------- 6 files changed, 63 insertions(+), 84 deletions(-) diff --git a/internal/controller/assets/vector_database_build.py b/internal/controller/assets/vector_database_build.py index d319a8c..113570b 100644 --- a/internal/controller/assets/vector_database_build.py +++ b/internal/controller/assets/vector_database_build.py @@ -185,7 +185,13 @@ def ogx_process(ogx_config_source_path: Path, ogx_config_target: dict[str, Any]) add_unique(tgt_models, src_model, "model_id") # Populate registered_resources.vector_stores - embedding_model = f"{src_model['provider_id']}/{embedding_model_dir}" + # OGX 1.0.2+ uses provider_id/model_id as the model identifier + model_id = src_model["model_id"] + provider_id = src_model["provider_id"] + if model_id.startswith(f"{provider_id}/"): + embedding_model = model_id + else: + embedding_model = f"{provider_id}/{model_id}" src_vstore = ogx_config_source["registered_resources"]["vector_stores"][0].copy() src_vstore["embedding_model"] = embedding_model tgt_vstores = ogx_config_target["registered_resources"]["vector_stores"] diff --git a/internal/controller/constants.go b/internal/controller/constants.go index bf71001..2b71f21 100644 --- a/internal/controller/constants.go +++ b/internal/controller/constants.go @@ -62,7 +62,7 @@ const ( PostgresNetworkPolicyName = "lightspeed-postgres-server" PostgresServicePort = int32(5432) PostgresLightspeedStackDbName = "lightspeed-stack" - PostgresLlamaStackDbName = "llamastack" + PostgresLlamaStackDbName = "ogx" PostgresSharedBuffers = "256MB" PostgresMaxConnections = 100 OpenStackLightspeedComponentPasswordFileName = "password" diff --git a/internal/controller/lcore_deployment.go b/internal/controller/lcore_deployment.go index 439a90d..b02e5bb 100644 --- a/internal/controller/lcore_deployment.go +++ b/internal/controller/lcore_deployment.go @@ -67,7 +67,7 @@ func buildLCorePodTemplateSpec(ctx context.Context, h *common_helper.Helper, ins llamaStackContainer := corev1.Container{ Name: "llama-stack", Image: apiv1beta1.OpenStackLightspeedDefaultValues.LCoreImageURL, - Command: []string{"llama", "stack", "run", VectorDBVolumeOGXConfigPath}, + Command: []string{"ogx", "run", VectorDBVolumeOGXConfigPath}, Ports: []corev1.ContainerPort{{Name: "llama-stack", ContainerPort: LlamaStackContainerPort}}, VolumeMounts: llamaStackMounts, Env: llamaEnvVars, diff --git a/internal/controller/llama_stack_config.go b/internal/controller/llama_stack_config.go index e5339c3..541740e 100644 --- a/internal/controller/llama_stack_config.go +++ b/internal/controller/llama_stack_config.go @@ -34,13 +34,12 @@ func buildLlamaStackCoreConfig(_ *common_helper.Helper, _ *apiv1beta1.OpenStackL // Note: Does NOT affect PostgreSQL database name (llama-stack uses hardcoded "llamastack") "image_name": "openstack-lightspeed-configuration", - // Minimal APIs for RAG + MCP: agents (for MCP), files, inference, safety (required by agents), + // Minimal APIs for RAG + MCP: responeses (for MCP), files, inference, // telemetry, tool_runtime, vector_io. "apis": []string{ - "agents", "files", "inference", - "safety", + "responses", "tool_runtime", "vector_io", }, @@ -78,11 +77,11 @@ func buildLlamaStackFileProviders(_ *common_helper.Helper, _ *apiv1beta1.OpenSta } } -func buildLlamaStackAgentProviders(_ *common_helper.Helper, _ *apiv1beta1.OpenStackLightspeed) []interface{} { +func buildLlamaStackResponsesProviders(_ *common_helper.Helper, _ *apiv1beta1.OpenStackLightspeed) []interface{} { return []interface{}{ map[string]interface{}{ - "provider_id": "meta-reference", - "provider_type": "inline::meta-reference", + "provider_id": "builtin", + "provider_type": "inline::builtin", "config": map[string]interface{}{ "persistence": map[string]interface{}{ "agent_state": map[string]interface{}{ @@ -207,19 +206,6 @@ func buildLlamaStackInferenceProviders(_ context.Context, _ *common_helper.Helpe return providers, nil } -// Safety API - Required by agents provider (for MCP) -func buildLlamaStackSafety(_ *common_helper.Helper, _ *apiv1beta1.OpenStackLightspeed) []interface{} { - return []interface{}{ - map[string]interface{}{ - "provider_id": "llama-guard", - "provider_type": "inline::llama-guard", - "config": map[string]interface{}{ - "excluded_categories": []interface{}{}, - }, - }, - } -} - func buildLlamaStackToolRuntime(_ *common_helper.Helper, _ *apiv1beta1.OpenStackLightspeed) []interface{} { return []interface{}{ map[string]interface{}{ @@ -228,8 +214,8 @@ func buildLlamaStackToolRuntime(_ *common_helper.Helper, _ *apiv1beta1.OpenStack "config": map[string]interface{}{}, }, map[string]interface{}{ - "provider_id": "rag-runtime", - "provider_type": "inline::rag-runtime", + "provider_id": "file-search", + "provider_type": "inline::file-search", "config": map[string]interface{}{}, }, } @@ -272,7 +258,7 @@ func buildOKPVectorIOProvider(chunkFilterQuery string) map[string]interface{} { "content_field": "${env.SOLR_CONTENT_FIELD:=chunk}", "vector_field": "${env.SOLR_VECTOR_FIELD:=chunk_vector}", "embedding_dimension": "${env.SOLR_EMBEDDING_DIM:=384}", - "embedding_model": "sentence-transformers/" + OKPEmbeddingModelMountPath, + "embedding_model": "sentence-transformers/solr_embedding", "persistence": map[string]interface{}{ "backend": "kv_default", "namespace": "portal-rag", @@ -394,7 +380,7 @@ func buildLlamaStackVectorStores(_ *common_helper.Helper, _ *apiv1beta1.OpenStac "vector_store_id": "portal-rag", "provider_id": "okp_solr", "embedding_dimension": 384, - "embedding_model": "sentence-transformers/" + OKPEmbeddingModelMountPath, + "embedding_model": "sentence-transformers/solr_embedding", }, } } @@ -402,8 +388,8 @@ func buildLlamaStackVectorStores(_ *common_helper.Helper, _ *apiv1beta1.OpenStac func buildLlamaStackToolGroups(_ *common_helper.Helper, _ *apiv1beta1.OpenStackLightspeed) []interface{} { return []interface{}{ map[string]interface{}{ - "toolgroup_id": "builtin::rag", - "provider_id": "rag-runtime", + "toolgroup_id": "builtin::file_search", + "provider_id": "file-search", }, } } @@ -425,9 +411,8 @@ func buildLlamaStackYAML(ctx context.Context, h *common_helper.Helper, instance // Build providers map - only include providers for enabled APIs config["providers"] = map[string]interface{}{ "files": buildLlamaStackFileProviders(h, instance), - "agents": buildLlamaStackAgentProviders(h, instance), + "responses": buildLlamaStackResponsesProviders(h, instance), "inference": inferenceProviders, - "safety": buildLlamaStackSafety(h, instance), "tool_runtime": buildLlamaStackToolRuntime(h, instance), "vector_io": buildLlamaStackVectorIO(h, instance, okpChunkFilterQuery), } diff --git a/test/kuttl/common/expected-configs/ogx_config-update.yaml b/test/kuttl/common/expected-configs/ogx_config-update.yaml index 3df891a..0b887db 100644 --- a/test/kuttl/common/expected-configs/ogx_config-update.yaml +++ b/test/kuttl/common/expected-configs/ogx_config-update.yaml @@ -1,8 +1,7 @@ apis: -- agents - files - inference -- safety +- responses - tool_runtime - vector_io benchmarks: [] @@ -19,19 +18,6 @@ metadata_store: namespace: null type: sqlite providers: - agents: - - config: - persistence: - agent_state: - backend: kv_default - namespace: agent_state - table_name: agent_state - responses: - backend: sql_default - namespace: agent_responses - table_name: agent_responses - provider_id: meta-reference - provider_type: inline::meta-reference files: - config: metadata_store: @@ -50,18 +36,26 @@ providers: base_url: http://mock-llm-api-server-pod-UPDATE:8000/v1 provider_id: openstack-lightspeed-provider provider_type: remote::vllm - safety: + responses: - config: - excluded_categories: [] - provider_id: llama-guard - provider_type: inline::llama-guard + persistence: + agent_state: + backend: kv_default + namespace: agent_state + table_name: agent_state + responses: + backend: sql_default + namespace: agent_responses + table_name: agent_responses + provider_id: builtin + provider_type: inline::builtin tool_runtime: - config: {} provider_id: model-context-protocol provider_type: remote::model-context-protocol - config: {} - provider_id: rag-runtime - provider_type: inline::rag-runtime + provider_id: file-search + provider_type: inline::file-search vector_io: - config: kvstore: @@ -88,7 +82,7 @@ providers: collection_name: ${env.SOLR_COLLECTION:=portal-rag} content_field: ${env.SOLR_CONTENT_FIELD:=chunk} embedding_dimension: ${env.SOLR_EMBEDDING_DIM:=384} - embedding_model: sentence-transformers//vector-db-discovered-values/okp_embeddings_model + embedding_model: sentence-transformers/solr_embedding persistence: backend: kv_default namespace: portal-rag @@ -123,15 +117,15 @@ registered_resources: provider_model_id: ${env.VECTOR_DB_DATA_PATH}/UUID/embeddings_model model_type: embedding tool_groups: - - provider_id: rag-runtime - toolgroup_id: builtin::rag + - provider_id: file-search + toolgroup_id: builtin::file_search vector_stores: - embedding_dimension: 384 - embedding_model: sentence-transformers//vector-db-discovered-values/okp_embeddings_model + embedding_model: sentence-transformers/solr_embedding provider_id: okp_solr vector_store_id: portal-rag - embedding_dimension: 768 - embedding_model: sentence-transformers/${env.VECTOR_DB_DATA_PATH}/UUID/embeddings_model + embedding_model: sentence-transformers/all-mpnet-base-v2 provider_id: os-docs-2026.1-ogx vector_store_id: vs_UUID scoring_fns: [] @@ -149,7 +143,7 @@ storage: db_path: /tmp/llama-stack/kv_store.db type: kv_sqlite postgres_backend: - db: llamastack + db: ogx host: lightspeed-postgres-server.openstack-lightspeed.svc password: ${env.POSTGRESQL_PASSWORD} port: 5432 diff --git a/test/kuttl/common/expected-configs/ogx_config.yaml b/test/kuttl/common/expected-configs/ogx_config.yaml index e5dac1a..6b7e82a 100644 --- a/test/kuttl/common/expected-configs/ogx_config.yaml +++ b/test/kuttl/common/expected-configs/ogx_config.yaml @@ -1,8 +1,7 @@ apis: -- agents - files - inference -- safety +- responses - tool_runtime - vector_io benchmarks: [] @@ -19,19 +18,6 @@ metadata_store: namespace: null type: sqlite providers: - agents: - - config: - persistence: - agent_state: - backend: kv_default - namespace: agent_state - table_name: agent_state - responses: - backend: sql_default - namespace: agent_responses - table_name: agent_responses - provider_id: meta-reference - provider_type: inline::meta-reference files: - config: metadata_store: @@ -50,18 +36,26 @@ providers: base_url: http://mock-llm-api-server-pod:8000/v1 provider_id: openstack-lightspeed-provider provider_type: remote::openai - safety: + responses: - config: - excluded_categories: [] - provider_id: llama-guard - provider_type: inline::llama-guard + persistence: + agent_state: + backend: kv_default + namespace: agent_state + table_name: agent_state + responses: + backend: sql_default + namespace: agent_responses + table_name: agent_responses + provider_id: builtin + provider_type: inline::builtin tool_runtime: - config: {} provider_id: model-context-protocol provider_type: remote::model-context-protocol - config: {} - provider_id: rag-runtime - provider_type: inline::rag-runtime + provider_id: file-search + provider_type: inline::file-search vector_io: - config: kvstore: @@ -88,7 +82,7 @@ providers: collection_name: ${env.SOLR_COLLECTION:=portal-rag} content_field: ${env.SOLR_CONTENT_FIELD:=chunk} embedding_dimension: ${env.SOLR_EMBEDDING_DIM:=384} - embedding_model: sentence-transformers//vector-db-discovered-values/okp_embeddings_model + embedding_model: sentence-transformers/solr_embedding persistence: backend: kv_default namespace: portal-rag @@ -123,15 +117,15 @@ registered_resources: provider_model_id: ${env.VECTOR_DB_DATA_PATH}/UUID/embeddings_model model_type: embedding tool_groups: - - provider_id: rag-runtime - toolgroup_id: builtin::rag + - provider_id: file-search + toolgroup_id: builtin::file_search vector_stores: - embedding_dimension: 384 - embedding_model: sentence-transformers//vector-db-discovered-values/okp_embeddings_model + embedding_model: sentence-transformers/solr_embedding provider_id: okp_solr vector_store_id: portal-rag - embedding_dimension: 768 - embedding_model: sentence-transformers/${env.VECTOR_DB_DATA_PATH}/UUID/embeddings_model + embedding_model: sentence-transformers/all-mpnet-base-v2 provider_id: os-docs-2026.1-ogx vector_store_id: vs_UUID scoring_fns: [] @@ -149,7 +143,7 @@ storage: db_path: /tmp/llama-stack/kv_store.db type: kv_sqlite postgres_backend: - db: llamastack + db: ogx host: lightspeed-postgres-server.openstack-lightspeed.svc password: ${env.POSTGRESQL_PASSWORD} port: 5432 From 96a4705b6c89093c7304eb2c260cff981f65de4e Mon Sep 17 00:00:00 2001 From: Gorka Eguileor Date: Wed, 12 Aug 2026 17:46:43 +0200 Subject: [PATCH 4/8] Rename things from llama stack to ogx We have references to llama stack in directory names, resources, containers, etc., but it's no longer llama stack, it's ogx now. Change most of these references to ogx. --- .../controller/assets/postgres_bootstrap.sh | 4 +-- internal/controller/constants.go | 8 +++--- internal/controller/lcore_config.go | 1 + internal/controller/lcore_deployment.go | 26 ++++++++----------- internal/controller/llama_stack_config.go | 14 +++++----- .../expected-configs/ogx_config-update.yaml | 8 +++--- .../common/expected-configs/ogx_config.yaml | 8 +++--- .../expected-configs/validate-config.sh | 2 +- .../assert-openstack-lightspeed-instance.yaml | 14 +++++----- .../errors-openstack-lightspeed-instance.yaml | 2 +- .../03-assert-rhoso-mcps-instance.yaml | 2 +- .../08-assert-openstacklightspeed-update.yaml | 14 +++++----- .../11-assert-configmaps-update.yaml | 2 +- 13 files changed, 49 insertions(+), 56 deletions(-) diff --git a/internal/controller/assets/postgres_bootstrap.sh b/internal/controller/assets/postgres_bootstrap.sh index 4d54773..d0be2f8 100644 --- a/internal/controller/assets/postgres_bootstrap.sh +++ b/internal/controller/assets/postgres_bootstrap.sh @@ -1,10 +1,10 @@ #!/bin/bash -# This script prepares databases for lightspeed-stack and llama-stack (OGX) with +# This script prepares databases for lightspeed-stack and OGX (old llama-stack) with # postgres_bootstrap.sql. # # Note: # - lightspeed-stack database: Auto-created by container image via POSTGRESQL_DATABASE. -# - llama-stack database: Explicitly created by this script via POSTGRESQL_LLAMA_STACK_DATABASE. +# - ogx database: Explicitly created by this script via POSTGRESQL_LLAMA_STACK_DATABASE. # - POSTGRESQL_ADMIN_PASSWORD is intentionally not set. The postgres superuser has no password # by default, which restricts it to local connections only — a deliberate security improvement. # Setting POSTGRESQL_ADMIN_PASSWORD would enable remote login for the postgres account. diff --git a/internal/controller/constants.go b/internal/controller/constants.go index 2b71f21..1b5d564 100644 --- a/internal/controller/constants.go +++ b/internal/controller/constants.go @@ -81,8 +81,8 @@ const ( PostgresVarRunVolumeMountPath = "/var/run/postgresql" // PostgresSQLUsername is non-admin user that should be used by lightspeed-stack and - // llama-stack (OGX) to access the PostgreSQL database. This user gets created by the - // PostgreSQL container by setting the POSTGRESQL_USER and POSTGRESQL_PASSWORD environment + // (OGX) to access the PostgreSQL database. This user gets created by the PostgreSQL + // container by setting the POSTGRESQL_USER and POSTGRESQL_PASSWORD environment // variable. PostgresSQLUsername = "lightspeed-app-user" @@ -113,7 +113,7 @@ const ( // -- LCore specific --------------------------------------------------------- LlamaStackContainerPort = int32(8321) - LlamaStackConfigCmName = "llama-stack-config" + LlamaStackConfigCmName = "ogx-config" LCoreConfigCmName = "lightspeed-stack-config" LCoreDeploymentName = "lightspeed-stack-deployment" LCoreConfigMountPath = "/app-root/lightspeed-stack.yaml" @@ -122,7 +122,7 @@ const ( // --------------------------------------------------------------------------- - // -- Health probe settings for the llama-stack/OGX container. --------------- + // -- Health probe settings for the stack/OGX container. --------------------- // The startup probe allows up to 30 failures (300s) for the slow initialization, // while liveness and readiness probes use a tighter threshold of 3 failures. diff --git a/internal/controller/lcore_config.go b/internal/controller/lcore_config.go index 951c923..ebb01fc 100644 --- a/internal/controller/lcore_config.go +++ b/internal/controller/lcore_config.go @@ -275,6 +275,7 @@ func buildLCoreConfigYAML(ctx context.Context, h *common_helper.Helper, instance config := map[string]interface{}{ "name": "Lightspeed Core Service (LCS)", "service": buildLCoreServiceConfig(h, instance), + // This has not been renamed in the LCORE config to "ogx" "llama_stack": buildLCoreLlamaStackConfig(), "user_data_collection": buildLCoreUserDataCollectionConfig(h, instance), "authentication": buildLCoreAuthenticationConfig(h, instance), diff --git a/internal/controller/lcore_deployment.go b/internal/controller/lcore_deployment.go index b02e5bb..d80d229 100644 --- a/internal/controller/lcore_deployment.go +++ b/internal/controller/lcore_deployment.go @@ -55,7 +55,7 @@ func buildLCorePodTemplateSpec(ctx context.Context, h *common_helper.Helper, ins // Build env vars llamaEnvVars, err := buildLlamaStackEnvVars(ctx, h, instance) if err != nil { - return corev1.PodTemplateSpec{}, fmt.Errorf("failed to build llama-stack env vars: %w", err) + return corev1.PodTemplateSpec{}, fmt.Errorf("failed to build ogx env vars: %w", err) } lsEnvVars := buildLightspeedStackEnvVars(instance) @@ -65,10 +65,10 @@ func buildLCorePodTemplateSpec(ctx context.Context, h *common_helper.Helper, ins llamaStackMounts = append(llamaStackMounts, llamaCacheMounts...) llamaStackContainer := corev1.Container{ - Name: "llama-stack", + Name: "ogx", Image: apiv1beta1.OpenStackLightspeedDefaultValues.LCoreImageURL, Command: []string{"ogx", "run", VectorDBVolumeOGXConfigPath}, - Ports: []corev1.ContainerPort{{Name: "llama-stack", ContainerPort: LlamaStackContainerPort}}, + Ports: []corev1.ContainerPort{{Name: "ogx", ContainerPort: LlamaStackContainerPort}}, VolumeMounts: llamaStackMounts, Env: llamaEnvVars, StartupProbe: &corev1.Probe{ @@ -408,17 +408,17 @@ func addTLSVolumesAndMounts(volumes *[]corev1.Volume, mounts *[]corev1.VolumeMou }) } -// addLlamaCacheVolumesAndMounts adds an emptydir volume for llama-stack cache. +// addLlamaCacheVolumesAndMounts adds an emptydir volume for ogx cache. func addLlamaCacheVolumesAndMounts(volumes *[]corev1.Volume, mounts *[]corev1.VolumeMount) { *volumes = append(*volumes, corev1.Volume{ - Name: "llama-cache", + Name: "ogx-cache", VolumeSource: corev1.VolumeSource{ EmptyDir: &corev1.EmptyDirVolumeSource{}, }, }) *mounts = append(*mounts, corev1.VolumeMount{ - Name: "llama-cache", - MountPath: "/tmp/llama-stack", + Name: "ogx-cache", + MountPath: "/tmp/ogx", }) } @@ -521,7 +521,7 @@ func addCABundleVolumesAndMounts(volumes *[]corev1.Volume, mounts *[]corev1.Volu }) } -// buildLlamaStackEnvVars builds environment variables for llama-stack, +// buildLlamaStackEnvVars builds environment variables for ogx // primarily provider API keys read from Kubernetes secrets. func buildLlamaStackEnvVars(ctx context.Context, h *common_helper.Helper, instance *apiv1beta1.OpenStackLightspeed) ([]corev1.EnvVar, error) { envVars := []corev1.EnvVar{} @@ -623,7 +623,7 @@ func buildLlamaStackEnvVars(ctx context.Context, h *common_helper.Helper, instan } // Postgres credentials for ${env.POSTGRESQL_PASSWORD} and ${env.POSTGRESQL_USER} - // substitution in llama-stack config + // substitution in ogx config envVars = append(envVars, buildPostgresCredsEnvVars()...) // PostgreSQL SSL configuration for OGX (llama-stack). @@ -639,12 +639,8 @@ func buildLlamaStackEnvVars(ctx context.Context, h *common_helper.Helper, instan Value: CABundleMountPath, }) - // Logging configuration - set both for compatibility with llama-stack and OGX + // Logging configuration - only for OGX, incompatible with llama-stack ogxLogLevel := getOGXLogLevel(instance) - envVars = append(envVars, corev1.EnvVar{ - Name: "LLAMA_STACK_LOGGING", - Value: ogxLogLevel, - }) envVars = append(envVars, corev1.EnvVar{ Name: "OGX_LOGGING", Value: ogxLogLevel, @@ -756,7 +752,7 @@ func buildLightspeedStackReadinessProbe() *corev1.Probe { } } -// getOGXLogLevel returns the log level for OGX/llama-stack container. +// getOGXLogLevel returns the log level for OGX container. // Supports either standard levels (INFO, DEBUG, WARNING, ERROR, CRITICAL) or fine-grained control. // Examples: "INFO" -> "all=info", "DEBUG" -> "all=debug", "core=debug,providers=info" -> "core=debug,providers=info" // Defaults to "all=info" if not specified. diff --git a/internal/controller/llama_stack_config.go b/internal/controller/llama_stack_config.go index 541740e..4f09f27 100644 --- a/internal/controller/llama_stack_config.go +++ b/internal/controller/llama_stack_config.go @@ -30,8 +30,8 @@ func buildLlamaStackCoreConfig(_ *common_helper.Helper, _ *apiv1beta1.OpenStackL return map[string]interface{}{ "version": "2", - // image_name is a semantic identifier for the llama-stack configuration - // Note: Does NOT affect PostgreSQL database name (llama-stack uses hardcoded "llamastack") + // image_name is a semantic identifier for the ogx configuration + // Note: Does NOT affect PostgreSQL database name (ogx uses hardcoded value) "image_name": "openstack-lightspeed-configuration", // Minimal APIs for RAG + MCP: responeses (for MCP), files, inference, @@ -53,7 +53,7 @@ func buildLlamaStackCoreConfig(_ *common_helper.Helper, _ *apiv1beta1.OpenStackL }, "logging": nil, "metadata_store": map[string]interface{}{ - "db_path": "/tmp/llama-stack/registry.db", + "db_path": "/tmp/ogx/registry.db", "namespace": nil, "type": "sqlite", }, @@ -66,7 +66,7 @@ func buildLlamaStackFileProviders(_ *common_helper.Helper, _ *apiv1beta1.OpenSta "provider_id": "localfs", "provider_type": "inline::localfs", "config": map[string]interface{}{ - "storage_dir": "/tmp/llama-stack-files", + "storage_dir": "/tmp/ogx-files", "metadata_store": map[string]interface{}{ "backend": "sql_default", "namespace": "files_metadata", @@ -297,11 +297,11 @@ func buildLlamaStackStorage(_ *common_helper.Helper, instance *apiv1beta1.OpenSt backends := map[string]interface{}{ "sql_default": map[string]interface{}{ "type": "sql_sqlite", - "db_path": "/tmp/llama-stack/sql_store.db", + "db_path": "/tmp/ogx/sql_store.db", }, "kv_default": map[string]interface{}{ "type": "kv_sqlite", - "db_path": "/tmp/llama-stack/kv_store.db", + "db_path": "/tmp/ogx/kv_store.db", }, "postgres_backend": map[string]interface{}{ "type": "sql_postgres", @@ -324,7 +324,7 @@ func buildLlamaStackStorage(_ *common_helper.Helper, instance *apiv1beta1.OpenSt "backend": "sql_default", }, "conversations": map[string]interface{}{ - "table_name": "openai_conversations", // Required by config schema but ignored - llama-stack uses hardcoded names + "table_name": "openai_conversations", // Required by config schema but ignored - ogx uses hardcoded names "backend": "postgres_backend", }, } diff --git a/test/kuttl/common/expected-configs/ogx_config-update.yaml b/test/kuttl/common/expected-configs/ogx_config-update.yaml index 0b887db..576bb2f 100644 --- a/test/kuttl/common/expected-configs/ogx_config-update.yaml +++ b/test/kuttl/common/expected-configs/ogx_config-update.yaml @@ -14,7 +14,7 @@ inference_store: type: sqlite logging: null metadata_store: - db_path: /tmp/llama-stack/registry.db + db_path: /tmp/ogx/registry.db namespace: null type: sqlite providers: @@ -24,7 +24,7 @@ providers: backend: sql_default namespace: files_metadata table_name: files_metadata - storage_dir: /tmp/llama-stack-files + storage_dir: /tmp/ogx-files provider_id: localfs provider_type: inline::localfs inference: @@ -140,7 +140,7 @@ server: storage: backends: kv_default: - db_path: /tmp/llama-stack/kv_store.db + db_path: /tmp/ogx/kv_store.db type: kv_sqlite postgres_backend: db: ogx @@ -150,7 +150,7 @@ storage: type: sql_postgres user: ${env.POSTGRESQL_USER} sql_default: - db_path: /tmp/llama-stack/sql_store.db + db_path: /tmp/ogx/sql_store.db type: sql_sqlite kv_rag_UUID_os_product_docs: type: kv_sqlite diff --git a/test/kuttl/common/expected-configs/ogx_config.yaml b/test/kuttl/common/expected-configs/ogx_config.yaml index 6b7e82a..e8eb099 100644 --- a/test/kuttl/common/expected-configs/ogx_config.yaml +++ b/test/kuttl/common/expected-configs/ogx_config.yaml @@ -14,7 +14,7 @@ inference_store: type: sqlite logging: null metadata_store: - db_path: /tmp/llama-stack/registry.db + db_path: /tmp/ogx/registry.db namespace: null type: sqlite providers: @@ -24,7 +24,7 @@ providers: backend: sql_default namespace: files_metadata table_name: files_metadata - storage_dir: /tmp/llama-stack-files + storage_dir: /tmp/ogx-files provider_id: localfs provider_type: inline::localfs inference: @@ -140,7 +140,7 @@ server: storage: backends: kv_default: - db_path: /tmp/llama-stack/kv_store.db + db_path: /tmp/ogx/kv_store.db type: kv_sqlite postgres_backend: db: ogx @@ -150,7 +150,7 @@ storage: type: sql_postgres user: ${env.POSTGRESQL_USER} sql_default: - db_path: /tmp/llama-stack/sql_store.db + db_path: /tmp/ogx/sql_store.db type: sql_sqlite kv_rag_UUID_os_product_docs: type: kv_sqlite diff --git a/test/kuttl/common/expected-configs/validate-config.sh b/test/kuttl/common/expected-configs/validate-config.sh index b0d9fdd..058ccb8 100755 --- a/test/kuttl/common/expected-configs/validate-config.sh +++ b/test/kuttl/common/expected-configs/validate-config.sh @@ -26,7 +26,7 @@ case "$CONFIG_TYPE" in POD_PATH="/vector-db-discovered-values/lightspeed-stack.yaml" ;; ogx_config) - CONTAINER="llama-stack" + CONTAINER="ogx" POD_PATH="/vector-db-discovered-values/ogx_config.yaml" ;; *) diff --git a/test/kuttl/common/openstack-lightspeed-instance/assert-openstack-lightspeed-instance.yaml b/test/kuttl/common/openstack-lightspeed-instance/assert-openstack-lightspeed-instance.yaml index 81fb6f0..9131073 100644 --- a/test/kuttl/common/openstack-lightspeed-instance/assert-openstack-lightspeed-instance.yaml +++ b/test/kuttl/common/openstack-lightspeed-instance/assert-openstack-lightspeed-instance.yaml @@ -179,7 +179,7 @@ subjects: apiVersion: v1 kind: ConfigMap metadata: - name: llama-stack-config + name: ogx-config namespace: openstack-lightspeed --- apiVersion: v1 @@ -218,7 +218,7 @@ spec: - name: vector-database-collect - name: vector-database-config-build containers: - - name: llama-stack + - name: ogx resources: requests: cpu: 500m @@ -246,8 +246,6 @@ spec: value: verify-full - name: PGSSLROOTCERT value: /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem - - name: LLAMA_STACK_LOGGING - value: all=debug - name: OGX_LOGGING value: all=debug - name: VECTOR_DB_DATA_PATH @@ -261,8 +259,8 @@ spec: readOnly: true - name: vector-db-discovered-values mountPath: /vector-db-discovered-values - - name: llama-cache - mountPath: /tmp/llama-stack + - name: ogx-cache + mountPath: /tmp/ogx - name: lightspeed-service-api resources: requests: @@ -321,7 +319,7 @@ spec: volumes: - name: ogx-config configMap: - name: llama-stack-config + name: ogx-config - name: lightspeed-stack-config configMap: name: lightspeed-stack-config @@ -333,7 +331,7 @@ spec: name: openstack-lightspeed-ca-bundle - name: vector-db-discovered-values emptyDir: {} - - name: llama-cache + - name: ogx-cache emptyDir: {} - name: ols-user-data emptyDir: {} diff --git a/test/kuttl/common/openstack-lightspeed-instance/errors-openstack-lightspeed-instance.yaml b/test/kuttl/common/openstack-lightspeed-instance/errors-openstack-lightspeed-instance.yaml index 723d9ca..29ed954 100644 --- a/test/kuttl/common/openstack-lightspeed-instance/errors-openstack-lightspeed-instance.yaml +++ b/test/kuttl/common/openstack-lightspeed-instance/errors-openstack-lightspeed-instance.yaml @@ -33,7 +33,7 @@ metadata: apiVersion: v1 kind: ConfigMap metadata: - name: llama-stack-config + name: ogx-config namespace: openstack-lightspeed --- apiVersion: v1 diff --git a/test/kuttl/tests/rhoso-mcps-configuration/03-assert-rhoso-mcps-instance.yaml b/test/kuttl/tests/rhoso-mcps-configuration/03-assert-rhoso-mcps-instance.yaml index c6e0ab6..6df2e37 100644 --- a/test/kuttl/tests/rhoso-mcps-configuration/03-assert-rhoso-mcps-instance.yaml +++ b/test/kuttl/tests/rhoso-mcps-configuration/03-assert-rhoso-mcps-instance.yaml @@ -13,7 +13,7 @@ spec: template: spec: containers: - - name: llama-stack + - name: ogx - name: lightspeed-service-api - name: lightspeed-to-dataverse-exporter - name: rhoso-mcps 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 014b1bf..2a4f446 100644 --- a/test/kuttl/tests/update-openstacklightspeed/08-assert-openstacklightspeed-update.yaml +++ b/test/kuttl/tests/update-openstacklightspeed/08-assert-openstacklightspeed-update.yaml @@ -83,7 +83,7 @@ metadata: apiVersion: v1 kind: ConfigMap metadata: - name: llama-stack-config + name: ogx-config namespace: openstack-lightspeed --- apiVersion: v1 @@ -111,7 +111,7 @@ spec: - name: vector-database-collect - name: vector-database-config-build containers: - - name: llama-stack + - name: ogx resources: requests: cpu: 500m @@ -141,8 +141,6 @@ spec: value: verify-full - name: PGSSLROOTCERT value: /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem - - name: LLAMA_STACK_LOGGING - value: core=debug,providers=info - name: OGX_LOGGING value: core=debug,providers=info - name: VECTOR_DB_DATA_PATH @@ -156,8 +154,8 @@ spec: readOnly: true - name: vector-db-discovered-values mountPath: /vector-db-discovered-values - - name: llama-cache - mountPath: /tmp/llama-stack + - name: ogx-cache + mountPath: /tmp/ogx - name: lightspeed-service-api resources: requests: @@ -194,7 +192,7 @@ spec: volumes: - name: ogx-config configMap: - name: llama-stack-config + name: ogx-config - name: lightspeed-stack-config configMap: name: lightspeed-stack-config @@ -206,7 +204,7 @@ spec: name: openstack-lightspeed-ca-bundle - name: vector-db-discovered-values emptyDir: {} - - name: llama-cache + - name: ogx-cache emptyDir: {} - name: tls-certs secret: diff --git a/test/kuttl/tests/update-openstacklightspeed/11-assert-configmaps-update.yaml b/test/kuttl/tests/update-openstacklightspeed/11-assert-configmaps-update.yaml index e028d6b..51e3326 100644 --- a/test/kuttl/tests/update-openstacklightspeed/11-assert-configmaps-update.yaml +++ b/test/kuttl/tests/update-openstacklightspeed/11-assert-configmaps-update.yaml @@ -7,7 +7,7 @@ apiVersion: v1 kind: ConfigMap metadata: - name: llama-stack-config + name: ogx-config namespace: openstack-lightspeed --- apiVersion: v1 From cdd1d61ecce52a7fec56e0be265fd34f58f5af54 Mon Sep 17 00:00:00 2001 From: Gorka Eguileor Date: Thu, 13 Aug 2026 17:25:01 +0200 Subject: [PATCH 5/8] Disable OpenTelemetry instrumentation Lightspeed-stack v0.7.0 introduced OTEL anonymization, since they called the anonymize_value() function unconditionally we get a ValueError exception. To avoid getting that exception we need to set either OTEL_ANONYMIZATION_SECRET or set OTEL_SDK_DISABLED to "true". Since our operator is already disabling telemetry in the OGX config (`telemetry: enabled: false`), we'll set `OTEL_SDK_DISABLED=true` on the lightspeed-stack container. --- internal/controller/lcore_deployment.go | 4 ++++ .../assert-openstack-lightspeed-instance.yaml | 2 ++ .../08-assert-openstacklightspeed-update.yaml | 2 ++ 3 files changed, 8 insertions(+) diff --git a/internal/controller/lcore_deployment.go b/internal/controller/lcore_deployment.go index d80d229..06e5fd8 100644 --- a/internal/controller/lcore_deployment.go +++ b/internal/controller/lcore_deployment.go @@ -700,6 +700,10 @@ func buildLightspeedStackEnvVars(instance *apiv1beta1.OpenStackLightspeed) []cor Name: "RH_SERVER_OKP", Value: fmt.Sprintf("http://%s.%s.svc:%d", OKPServiceName, instance.GetNamespace(), OKPServicePort), }) + envVars = append(envVars, corev1.EnvVar{ + Name: "OTEL_SDK_DISABLED", + Value: "true", + }) envVars = append(envVars, buildPostgresCredsEnvVars()...) return envVars } diff --git a/test/kuttl/common/openstack-lightspeed-instance/assert-openstack-lightspeed-instance.yaml b/test/kuttl/common/openstack-lightspeed-instance/assert-openstack-lightspeed-instance.yaml index 9131073..b153aea 100644 --- a/test/kuttl/common/openstack-lightspeed-instance/assert-openstack-lightspeed-instance.yaml +++ b/test/kuttl/common/openstack-lightspeed-instance/assert-openstack-lightspeed-instance.yaml @@ -274,6 +274,8 @@ spec: value: WARNING - name: RH_SERVER_OKP value: http://lightspeed-okp-server.openstack-lightspeed.svc:8080 + - name: OTEL_SDK_DISABLED + value: "true" - name: POSTGRESQL_PASSWORD valueFrom: secretKeyRef: 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 2a4f446..cd4abb2 100644 --- a/test/kuttl/tests/update-openstacklightspeed/08-assert-openstacklightspeed-update.yaml +++ b/test/kuttl/tests/update-openstacklightspeed/08-assert-openstacklightspeed-update.yaml @@ -169,6 +169,8 @@ spec: value: ERROR - name: RH_SERVER_OKP value: http://lightspeed-okp-server.openstack-lightspeed.svc:8080 + - name: OTEL_SDK_DISABLED + value: "true" - name: POSTGRESQL_PASSWORD valueFrom: secretKeyRef: From 091e0cd17605d7d81d980719a3650acbdf09bcc4 Mon Sep 17 00:00:00 2001 From: Gorka Eguileor Date: Fri, 14 Aug 2026 16:59:53 +0200 Subject: [PATCH 6/8] Update from make bundle fmt lint-fix --- internal/controller/lcore_config.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/controller/lcore_config.go b/internal/controller/lcore_config.go index ebb01fc..c454ddb 100644 --- a/internal/controller/lcore_config.go +++ b/internal/controller/lcore_config.go @@ -273,8 +273,8 @@ func buildLCoreConfigYAML(ctx context.Context, h *common_helper.Helper, instance // Build the complete config as a map config := map[string]interface{}{ - "name": "Lightspeed Core Service (LCS)", - "service": buildLCoreServiceConfig(h, instance), + "name": "Lightspeed Core Service (LCS)", + "service": buildLCoreServiceConfig(h, instance), // This has not been renamed in the LCORE config to "ogx" "llama_stack": buildLCoreLlamaStackConfig(), "user_data_collection": buildLCoreUserDataCollectionConfig(h, instance), From 2a2751c07d76e2cf847d2a51ac17afd6c707b75f Mon Sep 17 00:00:00 2001 From: Gorka Eguileor Date: Tue, 18 Aug 2026 12:41:11 +0200 Subject: [PATCH 7/8] Fix go-install-tool to use project's Go toolchain The go-install-tool macro was letting Go auto-switch to a lower toolchain when installing tools (e.g. govulncheck built with Go 1.25 instead of 1.26), causing failures when analyzing packages that require the newer version. Pin GOTOOLCHAIN and encode the Go version in cached binary names so toolchain upgrades trigger automatic rebuilds. Co-Authored-By: Claude Opus 4.6 --- Makefile | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index cf00dab..b1a1394 100644 --- a/Makefile +++ b/Makefile @@ -277,6 +277,7 @@ ENVTEST_VERSION ?= release-0.22 GOLANGCI_LINT_VERSION ?= v2.12.2 KUTTL_VERSION ?= 0.22.0 GOVULNCHECK_VERSION ?= v1.6.0 +GO_VERSION := $(shell go version | cut -d' ' -f3) .PHONY: kustomize kustomize: $(KUSTOMIZE) ## Download kustomize locally if necessary. @@ -350,15 +351,15 @@ ocp-deploy-cleanup: openstack-lightspeed-undeploy ## Clean up everything created # $2 - package url which can be installed # $3 - specific version of package define go-install-tool -@[ -f "$(1)-$(3)" ] || { \ +@[ -f "$(1)-$(3)-$(GO_VERSION)" ] || { \ set -e; \ package=$(2)@$(3) ;\ echo "Downloading $${package}" ;\ -rm -f $(1) || true ;\ -GOBIN=$(LOCALBIN) go install $${package} ;\ -mv $(1) $(1)-$(3) ;\ +rm -f $(1) $(1)-$(3)-* || true ;\ +GOBIN=$(LOCALBIN) GOTOOLCHAIN=$(GO_VERSION) go install $${package} ;\ +mv $(1) $(1)-$(3)-$(GO_VERSION) ;\ } ;\ -ln -sf $(1)-$(3) $(1) +ln -sf $(1)-$(3)-$(GO_VERSION) $(1) endef .PHONY: operator-sdk From 78887eff3bc6d8b013def260939eb5ed5162ffc0 Mon Sep 17 00:00:00 2001 From: Lukas Piwowarski Date: Fri, 21 Aug 2026 11:30:26 -0400 Subject: [PATCH 8/8] [DNM] Debug KUTTL tests This allows us to gather the logs using must-gather from the exact point when the tests fail. --- Makefile | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index b1a1394..d29ee16 100644 --- a/Makefile +++ b/Makefile @@ -309,7 +309,12 @@ $(KUTTL): $(LOCALBIN) kuttl-test: kuttl ## Run kuttl tests @command -v diff >/dev/null 2>&1 || { echo "ERROR: 'diff' command is required for KUTTL tests but not found in PATH" >&2; exit 1; } @command -v oc >/dev/null 2>&1 || { echo "ERROR: 'oc' command is required for KUTTL tests but not found in PATH" >&2; exit 1; } - $(LOCALBIN)/kubectl-kuttl test --config kuttl-test.yaml test/kuttl/tests $(KUTTL_ARGS) + $(LOCALBIN)/kubectl-kuttl test --config kuttl-test.yaml test/kuttl/tests --test application-credentials $(KUTTL_ARGS) + $(LOCALBIN)/kubectl-kuttl test --config kuttl-test.yaml test/kuttl/tests --test basic-openstack-lightspeed-configuration $(KUTTL_ARGS) + $(LOCALBIN)/kubectl-kuttl test --config kuttl-test.yaml test/kuttl/tests --test dynamic-crd-watch-recovery $(KUTTL_ARGS) + $(LOCALBIN)/kubectl-kuttl test --config kuttl-test.yaml test/kuttl/tests --test persistent-database $(KUTTL_ARGS) + $(LOCALBIN)/kubectl-kuttl test --config kuttl-test.yaml test/kuttl/tests --test rhoso-mcps-configuration $(KUTTL_ARGS) + $(LOCALBIN)/kubectl-kuttl test --config kuttl-test.yaml test/kuttl/tests --test update-openstacklightspeed $(KUTTL_ARGS) .PHONY: govulncheck-install govulncheck-install: $(LOCALBIN) ## Download govulncheck locally if necessary.