Add Load Balancer APIs to Azure ARM
Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/a95905b3 Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/a95905b3 Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/a95905b3 Branch: refs/heads/master Commit: a95905b393e1dc51e687479f8def5f3508488b5a Parents: 75558ef Author: Daniel Estevez <[email protected]> Authored: Mon Jan 23 14:59:06 2017 -0500 Committer: Ignasi Barrera <[email protected]> Committed: Mon Feb 6 10:37:24 2017 +0100 ---------------------------------------------------------------------- .../azurecompute/arm/AzureComputeApi.java | 25 + .../arm/AzureComputeProviderMetadata.java | 4 + .../arm/compute/AzureComputeServiceAdapter.java | 7 +- .../AzureComputeServiceContextModule.java | 89 ++-- .../functions/TemplateToAvailabilitySet.java | 87 ++++ .../functions/VirtualMachineToNodeMetadata.java | 10 +- .../compute/options/AzureTemplateOptions.java | 54 ++- .../CreateResourceGroupThenCreateNodes.java | 16 +- .../arm/domain/AvailabilitySet.java | 84 +++- .../domain/AvailabilitySetVirtualMachine.java | 37 -- .../arm/domain/BackendAddressPool.java | 43 ++ .../domain/BackendAddressPoolProperties.java | 74 +++ .../azurecompute/arm/domain/DataDisk.java | 3 + .../azurecompute/arm/domain/Deployment.java | 2 +- .../arm/domain/DeploymentTemplate.java | 3 + .../arm/domain/DiagnosticsProfile.java | 6 + .../azurecompute/arm/domain/DnsSettings.java | 3 + .../arm/domain/FrontendIPConfigurations.java | 45 ++ .../FrontendIPConfigurationsProperties.java | 66 +++ .../arm/domain/HardwareProfile.java | 3 + .../azurecompute/arm/domain/ImageReference.java | 3 + .../azurecompute/arm/domain/InboundNatRule.java | 43 ++ .../arm/domain/InboundNatRuleProperties.java | 105 +++++ .../arm/domain/IpConfiguration.java | 2 + .../arm/domain/IpConfigurationProperties.java | 43 +- .../azurecompute/arm/domain/LoadBalancer.java | 50 ++ .../arm/domain/LoadBalancerProperties.java | 109 +++++ .../arm/domain/LoadBalancingRule.java | 43 ++ .../arm/domain/LoadBalancingRuleProperties.java | 135 ++++++ .../domain/NetworkInterfaceCardProperties.java | 4 +- .../azurecompute/arm/domain/NetworkProfile.java | 3 + .../domain/NetworkSecurityGroupProperties.java | 5 +- .../domain/NetworkSecurityRuleProperties.java | 3 + .../jclouds/azurecompute/arm/domain/OSDisk.java | 3 + .../azurecompute/arm/domain/OSProfile.java | 3 + .../jclouds/azurecompute/arm/domain/Probe.java | 42 ++ .../arm/domain/ProbeProperties.java | 91 ++++ .../azurecompute/arm/domain/Provisionable.java | 22 + .../arm/domain/PublicIPAddressProperties.java | 5 +- .../arm/domain/ResourceDefinition.java | 3 + .../azurecompute/arm/domain/ResourceGroup.java | 2 +- .../arm/domain/ResourceProviderMetaData.java | 3 + .../jclouds/azurecompute/arm/domain/Status.java | 49 ++ .../azurecompute/arm/domain/StorageProfile.java | 3 + .../azurecompute/arm/domain/StorageService.java | 4 +- .../jclouds/azurecompute/arm/domain/Subnet.java | 5 +- .../jclouds/azurecompute/arm/domain/VHD.java | 3 + .../azurecompute/arm/domain/VMImage.java | 2 + .../azurecompute/arm/domain/VirtualMachine.java | 2 + .../arm/domain/VirtualMachineInstance.java | 57 +-- .../arm/domain/VirtualMachineProperties.java | 8 +- .../azurecompute/arm/domain/VirtualNetwork.java | 5 +- .../arm/features/AvailabilitySetApi.java | 83 ++++ .../arm/features/LoadBalancerApi.java | 82 ++++ .../arm/features/NetworkInterfaceCardApi.java | 7 +- .../compute/AzureComputeServiceLiveTest.java | 32 ++ .../AzureComputeImageExtensionLiveTest.java | 34 +- ...reComputeSecurityGroupExtensionLiveTest.java | 15 +- .../features/AvailabilitySetApiLiveTest.java | 100 ++++ .../features/AvailabilitySetApiMockTest.java | 153 ++++++ .../arm/features/DeploymentApiLiveTest.java | 13 +- .../arm/features/LoadBalancerApiLiveTest.java | 460 +++++++++++++++++++ .../arm/features/LoadBalancerApiMockTest.java | 155 +++++++ .../NetworkInterfaceCardApiLiveTest.java | 19 +- .../NetworkInterfaceCardApiMockTest.java | 10 +- .../NetworkSecurityGroupApiLiveTest.java | 23 +- .../NetworkSecurityRuleApiLiveTest.java | 23 +- .../features/PublicIPAddressApiLiveTest.java | 26 +- .../arm/features/StorageAccountApiLiveTest.java | 26 +- .../arm/features/SubnetApiLiveTest.java | 25 +- .../arm/features/VirtualMachineApiLiveTest.java | 25 +- .../arm/features/VirtualMachineApiMockTest.java | 11 +- .../arm/features/VirtualNetworkApiLiveTest.java | 22 +- .../arm/internal/AzureLiveTestUtils.java | 2 + .../internal/BaseAzureComputeApiLiveTest.java | 68 ++- .../test/resources/availabilitysetcreate.json | 11 + .../src/test/resources/availabilitysetget.json | 12 + .../src/test/resources/availabilitysetlist.json | 16 + .../src/test/resources/listvirtualnetworks.json | 2 +- .../src/test/resources/loadbalancercreate.json | 28 ++ .../src/test/resources/loadbalancerget.json | 54 +++ .../src/test/resources/loadbalancerlist.json | 35 ++ 82 files changed, 2745 insertions(+), 348 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java index c0c0994..3700069 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java @@ -20,8 +20,10 @@ import java.io.Closeable; import javax.ws.rs.PathParam; +import org.jclouds.azurecompute.arm.features.AvailabilitySetApi; import org.jclouds.azurecompute.arm.features.DeploymentApi; import org.jclouds.azurecompute.arm.features.JobApi; +import org.jclouds.azurecompute.arm.features.LoadBalancerApi; import org.jclouds.azurecompute.arm.features.LocationApi; import org.jclouds.azurecompute.arm.features.NetworkInterfaceCardApi; import org.jclouds.azurecompute.arm.features.NetworkSecurityGroupApi; @@ -35,6 +37,7 @@ import org.jclouds.azurecompute.arm.features.SubnetApi; import org.jclouds.azurecompute.arm.features.VMSizeApi; import org.jclouds.azurecompute.arm.features.VirtualMachineApi; import org.jclouds.azurecompute.arm.features.VirtualNetworkApi; + import org.jclouds.rest.annotations.Delegate; /** @@ -157,6 +160,28 @@ public interface AzureComputeApi extends Closeable { @PathParam("networksecuritygroup") String networksecuritygroup); /** + * The LoadBalancer API includes operations for managing load balancers + * within your subscription. + * + * @see <a href= + * "https://msdn.microsoft.com/en-us/library/azure/mt163574.aspx">docs + * </a> + */ + @Delegate + LoadBalancerApi getLoadBalancerApi(@PathParam("resourcegroup") String resourcegroup); + + /** + * The AvailabilitySet API includes operations for managing availability sets + * within your subscription. + * + * @see <a href= + * "https://docs.microsoft.com/en-us/rest/api/compute/availabilitysets">docs + * </a> + */ + @Delegate + AvailabilitySetApi getAvailabilitySetApi(@PathParam("resourcegroup") String resourcegroup); + + /** * The Azure Resource Provider API provides information about a resource provider and its supported resource types. * * @see <a href="https://msdn.microsoft.com/en-us/library/azure/dn790534.aspx">docs</a> http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java index 1590bf2..a4c2bbe 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java @@ -39,7 +39,9 @@ import java.net.URI; import java.util.Properties; import org.jclouds.azurecompute.arm.domain.Region; +import org.jclouds.azurecompute.arm.features.AvailabilitySetApi; import org.jclouds.azurecompute.arm.features.DeploymentApi; +import org.jclouds.azurecompute.arm.features.LoadBalancerApi; import org.jclouds.azurecompute.arm.features.LocationApi; import org.jclouds.azurecompute.arm.features.NetworkInterfaceCardApi; import org.jclouds.azurecompute.arm.features.NetworkSecurityGroupApi; @@ -108,6 +110,8 @@ public class AzureComputeProviderMetadata extends BaseProviderMetadata { properties.put(API_VERSION_PREFIX + VirtualNetworkApi.class.getSimpleName(), "2015-06-15"); properties.put(API_VERSION_PREFIX + VMSizeApi.class.getSimpleName(), "2015-06-15"); properties.put(API_VERSION_PREFIX + VirtualMachineApi.class.getSimpleName(), "2015-06-15"); + properties.put(API_VERSION_PREFIX + LoadBalancerApi.class.getSimpleName(), "2016-03-30"); + properties.put(API_VERSION_PREFIX + AvailabilitySetApi.class.getSimpleName(), "2016-03-30"); properties.put(API_VERSION_PREFIX + "GetVirtualMachine", "2016-03-30"); properties.put(API_VERSION_PREFIX + "GetVirtualMachineInstance", "2016-03-30"); properties.put(API_VERSION_PREFIX + "CreateVirtualMachine", "2016-03-30"); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/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 5a8204e..a1204bf 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 @@ -139,6 +139,11 @@ public class AzureComputeServiceAdapter implements ComputeServiceAdapter<Virtual // TODO ARM specific options // TODO network ids => create one nic in each network + + IdReference availabilitySet = null; + if (templateOptions.getAvailabilitySet() != null) { + availabilitySet = IdReference.create(templateOptions.getAvailabilitySet().id()); + } String locationName = template.getLocation().getId(); String subnetId = templateOptions.getSubnetId(); @@ -151,7 +156,7 @@ public class AzureComputeServiceAdapter implements ComputeServiceAdapter<Virtual .networkInterfaces(ImmutableList.of(IdReference.create(nic.id()))).build(); VirtualMachineProperties virtualMachineProperties = VirtualMachineProperties.builder() .licenseType(null) // TODO - .availabilitySet(null) // TODO + .availabilitySet(availabilitySet) .hardwareProfile(hardwareProfile).storageProfile(storageProfile).osProfile(osProfile) .networkProfile(networkProfile).build(); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzureComputeServiceContextModule.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzureComputeServiceContextModule.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzureComputeServiceContextModule.java index 8ea823b..690022b 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzureComputeServiceContextModule.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzureComputeServiceContextModule.java @@ -51,6 +51,7 @@ import org.jclouds.azurecompute.arm.compute.strategy.CreateResourceGroupThenCrea import org.jclouds.azurecompute.arm.domain.Location; import org.jclouds.azurecompute.arm.domain.NetworkSecurityGroup; import org.jclouds.azurecompute.arm.domain.NetworkSecurityRule; +import org.jclouds.azurecompute.arm.domain.Provisionable; import org.jclouds.azurecompute.arm.domain.PublicIPAddress; import org.jclouds.azurecompute.arm.domain.ResourceDefinition; import org.jclouds.azurecompute.arm.domain.ResourceGroup; @@ -58,7 +59,7 @@ import org.jclouds.azurecompute.arm.domain.VMHardware; import org.jclouds.azurecompute.arm.domain.VMImage; import org.jclouds.azurecompute.arm.domain.VirtualMachine; import org.jclouds.azurecompute.arm.domain.VirtualMachineInstance; -import org.jclouds.azurecompute.arm.domain.VirtualMachineInstance.VirtualMachineStatus.PowerState; +import org.jclouds.azurecompute.arm.domain.VirtualMachineInstance.PowerState; import org.jclouds.azurecompute.arm.functions.ParseJobStatus; import org.jclouds.compute.ComputeService; import org.jclouds.compute.ComputeServiceAdapter; @@ -79,6 +80,7 @@ import org.jclouds.net.domain.IpPermission; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Function; import com.google.common.base.Predicate; +import com.google.common.base.Supplier; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; @@ -185,15 +187,20 @@ public class AzureComputeServiceContextModule extends @Provides protected PublicIpAvailablePredicateFactory providePublicIpAvailablePredicate(final AzureComputeApi api, - @Named(OPERATION_TIMEOUT) Integer operationTimeout, PollPeriod pollPeriod) { - return new PublicIpAvailablePredicateFactory(api, operationTimeout, pollPeriod.pollInitialPeriod, - pollPeriod.pollMaxPeriod); + Predicate<Supplier<Provisionable>> resourceAvailable) { + return new PublicIpAvailablePredicateFactory(api, resourceAvailable); } @Provides protected SecurityGroupAvailablePredicateFactory provideSecurityGroupAvailablePredicate(final AzureComputeApi api, + Predicate<Supplier<Provisionable>> resourceAvailable) { + return new SecurityGroupAvailablePredicateFactory(api, resourceAvailable); + } + + @Provides + protected Predicate<Supplier<Provisionable>> provideResourceAvailablePredicate(final AzureComputeApi api, @Named(OPERATION_TIMEOUT) Integer operationTimeout, PollPeriod pollPeriod) { - return new SecurityGroupAvailablePredicateFactory(api, operationTimeout, pollPeriod.pollInitialPeriod, + return retry(new ResourceInStatusPredicate("Succeeded"), operationTimeout, pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); } @@ -274,64 +281,74 @@ public class AzureComputeServiceContextModule extends }, timeout, period, maxPeriod); } } + + public static class ResourceInStatusPredicate implements Predicate<Supplier<Provisionable>> { + private final String expectedStatus; - public static class PublicIpAvailablePredicateFactory { + ResourceInStatusPredicate(String expectedStatus) { + this.expectedStatus = checkNotNull(expectedStatus, "expectedStatus cannot be null"); + } + + @Override + public boolean apply(Supplier<Provisionable> provisionableSupplier) { + checkNotNull(provisionableSupplier, "provisionableSupplier supplier cannot be null"); + Provisionable provisionable = provisionableSupplier.get(); + return provisionable != null && provisionable.provisioningState().equalsIgnoreCase(expectedStatus); + } + } + public static class PublicIpAvailablePredicateFactory { private final AzureComputeApi api; - private final long timeout; - private final long period; - private final long maxPeriod; + private final Predicate<Supplier<Provisionable>> resourceAvailable; - PublicIpAvailablePredicateFactory(final AzureComputeApi api, final long timeout, final long period, - final long maxPeriod) { + PublicIpAvailablePredicateFactory(final AzureComputeApi api, Predicate<Supplier<Provisionable>> resourceAvailable) { this.api = checkNotNull(api, "api cannot be null"); - this.timeout = timeout; - this.period = period; - this.maxPeriod = maxPeriod; + this.resourceAvailable = resourceAvailable; } public Predicate<String> create(final String azureGroup) { - return retry(new Predicate<String>() { + checkNotNull(azureGroup, "azureGroup cannot be null"); + return new Predicate<String>() { @Override public boolean apply(final String name) { checkNotNull(name, "name cannot be null"); - PublicIPAddress publicIp = api.getPublicIPAddressApi(azureGroup).get(name); - if (publicIp == null) { - return false; - } - return publicIp.properties().provisioningState().equalsIgnoreCase("Succeeded"); + return resourceAvailable.apply(new Supplier<Provisionable>() { + @Override + public Provisionable get() { + PublicIPAddress publicIp = api.getPublicIPAddressApi(azureGroup).get(name); + return publicIp == null ? null : publicIp.properties(); + } + }); } - }, timeout, period, maxPeriod); + }; } } public static class SecurityGroupAvailablePredicateFactory { private final AzureComputeApi api; - private final long timeout; - private final long period; - private final long maxPeriod; + private final Predicate<Supplier<Provisionable>> resourceAvailable; - SecurityGroupAvailablePredicateFactory(final AzureComputeApi api, final long timeout, final long period, - final long maxPeriod) { + SecurityGroupAvailablePredicateFactory(final AzureComputeApi api, + Predicate<Supplier<Provisionable>> resourceAvailable) { this.api = checkNotNull(api, "api cannot be null"); - this.timeout = timeout; - this.period = period; - this.maxPeriod = maxPeriod; + this.resourceAvailable = resourceAvailable; } public Predicate<String> create(final String resourceGroup) { checkNotNull(resourceGroup, "resourceGroup cannot be null"); - return retry(new Predicate<String>() { + return new Predicate<String>() { @Override public boolean apply(final String name) { checkNotNull(name, "name cannot be null"); - NetworkSecurityGroup sg = api.getNetworkSecurityGroupApi(resourceGroup).get(name); - if (sg == null) { - return false; - } - return sg.properties().provisioningState().equalsIgnoreCase("Succeeded"); + return resourceAvailable.apply(new Supplier<Provisionable>() { + @Override + public Provisionable get() { + NetworkSecurityGroup sg = api.getNetworkSecurityGroupApi(resourceGroup).get(name); + return sg == null ? null : sg.properties(); + } + }); } - }, timeout, period, maxPeriod); + }; } } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/TemplateToAvailabilitySet.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/TemplateToAvailabilitySet.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/TemplateToAvailabilitySet.java new file mode 100644 index 0000000..4e1adeb --- /dev/null +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/TemplateToAvailabilitySet.java @@ -0,0 +1,87 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.azurecompute.arm.compute.functions; + +import static com.google.common.base.Preconditions.checkArgument; + +import javax.annotation.Resource; +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; + +import org.jclouds.azurecompute.arm.AzureComputeApi; +import org.jclouds.azurecompute.arm.compute.options.AzureTemplateOptions; +import org.jclouds.azurecompute.arm.domain.AvailabilitySet; +import org.jclouds.azurecompute.arm.domain.ResourceGroup; +import org.jclouds.compute.domain.Template; +import org.jclouds.compute.reference.ComputeServiceConstants; +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.logging.Logger; + +import com.google.common.base.Function; +import com.google.common.cache.LoadingCache; + +@Singleton +public class TemplateToAvailabilitySet implements Function<Template, AvailabilitySet> { + + @Resource + @Named(ComputeServiceConstants.COMPUTE_LOGGER) + protected Logger logger = Logger.NULL; + + private final AzureComputeApi api; + private final LoadingCache<String, ResourceGroup> resourceGroupMap; + + @Inject + TemplateToAvailabilitySet(AzureComputeApi api, LoadingCache<String, ResourceGroup> resourceGroupMap) { + this.api = api; + this.resourceGroupMap = resourceGroupMap; + } + + @Nullable + @Override + public AvailabilitySet apply(final Template input) { + checkArgument(input.getOptions() instanceof AzureTemplateOptions, "An AzureTemplateOptions object is required"); + AzureTemplateOptions options = input.getOptions().as(AzureTemplateOptions.class); + + AvailabilitySet availabilitySet = null; + String location = input.getLocation().getId(); + String resourceGroup = resourceGroupMap.getUnchecked(location).name(); + + if (options.getAvailabilitySetName() != null) { + availabilitySet = api.getAvailabilitySetApi(resourceGroup).get(options.getAvailabilitySetName()); + + checkArgument(availabilitySet != null, "No availability set with name '%s' was found", options.getAvailabilitySetName()); + checkArgument(location.equals(availabilitySet.location()), "The availability set %s does not belong to location %s", + options.getAvailabilitySetName(), location); + + } else if (options.getAvailabilitySet() != null) { + availabilitySet = api.getAvailabilitySetApi(resourceGroup).get(options.getAvailabilitySet().name()); + + if (availabilitySet != null) { + checkArgument(location.equals(availabilitySet.location()), "The availability set %s does not belong to location %s", + options.getAvailabilitySetName(), location); + } else { + availabilitySet = api.getAvailabilitySetApi(resourceGroup).createOrUpdate(options.getAvailabilitySet().name(), location, + options.getAvailabilitySet().tags(), options.getAvailabilitySet().properties()); + logger.debug(">> creating availability set [%s]", availabilitySet.name()); + } + } + + return availabilitySet; + } + +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VirtualMachineToNodeMetadata.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VirtualMachineToNodeMetadata.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VirtualMachineToNodeMetadata.java index 92689c2..26bf985 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VirtualMachineToNodeMetadata.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/functions/VirtualMachineToNodeMetadata.java @@ -48,10 +48,10 @@ import org.jclouds.azurecompute.arm.domain.StorageServiceKeys; import org.jclouds.azurecompute.arm.domain.VMImage; import org.jclouds.azurecompute.arm.domain.VirtualMachine; import org.jclouds.azurecompute.arm.domain.VirtualMachineInstance; -import org.jclouds.azurecompute.arm.domain.VirtualMachineInstance.VirtualMachineStatus; -import org.jclouds.azurecompute.arm.domain.VirtualMachineInstance.VirtualMachineStatus.PowerState; +import org.jclouds.azurecompute.arm.domain.VirtualMachineInstance.PowerState; import org.jclouds.azurecompute.arm.domain.VirtualMachineProperties; import org.jclouds.azurecompute.arm.domain.VirtualMachineProperties.ProvisioningState; +import org.jclouds.azurecompute.arm.domain.Status; import org.jclouds.azurecompute.arm.functions.StorageProfileToStorageAccountName; import org.jclouds.azurecompute.arm.util.BlobHelper; import org.jclouds.collect.Memoized; @@ -107,7 +107,7 @@ public class VirtualMachineToNodeMetadata implements Function<VirtualMachine, No .put(VirtualMachineProperties.ProvisioningState.UNRECOGNIZED, NodeMetadata.Status.UNRECOGNIZED) .build(), NodeMetadata.Status.UNRECOGNIZED); - private static final Function<VirtualMachineStatus.PowerState, NodeMetadata.Status> POWERSTATE_TO_NODESTATUS = Functions + private static final Function<PowerState, NodeMetadata.Status> POWERSTATE_TO_NODESTATUS = Functions .forMap( ImmutableMap.<PowerState, NodeMetadata.Status> builder() .put(PowerState.RUNNING, NodeMetadata.Status.RUNNING) @@ -161,9 +161,9 @@ public class VirtualMachineToNodeMetadata implements Function<VirtualMachine, No if (instanceDetails != null && instanceDetails.powerState() != null) { builder.status(POWERSTATE_TO_NODESTATUS.apply(instanceDetails.powerState())); builder.backendStatus(Joiner.on(',').join( - transform(instanceDetails.statuses(), new Function<VirtualMachineStatus, String>() { + transform(instanceDetails.statuses(), new Function<Status, String>() { @Override - public String apply(VirtualMachineStatus input) { + public String apply(Status input) { return input.code(); } }))); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/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 ecbc237..8381076 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 @@ -16,6 +16,7 @@ */ package org.jclouds.azurecompute.arm.compute.options; +import org.jclouds.azurecompute.arm.domain.AvailabilitySet; import org.jclouds.compute.options.TemplateOptions; import com.google.common.base.Objects; @@ -30,6 +31,8 @@ public class AzureTemplateOptions extends TemplateOptions implements Cloneable { private String virtualNetworkName; private String subnetId; private String blob; + private AvailabilitySet availabilitySet; + private String availabilitySetName; /** * Sets the virtual network name @@ -54,10 +57,30 @@ public class AzureTemplateOptions extends TemplateOptions implements Cloneable { this.blob = blob; return this; } + + /** + * 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. + */ + public AzureTemplateOptions availabilitySet(AvailabilitySet availabilitySet) { + this.availabilitySet = availabilitySet; + return this; + } + + /** + * Sets the availability set where the nodes will be configured. The + * availability set must exist. + */ + public AzureTemplateOptions availabilitySet(String availabilitySetName) { + this.availabilitySetName = availabilitySetName; + return this; + } public String getVirtualNetworkName() { return virtualNetworkName; } public String getSubnetId() { return subnetId; } public String getBlob() { return blob; } + public AvailabilitySet getAvailabilitySet() { return availabilitySet; } + public String getAvailabilitySetName() { return availabilitySetName; } @Override @@ -75,12 +98,15 @@ public class AzureTemplateOptions extends TemplateOptions implements Cloneable { eTo.virtualNetworkName(virtualNetworkName); eTo.subnetId(subnetId); eTo.blob(blob); + eTo.availabilitySet(availabilitySet); + eTo.availabilitySet(availabilitySetName); } } @Override public int hashCode() { - return Objects.hashCode(super.hashCode(), virtualNetworkName, subnetId, blob); + return Objects.hashCode(super.hashCode(), virtualNetworkName, subnetId, blob, availabilitySet, + availabilitySetName); } @Override @@ -98,7 +124,9 @@ public class AzureTemplateOptions extends TemplateOptions implements Cloneable { return super.equals(other) && equal(this.virtualNetworkName, other.virtualNetworkName) && equal(this.subnetId, other.subnetId) - && equal(this.blob, other.blob); + && equal(this.blob, other.blob) + && equal(this.availabilitySet, other.availabilitySet) + && equal(this.availabilitySetName, other.availabilitySetName); } @Override @@ -113,7 +141,7 @@ public class AzureTemplateOptions extends TemplateOptions implements Cloneable { public static class Builder { /** - * @see AzureTemplateOptions#virtualNetworkName + * @see AzureTemplateOptions#virtualNetworkName(String) */ public static AzureTemplateOptions virtualNetworkName(String virtualNetworkName) { AzureTemplateOptions options = new AzureTemplateOptions(); @@ -121,7 +149,7 @@ public class AzureTemplateOptions extends TemplateOptions implements Cloneable { } /** - * @see AzureTemplateOptions#subnetId + * @see AzureTemplateOptions#subnetId(String) */ public static AzureTemplateOptions subnetId(String subnetId) { AzureTemplateOptions options = new AzureTemplateOptions(); @@ -129,11 +157,27 @@ public class AzureTemplateOptions extends TemplateOptions implements Cloneable { } /** - * @see AzureTemplateOptions#blob + * @see AzureTemplateOptions#blob(String) */ public static AzureTemplateOptions blob(String blob) { AzureTemplateOptions options = new AzureTemplateOptions(); return options.blob(blob); } + + /** + * @see AzureTemplateOptions#availabilitySet(AvailabilitySet) + */ + public static AzureTemplateOptions availabilitySet(AvailabilitySet availabilitySet) { + AzureTemplateOptions options = new AzureTemplateOptions(); + return options.availabilitySet(availabilitySet); + } + + /** + * @see AzureTemplateOptions#availabilitySet(String) + */ + public static AzureTemplateOptions availabilitySet(String availabilitySetName) { + AzureTemplateOptions options = new AzureTemplateOptions(); + return options.availabilitySet(availabilitySetName); + } } } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CreateResourceGroupThenCreateNodes.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CreateResourceGroupThenCreateNodes.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CreateResourceGroupThenCreateNodes.java index 378030f..92c9499 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CreateResourceGroupThenCreateNodes.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CreateResourceGroupThenCreateNodes.java @@ -38,7 +38,9 @@ import javax.inject.Singleton; import org.jclouds.Constants; import org.jclouds.azurecompute.arm.AzureComputeApi; import org.jclouds.azurecompute.arm.compute.domain.RegionAndIdAndIngressRules; +import org.jclouds.azurecompute.arm.compute.functions.TemplateToAvailabilitySet; import org.jclouds.azurecompute.arm.compute.options.AzureTemplateOptions; +import org.jclouds.azurecompute.arm.domain.AvailabilitySet; import org.jclouds.azurecompute.arm.domain.NetworkSecurityGroup; import org.jclouds.azurecompute.arm.domain.RegionAndId; import org.jclouds.azurecompute.arm.domain.ResourceGroup; @@ -84,6 +86,7 @@ public class CreateResourceGroupThenCreateNodes extends CreateNodesWithGroupEnco private final String defaultVnetAddressPrefix; private final String defaultSubnetAddressPrefix; private final Predicate<URI> storageAccountCreated; + private final TemplateToAvailabilitySet templateToAvailabilitySet; @Inject protected CreateResourceGroupThenCreateNodes( @@ -95,7 +98,8 @@ public class CreateResourceGroupThenCreateNodes extends CreateNodesWithGroupEnco AzureComputeApi api, @Named(DEFAULT_VNET_ADDRESS_SPACE_PREFIX) String defaultVnetAddressPrefix, @Named(DEFAULT_SUBNET_ADDRESS_PREFIX) String defaultSubnetAddressPrefix, LoadingCache<RegionAndIdAndIngressRules, String> securityGroupMap, - LoadingCache<String, ResourceGroup> resourceGroupMap, @Named("STORAGE") Predicate<URI> storageAccountCreated) { + LoadingCache<String, ResourceGroup> resourceGroupMap, @Named("STORAGE") Predicate<URI> storageAccountCreated, + TemplateToAvailabilitySet templateToAvailabilitySet) { super(addNodeWithGroupStrategy, listNodesStrategy, namingConvention, userExecutor, customizeNodeAndAddToGoodMapOrPutExceptionIntoBadMapFactory); this.api = checkNotNull(api, "api cannot be null"); @@ -105,6 +109,7 @@ public class CreateResourceGroupThenCreateNodes extends CreateNodesWithGroupEnco this.defaultVnetAddressPrefix = defaultVnetAddressPrefix; this.defaultSubnetAddressPrefix = defaultSubnetAddressPrefix; this.storageAccountCreated = storageAccountCreated; + this.templateToAvailabilitySet = templateToAvailabilitySet; } @Override @@ -129,6 +134,7 @@ public class CreateResourceGroupThenCreateNodes extends CreateNodesWithGroupEnco getOrCreateVirtualNetworkWithSubnet(location, options, azureGroupName); configureSecurityGroupForOptions(group, azureGroupName, template.getLocation(), options); + configureAvailabilitySetForTemplate(template); StorageService storageService = getOrCreateStorageService(group, azureGroupName, location, template.getImage()); options.blob(storageService.storageServiceProperties().primaryEndpoints().get("blob")); @@ -217,6 +223,14 @@ public class CreateResourceGroupThenCreateNodes extends CreateNodesWithGroupEnco options.securityGroups(securityGroupId); } } + + private void configureAvailabilitySetForTemplate(Template template) { + AvailabilitySet availabilitySet = templateToAvailabilitySet.apply(template); + if (availabilitySet != null) { + logger.debug(">> configuring nodes in availability set [%s]", availabilitySet.name()); + template.getOptions().as(AzureTemplateOptions.class).availabilitySet(availabilitySet); + } + } /** * Generates a valid storage account http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AvailabilitySet.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AvailabilitySet.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AvailabilitySet.java index cb90307..624c664 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AvailabilitySet.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AvailabilitySet.java @@ -17,13 +17,15 @@ package org.jclouds.azurecompute.arm.domain; +import java.util.List; +import java.util.Map; + +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; + import com.google.auto.value.AutoValue; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import org.jclouds.javax.annotation.Nullable; -import org.jclouds.json.SerializedNames; -import java.util.Map; -import java.util.List; /** * AvailabilitySet for subscription @@ -45,24 +47,54 @@ public abstract class AvailabilitySet { public abstract int platformFaultDomainCount(); /** - * A list of virtual machines in availability set + * A list of virtual machines in the availability set */ @Nullable - public abstract List<AvailabilitySetVirtualMachine> virtualMachines(); + public abstract List<IdReference> virtualMachines(); + + /** + * A list of statuses in the availability set + */ + @Nullable + public abstract List<Status> statuses(); - @SerializedNames({"platformUpdateDomainCount", "platformFaultDomainCount", "virtualMachines"}) + @SerializedNames({ "platformUpdateDomainCount", "platformFaultDomainCount", "virtualMachines", "statuses" }) public static AvailabilitySetProperties create(final int platformUpdateDomainCount, - final int platformFaultDomainCount, - List<AvailabilitySetVirtualMachine> virtualMachines) { - return new AutoValue_AvailabilitySet_AvailabilitySetProperties(platformUpdateDomainCount, - platformFaultDomainCount, - virtualMachines == null ? null : ImmutableList.copyOf(virtualMachines)); + final int platformFaultDomainCount, List<IdReference> virtualMachines, List<Status> statuses) { + return builder().platformUpdateDomainCount(platformUpdateDomainCount) + .platformFaultDomainCount(platformFaultDomainCount).virtualMachines(virtualMachines).statuses(statuses) + .build(); + } + + public abstract Builder toBuilder(); + + public static Builder builder() { + return new AutoValue_AvailabilitySet_AvailabilitySetProperties.Builder(); + } + + @AutoValue.Builder + public abstract static class Builder { + public abstract Builder platformUpdateDomainCount(int platformUpdateDomainCount); + public abstract Builder platformFaultDomainCount(int platformFaultDomainCount); + public abstract Builder virtualMachines(List<IdReference> virtualMachines); + public abstract Builder statuses(List<Status> statuses); + + abstract List<IdReference> virtualMachines(); + abstract List<Status> statuses(); + abstract AvailabilitySetProperties autoBuild(); + + public AvailabilitySetProperties build() { + virtualMachines(virtualMachines() != null ? ImmutableList.copyOf(virtualMachines()) : null); + statuses(statuses() != null ? ImmutableList.copyOf(statuses()) : null); + return autoBuild(); + } } } /** * The id of the availability set */ + @Nullable public abstract String id(); /** @@ -72,7 +104,7 @@ public abstract class AvailabilitySet { public abstract String name(); /** - * The name of the availability set. + * The type of the availability set. */ @Nullable public abstract String type(); @@ -99,6 +131,30 @@ public abstract class AvailabilitySet { @SerializedNames({"id", "name", "type", "location", "tags", "properties"}) public static AvailabilitySet create(final String id, final String name, final String type, final String location, final Map<String, String> tags, AvailabilitySetProperties properties) { - return new AutoValue_AvailabilitySet(id, name, type, location, tags == null ? null : ImmutableMap.copyOf(tags), properties); + return builder().id(id).name(name).type(type).location(location).tags(tags).properties(properties).build(); + } + + public abstract Builder toBuilder(); + + public static Builder builder() { + return new AutoValue_AvailabilitySet.Builder(); + } + + @AutoValue.Builder + public abstract static class Builder { + public abstract Builder id(String id); + public abstract Builder name(String name); + public abstract Builder type(String type); + public abstract Builder location(String location); + public abstract Builder tags(Map<String, String> tags); + public abstract Builder properties(AvailabilitySetProperties properties); + + abstract Map<String, String> tags(); + abstract AvailabilitySet autoBuild(); + + public AvailabilitySet build() { + tags(tags() != null ? ImmutableMap.copyOf(tags()) : null); + return autoBuild(); + } } } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AvailabilitySetVirtualMachine.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AvailabilitySetVirtualMachine.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AvailabilitySetVirtualMachine.java deleted file mode 100644 index 3837ff2..0000000 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AvailabilitySetVirtualMachine.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.azurecompute.arm.domain; - -import com.google.auto.value.AutoValue; -import org.jclouds.json.SerializedNames; - -/** - * The virtual machine id - */ -@AutoValue -public abstract class AvailabilitySetVirtualMachine { - - /** - * The id of the virtual machine. - */ - public abstract String id(); - - @SerializedNames({"id"}) - public static AvailabilitySetVirtualMachine create(final String id) { - return new AutoValue_AvailabilitySetVirtualMachine(id); - } -} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/BackendAddressPool.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/BackendAddressPool.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/BackendAddressPool.java new file mode 100644 index 0000000..37ea4aa --- /dev/null +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/BackendAddressPool.java @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.azurecompute.arm.domain; + +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; + +import com.google.auto.value.AutoValue; + +@AutoValue +public abstract class BackendAddressPool { + public abstract String name(); + + @Nullable + public abstract String id(); + + @Nullable + public abstract BackendAddressPoolProperties properties(); + + @Nullable + public abstract String etag(); + + @SerializedNames({ "name", "id", "properties", "etag" }) + public static BackendAddressPool create(final String name, final String id, + final BackendAddressPoolProperties properties, final String etag) { + return new AutoValue_BackendAddressPool(name, id, properties, etag); + } +} + http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/BackendAddressPoolProperties.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/BackendAddressPoolProperties.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/BackendAddressPoolProperties.java new file mode 100644 index 0000000..4daed6f --- /dev/null +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/BackendAddressPoolProperties.java @@ -0,0 +1,74 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.azurecompute.arm.domain; + +import java.util.List; + +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; + +import com.google.auto.value.AutoValue; +import com.google.common.collect.ImmutableList; + +@AutoValue +public abstract class BackendAddressPoolProperties implements Provisionable { + + @Nullable + public abstract String provisioningState(); + + @Nullable + public abstract List<IdReference> backendIPConfigurations(); + + @Nullable + public abstract List<IdReference> loadBalancingRules(); + + + @SerializedNames({ "provisioningState", "backendIPConfigurations", "loadBalancingRules"}) + public static BackendAddressPoolProperties create(final String provisioningState, + final List<IdReference> backendIPConfigurations, final List<IdReference> loadBalancingRules) { + return builder().provisioningState(provisioningState).backendIPConfigurations(backendIPConfigurations).loadBalancingRules(loadBalancingRules).build(); + } + + public abstract Builder toBuilder(); + + public static Builder builder() { + return new AutoValue_BackendAddressPoolProperties.Builder(); + } + + @AutoValue.Builder + public abstract static class Builder { + + public abstract Builder provisioningState(String provisioningState); + + public abstract Builder backendIPConfigurations(List<IdReference> backendIPConfigurations); + + public abstract Builder loadBalancingRules(List<IdReference> loadBalancingRules); + + abstract List<IdReference> backendIPConfigurations(); + abstract List<IdReference> loadBalancingRules(); + + abstract BackendAddressPoolProperties autoBuild(); + + public BackendAddressPoolProperties build() { + backendIPConfigurations(backendIPConfigurations() != null ? ImmutableList.copyOf(backendIPConfigurations()) + : null); + loadBalancingRules(loadBalancingRules() != null ? ImmutableList.copyOf(loadBalancingRules()) : null); + return autoBuild(); + } + } +} + http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/DataDisk.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/DataDisk.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/DataDisk.java index de1fa36..ebb137b 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/DataDisk.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/DataDisk.java @@ -17,6 +17,7 @@ package org.jclouds.azurecompute.arm.domain; import com.google.auto.value.AutoValue; + import org.jclouds.json.SerializedNames; @AutoValue @@ -58,6 +59,8 @@ public abstract class DataDisk { .vhd(vhd) .build(); } + + public abstract Builder toBuilder(); public static Builder builder() { return new AutoValue_DataDisk.Builder(); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Deployment.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Deployment.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Deployment.java index be363ec..fe22591 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Deployment.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Deployment.java @@ -160,7 +160,7 @@ public abstract class Deployment { } @AutoValue - public abstract static class DeploymentProperties { + public abstract static class DeploymentProperties implements Provisionable { @Nullable public abstract String provisioningState(); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/DeploymentTemplate.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/DeploymentTemplate.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/DeploymentTemplate.java index 5221e05..84e6061 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/DeploymentTemplate.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/DeploymentTemplate.java @@ -19,6 +19,7 @@ package org.jclouds.azurecompute.arm.domain; import com.google.auto.value.AutoValue; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; + import org.jclouds.javax.annotation.Nullable; import java.util.List; @@ -89,6 +90,8 @@ public abstract class DeploymentTemplate { return builder.build(); } + + public abstract Builder toBuilder(); public static Builder builder() { return new AutoValue_DeploymentTemplate.Builder(); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/DiagnosticsProfile.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/DiagnosticsProfile.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/DiagnosticsProfile.java index 6097e59..bd8cb0c 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/DiagnosticsProfile.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/DiagnosticsProfile.java @@ -17,6 +17,7 @@ package org.jclouds.azurecompute.arm.domain; import com.google.auto.value.AutoValue; + import org.jclouds.javax.annotation.Nullable; import org.jclouds.json.SerializedNames; @@ -38,6 +39,8 @@ public abstract class DiagnosticsProfile { .storageUri(storageUri) .build(); } + + public abstract Builder toBuilder(); public static Builder builder() { return new AutoValue_DiagnosticsProfile_BootDiagnostics.Builder(); @@ -56,6 +59,9 @@ public abstract class DiagnosticsProfile { public static DiagnosticsProfile create(final BootDiagnostics bootDiagnostics) { return builder().bootDiagnostics(bootDiagnostics).build(); } + + public abstract Builder toBuilder(); + public static Builder builder() { return new AutoValue_DiagnosticsProfile.Builder(); } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/DnsSettings.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/DnsSettings.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/DnsSettings.java index a527eb0..c06ef22 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/DnsSettings.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/DnsSettings.java @@ -17,6 +17,7 @@ package org.jclouds.azurecompute.arm.domain; import com.google.auto.value.AutoValue; + import org.jclouds.javax.annotation.Nullable; import org.jclouds.json.SerializedNames; @@ -39,6 +40,8 @@ public abstract class DnsSettings { .reverseFqdn(reverseFqdn) .build(); } + + public abstract Builder toBuilder(); public static Builder builder() { return new AutoValue_DnsSettings.Builder(); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/FrontendIPConfigurations.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/FrontendIPConfigurations.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/FrontendIPConfigurations.java new file mode 100644 index 0000000..fae60c9 --- /dev/null +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/FrontendIPConfigurations.java @@ -0,0 +1,45 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.azurecompute.arm.domain; + +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; + +import com.google.auto.value.AutoValue; + +@AutoValue +public abstract class FrontendIPConfigurations { + public abstract String name(); + + @Nullable + public abstract String id(); + + @Nullable + public abstract FrontendIPConfigurationsProperties properties(); + + @Nullable + public abstract String etag(); + + @SerializedNames({ "name", "id", "properties", "etag" }) + public static FrontendIPConfigurations create(final String name, final String id, + final FrontendIPConfigurationsProperties properties, + final String etag) { + return new AutoValue_FrontendIPConfigurations(name, id, + properties, etag); + } +} + http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/FrontendIPConfigurationsProperties.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/FrontendIPConfigurationsProperties.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/FrontendIPConfigurationsProperties.java new file mode 100644 index 0000000..b451773 --- /dev/null +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/FrontendIPConfigurationsProperties.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.azurecompute.arm.domain; + +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; + +import com.google.auto.value.AutoValue; + +@AutoValue +public abstract class FrontendIPConfigurationsProperties { + + @Nullable + public abstract IdReference subnet(); + + @Nullable + public abstract String privateIPAddress(); + + @Nullable + public abstract String privateIPAllocationMethod(); + + @Nullable + public abstract IdReference publicIPAddress(); + + + @SerializedNames({ "subnet", "privateIPAddress", "privateIPAllocationMethod", "publicIPAddress" }) + public static FrontendIPConfigurationsProperties create(final IdReference subnet, final String privateIPAddress, + final String privateIPAllocationMethod, final IdReference publicIPAddress) { + return builder().subnet(subnet).publicIPAddress(publicIPAddress).privateIPAddress(privateIPAddress) + .privateIPAllocationMethod(privateIPAllocationMethod).build(); + } + + public abstract Builder toBuilder(); + + public static Builder builder() { + return new AutoValue_FrontendIPConfigurationsProperties.Builder(); + } + + @AutoValue.Builder + public abstract static class Builder { + public abstract Builder subnet(IdReference subnet); + + public abstract Builder privateIPAddress(String privateIPAddress); + + public abstract Builder privateIPAllocationMethod(String privateIPAllocationMethod); + + public abstract Builder publicIPAddress(IdReference publicIPAddress); + + public abstract FrontendIPConfigurationsProperties build(); + } +} + http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/HardwareProfile.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/HardwareProfile.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/HardwareProfile.java index ee9a5f1..9342202 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/HardwareProfile.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/HardwareProfile.java @@ -17,6 +17,7 @@ package org.jclouds.azurecompute.arm.domain; import com.google.auto.value.AutoValue; + import org.jclouds.json.SerializedNames; @AutoValue @@ -31,6 +32,8 @@ public abstract class HardwareProfile { public static HardwareProfile create(final String vmSize) { return builder().vmSize(vmSize).build(); } + + public abstract Builder toBuilder(); public static Builder builder() { return new AutoValue_HardwareProfile.Builder(); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ImageReference.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ImageReference.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ImageReference.java index 9cc6747..f9e1875 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ImageReference.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/ImageReference.java @@ -17,6 +17,7 @@ package org.jclouds.azurecompute.arm.domain; import com.google.auto.value.AutoValue; + import org.jclouds.javax.annotation.Nullable; import org.jclouds.json.SerializedNames; @@ -60,6 +61,8 @@ public abstract class ImageReference { .version(version) .build(); } + + public abstract Builder toBuilder(); public static Builder builder() { return new AutoValue_ImageReference.Builder(); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/InboundNatRule.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/InboundNatRule.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/InboundNatRule.java new file mode 100644 index 0000000..dccc2e9 --- /dev/null +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/InboundNatRule.java @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.azurecompute.arm.domain; + +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; + +import com.google.auto.value.AutoValue; + +@AutoValue +public abstract class InboundNatRule { + @Nullable + public abstract String name(); + + @Nullable + public abstract String id(); + + @Nullable + public abstract InboundNatRuleProperties properties(); + + @Nullable + public abstract String etag(); + + @SerializedNames({ "name", "id", "properties", "etag" }) + public static InboundNatRule create(final String name, final String id, final InboundNatRuleProperties properties, + final String etag) { + return new AutoValue_InboundNatRule(name, id, properties, etag); + } +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/InboundNatRuleProperties.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/InboundNatRuleProperties.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/InboundNatRuleProperties.java new file mode 100644 index 0000000..9ed6aed --- /dev/null +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/InboundNatRuleProperties.java @@ -0,0 +1,105 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.azurecompute.arm.domain; + +import org.jclouds.azurecompute.arm.util.GetEnumValue; +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; + +import com.google.auto.value.AutoValue; + +@AutoValue +public abstract class InboundNatRuleProperties implements Provisionable { + public enum Protocol { + Tcp("Tcp"), Udp("Udp"), UNRECOGNIZED("Unrecognized"); + + private final String label; + + private Protocol(final String label) { + this.label = label; + } + + public static Protocol fromValue(final String text) { + return (Protocol) GetEnumValue.fromValueOrDefault(text, Protocol.UNRECOGNIZED); + } + + @Override + public String toString() { + return label; + } + } + + @Nullable + public abstract IdReference frontendIPConfiguration(); + + @Nullable + public abstract IdReference backendIPConfiguration(); + + public abstract Protocol protocol(); + + public abstract int backendPort(); + + public abstract int frontendPort(); + + @Nullable + public abstract Boolean enableFloatingIP(); + + @Nullable + public abstract Integer idleTimeoutInMinutes(); + + @Nullable + public abstract String provisioningState(); + + @SerializedNames({ "frontendIPConfiguration", "backendIPConfiguration", "protocol", "frontendPort", "backendPort", + "provisioningState", "enableFloatingIP", "idleTimeoutInMinutes" }) + public static InboundNatRuleProperties create(final IdReference frontendIPConfiguration, + final IdReference backendIPConfiguration, final Protocol protocol, final int frontendPort, + final int backendPort, final String provisioningState, Boolean enableFloatingIP, Integer idleTimeoutInMinutes) { + return builder().frontendIPConfiguration(frontendIPConfiguration).backendIPConfiguration(backendIPConfiguration) + .protocol(protocol).frontendPort(frontendPort).backendPort(backendPort) + .provisioningState(provisioningState).enableFloatingIP(enableFloatingIP) + .idleTimeoutInMinutes(idleTimeoutInMinutes).build(); + } + + public abstract Builder toBuilder(); + + public static Builder builder() { + return new AutoValue_InboundNatRuleProperties.Builder(); + } + + @AutoValue.Builder + public abstract static class Builder { + + public abstract Builder frontendIPConfiguration(IdReference frontendIPConfiguration); + + public abstract Builder backendIPConfiguration(IdReference backendIPConfiguration); + + public abstract Builder protocol(Protocol protocol); + + public abstract Builder frontendPort(int frontendPort); + + public abstract Builder backendPort(int backendPort); + + public abstract Builder provisioningState(String provisioningState); + + public abstract Builder enableFloatingIP(Boolean enableFloatingIP); + + public abstract Builder idleTimeoutInMinutes(Integer idleTimeoutInMinutes); + + public abstract InboundNatRuleProperties build(); + } +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/IpConfiguration.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/IpConfiguration.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/IpConfiguration.java index bb49a77..e523622 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/IpConfiguration.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/IpConfiguration.java @@ -49,6 +49,8 @@ public abstract class IpConfiguration { .properties(properties) .build(); } + + public abstract Builder toBuilder(); public static Builder builder() { return new AutoValue_IpConfiguration.Builder(); http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/IpConfigurationProperties.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/IpConfigurationProperties.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/IpConfigurationProperties.java index 8e3bd53..21f494f 100644 --- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/IpConfigurationProperties.java +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/IpConfigurationProperties.java @@ -16,12 +16,16 @@ */ package org.jclouds.azurecompute.arm.domain; +import java.util.List; + import com.google.auto.value.AutoValue; +import com.google.common.collect.ImmutableList; + import org.jclouds.javax.annotation.Nullable; import org.jclouds.json.SerializedNames; @AutoValue -public abstract class IpConfigurationProperties { +public abstract class IpConfigurationProperties implements Provisionable { @Nullable public abstract String provisioningState(); @@ -37,9 +41,18 @@ public abstract class IpConfigurationProperties { @Nullable public abstract IdReference publicIPAddress(); + + @Nullable + public abstract List<IdReference> loadBalancerBackendAddressPools(); + + @Nullable + public abstract List<IdReference> loadBalancerInboundNatRules(); - @SerializedNames({"provisioningState", "privateIPAddress", "privateIPAllocationMethod", "subnet", "publicIPAddress"}) - public static IpConfigurationProperties create(final String provisioningState, final String privateIPAddress, final String privateIPAllocationMethod, final IdReference subnet, final IdReference publicIPAddress) { + @SerializedNames({ "provisioningState", "privateIPAddress", "privateIPAllocationMethod", "subnet", + "publicIPAddress", "loadBalancerBackendAddressPools", "loadBalancerInboundNatRules" }) + public static IpConfigurationProperties create(final String provisioningState, final String privateIPAddress, + final String privateIPAllocationMethod, final IdReference subnet, final IdReference publicIPAddress, + List<IdReference> loadBalancerBackendAddressPools, List<IdReference> loadBalancerInboundNatRules) { return builder() .provisioningState(provisioningState) @@ -47,8 +60,12 @@ public abstract class IpConfigurationProperties { .privateIPAllocationMethod(privateIPAllocationMethod) .subnet(subnet) .publicIPAddress(publicIPAddress) + .loadBalancerBackendAddressPools(loadBalancerBackendAddressPools) + .loadBalancerInboundNatRules(loadBalancerInboundNatRules) .build(); } + + public abstract Builder toBuilder(); public static Builder builder() { return new AutoValue_IpConfigurationProperties.Builder(); @@ -65,8 +82,24 @@ public abstract class IpConfigurationProperties { public abstract Builder subnet(IdReference subnet); public abstract Builder publicIPAddress(IdReference publicIPAddress); - - public abstract IpConfigurationProperties build(); + + public abstract Builder loadBalancerBackendAddressPools(List<IdReference> loadBalancerBackendAddressPools); + + public abstract Builder loadBalancerInboundNatRules(List<IdReference> loadBalancerInboundNatRules); + + abstract List<IdReference> loadBalancerBackendAddressPools(); + + abstract List<IdReference> loadBalancerInboundNatRules(); + + abstract IpConfigurationProperties autoBuild(); + + public IpConfigurationProperties build() { + loadBalancerBackendAddressPools(loadBalancerBackendAddressPools() != null ? ImmutableList + .copyOf(loadBalancerBackendAddressPools()) : null); + loadBalancerInboundNatRules(loadBalancerInboundNatRules() != null ? ImmutableList + .copyOf(loadBalancerInboundNatRules()) : null); + return autoBuild(); + } } } http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LoadBalancer.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LoadBalancer.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LoadBalancer.java new file mode 100644 index 0000000..d313e36 --- /dev/null +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LoadBalancer.java @@ -0,0 +1,50 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.azurecompute.arm.domain; + +import java.util.Map; + +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; + +import com.google.auto.value.AutoValue; +import com.google.common.collect.ImmutableMap; + +@AutoValue +public abstract class LoadBalancer { + @Nullable + public abstract String name(); + + @Nullable + public abstract String location(); + + @Nullable + public abstract Map<String, String> tags(); + + @Nullable + public abstract LoadBalancerProperties properties(); + + @Nullable + public abstract String etag(); + + @SerializedNames({ "name", "location", "tags", "properties", "etag" }) + public static LoadBalancer create(final String name, final String location, final Map<String, String> tags, + final LoadBalancerProperties properties, final String etag) { + return new AutoValue_LoadBalancer(name, location, tags == null ? null : ImmutableMap.copyOf(tags), properties, + etag); + } +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LoadBalancerProperties.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LoadBalancerProperties.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LoadBalancerProperties.java new file mode 100644 index 0000000..b8ab723 --- /dev/null +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LoadBalancerProperties.java @@ -0,0 +1,109 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.azurecompute.arm.domain; + +import java.util.List; + +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; + +import com.google.auto.value.AutoValue; +import com.google.common.collect.ImmutableList; + +@AutoValue +public abstract class LoadBalancerProperties implements Provisionable { + + @Nullable + public abstract List<FrontendIPConfigurations> frontendIPConfigurations(); + + @Nullable + public abstract List<BackendAddressPool> backendAddressPools(); + + @Nullable + public abstract List<LoadBalancingRule> loadBalancingRules(); + + @Nullable + public abstract List<Probe> probes(); + + @Nullable + public abstract List<InboundNatRule> inboundNatRules(); + + @Nullable + public abstract String resourceGuid(); + + @Nullable + public abstract String provisioningState(); + + @SerializedNames({ "frontendIPConfigurations", "backendAddressPools", "loadBalancingRules", "probes", + "inboundNatRules", "resourceGuid", "provisioningState" }) + public static LoadBalancerProperties create(final List<FrontendIPConfigurations> frontendIPConfigurations, + final List<BackendAddressPool> backendAddressPools, final List<LoadBalancingRule> loadBalancingRules, + final List<Probe> probes, final List<InboundNatRule> inboundNatRules, final String resourceGuid, + final String provisioningState) { + return builder().frontendIPConfigurations(frontendIPConfigurations) + .backendAddressPools(backendAddressPools == null ? null : ImmutableList.copyOf(backendAddressPools)) + .loadBalancingRules(loadBalancingRules == null ? null : ImmutableList.copyOf(loadBalancingRules)) + .probes(probes == null ? null : ImmutableList.copyOf(probes)) + .inboundNatRules(inboundNatRules == null ? null : ImmutableList.copyOf(inboundNatRules)) + .resourceGuid(resourceGuid).provisioningState(provisioningState).build(); + } + + public abstract Builder toBuilder(); + + public static Builder builder() { + return new AutoValue_LoadBalancerProperties.Builder(); + } + + @AutoValue.Builder + public abstract static class Builder { + public abstract Builder frontendIPConfigurations(List<FrontendIPConfigurations> frontendIPConfigurations); + + public abstract Builder backendAddressPools(List<BackendAddressPool> backendAddressPools); + + public abstract Builder loadBalancingRules(List<LoadBalancingRule> networkInterfaces); + + public abstract Builder probes(List<Probe> probes); + + public abstract Builder inboundNatRules(List<InboundNatRule> inboundNatRules); + + public abstract Builder resourceGuid(String resourceGuid); + + public abstract Builder provisioningState(String provisioningState); + + abstract List<FrontendIPConfigurations> frontendIPConfigurations(); + + abstract List<BackendAddressPool> backendAddressPools(); + + abstract List<LoadBalancingRule> loadBalancingRules(); + + abstract List<Probe> probes(); + + abstract List<InboundNatRule> inboundNatRules(); + + abstract LoadBalancerProperties autoBuild(); + + public LoadBalancerProperties build() { + frontendIPConfigurations(frontendIPConfigurations() != null ? ImmutableList.copyOf(frontendIPConfigurations()) + : null); + backendAddressPools(backendAddressPools() != null ? ImmutableList.copyOf(backendAddressPools()) : null); + loadBalancingRules(loadBalancingRules() != null ? ImmutableList.copyOf(loadBalancingRules()) : null); + probes(probes() != null ? ImmutableList.copyOf(probes()) : null); + inboundNatRules(inboundNatRules() != null ? ImmutableList.copyOf(inboundNatRules()) : null); + return autoBuild(); + } + } +} http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/a95905b3/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LoadBalancingRule.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LoadBalancingRule.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LoadBalancingRule.java new file mode 100644 index 0000000..ecc97dd --- /dev/null +++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LoadBalancingRule.java @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.azurecompute.arm.domain; + +import org.jclouds.javax.annotation.Nullable; +import org.jclouds.json.SerializedNames; + +import com.google.auto.value.AutoValue; + +@AutoValue +public abstract class LoadBalancingRule { + @Nullable + public abstract String name(); + + @Nullable + public abstract String id(); + + @Nullable + public abstract LoadBalancingRuleProperties properties(); + + @Nullable + public abstract String etag(); + + @SerializedNames({ "name", "id", "properties", "etag" }) + public static LoadBalancingRule create(final String name, final String id, + final LoadBalancingRuleProperties properties, final String etag) { + return new AutoValue_LoadBalancingRule(name, id, properties, etag); + } +}
