Skip to content

Commit f695ead

Browse files
committed
project update: implement Volume and SVM removal
1 parent f1ca501 commit f695ead

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

python/understack-workflows/tests/test_keystone_project.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -395,10 +395,49 @@ def test_handle_project_updated_svm_tag_removed(
395395
mock_netapp_manager.check_if_svm_exists.assert_called_once_with(
396396
project_id="test-project-123"
397397
)
398+
# Should call cleanup_project when tag is removed but SVM exists
399+
mock_netapp_manager.cleanup_project.assert_called_once_with("test-project-123")
398400
# Should not create SVM or volume when tag is removed
399401
mock_netapp_manager.create_svm.assert_not_called()
400402
mock_netapp_manager.create_volume.assert_not_called()
401403

404+
@patch("understack_workflows.oslo_event.keystone_project.NetAppManager")
405+
@patch("understack_workflows.oslo_event.keystone_project._keystone_project_tags")
406+
@patch("builtins.open")
407+
def test_handle_project_updated_svm_tag_removed_no_svm(
408+
self,
409+
mock_open,
410+
mock_tags,
411+
mock_netapp_class,
412+
mock_conn,
413+
mock_nautobot,
414+
valid_update_event_data,
415+
):
416+
"""Test project update when SVM_UNDERSTACK tag is removed but no SVM exists."""
417+
# Project no longer has SVM tag
418+
mock_tags.return_value = ["tag1", "tag2"]
419+
420+
mock_netapp_manager = MagicMock()
421+
mock_netapp_manager.check_if_svm_exists.return_value = (
422+
False # No SVM exists and tag removed
423+
)
424+
mock_netapp_class.return_value = mock_netapp_manager
425+
426+
result = handle_project_updated(
427+
mock_conn, mock_nautobot, valid_update_event_data
428+
)
429+
430+
assert result == 0
431+
mock_tags.assert_called_once_with(mock_conn, "test-project-123")
432+
mock_netapp_manager.check_if_svm_exists.assert_called_once_with(
433+
project_id="test-project-123"
434+
)
435+
# Should not call cleanup_project when no SVM exists
436+
mock_netapp_manager.cleanup_project.assert_not_called()
437+
# Should not create SVM or volume
438+
mock_netapp_manager.create_svm.assert_not_called()
439+
mock_netapp_manager.create_volume.assert_not_called()
440+
402441
@patch("understack_workflows.oslo_event.keystone_project.NetAppManager")
403442
@patch("understack_workflows.oslo_event.keystone_project._keystone_project_tags")
404443
@patch("builtins.open")

python/understack-workflows/understack_workflows/oslo_event/keystone_project.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,12 +96,13 @@ def handle_project_updated(
9696

9797
# Tag removed
9898
if not project_is_svm_enabled and svm_exists:
99-
logger.error(
99+
logger.warning(
100100
"SVM os-%s exists on NetApp but project %s is no longer tagged with %s",
101101
event.project_id,
102102
event.project_id,
103103
SVM_PROJECT_TAG,
104104
)
105+
netapp_manager.cleanup_project(event.project_id)
105106
# Tag added
106107
elif project_is_svm_enabled and not svm_exists:
107108
svm_name = _create_svm_and_volume(netapp_manager, event)

0 commit comments

Comments
 (0)