Added Virtual Network Gateway API
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/ea5b899d Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/ea5b899d Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/ea5b899d Branch: refs/heads/master Commit: ea5b899def4b0c522a0cadc427568908e0cbe2a1 Parents: 39d770f Author: Ignasi Barrera <[email protected]> Authored: Mon Jul 2 13:19:46 2018 +0200 Committer: Ignasi Barrera <[email protected]> Committed: Tue Jul 3 12:51:15 2018 +0200 ---------------------------------------------------------------------- .../azurecompute/arm/AzureComputeApi.java | 11 +- .../arm/AzureComputeProviderMetadata.java | 2 + .../compute/config/AzurePredicatesModule.java | 1055 +++++++++--------- .../CreateResourcesThenCreateNodes.java | 2 +- .../arm/config/AzureComputeProperties.java | 2 +- .../azurecompute/arm/domain/AddressSpace.java | 39 + .../arm/domain/IpAllocationMethod.java | 28 + .../arm/domain/LocalNetworkGateway.java | 75 -- .../domain/LocalNetworkGatewayProperties.java | 96 -- .../jclouds/azurecompute/arm/domain/Subnet.java | 10 + .../azurecompute/arm/domain/VirtualNetwork.java | 21 +- .../arm/domain/vpn/BGPSettings.java | 37 + .../azurecompute/arm/domain/vpn/DHGroup.java | 28 + .../arm/domain/vpn/IPSecEncryption.java | 28 + .../arm/domain/vpn/IPSecIntegrity.java | 28 + .../arm/domain/vpn/IPSecPolicy.java | 77 ++ .../arm/domain/vpn/IkeEncryption.java | 28 + .../arm/domain/vpn/IkeIntegrity.java | 28 + .../arm/domain/vpn/LocalNetworkGateway.java | 72 ++ .../vpn/LocalNetworkGatewayProperties.java | 63 ++ .../azurecompute/arm/domain/vpn/PFSGroup.java | 28 + .../azurecompute/arm/domain/vpn/SKU.java | 55 + .../arm/domain/vpn/VPNClientConfiguration.java | 89 ++ .../domain/vpn/VPNClientRevokedCertificate.java | 57 + .../domain/vpn/VPNClientRootCertificate.java | 57 + .../azurecompute/arm/domain/vpn/VPNType.java | 27 + .../arm/domain/vpn/VirtualNetworkGateway.java | 72 ++ .../vpn/VirtualNetworkGatewayProperties.java | 144 +++ .../domain/vpn/VirtualNetworkGatewayType.java | 28 + .../arm/features/LocalNetworkGatewayApi.java | 4 +- .../arm/features/VirtualNetworkGatewayApi.java | 80 ++ .../LocalNetworkGatewayApiLiveTest.java | 8 +- .../LocalNetworkGatewayApiMockTest.java | 8 +- .../NetworkInterfaceCardApiLiveTest.java | 1 - .../arm/features/VirtualNetworkApiLiveTest.java | 3 +- .../arm/features/VirtualNetworkApiMockTest.java | 22 +- .../VirtualNetworkGatewayApiLiveTest.java | 132 +++ .../VirtualNetworkGatewayApiMockTest.java | 161 +++ .../internal/BaseAzureComputeApiLiveTest.java | 47 +- .../resources/virtualnetworkgatewaycreate.json | 45 + .../resources/virtualnetworkgatewayget.json | 37 + .../resources/virtualnetworkgatewaylist.json | 49 + 42 files changed, 2146 insertions(+), 738 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/ea5b899d/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java index a4b6282..d14f7e1 100644 --- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java +++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeApi.java @@ -46,6 +46,7 @@ import org.jclouds.azurecompute.arm.features.VaultApi; import org.jclouds.azurecompute.arm.features.VirtualMachineApi; import org.jclouds.azurecompute.arm.features.VirtualMachineScaleSetApi; import org.jclouds.azurecompute.arm.features.VirtualNetworkApi; +import org.jclouds.azurecompute.arm.features.VirtualNetworkGatewayApi; import org.jclouds.rest.annotations.Delegate; import com.google.common.base.Supplier; @@ -151,7 +152,7 @@ public interface AzureComputeApi extends Closeable { /** * The Azure Resource Manager API gets all the OS images in your subscription. * - * @see <a href="http://msdn.microsoft.com/en-us/library/jj157175">docs</a> + * @see <a href="https://docs.microsoft.com/en-us/rest/api/compute/virtualmachineimages">docs</a> */ @Delegate OSImageApi getOSImageApi(@PathParam("location") String location); @@ -272,6 +273,14 @@ public interface AzureComputeApi extends Closeable { LocalNetworkGatewayApi getLocalNetworkGatewayApi(@PathParam("resourcegroup") String resourcegroup); /** + * Management features for Virtual Network Gateways. + * + * @see <a href="https://docs.microsoft.com/en-us/rest/api/network-gateway/virtualnetworkgateways">docs</a> + */ + @Delegate + VirtualNetworkGatewayApi getVirtualNetworkGatewayApi(@PathParam("resourcegroup") String resourcegroup); + + /** * Returns the information about the current service principal. */ @Provides http://git-wip-us.apache.org/repos/asf/jclouds/blob/ea5b899d/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java index 3038f8e..b16557a 100644 --- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java +++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java @@ -63,6 +63,7 @@ import org.jclouds.azurecompute.arm.features.VaultApi; import org.jclouds.azurecompute.arm.features.VirtualMachineApi; import org.jclouds.azurecompute.arm.features.VirtualMachineScaleSetApi; import org.jclouds.azurecompute.arm.features.VirtualNetworkApi; +import org.jclouds.azurecompute.arm.features.VirtualNetworkGatewayApi; import org.jclouds.providers.ProviderMetadata; import org.jclouds.providers.internal.BaseProviderMetadata; @@ -132,6 +133,7 @@ public class AzureComputeProviderMetadata extends BaseProviderMetadata { properties.put(API_VERSION_PREFIX + GraphRBACApi.class.getSimpleName(), "1.6"); properties.put(API_VERSION_PREFIX + VaultApi.class.getSimpleName(), "2016-10-01"); properties.put(API_VERSION_PREFIX + LocalNetworkGatewayApi.class.getSimpleName(), "2018-02-01"); + properties.put(API_VERSION_PREFIX + VirtualNetworkGatewayApi.class.getSimpleName(), "2018-02-01"); return properties; } http://git-wip-us.apache.org/repos/asf/jclouds/blob/ea5b899d/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzurePredicatesModule.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzurePredicatesModule.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzurePredicatesModule.java index d02909b..6d7f8ac 100644 --- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzurePredicatesModule.java +++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzurePredicatesModule.java @@ -35,6 +35,7 @@ import static org.jclouds.util.Predicates2.retry; import java.net.URI; import java.util.List; +import java.util.concurrent.TimeUnit; import org.jclouds.azurecompute.arm.AzureComputeApi; import org.jclouds.azurecompute.arm.domain.Certificate.CertificateBundle; @@ -52,6 +53,7 @@ import org.jclouds.azurecompute.arm.domain.Secret.SecretBundle; import org.jclouds.azurecompute.arm.domain.Vault; import org.jclouds.azurecompute.arm.domain.VirtualMachineInstance; import org.jclouds.azurecompute.arm.domain.VirtualNetwork; +import org.jclouds.azurecompute.arm.domain.vpn.VirtualNetworkGateway; import org.jclouds.azurecompute.arm.functions.ParseJobStatus; import org.jclouds.compute.reference.ComputeServiceConstants; import org.jclouds.compute.reference.ComputeServiceConstants.PollPeriod; @@ -65,74 +67,84 @@ import com.google.inject.Provides; import com.google.inject.name.Named; public class AzurePredicatesModule extends AbstractModule { - protected void configure() { - } - - @Provides - @Named(TIMEOUT_NODE_RUNNING) - protected VirtualMachineInStatePredicateFactory provideVirtualMachineRunningPredicate(final AzureComputeApi api, - final ComputeServiceConstants.Timeouts timeouts, final PollPeriod pollPeriod) { - return new VirtualMachineInStatePredicateFactory(api, VirtualMachineInstance.PowerState.RUNNING, timeouts.nodeRunning, - pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); - } - - @Provides - @Named(TIMEOUT_NODE_TERMINATED) - protected Predicate<URI> provideNodeTerminatedPredicate(final AzureComputeApi api, final ComputeServiceConstants.Timeouts timeouts, - final PollPeriod pollPeriod) { - return retry(new ActionDonePredicate(api), timeouts.nodeTerminated, pollPeriod.pollInitialPeriod, - pollPeriod.pollMaxPeriod); - } - - @Provides - @Named(TIMEOUT_IMAGE_AVAILABLE) - protected Predicate<URI> provideImageCapturedPredicate(final AzureComputeApi api, final ComputeServiceConstants.Timeouts timeouts, - final PollPeriod pollPeriod) { - return retry(new ImageCapturedPredicate(api), timeouts.imageAvailable, pollPeriod.pollInitialPeriod, - pollPeriod.pollMaxPeriod); - } - - @Provides - @Named(TIMEOUT_RESOURCE_DELETED) - protected Predicate<URI> provideResourceDeletedPredicate(final AzureComputeApi api, final ComputeServiceConstants.Timeouts timeouts, - final PollPeriod pollPeriod) { - return retry(new ActionDonePredicate(api), timeouts.nodeTerminated, pollPeriod.pollInitialPeriod, - pollPeriod.pollMaxPeriod); - } - - @Provides - @Named(TIMEOUT_NODE_SUSPENDED) - protected VirtualMachineInStatePredicateFactory provideNodeSuspendedPredicate(final AzureComputeApi api, - final ComputeServiceConstants.Timeouts timeouts, final PollPeriod pollPeriod) { - return new VirtualMachineInStatePredicateFactory(api, VirtualMachineInstance.PowerState.STOPPED, timeouts.nodeTerminated, - pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); - } - - @Provides - protected PublicIpAvailablePredicateFactory providePublicIpAvailablePredicate(final AzureComputeApi api, - 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 ImageAvailablePredicateFactory provideImageAvailablePredicate(final AzureComputeApi api, - Predicate<Supplier<Provisionable>> resourceAvailable, final ComputeServiceConstants.Timeouts timeouts, final PollPeriod pollPeriod) { - return new ImageAvailablePredicateFactory(api, retry(new ResourceInStatusPredicate("Succeeded"), - timeouts.imageAvailable, pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod)); - } - - @Provides - protected Predicate<Supplier<Provisionable>> provideResourceAvailablePredicate(final AzureComputeApi api, - @Named(OPERATION_TIMEOUT) Integer operationTimeout, PollPeriod pollPeriod) { - return retry(new ResourceInStatusPredicate("Succeeded"), operationTimeout, pollPeriod.pollInitialPeriod, - pollPeriod.pollMaxPeriod); - } + protected void configure() { + } + + @Provides + @Named(TIMEOUT_NODE_RUNNING) + protected VirtualMachineInStatePredicateFactory provideVirtualMachineRunningPredicate(final AzureComputeApi api, + final ComputeServiceConstants.Timeouts timeouts, final PollPeriod pollPeriod) { + return new VirtualMachineInStatePredicateFactory(api, VirtualMachineInstance.PowerState.RUNNING, + timeouts.nodeRunning, pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); + } + + @Provides + @Named(TIMEOUT_NODE_TERMINATED) + protected Predicate<URI> provideNodeTerminatedPredicate(final AzureComputeApi api, + final ComputeServiceConstants.Timeouts timeouts, final PollPeriod pollPeriod) { + return retry(new ActionDonePredicate(api), timeouts.nodeTerminated, pollPeriod.pollInitialPeriod, + pollPeriod.pollMaxPeriod); + } + + @Provides + @Named(TIMEOUT_IMAGE_AVAILABLE) + protected Predicate<URI> provideImageCapturedPredicate(final AzureComputeApi api, + final ComputeServiceConstants.Timeouts timeouts, final PollPeriod pollPeriod) { + return retry(new ImageCapturedPredicate(api), timeouts.imageAvailable, pollPeriod.pollInitialPeriod, + pollPeriod.pollMaxPeriod); + } + + @Provides + @Named(TIMEOUT_RESOURCE_DELETED) + protected Predicate<URI> provideResourceDeletedPredicate(final AzureComputeApi api, + final ComputeServiceConstants.Timeouts timeouts, final PollPeriod pollPeriod) { + return retry(new ActionDonePredicate(api), timeouts.nodeTerminated, pollPeriod.pollInitialPeriod, + pollPeriod.pollMaxPeriod); + } + + @Provides + @Named(TIMEOUT_NODE_SUSPENDED) + protected VirtualMachineInStatePredicateFactory provideNodeSuspendedPredicate(final AzureComputeApi api, + final ComputeServiceConstants.Timeouts timeouts, final PollPeriod pollPeriod) { + return new VirtualMachineInStatePredicateFactory(api, VirtualMachineInstance.PowerState.STOPPED, + timeouts.nodeTerminated, pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); + } + + @Provides + protected PublicIpAvailablePredicateFactory providePublicIpAvailablePredicate(final AzureComputeApi api, + 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 ImageAvailablePredicateFactory provideImageAvailablePredicate(final AzureComputeApi api, + final ComputeServiceConstants.Timeouts timeouts, final PollPeriod pollPeriod) { + return new ImageAvailablePredicateFactory(api, retry(new ResourceInStatusPredicate("Succeeded"), + timeouts.imageAvailable, pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod)); + } + + @Provides + protected VirtualNetworkGatewayAvailablePredicateFactory provideVirtualNetworkGatewayAvailablePredicate( + final AzureComputeApi api, Predicate<Supplier<Provisionable>> resourceAvailable, + final ComputeServiceConstants.Timeouts timeouts, final PollPeriod pollPeriod) { + // The Azure Virtual Gateways can take up to 45 minutes to be provisioned. + // Don't poll too aggressively + return new VirtualNetworkGatewayAvailablePredicateFactory(api, retry(new ResourceInStatusPredicate("Succeeded"), + 45, 1, 2, TimeUnit.MINUTES)); + } + + @Provides + protected Predicate<Supplier<Provisionable>> provideResourceAvailablePredicate(final AzureComputeApi api, + @Named(OPERATION_TIMEOUT) Integer operationTimeout, PollPeriod pollPeriod) { + return retry(new ResourceInStatusPredicate("Succeeded"), operationTimeout, pollPeriod.pollInitialPeriod, + pollPeriod.pollMaxPeriod); + } @Provides protected NetworkAvailablePredicateFactory provideNetworkAvailablePredicate(final AzureComputeApi api, @@ -140,150 +152,123 @@ public class AzurePredicatesModule extends AbstractModule { return new NetworkAvailablePredicateFactory(api, resourceAvailable); } - @VisibleForTesting - static class ActionDonePredicate implements Predicate<URI> { + @VisibleForTesting + static class ActionDonePredicate implements Predicate<URI> { + + private final AzureComputeApi api; + + public ActionDonePredicate(final AzureComputeApi api) { + this.api = checkNotNull(api, "api must not be null"); + } + + @Override + public boolean apply(final URI uri) { + checkNotNull(uri, "uri cannot be null"); + return ParseJobStatus.JobStatus.DONE == api.getJobApi().jobStatus(uri) + || ParseJobStatus.JobStatus.NO_CONTENT == api.getJobApi().jobStatus(uri); + } + } - private final AzureComputeApi api; + @VisibleForTesting + static class ImageCapturedPredicate implements Predicate<URI> { - public ActionDonePredicate(final AzureComputeApi api) { - this.api = checkNotNull(api, "api must not be null"); - } + private final AzureComputeApi api; - @Override - public boolean apply(final URI uri) { - checkNotNull(uri, "uri cannot be null"); - return ParseJobStatus.JobStatus.DONE == api.getJobApi().jobStatus(uri) - || ParseJobStatus.JobStatus.NO_CONTENT == api.getJobApi().jobStatus(uri); - } - } + public ImageCapturedPredicate(final AzureComputeApi api) { + this.api = checkNotNull(api, "api must not be null"); + } - @VisibleForTesting - static class ImageCapturedPredicate implements Predicate<URI> { + @Override + public boolean apply(final URI uri) { + checkNotNull(uri, "uri cannot be null"); + if (api.getJobApi().jobStatus(uri) != ParseJobStatus.JobStatus.DONE) { + return false; + } + List<ResourceDefinition> definitions = api.getJobApi().captureStatus(uri); + return definitions != null; + } + } - private final AzureComputeApi api; + public static class VirtualMachineInStatePredicateFactory { - public ImageCapturedPredicate(final AzureComputeApi api) { - this.api = checkNotNull(api, "api must not be null"); - } + private final AzureComputeApi api; + private final VirtualMachineInstance.PowerState powerState; + private final long timeout; + private final long period; + private final long maxPeriod; + + VirtualMachineInStatePredicateFactory(final AzureComputeApi api, + final VirtualMachineInstance.PowerState powerState, final long timeout, final long period, + final long maxPeriod) { + this.api = checkNotNull(api, "api cannot be null"); + this.powerState = checkNotNull(powerState, "powerState cannot be null"); + this.timeout = timeout; + this.period = period; + this.maxPeriod = maxPeriod; + } - @Override - public boolean apply(final URI uri) { - checkNotNull(uri, "uri cannot be null"); - if (api.getJobApi().jobStatus(uri) != ParseJobStatus.JobStatus.DONE) { - return false; + public Predicate<String> create(final String azureGroup) { + return retry(new Predicate<String>() { + @Override + public boolean apply(final String name) { + checkNotNull(name, "name cannot be null"); + VirtualMachineInstance vmInstance = api.getVirtualMachineApi(azureGroup).getInstanceDetails(name); + if (vmInstance == null) { + return false; + } + return powerState == vmInstance.powerState(); } - List<ResourceDefinition> definitions = api.getJobApi().captureStatus(uri); - return definitions != null; - } - } + }, timeout, period, maxPeriod); + } + } - public static class VirtualMachineInStatePredicateFactory { + public static class ResourceInStatusPredicate implements Predicate<Supplier<Provisionable>> { + private final String expectedStatus; - private final AzureComputeApi api; - private final VirtualMachineInstance.PowerState powerState; - private final long timeout; - private final long period; - private final long maxPeriod; + ResourceInStatusPredicate(String expectedStatus) { + this.expectedStatus = checkNotNull(expectedStatus, "expectedStatus cannot be null"); + } - VirtualMachineInStatePredicateFactory(final AzureComputeApi api, final VirtualMachineInstance.PowerState powerState, final long timeout, - final long period, final long maxPeriod) { - this.api = checkNotNull(api, "api cannot be null"); - this.powerState = checkNotNull(powerState, "powerState cannot be null"); - this.timeout = timeout; - this.period = period; - this.maxPeriod = maxPeriod; - } + @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 Predicate<String> create(final String azureGroup) { - return retry(new Predicate<String>() { - @Override - public boolean apply(final String name) { - checkNotNull(name, "name cannot be null"); - VirtualMachineInstance vmInstance = api.getVirtualMachineApi(azureGroup).getInstanceDetails(name); - if (vmInstance == null) { - return false; - } - return powerState == vmInstance.powerState(); - } - }, timeout, period, maxPeriod); - } - } - - public static class ResourceInStatusPredicate implements Predicate<Supplier<Provisionable>> { - private final String expectedStatus; - - 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 Predicate<Supplier<Provisionable>> resourceAvailable; - - PublicIpAvailablePredicateFactory(final AzureComputeApi api, Predicate<Supplier<Provisionable>> resourceAvailable) { - this.api = checkNotNull(api, "api cannot be null"); - this.resourceAvailable = resourceAvailable; - } - - public Predicate<String> create(final String azureGroup) { - checkNotNull(azureGroup, "azureGroup cannot be null"); - return new Predicate<String>() { - @Override - public boolean apply(final String name) { - checkNotNull(name, "name cannot be null"); - return resourceAvailable.apply(new Supplier<Provisionable>() { - @Override - public Provisionable get() { - PublicIPAddress publicIp = api.getPublicIPAddressApi(azureGroup).get(name); - return publicIp == null ? null : publicIp.properties(); - } - }); - } - }; - } - } - - public static class SecurityGroupAvailablePredicateFactory { - private final AzureComputeApi api; - private final Predicate<Supplier<Provisionable>> resourceAvailable; - - SecurityGroupAvailablePredicateFactory(final AzureComputeApi api, - Predicate<Supplier<Provisionable>> resourceAvailable) { - this.api = checkNotNull(api, "api cannot be null"); - this.resourceAvailable = resourceAvailable; - } + public static class PublicIpAvailablePredicateFactory { + private final AzureComputeApi api; + private final Predicate<Supplier<Provisionable>> resourceAvailable; - public Predicate<String> create(final String resourceGroup) { - checkNotNull(resourceGroup, "resourceGroup cannot be null"); - return new Predicate<String>() { - @Override - public boolean apply(final String name) { - checkNotNull(name, "name cannot be null"); - return resourceAvailable.apply(new Supplier<Provisionable>() { - @Override - public Provisionable get() { - NetworkSecurityGroup sg = api.getNetworkSecurityGroupApi(resourceGroup).get(name); - return sg == null ? null : sg.properties(); - } - }); - } - }; - } - } + PublicIpAvailablePredicateFactory(final AzureComputeApi api, Predicate<Supplier<Provisionable>> resourceAvailable) { + this.api = checkNotNull(api, "api cannot be null"); + this.resourceAvailable = resourceAvailable; + } - public static class NetworkAvailablePredicateFactory { + public Predicate<String> create(final String azureGroup) { + checkNotNull(azureGroup, "azureGroup cannot be null"); + return new Predicate<String>() { + @Override + public boolean apply(final String name) { + checkNotNull(name, "name cannot be null"); + return resourceAvailable.apply(new Supplier<Provisionable>() { + @Override + public Provisionable get() { + PublicIPAddress publicIp = api.getPublicIPAddressApi(azureGroup).get(name); + return publicIp == null ? null : publicIp.properties(); + } + }); + } + }; + } + } + + public static class SecurityGroupAvailablePredicateFactory { private final AzureComputeApi api; private final Predicate<Supplier<Provisionable>> resourceAvailable; - NetworkAvailablePredicateFactory(final AzureComputeApi api, + SecurityGroupAvailablePredicateFactory(final AzureComputeApi api, Predicate<Supplier<Provisionable>> resourceAvailable) { this.api = checkNotNull(api, "api cannot be null"); this.resourceAvailable = resourceAvailable; @@ -298,6 +283,33 @@ public class AzurePredicatesModule extends AbstractModule { return resourceAvailable.apply(new Supplier<Provisionable>() { @Override public Provisionable get() { + NetworkSecurityGroup sg = api.getNetworkSecurityGroupApi(resourceGroup).get(name); + return sg == null ? null : sg.properties(); + } + }); + } + }; + } + } + + public static class NetworkAvailablePredicateFactory { + private final AzureComputeApi api; + private final Predicate<Supplier<Provisionable>> resourceAvailable; + + NetworkAvailablePredicateFactory(final AzureComputeApi api, Predicate<Supplier<Provisionable>> resourceAvailable) { + this.api = checkNotNull(api, "api cannot be null"); + this.resourceAvailable = resourceAvailable; + } + + public Predicate<String> create(final String resourceGroup) { + checkNotNull(resourceGroup, "resourceGroup cannot be null"); + return new Predicate<String>() { + @Override + public boolean apply(final String name) { + checkNotNull(name, "name cannot be null"); + return resourceAvailable.apply(new Supplier<Provisionable>() { + @Override + public Provisionable get() { VirtualNetwork vnet = api.getVirtualNetworkApi(resourceGroup).get(name); return vnet == null ? null : vnet.properties(); } @@ -307,324 +319,363 @@ public class AzurePredicatesModule extends AbstractModule { } } + public static class ImageAvailablePredicateFactory { + private final AzureComputeApi api; + private final Predicate<Supplier<Provisionable>> resourceAvailable; + + ImageAvailablePredicateFactory(final AzureComputeApi api, Predicate<Supplier<Provisionable>> resourceAvailable) { + this.api = checkNotNull(api, "api cannot be null"); + this.resourceAvailable = resourceAvailable; + } + + public Predicate<String> create(final String resourceGroup) { + checkNotNull(resourceGroup, "resourceGroup cannot be null"); + return new Predicate<String>() { + @Override + public boolean apply(final String name) { + checkNotNull(name, "name cannot be null"); + return resourceAvailable.apply(new Supplier<Provisionable>() { + @Override + public Provisionable get() { + Image img = api.getVirtualMachineImageApi(resourceGroup).get(name); + return img == null ? null : img.properties(); + } + }); + } + }; + } + } + + public static class VirtualNetworkGatewayAvailablePredicateFactory { + private final AzureComputeApi api; + private final Predicate<Supplier<Provisionable>> resourceAvailable; + + VirtualNetworkGatewayAvailablePredicateFactory(final AzureComputeApi api, + Predicate<Supplier<Provisionable>> resourceAvailable) { + this.api = checkNotNull(api, "api cannot be null"); + this.resourceAvailable = resourceAvailable; + } + + public Predicate<String> create(final String resourceGroup) { + checkNotNull(resourceGroup, "resourceGroup cannot be null"); + return new Predicate<String>() { + @Override + public boolean apply(final String name) { + checkNotNull(name, "name cannot be null"); + return resourceAvailable.apply(new Supplier<Provisionable>() { + @Override + public Provisionable get() { + VirtualNetworkGateway vng = api.getVirtualNetworkGatewayApi(resourceGroup).get(name); + return vng == null ? null : vng.properties(); + } + }); + } + }; + } + } + + @Provides + @Named(VAULT_DELETE_STATUS) + protected VaultPredicates.DeletedVaultStatusPredicateFactory provideDeletedVaultStatusPredicateFactory( + final AzureComputeApi api, @Named(OPERATION_TIMEOUT) Integer operationTimeout, final PollPeriod pollPeriod) { + return new VaultPredicates.DeletedVaultStatusPredicateFactory(api, operationTimeout.longValue(), + pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); + } - public static class ImageAvailablePredicateFactory { - private final AzureComputeApi api; - private final Predicate<Supplier<Provisionable>> resourceAvailable; + public static class VaultPredicates { + public static class DeletedVaultStatusPredicateFactory { + private final AzureComputeApi api; + private final long operationTimeout; + private final long initialPeriod; + private final long maxPeriod; - ImageAvailablePredicateFactory(final AzureComputeApi api, - Predicate<Supplier<Provisionable>> resourceAvailable) { + DeletedVaultStatusPredicateFactory(final AzureComputeApi api, final long operationTimeout, + final long initialPeriod, final long maxPeriod) { this.api = checkNotNull(api, "api cannot be null"); - this.resourceAvailable = resourceAvailable; - } + this.operationTimeout = operationTimeout; + this.initialPeriod = initialPeriod; + this.maxPeriod = maxPeriod; + } - public Predicate<String> create(final String resourceGroup) { + public Predicate<String> create(final String resourceGroup, final boolean shouldBePresent) { checkNotNull(resourceGroup, "resourceGroup cannot be null"); - return new Predicate<String>() { - @Override - public boolean apply(final String name) { - checkNotNull(name, "name cannot be null"); - return resourceAvailable.apply(new Supplier<Provisionable>() { - @Override - public Provisionable get() { - Image img = api.getVirtualMachineImageApi(resourceGroup).get(name); - return img == null ? null : img.properties(); - } - }); - } - }; - } - } - - @Provides - @Named(VAULT_DELETE_STATUS) - protected VaultPredicates.DeletedVaultStatusPredicateFactory provideDeletedVaultStatusPredicateFactory(final AzureComputeApi api, - @Named(OPERATION_TIMEOUT) Integer operationTimeout, - final PollPeriod pollPeriod) { - return new VaultPredicates.DeletedVaultStatusPredicateFactory(api, operationTimeout.longValue(), pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); - } - - public static class VaultPredicates { - public static class DeletedVaultStatusPredicateFactory { - private final AzureComputeApi api; - private final long operationTimeout; - private final long initialPeriod; - private final long maxPeriod; - - DeletedVaultStatusPredicateFactory(final AzureComputeApi api, final long operationTimeout, final long initialPeriod, final long maxPeriod) { - this.api = checkNotNull(api, "api cannot be null"); - this.operationTimeout = operationTimeout; - this.initialPeriod = initialPeriod; - this.maxPeriod = maxPeriod; - } + return retry(new Predicate<String>() { + @Override + public boolean apply(final String name) { + checkNotNull(name, "name cannot be null"); + List<Vault.DeletedVault> vaults = api.getVaultApi(resourceGroup).listDeletedVaults(); + return shouldBePresent == Iterables.any(vaults, new Predicate<Vault.DeletedVault>() { + @Override + public boolean apply(Vault.DeletedVault input) { + return input.name().equals(name); + } + }); + } + }, operationTimeout, initialPeriod, maxPeriod); + } + } + } - public Predicate<String> create(final String resourceGroup, final boolean shouldBePresent) { - checkNotNull(resourceGroup, "resourceGroup cannot be null"); - return retry(new Predicate<String>() { - @Override - public boolean apply(final String name) { - checkNotNull(name, "name cannot be null"); - List<Vault.DeletedVault> vaults = api.getVaultApi(resourceGroup).listDeletedVaults(); - return shouldBePresent == Iterables.any(vaults, new Predicate<Vault.DeletedVault>() { - @Override public boolean apply(Vault.DeletedVault input) { - return input.name().equals(name); - } - }); - } - }, operationTimeout, initialPeriod, maxPeriod); - } - } - } - - @Provides - @Named(VAULT_KEY_DELETED_STATUS) - protected VaultKeyPredicates.DeletedKeyStatusPredicateFactory provideDeletedKeyStatusPredicateFactory(final AzureComputeApi api, - @Named(OPERATION_TIMEOUT) Integer operationTimeout, - final PollPeriod pollPeriod) { - return new VaultKeyPredicates.DeletedKeyStatusPredicateFactory(api, operationTimeout.longValue(), pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); - } - - @Provides - @Named(VAULT_KEY_RECOVERABLE_STATUS) - protected VaultKeyPredicates.RecoverableKeyStatusPredicateFactory provideRecoverableKeyStatusPredicateFactory(final AzureComputeApi api, - @Named(OPERATION_TIMEOUT) Integer operationTimeout, - final PollPeriod pollPeriod) { - return new VaultKeyPredicates.RecoverableKeyStatusPredicateFactory(api, operationTimeout.longValue(), pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); - } - - public static class VaultKeyPredicates { - public static class DeletedKeyStatusPredicateFactory { - private final AzureComputeApi api; - private final long operationTimeout; - private final long initialPeriod; - private final long maxPeriod; - - DeletedKeyStatusPredicateFactory(final AzureComputeApi api, final long operationTimeout, final long initialPeriod, final long maxPeriod) { - this.api = checkNotNull(api, "api cannot be null"); - this.operationTimeout = operationTimeout; - this.initialPeriod = initialPeriod; - this.maxPeriod = maxPeriod; - } + @Provides + @Named(VAULT_KEY_DELETED_STATUS) + protected VaultKeyPredicates.DeletedKeyStatusPredicateFactory provideDeletedKeyStatusPredicateFactory( + final AzureComputeApi api, @Named(OPERATION_TIMEOUT) Integer operationTimeout, final PollPeriod pollPeriod) { + return new VaultKeyPredicates.DeletedKeyStatusPredicateFactory(api, operationTimeout.longValue(), + pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); + } - public Predicate<String> create(final String resourceGroup, final URI vaultUri, final boolean shouldBePresent) { - checkNotNull(resourceGroup, "resourceGroup cannot be null"); - checkNotNull(vaultUri, "vaultUri cannot be null"); - return retry(new Predicate<String>() { - @Override - public boolean apply(final String name) { - checkNotNull(name, "name cannot be null"); - DeletedKeyBundle key = api.getVaultApi(resourceGroup).getDeletedKey(vaultUri, name); - return shouldBePresent == (key != null); - } - }, operationTimeout, initialPeriod, maxPeriod); - } - } - - public static class RecoverableKeyStatusPredicateFactory { - private final AzureComputeApi api; - private final long operationTimeout; - private final long initialPeriod; - private final long maxPeriod; - - RecoverableKeyStatusPredicateFactory(final AzureComputeApi api, final long operationTimeout, final long initialPeriod, final long maxPeriod) { - this.api = checkNotNull(api, "api cannot be null"); - this.operationTimeout = operationTimeout; - this.initialPeriod = initialPeriod; - this.maxPeriod = maxPeriod; - } + @Provides + @Named(VAULT_KEY_RECOVERABLE_STATUS) + protected VaultKeyPredicates.RecoverableKeyStatusPredicateFactory provideRecoverableKeyStatusPredicateFactory( + final AzureComputeApi api, @Named(OPERATION_TIMEOUT) Integer operationTimeout, final PollPeriod pollPeriod) { + return new VaultKeyPredicates.RecoverableKeyStatusPredicateFactory(api, operationTimeout.longValue(), + pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); + } - public Predicate<String> create(final String resourceGroup, final URI vaultUri, final boolean isRecovered) { - checkNotNull(resourceGroup, "resourceGroup cannot be null"); - checkNotNull(vaultUri, "vaultUri cannot be null"); - return retry(new Predicate<String>() { - @Override - public boolean apply(final String name) { - checkNotNull(name, "name cannot be null"); - KeyBundle key = api.getVaultApi(resourceGroup).getKey(vaultUri, name); - return key != null ? (isRecovered ? true : key.attributes().recoveryLevel().contains("Recoverable")) : false; - } - }, operationTimeout, initialPeriod, maxPeriod); - } - } - } - - @Provides - @Named(VAULT_SECRET_DELETE_STATUS) - protected VaultSecretPredicates.DeletedSecretStatusPredicateFactory provideDeletedSecretStatusPredicateFactory(final AzureComputeApi api, - @Named(OPERATION_TIMEOUT) Integer operationTimeout, - final PollPeriod pollPeriod) { - return new VaultSecretPredicates.DeletedSecretStatusPredicateFactory(api, operationTimeout.longValue(), pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); - } - - @Provides - @Named(VAULT_SECRET_RECOVERABLE_STATUS) - protected VaultSecretPredicates.RecoverableSecretStatusPredicateFactory provideRecoverableSecretStatusPredicateFactory(final AzureComputeApi api, - @Named(OPERATION_TIMEOUT) Integer operationTimeout, - final PollPeriod pollPeriod) { - return new VaultSecretPredicates.RecoverableSecretStatusPredicateFactory(api, operationTimeout.longValue(), pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); - } - - public static class VaultSecretPredicates { - public static class DeletedSecretStatusPredicateFactory { - private final AzureComputeApi api; - private final long operationTimeout; - private final long initialPeriod; - private final long maxPeriod; - - DeletedSecretStatusPredicateFactory(final AzureComputeApi api, final long operationTimeout, final long initialPeriod, final long maxPeriod) { - this.api = checkNotNull(api, "api cannot be null"); - this.operationTimeout = operationTimeout; - this.initialPeriod = initialPeriod; - this.maxPeriod = maxPeriod; - } + public static class VaultKeyPredicates { + public static class DeletedKeyStatusPredicateFactory { + private final AzureComputeApi api; + private final long operationTimeout; + private final long initialPeriod; + private final long maxPeriod; - public Predicate<String> create(final String resourceGroup, final URI vaultUri, final boolean shouldBePresent) { - checkNotNull(resourceGroup, "resourceGroup cannot be null"); - checkNotNull(vaultUri, "vaultUri cannot be null"); - return retry(new Predicate<String>() { - @Override - public boolean apply(final String name) { - checkNotNull(name, "name cannot be null"); - DeletedSecretBundle secret = api.getVaultApi(resourceGroup).getDeletedSecret(vaultUri, name); - return shouldBePresent == (secret != null); - } - }, operationTimeout, initialPeriod, maxPeriod); - } - } - - public static class RecoverableSecretStatusPredicateFactory { - private final AzureComputeApi api; - private final long operationTimeout; - private final long initialPeriod; - private final long maxPeriod; - - RecoverableSecretStatusPredicateFactory(final AzureComputeApi api, final long operationTimeout, final long initialPeriod, final long maxPeriod) { - this.api = checkNotNull(api, "api cannot be null"); - this.operationTimeout = operationTimeout; - this.initialPeriod = initialPeriod; - this.maxPeriod = maxPeriod; - } + DeletedKeyStatusPredicateFactory(final AzureComputeApi api, final long operationTimeout, + final long initialPeriod, final long maxPeriod) { + this.api = checkNotNull(api, "api cannot be null"); + this.operationTimeout = operationTimeout; + this.initialPeriod = initialPeriod; + this.maxPeriod = maxPeriod; + } - public Predicate<String> create(final String resourceGroup, final URI vaultUri, final boolean isRecovered) { - checkNotNull(resourceGroup, "resourceGroup cannot be null"); - checkNotNull(vaultUri, "vaultUri cannot be null"); - return retry(new Predicate<String>() { - @Override - public boolean apply(final String name) { - checkNotNull(name, "name cannot be null"); - SecretBundle secret = api.getVaultApi(resourceGroup).getSecret(vaultUri, name, null); - return secret != null ? (isRecovered ? true : secret.attributes().recoveryLevel().contains("Recoverable")) : false; - } - }, operationTimeout, initialPeriod, maxPeriod); - } - } - } - - @Provides - @Named(VAULT_CERTIFICATE_DELETE_STATUS) - protected VaultCertificatePredicates.DeletedCertificateStatusPredicateFactory provideDeletedCertificateStatusPredicateFactory(final AzureComputeApi api, - @Named(OPERATION_TIMEOUT) Integer operationTimeout, - final PollPeriod pollPeriod) { - return new VaultCertificatePredicates.DeletedCertificateStatusPredicateFactory(api, operationTimeout.longValue(), pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); - } - - @Provides - @Named(VAULT_CERTIFICATE_RECOVERABLE_STATUS) - protected VaultCertificatePredicates.RecoverableCertificateStatusPredicateFactory provideRecoverableCertificateStatusPredicateFactory(final AzureComputeApi api, - @Named(OPERATION_TIMEOUT) Integer operationTimeout, - final PollPeriod pollPeriod) { - return new VaultCertificatePredicates.RecoverableCertificateStatusPredicateFactory(api, operationTimeout.longValue(), pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); - } - - @Provides - @Named(VAULT_CERTIFICATE_OPERATION_STATUS) - protected VaultCertificatePredicates.CertificateOperationStatusPredicateFactory provideCertificateOperationStatusPredicateFactory(final AzureComputeApi api, - @Named(OPERATION_TIMEOUT) Integer operationTimeout, - final PollPeriod pollPeriod) { - return new VaultCertificatePredicates.CertificateOperationStatusPredicateFactory(api, operationTimeout.longValue(), pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); - } - - public static class VaultCertificatePredicates { - public static class DeletedCertificateStatusPredicateFactory { - private final AzureComputeApi api; - private final long operationTimeout; - private final long initialPeriod; - private final long maxPeriod; - - DeletedCertificateStatusPredicateFactory(final AzureComputeApi api, final long operationTimeout, final long initialPeriod, final long maxPeriod) { - this.api = checkNotNull(api, "api cannot be null"); - this.operationTimeout = operationTimeout; - this.initialPeriod = initialPeriod; - this.maxPeriod = maxPeriod; - } + public Predicate<String> create(final String resourceGroup, final URI vaultUri, final boolean shouldBePresent) { + checkNotNull(resourceGroup, "resourceGroup cannot be null"); + checkNotNull(vaultUri, "vaultUri cannot be null"); + return retry(new Predicate<String>() { + @Override + public boolean apply(final String name) { + checkNotNull(name, "name cannot be null"); + DeletedKeyBundle key = api.getVaultApi(resourceGroup).getDeletedKey(vaultUri, name); + return shouldBePresent == (key != null); + } + }, operationTimeout, initialPeriod, maxPeriod); + } + } - public Predicate<String> create(final String resourceGroup, final URI vaultUri, final boolean shouldBePresent) { - checkNotNull(resourceGroup, "resourceGroup cannot be null"); - checkNotNull(vaultUri, "vaultUri cannot be null"); - return retry(new Predicate<String>() { - @Override - public boolean apply(final String name) { - checkNotNull(name, "name cannot be null"); - DeletedCertificateBundle cert = api.getVaultApi(resourceGroup).getDeletedCertificate(vaultUri, name); - return shouldBePresent == (cert != null); - } - }, operationTimeout, initialPeriod, maxPeriod); - } - } - - public static class RecoverableCertificateStatusPredicateFactory { - private final AzureComputeApi api; - private final long operationTimeout; - private final long initialPeriod; - private final long maxPeriod; - - RecoverableCertificateStatusPredicateFactory(final AzureComputeApi api, final long operationTimeout, final long initialPeriod, final long maxPeriod) { - this.api = checkNotNull(api, "api cannot be null"); - this.operationTimeout = operationTimeout; - this.initialPeriod = initialPeriod; - this.maxPeriod = maxPeriod; - } + public static class RecoverableKeyStatusPredicateFactory { + private final AzureComputeApi api; + private final long operationTimeout; + private final long initialPeriod; + private final long maxPeriod; - public Predicate<String> create(final String resourceGroup, final URI vaultUri, final boolean isImport) { - checkNotNull(resourceGroup, "resourceGroup cannot be null"); - checkNotNull(vaultUri, "vaultUri cannot be null"); - return retry(new Predicate<String>() { - @Override - public boolean apply(final String name) { - checkNotNull(name, "name cannot be null"); - CertificateBundle cert = api.getVaultApi(resourceGroup).getCertificate(vaultUri, name, null); - return cert != null ? (isImport ? true : cert.attributes().recoveryLevel().contains("Recoverable")) : false; - - } - }, operationTimeout, initialPeriod, maxPeriod); - } - } - - public static class CertificateOperationStatusPredicateFactory { - private final AzureComputeApi api; - private final long operationTimeout; - private final long initialPeriod; - private final long maxPeriod; - - CertificateOperationStatusPredicateFactory(final AzureComputeApi api, final long operationTimeout, final long initialPeriod, final long maxPeriod) { - this.api = checkNotNull(api, "api cannot be null"); - this.operationTimeout = operationTimeout; - this.initialPeriod = initialPeriod; - this.maxPeriod = maxPeriod; - } + RecoverableKeyStatusPredicateFactory(final AzureComputeApi api, final long operationTimeout, + final long initialPeriod, final long maxPeriod) { + this.api = checkNotNull(api, "api cannot be null"); + this.operationTimeout = operationTimeout; + this.initialPeriod = initialPeriod; + this.maxPeriod = maxPeriod; + } - public Predicate<String> create(final String resourceGroup, final URI vaultUri, final boolean isCreate) { - checkNotNull(resourceGroup, "resourceGroup cannot be null"); - checkNotNull(vaultUri, "vaultUri cannot be null"); - return retry(new Predicate<String>() { - @Override - public boolean apply(final String name) { - checkNotNull(name, "name cannot be null"); - CertificateOperation certOp = api.getVaultApi(resourceGroup).getCertificateOperation(vaultUri, name); - return isCreate ? ((certOp != null) ? !certOp.status().equals("inProgress") : false) : (certOp == null); - } - }, operationTimeout, initialPeriod, maxPeriod); - } - } - } + public Predicate<String> create(final String resourceGroup, final URI vaultUri, final boolean isRecovered) { + checkNotNull(resourceGroup, "resourceGroup cannot be null"); + checkNotNull(vaultUri, "vaultUri cannot be null"); + return retry(new Predicate<String>() { + @Override + public boolean apply(final String name) { + checkNotNull(name, "name cannot be null"); + KeyBundle key = api.getVaultApi(resourceGroup).getKey(vaultUri, name); + return key != null ? (isRecovered ? true : key.attributes().recoveryLevel().contains("Recoverable")) + : false; + } + }, operationTimeout, initialPeriod, maxPeriod); + } + } + } + + @Provides + @Named(VAULT_SECRET_DELETE_STATUS) + protected VaultSecretPredicates.DeletedSecretStatusPredicateFactory provideDeletedSecretStatusPredicateFactory( + final AzureComputeApi api, @Named(OPERATION_TIMEOUT) Integer operationTimeout, final PollPeriod pollPeriod) { + return new VaultSecretPredicates.DeletedSecretStatusPredicateFactory(api, operationTimeout.longValue(), + pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); + } + + @Provides + @Named(VAULT_SECRET_RECOVERABLE_STATUS) + protected VaultSecretPredicates.RecoverableSecretStatusPredicateFactory provideRecoverableSecretStatusPredicateFactory( + final AzureComputeApi api, @Named(OPERATION_TIMEOUT) Integer operationTimeout, final PollPeriod pollPeriod) { + return new VaultSecretPredicates.RecoverableSecretStatusPredicateFactory(api, operationTimeout.longValue(), + pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); + } + + public static class VaultSecretPredicates { + public static class DeletedSecretStatusPredicateFactory { + private final AzureComputeApi api; + private final long operationTimeout; + private final long initialPeriod; + private final long maxPeriod; + + DeletedSecretStatusPredicateFactory(final AzureComputeApi api, final long operationTimeout, + final long initialPeriod, final long maxPeriod) { + this.api = checkNotNull(api, "api cannot be null"); + this.operationTimeout = operationTimeout; + this.initialPeriod = initialPeriod; + this.maxPeriod = maxPeriod; + } + + public Predicate<String> create(final String resourceGroup, final URI vaultUri, final boolean shouldBePresent) { + checkNotNull(resourceGroup, "resourceGroup cannot be null"); + checkNotNull(vaultUri, "vaultUri cannot be null"); + return retry(new Predicate<String>() { + @Override + public boolean apply(final String name) { + checkNotNull(name, "name cannot be null"); + DeletedSecretBundle secret = api.getVaultApi(resourceGroup).getDeletedSecret(vaultUri, name); + return shouldBePresent == (secret != null); + } + }, operationTimeout, initialPeriod, maxPeriod); + } + } + + public static class RecoverableSecretStatusPredicateFactory { + private final AzureComputeApi api; + private final long operationTimeout; + private final long initialPeriod; + private final long maxPeriod; + + RecoverableSecretStatusPredicateFactory(final AzureComputeApi api, final long operationTimeout, + final long initialPeriod, final long maxPeriod) { + this.api = checkNotNull(api, "api cannot be null"); + this.operationTimeout = operationTimeout; + this.initialPeriod = initialPeriod; + this.maxPeriod = maxPeriod; + } + + public Predicate<String> create(final String resourceGroup, final URI vaultUri, final boolean isRecovered) { + checkNotNull(resourceGroup, "resourceGroup cannot be null"); + checkNotNull(vaultUri, "vaultUri cannot be null"); + return retry(new Predicate<String>() { + @Override + public boolean apply(final String name) { + checkNotNull(name, "name cannot be null"); + SecretBundle secret = api.getVaultApi(resourceGroup).getSecret(vaultUri, name, null); + return secret != null ? (isRecovered ? true : secret.attributes().recoveryLevel() + .contains("Recoverable")) : false; + } + }, operationTimeout, initialPeriod, maxPeriod); + } + } + } + + @Provides + @Named(VAULT_CERTIFICATE_DELETE_STATUS) + protected VaultCertificatePredicates.DeletedCertificateStatusPredicateFactory provideDeletedCertificateStatusPredicateFactory( + final AzureComputeApi api, @Named(OPERATION_TIMEOUT) Integer operationTimeout, final PollPeriod pollPeriod) { + return new VaultCertificatePredicates.DeletedCertificateStatusPredicateFactory(api, operationTimeout.longValue(), + pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); + } + + @Provides + @Named(VAULT_CERTIFICATE_RECOVERABLE_STATUS) + protected VaultCertificatePredicates.RecoverableCertificateStatusPredicateFactory provideRecoverableCertificateStatusPredicateFactory( + final AzureComputeApi api, @Named(OPERATION_TIMEOUT) Integer operationTimeout, final PollPeriod pollPeriod) { + return new VaultCertificatePredicates.RecoverableCertificateStatusPredicateFactory(api, + operationTimeout.longValue(), pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); + } + + @Provides + @Named(VAULT_CERTIFICATE_OPERATION_STATUS) + protected VaultCertificatePredicates.CertificateOperationStatusPredicateFactory provideCertificateOperationStatusPredicateFactory( + final AzureComputeApi api, @Named(OPERATION_TIMEOUT) Integer operationTimeout, final PollPeriod pollPeriod) { + return new VaultCertificatePredicates.CertificateOperationStatusPredicateFactory(api, + operationTimeout.longValue(), pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); + } + + public static class VaultCertificatePredicates { + public static class DeletedCertificateStatusPredicateFactory { + private final AzureComputeApi api; + private final long operationTimeout; + private final long initialPeriod; + private final long maxPeriod; + + DeletedCertificateStatusPredicateFactory(final AzureComputeApi api, final long operationTimeout, + final long initialPeriod, final long maxPeriod) { + this.api = checkNotNull(api, "api cannot be null"); + this.operationTimeout = operationTimeout; + this.initialPeriod = initialPeriod; + this.maxPeriod = maxPeriod; + } + + public Predicate<String> create(final String resourceGroup, final URI vaultUri, final boolean shouldBePresent) { + checkNotNull(resourceGroup, "resourceGroup cannot be null"); + checkNotNull(vaultUri, "vaultUri cannot be null"); + return retry(new Predicate<String>() { + @Override + public boolean apply(final String name) { + checkNotNull(name, "name cannot be null"); + DeletedCertificateBundle cert = api.getVaultApi(resourceGroup).getDeletedCertificate(vaultUri, name); + return shouldBePresent == (cert != null); + } + }, operationTimeout, initialPeriod, maxPeriod); + } + } + + public static class RecoverableCertificateStatusPredicateFactory { + private final AzureComputeApi api; + private final long operationTimeout; + private final long initialPeriod; + private final long maxPeriod; + + RecoverableCertificateStatusPredicateFactory(final AzureComputeApi api, final long operationTimeout, + final long initialPeriod, final long maxPeriod) { + this.api = checkNotNull(api, "api cannot be null"); + this.operationTimeout = operationTimeout; + this.initialPeriod = initialPeriod; + this.maxPeriod = maxPeriod; + } + + public Predicate<String> create(final String resourceGroup, final URI vaultUri, final boolean isImport) { + checkNotNull(resourceGroup, "resourceGroup cannot be null"); + checkNotNull(vaultUri, "vaultUri cannot be null"); + return retry(new Predicate<String>() { + @Override + public boolean apply(final String name) { + checkNotNull(name, "name cannot be null"); + CertificateBundle cert = api.getVaultApi(resourceGroup).getCertificate(vaultUri, name, null); + return cert != null ? (isImport ? true : cert.attributes().recoveryLevel().contains("Recoverable")) + : false; + + } + }, operationTimeout, initialPeriod, maxPeriod); + } + } + + public static class CertificateOperationStatusPredicateFactory { + private final AzureComputeApi api; + private final long operationTimeout; + private final long initialPeriod; + private final long maxPeriod; + + CertificateOperationStatusPredicateFactory(final AzureComputeApi api, final long operationTimeout, + final long initialPeriod, final long maxPeriod) { + this.api = checkNotNull(api, "api cannot be null"); + this.operationTimeout = operationTimeout; + this.initialPeriod = initialPeriod; + this.maxPeriod = maxPeriod; + } + + public Predicate<String> create(final String resourceGroup, final URI vaultUri, final boolean isCreate) { + checkNotNull(resourceGroup, "resourceGroup cannot be null"); + checkNotNull(vaultUri, "vaultUri cannot be null"); + return retry(new Predicate<String>() { + @Override + public boolean apply(final String name) { + checkNotNull(name, "name cannot be null"); + CertificateOperation certOp = api.getVaultApi(resourceGroup).getCertificateOperation(vaultUri, name); + return isCreate ? ((certOp != null) ? !certOp.status().equals("inProgress") : false) + : (certOp == null); + } + }, operationTimeout, initialPeriod, maxPeriod); + } + } + } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/ea5b899d/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CreateResourcesThenCreateNodes.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CreateResourcesThenCreateNodes.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CreateResourcesThenCreateNodes.java index 436dff0..a2f2919 100644 --- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CreateResourcesThenCreateNodes.java +++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/strategy/CreateResourcesThenCreateNodes.java @@ -41,13 +41,13 @@ import org.jclouds.azurecompute.arm.compute.domain.ResourceGroupAndNameAndIngres import org.jclouds.azurecompute.arm.compute.functions.TemplateToAvailabilitySet; import org.jclouds.azurecompute.arm.compute.options.AzureTemplateOptions; import org.jclouds.azurecompute.arm.compute.options.IpOptions; +import org.jclouds.azurecompute.arm.domain.AddressSpace; import org.jclouds.azurecompute.arm.domain.AvailabilitySet; import org.jclouds.azurecompute.arm.domain.NetworkSecurityGroup; import org.jclouds.azurecompute.arm.domain.PublicIPAddress; import org.jclouds.azurecompute.arm.domain.ResourceGroup; import org.jclouds.azurecompute.arm.domain.Subnet; import org.jclouds.azurecompute.arm.domain.Subnet.SubnetProperties; -import org.jclouds.azurecompute.arm.domain.VirtualNetwork.AddressSpace; import org.jclouds.azurecompute.arm.domain.VirtualNetwork.VirtualNetworkProperties; import org.jclouds.compute.config.CustomizationResponse; import org.jclouds.compute.domain.NodeMetadata; http://git-wip-us.apache.org/repos/asf/jclouds/blob/ea5b899d/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/config/AzureComputeProperties.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/config/AzureComputeProperties.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/config/AzureComputeProperties.java index abe057d..80fa8f1 100644 --- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/config/AzureComputeProperties.java +++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/config/AzureComputeProperties.java @@ -23,7 +23,7 @@ package org.jclouds.azurecompute.arm.config; public class AzureComputeProperties { public static final String OPERATION_TIMEOUT = "jclouds.azurecompute.arm.operation.timeout"; - + public static final String IMAGE_PUBLISHERS = "jclouds.azurecompute.arm.publishers"; public static final String TIMEOUT_RESOURCE_DELETED = "jclouds.azurecompute.arm.timeout.resourcedeleted"; http://git-wip-us.apache.org/repos/asf/jclouds/blob/ea5b899d/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AddressSpace.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AddressSpace.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AddressSpace.java new file mode 100644 index 0000000..1b7f434 --- /dev/null +++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/AddressSpace.java @@ -0,0 +1,39 @@ +/* + * 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.json.SerializedNames; + +import com.google.auto.value.AutoValue; +import com.google.common.collect.ImmutableList; + +@AutoValue +public abstract class AddressSpace { + public abstract List<String> addressPrefixes(); + + @SerializedNames({ "addressPrefixes" }) + public static AddressSpace create(List<String> addressPrefixes) { + return new AutoValue_AddressSpace(addressPrefixes == null ? ImmutableList.<String> of() + : ImmutableList.copyOf(addressPrefixes)); + } + + AddressSpace() { + + } +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/ea5b899d/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/IpAllocationMethod.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/IpAllocationMethod.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/IpAllocationMethod.java new file mode 100644 index 0000000..43911f9 --- /dev/null +++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/IpAllocationMethod.java @@ -0,0 +1,28 @@ +/* + * 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; + +public enum IpAllocationMethod { + + Static, Dynamic, Unrecognized; + + public static IpAllocationMethod fromValue(final String text) { + return (IpAllocationMethod) GetEnumValue.fromValueOrDefault(text, IpAllocationMethod.Unrecognized); + } +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/ea5b899d/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LocalNetworkGateway.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LocalNetworkGateway.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LocalNetworkGateway.java deleted file mode 100644 index b8e95ab..0000000 --- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LocalNetworkGateway.java +++ /dev/null @@ -1,75 +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 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 LocalNetworkGateway { - - @Nullable public abstract String id(); - public abstract String name(); - public abstract String location(); - @Nullable public abstract String type(); - @Nullable public abstract Map<String, String> tags(); - @Nullable public abstract String etag(); - public abstract LocalNetworkGatewayProperties properties(); - - LocalNetworkGateway() { - - } - - @SerializedNames({ "id", "name", "location", "type", "tags", "etag", "properties" }) - public static LocalNetworkGateway create(String id, String name, String location, String type, - Map<String, String> tags, String etag, LocalNetworkGatewayProperties properties) { - return builder().id(id).name(name).location(location).type(type).tags(tags).etag(etag).properties(properties) - .build(); - } - - public abstract Builder toBuilder(); - - public static Builder builder() { - return new AutoValue_LocalNetworkGateway.Builder(); - } - - @AutoValue.Builder - public abstract static class Builder { - public abstract Builder id(String id); - public abstract Builder name(String name); - public abstract Builder location(String location); - public abstract Builder type(String type); - public abstract Builder tags(Map<String, String> tags); - public abstract Builder etag(String etag); - public abstract Builder properties(LocalNetworkGatewayProperties properties); - - abstract String location(); - abstract Map<String, String> tags(); - abstract LocalNetworkGateway autoBuild(); - - public LocalNetworkGateway build() { - tags(tags() != null ? ImmutableMap.copyOf(tags()) : null); - location(location().toLowerCase()); // Avoid issues in regions such as CanadaEast - return autoBuild(); - } - } -} http://git-wip-us.apache.org/repos/asf/jclouds/blob/ea5b899d/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LocalNetworkGatewayProperties.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LocalNetworkGatewayProperties.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LocalNetworkGatewayProperties.java deleted file mode 100644 index 56b773f..0000000 --- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/LocalNetworkGatewayProperties.java +++ /dev/null @@ -1,96 +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 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 LocalNetworkGatewayProperties implements Provisionable { - - @Nullable public abstract BGPSettings bgpSettings(); - public abstract String gatewayIpAddress(); - @Nullable public abstract AddressSpace localNetworkAddressSpace(); - @Nullable public abstract String provisioningState(); - @Nullable public abstract String resourceGuid(); - - @SerializedNames({ "bgpSettings", "gatewayIpAddress", "localNetworkAddressSpace", "provisioningState", - "resourceGuid" }) - public static LocalNetworkGatewayProperties create(BGPSettings bgpSettings, String gatewayIpAddress, - AddressSpace localNetworkAddressSpace, String provisioningState, String resourceGuid) { - return builder().bgpSettings(bgpSettings).gatewayIpAddress(gatewayIpAddress) - .localNetworkAddressSpace(localNetworkAddressSpace).provisioningState(provisioningState) - .resourceGuid(resourceGuid).build(); - } - - LocalNetworkGatewayProperties() { - - } - - public abstract LocalNetworkGatewayProperties.Builder toBuilder(); - - public static LocalNetworkGatewayProperties.Builder builder() { - return new AutoValue_LocalNetworkGatewayProperties.Builder(); - } - - @AutoValue.Builder - public abstract static class Builder { - public abstract Builder bgpSettings(BGPSettings bgpSettings); - public abstract Builder gatewayIpAddress(String gatewayIpAddress); - public abstract Builder localNetworkAddressSpace(AddressSpace localNetworkAddressSpace); - public abstract Builder provisioningState(String provisioningState); - public abstract Builder resourceGuid(String resourceGuid); - - public abstract LocalNetworkGatewayProperties build(); - } - - @AutoValue - public abstract static class BGPSettings { - public abstract int asn(); - public abstract String bgpPeeringAddress(); - public abstract int peerWeight(); - - @SerializedNames({ "asn", "bgpPeeringAddress", "peerWeight" }) - public static LocalNetworkGatewayProperties.BGPSettings create(int asn, String bgpPeeringAddress, int peerWeight) { - return new AutoValue_LocalNetworkGatewayProperties_BGPSettings(asn, bgpPeeringAddress, peerWeight); - } - - BGPSettings() { - - } - } - - @AutoValue - public abstract static class AddressSpace { - public abstract List<String> addressPrefixes(); - - @SerializedNames({ "addressPrefixes" }) - public static LocalNetworkGatewayProperties.AddressSpace create(List<String> addressPrefixes) { - return new AutoValue_LocalNetworkGatewayProperties_AddressSpace( - addressPrefixes == null ? ImmutableList.<String> of() : ImmutableList.copyOf(addressPrefixes)); - } - - AddressSpace() { - - } - } -} http://git-wip-us.apache.org/repos/asf/jclouds/blob/ea5b899d/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Subnet.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Subnet.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Subnet.java index 80460b8..ec57cbb 100644 --- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Subnet.java +++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Subnet.java @@ -31,6 +31,10 @@ import org.jclouds.json.SerializedNames; @AutoValue public abstract class Subnet { + // To create VPN endpoints, a "GatewaySubnet" is required. Azure identifies + // such networks by name, and they have to be named exactly "GatewaySubnet". + public static final String GATEWAY_SUBNET_NAME = "GatewaySubnet"; + private static final Pattern NETWORK_PATTERN = Pattern.compile("^.*/virtualNetworks/([^/]+)(/.*)?$"); @AutoValue @@ -131,6 +135,12 @@ public abstract class Subnet { public abstract Builder id(String id); public abstract Builder etag(String etag); public abstract Builder properties(SubnetProperties properties); + + // Gateway subnets are identified by name + public Builder setGatewaySubnet() { + return name(GATEWAY_SUBNET_NAME); + } + public abstract Subnet build(); } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/ea5b899d/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualNetwork.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualNetwork.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualNetwork.java index a0f5c3e..6b01532 100644 --- a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualNetwork.java +++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/VirtualNetwork.java @@ -18,31 +18,20 @@ package org.jclouds.azurecompute.arm.domain; import static com.google.common.collect.ImmutableList.copyOf; -import java.util.Map; import java.util.List; -import com.google.common.collect.ImmutableList; - -import com.google.auto.value.AutoValue; -import com.google.common.collect.ImmutableMap; +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; + @AutoValue public abstract class VirtualNetwork { @AutoValue - public abstract static class AddressSpace { - - public abstract List<String> addressPrefixes(); - - @SerializedNames({"addressPrefixes"}) - public static AddressSpace create(final List<String> addressPrefixes) { - return new AutoValue_VirtualNetwork_AddressSpace(addressPrefixes == null ? ImmutableList.<String>of() : ImmutableList.copyOf(addressPrefixes)); - } - } - - @AutoValue public abstract static class VirtualNetworkProperties implements Provisionable { @Nullable http://git-wip-us.apache.org/repos/asf/jclouds/blob/ea5b899d/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/vpn/BGPSettings.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/vpn/BGPSettings.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/vpn/BGPSettings.java new file mode 100644 index 0000000..740cf62 --- /dev/null +++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/vpn/BGPSettings.java @@ -0,0 +1,37 @@ +/* + * 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.vpn; + +import org.jclouds.json.SerializedNames; + +import com.google.auto.value.AutoValue; + +@AutoValue +public abstract class BGPSettings { + public abstract int asn(); + public abstract String bgpPeeringAddress(); + public abstract int peerWeight(); + + @SerializedNames({ "asn", "bgpPeeringAddress", "peerWeight" }) + public static BGPSettings create(int asn, String bgpPeeringAddress, int peerWeight) { + return new AutoValue_BGPSettings(asn, bgpPeeringAddress, peerWeight); + } + + BGPSettings() { + + } +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/ea5b899d/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/vpn/DHGroup.java ---------------------------------------------------------------------- diff --git a/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/vpn/DHGroup.java b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/vpn/DHGroup.java new file mode 100644 index 0000000..66f7a7f --- /dev/null +++ b/providers/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/vpn/DHGroup.java @@ -0,0 +1,28 @@ +/* + * 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.vpn; + +import org.jclouds.azurecompute.arm.util.GetEnumValue; + +public enum DHGroup { + + DHGroup1, DHGroup14, DHGroup2, DHGroup2048, DHGroup24, ECP256, ECP384, None, Unrecognized; + + public static DHGroup fromValue(final String text) { + return (DHGroup) GetEnumValue.fromValueOrDefault(text, DHGroup.Unrecognized); + } +}
