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 2018/01/08 14:52:35 UTC
[14/50] [abbrv] jclouds git commit: JCLOUDS-1274: Delete managed
disks when cleaning up VM resources
JCLOUDS-1274: Delete managed disks when cleaning up VM resources
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/ec67fdea
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/ec67fdea
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/ec67fdea
Branch: refs/heads/master
Commit: ec67fdea32cf6ffe96939e8a722bd21cbc215852
Parents: 3a9f578
Author: Ignasi Barrera <na...@apache.org>
Authored: Wed Apr 26 17:54:23 2017 +0200
Committer: Ignasi Barrera <na...@apache.org>
Committed: Thu Apr 27 22:54:08 2017 +0200
----------------------------------------------------------------------
.../arm/compute/strategy/CleanupResources.java | 50 ++++++++++++++++++--
1 file changed, 46 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/ec67fdea/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CleanupResources.java
----------------------------------------------------------------------
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CleanupResources.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CleanupResources.java
index 79f2cd0..1f1a37d 100644
--- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CleanupResources.java
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CleanupResources.java
@@ -16,13 +16,18 @@
*/
package org.jclouds.azurecompute.arm.compute.strategy;
+import static com.google.common.base.Predicates.not;
import static com.google.common.base.Predicates.notNull;
import static com.google.common.collect.Iterables.filter;
import static com.google.common.collect.Iterables.transform;
+import static com.google.common.collect.Maps.filterValues;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.TIMEOUT_RESOURCE_DELETED;
import java.net.URI;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
import javax.annotation.Resource;
import javax.inject.Inject;
@@ -32,17 +37,22 @@ import javax.inject.Singleton;
import org.jclouds.azurecompute.arm.AzureComputeApi;
import org.jclouds.azurecompute.arm.compute.domain.ResourceGroupAndName;
import org.jclouds.azurecompute.arm.domain.AvailabilitySet;
+import org.jclouds.azurecompute.arm.domain.DataDisk;
import org.jclouds.azurecompute.arm.domain.IdReference;
import org.jclouds.azurecompute.arm.domain.IpConfiguration;
+import org.jclouds.azurecompute.arm.domain.ManagedDiskParameters;
import org.jclouds.azurecompute.arm.domain.NetworkInterfaceCard;
import org.jclouds.azurecompute.arm.domain.NetworkSecurityGroup;
+import org.jclouds.azurecompute.arm.domain.OSDisk;
import org.jclouds.azurecompute.arm.domain.VirtualMachine;
import org.jclouds.azurecompute.arm.features.NetworkSecurityGroupApi;
import org.jclouds.compute.functions.GroupNamingConvention;
import org.jclouds.compute.reference.ComputeServiceConstants;
+import org.jclouds.javax.annotation.Nullable;
import org.jclouds.logging.Logger;
import com.google.common.base.Function;
+import com.google.common.base.Joiner;
import com.google.common.base.Predicate;
@Singleton
@@ -80,12 +90,14 @@ public class CleanupResources {
// group. It will be deleted when the resource group is deleted
cleanupVirtualMachineNICs(virtualMachine);
+ cleanupManagedDisks(virtualMachine);
cleanupAvailabilitySetIfOrphaned(virtualMachine);
return vmDeleted;
}
- public void cleanupVirtualMachineNICs(VirtualMachine virtualMachine) {
+ public boolean cleanupVirtualMachineNICs(VirtualMachine virtualMachine) {
+ boolean deleted = true;
for (IdReference nicRef : virtualMachine.properties().networkProfile().networkInterfaces()) {
String nicResourceGroup = nicRef.resourceGroup();
String nicName = nicRef.name();
@@ -95,14 +107,44 @@ public class CleanupResources {
logger.debug(">> destroying nic %s...", nicName);
URI nicDeletionURI = api.getNetworkInterfaceCardApi(nicResourceGroup).delete(nicName);
- resourceDeleted.apply(nicDeletionURI);
+ deleted &= nicDeletionURI == null || resourceDeleted.apply(nicDeletionURI);
for (IdReference publicIp : publicIps) {
String publicIpResourceGroup = publicIp.resourceGroup();
String publicIpName = publicIp.name();
logger.debug(">> deleting public ip nic %s...", publicIpName);
- api.getPublicIPAddressApi(publicIpResourceGroup).delete(publicIpName);
+ deleted &= api.getPublicIPAddressApi(publicIpResourceGroup).delete(publicIpName);
+ }
+ }
+ return deleted;
+ }
+
+ public boolean cleanupManagedDisks(VirtualMachine virtualMachine) {
+ Map<String, URI> deleteJobs = new HashMap<String, URI>();
+
+ OSDisk osDisk = virtualMachine.properties().storageProfile().osDisk();
+ deleteManagedDisk(osDisk.managedDiskParameters(), deleteJobs);
+
+ for (DataDisk dataDisk : virtualMachine.properties().storageProfile().dataDisks()) {
+ deleteManagedDisk(dataDisk.managedDiskParameters(), deleteJobs);
+ }
+
+ Set<String> nonDeletedDisks = filterValues(deleteJobs, not(resourceDeleted)).keySet();
+ if (!nonDeletedDisks.isEmpty()) {
+ logger.warn(">> could not delete disks: %s", Joiner.on(',').join(nonDeletedDisks));
+ }
+
+ return nonDeletedDisks.isEmpty();
+ }
+
+ private void deleteManagedDisk(@Nullable ManagedDiskParameters managedDisk, Map<String, URI> deleteJobs) {
+ if (managedDisk != null) {
+ IdReference diskRef = IdReference.create(managedDisk.id());
+ logger.debug(">> deleting managed disk %s...", diskRef.name());
+ URI uri = api.getDiskApi(diskRef.resourceGroup()).delete(diskRef.name());
+ if (uri != null) {
+ deleteJobs.put(diskRef.name(), uri);
}
}
}
@@ -134,7 +176,7 @@ public class CleanupResources {
}
public boolean cleanupAvailabilitySetIfOrphaned(VirtualMachine virtualMachine) {
- boolean deleted = false;
+ boolean deleted = true;
IdReference availabilitySetRef = virtualMachine.properties().availabilitySet();
if (availabilitySetRef != null) {