Repository: jclouds-labs Updated Branches: refs/heads/2.0.x 71511bb8e -> eec594dd1
JCLOUDS-1282: Add back support for Azure ARM custom data Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/eec594dd Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/eec594dd Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/eec594dd Branch: refs/heads/2.0.x Commit: eec594dd153bb6da89835334a9f8577b960b8cb5 Parents: 71511bb Author: Vikas Rangarajan <[email protected]> Authored: Fri May 26 16:16:35 2017 -0500 Committer: Ignasi Barrera <[email protected]> Committed: Fri Sep 29 10:19:55 2017 +0200 ---------------------------------------------------------------------- .../arm/compute/AzureComputeServiceAdapter.java | 8 +- .../compute/options/AzureTemplateOptions.java | 128 +++++++++++++------ 2 files changed, 94 insertions(+), 42 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/eec594dd/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 0a37d5d..5597e05 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 @@ -99,6 +99,7 @@ import com.google.common.base.Function; import com.google.common.base.Objects; import com.google.common.base.Predicate; import com.google.common.base.Splitter; +import com.google.common.base.Strings; import com.google.common.base.Supplier; import com.google.common.collect.FluentIterable; import com.google.common.collect.ImmutableList; @@ -381,7 +382,7 @@ public class AzureComputeServiceAdapter implements ComputeServiceAdapter<Virtual OSProfile.Builder builder = OSProfile.builder().adminUsername(adminUsername).adminPassword(adminPassword) .computerName(computerName); - if (template.getOptions().getPublicKey() != null + if (!Strings.isNullOrEmpty(template.getOptions().getPublicKey()) && OsFamily.WINDOWS != template.getImage().getOperatingSystem().getFamily()) { OSProfile.LinuxConfiguration linuxConfiguration = OSProfile.LinuxConfiguration.create("true", OSProfile.LinuxConfiguration.SSH.create(of( @@ -391,7 +392,6 @@ public class AzureComputeServiceAdapter implements ComputeServiceAdapter<Virtual builder.linuxConfiguration(linuxConfiguration); } - AzureTemplateOptions azureTemplateOptions = template.getOptions().as(AzureTemplateOptions.class); if (azureTemplateOptions.getWindowsConfiguration() != null) { @@ -402,6 +402,10 @@ public class AzureComputeServiceAdapter implements ComputeServiceAdapter<Virtual builder.secrets(azureTemplateOptions.getSecrets()); } + if (!Strings.isNullOrEmpty(azureTemplateOptions.getCustomData())) { + builder.customData(azureTemplateOptions.getCustomData()); + } + return builder.build(); } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/eec594dd/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/options/AzureTemplateOptions.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/options/AzureTemplateOptions.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/options/AzureTemplateOptions.java index 6ba85d1..7710beb 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/options/AzureTemplateOptions.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/options/AzureTemplateOptions.java @@ -41,7 +41,8 @@ public class AzureTemplateOptions extends TemplateOptions implements Cloneable { private List<IpOptions> ipOptions = ImmutableList.of(); private WindowsConfiguration windowsConfiguration; private List<Secrets> secrets = ImmutableList.of(); - + private String customData; + /** * Sets the availability set where the nodes will be configured. If it does * not exist jclouds will create a new one with the given configuration. @@ -59,7 +60,7 @@ public class AzureTemplateOptions extends TemplateOptions implements Cloneable { this.availabilitySetName = availabilitySetName; return this; } - + /** * The resource group where the new resources will be created. */ @@ -78,7 +79,7 @@ public class AzureTemplateOptions extends TemplateOptions implements Cloneable { public AzureTemplateOptions dataDisks(DataDisk... dataDisks) { return dataDisks(ImmutableList.copyOf(checkNotNull(dataDisks, "dataDisks"))); } - + /** * Configure the NICs that will be attached to the created nodes. * <p> @@ -98,6 +99,7 @@ public class AzureTemplateOptions extends TemplateOptions implements Cloneable { /** * @see {@link AzureTemplateOptions#ipOptions(Iterable) + */ public AzureTemplateOptions ipOptions(IpOptions... ipOptions) { return ipOptions(ImmutableList.copyOf(checkNotNull(ipOptions, "ipOptions"))); @@ -106,32 +108,66 @@ public class AzureTemplateOptions extends TemplateOptions implements Cloneable { /** * Windows configuration parameters * - * @see <a href="https://docs.microsoft.com/en-us/rest/api/compute/virtualmachines/virtualmachines-create-or-update#bk_windowsconfig5">docs</a> + * @see <a + * href="https://docs.microsoft.com/en-us/rest/api/compute/virtualmachines/virtualmachines-create-or-update#bk_windowsconfig5">docs</a> */ public AzureTemplateOptions windowsConfiguration(WindowsConfiguration windowsConfiguration) { - this.windowsConfiguration = windowsConfiguration; - return this; - } + this.windowsConfiguration = windowsConfiguration; + return this; + } /** * Import certificates in the Windows Certificate Store * - * @see <a href="https://docs.microsoft.com/en-us/rest/api/compute/virtualmachines/virtualmachines-create-or-update#bk_srcvault">docs</a> + * @see <a + * href="https://docs.microsoft.com/en-us/rest/api/compute/virtualmachines/virtualmachines-create-or-update#bk_srcvault">docs</a> */ public AzureTemplateOptions secrets(Iterable<? extends Secrets> secrets) { - for (Secrets secret : checkNotNull(secrets, "secrets")) - checkNotNull(secret, "secrets can not be empty"); - this.secrets = ImmutableList.copyOf(secrets); - return this; - } - - public AvailabilitySet getAvailabilitySet() { return availabilitySet; } - public String getAvailabilitySetName() { return availabilitySetName; } - public List<DataDisk> getDataDisks() { return dataDisks; } - public String getResourceGroup() { return resourceGroup; } - public List<IpOptions> getIpOptions() { return ipOptions; } - public WindowsConfiguration getWindowsConfiguration() { return windowsConfiguration; } - public List<Secrets> getSecrets() { return secrets; } + for (Secrets secret : checkNotNull(secrets, "secrets")) + checkNotNull(secret, "secrets can not be empty"); + this.secrets = ImmutableList.copyOf(secrets); + return this; + } + + /** + * Custom data (for cloud-init) for the Azure ARM API + */ + public AzureTemplateOptions customData(String customData) { + this.customData = customData; + return this; + } + + public AvailabilitySet getAvailabilitySet() { + return availabilitySet; + } + + public String getAvailabilitySetName() { + return availabilitySetName; + } + + public List<DataDisk> getDataDisks() { + return dataDisks; + } + + public String getResourceGroup() { + return resourceGroup; + } + + public List<IpOptions> getIpOptions() { + return ipOptions; + } + + public WindowsConfiguration getWindowsConfiguration() { + return windowsConfiguration; + } + + public List<Secrets> getSecrets() { + return secrets; + } + + public String getCustomData() { + return customData; + } @Override public AzureTemplateOptions clone() { @@ -152,30 +188,32 @@ public class AzureTemplateOptions extends TemplateOptions implements Cloneable { eTo.ipOptions(ipOptions); eTo.windowsConfiguration(windowsConfiguration); eTo.secrets(secrets); + eTo.customData(customData); } } @Override public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof AzureTemplateOptions)) return false; - if (!super.equals(o)) return false; + if (this == o) + return true; + if (!(o instanceof AzureTemplateOptions)) + return false; + if (!super.equals(o)) + return false; AzureTemplateOptions that = (AzureTemplateOptions) o; - - return Objects.equal(availabilitySetName, that.availabilitySetName) && - Objects.equal(resourceGroup, that.resourceGroup) && - Objects.equal(availabilitySet, that.availabilitySet) && - Objects.equal(dataDisks, that.dataDisks) && - Objects.equal(ipOptions, that.ipOptions) && - Objects.equal(windowsConfiguration, that.windowsConfiguration) && - Objects.equal(secrets, that.secrets); + + return Objects.equal(availabilitySetName, that.availabilitySetName) + && Objects.equal(resourceGroup, that.resourceGroup) && Objects.equal(availabilitySet, that.availabilitySet) + && Objects.equal(dataDisks, that.dataDisks) && Objects.equal(ipOptions, that.ipOptions) + && Objects.equal(windowsConfiguration, that.windowsConfiguration) && Objects.equal(secrets, that.secrets) + && Objects.equal(this.customData, that.customData); } @Override public int hashCode() { - return Objects.hashCode(availabilitySet, availabilitySetName, dataDisks, - resourceGroup, ipOptions); + return Objects.hashCode(super.hashCode(), availabilitySet, availabilitySetName, dataDisks, resourceGroup, + ipOptions, customData); } @Override @@ -192,14 +230,16 @@ public class AzureTemplateOptions extends TemplateOptions implements Cloneable { if (!ipOptions.isEmpty()) toString.add("ipOptions", ipOptions); if (windowsConfiguration != null) - toString.add("windowsConfiguration", windowsConfiguration); + toString.add("windowsConfiguration", windowsConfiguration); if (!secrets.isEmpty()) - toString.add("secrets", secrets); + toString.add("secrets", secrets); + if (customData != null) + toString.add("customData", customData); return toString; } public static class Builder { - + /** * @see AzureTemplateOptions#availabilitySet(AvailabilitySet) */ @@ -207,7 +247,7 @@ public class AzureTemplateOptions extends TemplateOptions implements Cloneable { AzureTemplateOptions options = new AzureTemplateOptions(); return options.availabilitySet(availabilitySet); } - + /** * @see AzureTemplateOptions#availabilitySet(String) */ @@ -231,7 +271,7 @@ public class AzureTemplateOptions extends TemplateOptions implements Cloneable { AzureTemplateOptions options = new AzureTemplateOptions(); return options.dataDisks(dataDisks); } - + /** * @see AzureTemplateOptions#resourceGroup(String) */ @@ -239,7 +279,7 @@ public class AzureTemplateOptions extends TemplateOptions implements Cloneable { AzureTemplateOptions options = new AzureTemplateOptions(); return options.resourceGroup(resourceGroup); } - + /** * @see AzureTemplateOptions#ipOptions(IpOptions...) */ @@ -271,5 +311,13 @@ public class AzureTemplateOptions extends TemplateOptions implements Cloneable { AzureTemplateOptions options = new AzureTemplateOptions(); return options.secrets(secrets); } + + /** + * @see AzureTemplateOptions#customData + */ + public static AzureTemplateOptions customData(String customData) { + AzureTemplateOptions options = new AzureTemplateOptions(); + return options.customData(customData); + } } }
