Skip to content

Commit 8ebef51

Browse files
authored
update MaaS CR namespaces (#1207)
1 parent 8a8185f commit 8ebef51

File tree

3 files changed

+63
-26
lines changed

3 files changed

+63
-26
lines changed

tests/model_serving/model_server/maas_billing/maas_subscription/conftest.py

Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,25 @@
55
import requests
66
from kubernetes.dynamic import DynamicClient
77
from ocp_resources.llm_inference_service import LLMInferenceService
8+
from ocp_resources.maas_auth_policy import MaaSAuthPolicy
89
from ocp_resources.maas_model_ref import MaaSModelRef
10+
from ocp_resources.maas_subscription import MaaSSubscription
911
from ocp_resources.namespace import Namespace
1012
from ocp_resources.service_account import ServiceAccount
1113
from pytest_testconfig import config as py_config
1214
from simple_logger.logger import get_logger
1315

1416
from tests.model_serving.model_server.maas_billing.maas_subscription.utils import (
17+
MAAS_SUBSCRIPTION_NAMESPACE,
1518
create_api_key,
1619
patch_llmisvc_with_maas_router_and_tiers,
1720
)
1821
from tests.model_serving.model_server.maas_billing.utils import build_maas_headers
1922
from utilities.general import generate_random_name
20-
from utilities.infra import create_inference_token, login_with_user_password
23+
from utilities.infra import create_inference_token, create_ns, login_with_user_password
2124
from utilities.llmd_constants import ContainerImages, ModelStorage
2225
from utilities.llmd_utils import create_llmisvc
2326
from utilities.plugins.constant import OpenAIEnpoints
24-
from utilities.resources.maa_s_auth_policy import MaaSAuthPolicy
25-
from utilities.resources.maa_s_subscription import MaaSSubscription
2627

2728
LOGGER = get_logger(name=__name__)
2829

@@ -90,12 +91,11 @@ def maas_model_tinyllama_free(
9091
admin_client: DynamicClient,
9192
maas_inference_service_tinyllama_free: LLMInferenceService,
9293
) -> Generator[MaaSModelRef]:
93-
applications_namespace = py_config["applications_namespace"]
9494

9595
with MaaSModelRef(
9696
client=admin_client,
9797
name=maas_inference_service_tinyllama_free.name,
98-
namespace=applications_namespace,
98+
namespace=maas_inference_service_tinyllama_free.namespace,
9999
model_ref={
100100
"name": maas_inference_service_tinyllama_free.name,
101101
"namespace": maas_inference_service_tinyllama_free.namespace,
@@ -112,12 +112,11 @@ def maas_model_tinyllama_premium(
112112
admin_client: DynamicClient,
113113
maas_inference_service_tinyllama_premium: LLMInferenceService,
114114
) -> Generator[MaaSModelRef]:
115-
applications_namespace = py_config["applications_namespace"]
116115

117116
with MaaSModelRef(
118117
client=admin_client,
119118
name=maas_inference_service_tinyllama_premium.name,
120-
namespace=applications_namespace,
119+
namespace=maas_inference_service_tinyllama_premium.namespace,
121120
model_ref={
122121
"name": maas_inference_service_tinyllama_premium.name,
123122
"namespace": maas_inference_service_tinyllama_premium.namespace,
@@ -134,14 +133,19 @@ def maas_auth_policy_tinyllama_free(
134133
admin_client: DynamicClient,
135134
maas_free_group: str,
136135
maas_model_tinyllama_free: MaaSModelRef,
136+
maas_subscription_namespace: Namespace,
137137
) -> Generator[MaaSAuthPolicy]:
138-
applications_namespace = py_config["applications_namespace"]
139138

140139
with MaaSAuthPolicy(
141140
client=admin_client,
142141
name="tinyllama-free-access",
143-
namespace=applications_namespace,
144-
model_refs=[maas_model_tinyllama_free.name],
142+
namespace=maas_subscription_namespace.name,
143+
model_refs=[
144+
{
145+
"name": maas_model_tinyllama_free.name,
146+
"namespace": maas_model_tinyllama_free.namespace,
147+
}
148+
],
145149
subjects={
146150
"groups": [
147151
{"name": "system:authenticated"},
@@ -159,14 +163,19 @@ def maas_auth_policy_tinyllama_premium(
159163
admin_client: DynamicClient,
160164
maas_premium_group: str,
161165
maas_model_tinyllama_premium: MaaSModelRef,
166+
maas_subscription_namespace: Namespace,
162167
) -> Generator[MaaSAuthPolicy]:
163-
applications_namespace = py_config["applications_namespace"]
164168

165169
with MaaSAuthPolicy(
166170
client=admin_client,
167171
name="tinyllama-premium-access",
168-
namespace=applications_namespace,
169-
model_refs=[maas_model_tinyllama_premium.name],
172+
namespace=maas_subscription_namespace.name,
173+
model_refs=[
174+
{
175+
"name": maas_model_tinyllama_premium.name,
176+
"namespace": maas_model_tinyllama_premium.namespace,
177+
}
178+
],
170179
subjects={
171180
"groups": [{"name": maas_premium_group}],
172181
},
@@ -181,19 +190,20 @@ def maas_subscription_tinyllama_free(
181190
admin_client: DynamicClient,
182191
maas_free_group: str,
183192
maas_model_tinyllama_free: MaaSModelRef,
193+
maas_subscription_namespace: Namespace,
184194
) -> Generator[MaaSSubscription]:
185-
applications_namespace = py_config["applications_namespace"]
186195

187196
with MaaSSubscription(
188197
client=admin_client,
189198
name="tinyllama-free-subscription",
190-
namespace=applications_namespace,
199+
namespace=maas_subscription_namespace.name,
191200
owner={
192201
"groups": [{"name": maas_free_group}],
193202
},
194203
model_refs=[
195204
{
196205
"name": maas_model_tinyllama_free.name,
206+
"namespace": maas_model_tinyllama_free.namespace,
197207
"tokenRateLimits": [{"limit": 100, "window": "1m"}],
198208
}
199209
],
@@ -210,19 +220,20 @@ def maas_subscription_tinyllama_premium(
210220
admin_client: DynamicClient,
211221
maas_premium_group: str,
212222
maas_model_tinyllama_premium: MaaSModelRef,
223+
maas_subscription_namespace: Namespace,
213224
) -> Generator[MaaSSubscription]:
214-
applications_namespace = py_config["applications_namespace"]
215225

216226
with MaaSSubscription(
217227
client=admin_client,
218228
name="tinyllama-premium-subscription",
219-
namespace=applications_namespace,
229+
namespace=maas_subscription_namespace.name,
220230
owner={
221231
"groups": [{"name": maas_premium_group}],
222232
},
223233
model_refs=[
224234
{
225235
"name": maas_model_tinyllama_premium.name,
236+
"namespace": maas_model_tinyllama_premium.namespace,
226237
"tokenRateLimits": [{"limit": 1000, "window": "1m"}],
227238
}
228239
],
@@ -321,3 +332,13 @@ def maas_wrong_group_service_account_token(
321332
@pytest.fixture(scope="class")
322333
def maas_headers_for_wrong_group_sa(maas_wrong_group_service_account_token: str) -> dict:
323334
return build_maas_headers(token=maas_wrong_group_service_account_token)
335+
336+
337+
@pytest.fixture(scope="session")
338+
def maas_subscription_namespace(unprivileged_client, admin_client):
339+
with create_ns(
340+
name=MAAS_SUBSCRIPTION_NAMESPACE,
341+
unprivileged_client=unprivileged_client,
342+
admin_client=admin_client,
343+
) as ns:
344+
yield ns

tests/model_serving/model_server/maas_billing/maas_subscription/test_multiple_subscriptions_per_model.py

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
import pytest
44
import requests
55
from kubernetes.dynamic import DynamicClient
6+
7+
# from utilities.resources.maa_s_auth_policy import MaaSAuthPolicy
8+
from ocp_resources.maas_auth_policy import MaaSAuthPolicy
69
from ocp_resources.service_account import ServiceAccount
710
from simple_logger.logger import get_logger
811

@@ -13,7 +16,6 @@
1316
)
1417
from tests.model_serving.model_server.maas_billing.utils import build_maas_headers
1518
from utilities.infra import create_inference_token, login_with_user_password
16-
from utilities.resources.maa_s_auth_policy import MaaSAuthPolicy
1719

1820
LOGGER = get_logger(name=__name__)
1921

@@ -24,7 +26,6 @@
2426
"maas_unprivileged_model_namespace",
2527
"maas_controller_enabled_latest",
2628
"maas_gateway_api",
27-
"maas_api_gateway_reachable",
2829
"maas_inference_service_tinyllama_free",
2930
"maas_model_tinyllama_free",
3031
"maas_auth_policy_tinyllama_free",
@@ -46,6 +47,7 @@ def test_user_in_one_of_two_subscriptions_can_access_model(
4647
model_url_tinyllama_free: str,
4748
maas_subscription_tinyllama_free,
4849
maas_headers_for_actor_api_key: dict[str, str],
50+
maas_subscription_namespace,
4951
) -> None:
5052
"""
5153
Create a second subscription for a different group the user is NOT in.
@@ -55,9 +57,11 @@ def test_user_in_one_of_two_subscriptions_can_access_model(
5557

5658
with create_maas_subscription(
5759
admin_client=admin_client,
60+
subscription_namespace=maas_subscription_namespace.name,
5861
subscription_name="extra-subscription",
5962
owner_group_name="nonexistent-group-xyz",
6063
model_name=maas_model_tinyllama_free.name,
64+
model_namespace=maas_model_tinyllama_free.namespace,
6165
tokens_per_minute=999,
6266
window="1m",
6367
priority=0,
@@ -99,6 +103,7 @@ def test_high_priority_subscription_allows_access_when_explicitly_selected(
99103
model_url_tinyllama_free: str,
100104
maas_subscription_tinyllama_free,
101105
maas_headers_for_actor_api_key: dict[str, str],
106+
maas_subscription_namespace,
102107
) -> None:
103108
"""
104109
Create a second (higher priority) subscription for the same group + model.
@@ -109,9 +114,11 @@ def test_high_priority_subscription_allows_access_when_explicitly_selected(
109114

110115
with create_maas_subscription(
111116
admin_client=admin_client,
117+
subscription_namespace=maas_subscription_namespace.name,
112118
subscription_name="high-tier-subscription",
113119
owner_group_name=maas_free_group,
114120
model_name=maas_model_tinyllama_free.name,
121+
model_namespace=maas_model_tinyllama_free.namespace,
115122
tokens_per_minute=9999,
116123
window="1m",
117124
priority=10,
@@ -149,6 +156,7 @@ def test_service_account_cannot_use_subscription_it_does_not_belong_to(
149156
maas_model_tinyllama_free,
150157
model_url_tinyllama_free: str,
151158
maas_unprivileged_model_namespace,
159+
maas_subscription_namespace,
152160
) -> None:
153161
"""
154162
A service account explicitly selecting a subscription it does not belong to
@@ -166,17 +174,24 @@ def test_service_account_cannot_use_subscription_it_does_not_belong_to(
166174
MaaSAuthPolicy(
167175
client=admin_client,
168176
name="service-account-access-policy",
169-
namespace=applications_namespace,
170-
model_refs=[maas_model_tinyllama_free.name],
177+
namespace=maas_subscription_namespace.name,
178+
model_refs=[
179+
{
180+
"name": maas_model_tinyllama_free.name,
181+
"namespace": maas_model_tinyllama_free.namespace,
182+
}
183+
],
171184
subjects={"groups": [{"name": f"system:serviceaccounts:{applications_namespace}"}]},
172185
teardown=True,
173186
wait_for_resource=True,
174187
) as service_account_auth_policy,
175188
create_maas_subscription(
176189
admin_client=admin_client,
190+
subscription_namespace=maas_subscription_namespace.name,
177191
subscription_name="premium-subscription",
178192
owner_group_name=maas_premium_group,
179193
model_name=maas_model_tinyllama_free.name,
194+
model_namespace=maas_model_tinyllama_free.namespace,
180195
tokens_per_minute=500,
181196
window="1m",
182197
priority=0,

tests/model_serving/model_server/maas_billing/maas_subscription/utils.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
import requests
1111
from kubernetes.dynamic import DynamicClient
1212
from ocp_resources.llm_inference_service import LLMInferenceService
13+
from ocp_resources.maas_subscription import MaaSSubscription
1314
from ocp_resources.resource import ResourceEditor
14-
from pytest_testconfig import config as py_config
1515
from requests import Response
1616
from simple_logger.logger import get_logger
1717
from timeout_sampler import TimeoutSampler
@@ -21,9 +21,9 @@
2121
MAAS_GATEWAY_NAMESPACE,
2222
ApiGroups,
2323
)
24-
from utilities.resources.maa_s_subscription import MaaSSubscription
2524

2625
LOGGER = get_logger(name=__name__)
26+
MAAS_SUBSCRIPTION_NAMESPACE = "models-as-a-service"
2727

2828

2929
@contextmanager
@@ -138,29 +138,30 @@ def poll_expected_status(
138138

139139

140140
def create_maas_subscription(
141-
*,
142141
admin_client: DynamicClient,
142+
subscription_namespace: str,
143143
subscription_name: str,
144144
owner_group_name: str,
145145
model_name: str,
146+
model_namespace: str,
146147
tokens_per_minute: int,
147148
window: str = "1m",
148149
priority: int = 0,
149150
teardown: bool = True,
150151
wait_for_resource: bool = True,
151152
) -> MaaSSubscription:
152-
applications_namespace = py_config["applications_namespace"]
153153

154154
return MaaSSubscription(
155155
client=admin_client,
156156
name=subscription_name,
157-
namespace=applications_namespace,
157+
namespace=subscription_namespace,
158158
owner={
159159
"groups": [{"name": owner_group_name}],
160160
},
161161
model_refs=[
162162
{
163163
"name": model_name,
164+
"namespace": model_namespace,
164165
"tokenRateLimits": [{"limit": tokens_per_minute, "window": window}],
165166
}
166167
],

0 commit comments

Comments
 (0)