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/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/4e664209
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/4e664209
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/4e664209

Branch: refs/heads/master
Commit: 4e6642099748c9ab190aced95f6386a128ea41f0
Parents: b38ce8d
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/blob/4e664209/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeService.java
----------------------------------------------------------------------
diff --git 
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeService.java
 
b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeService.java
index dcb9c44..e82110a 100644
--- 
a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeService.java
+++ 
b/providers/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;
+   }
 }

Reply via email to