Repository: jclouds-labs Updated Branches: refs/heads/master f58f96b18 -> 7fe205f0b
Added support for metadata and tags to Azure ARM Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/7fe205f0 Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/7fe205f0 Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/7fe205f0 Branch: refs/heads/master Commit: 7fe205f0b4c270b4f51c0c5ccdc2f3283e1ace12 Parents: f58f96b Author: Ignasi Barrera <n...@apache.org> Authored: Mon Oct 17 12:38:14 2016 +0200 Committer: Ignasi Barrera <n...@apache.org> Committed: Mon Oct 17 13:27:25 2016 +0200 ---------------------------------------------------------------------- .../arm/compute/AzureComputeServiceAdapter.java | 7 +++++-- .../functions/VirtualMachineToNodeMetadata.java | 10 ++++------ .../arm/features/VirtualMachineApi.java | 6 ++++-- .../arm/compute/AzureComputeServiceLiveTest.java | 14 -------------- .../arm/features/VirtualMachineApiLiveTest.java | 4 +++- .../arm/features/VirtualMachineApiMockTest.java | 19 ++++++++++--------- .../resources/createvirtualmachineresponse.json | 5 ++++- .../src/test/resources/virtualmachine.json | 5 ++++- 8 files changed, 34 insertions(+), 36 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/7fe205f0/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 434c92f..8e4531d 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 @@ -24,9 +24,11 @@ import static org.jclouds.azurecompute.arm.compute.extensions.AzureComputeImageE import static org.jclouds.azurecompute.arm.compute.extensions.AzureComputeImageExtension.CUSTOM_IMAGE_OFFER; import static org.jclouds.azurecompute.arm.compute.functions.VMImageToImage.decodeFieldsFromUniqueId; import static org.jclouds.azurecompute.arm.compute.functions.VMImageToImage.encodeFieldsToUniqueIdCustom; +import static org.jclouds.compute.util.ComputeServiceUtils.metadataAndTagsAsCommaDelimitedValue; import static org.jclouds.util.Closeables2.closeQuietly; import java.util.List; +import java.util.Map; import java.util.Set; import javax.inject.Inject; @@ -124,7 +126,6 @@ public class AzureComputeServiceAdapter implements ComputeServiceAdapter<Virtual // TODO Store group apart from the name to be able to identify nodes with // custom names in the configured group // TODO ARM specific options - // TODO user metadata and tags // TODO network ids => create one nic in each network // TODO inbound ports @@ -141,9 +142,11 @@ public class AzureComputeServiceAdapter implements ComputeServiceAdapter<Virtual .availabilitySet(null) // TODO .hardwareProfile(hardwareProfile).storageProfile(storageProfile).osProfile(osProfile) .networkProfile(networkProfile).build(); + + Map<String, String> metadataAndTags = metadataAndTagsAsCommaDelimitedValue(template.getOptions()); VirtualMachine virtualMachine = api.getVirtualMachineApi(azureGroup).create(name, template.getLocation().getId(), - virtualMachineProperties); + virtualMachineProperties, metadataAndTags); // Safe to pass null credentials here, as jclouds will default populate // the node with the default credentials from the image, or the ones in http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/7fe205f0/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 1f90870..48c8508 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 @@ -23,6 +23,7 @@ import static com.google.common.collect.Iterables.tryFind; import static org.jclouds.azurecompute.arm.compute.extensions.AzureComputeImageExtension.CONTAINER_NAME; import static org.jclouds.azurecompute.arm.compute.extensions.AzureComputeImageExtension.CUSTOM_IMAGE_OFFER; import static org.jclouds.azurecompute.arm.compute.functions.VMImageToImage.encodeFieldsToUniqueId; +import static org.jclouds.compute.util.ComputeServiceUtils.addMetadataAndParseTagsFromCommaDelimitedValue; import static org.jclouds.util.Closeables2.closeQuietly; import java.util.List; @@ -96,7 +97,6 @@ public class VirtualMachineToNodeMetadata implements Function<VirtualMachine, No .put(VirtualMachineProperties.ProvisioningState.CREATING, NodeMetadata.Status.PENDING) .put(VirtualMachineProperties.ProvisioningState.RUNNING, NodeMetadata.Status.PENDING) .put(VirtualMachineProperties.ProvisioningState.UPDATING, NodeMetadata.Status.PENDING) - .put(VirtualMachineProperties.ProvisioningState.SUCCEEDED, NodeMetadata.Status.RUNNING) .put(VirtualMachineProperties.ProvisioningState.DELETED, NodeMetadata.Status.TERMINATED) .put(VirtualMachineProperties.ProvisioningState.CANCELED, NodeMetadata.Status.TERMINATED) .put(VirtualMachineProperties.ProvisioningState.FAILED, NodeMetadata.Status.ERROR) @@ -148,8 +148,7 @@ public class VirtualMachineToNodeMetadata implements Function<VirtualMachine, No builder.providerId(virtualMachine.id()); builder.name(virtualMachine.name()); builder.hostname(virtualMachine.name()); - String group = this.nodeNamingConvention.extractGroup(virtualMachine.name()); - builder.group(group); + builder.group(nodeNamingConvention.extractGroup(virtualMachine.name())); ProvisioningState provisioningState = virtualMachine.properties().provisioningState(); if (ProvisioningState.SUCCEEDED.equals(provisioningState)) { @@ -177,10 +176,9 @@ public class VirtualMachineToNodeMetadata implements Function<VirtualMachine, No builder.privateAddresses(getPrivateIpAddresses(virtualMachine.properties().networkProfile().networkInterfaces())); if (virtualMachine.tags() != null) { - Map<String, String> userMetaData = virtualMachine.tags(); - builder.userMetadata(userMetaData); - builder.tags(Splitter.on(",").split(userMetaData.get("tags"))); + addMetadataAndParseTagsFromCommaDelimitedValue(builder, virtualMachine.tags()); } + String locationName = virtualMachine.location(); builder.location(getLocation(locationName)); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/7fe205f0/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/VirtualMachineApi.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/VirtualMachineApi.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/VirtualMachineApi.java index 2dd6d34..2b44fa4 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/VirtualMachineApi.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/VirtualMachineApi.java @@ -18,6 +18,7 @@ package org.jclouds.azurecompute.arm.features; import java.net.URI; import java.util.List; +import java.util.Map; import javax.inject.Named; import javax.ws.rs.Consumes; @@ -80,14 +81,15 @@ public interface VirtualMachineApi { */ @Named("CreateVirtualMachine") @PUT - @Payload("%7B\"location\":\"{location}\",\"tags\":%7B%7D,\"properties\":{properties}%7D") + @Payload("%7B\"location\":\"{location}\",\"tags\":{tags},\"properties\":{properties}%7D") @MapBinder(BindToJsonPayload.class) @Path("/{vmname}") @QueryParams(keys = "validating", values = "false") @Produces(MediaType.APPLICATION_JSON) VirtualMachine create(@PathParam("vmname") String vmname, @PayloadParam("location") String location, - @PayloadParam("properties") VirtualMachineProperties properties); + @PayloadParam("properties") VirtualMachineProperties properties, + @PayloadParam("tags") Map<String, String> tags); /** * The List Virtual Machines operation http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/7fe205f0/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java index c59509f..784f007 100644 --- a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java +++ b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java @@ -22,7 +22,6 @@ import java.util.Properties; import org.jclouds.azurecompute.arm.AzureComputeProviderMetadata; import org.jclouds.azurecompute.arm.internal.AzureLiveTestUtils; -import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.Template; import org.jclouds.compute.domain.TemplateBuilder; import org.jclouds.compute.internal.BaseComputeServiceLiveTest; @@ -36,8 +35,6 @@ import org.jclouds.scriptbuilder.statements.login.AdminAccess; import org.jclouds.sshj.config.SshjSshClientModule; import org.testng.annotations.Test; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; import com.google.inject.Module; /** @@ -86,15 +83,4 @@ public class AzureComputeServiceLiveTest extends BaseComputeServiceLiveTest { InstallJDK.fromOpenJDK() })); return template; } - - @Override - protected void checkUserMetadataContains(NodeMetadata node, ImmutableMap<String, String> userMetadata) { - // User metadata not yet supported - } - - @Override - protected void checkTagsInNodeEquals(NodeMetadata node, ImmutableSet<String> tags) { - // Tags not yet supported - } - } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/7fe205f0/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiLiveTest.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiLiveTest.java b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiLiveTest.java index 0973693..a0e2cbe 100644 --- a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiLiveTest.java +++ b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiLiveTest.java @@ -23,6 +23,7 @@ import static org.testng.Assert.assertTrue; import java.net.URI; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Map; @@ -111,7 +112,8 @@ public class VirtualMachineApiLiveTest extends BaseAzureComputeApiLiveTest { public void testCreate() { String blob = storageService.storageServiceProperties().primaryEndpoints().get("blob"); - VirtualMachine vm = api().create(vmName, LOCATION, getProperties(blob, nicName)); + VirtualMachine vm = api().create(vmName, LOCATION, getProperties(blob, nicName), + Collections.<String, String> emptyMap()); assertTrue(!vm.name().isEmpty()); //Poll until resource is ready to be used http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/7fe205f0/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiMockTest.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiMockTest.java b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiMockTest.java index bb36dc5..fd72344 100644 --- a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiMockTest.java +++ b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiMockTest.java @@ -16,6 +16,12 @@ */ package org.jclouds.azurecompute.arm.features; +import static com.google.common.collect.Iterables.isEmpty; +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertNull; +import static org.testng.Assert.assertTrue; + import java.net.URI; import java.text.DateFormat; import java.text.SimpleDateFormat; @@ -40,14 +46,9 @@ import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiMockTest; import org.testng.annotations.Test; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; import com.squareup.okhttp.mockwebserver.MockResponse; -import static com.google.common.collect.Iterables.isEmpty; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertNotNull; -import static org.testng.Assert.assertNull; -import static org.testng.Assert.assertTrue; - @Test(groups = "unit", testName = "VirtualMachineApiMockTest", singleThreaded = true) public class VirtualMachineApiMockTest extends BaseAzureComputeApiMockTest { @@ -107,11 +108,11 @@ public class VirtualMachineApiMockTest extends BaseAzureComputeApiMockTest { server.enqueue(jsonResponse("/createvirtualmachineresponse.json")); final VirtualMachineApi vmAPI = api.getVirtualMachineApi("groupname"); - VirtualMachine vm = vmAPI.create("windowsmachine", "westus", getProperties()); + VirtualMachine vm = vmAPI.create("windowsmachine", "westus", getProperties(), ImmutableMap.of("foo", "bar")); assertEquals(vm, getVM()); assertSent(server, "PUT", "/subscriptions/SUBSCRIPTIONID/resourceGroups/groupname/providers/Microsoft.Compute" + "/virtualMachines/windowsmachine?validating=false&api-version=2016-03-30", - "{\"location\":\"westus\",\"properties\":" + + "{\"location\":\"westus\",\"tags\":{\"foo\":\"bar\"},\"properties\":" + "{\"vmId\":\"27ee085b-d707-xxxx-yyyy-2370e2eb1cc1\"," + "\"hardwareProfile\":{\"vmSize\":\"Standard_D1\"}," + "\"storageProfile\":{\"imageReference\":{\"publisher\":\"publisher\",\"offer\":\"offer\",\"sku\":\"sku\",\"version\":\"ver\"}," + @@ -240,7 +241,7 @@ public class VirtualMachineApiMockTest extends BaseAzureComputeApiMockTest { VirtualMachineProperties properties = getProperties(); VirtualMachine machine = VirtualMachine.create("/subscriptions/SUBSCRIPTIONID/" + "" + "resourceGroups/groupname/providers/Microsoft.Compute/virtualMachines/windowsmachine", "windowsmachine", - "Microsoft.Compute/virtualMachines", "westus", null, properties); + "Microsoft.Compute/virtualMachines", "westus", ImmutableMap.of("foo", "bar"), properties); return machine; } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/7fe205f0/azurecompute-arm/src/test/resources/createvirtualmachineresponse.json ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/test/resources/createvirtualmachineresponse.json b/azurecompute-arm/src/test/resources/createvirtualmachineresponse.json index ae16bdb..27464e8 100644 --- a/azurecompute-arm/src/test/resources/createvirtualmachineresponse.json +++ b/azurecompute-arm/src/test/resources/createvirtualmachineresponse.json @@ -43,5 +43,8 @@ "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/groupname/providers/Microsoft.Compute/virtualMachines/windowsmachine", "name": "windowsmachine", "type": "Microsoft.Compute/virtualMachines", - "location": "westus" + "location": "westus", + "tags": { + "foo": "bar" + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/7fe205f0/azurecompute-arm/src/test/resources/virtualmachine.json ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/test/resources/virtualmachine.json b/azurecompute-arm/src/test/resources/virtualmachine.json index 4dda519..96a42be 100644 --- a/azurecompute-arm/src/test/resources/virtualmachine.json +++ b/azurecompute-arm/src/test/resources/virtualmachine.json @@ -43,5 +43,8 @@ "id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/groupname/providers/Microsoft.Compute/virtualMachines/windowsmachine", "name": "windowsmachine", "type": "Microsoft.Compute/virtualMachines", - "location": "westus" + "location": "westus", + "tags": { + "foo": "bar" + } }