Properly honor the configured regions in all list methods (list nodes, images 
and security groups)


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

Branch: refs/heads/2.0.x
Commit: 611d0f3f88c1fba4c662f95a2f32b1691ea12277
Parents: 40d2982
Author: Ignasi Barrera <[email protected]>
Authored: Tue Apr 25 10:05:46 2017 +0200
Committer: Ignasi Barrera <[email protected]>
Committed: Wed Apr 26 00:11:39 2017 +0200

----------------------------------------------------------------------
 .../arm/compute/AzureComputeServiceAdapter.java | 28 ++++++++-------
 .../AzureComputeSecurityGroupExtension.java     | 37 +++++++++++++-------
 2 files changed, 40 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/611d0f3f/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java
 
b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java
index 2e9e0f6..73ecda9 100644
--- 
a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java
+++ 
b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java
@@ -220,8 +220,14 @@ public class AzureComputeServiceAdapter implements 
ComputeServiceAdapter<Virtual
    }
    
    private List<VMImage> listCustomImagesByResourceGroup(String resourceGroup) 
{
-      List<org.jclouds.azurecompute.arm.domain.Image> customImages = 
api.getVirtualMachineImageApi(resourceGroup).list();
-      return Lists.transform(customImages, customImagetoVmImage);
+      List<org.jclouds.azurecompute.arm.domain.Image> customImgs = 
api.getVirtualMachineImageApi(resourceGroup).list();
+      return ImmutableList.copyOf(transform(
+            filter(customImgs, new 
Predicate<org.jclouds.azurecompute.arm.domain.Image>() {
+               @Override
+               public boolean apply(org.jclouds.azurecompute.arm.domain.Image 
input) {
+                  return regionIds.get().contains(input.location());
+               }
+            }), customImagetoVmImage));
    }
 
    @Override
@@ -241,15 +247,7 @@ public class AzureComputeServiceAdapter implements 
ComputeServiceAdapter<Virtual
       }
 
       // We need to look for custom images in all resource groups
-      Iterable<ResourceGroup> resourceGroupsInLocation = 
filter(api.getResourceGroupApi().list(),
-            new Predicate<ResourceGroup>() {
-               @Override
-               public boolean apply(ResourceGroup input) {
-                  return availableLocationNames.contains(input.location());
-               }
-            });
-      
-      for (ResourceGroup resourceGroup : resourceGroupsInLocation) {
+      for (ResourceGroup resourceGroup : api.getResourceGroupApi().list()) {
          
osImages.addAll(listCustomImagesByResourceGroup(resourceGroup.name()));
       }
 
@@ -345,7 +343,13 @@ public class AzureComputeServiceAdapter implements 
ComputeServiceAdapter<Virtual
    public Iterable<VirtualMachine> listNodes() {
       ImmutableList.Builder<VirtualMachine> nodes = builder();
       for (ResourceGroup resourceGroup : api.getResourceGroupApi().list()) {
-         nodes.addAll(api.getVirtualMachineApi(resourceGroup.name()).list());
+         List<VirtualMachine> vms = 
api.getVirtualMachineApi(resourceGroup.name()).list();
+         nodes.addAll(filter(vms, new Predicate<VirtualMachine>() {
+            @Override
+            public boolean apply(VirtualMachine input) {
+               return regionIds.get().contains(input.location());
+            }
+         }));
       }
       return nodes.build();
    }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/611d0f3f/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeSecurityGroupExtension.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeSecurityGroupExtension.java
 
b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeSecurityGroupExtension.java
index eafb4f1..59608a4 100644
--- 
a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeSecurityGroupExtension.java
+++ 
b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeSecurityGroupExtension.java
@@ -23,7 +23,6 @@ import static com.google.common.collect.Iterables.any;
 import static com.google.common.collect.Iterables.filter;
 import static com.google.common.collect.Iterables.transform;
 import static 
org.jclouds.azurecompute.arm.config.AzureComputeProperties.TIMEOUT_RESOURCE_DELETED;
-import static org.jclouds.compute.predicates.NodePredicates.locationId;
 
 import java.net.URI;
 import java.util.ArrayList;
@@ -55,6 +54,7 @@ import org.jclouds.compute.domain.SecurityGroupBuilder;
 import org.jclouds.compute.extensions.SecurityGroupExtension;
 import org.jclouds.compute.reference.ComputeServiceConstants;
 import org.jclouds.domain.Location;
+import org.jclouds.location.Region;
 import org.jclouds.logging.Logger;
 import org.jclouds.net.domain.IpPermission;
 import org.jclouds.net.domain.IpProtocol;
@@ -62,6 +62,7 @@ import org.jclouds.net.domain.IpProtocol;
 import com.google.common.base.Function;
 import com.google.common.base.Objects;
 import com.google.common.base.Predicate;
+import com.google.common.base.Supplier;
 import com.google.common.cache.LoadingCache;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Multimap;
@@ -77,43 +78,53 @@ public class AzureComputeSecurityGroupExtension implements 
SecurityGroupExtensio
    private final SecurityGroupAvailablePredicateFactory securityGroupAvailable;
    private final Predicate<URI> resourceDeleted;
    private final LoadingCache<String, ResourceGroup> defaultResourceGroup;
+   private final Supplier<Set<String>> regionIds;
 
    @Inject
    AzureComputeSecurityGroupExtension(AzureComputeApi api,
          Function<NetworkSecurityGroup, SecurityGroup> groupConverter,
          SecurityGroupAvailablePredicateFactory securityRuleAvailable,
          @Named(TIMEOUT_RESOURCE_DELETED) Predicate<URI> resourceDeleted,
-         LoadingCache<String, ResourceGroup> defaultResourceGroup) {
+         LoadingCache<String, ResourceGroup> defaultResourceGroup,
+         @Region Supplier<Set<String>> regionIds) {
       this.api = api;
       this.securityGroupConverter = groupConverter;
       this.securityGroupAvailable = securityRuleAvailable;
       this.resourceDeleted = resourceDeleted;
       this.defaultResourceGroup = defaultResourceGroup;
+      this.regionIds = regionIds;
+   }
+
+   @Override
+   public Set<SecurityGroup> listSecurityGroupsInLocation(Location location) {
+      return securityGroupsInLocations(ImmutableSet.of(location.getId()));
    }
 
    @Override
    public Set<SecurityGroup> listSecurityGroups() {
-      ImmutableSet.Builder<SecurityGroup> securityGroups = 
ImmutableSet.builder();
+      return securityGroupsInLocations(regionIds.get());
+   }
+
+   private Set<SecurityGroup> securityGroupsInLocations(final Set<String> 
locations) {
+      List<SecurityGroup> securityGroups = new ArrayList<SecurityGroup>();
       for (ResourceGroup rg : api.getResourceGroupApi().list()) {
          securityGroups.addAll(securityGroupsInResourceGroup(rg.name()));
       }
-      return securityGroups.build();
+      
+      return ImmutableSet.copyOf(filter(securityGroups, new 
Predicate<SecurityGroup>() {
+         @Override
+         public boolean apply(SecurityGroup input) {
+            return locations.contains(input.getLocation().getId());
+         }
+      }));
    }
-   
+
    private Set<SecurityGroup> securityGroupsInResourceGroup(String 
resourceGroup) {
       List<NetworkSecurityGroup> networkGroups = 
api.getNetworkSecurityGroupApi(resourceGroup).list();
       return ImmutableSet.copyOf(transform(filter(networkGroups, notNull()), 
securityGroupConverter));
    }
 
    @Override
-   public Set<SecurityGroup> listSecurityGroupsInLocation(Location location) {
-      // Even though the resource groups are in a location, each security group
-      // can be in a different resource group, so we need to inspect all teh
-      // existing resource groups, and filter afterwards
-      return ImmutableSet.copyOf(filter(listSecurityGroups(), 
locationId(location.getId())));
-   }
-
-   @Override
    public Set<SecurityGroup> listSecurityGroupsForNode(String nodeId) {
       logger.debug(">> getting security groups for node %s...", nodeId);
 

Reply via email to