[JCLOUDS-1142] add suport for ProvisionGuestAgent configuration

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

Branch: refs/heads/master
Commit: e1c55b481b1ffcc291b1c26cfe742f3c3db1696a
Parents: 4e37f70
Author: Josef Cacek <[email protected]>
Authored: Sun Jul 17 22:22:42 2016 +0200
Committer: Ignasi Barrera <[email protected]>
Committed: Sun Jul 17 23:30:08 2016 +0200

----------------------------------------------------------------------
 .../binders/DeploymentParamsToXML.java          | 33 +++++++++++---------
 .../jclouds/azurecompute/binders/RoleToXML.java |  3 ++
 .../compute/AzureComputeServiceAdapter.java     |  1 +
 .../options/AzureComputeTemplateOptions.java    | 14 +++++++++
 .../azurecompute/domain/DeploymentParams.java   | 14 ++++++++-
 .../src/test/resources/role-update-body.xml     |  1 +
 6 files changed, 51 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e1c55b48/azurecompute/src/main/java/org/jclouds/azurecompute/binders/DeploymentParamsToXML.java
----------------------------------------------------------------------
diff --git 
a/azurecompute/src/main/java/org/jclouds/azurecompute/binders/DeploymentParamsToXML.java
 
b/azurecompute/src/main/java/org/jclouds/azurecompute/binders/DeploymentParamsToXML.java
index c220551..fbbdcd0 100644
--- 
a/azurecompute/src/main/java/org/jclouds/azurecompute/binders/DeploymentParamsToXML.java
+++ 
b/azurecompute/src/main/java/org/jclouds/azurecompute/binders/DeploymentParamsToXML.java
@@ -26,6 +26,9 @@ import org.jclouds.rest.Binder;
 
 import com.jamesmurty.utils.XMLBuilder;
 
+/**
+ * Generates XML for <a 
href="https://msdn.microsoft.com/en-us/library/azure/jj157194.aspx";>Create 
Virtual Machine Deployment</a> REST call.
+ */
 public final class DeploymentParamsToXML implements Binder {
 
    @Override
@@ -33,18 +36,19 @@ public final class DeploymentParamsToXML implements Binder {
       DeploymentParams params = DeploymentParams.class.cast(input);
 
       try {
-         XMLBuilder builder = XMLBuilder.create("Deployment", 
"http://schemas.microsoft.com/windowsazure";)
+         XMLBuilder deploymentBuilder = XMLBuilder.create("Deployment", 
"http://schemas.microsoft.com/windowsazure";)
                  .e("Name").t(params.name()).up()
                  .e("DeploymentSlot").t("Production").up()
-                 .e("Label").t(params.name()).up()
+                 .e("Label").t(params.name()).up();
+         XMLBuilder roleBuilder = deploymentBuilder
                  .e("RoleList")
                  .e("Role")
                  .e("RoleName").t(params.name()).up()
-                 .e("RoleType").t("PersistentVMRole").up()
-                 .e("ConfigurationSets");
+                 .e("RoleType").t("PersistentVMRole").up();
+         XMLBuilder configSetsBuilder = roleBuilder.e("ConfigurationSets");
 
          if (params.os() == OSImage.Type.WINDOWS) {
-            XMLBuilder configBuilder = builder.e("ConfigurationSet"); // 
Windows
+            XMLBuilder configBuilder = 
configSetsBuilder.e("ConfigurationSet"); // Windows
             
configBuilder.e("ConfigurationSetType").t("WindowsProvisioningConfiguration").up()
                     .e("ComputerName").t(params.name()).up()
                     .e("AdminPassword").t(params.password()).up()
@@ -67,7 +71,7 @@ public final class DeploymentParamsToXML implements Binder {
                     .e("AdminPassword").t(params.username()).up()
                     .up(); // Windows ConfigurationSet
          } else if (params.os() == OSImage.Type.LINUX) {
-            XMLBuilder configBuilder = builder.e("ConfigurationSet"); // Linux
+            XMLBuilder configBuilder = 
configSetsBuilder.e("ConfigurationSet"); // Linux
             
configBuilder.e("ConfigurationSetType").t("LinuxProvisioningConfiguration").up()
                     .e("HostName").t(params.name()).up()
                     .e("UserName").t(params.username()).up()
@@ -81,7 +85,7 @@ public final class DeploymentParamsToXML implements Binder {
             throw new IllegalArgumentException("Unrecognized os type " + 
params);
          }
 
-         XMLBuilder configBuilder = builder.e("ConfigurationSet"); // Network
+         XMLBuilder configBuilder = configSetsBuilder.e("ConfigurationSet"); 
// Network
          
configBuilder.e("ConfigurationSetType").t("NetworkConfiguration").up();
 
          XMLBuilder inputEndpoints = configBuilder.e("InputEndpoints");
@@ -104,7 +108,7 @@ public final class DeploymentParamsToXML implements Binder {
             }
          }
 
-         builder.up() //ConfigurationSets
+         roleBuilder
                  // TODO No Disk should be specified for a Role if using a 
VMImage
                  .e("DataVirtualHardDisks").up()
                  .e("OSVirtualHardDisk")
@@ -116,17 +120,18 @@ public final class DeploymentParamsToXML implements 
Binder {
                  .e("SourceImageName").t(params.sourceImageName()).up()
                  .e("OS").t(params.os() == LINUX ? "Linux" : "Windows").up()
                  .up() //OSVirtualHardDisk
-                 .e("RoleSize").t(params.size().getText()).up()
-                 .up() //Role
-                 .up(); //RoleList
+                 .e("RoleSize").t(params.size().getText()).up();
+         if (params.provisionGuestAgent() != null) {
+            
roleBuilder.e("ProvisionGuestAgent").t(params.provisionGuestAgent().toString()).up();
+         }
          if (params.virtualNetworkName() != null) {
-            
builder.up().up().up().e("VirtualNetworkName").t(params.virtualNetworkName()).up();
+            
configSetsBuilder.up().up().up().e("VirtualNetworkName").t(params.virtualNetworkName()).up();
          }
          if (params.reservedIPName() != null) {
-            
builder.up().up().up().e("ReservedIPName").t(params.reservedIPName()).up();
+            
configSetsBuilder.up().up().up().e("ReservedIPName").t(params.reservedIPName()).up();
          }
 
-         return (R) request.toBuilder().payload(builder.asString()).build();
+         return (R) 
request.toBuilder().payload(configSetsBuilder.asString()).build();
       } catch (Exception e) {
          throw propagate(e);
       }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e1c55b48/azurecompute/src/main/java/org/jclouds/azurecompute/binders/RoleToXML.java
----------------------------------------------------------------------
diff --git 
a/azurecompute/src/main/java/org/jclouds/azurecompute/binders/RoleToXML.java 
b/azurecompute/src/main/java/org/jclouds/azurecompute/binders/RoleToXML.java
index 7c8d529..9f77d76 100644
--- a/azurecompute/src/main/java/org/jclouds/azurecompute/binders/RoleToXML.java
+++ b/azurecompute/src/main/java/org/jclouds/azurecompute/binders/RoleToXML.java
@@ -75,6 +75,9 @@ public class RoleToXML implements Binder {
                  .e("OS").t(role.osVirtualHardDisk().os().toString()).up()
                  .up() // OSVirtualHardDisk
                  .e("RoleSize").t(role.roleSize().getText());
+         if (role.provisionGuestAgent() != null) {
+            
builder.e("ProvisionGuestAgent").t(role.provisionGuestAgent().toString()).up();
+         }
          return (R) request.toBuilder().payload(builder.asString()).build();
       } catch (Exception e) {
          throw propagate(e);

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e1c55b48/azurecompute/src/main/java/org/jclouds/azurecompute/compute/AzureComputeServiceAdapter.java
----------------------------------------------------------------------
diff --git 
a/azurecompute/src/main/java/org/jclouds/azurecompute/compute/AzureComputeServiceAdapter.java
 
b/azurecompute/src/main/java/org/jclouds/azurecompute/compute/AzureComputeServiceAdapter.java
index 7a65e6d..394dc65 100644
--- 
a/azurecompute/src/main/java/org/jclouds/azurecompute/compute/AzureComputeServiceAdapter.java
+++ 
b/azurecompute/src/main/java/org/jclouds/azurecompute/compute/AzureComputeServiceAdapter.java
@@ -134,6 +134,7 @@ public class AzureComputeServiceAdapter implements 
ComputeServiceAdapter<Deploym
               .externalEndpoints(externalEndpoints)
               .virtualNetworkName(templateOptions.getVirtualNetworkName())
               .subnetNames(templateOptions.getSubnetNames())
+              .provisionGuestAgent(templateOptions.getProvisionGuestAgent())
               .build();
 
       message = String.format("Creating a deployment with params '%s' ...", 
params);

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e1c55b48/azurecompute/src/main/java/org/jclouds/azurecompute/compute/options/AzureComputeTemplateOptions.java
----------------------------------------------------------------------
diff --git 
a/azurecompute/src/main/java/org/jclouds/azurecompute/compute/options/AzureComputeTemplateOptions.java
 
b/azurecompute/src/main/java/org/jclouds/azurecompute/compute/options/AzureComputeTemplateOptions.java
index ed31e71..3b80afd 100644
--- 
a/azurecompute/src/main/java/org/jclouds/azurecompute/compute/options/AzureComputeTemplateOptions.java
+++ 
b/azurecompute/src/main/java/org/jclouds/azurecompute/compute/options/AzureComputeTemplateOptions.java
@@ -53,6 +53,7 @@ public class AzureComputeTemplateOptions extends 
TemplateOptions implements Clon
    protected String storageAccountType;
    protected String networkSecurityGroupName;
    protected String reservedIPName;
+   protected Boolean provisionGuestAgent;
 
    @Override
    public AzureComputeTemplateOptions clone() {
@@ -73,6 +74,7 @@ public class AzureComputeTemplateOptions extends 
TemplateOptions implements Clon
          eTo.storageAccountName(storageAccountName);
          eTo.storageAccountType(storageAccountType);
          eTo.reservedIPName(reservedIPName);
+         eTo.provisionGuestAgent(provisionGuestAgent);
       }
    }
 
@@ -91,6 +93,7 @@ public class AzureComputeTemplateOptions extends 
TemplateOptions implements Clon
       if (storageAccountType != null ? 
!storageAccountType.equals(that.storageAccountType) : that.storageAccountType 
!= null) return false;
       if (subnetNames != null ? !subnetNames.equals(that.subnetNames) : 
that.subnetNames != null) return false;
       if (virtualNetworkName != null ? 
!virtualNetworkName.equals(that.virtualNetworkName) : that.virtualNetworkName 
!= null) return false;
+      if (provisionGuestAgent != null ? 
!provisionGuestAgent.equals(that.provisionGuestAgent) : 
that.provisionGuestAgent != null) return false;
 
       return true;
    }
@@ -104,6 +107,7 @@ public class AzureComputeTemplateOptions extends 
TemplateOptions implements Clon
       result = 31 * result + (storageAccountType != null ? 
storageAccountType.hashCode() : 0);
       result = 31 * result + (networkSecurityGroupName != null ? 
networkSecurityGroupName.hashCode() : 0);
       result = 31 * result + (reservedIPName != null ? 
reservedIPName.hashCode() : 0);
+      result = 31 * result + (provisionGuestAgent != null ? 
provisionGuestAgent.hashCode() : 0);
       return result;
    }
 
@@ -116,6 +120,7 @@ public class AzureComputeTemplateOptions extends 
TemplateOptions implements Clon
               .add("storageAccountType", storageAccountType)
               .add("networkSecurityGroupName", networkSecurityGroupName)
               .add("reservedIPName", reservedIPName)
+              .add("provisionGuestAgent", provisionGuestAgent)
               .toString();
    }
 
@@ -154,6 +159,11 @@ public class AzureComputeTemplateOptions extends 
TemplateOptions implements Clon
       return this;
    }
 
+   public AzureComputeTemplateOptions provisionGuestAgent(@Nullable Boolean 
provisionGuestAgent) {
+      this.provisionGuestAgent = provisionGuestAgent;
+      return this;
+   }
+
    public String getVirtualNetworkName() {
       return virtualNetworkName;
    }
@@ -178,6 +188,10 @@ public class AzureComputeTemplateOptions extends 
TemplateOptions implements Clon
       return reservedIPName;
    }
 
+   public Boolean getProvisionGuestAgent() {
+      return provisionGuestAgent;
+   }
+
    public static class Builder {
 
       /**

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e1c55b48/azurecompute/src/main/java/org/jclouds/azurecompute/domain/DeploymentParams.java
----------------------------------------------------------------------
diff --git 
a/azurecompute/src/main/java/org/jclouds/azurecompute/domain/DeploymentParams.java
 
b/azurecompute/src/main/java/org/jclouds/azurecompute/domain/DeploymentParams.java
index 2cf93ad..5208d2d 100644
--- 
a/azurecompute/src/main/java/org/jclouds/azurecompute/domain/DeploymentParams.java
+++ 
b/azurecompute/src/main/java/org/jclouds/azurecompute/domain/DeploymentParams.java
@@ -126,6 +126,16 @@ public abstract class DeploymentParams {
 
    public abstract List<String> subnetNames();
 
+   /**
+    * Optional. Indicates whether the VM Agent is installed on the Virtual
+    * Machine. To run a resource extension in a Virtual Machine, this agent 
must
+    * be installed.
+    *
+    * @return provisionGuestAgent true/false flag (or null)
+    */
+   @Nullable
+   public abstract Boolean provisionGuestAgent();
+
    public static Builder builder() {
       return new AutoValue_DeploymentParams.Builder()
               .externalEndpoints(ImmutableSet.<ExternalEndpoint> of())
@@ -147,6 +157,7 @@ public abstract class DeploymentParams {
       public abstract Builder virtualNetworkName(String virtualNetworkName);
       public abstract Builder reservedIPName(String reservedIPName);
       public abstract Builder subnetNames(List<String> subnetNames);
+      public abstract Builder provisionGuestAgent(Boolean provisionGuestAgent);
 
       abstract Set<ExternalEndpoint> externalEndpoints();
       abstract List<String> subnetNames();
@@ -164,11 +175,12 @@ public abstract class DeploymentParams {
                                          String password, String 
sourceImageName, URI mediaLink,
                                          OSImage.Type os, 
Set<ExternalEndpoint> externalEndpoints,
                                          String virtualNetworkName, String 
reservedIPName,
-                                         List<String> subnetNames) {
+                                         List<String> subnetNames, Boolean 
provisionGuestAgent) {
       return 
builder().name(name).size(size).username(username).password(password)
               .sourceImageName(sourceImageName).mediaLink(mediaLink).os(os)
               
.externalEndpoints(externalEndpoints).virtualNetworkName(virtualNetworkName)
               .reservedIPName(reservedIPName).subnetNames(subnetNames)
+              .provisionGuestAgent(provisionGuestAgent)
               .build();
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/e1c55b48/azurecompute/src/test/resources/role-update-body.xml
----------------------------------------------------------------------
diff --git a/azurecompute/src/test/resources/role-update-body.xml 
b/azurecompute/src/test/resources/role-update-body.xml
index c095352..841ffb5 100644
--- a/azurecompute/src/test/resources/role-update-body.xml
+++ b/azurecompute/src/test/resources/role-update-body.xml
@@ -33,4 +33,5 @@
     <OS>WINDOWS</OS>
   </OSVirtualHardDisk>
   <RoleSize>Small</RoleSize>
+  <ProvisionGuestAgent>true</ProvisionGuestAgent>
 </PersistentVMRole>

Reply via email to