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()) {
