Skip to content

Commit 0fcbce2

Browse files
authored
Remove redundant internal methods from create_account_group (#3395)
<!-- REMOVE IRRELEVANT COMMENTS BEFORE CREATING A PULL REQUEST --> ## Changes changed the signature of create_account_groups and removed the workspace_id parameter and instead retrieve it from accountworkspace._workspaces() which contains the account context workspace_id named parameter <!-- Summary of your changes that are easy to understand. Add screenshots when necessary --> Resolves #3170 ### Functionality - [ ] modified existing command: `databricks labs ucx ...` ### Tests <!-- How is this tested? Please see the checklist below and also describe any other relevant tests --> - [ ] added unit tests
1 parent d0275ba commit 0fcbce2

File tree

5 files changed

+31
-47
lines changed

5 files changed

+31
-47
lines changed

src/databricks/labs/ucx/account/workspaces.py

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,11 @@ def sync_workspace_info(self, workspaces: list[Workspace] | None = None):
7676
except (PermissionDenied, NotFound, ValueError):
7777
logger.warning(f"Failed to save workspace info for {ws.config.host}")
7878

79-
def create_account_level_groups(self, prompts: Prompts, workspace_ids: list[int] | None = None):
79+
def create_account_level_groups(self, prompts: Prompts):
8080
acc_groups = self._get_account_groups()
81-
workspace_ids = self._get_valid_workspaces_ids(workspace_ids)
81+
workspace_ids = [workspace.workspace_id for workspace in self._workspaces()]
82+
if not workspace_ids:
83+
raise ValueError("The workspace ids provided are not found in the account, Please check and try again.")
8284
all_valid_workspace_groups = self._get_valid_workspaces_groups(prompts, workspace_ids)
8385

8486
for group_name, valid_group in all_valid_workspace_groups.items():
@@ -136,26 +138,6 @@ def _try_create_account_groups(
136138
logger.info(f"Group {group_name} already exist in the account, ignoring")
137139
return None
138140

139-
def _get_valid_workspaces_ids(self, workspace_ids: list[int] | None = None) -> list[int]:
140-
all_workspace_ids = [workspace.workspace_id for workspace in self._workspaces()]
141-
if not workspace_ids:
142-
return all_workspace_ids
143-
# TODO: remove this method and rely on _include_workspace_ids
144-
145-
valid_workspace_ids = []
146-
for workspace_id in workspace_ids:
147-
if workspace_id in all_workspace_ids:
148-
valid_workspace_ids.append(workspace_id)
149-
else:
150-
logger.info(f"Workspace id {workspace_id} not found on the account")
151-
152-
if not valid_workspace_ids:
153-
raise ValueError("No workspace ids provided in the configuration found in the account")
154-
155-
workspace_ids_str = ','.join(str(x) for x in valid_workspace_ids)
156-
logger.info(f"Creating account groups for workspaces IDs : {workspace_ids_str}")
157-
return valid_workspace_ids
158-
159141
def _add_members_to_acc_group(
160142
self, acc_client: AccountClient, acc_group_id: str, group_name: str, valid_group: Group
161143
):

src/databricks/labs/ucx/cli.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ def create_account_groups(
170170
"""
171171
if not ctx:
172172
ctx = AccountContext(a, named_parameters)
173-
ctx.account_workspaces.create_account_level_groups(prompts, ctx.workspace_ids)
173+
ctx.account_workspaces.create_account_level_groups(prompts)
174174

175175

176176
@ucx.command

tests/integration/account/test_account.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def test_create_account_level_groups(
3838

3939
group_display_name = f"created_by_ucx_regular_group-{suffix}"
4040
make_group(display_name=group_display_name, members=[make_user().id])
41-
AccountWorkspaces(acc).create_account_level_groups(MockPrompts({}), [ws.get_workspace_id()])
41+
AccountWorkspaces(acc, [ws.get_workspace_id()]).create_account_level_groups(MockPrompts({}))
4242

4343
@retried(on=[KeyError], timeout=timedelta(minutes=2))
4444
def get_group(display_name: str) -> Group:

tests/unit/account/test_workspaces.py

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,8 @@ def test_create_acc_groups_should_create_acc_group_if_no_group_found_in_account(
8181
acc_client.get_workspace_client.return_value = ws
8282
acc_client.groups.create.return_value = group
8383

84-
account_workspaces = AccountWorkspaces(acc_client)
85-
account_workspaces.create_account_level_groups(MockPrompts({}), [123, 46])
84+
account_workspaces = AccountWorkspaces(acc_client, [123, 46])
85+
account_workspaces.create_account_level_groups(MockPrompts({}))
8686

8787
acc_client.groups.create.assert_called_with(
8888
display_name="de",
@@ -109,9 +109,9 @@ def test_create_acc_groups_should_throw_exception(acc_client):
109109
acc_client.get_workspace_client.return_value = ws
110110
acc_client.groups.create.return_value = group
111111

112-
account_workspaces = AccountWorkspaces(acc_client)
112+
account_workspaces = AccountWorkspaces(acc_client, [123])
113113
with pytest.raises(ValueError):
114-
account_workspaces.create_account_level_groups(MockPrompts({}), [123])
114+
account_workspaces.create_account_level_groups(MockPrompts({}))
115115

116116
ws.groups.list.assert_not_called()
117117

@@ -133,8 +133,8 @@ def test_create_acc_groups_should_filter_system_groups(acc_client):
133133
acc_client.get_workspace_client.return_value = ws
134134
acc_client.groups.create.return_value = group
135135

136-
account_workspaces = AccountWorkspaces(acc_client)
137-
account_workspaces.create_account_level_groups(MockPrompts({}), [123])
136+
account_workspaces = AccountWorkspaces(acc_client, [123])
137+
account_workspaces.create_account_level_groups(MockPrompts({}))
138138

139139
acc_client.groups.create.assert_not_called()
140140

@@ -164,7 +164,7 @@ def test_create_acc_groups_should_create_acc_group_with_appropriate_members(acc_
164164
]
165165

166166
ws = create_autospec(WorkspaceClient)
167-
account_workspaces = AccountWorkspaces(acc_client)
167+
account_workspaces = AccountWorkspaces(acc_client, [123])
168168

169169
group = Group(
170170
id="12",
@@ -203,7 +203,7 @@ def test_create_acc_groups_should_create_acc_group_with_appropriate_members(acc_
203203
acc_client.get_workspace_client.return_value = ws
204204
acc_client.groups.create.return_value = group
205205

206-
account_workspaces.create_account_level_groups(MockPrompts({}), [123])
206+
account_workspaces.create_account_level_groups(MockPrompts({}))
207207

208208
acc_client.groups.create.assert_called_with(
209209
display_name="de",
@@ -276,8 +276,8 @@ def test_create_acc_groups_should_not_create_group_if_exists_in_account(acc_clie
276276
ws.groups.list.return_value = [group]
277277
ws.groups.get.return_value = group
278278
acc_client.get_workspace_client.return_value = ws
279-
account_workspaces = AccountWorkspaces(acc_client)
280-
account_workspaces.create_account_level_groups(MockPrompts({}), [123])
279+
account_workspaces = AccountWorkspaces(acc_client, [123])
280+
account_workspaces.create_account_level_groups(MockPrompts({}))
281281

282282
acc_client.groups.create.assert_not_called()
283283

@@ -307,8 +307,8 @@ def get_workspace_client(workspace) -> WorkspaceClient:
307307

308308
acc_client.get_workspace_client.side_effect = get_workspace_client
309309

310-
account_workspaces = AccountWorkspaces(acc_client)
311-
account_workspaces.create_account_level_groups(MockPrompts({}), [123, 456])
310+
account_workspaces = AccountWorkspaces(acc_client, [123, 456])
311+
account_workspaces.create_account_level_groups(MockPrompts({}))
312312

313313
acc_client.groups.create.assert_any_call(display_name="de")
314314
acc_client.groups.create.assert_any_call(display_name="security_grp")
@@ -342,8 +342,8 @@ def get_workspace_client(workspace) -> WorkspaceClient:
342342
acc_client.groups.create.return_value = group
343343
acc_client.get_workspace_client.side_effect = get_workspace_client
344344

345-
account_workspaces = AccountWorkspaces(acc_client)
346-
account_workspaces.create_account_level_groups(MockPrompts({}), [123, 456])
345+
account_workspaces = AccountWorkspaces(acc_client, [123, 456])
346+
account_workspaces.create_account_level_groups(MockPrompts({}))
347347

348348
acc_client.groups.create.assert_called_once_with(display_name="de")
349349
acc_client.groups.patch.assert_called_once_with(
@@ -391,14 +391,13 @@ def get_workspace_client(workspace) -> WorkspaceClient:
391391
ws2.groups.get.return_value = group_2
392392
acc_client.get_workspace_client.side_effect = get_workspace_client
393393

394-
account_workspaces = AccountWorkspaces(acc_client)
394+
account_workspaces = AccountWorkspaces(acc_client, [123, 456])
395395
account_workspaces.create_account_level_groups(
396396
MockPrompts(
397397
{
398398
r'Group de does not have the same amount of members in workspace ': 'yes',
399399
}
400-
),
401-
[123, 456],
400+
)
402401
)
403402

404403
acc_client.groups.create.assert_any_call(display_name="de")
@@ -423,8 +422,8 @@ def test_acc_ws_get_should_not_throw(acc_client):
423422
ws.groups.list.return_value = [group]
424423
ws.groups.get.side_effect = NotFound
425424
acc_client.get_workspace_client.return_value = ws
426-
account_workspaces = AccountWorkspaces(acc_client)
427-
account_workspaces.create_account_level_groups(MockPrompts({}), [123])
425+
account_workspaces = AccountWorkspaces(acc_client, [123])
426+
account_workspaces.create_account_level_groups(MockPrompts({}))
428427

429428
acc_client.groups.create.assert_not_called()
430429

@@ -435,7 +434,7 @@ def test_create_acc_groups_should_not_throw_if_acc_grp_exists(acc_client):
435434
]
436435

437436
ws = create_autospec(WorkspaceClient)
438-
account_workspaces = AccountWorkspaces(acc_client)
437+
account_workspaces = AccountWorkspaces(acc_client, [123])
439438

440439
group = Group(id="12", display_name="de", members=[ComplexValue(display="test-user-1", value="1")])
441440

@@ -444,7 +443,7 @@ def test_create_acc_groups_should_not_throw_if_acc_grp_exists(acc_client):
444443
acc_client.get_workspace_client.return_value = ws
445444
acc_client.groups.create.side_effect = ResourceConflict
446445

447-
account_workspaces.create_account_level_groups(MockPrompts({}), [123])
446+
account_workspaces.create_account_level_groups(MockPrompts({}))
448447

449448
acc_client.groups.create.assert_called_with(display_name="de")
450449
acc_client.groups.patch.assert_not_called()

tests/unit/test_cli.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -339,9 +339,10 @@ def test_create_account_groups():
339339
a = create_autospec(AccountClient)
340340
w = create_autospec(WorkspaceClient)
341341
a.get_workspace_client.return_value = w
342+
a.workspaces.list.return_value = [Workspace(workspace_id=123)]
342343
w.get_workspace_id.return_value = None
343344
prompts = MockPrompts({})
344-
ctx = AccountContext(a).replace()
345+
ctx = AccountContext(a, {"workspace_ids": "123,456"})
345346
create_account_groups(a, prompts, ctx=ctx)
346347
a.groups.list.assert_called_with(attributes="id")
347348

@@ -353,7 +354,9 @@ def test_create_account_groups_with_id():
353354
w.get_workspace_id.return_value = None
354355
prompts = MockPrompts({})
355356
ctx = AccountContext(a, {"workspace_ids": "123,456"})
356-
with pytest.raises(ValueError, match="No workspace ids provided in the configuration found in the account"):
357+
with pytest.raises(
358+
ValueError, match="The workspace ids provided are not found in the account, Please check and try again."
359+
):
357360
create_account_groups(a, prompts, ctx=ctx)
358361

359362

0 commit comments

Comments
 (0)