Add tag support to azure disks

This commit is contained in:
Simone Locci 2019-08-06 17:34:19 +02:00 committed by Ignasi Barrera
parent 130c0df5ce
commit bd59263d47
4 changed files with 48 additions and 1 deletions

View File

@ -18,6 +18,7 @@ package org.jclouds.azurecompute.arm.features;
import java.net.URI; import java.net.URI;
import java.util.List; import java.util.List;
import java.util.Map;
import javax.inject.Named; import javax.inject.Named;
import javax.ws.rs.Consumes; import javax.ws.rs.Consumes;
@ -34,6 +35,7 @@ import org.jclouds.azurecompute.arm.domain.Disk;
import org.jclouds.azurecompute.arm.domain.DiskProperties; import org.jclouds.azurecompute.arm.domain.DiskProperties;
import org.jclouds.azurecompute.arm.filters.ApiVersionFilter; import org.jclouds.azurecompute.arm.filters.ApiVersionFilter;
import org.jclouds.azurecompute.arm.functions.URIParser; import org.jclouds.azurecompute.arm.functions.URIParser;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.oauth.v2.filters.OAuthFilter; import org.jclouds.oauth.v2.filters.OAuthFilter;
import org.jclouds.rest.annotations.Fallback; import org.jclouds.rest.annotations.Fallback;
import org.jclouds.rest.annotations.MapBinder; import org.jclouds.rest.annotations.MapBinder;
@ -62,6 +64,15 @@ public interface DiskApi {
@PayloadParam("location") String location, @PayloadParam("location") String location,
@PayloadParam("properties") DiskProperties properties); @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);
@Named("disk:get") @Named("disk:get")
@Path("/{diskName}") @Path("/{diskName}")
@GET @GET

View File

@ -30,6 +30,7 @@ import org.testng.annotations.Test;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.base.Supplier; import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertNotNull;
@ -58,9 +59,10 @@ public class DiskApiLiveTest extends BaseAzureComputeApiLiveTest {
@Test @Test
public void createDisk() { public void createDisk() {
DiskProperties properties = DiskProperties.builder().creationData(CreationData.create(CreationData.CreateOptions.EMPTY)).diskSizeGB(2).build(); DiskProperties properties = DiskProperties.builder().creationData(CreationData.create(CreationData.CreateOptions.EMPTY)).diskSizeGB(2).build();
Disk dataDisk = api().createOrUpdate(diskName, LOCATION, properties); Disk dataDisk = api().createOrUpdate(diskName, LOCATION, ImmutableMap.of("exampleTag", "jclouds-test-tag"), properties);
assertTrue(waitUntilAvailable(diskName), "creation operation did not complete in the configured timeout"); assertTrue(waitUntilAvailable(diskName), "creation operation did not complete in the configured timeout");
assertTrue(dataDisk.properties().diskSizeGB() == 2); assertTrue(dataDisk.properties().diskSizeGB() == 2);
assertTrue(dataDisk.tags().containsValue("jclouds-test-tag"));
} }
@Test(dependsOnMethods = "createDisk") @Test(dependsOnMethods = "createDisk")

View File

@ -19,6 +19,7 @@ package org.jclouds.azurecompute.arm.features;
import java.net.URI; import java.net.URI;
import java.util.List; import java.util.List;
import com.google.common.collect.ImmutableMap;
import org.jclouds.azurecompute.arm.domain.CreationData; import org.jclouds.azurecompute.arm.domain.CreationData;
import org.jclouds.azurecompute.arm.domain.Disk; import org.jclouds.azurecompute.arm.domain.Disk;
import org.jclouds.azurecompute.arm.domain.DiskProperties; import org.jclouds.azurecompute.arm.domain.DiskProperties;
@ -58,6 +59,25 @@ public class DiskApiMockTest extends BaseAzureComputeApiMockTest {
assertTrue(dataDisk.properties().diskSizeGB() == 2); assertTrue(dataDisk.properties().diskSizeGB() == 2);
} }
public void createDiskWithTags() throws InterruptedException {
server.enqueue(jsonResponse("/creatediskwithtagsresponse.json").setResponseCode(200));
final DiskApi diskApi = api.getDiskApi(resourcegroup);
DiskProperties properties = DiskProperties.builder().diskSizeGB(2).creationData(CreationData.create(CreationData.CreateOptions.EMPTY)).build();
Disk dataDisk = diskApi.createOrUpdate(diskName, "westus", ImmutableMap.of("exampleTag", "jclouds-test-tag"), properties);
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\"}}}";
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 { public void getDisk() throws InterruptedException {
server.enqueue(jsonResponse("/getdisk.json").setResponseCode(200)); server.enqueue(jsonResponse("/getdisk.json").setResponseCode(200));

View File

@ -0,0 +1,14 @@
{
"properties": {
"creationData": {
"createOption": "Empty"
},
"diskSizeGB": 2,
"provisioningState": "Updating",
"isArmResource": true
},
"tags": {
"exampleTag": "jclouds-test-tag"
},
"location": "westeurope"
}