|
1 | 1 | import base64 |
2 | 2 | import os |
3 | 3 | import shutil |
| 4 | +from ast import literal_eval |
4 | 5 | from typing import Any, Callable, Generator |
5 | 6 |
|
6 | 7 | import pytest |
|
24 | 25 |
|
25 | 26 | from utilities.data_science_cluster_utils import update_components_in_dsc |
26 | 27 | from utilities.exceptions import ClusterLoginError |
27 | | -from utilities.general import get_s3_secret_dict |
28 | 28 | from utilities.infra import ( |
29 | 29 | verify_cluster_sanity, |
30 | 30 | create_ns, |
|
35 | 35 | ) |
36 | 36 | from utilities.constants import ( |
37 | 37 | AcceleratorType, |
38 | | - ApiGroups, |
39 | 38 | DscComponents, |
40 | 39 | Labels, |
41 | 40 | MinIo, |
42 | 41 | Protocols, |
43 | 42 | ) |
44 | 43 | from utilities.infra import update_configmap_data |
45 | | - |
| 44 | +from utilities.minio import create_minio_data_connection_secret |
46 | 45 |
|
47 | 46 | LOGGER = get_logger(name=__name__) |
48 | 47 |
|
@@ -111,7 +110,7 @@ def model_namespace( |
111 | 110 | ns.clean_up() |
112 | 111 | else: |
113 | 112 | with create_ns( |
114 | | - admin_client=admin_client, |
| 113 | + client=admin_client, |
115 | 114 | pytest_request=request, |
116 | 115 | teardown=teardown_resources, |
117 | 116 | ) as ns: |
@@ -233,10 +232,31 @@ def vllm_runtime_image(pytestconfig: pytest.Config) -> str | None: |
233 | 232 |
|
234 | 233 |
|
235 | 234 | @pytest.fixture(scope="session") |
236 | | -def non_admin_user_password(admin_client: DynamicClient) -> tuple[str, str] | None: |
| 235 | +def use_unprivileged_client(pytestconfig: pytest.Config) -> bool: |
| 236 | + _use_unprivileged_client = py_config.get("use_unprivileged_client") |
| 237 | + |
| 238 | + if isinstance(_use_unprivileged_client, bool): |
| 239 | + return _use_unprivileged_client |
| 240 | + |
| 241 | + elif isinstance(_use_unprivileged_client, str): |
| 242 | + return literal_eval(_use_unprivileged_client) |
| 243 | + |
| 244 | + else: |
| 245 | + raise ValueError( |
| 246 | + "use_unprivileged_client is not defined.\n" |
| 247 | + "Either pass with `--use-unprivileged-client` or " |
| 248 | + "set in `use_unprivileged_client` in `tests/global_config.py`" |
| 249 | + ) |
| 250 | + |
| 251 | + |
| 252 | +@pytest.fixture(scope="session") |
| 253 | +def non_admin_user_password(admin_client: DynamicClient, use_unprivileged_client: bool) -> tuple[str, str] | None: |
237 | 254 | def _decode_split_data(_data: str) -> list[str]: |
238 | 255 | return base64.b64decode(_data).decode().split(",") |
239 | 256 |
|
| 257 | + if not use_unprivileged_client: |
| 258 | + return None |
| 259 | + |
240 | 260 | if ldap_Secret := list( |
241 | 261 | Secret.get( |
242 | 262 | dyn_client=admin_client, |
@@ -269,13 +289,18 @@ def kubconfig_filepath() -> str: |
269 | 289 | @pytest.fixture(scope="session") |
270 | 290 | def unprivileged_client( |
271 | 291 | admin_client: DynamicClient, |
| 292 | + use_unprivileged_client: bool, |
272 | 293 | kubconfig_filepath: str, |
273 | 294 | non_admin_user_password: tuple[str, str], |
274 | 295 | ) -> Generator[DynamicClient, Any, Any]: |
275 | 296 | """ |
276 | 297 | Provides none privileged API client. If non_admin_user_password is None, then it will raise. |
277 | 298 | """ |
278 | | - if non_admin_user_password is None: |
| 299 | + if not use_unprivileged_client: |
| 300 | + LOGGER.warning("Unprivileged client is not enabled, using admin client") |
| 301 | + yield admin_client |
| 302 | + |
| 303 | + elif non_admin_user_password is None: |
279 | 304 | raise ValueError("Unprivileged user not provisioned") |
280 | 305 |
|
281 | 306 | else: |
@@ -380,7 +405,7 @@ def unprivileged_model_namespace( |
380 | 405 | def minio_namespace(admin_client: DynamicClient) -> Generator[Namespace, Any, Any]: |
381 | 406 | with create_ns( |
382 | 407 | name=f"{MinIo.Metadata.NAME}-{shortuuid.uuid().lower()}", |
383 | | - admin_client=admin_client, |
| 408 | + client=admin_client, |
384 | 409 | ) as ns: |
385 | 410 | yield ns |
386 | 411 |
|
@@ -451,29 +476,13 @@ def minio_data_connection( |
451 | 476 | model_namespace: Namespace, |
452 | 477 | minio_service: Service, |
453 | 478 | ) -> Generator[Secret, Any, Any]: |
454 | | - data_dict = get_s3_secret_dict( |
455 | | - aws_access_key=MinIo.Credentials.ACCESS_KEY_VALUE, |
456 | | - aws_secret_access_key=MinIo.Credentials.SECRET_KEY_VALUE, # pragma: allowlist secret |
| 479 | + with create_minio_data_connection_secret( |
| 480 | + minio_service=minio_service, |
| 481 | + model_namespace=model_namespace.name, |
457 | 482 | aws_s3_bucket=request.param["bucket"], |
458 | | - aws_s3_endpoint=f"{Protocols.HTTP}://{minio_service.instance.spec.clusterIP}:{str(MinIo.Metadata.DEFAULT_PORT)}", # noqa: E501 |
459 | | - aws_s3_region="us-south", |
460 | | - ) |
461 | | - |
462 | | - with Secret( |
463 | 483 | client=admin_client, |
464 | | - name="aws-connection-minio-data-connection", |
465 | | - namespace=model_namespace.name, |
466 | | - data_dict=data_dict, |
467 | | - label={ |
468 | | - Labels.OpenDataHub.DASHBOARD: "true", |
469 | | - Labels.OpenDataHubIo.MANAGED: "true", |
470 | | - }, |
471 | | - annotations={ |
472 | | - f"{ApiGroups.OPENDATAHUB_IO}/connection-type": "s3", |
473 | | - "openshift.io/display-name": "Minio Data Connection", |
474 | | - }, |
475 | | - ) as minio_secret: |
476 | | - yield minio_secret |
| 484 | + ) as secret: |
| 485 | + yield secret |
477 | 486 |
|
478 | 487 |
|
479 | 488 | @pytest.fixture(scope="session") |
|
0 commit comments