Better encapsulated the image id encoding logic
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/3a9f5787 Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/3a9f5787 Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/3a9f5787 Branch: refs/heads/master Commit: 3a9f5787bf64673a403a2fcbd6fb3237aee95cbd Parents: 3b9609f Author: Ignasi Barrera <[email protected]> Authored: Tue Apr 25 16:28:17 2017 +0200 Committer: Ignasi Barrera <[email protected]> Committed: Wed Apr 26 00:13:06 2017 +0200 ---------------------------------------------------------------------- .../arm/compute/AzureComputeServiceAdapter.java | 3 +- .../extensions/AzureComputeImageExtension.java | 3 +- .../NetworkSecurityGroupToSecurityGroup.java | 2 +- .../arm/compute/functions/VMImageToImage.java | 91 +++++--------------- .../functions/VirtualMachineToNodeMetadata.java | 7 +- .../azurecompute/arm/domain/ImageReference.java | 13 +++ .../azurecompute/arm/domain/VMImage.java | 46 ++++++++-- 7 files changed, 78 insertions(+), 87 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/3a9f5787/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java index 73ecda9..d01d6ec 100644 --- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java +++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java @@ -25,7 +25,6 @@ import static com.google.common.collect.Iterables.transform; import static com.google.common.collect.Lists.newArrayList; import static org.jclouds.azurecompute.arm.compute.domain.LocationAndName.fromSlashEncoded; import static org.jclouds.azurecompute.arm.compute.domain.ResourceGroupAndName.fromResourceGroupAndName; -import static org.jclouds.azurecompute.arm.compute.functions.VMImageToImage.decodeFieldsFromUniqueId; import static org.jclouds.azurecompute.arm.compute.functions.VMImageToImage.getMarketplacePlanFromImageMetadata; import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.IMAGE_PUBLISHERS; import static org.jclouds.azurecompute.arm.util.VMImages.isCustom; @@ -256,7 +255,7 @@ public class AzureComputeServiceAdapter implements ComputeServiceAdapter<Virtual @Override public VMImage getImage(final String id) { - VMImage image = decodeFieldsFromUniqueId(id); + VMImage image = VMImage.decodeFieldsFromUniqueId(id); if (image.custom()) { org.jclouds.azurecompute.arm.domain.Image vmImage = api.getVirtualMachineImageApi(image.resourceGroup()).get( http://git-wip-us.apache.org/repos/asf/jclouds/blob/3a9f5787/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeImageExtension.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeImageExtension.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeImageExtension.java index 7d654d5..d826a51 100644 --- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeImageExtension.java +++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeImageExtension.java @@ -20,7 +20,6 @@ import static com.google.common.base.Functions.compose; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkState; import static org.jclouds.azurecompute.arm.compute.domain.ResourceGroupAndName.fromSlashEncoded; -import static org.jclouds.azurecompute.arm.compute.functions.VMImageToImage.decodeFieldsFromUniqueId; import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.TIMEOUT_RESOURCE_DELETED; import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_SUSPENDED; @@ -125,7 +124,7 @@ public class AzureComputeImageExtension implements ImageExtension { @Override public boolean deleteImage(String id) { - VMImage image = decodeFieldsFromUniqueId(id); + VMImage image = VMImage.decodeFieldsFromUniqueId(id); checkArgument(image.custom(), "Only custom images can be deleted"); logger.debug(">> deleting image %s", id); http://git-wip-us.apache.org/repos/asf/jclouds/blob/3a9f5787/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/NetworkSecurityGroupToSecurityGroup.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/NetworkSecurityGroupToSecurityGroup.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/NetworkSecurityGroupToSecurityGroup.java index 71d51aa..d38f94c 100644 --- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/NetworkSecurityGroupToSecurityGroup.java +++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/NetworkSecurityGroupToSecurityGroup.java @@ -61,7 +61,7 @@ public class NetworkSecurityGroupToSecurityGroup implements Function<NetworkSecu builder.location(getLocation(locations, input.location())); if (input.properties().securityRules() != null) { - // We just supoprt security groups that allow traffic to a set of + // We just support security groups that allow traffic to a set of // targets. We don't support deny rules or origin based rules in the // security group api. builder.ipPermissions(transform(filter(input.properties().securityRules(), InboundRule), ruleToPermission)); http://git-wip-us.apache.org/repos/asf/jclouds/blob/3a9f5787/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java index 2a5075c..028ad9c 100644 --- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java +++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VMImageToImage.java @@ -19,14 +19,12 @@ package org.jclouds.azurecompute.arm.compute.functions; import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.collect.Iterables.tryFind; import static java.util.Arrays.asList; -import static org.jclouds.azurecompute.arm.domain.IdReference.extractResourceGroup; -import static org.jclouds.azurecompute.arm.util.VMImages.isCustom; +import static org.jclouds.location.predicates.LocationPredicates.idEquals; import java.util.Map; import java.util.Set; import org.jclouds.azurecompute.arm.compute.extensions.AzureComputeImageExtension; -import org.jclouds.azurecompute.arm.domain.ImageReference; import org.jclouds.azurecompute.arm.domain.Plan; import org.jclouds.azurecompute.arm.domain.VMImage; import org.jclouds.collect.Memoized; @@ -36,7 +34,6 @@ import org.jclouds.compute.domain.OperatingSystem; import org.jclouds.compute.domain.OsFamily; import org.jclouds.domain.Location; import org.jclouds.javax.annotation.Nullable; -import org.jclouds.location.predicates.LocationPredicates; import com.google.common.base.Function; import com.google.common.base.Optional; @@ -57,51 +54,6 @@ public class VMImageToImage implements Function<VMImage, Image> { private final Supplier<Set<? extends org.jclouds.domain.Location>> locations; - public static String encodeFieldsToUniqueId(boolean globallyAvailable, String locationName, - ImageReference imageReference) { - return (globallyAvailable ? "global" : locationName) + "/" + imageReference.publisher() + "/" - + imageReference.offer() + "/" + imageReference.sku(); - } - - public static String encodeFieldsToUniqueIdCustom(boolean globallyAvailable, String locationName, - ImageReference imageReference) { - return extractResourceGroup(imageReference.customImageId()) + "/" + (globallyAvailable ? "global" : locationName) - + "/" + imageReference.customImageId().substring(imageReference.customImageId().lastIndexOf("/") + 1); - } - - public static String encodeFieldsToUniqueId(VMImage imageReference) { - return (imageReference.globallyAvailable() ? "global" : imageReference.location()) + "/" - + imageReference.publisher() + "/" + imageReference.offer() + "/" + imageReference.sku(); - } - - public static String encodeFieldsToUniqueIdCustom(VMImage imageReference) { - return imageReference.resourceGroup() + "/" - + (imageReference.globallyAvailable() ? "global" : imageReference.location()) + "/" + imageReference.name(); - } - - public static VMImage decodeFieldsFromUniqueId(final String id) { - VMImage vmImage; - String[] fields = checkNotNull(id, "id").split("/"); - if (isCustom(id)) { - /* id fields indexes - 0: imageReference.resourceGroup - 1: imageReference.location + "/" + - 2: imageReference.name - */ - vmImage = VMImage.customImage().resourceGroup(fields[0]).location(fields[1]).name(fields[2]).build(); - } else { - /* id fields indexes - 0: imageReference.location + "/" + - 1: imageReference.publisher + "/" + - 2: imageReference.offer + "/" + - 3: imageReference.sku + "/" + - */ - vmImage = VMImage.azureImage().location(fields[0]).publisher(fields[1]).offer(fields[2]).sku(fields[3]) - .build(); - } - return vmImage; - } - @Inject VMImageToImage(@Memoized Supplier<Set<? extends Location>> locations) { this.locations = locations; @@ -111,29 +63,32 @@ public class VMImageToImage implements Function<VMImage, Image> { public Image apply(final VMImage image) { final ImageBuilder builder = new ImageBuilder(); addMarketplacePlanToMetadataIfPresent(builder, image); + + Location location = FluentIterable.from(locations.get()).firstMatch(idEquals(image.location())).get(); + if (image.custom()) { - builder.location( - FluentIterable.from(locations.get()).firstMatch(LocationPredicates.idEquals(image.location())) - .get()).name(image.name()).description(image.group()).status(Image.Status.AVAILABLE) - .version("latest").providerId(image.customImageId()).id(encodeFieldsToUniqueIdCustom(image)); - - final OperatingSystem.Builder osBuilder = osFamily().apply(image); - builder.operatingSystem(osBuilder.build()); + builder + .id(image.encodeFieldsToUniqueIdCustom()) + .providerId(image.customImageId()) + .name(image.name()) + .location(location) + .description(image.group()) + .status(Image.Status.AVAILABLE) + .version("latest"); } else { builder - .name(image.offer()) - .description(image.sku()) - .status(Image.Status.AVAILABLE) - .version(image.sku()) - .id(encodeFieldsToUniqueId(image)) - .providerId(image.publisher()) - .location( - image.globallyAvailable() ? null : FluentIterable.from(locations.get()) - .firstMatch(LocationPredicates.idEquals(image.location())).get()); - - final OperatingSystem.Builder osBuilder = osFamily().apply(image); - builder.operatingSystem(osBuilder.build()); + .id(image.encodeFieldsToUniqueId()) + .providerId(image.publisher()) + .name(image.offer()) + .location(location) + .description(image.sku()) + .status(Image.Status.AVAILABLE) + .version(image.sku()); } + + final OperatingSystem.Builder osBuilder = osFamily().apply(image); + builder.operatingSystem(osBuilder.build()); + return builder.build(); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/3a9f5787/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VirtualMachineToNodeMetadata.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VirtualMachineToNodeMetadata.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VirtualMachineToNodeMetadata.java index bcfd4fe..e4b7da8 100644 --- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VirtualMachineToNodeMetadata.java +++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VirtualMachineToNodeMetadata.java @@ -22,8 +22,6 @@ import static com.google.common.collect.Iterables.find; import static org.jclouds.azurecompute.arm.compute.AzureComputeServiceAdapter.GROUP_KEY; import static org.jclouds.azurecompute.arm.compute.domain.LocationAndName.fromLocationAndName; import static org.jclouds.azurecompute.arm.compute.domain.ResourceGroupAndName.fromResourceGroupAndName; -import static org.jclouds.azurecompute.arm.compute.functions.VMImageToImage.encodeFieldsToUniqueId; -import static org.jclouds.azurecompute.arm.compute.functions.VMImageToImage.encodeFieldsToUniqueIdCustom; import static org.jclouds.azurecompute.arm.domain.IdReference.extractResourceGroup; import static org.jclouds.compute.util.ComputeServiceUtils.addMetadataAndParseTagsFromCommaDelimitedValue; import static org.jclouds.location.predicates.LocationPredicates.idEquals; @@ -185,10 +183,9 @@ public class VirtualMachineToNodeMetadata implements Function<VirtualMachine, No protected Optional<? extends Image> findImage(final StorageProfile storageProfile, String locatioName) { if (storageProfile.imageReference() != null) { - // FIXME check this condition String imageId = storageProfile.imageReference().customImageId() != null ? - encodeFieldsToUniqueIdCustom(false, locatioName, storageProfile.imageReference()) : - encodeFieldsToUniqueId(false, locatioName, storageProfile.imageReference()); + storageProfile.imageReference().encodeFieldsToUniqueIdCustom(locatioName) : + storageProfile.imageReference().encodeFieldsToUniqueId(locatioName); return imageCache.get(imageId); } else { logger.warn("could not find image for storage profile %s", storageProfile); http://git-wip-us.apache.org/repos/asf/jclouds/blob/3a9f5787/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ImageReference.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ImageReference.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ImageReference.java index d9b43cd..d001949 100644 --- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ImageReference.java +++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ImageReference.java @@ -16,6 +16,9 @@ */ package org.jclouds.azurecompute.arm.domain; +import static org.jclouds.azurecompute.arm.domain.IdReference.extractName; +import static org.jclouds.azurecompute.arm.domain.IdReference.extractResourceGroup; + import org.jclouds.javax.annotation.Nullable; import org.jclouds.json.SerializedNames; @@ -90,4 +93,14 @@ public abstract class ImageReference { public abstract ImageReference build(); } + + public String encodeFieldsToUniqueId(String location) { + return VMImage.azureImage().location(location).publisher(publisher()).offer(offer()).sku(sku()).build() + .encodeFieldsToUniqueId(); + } + + public String encodeFieldsToUniqueIdCustom(String location) { + return VMImage.customImage().resourceGroup(extractResourceGroup(customImageId())).location(location) + .name(extractName(customImageId())).build().encodeFieldsToUniqueIdCustom(); + } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/3a9f5787/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VMImage.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VMImage.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VMImage.java index 91ca818..202481d 100644 --- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VMImage.java +++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VMImage.java @@ -16,6 +16,9 @@ */ package org.jclouds.azurecompute.arm.domain; +import static com.google.common.base.Preconditions.checkNotNull; +import static org.jclouds.azurecompute.arm.util.VMImages.isCustom; + import org.jclouds.azurecompute.arm.domain.Version.VersionProperties; import org.jclouds.javax.annotation.Nullable; @@ -54,11 +57,6 @@ public abstract class VMImage { public abstract String location(); /** - * Specifies if this image is globally available - */ - public abstract boolean globallyAvailable(); - - /** * The group of the custom image */ @Nullable @@ -112,16 +110,16 @@ public abstract class VMImage { @Nullable public abstract VersionProperties versionProperties(); - public static Builder builder() { + private static Builder builder() { return new AutoValue_VMImage.Builder(); } public static Builder azureImage() { - return builder().globallyAvailable(false).custom(false); + return builder().custom(false); } public static Builder customImage() { - return builder().globallyAvailable(false).custom(true); + return builder().custom(true); } VMImage() { @@ -140,7 +138,6 @@ public abstract class VMImage { public abstract Builder sku(String sku); public abstract Builder version(String version); public abstract Builder location(String location); - public abstract Builder globallyAvailable(boolean globallyAvailable); public abstract Builder group(String group); public abstract Builder storage(String storage); public abstract Builder vhd1(String vhd1); @@ -151,4 +148,35 @@ public abstract class VMImage { public abstract VMImage build(); } + + public String encodeFieldsToUniqueId() { + return String.format("%s/%s/%s/%s", location(), publisher(), offer(), sku()); + } + + public String encodeFieldsToUniqueIdCustom() { + return String.format("%s/%s/%s", resourceGroup(), location(), name()); + } + + public static VMImage decodeFieldsFromUniqueId(final String id) { + VMImage vmImage; + String[] fields = checkNotNull(id, "id").split("/"); + if (isCustom(id)) { + /* id fields indexes + 0: imageReference.resourceGroup + 1: imageReference.location + "/" + + 2: imageReference.name + */ + vmImage = VMImage.customImage().resourceGroup(fields[0]).location(fields[1]).name(fields[2]).build(); + } else { + /* id fields indexes + 0: imageReference.location + "/" + + 1: imageReference.publisher + "/" + + 2: imageReference.offer + "/" + + 3: imageReference.sku + "/" + + */ + vmImage = VMImage.azureImage().location(fields[0]).publisher(fields[1]).offer(fields[2]).sku(fields[3]) + .build(); + } + return vmImage; + } }
