You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2019/09/17 15:48:36 UTC

[jclouds] branch master updated: Add azure disk sku (#45)

This is an automated email from the ASF dual-hosted git repository.

nacx pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jclouds.git


The following commit(s) were added to refs/heads/master by this push:
     new 6a076fe  Add azure disk sku (#45)
6a076fe is described below

commit 6a076fe0c8b9aa686409fc2788cd3444e2043712
Author: Simone Locci <si...@cloudesire.com>
AuthorDate: Tue Sep 17 17:48:32 2019 +0200

    Add azure disk sku (#45)
    
    * Add azure disk SKU
    
    * Add tests
    
    * Fix review adding a disk type enum
    
    * Fix review using storage account type enum
---
 .../{StorageAccountType.java => DiskSku.java}      | 46 +++++++++++-----------
 .../arm/domain/StorageAccountType.java             | 12 ++++--
 .../jclouds/azurecompute/arm/features/DiskApi.java | 11 ++++++
 .../azurecompute/arm/features/DiskApiLiveTest.java |  5 ++-
 .../azurecompute/arm/features/DiskApiMockTest.java | 23 +++++++++++
 .../creatediskwithtagsandskuresponse.json          | 17 ++++++++
 6 files changed, 87 insertions(+), 27 deletions(-)

diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/StorageAccountType.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/DiskSku.java
similarity index 52%
copy from providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/StorageAccountType.java
copy to providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/DiskSku.java
index 33e1109..3fb86f4 100644
--- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/StorageAccountType.java
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/DiskSku.java
@@ -16,32 +16,32 @@
  */
 package org.jclouds.azurecompute.arm.domain;
 
-public enum StorageAccountType {
-   /** Enum value Standard_LRS. */
-   STANDARD_LRS("Standard_LRS"),
+import com.google.auto.value.AutoValue;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
 
-   /** Enum value Premium_LRS. */
-   PREMIUM_LRS("Premium_LRS");
+@AutoValue
+public abstract class DiskSku
+{
+    @Nullable
+    public abstract StorageAccountType name();
 
-   /** The actual serialized value for a StorageAccountTypes instance. */
-   private String value;
+    @SerializedNames({"name"})
+    public static DiskSku create(final StorageAccountType storageAccountType) {
+        return builder()
+                .name(storageAccountType)
+                .build();
+    }
 
-   StorageAccountType(String value) {
-      this.value = value;
-   }
+    public abstract Builder toBuilder();
 
-   public static StorageAccountType fromString(String value) {
-      StorageAccountType[] items = StorageAccountType.values();
-      for (StorageAccountType item : items) {
-         if (item.toString().equalsIgnoreCase(value)) {
-            return item;
-         }
-      }
-      return null;
-   }
+    public static Builder builder() {
+        return new AutoValue_DiskSku.Builder();
+    }
 
-   @Override
-   public String toString() {
-      return this.value;
-   }
+    @AutoValue.Builder
+    public abstract static class Builder {
+        public abstract Builder name(StorageAccountType storageAccountType);
+        public abstract DiskSku build();
+    }
 }
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/StorageAccountType.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/StorageAccountType.java
index 33e1109..c556ae9 100644
--- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/StorageAccountType.java
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/StorageAccountType.java
@@ -17,11 +17,17 @@
 package org.jclouds.azurecompute.arm.domain;
 
 public enum StorageAccountType {
-   /** Enum value Standard_LRS. */
+   /** Enum value Standard HDD. */
    STANDARD_LRS("Standard_LRS"),
 
-   /** Enum value Premium_LRS. */
-   PREMIUM_LRS("Premium_LRS");
+   /** Enum value Standard SSD. */
+   STANDARD_SSD_LRS("StandardSSD_LRS"),
+
+   /** Enum value Premium SSD. */
+   PREMIUM_LRS("Premium_LRS"),
+
+   /** Enum value Ultra SSD (Available only if your subscription is enabled for ultra disks). */
+   ULTRA_SSD_LRS("UltraSSD_LRS");
 
    /** The actual serialized value for a StorageAccountTypes instance. */
    private String value;
diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/DiskApi.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/DiskApi.java
index e8b6cf2..407b8df 100644
--- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/DiskApi.java
+++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/DiskApi.java
@@ -33,6 +33,7 @@ import org.jclouds.Fallbacks.EmptyListOnNotFoundOr404;
 import org.jclouds.Fallbacks.NullOnNotFoundOr404;
 import org.jclouds.azurecompute.arm.domain.Disk;
 import org.jclouds.azurecompute.arm.domain.DiskProperties;
+import org.jclouds.azurecompute.arm.domain.DiskSku;
 import org.jclouds.azurecompute.arm.filters.ApiVersionFilter;
 import org.jclouds.azurecompute.arm.functions.URIParser;
 import org.jclouds.javax.annotation.Nullable;
@@ -73,6 +74,16 @@ public interface DiskApi {
                        @Nullable @PayloadParam("tags") Map<String, String> tags,
                        @PayloadParam("properties") DiskProperties properties);
 
+   @Named("disk:create_or_update")
+   @PUT
+   @MapBinder(BindToJsonPayload.class)
+   @Path("/{diskName}")
+   Disk createOrUpdate(@PathParam("diskName") String diskName,
+           @PayloadParam("location") String location,
+           @Nullable @PayloadParam("tags") Map<String, String> tags,
+           @PayloadParam("properties") DiskProperties properties,
+           @Nullable @PayloadParam("sku") DiskSku sku);
+
    @Named("disk:get")
    @Path("/{diskName}")
    @GET
diff --git a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DiskApiLiveTest.java b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DiskApiLiveTest.java
index 7975522..9ceb6db 100644
--- a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DiskApiLiveTest.java
+++ b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DiskApiLiveTest.java
@@ -23,6 +23,7 @@ import java.util.UUID;
 import org.jclouds.azurecompute.arm.domain.CreationData;
 import org.jclouds.azurecompute.arm.domain.Disk;
 import org.jclouds.azurecompute.arm.domain.DiskProperties;
+import org.jclouds.azurecompute.arm.domain.DiskSku;
 import org.jclouds.azurecompute.arm.domain.Provisionable;
 import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest;
 import org.testng.annotations.BeforeClass;
@@ -33,6 +34,7 @@ import com.google.common.base.Supplier;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Iterables;
 
+import static org.jclouds.azurecompute.arm.domain.StorageAccountType.PREMIUM_LRS;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertNull;
 import static org.testng.Assert.assertTrue;
@@ -59,7 +61,8 @@ public class DiskApiLiveTest extends BaseAzureComputeApiLiveTest {
    @Test
    public void createDisk() {
       DiskProperties properties = DiskProperties.builder().creationData(CreationData.create(CreationData.CreateOptions.EMPTY)).diskSizeGB(2).build();
-      Disk dataDisk = api().createOrUpdate(diskName, LOCATION, ImmutableMap.of("exampleTag", "jclouds-test-tag"), properties);
+      DiskSku sku = DiskSku.builder().name(PREMIUM_LRS).build();
+      Disk dataDisk = api().createOrUpdate(diskName, LOCATION, ImmutableMap.of("exampleTag", "jclouds-test-tag"), properties, sku);
       assertTrue(waitUntilAvailable(diskName), "creation operation did not complete in the configured timeout");
       assertTrue(dataDisk.properties().diskSizeGB() == 2);
       assertTrue(dataDisk.tags().containsValue("jclouds-test-tag"));
diff --git a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DiskApiMockTest.java b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DiskApiMockTest.java
index d3a0ca0..47aeb16 100644
--- a/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DiskApiMockTest.java
+++ b/providers/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DiskApiMockTest.java
@@ -23,11 +23,13 @@ import com.google.common.collect.ImmutableMap;
 import org.jclouds.azurecompute.arm.domain.CreationData;
 import org.jclouds.azurecompute.arm.domain.Disk;
 import org.jclouds.azurecompute.arm.domain.DiskProperties;
+import org.jclouds.azurecompute.arm.domain.DiskSku;
 import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiMockTest;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
 import static com.google.common.collect.Iterables.isEmpty;
+import static org.jclouds.azurecompute.arm.domain.StorageAccountType.PREMIUM_LRS;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNull;
 import static org.testng.Assert.assertTrue;
@@ -78,6 +80,27 @@ public class DiskApiMockTest extends BaseAzureComputeApiMockTest {
       assertTrue(dataDisk.tags().containsValue("jclouds-test-tag"));
    }
 
+   public void createDiskWithTagsAndSku() throws InterruptedException {
+
+      server.enqueue(jsonResponse("/creatediskwithtagsandskuresponse.json").setResponseCode(200));
+
+      final DiskApi diskApi = api.getDiskApi(resourcegroup);
+
+      DiskProperties properties = DiskProperties.builder().diskSizeGB(2).creationData(CreationData.create(CreationData.CreateOptions.EMPTY)).build();
+
+      DiskSku sku = DiskSku.builder().name(PREMIUM_LRS).build();
+
+      Disk dataDisk = diskApi.createOrUpdate(diskName, "westus", ImmutableMap.of("exampleTag", "jclouds-test-tag"), properties, sku);
+
+      String path = String.format("/subscriptions/%s/resourcegroups/%s/providers/Microsoft.Compute/disks/%s?%s", subscriptionid, resourcegroup, diskName, apiVersion);
+      String json = "{\"location\":\"westus\",\"tags\":{\"exampleTag\":\"jclouds-test-tag\"},\"properties\":{\"diskSizeGB\":2,\"creationData\":{\"createOption\":\"Empty\"}},\"sku\":{\"name\":\"Premium_LRS\"}}";
+      assertSent(server, "PUT", path, json);
+
+      assertEquals(dataDisk.properties().provisioningState(), "Updating");
+      assertTrue(dataDisk.properties().diskSizeGB() == 2);
+      assertTrue(dataDisk.tags().containsValue("jclouds-test-tag"));
+   }
+
    public void getDisk() throws InterruptedException {
 
       server.enqueue(jsonResponse("/getdisk.json").setResponseCode(200));
diff --git a/providers/azurecompute-arm/src/test/resources/creatediskwithtagsandskuresponse.json b/providers/azurecompute-arm/src/test/resources/creatediskwithtagsandskuresponse.json
new file mode 100644
index 0000000..8c3a3d4
--- /dev/null
+++ b/providers/azurecompute-arm/src/test/resources/creatediskwithtagsandskuresponse.json
@@ -0,0 +1,17 @@
+{
+  "properties": {
+    "creationData": {
+      "createOption": "Empty"
+    },
+    "diskSizeGB": 2,
+    "provisioningState": "Updating",
+    "isArmResource": true
+  },
+  "tags": {
+    "exampleTag": "jclouds-test-tag"
+  },
+  "sku": {
+    "name": "Premium_LRS"
+  },
+  "location": "westeurope"
+}