|
29 | 29 | from ai.backend.common.identifier.deployment import DeploymentID |
30 | 30 | from ai.backend.common.identifier.deployment_preset import DeploymentPresetID |
31 | 31 | from ai.backend.common.identifier.deployment_revision import DeploymentRevisionID |
| 32 | +from ai.backend.common.identifier.domain import DomainID |
32 | 33 | from ai.backend.common.identifier.image import ImageID |
33 | 34 | from ai.backend.common.identifier.replica import ReplicaID |
34 | 35 | from ai.backend.common.identifier.replica_group import ReplicaGroupID |
35 | | -from ai.backend.common.identifier.resource_group import ResourceGroupName |
| 36 | +from ai.backend.common.identifier.resource_group import ResourceGroupID, ResourceGroupName |
36 | 37 | from ai.backend.common.identifier.runtime_variant import RuntimeVariantID |
37 | 38 | from ai.backend.common.identifier.vfolder import VFolderUUID |
38 | 39 | from ai.backend.common.types import ( |
|
105 | 106 | UserNotFoundInDeployment, |
106 | 107 | ) |
107 | 108 | from ai.backend.manager.errors.resource import ( |
| 109 | + DomainNotFound, |
108 | 110 | ProjectNotFound, |
109 | 111 | RuntimeVariantNotFound, |
110 | 112 | ScalingGroupNotFound, |
|
124 | 126 | from ai.backend.manager.models.deployment_revision_preset.row import ( |
125 | 127 | DeploymentRevisionPresetRow, |
126 | 128 | ) |
| 129 | +from ai.backend.manager.models.domain import DomainRow |
127 | 130 | from ai.backend.manager.models.endpoint import ( |
128 | 131 | EndpointAutoScalingRuleRow, |
129 | 132 | EndpointRow, |
@@ -2099,6 +2102,29 @@ async def _resolve_user_and_active_access_key( |
2099 | 2102 | raise UserNotFoundInDeployment(f"{user_uuid} not found") |
2100 | 2103 | raise NoActiveKeypairForDeployment(f"{user_uuid} has no active keypair") |
2101 | 2104 |
|
| 2105 | + async def _resolve_deployment_scope_ids( |
| 2106 | + self, |
| 2107 | + db_sess: SASession, |
| 2108 | + deployment_info: DeploymentInfo, |
| 2109 | + ) -> tuple[DomainID, ResourceGroupID]: |
| 2110 | + domain_id = await db_sess.scalar( |
| 2111 | + sa.select(DomainRow.id).where(DomainRow.name == deployment_info.metadata.domain) |
| 2112 | + ) |
| 2113 | + if domain_id is None: |
| 2114 | + raise DomainNotFound(deployment_info.metadata.domain) |
| 2115 | + |
| 2116 | + resource_group_id = await db_sess.scalar( |
| 2117 | + sa.select(ScalingGroupRow.id).where( |
| 2118 | + ScalingGroupRow.name == deployment_info.metadata.resource_group |
| 2119 | + ) |
| 2120 | + ) |
| 2121 | + if resource_group_id is None: |
| 2122 | + raise ScalingGroupNotFound( |
| 2123 | + f"Resource group {deployment_info.metadata.resource_group!r} not found" |
| 2124 | + ) |
| 2125 | + |
| 2126 | + return DomainID(domain_id), ResourceGroupID(resource_group_id) |
| 2127 | + |
2102 | 2128 | async def fetch_deployment_context( |
2103 | 2129 | self, |
2104 | 2130 | deployment_info: DeploymentInfo, |
@@ -2147,6 +2173,10 @@ async def fetch_deployment_context( |
2147 | 2173 | group_id = user_info.group_id |
2148 | 2174 | resource_policy = user_info.resource_policy |
2149 | 2175 |
|
| 2176 | + domain_id, resource_group_id = await self._resolve_deployment_scope_ids( |
| 2177 | + db_sess, deployment_info |
| 2178 | + ) |
| 2179 | + |
2150 | 2180 | revision_query = ( |
2151 | 2181 | sa.select(DeploymentRevisionRow) |
2152 | 2182 | .where(DeploymentRevisionRow.id == revision_id) |
@@ -2212,7 +2242,9 @@ async def fetch_deployment_context( |
2212 | 2242 | main_gid=session_owner_user.container_main_gid, |
2213 | 2243 | supplementary_gids=session_owner_user.container_gids or [], |
2214 | 2244 | ), |
| 2245 | + domain_id=domain_id, |
2215 | 2246 | group_id=group_id, |
| 2247 | + resource_group_id=resource_group_id, |
2216 | 2248 | resource_policy=dict(resource_policy), |
2217 | 2249 | image=ImageContext( |
2218 | 2250 | ref=image_row.image_ref, |
|
0 commit comments