Skip to content

Commit 8da9dfb

Browse files
committed
test: update env vars for qdrant and readme added generic secrets
1 parent 33cdf59 commit 8da9dfb

File tree

3 files changed

+132
-35
lines changed

3 files changed

+132
-35
lines changed

tests/fixtures/vector_io.py

Lines changed: 67 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,26 @@
3131
PGVECTOR_USER = os.getenv("LLS_VECTOR_IO_PGVECTOR_USER", "vector_user")
3232
PGVECTOR_PASSWORD = os.getenv("LLS_VECTOR_IO_PGVECTOR_PASSWORD", "yourpassword")
3333

34+
# qdrant v1 unprivileged latest
3435
QDRANT_IMAGE = os.getenv(
3536
"LLS_VECTOR_IO_QDRANT_IMAGE",
3637
(
3738
"docker.io/qdrant/qdrant@sha256:"
38-
"26509b92c44ded1ad344e18a005383c20bb3fbf9dbf4d337265a230b2aa89e79" # pragma: allowlist secret"
39+
"9dfabc51ededc48158899a288a19a04de1ab54a11d8c512e1c40eebbd5e2bc92" # pragma: allowlist secret
3940
),
4041
)
4142

43+
QDRANT_API_KEY = os.getenv("LLS_VECTOR_IO_QDRANT_API_KEY", "yourapikey")
44+
QDRANT_URL = os.getenv("LLS_VECTOR_IO_QDRANT_URL", "http://vector-io-qdrant-service:6333")
45+
4246

4347
@pytest.fixture(scope="class")
4448
def vector_io_provider_deployment_config_factory(
49+
unprivileged_client: DynamicClient,
50+
unprivileged_model_namespace: Namespace,
51+
vector_io_secret: Secret,
4552
request: FixtureRequest,
46-
) -> Callable[[str], list[Dict[str, str]]]:
53+
) -> Callable[[str], list[Dict[str, Any]]]:
4754
"""
4855
Factory fixture for deploying vector I/O providers and returning their configuration.
4956
@@ -85,17 +92,25 @@ def test_with_milvus(vector_io_provider_deployment_config_factory):
8592
env_vars = vector_io_provider_deployment_config_factory("milvus-remote")
8693
# env_vars contains MILVUS_ENDPOINT, MILVUS_TOKEN, etc.
8794
"""
95+
_ = unprivileged_client
96+
_ = unprivileged_model_namespace
97+
_ = vector_io_secret
8898

89-
def _factory(provider_name: str) -> list[Dict[str, str]]:
90-
env_vars: list[dict[str, str]] = []
99+
def _factory(provider_name: str) -> list[Dict[str, Any]]:
100+
env_vars: list[dict[str, Any]] = []
91101

92102
if provider_name is None or provider_name == "milvus":
93103
# Default case - no additional environment variables needed
94104
pass
95105
elif provider_name == "milvus-remote":
96106
request.getfixturevalue(argname="milvus_service")
97107
env_vars.append({"name": "MILVUS_ENDPOINT", "value": "http://vector-io-milvus-service:19530"})
98-
env_vars.append({"name": "MILVUS_TOKEN", "value": MILVUS_TOKEN})
108+
env_vars.append(
109+
{
110+
"name": "MILVUS_TOKEN",
111+
"valueFrom": {"secretKeyRef": {"name": "vector-io-secret", "key": "milvus-token"}},
112+
},
113+
)
99114
env_vars.append({"name": "MILVUS_CONSISTENCY_LEVEL", "value": "Bounded"})
100115
elif provider_name == "faiss":
101116
env_vars.append({"name": "ENABLE_FAISS", "value": "faiss"})
@@ -108,23 +123,54 @@ def _factory(provider_name: str) -> list[Dict[str, str]]:
108123
env_vars.append({"name": "ENABLE_PGVECTOR", "value": "true"})
109124
env_vars.append({"name": "PGVECTOR_HOST", "value": "vector-io-pgvector-service"})
110125
env_vars.append({"name": "PGVECTOR_PORT", "value": "5432"})
111-
env_vars.append({"name": "PGVECTOR_USER", "value": PGVECTOR_USER})
112-
env_vars.append({"name": "PGVECTOR_PASSWORD", "value": PGVECTOR_PASSWORD})
126+
env_vars.append(
127+
{
128+
"name": "PGVECTOR_USER",
129+
"valueFrom": {"secretKeyRef": {"name": "vector-io-secret", "key": "pgvector-user"}},
130+
},
131+
)
132+
env_vars.append(
133+
{
134+
"name": "PGVECTOR_PASSWORD",
135+
"valueFrom": {"secretKeyRef": {"name": "vector-io-secret", "key": "pgvector-password"}},
136+
},
137+
)
113138
env_vars.append({"name": "PGVECTOR_DB", "value": "pgvector"})
114139
elif provider_name == "qdrant-remote":
115140
request.getfixturevalue(argname="qdrant_service")
116141
env_vars.append({"name": "ENABLE_QDRANT", "value": "true"})
117-
env_vars.append({"name": "QDRANT_URL", "value": "http://vector-io-qdrant-service:6333"})
142+
env_vars.append({"name": "QDRANT_URL", "value": QDRANT_URL})
118143
env_vars.append({
119144
"name": "QDRANT_API_KEY",
120-
"valueFrom": {"secretKeyRef": {"name": "qdrant-secret", "key": "api-key"}},
145+
"valueFrom": {"secretKeyRef": {"name": "vector-io-secret", "key": "qdrant-api-key"}},
121146
})
122147

123148
return env_vars
124149

125150
return _factory
126151

127152

153+
@pytest.fixture(scope="class")
154+
def vector_io_secret(
155+
unprivileged_client: DynamicClient,
156+
unprivileged_model_namespace: Namespace,
157+
) -> Generator[Secret, Any, Any]:
158+
"""Create a secret for the vector I/O providers"""
159+
with Secret(
160+
client=unprivileged_client,
161+
namespace=unprivileged_model_namespace.name,
162+
name="vector-io-secret",
163+
type="Opaque",
164+
string_data={
165+
"qdrant-api-key": QDRANT_API_KEY,
166+
"pgvector-user": PGVECTOR_USER,
167+
"pgvector-password": PGVECTOR_PASSWORD,
168+
"milvus-token": MILVUS_TOKEN,
169+
},
170+
) as secret:
171+
yield secret
172+
173+
128174
@pytest.fixture(scope="class")
129175
def etcd_deployment(
130176
unprivileged_client: DynamicClient,
@@ -346,8 +392,14 @@ def get_pgvector_deployment_template() -> Dict[str, Any]:
346392
"ports": [{"containerPort": 5432}],
347393
"env": [
348394
{"name": "POSTGRES_DB", "value": "pgvector"},
349-
{"name": "POSTGRES_USER", "value": PGVECTOR_USER},
350-
{"name": "POSTGRES_PASSWORD", "value": PGVECTOR_PASSWORD},
395+
{
396+
"name": "POSTGRES_USER",
397+
"valueFrom": {"secretKeyRef": {"name": "vector-io-secret", "key": "pgvector-user"}},
398+
},
399+
{
400+
"name": "POSTGRES_PASSWORD",
401+
"valueFrom": {"secretKeyRef": {"name": "vector-io-secret", "key": "pgvector-password"}},
402+
},
351403
{"name": "PGDATA", "value": "/var/lib/postgresql/data/pgdata"},
352404
],
353405
"lifecycle": {
@@ -377,7 +429,6 @@ def get_pgvector_deployment_template() -> Dict[str, Any]:
377429
def qdrant_deployment(
378430
unprivileged_client: DynamicClient,
379431
unprivileged_model_namespace: Namespace,
380-
qdrant_secret: Secret,
381432
) -> Generator[Deployment, Any, Any]:
382433
"""Deploy a Qdrant instance for vector I/O provider testing."""
383434
with Deployment(
@@ -402,6 +453,8 @@ def qdrant_service(
402453
qdrant_deployment: Deployment,
403454
) -> Generator[Service, Any, Any]:
404455
"""Create a service for the Qdrant deployment."""
456+
_ = qdrant_deployment
457+
405458
with Service(
406459
client=unprivileged_client,
407460
namespace=unprivileged_model_namespace.name,
@@ -424,28 +477,11 @@ def qdrant_service(
424477
yield service
425478

426479

427-
@pytest.fixture(scope="class")
428-
def qdrant_secret(
429-
unprivileged_client: DynamicClient,
430-
unprivileged_model_namespace: Namespace,
431-
) -> Generator[Secret, Any, Any]:
432-
"""Return a Kubernetes Secret for Qdrant"""
433-
with Secret(
434-
client=unprivileged_client,
435-
namespace=unprivileged_model_namespace.name,
436-
name="qdrant-secret",
437-
type="Opaque",
438-
string_data={"api-key": "yourapikey"},
439-
) as secret:
440-
yield secret
441-
442-
443480
def get_qdrant_deployment_template() -> Dict[str, Any]:
444481
"""Return a Kubernetes deployment for Qdrant"""
445482
return {
446483
"metadata": {"labels": {"app": "qdrant"}},
447484
"spec": {
448-
"securityContext": {"runAsNonRoot": True, "seccompProfile": {"type": "RuntimeDefault"}},
449485
"containers": [
450486
{
451487
"name": "qdrant",
@@ -465,8 +501,8 @@ def get_qdrant_deployment_template() -> Dict[str, Any]:
465501
"name": "QDRANT__SERVICE__API_KEY",
466502
"valueFrom": {
467503
"secretKeyRef": {
468-
"name": "qdrant-secret",
469-
"key": "api-key",
504+
"name": "vector-io-secret",
505+
"key": "qdrant-api-key",
470506
},
471507
},
472508
},

tests/llama_stack/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,9 @@ LLS_VECTOR_IO_ETCD_IMAGE=<CUSTOM-ETCD-IMAGE> # Optional
7171
LLS_VECTOR_IO_PGVECTOR_IMAGE=<CUSTOM-PGVECTOR-IMAGE> # Optional
7272
LLS_VECTOR_IO_PGVECTOR_USER=<CUSTOM-PGVECTOR-USER> # Optional
7373
LLS_VECTOR_IO_PGVECTOR_PASSWORD=<CUSTOM-PGVECTOR-PASSWORD> # Optional
74+
LLS_VECTOR_IO_QDRANT_IMAGE=<CUSTOM-QDRANT-IMAGE> # Optional
75+
LLS_VECTOR_IO_QDRANT_API_KEY=<CUSTOM-QDRANT-API-KEY> # Optional
76+
LLS_VECTOR_IO_QDRANT_URL=<QDRANT_URL_WITH_PROTOCOL> # Optional
7477

7578
# Red Hat Llama Stack Distribution requires PostgreSQL (replacing SQLite)
7679
LLS_VECTOR_IO_POSTGRES_IMAGE=<CUSTOM-POSTGRES-IMAGE> # Optional

tests/llama_stack/conftest.py

Lines changed: 62 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
ModelInfo,
2929
)
3030
from ocp_resources.service import Service
31+
from ocp_resources.secret import Secret
3132

3233
LOGGER = get_logger(name=__name__)
3334

@@ -42,6 +43,11 @@
4243
POSTGRESQL_USER = os.getenv("LLS_VECTOR_IO_POSTGRESQL_USER", "ps_user")
4344
POSTGRESQL_PASSWORD = os.getenv("LLS_VECTOR_IO_POSTGRESQL_PASSWORD", "ps_password")
4445

46+
LLAMA_STACK_DISTRIBUTION_SECRET_DATA = {
47+
"postgres-user": POSTGRESQL_USER,
48+
"postgres-password": POSTGRESQL_PASSWORD,
49+
}
50+
4551
LLS_CORE_INFERENCE_MODEL = os.getenv("LLS_CORE_INFERENCE_MODEL", "")
4652
LLS_CORE_VLLM_URL = os.getenv("LLS_CORE_VLLM_URL", "")
4753
LLS_CORE_VLLM_API_TOKEN = os.getenv("LLS_CORE_VLLM_API_TOKEN", "")
@@ -290,8 +296,18 @@ def test_with_remote_milvus(llama_stack_server_config):
290296
# POSTGRESQL environment variables for sql_default and kvstore_default
291297
env_vars.append({"name": "POSTGRES_HOST", "value": "vector-io-postgres-service"})
292298
env_vars.append({"name": "POSTGRES_PORT", "value": "5432"})
293-
env_vars.append({"name": "POSTGRES_USER", "value": POSTGRESQL_USER})
294-
env_vars.append({"name": "POSTGRES_PASSWORD", "value": POSTGRESQL_PASSWORD})
299+
env_vars.append(
300+
{
301+
"name": "POSTGRES_USER",
302+
"valueFrom": {"secretKeyRef": {"name": "llamastack-distribution-secret", "key": "postgres-user"}},
303+
},
304+
)
305+
env_vars.append(
306+
{
307+
"name": "POSTGRES_PASSWORD",
308+
"valueFrom": {"secretKeyRef": {"name": "llamastack-distribution-secret", "key": "postgres-password"}},
309+
},
310+
)
295311
env_vars.append({"name": "POSTGRES_DB", "value": "ps_db"})
296312
env_vars.append({"name": "POSTGRES_TABLE_NAME", "value": "llamastack_kvstore"})
297313

@@ -325,6 +341,36 @@ def test_with_remote_milvus(llama_stack_server_config):
325341
return server_config
326342

327343

344+
@pytest.fixture(scope="class")
345+
def llama_stack_distribution_secret(
346+
admin_client: DynamicClient,
347+
model_namespace: Namespace,
348+
) -> Generator[Secret, Any, Any]:
349+
with Secret(
350+
client=admin_client,
351+
namespace=model_namespace.name,
352+
name="llamastack-distribution-secret",
353+
type="Opaque",
354+
string_data=LLAMA_STACK_DISTRIBUTION_SECRET_DATA,
355+
) as secret:
356+
yield secret
357+
358+
359+
@pytest.fixture(scope="class")
360+
def unprivileged_llama_stack_distribution_secret(
361+
unprivileged_client: DynamicClient,
362+
unprivileged_model_namespace: Namespace,
363+
) -> Generator[Secret, Any, Any]:
364+
with Secret(
365+
client=unprivileged_client,
366+
namespace=unprivileged_model_namespace.name,
367+
name="llamastack-distribution-secret",
368+
type="Opaque",
369+
string_data=LLAMA_STACK_DISTRIBUTION_SECRET_DATA,
370+
) as secret:
371+
yield secret
372+
373+
328374
@pytest.fixture(scope="class")
329375
def unprivileged_llama_stack_distribution(
330376
unprivileged_client: DynamicClient,
@@ -337,6 +383,7 @@ def unprivileged_llama_stack_distribution(
337383
ci_s3_bucket_region: str,
338384
aws_access_key_id: str,
339385
aws_secret_access_key: str,
386+
unprivileged_llama_stack_distribution_secret: Secret,
340387
unprivileged_postgres_deployment: Deployment,
341388
unprivileged_postgres_service: Service,
342389
) -> Generator[LlamaStackDistribution, None, None]:
@@ -384,6 +431,7 @@ def llama_stack_distribution(
384431
ci_s3_bucket_region: str,
385432
aws_access_key_id: str,
386433
aws_secret_access_key: str,
434+
llama_stack_distribution_secret: Secret,
387435
postgres_deployment: Deployment,
388436
postgres_service: Service,
389437
) -> Generator[LlamaStackDistribution, None, None]:
@@ -858,8 +906,18 @@ def get_postgres_deployment_template() -> Dict[str, Any]:
858906
"ports": [{"containerPort": 5432}],
859907
"env": [
860908
{"name": "POSTGRESQL_DATABASE", "value": "ps_db"},
861-
{"name": "POSTGRESQL_USER", "value": POSTGRESQL_USER},
862-
{"name": "POSTGRESQL_PASSWORD", "value": POSTGRESQL_PASSWORD},
909+
{
910+
"name": "POSTGRESQL_USER",
911+
"valueFrom": {
912+
"secretKeyRef": {"name": "llamastack-distribution-secret", "key": "postgres-user"}
913+
},
914+
},
915+
{
916+
"name": "POSTGRESQL_PASSWORD",
917+
"valueFrom": {
918+
"secretKeyRef": {"name": "llamastack-distribution-secret", "key": "postgres-password"}
919+
},
920+
},
863921
],
864922
"volumeMounts": [{"name": "postgresdata", "mountPath": "/var/lib/pgsql/data"}],
865923
},

0 commit comments

Comments
 (0)