Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RunCommandv1: uninstall extension before installing it #3531

Merged
merged 1 commit into from
Nov 27, 2024
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
38 changes: 29 additions & 9 deletions lisa/sut_orchestrator/azure/features.py
Original file line number Diff line number Diff line change
Expand Up @@ -3091,18 +3091,38 @@ def delete(
self,
name: str = "",
timeout: int = 60 * 25,
) -> None:
ignore_not_found: bool = False,
) -> bool:
platform: AzurePlatform = self._platform # type: ignore
compute_client = get_compute_client(platform)
self._log.debug(f"uninstall extension: {name}")

operation = compute_client.virtual_machine_extensions.begin_delete(
resource_group_name=self._resource_group_name,
vm_name=self._vm_name,
vm_extension_name=name,
)
# no return for this operation
wait_operation(operation, timeout)
try:
operation = compute_client.virtual_machine_extensions.begin_delete(
resource_group_name=self._resource_group_name,
vm_name=self._vm_name,
vm_extension_name=name,
)
# no return for this operation
wait_operation(operation, timeout)
return True
except HttpResponseError as identifier:
error_message = str(identifier)
if "was not found" in error_message:
if ignore_not_found:
self._log.info(
f"Extension '{name}' not installed, ignoring deletion."
)
return False
else:
raise LisaException(
f"Extension '{name}' not found. Cannot delete "
"non-existent extension."
) from identifier
else:
raise LisaException(
"Unexpected error occurred while deleting extension "
f"'{name}': {error_message}"
) from identifier

def list_all(self) -> Any:
platform: AzurePlatform = self._platform # type: ignore
Expand Down
19 changes: 5 additions & 14 deletions microsoft/testsuites/vm_extensions/AzureMonitorAgentLinux.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from typing import Any

from assertpy import assert_that
from azure.core.exceptions import HttpResponseError

from lisa import (
Logger,
Expand All @@ -23,7 +22,7 @@
Ubuntu,
)
from lisa.sut_orchestrator.azure.features import AzureExtension
from lisa.util import LisaException, SkippedException
from lisa.util import SkippedException


@TestSuiteMetadata(
Expand Down Expand Up @@ -53,18 +52,10 @@ def verify_azuremonitoragent_linux(self, log: Logger, node: Node) -> None:
# Run VM Extension
extension = node.features[AzureExtension]
extension_name = "Microsoft.Azure.Monitor.AzureMonitorLinuxAgent"
try:
# Delete VM Extension if already present
extension.delete(extension_name)
is_extension_present = True
except HttpResponseError as identifier:
if any(s in str(identifier) for s in ["was not found"]):
log.info("AzureMonitorLinuxAgent is not already installed")
else:
raise LisaException(
f"unexpected exception happened {identifier} during delete"
f" extension {extension_name}"
) from identifier
is_extension_present = False
is_extension_present = extension.delete(
name=extension_name, ignore_not_found=True
)

extension_result = extension.create_or_update(
name=extension_name,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
from lisa.sut_orchestrator import AZURE
from lisa.sut_orchestrator.azure.features import AzureExtension
from lisa.sut_orchestrator.azure.tools import Waagent
from lisa.util import LisaException
from microsoft.testsuites.vm_extensions.runtime_extensions.common import (
check_waagent_version_supported,
execute_command,
Expand All @@ -40,17 +39,7 @@ def _create_and_verify_extension_run(
) -> None:
extension = node.features[AzureExtension]
extension_name = "CustomScript"
try:
# Delete VM Extension if already present
extension.delete(extension_name)
except HttpResponseError as identifier:
if any(s in str(identifier) for s in ["was not found"]):
node.log.info(f"{extension_name} is not installed")
else:
raise LisaException(
f"unexpected exception happened {identifier} during delete"
f" extension {extension_name}"
) from identifier
extension.delete(name=extension_name, ignore_not_found=True)

def enable_extension() -> Any:
result = extension.create_or_update(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,12 @@ def _create_and_verify_extension_run(
assert_exception: Optional[Any] = None,
) -> None:
extension = node.features[AzureExtension]
extension_name = "RunCommandv1"
extension.delete(name=extension_name, ignore_not_found=True)

def enable_extension() -> Any:
result = extension.create_or_update(
name="RunCommandv1",
name=extension_name,
publisher="Microsoft.CPlat.Core",
type_="RunCommandLinux",
type_handler_version="1.0",
Expand Down
Loading