[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>
