Skip to content

Commit b6545bd

Browse files
committed
cks: fix k8s cluster deletion(network)
Signed-off-by: Abhishek Kumar <abhishek.mrt22@gmail.com>
1 parent 93d908f commit b6545bd

1 file changed

Lines changed: 29 additions & 7 deletions

File tree

plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterDestroyWorker.java

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
import com.cloud.kubernetes.cluster.KubernetesClusterVmMap;
3838
import com.cloud.kubernetes.cluster.KubernetesClusterVmMapVO;
3939
import com.cloud.network.IpAddress;
40-
import com.cloud.network.Network;
4140
import com.cloud.network.dao.NetworkVO;
4241
import com.cloud.network.rules.FirewallRule;
4342
import com.cloud.user.Account;
@@ -48,6 +47,7 @@
4847
import com.cloud.vm.ReservationContext;
4948
import com.cloud.vm.ReservationContextImpl;
5049
import com.cloud.vm.UserVmVO;
50+
import com.cloud.vm.VMInstanceVO;
5151

5252
public class KubernetesClusterDestroyWorker extends KubernetesClusterResourceModifierActionWorker {
5353

@@ -129,7 +129,7 @@ private void destroyKubernetesClusterNetwork() throws ManagementServerException
129129

130130
private void deleteKubernetesClusterNetworkRules() throws ManagementServerException {
131131
NetworkVO network = networkDao.findById(kubernetesCluster.getNetworkId());
132-
if (network == null || !Network.GuestType.Isolated.equals(network.getGuestType())) {
132+
if (network == null) {
133133
return;
134134
}
135135
List<Long> removedVmIds = new ArrayList<>();
@@ -189,17 +189,39 @@ private void validateClusterVMsDestroyed() {
189189
public boolean destroy() throws CloudRuntimeException {
190190
init();
191191
validateClusterSate();
192-
if (LOGGER.isInfoEnabled()) {
193-
LOGGER.info(String.format("Destroying Kubernetes cluster ID: %s", kubernetesCluster.getUuid()));
194-
}
195-
stateTransitTo(kubernetesCluster.getId(), KubernetesCluster.Event.DestroyRequested);
196192
this.clusterVMs = kubernetesClusterVmMapDao.listByClusterId(kubernetesCluster.getId());
197-
boolean vmsDestroyed = destroyClusterVMs();
198193
boolean cleanupNetwork = true;
199194
final KubernetesClusterDetailsVO clusterDetails = kubernetesClusterDetailsDao.findDetail(kubernetesCluster.getId(), "networkCleanup");
200195
if (clusterDetails != null) {
201196
cleanupNetwork = Boolean.parseBoolean(clusterDetails.getValue());
202197
}
198+
if (cleanupNetwork) { // if network has additional VM, cannot proceed with cluster destroy
199+
NetworkVO network = networkDao.findById(kubernetesCluster.getNetworkId());
200+
if (network == null) {
201+
logAndThrow(Level.ERROR, String.format("Failed to find network for Kubernetes cluster ID: %s", kubernetesCluster.getUuid()));
202+
}
203+
List<VMInstanceVO> networkVMs = vmInstanceDao.listNonRemovedVmsByTypeAndNetwork(network.getId(), null);
204+
if (networkVMs.size() > clusterVMs.size()) {
205+
logAndThrow(Level.ERROR, String.format("Network ID: %s for Kubernetes cluster ID: %s has instances using it which are not part of the Kubernetes cluster", kubernetesCluster.getUuid()));
206+
}
207+
for (VMInstanceVO vm : networkVMs) {
208+
boolean vmFoundInKubernetesCluster = false;
209+
for (KubernetesClusterVmMap clusterVM : clusterVMs) {
210+
if (vm.getId() == clusterVM.getVmId()) {
211+
vmFoundInKubernetesCluster = true;
212+
break;
213+
}
214+
}
215+
if (!vmFoundInKubernetesCluster) {
216+
logAndThrow(Level.ERROR, String.format("VM ID: %s which is not a part of Kubernetes cluster ID: %s is using its network ID: %s", vm.getUuid(), kubernetesCluster.getUuid(), network.getUuid()));
217+
}
218+
}
219+
}
220+
if (LOGGER.isInfoEnabled()) {
221+
LOGGER.info(String.format("Destroying Kubernetes cluster ID: %s", kubernetesCluster.getUuid()));
222+
}
223+
stateTransitTo(kubernetesCluster.getId(), KubernetesCluster.Event.DestroyRequested);
224+
boolean vmsDestroyed = destroyClusterVMs();
203225
// if there are VM's that were not expunged, we can not delete the network
204226
if (vmsDestroyed) {
205227
if (cleanupNetwork) {

0 commit comments

Comments
 (0)