Repository: jclouds-labs
Updated Branches:
  refs/heads/master a95905b39 -> 5b125b013


Cleanup orphaned availability sets


Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/5b125b01
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/5b125b01
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/5b125b01

Branch: refs/heads/master
Commit: 5b125b0138f50f1f945ae3ff28c0d61b1ef9434a
Parents: a95905b
Author: Ignasi Barrera <[email protected]>
Authored: Mon Feb 6 21:13:57 2017 +0100
Committer: Ignasi Barrera <[email protected]>
Committed: Mon Feb 6 22:15:49 2017 +0100

----------------------------------------------------------------------
 .../functions/TemplateToAvailabilitySet.java    | 16 +++++++++--
 .../arm/compute/strategy/CleanupResources.java  | 30 ++++++++++++++++++++
 2 files changed, 43 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/5b125b01/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/TemplateToAvailabilitySet.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/TemplateToAvailabilitySet.java
 
b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/TemplateToAvailabilitySet.java
index 4e1adeb..bf334a0 100644
--- 
a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/TemplateToAvailabilitySet.java
+++ 
b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/TemplateToAvailabilitySet.java
@@ -18,6 +18,9 @@ package org.jclouds.azurecompute.arm.compute.functions;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import javax.annotation.Resource;
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -75,9 +78,16 @@ public class TemplateToAvailabilitySet implements 
Function<Template, Availabilit
             checkArgument(location.equals(availabilitySet.location()), "The 
availability set %s does not belong to location %s",
                   options.getAvailabilitySetName(), location);
          } else {
-            availabilitySet = 
api.getAvailabilitySetApi(resourceGroup).createOrUpdate(options.getAvailabilitySet().name(),
 location,
-                  options.getAvailabilitySet().tags(), 
options.getAvailabilitySet().properties());
-            logger.debug(">> creating availability set [%s]", 
availabilitySet.name());
+            Map<String, String> tags = new HashMap<String, String>();
+            if (options.getAvailabilitySet().tags() != null) {
+               tags.putAll(options.getAvailabilitySet().tags());
+            }
+            tags.put("jclouds", options.getAvailabilitySet().name());
+
+            logger.debug(">> creating availability set [%s]", 
options.getAvailabilitySet().name());
+
+            availabilitySet = 
api.getAvailabilitySetApi(resourceGroup).createOrUpdate(
+                  options.getAvailabilitySet().name(), location, tags, 
options.getAvailabilitySet().properties());
          }
       }
 

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/5b125b01/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CleanupResources.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CleanupResources.java
 
b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CleanupResources.java
index b971931..481f695 100644
--- 
a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CleanupResources.java
+++ 
b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CleanupResources.java
@@ -25,6 +25,7 @@ import javax.inject.Named;
 import javax.inject.Singleton;
 
 import org.jclouds.azurecompute.arm.AzureComputeApi;
+import org.jclouds.azurecompute.arm.domain.AvailabilitySet;
 import org.jclouds.azurecompute.arm.domain.IdReference;
 import org.jclouds.azurecompute.arm.domain.IpConfiguration;
 import org.jclouds.azurecompute.arm.domain.NetworkInterfaceCard;
@@ -95,6 +96,7 @@ public class CleanupResources {
 
       cleanupVirtualMachineNICs(resourceGroupName, virtualMachine);
       cleanupVirtualMachineStorage(resourceGroupName, virtualMachine);
+      cleanupAvailabilitySetIfOrphaned(resourceGroupName, virtualMachine);
 
       return vmDeleted;
    }
@@ -163,6 +165,24 @@ public class CleanupResources {
       return deleted;
    }
 
+   public boolean cleanupAvailabilitySetIfOrphaned(String resourceGroup, 
VirtualMachine virtualMachine) {
+      boolean deleted = false;
+      IdReference availabilitySetRef = 
virtualMachine.properties().availabilitySet();
+
+      if (availabilitySetRef != null) {
+         String name = 
Iterables.getLast(Splitter.on("/").split(availabilitySetRef.id()));
+         AvailabilitySet availabilitySet = 
api.getAvailabilitySetApi(resourceGroup).get(name);
+
+         if (isOrphanedJcloudsAvailabilitySet(availabilitySet)) {
+            logger.debug(">> deleting orphaned availability set %s from 
%s...", name, resourceGroup);
+            URI uri = api.getAvailabilitySetApi(resourceGroup).delete(name);
+            deleted = uri == null || resourceDeleted.apply(uri);
+         }
+      }
+
+      return deleted;
+   }
+
    public boolean deleteResourceGroupIfEmpty(String group) {
       boolean deleted = false;
       if (api.getResourceGroupApi().resources(group).isEmpty()) {
@@ -187,6 +207,16 @@ public class CleanupResources {
             });
    }
 
+   private static boolean isOrphanedJcloudsAvailabilitySet(AvailabilitySet 
availabilitySet) {
+      // We check for the presence of the 'jclouds' tag to make sure we only
+      // delete availability sets that were automatically created by jclouds
+      return availabilitySet != null
+            && availabilitySet.tags() != null
+            && availabilitySet.tags().containsKey("jclouds")
+            && (availabilitySet.properties().virtualMachines() == null || 
availabilitySet.properties()
+                  .virtualMachines().isEmpty());
+   }
+
    private List<String> getNetworkCardInterfaceNames(VirtualMachine 
virtualMachine) {
       List<String> nics = Lists.newArrayList();
       for (IdReference idReference : 
virtualMachine.properties().networkProfile().networkInterfaces()) {

Reply via email to