Skip to content
Closed
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 @@ -18,6 +18,7 @@ def register_tools(self, mcp: FastMCP):

mcp.tool()(self.get_images)
mcp.tool()(self.create_image)
mcp.tool()(self.delete_image)

def get_images(
self,
Expand Down Expand Up @@ -112,3 +113,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)
28 changes: 28 additions & 0 deletions tests/tools/test_image_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

from unittest.mock import Mock

import pytest

from openstack.exceptions import NotFoundException

from openstack_mcp_server.tools.image_tools import ImageTools
from openstack_mcp_server.tools.request.image import CreateImage
from openstack_mcp_server.tools.response.image import Image
Expand Down Expand Up @@ -281,3 +285,27 @@ 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)

def test_delete_image_not_found(self, mock_get_openstack_conn_image):
"""Test deleting an image that does not exist."""
mock_conn = mock_get_openstack_conn_image
image_id = "img-delete-123-456"
mock_conn.image.delete_image.side_effect = NotFoundException()

image_tools = ImageTools()
with pytest.raises(NotFoundException):
image_tools.delete_image(image_id)
mock_conn.image.delete_image.assert_called_once_with(image_id)