|
2 | 2 | from typing import Literal |
3 | 3 |
|
4 | 4 | from databricks.sdk import WorkspaceClient |
5 | | -from databricks.sdk.errors import PermissionDenied |
| 5 | +from databricks.sdk.errors import NotFound, PermissionDenied, ResourceDoesNotExist |
6 | 6 |
|
7 | 7 | from databricks.labs.ucx.workspace_access.groups import MigrationState |
8 | 8 | from databricks.labs.ucx.workspace_access.secrets import SecretScopesSupport |
@@ -33,7 +33,11 @@ def verify_applied_permissions( |
33 | 33 | target: Literal["backup", "account"], |
34 | 34 | ): |
35 | 35 | base_attr = "temporary_name" if target == "backup" else "name_in_account" |
36 | | - op = self._ws.permissions.get(object_type, object_id) |
| 36 | + try: |
| 37 | + op = self._ws.permissions.get(object_type, object_id) |
| 38 | + except ResourceDoesNotExist: |
| 39 | + logger.warning(f"removed on backend: {object_type}.{object_id}") |
| 40 | + return |
37 | 41 | for info in migration_state.groups: |
38 | 42 | if not op.access_control_list: |
39 | 43 | continue |
@@ -78,8 +82,16 @@ def verify_roles_and_entitlements(self, migration_state: MigrationState, target: |
78 | 82 | comparison_base = getattr(el, "id_in_workspace" if target == "backup" else "id_in_workspace") |
79 | 83 | comparison_target = getattr(el, target_attr) |
80 | 84 |
|
81 | | - base_group_info = self._ws.groups.get(comparison_base) |
82 | | - target_group_info = self._ws.groups.get(comparison_target) |
| 85 | + try: |
| 86 | + base_group_info = self._ws.groups.get(comparison_base) |
| 87 | + except NotFound: |
| 88 | + logger.warning(f"removed on backend: {comparison_base}") |
| 89 | + continue |
| 90 | + try: |
| 91 | + target_group_info = self._ws.groups.get(comparison_target) |
| 92 | + except NotFound: |
| 93 | + logger.warning(f"removed on backend: {comparison_target}") |
| 94 | + continue |
83 | 95 |
|
84 | 96 | assert base_group_info.roles == target_group_info.roles |
85 | 97 | assert base_group_info.entitlements == target_group_info.entitlements |
|
0 commit comments