Use Regex to find the name on failure scenario 30/90130/1
authorSmokowski, Steven <steve.smokowski@att.com>
Tue, 18 Jun 2019 21:46:20 +0000 (17:46 -0400)
committerBenjamin, Max (mb388a) <mb388a@us.att.com>
Tue, 18 Jun 2019 21:46:25 +0000 (17:46 -0400)
Use Regex to find the keypair name on failure scenario

Change-Id: Ibf2167283d90407def7750fab4538f5443e57092
Issue-ID: SO-2037
Signed-off-by: Benjamin, Max (mb388a) <mb388a@us.att.com>
adapters/mso-adapter-utils/src/main/java/org/onap/so/openstack/utils/MsoHeatUtils.java
adapters/mso-adapter-utils/src/test/java/org/onap/so/openstack/utils/MsoHeatUtilsTest.java

index 7174bc0..28d4f3f 100644 (file)
@@ -31,8 +31,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
+import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-import java.util.stream.Collectors;
 import org.onap.logging.ref.slf4j.ONAPLogConstants;
 import org.onap.so.adapters.vdu.CloudInfo;
 import org.onap.so.adapters.vdu.PluginAction;
@@ -79,7 +79,6 @@ import com.woorea.openstack.base.client.OpenStackResponseException;
 import com.woorea.openstack.heat.Heat;
 import com.woorea.openstack.heat.model.CreateStackParam;
 import com.woorea.openstack.heat.model.Events;
-import com.woorea.openstack.heat.model.Resource;
 import com.woorea.openstack.heat.model.Resources;
 import com.woorea.openstack.heat.model.Stack;
 import com.woorea.openstack.heat.model.Stack.Output;
@@ -405,17 +404,15 @@ public class MsoHeatUtils extends MsoCommonUtils implements VduPlugin {
     protected Stack handleKeyPairConflict(String cloudSiteId, String tenantId, CreateStackParam stackCreate,
             int timeoutMinutes, boolean backout, Stack stack) throws MsoException {
         logger.info("Keypair conflict found on stack, attempting to clean up");
-
-        Resources resources = queryStackResources(cloudSiteId, tenantId, stackCreate.getStackName(), 2);
-        List<Resource> keyPairs = resources.getList().stream()
-                .filter(p -> "OS::Nova::KeyPair".equalsIgnoreCase(p.getType())).collect(Collectors.toList());
-        keyPairs.stream().forEach(keyPair -> {
-            try {
-                novaClient.deleteKeyPair(cloudSiteId, tenantId, keyPair.getLogicalResourceId());
-            } catch (MsoCloudSiteNotFound | NovaClientException e) {
-                logger.warn("Could not delete keypair", e);
+        try {
+            Matcher m = Pattern.compile("'([^']+?)'").matcher(stack.getStackStatusReason());
+            if (m.find()) {
+                novaClient.deleteKeyPair(cloudSiteId, tenantId, m.group(1));
             }
-        });
+        } catch (NovaClientException e) {
+            logger.warn("Could not delete keypair", e);
+        }
+
         handleUnknownCreateStackFailure(stack, timeoutMinutes, cloudSiteId, tenantId);
         Stack newStack = createStack(stackCreate, cloudSiteId, tenantId);
         newStack.setStackName(stackCreate.getStackName());
index de55e85..687b7d8 100644 (file)
@@ -33,9 +33,7 @@ import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.times;
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import org.junit.Before;
 import org.junit.Rule;
@@ -60,7 +58,6 @@ import com.woorea.openstack.heat.StackResource;
 import com.woorea.openstack.heat.StackResource.CreateStack;
 import com.woorea.openstack.heat.StackResource.DeleteStack;
 import com.woorea.openstack.heat.model.CreateStackParam;
-import com.woorea.openstack.heat.model.Resource;
 import com.woorea.openstack.heat.model.Resources;
 import com.woorea.openstack.heat.model.Stack;
 
@@ -320,19 +317,9 @@ public class MsoHeatUtilsTest extends MsoHeatUtils {
         createdStack.setStackStatus("CREATE_COMPLETE");
         createdStack.setStackStatusReason("Stack Created");
 
-
-
-        List<Resource> resources = new ArrayList<>();
-        Resource resource = new Resource();
-        resource.setName("KeypairName");
-        resource.setLogicalResourceId("KeypairName");
-        resource.setType("OS::Nova::KeyPair");
-        resources.add(resource);
-
         CreateStackParam createStackParam = new CreateStackParam();
         createStackParam.setStackName("stackName");
 
-        doReturn(resources).when(mockResources).getList();
         doReturn(mockResources).when(heatUtils).queryStackResources(cloudSiteId, tenantId, "stackName", 2);
         doNothing().when(novaClient).deleteKeyPair(cloudSiteId, tenantId, "KeypairName");
         doReturn(null).when(heatUtils).handleUnknownCreateStackFailure(stack, 120, cloudSiteId, tenantId);
@@ -341,8 +328,7 @@ public class MsoHeatUtilsTest extends MsoHeatUtils {
                 createStackParam, false);
 
         heatUtils.handleKeyPairConflict(cloudSiteId, tenantId, createStackParam, 120, true, stack);
-        Mockito.verify(heatUtils, times(1)).queryStackResources(cloudSiteId, tenantId, "stackName", 2);
-        Mockito.verify(novaClient, times(1)).deleteKeyPair(cloudSiteId, tenantId, "KeypairName");
+        Mockito.verify(novaClient, times(1)).deleteKeyPair(cloudSiteId, tenantId, "hst3bbfnm0011vm001");
         Mockito.verify(heatUtils, times(1)).handleUnknownCreateStackFailure(stack, 120, cloudSiteId, tenantId);
         Mockito.verify(heatUtils, times(1)).createStack(createStackParam, cloudSiteId, tenantId);
         Mockito.verify(heatUtils, times(1)).processCreateStack(cloudSiteId, tenantId, 120, true, createdStack,