Skip to content

Commit

Permalink
Adding support for serving endpoints (#990)
Browse files Browse the repository at this point in the history
Assessment did not crawled permissions for serving endpoints, this PR
aims to fix it

- [X] added integration tests
  • Loading branch information
william-conti authored and nkvuong committed Mar 6, 2024
1 parent 0d787c5 commit e034cf5
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 0 deletions.
31 changes: 31 additions & 0 deletions src/databricks/labs/ucx/mixins/fixtures.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
from databricks.sdk.errors import NotFound, ResourceConflict
from databricks.sdk.retries import retried
from databricks.sdk.service import compute, iam, jobs, pipelines, sql, workspace
from databricks.sdk.service._internal import Wait
from databricks.sdk.service.catalog import (
AwsIamRole,
AzureServicePrincipal,
Expand All @@ -29,6 +30,12 @@
TableInfo,
TableType,
)
from databricks.sdk.service.serving import (
EndpointCoreConfigInput,
ServedModelInput,
ServedModelInputWorkloadSize,
ServingEndpointDetailed,
)
from databricks.sdk.service.sql import (
CreateWarehouseRequestWarehouseType,
GetResponse,
Expand Down Expand Up @@ -1106,3 +1113,27 @@ def remove(storage_credential: StorageCredentialInfo):
ws.storage_credentials.delete(storage_credential.name, force=True)

yield from factory("storage_credential", create, remove)


@pytest.fixture
def make_serving_endpoint(ws, make_random, make_model):
def create() -> Wait[ServingEndpointDetailed]:
endpoint_name = make_random(4)
model = make_model()
endpoint = ws.serving_endpoints.create(
endpoint_name,
EndpointCoreConfigInput(
served_models=[
ServedModelInput(model.name, "1", ServedModelInputWorkloadSize.SMALL, scale_to_zero_enabled=True)
]
),
)
return endpoint

def remove(endpoint_name: str):
try:
ws.serving_endpoints.delete(endpoint_name)
except RuntimeError as e:
logger.info(f"Can't remove endpoint {e}")

yield from factory("Serving endpoint", create, remove)
1 change: 1 addition & 0 deletions src/databricks/labs/ucx/workspace_access/manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ def factory(
generic.Listing(ws.warehouses.list, "id", "sql/warehouses"),
generic.Listing(ws.jobs.list, "job_id", "jobs"),
generic.Listing(ws.pipelines.list_pipelines, "pipeline_id", "pipelines"),
generic.Listing(ws.serving_endpoints.list, "id", "serving-endpoints"),
generic.Listing(generic.experiments_listing(ws), "experiment_id", "experiments"),
generic.Listing(generic.models_listing(ws, num_threads), "id", "registered-models"),
generic.Listing(generic.tokens_and_passwords, "object_id", "authorization"),
Expand Down
28 changes: 28 additions & 0 deletions tests/integration/workspace_access/test_generic.py
Original file line number Diff line number Diff line change
Expand Up @@ -411,3 +411,31 @@ def test_verify_permissions(ws, make_group, make_job, make_job_permissions):
result = task()

assert result


@retried(on=[NotFound], timeout=timedelta(minutes=3))
def test_endpoints(
ws, make_group, make_serving_endpoint, make_serving_endpoint_permissions
): # pylint: disable=invalid-name
group_a = make_group()
group_b = make_group()
endpoint = make_serving_endpoint()
make_serving_endpoint_permissions(
object_id=endpoint.response.id,
permission_level=PermissionLevel.CAN_MANAGE,
group_name=group_a.display_name,
)

generic_permissions = GenericPermissionsSupport(ws, [Listing(ws.serving_endpoints.list, "id", "serving-endpoints")])
before = generic_permissions.load_as_dict("serving-endpoints", endpoint.response.id)
assert before[group_a.display_name] == PermissionLevel.CAN_MANAGE

apply_tasks(
generic_permissions,
[
MigratedGroup.partial_info(group_a, group_b),
],
)

after = generic_permissions.load_as_dict("serving-endpoints", endpoint.response.id)
assert after[group_b.display_name] == PermissionLevel.CAN_MANAGE
1 change: 1 addition & 0 deletions tests/unit/workspace_access/test_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,7 @@ def test_factory(mocker):
"secrets",
"entitlements",
"roles",
'serving-endpoints',
"ANY FILE",
"FUNCTION",
"ANONYMOUS FUNCTION",
Expand Down

0 comments on commit e034cf5

Please sign in to comment.