You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2017/02/06 21:16:34 UTC
jclouds-labs git commit: Cleanup orphaned availability sets
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 <na...@apache.org>
Authored: Mon Feb 6 21:13:57 2017 +0100
Committer: Ignasi Barrera <na...@apache.org>
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()) {