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);
