Skip to content

Commit 2aed68e

Browse files
authored
Auto identify applications namespace and distribution (#188)
* Create size-labeler.yml * Delete .github/workflows/size-labeler.yml * model mesh - add auth tests * xx * feat: get default application namespace from dsci * feat: add distribution * feat: add distribution
1 parent 978c60e commit 2aed68e

File tree

4 files changed

+91
-4
lines changed

4 files changed

+91
-4
lines changed

conftest.py

+7-3
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ def pytest_addoption(parser: Parser) -> None:
3232
buckets_group = parser.getgroup(name="Buckets")
3333
runtime_group = parser.getgroup(name="Runtime details")
3434
upgrade_group = parser.getgroup(name="Upgrade options")
35+
platform_group = parser.getgroup(name="Platform")
3536

3637
# AWS config and credentials options
3738
aws_group.addoption(
@@ -113,6 +114,12 @@ def pytest_addoption(parser: Parser) -> None:
113114
"If not set, all will be tested.",
114115
)
115116

117+
# Platform options
118+
platform_group.addoption(
119+
"--applications-namespace",
120+
help="RHOAI/ODH applications namespace",
121+
)
122+
116123

117124
def pytest_cmdline_main(config: Any) -> None:
118125
config.option.basetemp = py_config["tmp_base_dir"] = f"{config.option.basetemp}-{shortuuid.uuid()}"
@@ -196,9 +203,6 @@ def pytest_sessionstart(session: Session) -> None:
196203
log_level=session.config.getoption("log_cli_level") or logging.INFO,
197204
)
198205

199-
if py_config.get("distribution") == "upstream":
200-
py_config["applications_namespace"] = "opendatahub"
201-
202206

203207
def pytest_fixture_setup(fixturedef: FixtureDef[Any], request: FixtureRequest) -> None:
204208
LOGGER.info(f"Executing {fixturedef.scope} fixture: {fixturedef.argname}")

tests/conftest.py

+22-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,13 @@
2121
from simple_logger.logger import get_logger
2222

2323
from utilities.data_science_cluster_utils import update_components_in_dsc
24-
from utilities.infra import create_ns, login_with_user_password, get_openshift_token
24+
from utilities.infra import (
25+
create_ns,
26+
get_dsci_applications_namespace,
27+
get_operator_distribution,
28+
login_with_user_password,
29+
get_openshift_token,
30+
)
2531
from utilities.constants import AcceleratorType, DscComponents
2632
from utilities.infra import update_configmap_data
2733

@@ -45,6 +51,21 @@ def tests_tmp_dir(request: FixtureRequest, tmp_path_factory: TempPathFactory) ->
4551
shutil.rmtree(path=str(tests_tmp_path), ignore_errors=True)
4652

4753

54+
@pytest.fixture(scope="session", autouse=True)
55+
def updated_global_config(request: FixtureRequest, admin_client: DynamicClient) -> None:
56+
if get_operator_distribution(client=admin_client) == "Open Data Hub":
57+
py_config["distribution"] = "upstream"
58+
59+
else:
60+
py_config["distribution"] = "downstream"
61+
62+
if applications_namespace := request.config.getoption("applications_namespace"):
63+
py_config["applications_namespace"] = applications_namespace
64+
65+
else:
66+
py_config["applications_namespace"] = get_dsci_applications_namespace(client=admin_client)
67+
68+
4869
@pytest.fixture(scope="session")
4970
def current_client_token(admin_client: DynamicClient) -> str:
5071
return get_openshift_token()

utilities/exceptions.py

+4
Original file line numberDiff line numberDiff line change
@@ -80,3 +80,7 @@ class InferenceCanaryTrafficError(Exception):
8080

8181
class PodLogMissMatchError(Exception):
8282
pass
83+
84+
85+
class ResourceMismatch(Exception):
86+
pass

utilities/infra.py

+58
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
from ocp_resources.catalog_source import CatalogSource
1414
from ocp_resources.cluster_service_version import ClusterServiceVersion
1515
from ocp_resources.config_map import ConfigMap
16+
from ocp_resources.data_science_cluster import DataScienceCluster
1617
from ocp_resources.deployment import Deployment
18+
from ocp_resources.dsc_initialization import DSCInitialization
1719
from ocp_resources.exceptions import MissingResourceError
1820
from ocp_resources.inference_service import InferenceService
1921
from ocp_resources.infrastructure import Infrastructure
@@ -616,3 +618,59 @@ def get_product_version(admin_client: DynamicClient) -> Version:
616618
raise MissingResourceError("Operator ClusterServiceVersion not found")
617619

618620
return Version.parse(operator_version)
621+
622+
623+
def get_dsci_applications_namespace(client: DynamicClient, dsci_name: str = "default-dsci") -> str:
624+
"""
625+
Get the namespace where DSCI applications are deployed.
626+
627+
Args:
628+
client (DynamicClient): DynamicClient object
629+
dsci_name (str): DSCI name
630+
631+
Returns:
632+
str: Namespace where DSCI applications are deployed.
633+
634+
Raises:
635+
ValueError: If DSCI applications namespace not found
636+
MissingResourceError: If DSCI not found
637+
638+
"""
639+
dsci = DSCInitialization(client=client, name=dsci_name)
640+
641+
if dsci.exists:
642+
if app_namespace := dsci.instance.spec.get("applicationsNamespace"):
643+
return app_namespace
644+
645+
else:
646+
raise ValueError("DSCI applications namespace not found in {dsci_name}")
647+
648+
raise MissingResourceError(f"DSCI {dsci_name} not found")
649+
650+
651+
def get_operator_distribution(client: DynamicClient, dsc_name: str = "default-dsc") -> str:
652+
"""
653+
Get the operator distribution.
654+
655+
Args:
656+
client (DynamicClient): DynamicClient object
657+
dsc_name (str): DSC name
658+
659+
Returns:
660+
str: Operator distribution.
661+
662+
Raises:
663+
ValueError: If DSC release name not found
664+
MissingResourceError: If DSC not found
665+
666+
"""
667+
dsc = DataScienceCluster(client=client, name=dsc_name)
668+
669+
if dsc.exists:
670+
if dsc_release_name := dsc.instance.status.get("release", {}).get("name"):
671+
return dsc_release_name
672+
673+
else:
674+
raise ValueError("DSC release name not found in {dsc_name}")
675+
676+
raise MissingResourceError(f"DSC {dsc_name} not found")

0 commit comments

Comments
 (0)