From f253a2dbc270fa6d75c3853067ac23f2789a6d8d Mon Sep 17 00:00:00 2001 From: Vishesh Date: Fri, 23 Jun 2023 13:46:22 +0530 Subject: [PATCH] server: Add check on host's status while deleting config drive on host cache (#7584) This PR adds a check on host's status. Without this if the agent is not in Up or Connecting state, expunging of a VM fails. Steps to reproduce: - Enable vm.configdrive.force.host.cache.use in Global Configuration. - Create a L2 network with config drive - Deploy a vm with the L2 network created in previous step - Stop the vm and destroy vm (not expunge it) - Stop the cloudstack-agent on the VM's host - Expunge the vm Fixes: #7428 (cherry picked from commit 0acc66f51d7a0fddc59b7e416056a5e744e321dd) Signed-off-by: Rohit Yadav --- .../cloud/network/element/ConfigDriveNetworkElement.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/server/src/main/java/com/cloud/network/element/ConfigDriveNetworkElement.java b/server/src/main/java/com/cloud/network/element/ConfigDriveNetworkElement.java index 7bbf39a66555..8949b92ef9e5 100644 --- a/server/src/main/java/com/cloud/network/element/ConfigDriveNetworkElement.java +++ b/server/src/main/java/com/cloud/network/element/ConfigDriveNetworkElement.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.network.element; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -50,6 +51,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.exception.UnsupportedServiceException; import com.cloud.host.dao.HostDao; +import com.cloud.host.Status; import com.cloud.hypervisor.HypervisorGuruManager; import com.cloud.network.Network; import com.cloud.network.Network.Capability; @@ -571,6 +573,10 @@ private boolean deleteConfigDriveIsoOnHostCache(final VirtualMachine vm, final L LOG.warn(String.format("Host %s appears to be unavailable, skipping deletion of config-drive ISO on host cache", hostId)); return false; } + if (!Arrays.asList(Status.Up, Status.Connecting).contains(hostVO.getStatus())) { + LOG.warn(String.format("Host status %s is not Up or Connecting, skipping deletion of config-drive ISO on host cache", hostId)); + return false; + } final HandleConfigDriveIsoAnswer answer = (HandleConfigDriveIsoAnswer) agentManager.easySend(hostId, configDriveIsoCommand); if (answer == null) {