Skip to content

Commit

Permalink
feat: Added deleting a resource by its ID
Browse files Browse the repository at this point in the history
  • Loading branch information
1101-1 committed Oct 11, 2023
1 parent 8614ef1 commit 502e83e
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 7 deletions.
19 changes: 17 additions & 2 deletions plugins/azure/resoto_plugin_azure/azure_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ def list(self, spec: AzureApiSpec, **kwargs: Any) -> List[Json]:
def for_location(self, location: str) -> AzureClient:
pass

@abstractmethod
def delete(self, resource_id: str) -> bool:
pass

@staticmethod
def __create_management_client(
credential: AzureCredentials, subscription_id: str, resource_group: Optional[str] = None
Expand All @@ -66,8 +70,19 @@ def list(self, spec: AzureApiSpec, **kwargs: Any) -> List[Json]:
else:
raise e

def delete(self, resource_id: str) -> None:
self.client.resources.delete_by_id(resource_id)
def delete(self, resource_id: str) -> bool:
try:
self._delete_by_id(resource_id, api_version="2021-04-01")
except HttpResponseError as e:
if e.error and e.error.code == "ResourceNotFoundError":
return False
else:
raise e

return True

def _delete_by_id(self, resource_id: str, api_version: str) -> None:
self.client.resources._delete_by_id_initial(resource_id=resource_id, api_version=api_version)

# noinspection PyProtectedMember
def _call(self, spec: AzureApiSpec, **kwargs: Any) -> List[Json]:
Expand Down
22 changes: 17 additions & 5 deletions plugins/azure/resoto_plugin_azure/resource/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from azure.core.utils import CaseInsensitiveDict

from resoto_plugin_azure.azure_client import AzureApiSpec, AzureClient
from resoto_plugin_azure.config import AzureCredentials
from resoto_plugin_azure.config import AzureCredentials, AzureAccountConfig
from resotolib.baseresources import BaseResource, Cloud, EdgeType, BaseAccount, BaseRegion, ModelReference
from resotolib.core.actions import CoreFeedback
from resotolib.graph import Graph, EdgeKey
Expand All @@ -18,6 +18,14 @@
from resotolib.types import Json

log = logging.getLogger("resoto.plugins.azure")


def get_client(builder: GraphBuilder) -> AzureClient:
subscription_id = builder.subscription.subscription_id
credential = AzureAccountConfig().credentials()
return AzureClient.create(credential=credential, subscription_id=subscription_id)


T = TypeVar("T")


Expand All @@ -28,10 +36,14 @@ class AzureResource(BaseResource):
# Which API to call and what to expect in the result.
api_spec: ClassVar[Optional[AzureApiSpec]] = None

def delete(self, graph: Any) -> bool:
# TODO: implement me.
# get_client().delete(self.id)
return False
def delete(self, graph: GraphBuilder) -> bool:
"""
Deletes a resource by ID.
Returns:
bool: True if the resource was successfully deleted; False otherwise.
"""
return get_client(graph).delete(self.id)

def pre_process(self, graph_builder: GraphBuilder, source: Json) -> None:
"""
Expand Down
3 changes: 3 additions & 0 deletions plugins/azure/test/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ def create(*args: Any, **kwargs: Any) -> StaticFileAzureClient:
def for_location(self, location: str) -> AzureClient:
return self

def delete(self, resource_id: str) -> bool:
return False


@fixture
def config() -> AzureConfig:
Expand Down

0 comments on commit 502e83e

Please sign in to comment.