Skip to content

Commit 371a9cd

Browse files
committed
feat(image): Add delete image tool (#20)
1 parent 5f17b3f commit 371a9cd

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

src/openstack_mcp_server/tools/image_tools.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ def register_tools(self, mcp: FastMCP):
1818

1919
mcp.tool()(self.get_images)
2020
mcp.tool()(self.create_image)
21+
mcp.tool()(self.delete_image)
2122

2223
def get_images(
2324
self,
@@ -112,3 +113,13 @@ def create_image(self, image_data: CreateImage) -> Image:
112113

113114
image = conn.get_image(created_image.id)
114115
return Image(**image)
116+
117+
def delete_image(self, image_id: str) -> None:
118+
"""
119+
Delete an OpenStack image.
120+
121+
:param image_id: The ID of the image to delete.
122+
:return: None
123+
"""
124+
conn = get_openstack_conn()
125+
conn.image.delete_image(image_id)

tests/tools/test_image_tools.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
from unittest.mock import Mock
44

5+
import pytest
6+
7+
from openstack.exceptions import NotFoundException
8+
59
from openstack_mcp_server.tools.image_tools import ImageTools
610
from openstack_mcp_server.tools.request.image import CreateImage
711
from openstack_mcp_server.tools.response.image import Image
@@ -281,3 +285,27 @@ def test_create_image_success_with_import_options(
281285
assert mock_get_openstack_conn_image.get_image.called_once_with(
282286
mock_image["id"],
283287
)
288+
289+
def test_delete_image_success(self, mock_get_openstack_conn_image):
290+
"""Test deleting an image successfully."""
291+
mock_conn = mock_get_openstack_conn_image
292+
image_id = "img-delete-123-456"
293+
294+
mock_conn.image.delete_image.return_value = None
295+
296+
image_tools = ImageTools()
297+
result = image_tools.delete_image(image_id)
298+
299+
assert result is None
300+
mock_conn.image.delete_image.assert_called_once_with(image_id)
301+
302+
def test_delete_image_not_found(self, mock_get_openstack_conn_image):
303+
"""Test deleting an image that does not exist."""
304+
mock_conn = mock_get_openstack_conn_image
305+
image_id = "img-delete-123-456"
306+
mock_conn.image.delete_image.side_effect = NotFoundException()
307+
308+
image_tools = ImageTools()
309+
with pytest.raises(NotFoundException):
310+
image_tools.delete_image(image_id)
311+
mock_conn.image.delete_image.assert_called_once_with(image_id)

0 commit comments

Comments
 (0)