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 2016/07/17 21:46:17 UTC

[3/4] jclouds-labs git commit: [JCLOUDS-1142] add suport for ProvisionGuestAgent configuration

[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 <jc...@redhat.com>
Authored: Sun Jul 17 22:22:42 2016 +0200
Committer: Ignasi Barrera <na...@apache.org>
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>