fix issue where we attempt audit with no servers
[so.git] / adapters / mso-openstack-adapters / src / main / java / org / onap / so / adapters / audit / HeatStackAudit.java
index 7bba136..da833c7 100644 (file)
@@ -25,6 +25,8 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Optional;
 import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -63,10 +65,14 @@ public class HeatStackAudit {
                                        .filter(p -> "OS::Nova::Server".equals(p.getType())).collect(Collectors.toList());
                        List<Resource> resourceGroups = resources.getList().stream()
                                        .filter(p -> "OS::Heat::ResourceGroup".equals(p.getType()) && p.getName().contains("subinterfaces")).collect(Collectors.toList());
-                       Set<Vserver> vserversToAudit = createVserverSet(resources, novaResources);
-                       Set<Vserver> vserversWithSubInterfaces = processSubInterfaces(cloudRegion, tenantId, resourceGroups,
-                                       vserversToAudit); 
-                       return auditVservers.auditVservers(vserversWithSubInterfaces, tenantId, cloudOwner, cloudRegion);
+                       if(novaResources.isEmpty())
+                               return true;
+                       else{                           
+                               Set<Vserver> vserversToAudit = createVserverSet(resources, novaResources);
+                               Set<Vserver> vserversWithSubInterfaces = processSubInterfaces(cloudRegion, tenantId, resourceGroups,
+                                       vserversToAudit);
+                               return auditVservers.auditVservers(vserversWithSubInterfaces, tenantId, cloudOwner, cloudRegion);
+                       }
                } catch (Exception e) {
                        logger.error("Error during auditing stack resources", e);
                        return false;
@@ -162,7 +168,8 @@ public class HeatStackAudit {
                        auditVserver.setLInterfaces(new LInterfaces());
                        auditVserver.setVserverId(novaResource.getPhysicalResourceId());
                        Stream<Resource> filteredNeutronNetworks = resources.getList().stream()
-                                       .filter(network -> network.getRequiredBy().contains(novaResource.getLogicalResourceId()));
+                                       .filter(resource -> resource.getRequiredBy().contains(novaResource.getLogicalResourceId()))
+                                       .filter(resource -> "OS::Neutron::Port".equals(resource.getType()));
                        filteredNeutronNetworks.forEach(network -> {
                                LInterface lInterface = new LInterface();
                                lInterface.setInterfaceId(network.getPhysicalResourceId());
@@ -173,11 +180,13 @@ public class HeatStackAudit {
                return vserversToAudit;
        }
 
-       protected Optional<String> extractResourcePathFromHref(String href) {
-               URI uri;
+       protected Optional<String> extractResourcePathFromHref(String href) {           
                try {
-                       uri = new URI(href);                    
-                       return Optional.of(uri.getPath().replaceFirst("/v\\d+", "")+RESOURCES);                 
+                       Optional<String> stackPath = extractStackPathFromHref(href);
+                       if (stackPath.isPresent()){                                             
+                               return Optional.of(stackPath.get()+RESOURCES);
+                       }else
+                               return Optional.empty();
                } catch (Exception e) {
                        logger.error("Error parsing URI", e);
                }
@@ -185,10 +194,14 @@ public class HeatStackAudit {
        }
        
        protected Optional<String> extractStackPathFromHref(String href) {
-               URI uri;
                try {
-                       uri = new URI(href);                    
-                       return Optional.of(uri.getPath().replaceFirst("/v\\d+", ""));                   
+                       URI uri = new URI(href);        
+                       Pattern p = Pattern.compile("/stacks.*");
+                       Matcher m = p.matcher(uri.getPath());
+                       if (m.find()){                                          
+                               return Optional.of(m.group());
+                       }else
+                               return Optional.empty();
                } catch (Exception e) {
                        logger.error("Error parsing URI", e);
                }