JCLOUDS-1282: Add back support for Azure ARM custom data
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/7d3b1beb Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/7d3b1beb Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/7d3b1beb Branch: refs/heads/master Commit: 7d3b1bebd5d40fcc1532ffbe264cdd31ee623f2f Parents: b0abfa4 Author: Vikas Rangarajan <[email protected]> Authored: Fri May 26 16:16:35 2017 -0500 Committer: Ignasi Barrera <[email protected]> Committed: Fri Sep 29 11:29:08 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/blob/7d3b1beb/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java index 213d438..37585e2 100644 --- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java +++ b/providers/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.MoreObjects; 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/blob/7d3b1beb/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/options/AzureTemplateOptions.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/options/AzureTemplateOptions.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/options/AzureTemplateOptions.java index 92f592e..b551811 100644 --- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/options/AzureTemplateOptions.java +++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/options/AzureTemplateOptions.java @@ -42,7 +42,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. @@ -60,7 +61,7 @@ public class AzureTemplateOptions extends TemplateOptions implements Cloneable { this.availabilitySetName = availabilitySetName; return this; } - + /** * The resource group where the new resources will be created. */ @@ -79,7 +80,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> @@ -99,6 +100,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"))); @@ -107,32 +109,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() { @@ -153,30 +189,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 @@ -193,14 +231,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) */ @@ -208,7 +248,7 @@ public class AzureTemplateOptions extends TemplateOptions implements Cloneable { AzureTemplateOptions options = new AzureTemplateOptions(); return options.availabilitySet(availabilitySet); } - + /** * @see AzureTemplateOptions#availabilitySet(String) */ @@ -232,7 +272,7 @@ public class AzureTemplateOptions extends TemplateOptions implements Cloneable { AzureTemplateOptions options = new AzureTemplateOptions(); return options.dataDisks(dataDisks); } - + /** * @see AzureTemplateOptions#resourceGroup(String) */ @@ -240,7 +280,7 @@ public class AzureTemplateOptions extends TemplateOptions implements Cloneable { AzureTemplateOptions options = new AzureTemplateOptions(); return options.resourceGroup(resourceGroup); } - + /** * @see AzureTemplateOptions#ipOptions(IpOptions...) */ @@ -272,5 +312,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); + } } }
