Repository: jclouds
Updated Branches:
  refs/heads/master 0e41b45af -> c96cfb617


Fix cleanup when the security group extension is not available.


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

Branch: refs/heads/master
Commit: c96cfb61762bc633846f924a9c45e8d54b6988bd
Parents: 0e41b45
Author: Zack Shoylev <[email protected]>
Authored: Wed May 18 21:04:40 2016 -0500
Committer: Zack Shoylev <[email protected]>
Committed: Thu May 19 12:08:36 2016 -0500

----------------------------------------------------------------------
 .../v2_0/compute/functions/CleanupServer.java     | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/c96cfb61/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/CleanupServer.java
----------------------------------------------------------------------
diff --git 
a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/CleanupServer.java
 
b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/CleanupServer.java
index a12c17f..5a922e8 100644
--- 
a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/CleanupServer.java
+++ 
b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/CleanupServer.java
@@ -30,6 +30,7 @@ import org.jclouds.logging.Logger;
 import org.jclouds.openstack.nova.v2_0.NovaApi;
 import org.jclouds.openstack.nova.v2_0.domain.KeyPair;
 import org.jclouds.openstack.nova.v2_0.domain.SecurityGroup;
+import org.jclouds.openstack.nova.v2_0.domain.Server;
 import org.jclouds.openstack.nova.v2_0.domain.ServerWithSecurityGroups;
 import org.jclouds.openstack.nova.v2_0.domain.regionscoped.RegionAndId;
 import org.jclouds.openstack.nova.v2_0.domain.regionscoped.RegionAndName;
@@ -64,7 +65,15 @@ public class CleanupServer implements Function<String, 
Boolean> {
    @Override
    public Boolean apply(String id) {
       final RegionAndId regionAndId = RegionAndId.fromSlashEncoded(id);
-      ServerWithSecurityGroups server = 
novaApi.getServerWithSecurityGroupsApi(regionAndId.getRegion()).get().get(regionAndId.getId());
+      boolean secGroupsPresent = 
novaApi.getServerWithSecurityGroupsApi(regionAndId.getRegion()).isPresent();
+      Server server;
+
+      if (secGroupsPresent) {
+         server = 
novaApi.getServerWithSecurityGroupsApi(regionAndId.getRegion()).get()
+               .get(regionAndId.getId());
+      } else {
+         server = 
novaApi.getServerApi(regionAndId.getRegion()).get(regionAndId.getId());
+      }
 
       if (novaApi.getFloatingIPApi(regionAndId.getRegion()).isPresent()) {
          try {
@@ -73,6 +82,7 @@ public class CleanupServer implements Function<String, 
Boolean> {
             logger.warn(e, "<< error removing and deallocating ip from 
node(%s): %s", id, e.getMessage());
          }
       }
+
       if (containsMetadata(server, JCLOUDS_KP)) {
         if (novaApi.getKeyPairApi(regionAndId.getRegion()).isPresent()) {
            RegionAndName regionAndName = 
RegionAndName.fromRegionAndName(regionAndId.getRegion(), server.getKeyName());
@@ -86,8 +96,8 @@ public class CleanupServer implements Function<String, 
Boolean> {
 
       boolean serverDeleted = 
novaApi.getServerApi(regionAndId.getRegion()).delete(regionAndId.getId());
 
-      if (containsMetadata(server, JCLOUDS_SG)) {
-         for (final String securityGroupName : server.getSecurityGroupNames()) 
{
+      if (containsMetadata(server, JCLOUDS_SG) && secGroupsPresent) {
+         for (final String securityGroupName : 
((ServerWithSecurityGroups)server).getSecurityGroupNames()) {
             for (SecurityGroup securityGroup : 
novaApi.getSecurityGroupApi(regionAndId.getRegion()).get().list().toList()) {
                if 
(securityGroup.getName().equalsIgnoreCase(securityGroupName)) {
                   if 
(novaApi.getSecurityGroupApi(regionAndId.getRegion()).isPresent()) {
@@ -105,7 +115,7 @@ public class CleanupServer implements Function<String, 
Boolean> {
       return serverDeleted;
    }
 
-   private boolean containsMetadata(ServerWithSecurityGroups server, String 
key) {
+   private boolean containsMetadata(Server server, String key) {
       if (server == null || server.getMetadata() == null || 
server.getMetadata().get("jclouds_tags") == null)
          return false;
       return server.getMetadata().get("jclouds_tags").contains(key);

Reply via email to