You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2017/02/06 09:37:07 UTC
[3/3] jclouds-labs git commit: Add Load Balancer APIs to Azure ARM
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/9f582565
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/9f582565
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/9f582565
Branch: refs/heads/2.0.x
Commit: 9f5825656713284e8ed1d697587bef05e157ac74
Parents: 5261cba
Author: Daniel Estevez <co...@danielestevez.com>
Authored: Mon Jan 23 14:59:06 2017 -0500
Committer: Ignasi Barrera <na...@apache.org>
Committed: Mon Feb 6 10:36:33 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/9f582565/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/9f582565/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/9f582565/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/9f582565/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/9f582565/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/9f582565/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/9f582565/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/9f582565/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/9f582565/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/9f582565/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/9f582565/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/9f582565/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/9f582565/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/9f582565/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/9f582565/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/9f582565/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/9f582565/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/9f582565/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/9f582565/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/9f582565/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/9f582565/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/9f582565/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/9f582565/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/9f582565/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/9f582565/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/9f582565/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/9f582565/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/9f582565/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);
+ }
+}