Repository: jclouds-labs
Updated Branches:
  refs/heads/fix/AzureTemplateBuilderLiveTest eb68333d1 -> 820300612


image extension and tempalte builder fixes


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

Branch: refs/heads/fix/AzureTemplateBuilderLiveTest
Commit: 8203006125104d0fd06720e2b8cb2f53a31057d8
Parents: eb68333
Author: Ignasi Barrera <[email protected]>
Authored: Thu Oct 13 12:48:53 2016 +0200
Committer: Ignasi Barrera <[email protected]>
Committed: Thu Oct 13 12:48:53 2016 +0200

----------------------------------------------------------------------
 .../arm/compute/AzureComputeServiceAdapter.java | 10 +++-
 .../ResourceDefinitionToCustomImage.java        |  4 +-
 .../functions/VirtualMachineToNodeMetadata.java | 11 +++--
 .../arm/functions/CleanupResources.java         |  8 ++--
 .../StorageProfileToStorageAccountName.java     | 38 +++++++++++++++
 .../compute/AzureTemplateBuilderLiveTest.java   | 49 +++++++++++---------
 .../AzureComputeImageExtensionLiveTest.java     | 15 +++++-
 7 files changed, 102 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/82030061/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 6735afc..0e2ed64 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
@@ -56,6 +56,7 @@ import org.jclouds.azurecompute.arm.domain.SKU;
 import org.jclouds.azurecompute.arm.domain.StorageProfile;
 import org.jclouds.azurecompute.arm.domain.StorageService;
 import org.jclouds.azurecompute.arm.domain.StorageService.Status;
+import org.jclouds.azurecompute.arm.domain.StorageServiceKeys;
 import org.jclouds.azurecompute.arm.domain.VHD;
 import org.jclouds.azurecompute.arm.domain.VMHardware;
 import org.jclouds.azurecompute.arm.domain.VMImage;
@@ -228,8 +229,13 @@ public class AzureComputeServiceAdapter implements 
ComputeServiceAdapter<Virtual
       VMImage image = decodeFieldsFromUniqueId(id);
       if (image.custom()) {
          VMImage customImage = null;
-         String key = 
api.getStorageAccountApi(azureGroup).getKeys(image.storage()).key1();
-         BlobHelper blobHelper = new BlobHelper(image.storage(), key);
+         StorageServiceKeys keys = 
api.getStorageAccountApi(azureGroup).getKeys(image.storage());
+         if (keys == null) {
+            // If the storage account for the image does not exist, it means 
the image was deleted
+            return null;
+         }
+         
+         BlobHelper blobHelper = new BlobHelper(image.storage(), keys.key1());
          try {
             if (blobHelper.customImageExists()) {
                List<VMImage> customImagesInStorage = 
blobHelper.getImages(CONTAINER_NAME, azureGroup,

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/82030061/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/ResourceDefinitionToCustomImage.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/ResourceDefinitionToCustomImage.java
 
b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/ResourceDefinitionToCustomImage.java
index bf744eb..cce6b50 100644
--- 
a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/ResourceDefinitionToCustomImage.java
+++ 
b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/ResourceDefinitionToCustomImage.java
@@ -27,6 +27,7 @@ import 
org.jclouds.azurecompute.arm.compute.config.AzureComputeServiceContextMod
 import org.jclouds.azurecompute.arm.domain.ResourceDefinition;
 import org.jclouds.azurecompute.arm.domain.VMImage;
 import org.jclouds.azurecompute.arm.domain.VirtualMachine;
+import 
org.jclouds.azurecompute.arm.functions.StorageProfileToStorageAccountName;
 import org.jclouds.compute.domain.Image;
 
 import com.google.common.base.Function;
@@ -46,13 +47,14 @@ public class ResourceDefinitionToCustomImage implements 
Function<ResourceDefinit
 
    @Inject
    ResourceDefinitionToCustomImage(AzureComputeApi api, AzureComputeConstants 
azureComputeConstants,
+         StorageProfileToStorageAccountName storageProfileToStorageAccountName,
          Function<VMImage, Image> vmImageToImage, @Assisted("nodeId") String 
nodeId,
          @Assisted("imageName") String imageName) {
       this.vmImageToImage = vmImageToImage;
       this.resourceGroup = azureComputeConstants.azureResourceGroup();
       this.imageName = imageName;
-      this.storageAccountName = nodeId.replaceAll("[^A-Za-z0-9 ]", "") + 
"stor";
       this.vm = api.getVirtualMachineApi(resourceGroup).get(nodeId);
+      this.storageAccountName = 
storageProfileToStorageAccountName.apply(vm.properties().storageProfile());
    }
 
    @SuppressWarnings("unchecked")

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/82030061/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VirtualMachineToNodeMetadata.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VirtualMachineToNodeMetadata.java
 
b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VirtualMachineToNodeMetadata.java
index 0929bd4..e151a4a 100644
--- 
a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VirtualMachineToNodeMetadata.java
+++ 
b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VirtualMachineToNodeMetadata.java
@@ -25,7 +25,6 @@ import static 
org.jclouds.azurecompute.arm.compute.extensions.AzureComputeImageE
 import static 
org.jclouds.azurecompute.arm.compute.functions.VMImageToImage.encodeFieldsToUniqueId;
 import static org.jclouds.util.Closeables2.closeQuietly;
 
-import java.net.URI;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -48,6 +47,7 @@ import 
org.jclouds.azurecompute.arm.domain.VirtualMachineInstance.VirtualMachine
 import 
org.jclouds.azurecompute.arm.domain.VirtualMachineInstance.VirtualMachineStatus.PowerState;
 import org.jclouds.azurecompute.arm.domain.VirtualMachineProperties;
 import 
org.jclouds.azurecompute.arm.domain.VirtualMachineProperties.ProvisioningState;
+import 
org.jclouds.azurecompute.arm.functions.StorageProfileToStorageAccountName;
 import org.jclouds.azurecompute.arm.util.BlobHelper;
 import org.jclouds.collect.Memoized;
 import org.jclouds.compute.domain.Hardware;
@@ -118,12 +118,14 @@ public class VirtualMachineToNodeMetadata implements 
Function<VirtualMachine, No
    private final Supplier<Map<String, ? extends Hardware>> hardwares;
    private final Map<String, Credentials> credentialStore;
    private final Function<VMImage, Image> vmImageToImge;
+   private final StorageProfileToStorageAccountName 
storageProfileToStorageAccountName;
 
    @Inject
    VirtualMachineToNodeMetadata(AzureComputeApi api, 
GroupNamingConvention.Factory namingConvention,
          Supplier<Map<String, ? extends Image>> images, Supplier<Map<String, ? 
extends Hardware>> hardwares,
          @Memoized Supplier<Set<? extends Location>> locations, Map<String, 
Credentials> credentialStore,
-         final AzureComputeConstants azureComputeConstants, Function<VMImage, 
Image> vmImageToImge) {
+         final AzureComputeConstants azureComputeConstants, Function<VMImage, 
Image> vmImageToImge,
+         StorageProfileToStorageAccountName 
storageProfileToStorageAccountName) {
       this.api = api;
       this.nodeNamingConvention = namingConvention.createWithoutPrefix();
       this.images = checkNotNull(images, "images cannot be null");
@@ -132,6 +134,7 @@ public class VirtualMachineToNodeMetadata implements 
Function<VirtualMachine, No
       this.credentialStore = credentialStore;
       this.azureGroup = azureComputeConstants.azureResourceGroup();
       this.vmImageToImge = vmImageToImge;
+      this.storageProfileToStorageAccountName = 
storageProfileToStorageAccountName;
    }
 
    @Override
@@ -241,9 +244,7 @@ public class VirtualMachineToNodeMetadata implements 
Function<VirtualMachine, No
          return Optional.fromNullable(images.get().get(
                encodeFieldsToUniqueId(false, locatioName, 
storageProfile.imageReference())));
       } else {
-         String storageAccountNameURI = storageProfile.osDisk().vhd().uri();
-         String storageAccountName = 
Iterables.get(Splitter.on(".").split(URI.create(storageAccountNameURI).getHost()),
-               0);
+         String storageAccountName = 
storageProfileToStorageAccountName.apply(storageProfile);
          StorageServiceKeys keys = 
api.getStorageAccountApi(azureGroup).getKeys(storageAccountName);
          BlobHelper blobHelper = new BlobHelper(storageAccountName, 
keys.key1());
 

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/82030061/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/functions/CleanupResources.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/functions/CleanupResources.java
 
b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/functions/CleanupResources.java
index e0f0b54..39cc32c 100644
--- 
a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/functions/CleanupResources.java
+++ 
b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/functions/CleanupResources.java
@@ -60,11 +60,14 @@ public class CleanupResources implements Function<String, 
Boolean> {
 
    protected final AzureComputeApi api;
    private final Predicate<URI> resourceDeleted;
+   private final StorageProfileToStorageAccountName 
storageProfileToStorageAccountName;
 
    @Inject
-   CleanupResources(AzureComputeApi azureComputeApi, 
@Named(TIMEOUT_RESOURCE_DELETED) Predicate<URI> resourceDeleted) {
+   CleanupResources(AzureComputeApi azureComputeApi, 
@Named(TIMEOUT_RESOURCE_DELETED) Predicate<URI> resourceDeleted,
+         StorageProfileToStorageAccountName 
storageProfileToStorageAccountName) {
       this.api = azureComputeApi;
       this.resourceDeleted = resourceDeleted;
+      this.storageProfileToStorageAccountName = 
storageProfileToStorageAccountName;
    }
 
    @Override
@@ -99,8 +102,7 @@ public class CleanupResources implements Function<String, 
Boolean> {
          }
       }
 
-      String storageAccountNameURI = 
virtualMachine.properties().storageProfile().osDisk().vhd().uri();
-      String storageAccountName = 
Iterables.get(Splitter.on(".").split(URI.create(storageAccountNameURI).getHost()),
 0);
+      String storageAccountName = 
storageProfileToStorageAccountName.apply(virtualMachine.properties().storageProfile());
       StorageServiceKeys keys = 
api.getStorageAccountApi(group).getKeys(storageAccountName);
 
       // Remove the virtual machine files

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/82030061/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/functions/StorageProfileToStorageAccountName.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/functions/StorageProfileToStorageAccountName.java
 
b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/functions/StorageProfileToStorageAccountName.java
new file mode 100644
index 0000000..f624886
--- /dev/null
+++ 
b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/functions/StorageProfileToStorageAccountName.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.azurecompute.arm.functions;
+
+import java.net.URI;
+
+import org.jclouds.azurecompute.arm.domain.StorageProfile;
+
+import com.google.common.base.Function;
+import com.google.common.base.Splitter;
+import com.google.common.collect.Iterables;
+
+/**
+ * Returns the storage account name for a given storage profile.
+ */
+public class StorageProfileToStorageAccountName implements 
Function<StorageProfile, String> {
+
+   @Override
+   public String apply(StorageProfile input) {
+      String storageAccountNameURI = input.osDisk().vhd().uri();
+      return 
Iterables.get(Splitter.on(".").split(URI.create(storageAccountNameURI).getHost()),
 0);
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/82030061/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureTemplateBuilderLiveTest.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureTemplateBuilderLiveTest.java
 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureTemplateBuilderLiveTest.java
index 8756240..c20655b 100644
--- 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureTemplateBuilderLiveTest.java
+++ 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureTemplateBuilderLiveTest.java
@@ -16,33 +16,30 @@
  */
 package org.jclouds.azurecompute.arm.compute;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+import static 
org.jclouds.azurecompute.arm.config.AzureComputeProperties.RESOURCE_GROUP_NAME;
+import static org.jclouds.compute.util.ComputeServiceUtils.getCores;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+import java.io.IOException;
 import java.util.Properties;
 import java.util.Set;
-import java.util.concurrent.TimeUnit;
 
 import org.jclouds.azurecompute.arm.AzureComputeProviderMetadata;
+import org.jclouds.azurecompute.arm.domain.Region;
 import org.jclouds.azurecompute.arm.internal.AzureLiveTestUtils;
+import org.jclouds.compute.domain.OsFamily;
+import org.jclouds.compute.domain.Template;
 import org.jclouds.compute.internal.BaseTemplateBuilderLiveTest;
 import org.jclouds.providers.ProviderMetadata;
 import org.jclouds.sshj.config.SshjSshClientModule;
 import org.testng.annotations.Test;
 
-import com.google.common.collect.ImmutableSet;
 import com.google.inject.Module;
 
-import static com.google.common.base.Preconditions.checkNotNull;
-import static 
org.jclouds.azurecompute.arm.config.AzureComputeProperties.RESOURCE_GROUP_NAME;
-import static 
org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING;
-import static 
org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_SCRIPT_COMPLETE;
-
 @Test(groups = "live", testName = "AzureTemplateBuilderLiveTest")
 public class AzureTemplateBuilderLiveTest extends BaseTemplateBuilderLiveTest {
-   public String azureGroup;
-
-   @Override
-   protected Set<String> getIso3166Codes() {
-      return ImmutableSet.of("US-IA", "US-VA", "US-IL", "US-TX", "US-CA", 
"IE", "NL", "HK", "SG", "JP-11", "JP-27", "BR", "AU-NSW", "AU-VIC", "IN-GA", 
"IN-TN", "IN-MH", "CN-SH", "CN-BJ", "CA-ON", "CA-QC");
-   }
 
    public AzureTemplateBuilderLiveTest() {
       provider = "azurecompute-arm";
@@ -55,23 +52,33 @@ public class AzureTemplateBuilderLiveTest extends 
BaseTemplateBuilderLiveTest {
 
    @Override
    protected ProviderMetadata createProviderMetadata() {
-      AzureComputeProviderMetadata pm = 
AzureComputeProviderMetadata.builder().build();
-      return pm;
+      return AzureComputeProviderMetadata.builder().build();
    }
 
    @Override
    protected Properties setupProperties() {
-      azureGroup = "jc" + System.getProperty("user.name").substring(0, 3);
       Properties properties = super.setupProperties();
-      long scriptTimeout = TimeUnit.MILLISECONDS.convert(20, TimeUnit.MINUTES);
-      properties.setProperty(TIMEOUT_SCRIPT_COMPLETE, scriptTimeout + "");
-      properties.setProperty(TIMEOUT_NODE_RUNNING, scriptTimeout + "");
-      properties.put(RESOURCE_GROUP_NAME, azureGroup);
+      properties.put(RESOURCE_GROUP_NAME, "jc");
 
       AzureLiveTestUtils.defaultProperties(properties);
       checkNotNull(setIfTestSystemPropertyPresent(properties, 
"oauth.endpoint"), "test.oauth.endpoint");
 
       return properties;
-
+   }
+   
+   @Override
+   @Test
+   public void testDefaultTemplateBuilder() throws IOException {
+      Template defaultTemplate = 
view.getComputeService().templateBuilder().build();
+      
assertTrue(defaultTemplate.getImage().getOperatingSystem().getVersion().matches("1[45]\\.[01][04]\\.[0-9]-LTS"),
+            "Version mismatch, expected dd.dd.d-LTS, found: " + 
defaultTemplate.getImage().getOperatingSystem().getVersion());
+      assertEquals(defaultTemplate.getImage().getOperatingSystem().is64Bit(), 
true);
+      
assertEquals(defaultTemplate.getImage().getOperatingSystem().getFamily(), 
OsFamily.UBUNTU);
+      assertEquals(getCores(defaultTemplate.getHardware()), 1.0d);
+   }
+   
+   @Override
+   protected Set<String> getIso3166Codes() {
+      return Region.iso3166Codes();
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/82030061/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeImageExtensionLiveTest.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeImageExtensionLiveTest.java
 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeImageExtensionLiveTest.java
index 2c48876..de44668 100644
--- 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeImageExtensionLiveTest.java
+++ 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/extensions/AzureComputeImageExtensionLiveTest.java
@@ -24,13 +24,17 @@ import static 
org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_S
 import static 
org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_TERMINATED;
 import static 
org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_PORT_OPEN;
 import static 
org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_SCRIPT_COMPLETE;
+import static 
org.jclouds.compute.options.TemplateOptions.Builder.authorizePublicKey;
 import static 
org.jclouds.location.reference.LocationConstants.PROPERTY_REGIONS;
 
+import java.util.Map;
 import java.util.Properties;
 import java.util.concurrent.TimeUnit;
 
 import org.jclouds.azurecompute.arm.AzureComputeProviderMetadata;
 import org.jclouds.azurecompute.arm.internal.AzureLiveTestUtils;
+import org.jclouds.compute.ComputeTestUtils;
+import org.jclouds.compute.domain.TemplateBuilder;
 import org.jclouds.compute.extensions.internal.BaseImageExtensionLiveTest;
 import org.jclouds.providers.ProviderMetadata;
 import org.jclouds.sshj.config.SshjSshClientModule;
@@ -39,7 +43,8 @@ import org.testng.annotations.Test;
 import com.google.inject.Module;
 
 /**
- * Live tests for the {@link org.jclouds.compute.extensions.ImageExtension} 
integration.
+ * Live tests for the {@link org.jclouds.compute.extensions.ImageExtension}
+ * integration.
  */
 @Test(groups = "live", singleThreaded = true, testName = 
"AzureComputeImageExtensionLiveTest")
 public class AzureComputeImageExtensionLiveTest extends 
BaseImageExtensionLiveTest {
@@ -79,4 +84,12 @@ public class AzureComputeImageExtensionLiveTest extends 
BaseImageExtensionLiveTe
       return AzureComputeProviderMetadata.builder().build();
    }
 
+   @Override
+   public TemplateBuilder getNodeTemplate() {
+      Map<String, String> keyPair = ComputeTestUtils.setupKeyPair();
+      return super.getNodeTemplate().options(
+            authorizePublicKey(keyPair.get("public"))
+            .overrideLoginPrivateKey(keyPair.get("private")));
+   }
+
 }

Reply via email to