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"
+  }
 }

Reply via email to