Repository: jclouds-labs Updated Branches: refs/heads/master 515f9b5f1 -> 3a63007f4
Cleanup extraneous resources This was not being called as doDestroyNode returns once node deleted. Change based on similar code on gce compute provider Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/3a63007f Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/3a63007f Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/3a63007f Branch: refs/heads/master Commit: 3a63007f4c6e55bd34ad16c32c71798e7fa4c35d Parents: 515f9b5 Author: Duncan Grant <[email protected]> Authored: Thu Aug 24 13:11:47 2017 +0100 Committer: Andrea Turli <[email protected]> Committed: Fri Aug 25 09:09:44 2017 +0200 ---------------------------------------------------------------------- .../arm/compute/AzureComputeService.java | 27 ++++++++++++++++++++ 1 file changed, 27 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/3a63007f/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeService.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeService.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeService.java index dcb9c44..e82110a 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeService.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeService.java @@ -16,9 +16,12 @@ */ package org.jclouds.azurecompute.arm.compute; +import static com.google.common.collect.Iterables.filter; +import static com.google.common.collect.Sets.newHashSet; import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING; import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_SUSPENDED; import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_TERMINATED; +import static org.jclouds.compute.predicates.NodePredicates.all; import java.util.Map; import java.util.Map.Entry; @@ -124,4 +127,28 @@ public class AzureComputeService extends BaseComputeService { cleanupResources.deleteResourceGroupIfEmpty(resourceGroup); } } + + @Override + public void destroyNode(String id) { + // Azure ARM does not return TERMINATED nodes, so in practice no node will never reach the TERMINATED + // state, and the deleted nodes will never be returned. + // In order to be able to clean up the resources associated to the deleted nodes, we have to retrieve + // the details of the nodes before deleting them. + NodeMetadata nodeMetadataBeforeDelete = getNodeMetadata(id); + super.destroyNode(id); + //Node metadata is null after deletion but we still need to clean up incidental resources + cleanUpIncidentalResourcesOfDeadNodes(ImmutableSet.of(nodeMetadataBeforeDelete)); + } + + @Override + public Set<? extends NodeMetadata> destroyNodesMatching(Predicate<? super NodeMetadata> filter) { + // Azure ARM does not return TERMINATED nodes, so in practice no node will never reach the TERMINATED + // state, and the deleted nodes will never be returned. + // In order to be able to clean up the resources associated to the deleted nodes, we have to retrieve + // the details of the nodes before deleting them. + Set<? extends NodeMetadata> nodes = newHashSet(filter(listNodesDetailsMatching(all()), filter)); + super.destroyNodesMatching(filter); // This returns an empty list (a list of null elements) in Azure ARM, as the api does not return deleted nodes + cleanUpIncidentalResourcesOfDeadNodes(nodes); + return nodes; + } }
