Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions src/openstack_mcp_server/tools/image_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ def register_tools(self, mcp: FastMCP):
mcp.tool()(self.get_image)
mcp.tool()(self.get_images)
mcp.tool()(self.create_image)
mcp.tool()(self.delete_image)

def get_image(self, id: str) -> Image:
"""
Expand Down Expand Up @@ -121,3 +122,13 @@ def create_image(self, image_data: CreateImage) -> Image:

image = conn.get_image(created_image.id)
return Image(**image)

def delete_image(self, image_id: str) -> None:
"""
Delete an OpenStack image.

:param image_id: The ID of the image to delete.
:return: None
"""
conn = get_openstack_conn()
conn.image.delete_image(image_id)
13 changes: 13 additions & 0 deletions tests/tools/test_image_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -297,3 +297,16 @@ def test_create_image_success_with_import_options(
assert mock_get_openstack_conn_image.get_image.called_once_with(
mock_image["id"],
)

def test_delete_image_success(self, mock_get_openstack_conn_image):
"""Test deleting an image successfully."""
mock_conn = mock_get_openstack_conn_image
image_id = "img-delete-123-456"

mock_conn.image.delete_image.return_value = None

image_tools = ImageTools()
result = image_tools.delete_image(image_id)

assert result is None
mock_conn.image.delete_image.assert_called_once_with(image_id)