Added Virtual Network Gateway API

This commit is contained in:
Ignasi Barrera 2018-07-02 13:19:46 +02:00
parent ff95137faa
commit 9705aa7fb8
40 changed files with 1989 additions and 581 deletions

View File

@ -46,6 +46,7 @@ import org.jclouds.azurecompute.arm.features.VaultApi;
import org.jclouds.azurecompute.arm.features.VirtualMachineApi; import org.jclouds.azurecompute.arm.features.VirtualMachineApi;
import org.jclouds.azurecompute.arm.features.VirtualMachineScaleSetApi; import org.jclouds.azurecompute.arm.features.VirtualMachineScaleSetApi;
import org.jclouds.azurecompute.arm.features.VirtualNetworkApi; import org.jclouds.azurecompute.arm.features.VirtualNetworkApi;
import org.jclouds.azurecompute.arm.features.VirtualNetworkGatewayApi;
import org.jclouds.rest.annotations.Delegate; import org.jclouds.rest.annotations.Delegate;
import com.google.common.base.Supplier; 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. * 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 @Delegate
OSImageApi getOSImageApi(@PathParam("location") String location); OSImageApi getOSImageApi(@PathParam("location") String location);
@ -271,6 +272,14 @@ public interface AzureComputeApi extends Closeable {
@Delegate @Delegate
LocalNetworkGatewayApi getLocalNetworkGatewayApi(@PathParam("resourcegroup") String resourcegroup); 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. * Returns the information about the current service principal.
*/ */

View File

@ -63,6 +63,7 @@ import org.jclouds.azurecompute.arm.features.VaultApi;
import org.jclouds.azurecompute.arm.features.VirtualMachineApi; import org.jclouds.azurecompute.arm.features.VirtualMachineApi;
import org.jclouds.azurecompute.arm.features.VirtualMachineScaleSetApi; import org.jclouds.azurecompute.arm.features.VirtualMachineScaleSetApi;
import org.jclouds.azurecompute.arm.features.VirtualNetworkApi; import org.jclouds.azurecompute.arm.features.VirtualNetworkApi;
import org.jclouds.azurecompute.arm.features.VirtualNetworkGatewayApi;
import org.jclouds.providers.ProviderMetadata; import org.jclouds.providers.ProviderMetadata;
import org.jclouds.providers.internal.BaseProviderMetadata; 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 + GraphRBACApi.class.getSimpleName(), "1.6");
properties.put(API_VERSION_PREFIX + VaultApi.class.getSimpleName(), "2016-10-01"); 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 + LocalNetworkGatewayApi.class.getSimpleName(), "2018-02-01");
properties.put(API_VERSION_PREFIX + VirtualNetworkGatewayApi.class.getSimpleName(), "2018-02-01");
return properties; return properties;
} }

View File

@ -35,6 +35,7 @@ import static org.jclouds.util.Predicates2.retry;
import java.net.URI; import java.net.URI;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit;
import org.jclouds.azurecompute.arm.AzureComputeApi; import org.jclouds.azurecompute.arm.AzureComputeApi;
import org.jclouds.azurecompute.arm.domain.Certificate.CertificateBundle; 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.Vault;
import org.jclouds.azurecompute.arm.domain.VirtualMachineInstance; import org.jclouds.azurecompute.arm.domain.VirtualMachineInstance;
import org.jclouds.azurecompute.arm.domain.VirtualNetwork; 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.azurecompute.arm.functions.ParseJobStatus;
import org.jclouds.compute.reference.ComputeServiceConstants; import org.jclouds.compute.reference.ComputeServiceConstants;
import org.jclouds.compute.reference.ComputeServiceConstants.PollPeriod; import org.jclouds.compute.reference.ComputeServiceConstants.PollPeriod;
@ -72,30 +74,30 @@ public class AzurePredicatesModule extends AbstractModule {
@Named(TIMEOUT_NODE_RUNNING) @Named(TIMEOUT_NODE_RUNNING)
protected VirtualMachineInStatePredicateFactory provideVirtualMachineRunningPredicate(final AzureComputeApi api, protected VirtualMachineInStatePredicateFactory provideVirtualMachineRunningPredicate(final AzureComputeApi api,
final ComputeServiceConstants.Timeouts timeouts, final PollPeriod pollPeriod) { final ComputeServiceConstants.Timeouts timeouts, final PollPeriod pollPeriod) {
return new VirtualMachineInStatePredicateFactory(api, VirtualMachineInstance.PowerState.RUNNING, timeouts.nodeRunning, return new VirtualMachineInStatePredicateFactory(api, VirtualMachineInstance.PowerState.RUNNING,
pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); timeouts.nodeRunning, pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod);
} }
@Provides @Provides
@Named(TIMEOUT_NODE_TERMINATED) @Named(TIMEOUT_NODE_TERMINATED)
protected Predicate<URI> provideNodeTerminatedPredicate(final AzureComputeApi api, final ComputeServiceConstants.Timeouts timeouts, protected Predicate<URI> provideNodeTerminatedPredicate(final AzureComputeApi api,
final PollPeriod pollPeriod) { final ComputeServiceConstants.Timeouts timeouts, final PollPeriod pollPeriod) {
return retry(new ActionDonePredicate(api), timeouts.nodeTerminated, pollPeriod.pollInitialPeriod, return retry(new ActionDonePredicate(api), timeouts.nodeTerminated, pollPeriod.pollInitialPeriod,
pollPeriod.pollMaxPeriod); pollPeriod.pollMaxPeriod);
} }
@Provides @Provides
@Named(TIMEOUT_IMAGE_AVAILABLE) @Named(TIMEOUT_IMAGE_AVAILABLE)
protected Predicate<URI> provideImageCapturedPredicate(final AzureComputeApi api, final ComputeServiceConstants.Timeouts timeouts, protected Predicate<URI> provideImageCapturedPredicate(final AzureComputeApi api,
final PollPeriod pollPeriod) { final ComputeServiceConstants.Timeouts timeouts, final PollPeriod pollPeriod) {
return retry(new ImageCapturedPredicate(api), timeouts.imageAvailable, pollPeriod.pollInitialPeriod, return retry(new ImageCapturedPredicate(api), timeouts.imageAvailable, pollPeriod.pollInitialPeriod,
pollPeriod.pollMaxPeriod); pollPeriod.pollMaxPeriod);
} }
@Provides @Provides
@Named(TIMEOUT_RESOURCE_DELETED) @Named(TIMEOUT_RESOURCE_DELETED)
protected Predicate<URI> provideResourceDeletedPredicate(final AzureComputeApi api, final ComputeServiceConstants.Timeouts timeouts, protected Predicate<URI> provideResourceDeletedPredicate(final AzureComputeApi api,
final PollPeriod pollPeriod) { final ComputeServiceConstants.Timeouts timeouts, final PollPeriod pollPeriod) {
return retry(new ActionDonePredicate(api), timeouts.nodeTerminated, pollPeriod.pollInitialPeriod, return retry(new ActionDonePredicate(api), timeouts.nodeTerminated, pollPeriod.pollInitialPeriod,
pollPeriod.pollMaxPeriod); pollPeriod.pollMaxPeriod);
} }
@ -104,8 +106,8 @@ public class AzurePredicatesModule extends AbstractModule {
@Named(TIMEOUT_NODE_SUSPENDED) @Named(TIMEOUT_NODE_SUSPENDED)
protected VirtualMachineInStatePredicateFactory provideNodeSuspendedPredicate(final AzureComputeApi api, protected VirtualMachineInStatePredicateFactory provideNodeSuspendedPredicate(final AzureComputeApi api,
final ComputeServiceConstants.Timeouts timeouts, final PollPeriod pollPeriod) { final ComputeServiceConstants.Timeouts timeouts, final PollPeriod pollPeriod) {
return new VirtualMachineInStatePredicateFactory(api, VirtualMachineInstance.PowerState.STOPPED, timeouts.nodeTerminated, return new VirtualMachineInStatePredicateFactory(api, VirtualMachineInstance.PowerState.STOPPED,
pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); timeouts.nodeTerminated, pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod);
} }
@Provides @Provides
@ -122,11 +124,21 @@ public class AzurePredicatesModule extends AbstractModule {
@Provides @Provides
protected ImageAvailablePredicateFactory provideImageAvailablePredicate(final AzureComputeApi api, protected ImageAvailablePredicateFactory provideImageAvailablePredicate(final AzureComputeApi api,
Predicate<Supplier<Provisionable>> resourceAvailable, final ComputeServiceConstants.Timeouts timeouts, final PollPeriod pollPeriod) { final ComputeServiceConstants.Timeouts timeouts, final PollPeriod pollPeriod) {
return new ImageAvailablePredicateFactory(api, retry(new ResourceInStatusPredicate("Succeeded"), return new ImageAvailablePredicateFactory(api, retry(new ResourceInStatusPredicate("Succeeded"),
timeouts.imageAvailable, pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod)); 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 @Provides
protected Predicate<Supplier<Provisionable>> provideResourceAvailablePredicate(final AzureComputeApi api, protected Predicate<Supplier<Provisionable>> provideResourceAvailablePredicate(final AzureComputeApi api,
@Named(OPERATION_TIMEOUT) Integer operationTimeout, PollPeriod pollPeriod) { @Named(OPERATION_TIMEOUT) Integer operationTimeout, PollPeriod pollPeriod) {
@ -185,8 +197,9 @@ public class AzurePredicatesModule extends AbstractModule {
private final long period; private final long period;
private final long maxPeriod; private final long maxPeriod;
VirtualMachineInStatePredicateFactory(final AzureComputeApi api, final VirtualMachineInstance.PowerState powerState, final long timeout, VirtualMachineInStatePredicateFactory(final AzureComputeApi api,
final long period, final long maxPeriod) { final VirtualMachineInstance.PowerState powerState, final long timeout, final long period,
final long maxPeriod) {
this.api = checkNotNull(api, "api cannot be null"); this.api = checkNotNull(api, "api cannot be null");
this.powerState = checkNotNull(powerState, "powerState cannot be null"); this.powerState = checkNotNull(powerState, "powerState cannot be null");
this.timeout = timeout; this.timeout = timeout;
@ -283,8 +296,7 @@ public class AzurePredicatesModule extends AbstractModule {
private final AzureComputeApi api; private final AzureComputeApi api;
private final Predicate<Supplier<Provisionable>> resourceAvailable; private final Predicate<Supplier<Provisionable>> resourceAvailable;
NetworkAvailablePredicateFactory(final AzureComputeApi api, NetworkAvailablePredicateFactory(final AzureComputeApi api, Predicate<Supplier<Provisionable>> resourceAvailable) {
Predicate<Supplier<Provisionable>> resourceAvailable) {
this.api = checkNotNull(api, "api cannot be null"); this.api = checkNotNull(api, "api cannot be null");
this.resourceAvailable = resourceAvailable; this.resourceAvailable = resourceAvailable;
} }
@ -307,13 +319,11 @@ public class AzurePredicatesModule extends AbstractModule {
} }
} }
public static class ImageAvailablePredicateFactory { public static class ImageAvailablePredicateFactory {
private final AzureComputeApi api; private final AzureComputeApi api;
private final Predicate<Supplier<Provisionable>> resourceAvailable; private final Predicate<Supplier<Provisionable>> resourceAvailable;
ImageAvailablePredicateFactory(final AzureComputeApi api, ImageAvailablePredicateFactory(final AzureComputeApi api, Predicate<Supplier<Provisionable>> resourceAvailable) {
Predicate<Supplier<Provisionable>> resourceAvailable) {
this.api = checkNotNull(api, "api cannot be null"); this.api = checkNotNull(api, "api cannot be null");
this.resourceAvailable = resourceAvailable; this.resourceAvailable = resourceAvailable;
} }
@ -336,12 +346,40 @@ public class AzurePredicatesModule extends AbstractModule {
} }
} }
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 @Provides
@Named(VAULT_DELETE_STATUS) @Named(VAULT_DELETE_STATUS)
protected VaultPredicates.DeletedVaultStatusPredicateFactory provideDeletedVaultStatusPredicateFactory(final AzureComputeApi api, protected VaultPredicates.DeletedVaultStatusPredicateFactory provideDeletedVaultStatusPredicateFactory(
@Named(OPERATION_TIMEOUT) Integer operationTimeout, final AzureComputeApi api, @Named(OPERATION_TIMEOUT) Integer operationTimeout, final PollPeriod pollPeriod) {
final PollPeriod pollPeriod) { return new VaultPredicates.DeletedVaultStatusPredicateFactory(api, operationTimeout.longValue(),
return new VaultPredicates.DeletedVaultStatusPredicateFactory(api, operationTimeout.longValue(), pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod);
} }
public static class VaultPredicates { public static class VaultPredicates {
@ -351,7 +389,8 @@ public class AzurePredicatesModule extends AbstractModule {
private final long initialPeriod; private final long initialPeriod;
private final long maxPeriod; private final long maxPeriod;
DeletedVaultStatusPredicateFactory(final AzureComputeApi api, final long operationTimeout, final long initialPeriod, 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.api = checkNotNull(api, "api cannot be null");
this.operationTimeout = operationTimeout; this.operationTimeout = operationTimeout;
this.initialPeriod = initialPeriod; this.initialPeriod = initialPeriod;
@ -366,7 +405,8 @@ public class AzurePredicatesModule extends AbstractModule {
checkNotNull(name, "name cannot be null"); checkNotNull(name, "name cannot be null");
List<Vault.DeletedVault> vaults = api.getVaultApi(resourceGroup).listDeletedVaults(); List<Vault.DeletedVault> vaults = api.getVaultApi(resourceGroup).listDeletedVaults();
return shouldBePresent == Iterables.any(vaults, new Predicate<Vault.DeletedVault>() { return shouldBePresent == Iterables.any(vaults, new Predicate<Vault.DeletedVault>() {
@Override public boolean apply(Vault.DeletedVault input) { @Override
public boolean apply(Vault.DeletedVault input) {
return input.name().equals(name); return input.name().equals(name);
} }
}); });
@ -378,18 +418,18 @@ public class AzurePredicatesModule extends AbstractModule {
@Provides @Provides
@Named(VAULT_KEY_DELETED_STATUS) @Named(VAULT_KEY_DELETED_STATUS)
protected VaultKeyPredicates.DeletedKeyStatusPredicateFactory provideDeletedKeyStatusPredicateFactory(final AzureComputeApi api, protected VaultKeyPredicates.DeletedKeyStatusPredicateFactory provideDeletedKeyStatusPredicateFactory(
@Named(OPERATION_TIMEOUT) Integer operationTimeout, final AzureComputeApi api, @Named(OPERATION_TIMEOUT) Integer operationTimeout, final PollPeriod pollPeriod) {
final PollPeriod pollPeriod) { return new VaultKeyPredicates.DeletedKeyStatusPredicateFactory(api, operationTimeout.longValue(),
return new VaultKeyPredicates.DeletedKeyStatusPredicateFactory(api, operationTimeout.longValue(), pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod);
} }
@Provides @Provides
@Named(VAULT_KEY_RECOVERABLE_STATUS) @Named(VAULT_KEY_RECOVERABLE_STATUS)
protected VaultKeyPredicates.RecoverableKeyStatusPredicateFactory provideRecoverableKeyStatusPredicateFactory(final AzureComputeApi api, protected VaultKeyPredicates.RecoverableKeyStatusPredicateFactory provideRecoverableKeyStatusPredicateFactory(
@Named(OPERATION_TIMEOUT) Integer operationTimeout, final AzureComputeApi api, @Named(OPERATION_TIMEOUT) Integer operationTimeout, final PollPeriod pollPeriod) {
final PollPeriod pollPeriod) { return new VaultKeyPredicates.RecoverableKeyStatusPredicateFactory(api, operationTimeout.longValue(),
return new VaultKeyPredicates.RecoverableKeyStatusPredicateFactory(api, operationTimeout.longValue(), pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod);
} }
public static class VaultKeyPredicates { public static class VaultKeyPredicates {
@ -399,7 +439,8 @@ public class AzurePredicatesModule extends AbstractModule {
private final long initialPeriod; private final long initialPeriod;
private final long maxPeriod; private final long maxPeriod;
DeletedKeyStatusPredicateFactory(final AzureComputeApi api, final long operationTimeout, final long initialPeriod, 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.api = checkNotNull(api, "api cannot be null");
this.operationTimeout = operationTimeout; this.operationTimeout = operationTimeout;
this.initialPeriod = initialPeriod; this.initialPeriod = initialPeriod;
@ -426,7 +467,8 @@ public class AzurePredicatesModule extends AbstractModule {
private final long initialPeriod; private final long initialPeriod;
private final long maxPeriod; private final long maxPeriod;
RecoverableKeyStatusPredicateFactory(final AzureComputeApi api, final long operationTimeout, final long initialPeriod, 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.api = checkNotNull(api, "api cannot be null");
this.operationTimeout = operationTimeout; this.operationTimeout = operationTimeout;
this.initialPeriod = initialPeriod; this.initialPeriod = initialPeriod;
@ -441,7 +483,8 @@ public class AzurePredicatesModule extends AbstractModule {
public boolean apply(final String name) { public boolean apply(final String name) {
checkNotNull(name, "name cannot be null"); checkNotNull(name, "name cannot be null");
KeyBundle key = api.getVaultApi(resourceGroup).getKey(vaultUri, name); KeyBundle key = api.getVaultApi(resourceGroup).getKey(vaultUri, name);
return key != null ? (isRecovered ? true : key.attributes().recoveryLevel().contains("Recoverable")) : false; return key != null ? (isRecovered ? true : key.attributes().recoveryLevel().contains("Recoverable"))
: false;
} }
}, operationTimeout, initialPeriod, maxPeriod); }, operationTimeout, initialPeriod, maxPeriod);
} }
@ -450,18 +493,18 @@ public class AzurePredicatesModule extends AbstractModule {
@Provides @Provides
@Named(VAULT_SECRET_DELETE_STATUS) @Named(VAULT_SECRET_DELETE_STATUS)
protected VaultSecretPredicates.DeletedSecretStatusPredicateFactory provideDeletedSecretStatusPredicateFactory(final AzureComputeApi api, protected VaultSecretPredicates.DeletedSecretStatusPredicateFactory provideDeletedSecretStatusPredicateFactory(
@Named(OPERATION_TIMEOUT) Integer operationTimeout, final AzureComputeApi api, @Named(OPERATION_TIMEOUT) Integer operationTimeout, final PollPeriod pollPeriod) {
final PollPeriod pollPeriod) { return new VaultSecretPredicates.DeletedSecretStatusPredicateFactory(api, operationTimeout.longValue(),
return new VaultSecretPredicates.DeletedSecretStatusPredicateFactory(api, operationTimeout.longValue(), pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod);
} }
@Provides @Provides
@Named(VAULT_SECRET_RECOVERABLE_STATUS) @Named(VAULT_SECRET_RECOVERABLE_STATUS)
protected VaultSecretPredicates.RecoverableSecretStatusPredicateFactory provideRecoverableSecretStatusPredicateFactory(final AzureComputeApi api, protected VaultSecretPredicates.RecoverableSecretStatusPredicateFactory provideRecoverableSecretStatusPredicateFactory(
@Named(OPERATION_TIMEOUT) Integer operationTimeout, final AzureComputeApi api, @Named(OPERATION_TIMEOUT) Integer operationTimeout, final PollPeriod pollPeriod) {
final PollPeriod pollPeriod) { return new VaultSecretPredicates.RecoverableSecretStatusPredicateFactory(api, operationTimeout.longValue(),
return new VaultSecretPredicates.RecoverableSecretStatusPredicateFactory(api, operationTimeout.longValue(), pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod);
} }
public static class VaultSecretPredicates { public static class VaultSecretPredicates {
@ -471,7 +514,8 @@ public class AzurePredicatesModule extends AbstractModule {
private final long initialPeriod; private final long initialPeriod;
private final long maxPeriod; private final long maxPeriod;
DeletedSecretStatusPredicateFactory(final AzureComputeApi api, final long operationTimeout, final long initialPeriod, 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.api = checkNotNull(api, "api cannot be null");
this.operationTimeout = operationTimeout; this.operationTimeout = operationTimeout;
this.initialPeriod = initialPeriod; this.initialPeriod = initialPeriod;
@ -498,7 +542,8 @@ public class AzurePredicatesModule extends AbstractModule {
private final long initialPeriod; private final long initialPeriod;
private final long maxPeriod; private final long maxPeriod;
RecoverableSecretStatusPredicateFactory(final AzureComputeApi api, final long operationTimeout, final long initialPeriod, 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.api = checkNotNull(api, "api cannot be null");
this.operationTimeout = operationTimeout; this.operationTimeout = operationTimeout;
this.initialPeriod = initialPeriod; this.initialPeriod = initialPeriod;
@ -513,7 +558,8 @@ public class AzurePredicatesModule extends AbstractModule {
public boolean apply(final String name) { public boolean apply(final String name) {
checkNotNull(name, "name cannot be null"); checkNotNull(name, "name cannot be null");
SecretBundle secret = api.getVaultApi(resourceGroup).getSecret(vaultUri, name, null); SecretBundle secret = api.getVaultApi(resourceGroup).getSecret(vaultUri, name, null);
return secret != null ? (isRecovered ? true : secret.attributes().recoveryLevel().contains("Recoverable")) : false; return secret != null ? (isRecovered ? true : secret.attributes().recoveryLevel()
.contains("Recoverable")) : false;
} }
}, operationTimeout, initialPeriod, maxPeriod); }, operationTimeout, initialPeriod, maxPeriod);
} }
@ -522,26 +568,26 @@ public class AzurePredicatesModule extends AbstractModule {
@Provides @Provides
@Named(VAULT_CERTIFICATE_DELETE_STATUS) @Named(VAULT_CERTIFICATE_DELETE_STATUS)
protected VaultCertificatePredicates.DeletedCertificateStatusPredicateFactory provideDeletedCertificateStatusPredicateFactory(final AzureComputeApi api, protected VaultCertificatePredicates.DeletedCertificateStatusPredicateFactory provideDeletedCertificateStatusPredicateFactory(
@Named(OPERATION_TIMEOUT) Integer operationTimeout, final AzureComputeApi api, @Named(OPERATION_TIMEOUT) Integer operationTimeout, final PollPeriod pollPeriod) {
final PollPeriod pollPeriod) { return new VaultCertificatePredicates.DeletedCertificateStatusPredicateFactory(api, operationTimeout.longValue(),
return new VaultCertificatePredicates.DeletedCertificateStatusPredicateFactory(api, operationTimeout.longValue(), pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod);
} }
@Provides @Provides
@Named(VAULT_CERTIFICATE_RECOVERABLE_STATUS) @Named(VAULT_CERTIFICATE_RECOVERABLE_STATUS)
protected VaultCertificatePredicates.RecoverableCertificateStatusPredicateFactory provideRecoverableCertificateStatusPredicateFactory(final AzureComputeApi api, protected VaultCertificatePredicates.RecoverableCertificateStatusPredicateFactory provideRecoverableCertificateStatusPredicateFactory(
@Named(OPERATION_TIMEOUT) Integer operationTimeout, final AzureComputeApi api, @Named(OPERATION_TIMEOUT) Integer operationTimeout, final PollPeriod pollPeriod) {
final PollPeriod pollPeriod) { return new VaultCertificatePredicates.RecoverableCertificateStatusPredicateFactory(api,
return new VaultCertificatePredicates.RecoverableCertificateStatusPredicateFactory(api, operationTimeout.longValue(), pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); operationTimeout.longValue(), pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod);
} }
@Provides @Provides
@Named(VAULT_CERTIFICATE_OPERATION_STATUS) @Named(VAULT_CERTIFICATE_OPERATION_STATUS)
protected VaultCertificatePredicates.CertificateOperationStatusPredicateFactory provideCertificateOperationStatusPredicateFactory(final AzureComputeApi api, protected VaultCertificatePredicates.CertificateOperationStatusPredicateFactory provideCertificateOperationStatusPredicateFactory(
@Named(OPERATION_TIMEOUT) Integer operationTimeout, final AzureComputeApi api, @Named(OPERATION_TIMEOUT) Integer operationTimeout, final PollPeriod pollPeriod) {
final PollPeriod pollPeriod) { return new VaultCertificatePredicates.CertificateOperationStatusPredicateFactory(api,
return new VaultCertificatePredicates.CertificateOperationStatusPredicateFactory(api, operationTimeout.longValue(), pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod); operationTimeout.longValue(), pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod);
} }
public static class VaultCertificatePredicates { public static class VaultCertificatePredicates {
@ -551,7 +597,8 @@ public class AzurePredicatesModule extends AbstractModule {
private final long initialPeriod; private final long initialPeriod;
private final long maxPeriod; private final long maxPeriod;
DeletedCertificateStatusPredicateFactory(final AzureComputeApi api, final long operationTimeout, final long initialPeriod, 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.api = checkNotNull(api, "api cannot be null");
this.operationTimeout = operationTimeout; this.operationTimeout = operationTimeout;
this.initialPeriod = initialPeriod; this.initialPeriod = initialPeriod;
@ -578,7 +625,8 @@ public class AzurePredicatesModule extends AbstractModule {
private final long initialPeriod; private final long initialPeriod;
private final long maxPeriod; private final long maxPeriod;
RecoverableCertificateStatusPredicateFactory(final AzureComputeApi api, final long operationTimeout, final long initialPeriod, 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.api = checkNotNull(api, "api cannot be null");
this.operationTimeout = operationTimeout; this.operationTimeout = operationTimeout;
this.initialPeriod = initialPeriod; this.initialPeriod = initialPeriod;
@ -593,7 +641,8 @@ public class AzurePredicatesModule extends AbstractModule {
public boolean apply(final String name) { public boolean apply(final String name) {
checkNotNull(name, "name cannot be null"); checkNotNull(name, "name cannot be null");
CertificateBundle cert = api.getVaultApi(resourceGroup).getCertificate(vaultUri, name, null); CertificateBundle cert = api.getVaultApi(resourceGroup).getCertificate(vaultUri, name, null);
return cert != null ? (isImport ? true : cert.attributes().recoveryLevel().contains("Recoverable")) : false; return cert != null ? (isImport ? true : cert.attributes().recoveryLevel().contains("Recoverable"))
: false;
} }
}, operationTimeout, initialPeriod, maxPeriod); }, operationTimeout, initialPeriod, maxPeriod);
@ -606,7 +655,8 @@ public class AzurePredicatesModule extends AbstractModule {
private final long initialPeriod; private final long initialPeriod;
private final long maxPeriod; private final long maxPeriod;
CertificateOperationStatusPredicateFactory(final AzureComputeApi api, final long operationTimeout, final long initialPeriod, 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.api = checkNotNull(api, "api cannot be null");
this.operationTimeout = operationTimeout; this.operationTimeout = operationTimeout;
this.initialPeriod = initialPeriod; this.initialPeriod = initialPeriod;
@ -621,7 +671,8 @@ public class AzurePredicatesModule extends AbstractModule {
public boolean apply(final String name) { public boolean apply(final String name) {
checkNotNull(name, "name cannot be null"); checkNotNull(name, "name cannot be null");
CertificateOperation certOp = api.getVaultApi(resourceGroup).getCertificateOperation(vaultUri, name); CertificateOperation certOp = api.getVaultApi(resourceGroup).getCertificateOperation(vaultUri, name);
return isCreate ? ((certOp != null) ? !certOp.status().equals("inProgress") : false) : (certOp == null); return isCreate ? ((certOp != null) ? !certOp.status().equals("inProgress") : false)
: (certOp == null);
} }
}, operationTimeout, initialPeriod, maxPeriod); }, operationTimeout, initialPeriod, maxPeriod);
} }

View File

@ -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.functions.TemplateToAvailabilitySet;
import org.jclouds.azurecompute.arm.compute.options.AzureTemplateOptions; import org.jclouds.azurecompute.arm.compute.options.AzureTemplateOptions;
import org.jclouds.azurecompute.arm.compute.options.IpOptions; 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.AvailabilitySet;
import org.jclouds.azurecompute.arm.domain.NetworkSecurityGroup; import org.jclouds.azurecompute.arm.domain.NetworkSecurityGroup;
import org.jclouds.azurecompute.arm.domain.PublicIPAddress; import org.jclouds.azurecompute.arm.domain.PublicIPAddress;
import org.jclouds.azurecompute.arm.domain.ResourceGroup; import org.jclouds.azurecompute.arm.domain.ResourceGroup;
import org.jclouds.azurecompute.arm.domain.Subnet; import org.jclouds.azurecompute.arm.domain.Subnet;
import org.jclouds.azurecompute.arm.domain.Subnet.SubnetProperties; 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.azurecompute.arm.domain.VirtualNetwork.VirtualNetworkProperties;
import org.jclouds.compute.config.CustomizationResponse; import org.jclouds.compute.config.CustomizationResponse;
import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.NodeMetadata;

View File

@ -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() {
}
}

View File

@ -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);
}
}

View File

@ -31,6 +31,10 @@ import org.jclouds.json.SerializedNames;
@AutoValue @AutoValue
public abstract class Subnet { 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/([^/]+)(/.*)?$"); private static final Pattern NETWORK_PATTERN = Pattern.compile("^.*/virtualNetworks/([^/]+)(/.*)?$");
@AutoValue @AutoValue
@ -131,6 +135,12 @@ public abstract class Subnet {
public abstract Builder id(String id); public abstract Builder id(String id);
public abstract Builder etag(String etag); public abstract Builder etag(String etag);
public abstract Builder properties(SubnetProperties properties); public abstract Builder properties(SubnetProperties properties);
// Gateway subnets are identified by name
public Builder setGatewaySubnet() {
return name(GATEWAY_SUBNET_NAME);
}
public abstract Subnet build(); public abstract Subnet build();
} }
} }

View File

@ -18,30 +18,19 @@ package org.jclouds.azurecompute.arm.domain;
import static com.google.common.collect.ImmutableList.copyOf; import static com.google.common.collect.ImmutableList.copyOf;
import java.util.Map;
import java.util.List; import java.util.List;
import com.google.common.collect.ImmutableList; import java.util.Map;
import com.google.auto.value.AutoValue;
import com.google.common.collect.ImmutableMap;
import org.jclouds.javax.annotation.Nullable; import org.jclouds.javax.annotation.Nullable;
import org.jclouds.json.SerializedNames; import org.jclouds.json.SerializedNames;
import com.google.auto.value.AutoValue;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
@AutoValue @AutoValue
public abstract class VirtualNetwork { 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 @AutoValue
public abstract static class VirtualNetworkProperties implements Provisionable { public abstract static class VirtualNetworkProperties implements Provisionable {

View File

@ -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() {
}
}

View File

@ -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);
}
}

View File

@ -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 IPSecEncryption {
AES128, AES192, AES256, DES, DES3, GCMAES128, GCMAES192, GCMAES256, None, Unrecognized;
public static IPSecEncryption fromValue(final String text) {
return (IPSecEncryption) GetEnumValue.fromValueOrDefault(text, IPSecEncryption.Unrecognized);
}
}

View File

@ -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 IPSecIntegrity {
GCMAES128, GCMAES192, GCMAES256, MD5, SHA1, SHA256, Unrecognized;
public static IPSecIntegrity fromValue(final String text) {
return (IPSecIntegrity) GetEnumValue.fromValueOrDefault(text, IPSecIntegrity.Unrecognized);
}
}

View File

@ -0,0 +1,77 @@
/*
* 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.domain.AddressSpace;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.json.SerializedNames;
import com.google.auto.value.AutoValue;
@AutoValue
public abstract class IPSecPolicy {
@Nullable public abstract String radiusServerAddress();
@Nullable public abstract String radiusServerSecret();
@Nullable public abstract AddressSpace vpnClientAddressPool();
@Nullable public abstract DHGroup dhGroup();
@Nullable public abstract IkeEncryption ikeEncryption();
@Nullable public abstract IkeIntegrity ikeIntegrity();
@Nullable public abstract IPSecEncryption ipsecEncryption();
@Nullable public abstract IPSecIntegrity ipsecIntegrity();
@Nullable public abstract PFSGroup pfsGroup();
@Nullable public abstract Integer saDataSizeKilobytes();
@Nullable public abstract Integer saLifeTimeSeconds();
IPSecPolicy() {
}
@SerializedNames({ "radiusServerAddress", "radiusServerSecret", "vpnClientAddressPool", "dhGroup", "ikeEncryption",
"ikeIntegrity", "ipsecEncryption", "ipsecIntegrity", "pfsGroup", "saDataSizeKilobytes", "saLifeTimeSeconds" })
public static IPSecPolicy create(String radiusServerAddress, String radiusServerSecret,
AddressSpace vpnClientAddressPool, DHGroup dhGroup, IkeEncryption ikeEncryption, IkeIntegrity ikeIntegrity,
IPSecEncryption ipsecEncryption, IPSecIntegrity ipsecIntegrity, PFSGroup pfsGroup,
Integer saDataSizeKilobytes, Integer saLifeTimeSeconds) {
return builder().radiusServerAddress(radiusServerAddress).radiusServerSecret(radiusServerSecret)
.vpnClientAddressPool(vpnClientAddressPool).dhGroup(dhGroup).ikeEncryption(ikeEncryption)
.ikeIntegrity(ikeIntegrity).ipsecEncryption(ipsecEncryption).ipsecIntegrity(ipsecIntegrity)
.pfsGroup(pfsGroup).saDataSizeKilobytes(saDataSizeKilobytes).saLifeTimeSeconds(saLifeTimeSeconds).build();
}
public static Builder builder() {
return new AutoValue_IPSecPolicy.Builder();
}
public abstract Builder toBuilder();
@AutoValue.Builder
public abstract static class Builder {
public abstract Builder radiusServerAddress(String radiusServerAddress);
public abstract Builder radiusServerSecret(String radiusServerSecret);
public abstract Builder vpnClientAddressPool(AddressSpace vpnClientAddressPool);
public abstract Builder dhGroup(DHGroup dhGroup);
public abstract Builder ikeEncryption(IkeEncryption ikeEncryption);
public abstract Builder ikeIntegrity(IkeIntegrity ikeIntegrity);
public abstract Builder ipsecEncryption(IPSecEncryption ipsecEncryption);
public abstract Builder ipsecIntegrity(IPSecIntegrity ipsecIntegrity);
public abstract Builder pfsGroup(PFSGroup pfsGroup);
public abstract Builder saDataSizeKilobytes(Integer saDataSizeKilobytes);
public abstract Builder saLifeTimeSeconds(Integer saLifeTimeSeconds);
public abstract IPSecPolicy build();
}
}

View File

@ -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 IkeEncryption {
AES128, AES192, AES256, DES, DES3, GCMAES128, GCMAES256, Unrecognized;
public static IkeEncryption fromValue(final String text) {
return (IkeEncryption) GetEnumValue.fromValueOrDefault(text, IkeEncryption.Unrecognized);
}
}

View File

@ -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 IkeIntegrity {
GCMAES128, GCMAES256, MD5, SHA1, SHA256, SHA384, Unrecognized;
public static IkeIntegrity fromValue(final String text) {
return (IkeIntegrity) GetEnumValue.fromValueOrDefault(text, IkeIntegrity.Unrecognized);
}
}

View File

@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.jclouds.azurecompute.arm.domain; package org.jclouds.azurecompute.arm.domain.vpn;
import java.util.Map; import java.util.Map;
@ -42,14 +42,13 @@ public abstract class LocalNetworkGateway {
@SerializedNames({ "id", "name", "location", "type", "tags", "etag", "properties" }) @SerializedNames({ "id", "name", "location", "type", "tags", "etag", "properties" })
public static LocalNetworkGateway create(String id, String name, String location, String type, public static LocalNetworkGateway create(String id, String name, String location, String type,
Map<String, String> tags, String etag, LocalNetworkGatewayProperties properties) { Map<String, String> tags, String etag, LocalNetworkGatewayProperties properties) {
return builder().id(id).name(name).location(location).type(type).tags(tags).etag(etag).properties(properties) return builder(name, location, properties).id(id).type(type).tags(tags).etag(etag).build();
.build();
} }
public abstract Builder toBuilder(); public abstract Builder toBuilder();
public static Builder builder() { public static Builder builder(String name, String location, LocalNetworkGatewayProperties properties) {
return new AutoValue_LocalNetworkGateway.Builder(); return new AutoValue_LocalNetworkGateway.Builder().name(name).location(location).properties(properties);
} }
@AutoValue.Builder @AutoValue.Builder
@ -62,13 +61,11 @@ public abstract class LocalNetworkGateway {
public abstract Builder etag(String etag); public abstract Builder etag(String etag);
public abstract Builder properties(LocalNetworkGatewayProperties properties); public abstract Builder properties(LocalNetworkGatewayProperties properties);
abstract String location();
abstract Map<String, String> tags(); abstract Map<String, String> tags();
abstract LocalNetworkGateway autoBuild(); abstract LocalNetworkGateway autoBuild();
public LocalNetworkGateway build() { public LocalNetworkGateway build() {
tags(tags() != null ? ImmutableMap.copyOf(tags()) : null); tags(tags() != null ? ImmutableMap.copyOf(tags()) : null);
location(location().toLowerCase()); // Avoid issues in regions such as CanadaEast
return autoBuild(); return autoBuild();
} }
} }

View File

@ -14,15 +14,14 @@
* See the License for the specific language governing permissions and * See the License for the specific language governing permissions and
* limitations under the License. * limitations under the License.
*/ */
package org.jclouds.azurecompute.arm.domain; package org.jclouds.azurecompute.arm.domain.vpn;
import java.util.List;
import org.jclouds.azurecompute.arm.domain.AddressSpace;
import org.jclouds.azurecompute.arm.domain.Provisionable;
import org.jclouds.javax.annotation.Nullable; import org.jclouds.javax.annotation.Nullable;
import org.jclouds.json.SerializedNames; import org.jclouds.json.SerializedNames;
import com.google.auto.value.AutoValue; import com.google.auto.value.AutoValue;
import com.google.common.collect.ImmutableList;
@AutoValue @AutoValue
public abstract class LocalNetworkGatewayProperties implements Provisionable { public abstract class LocalNetworkGatewayProperties implements Provisionable {
@ -37,9 +36,8 @@ public abstract class LocalNetworkGatewayProperties implements Provisionable {
"resourceGuid" }) "resourceGuid" })
public static LocalNetworkGatewayProperties create(BGPSettings bgpSettings, String gatewayIpAddress, public static LocalNetworkGatewayProperties create(BGPSettings bgpSettings, String gatewayIpAddress,
AddressSpace localNetworkAddressSpace, String provisioningState, String resourceGuid) { AddressSpace localNetworkAddressSpace, String provisioningState, String resourceGuid) {
return builder().bgpSettings(bgpSettings).gatewayIpAddress(gatewayIpAddress) return builder(gatewayIpAddress).bgpSettings(bgpSettings).localNetworkAddressSpace(localNetworkAddressSpace)
.localNetworkAddressSpace(localNetworkAddressSpace).provisioningState(provisioningState) .provisioningState(provisioningState).resourceGuid(resourceGuid).build();
.resourceGuid(resourceGuid).build();
} }
LocalNetworkGatewayProperties() { LocalNetworkGatewayProperties() {
@ -48,8 +46,8 @@ public abstract class LocalNetworkGatewayProperties implements Provisionable {
public abstract LocalNetworkGatewayProperties.Builder toBuilder(); public abstract LocalNetworkGatewayProperties.Builder toBuilder();
public static LocalNetworkGatewayProperties.Builder builder() { public static LocalNetworkGatewayProperties.Builder builder(String gatewayIpAddress) {
return new AutoValue_LocalNetworkGatewayProperties.Builder(); return new AutoValue_LocalNetworkGatewayProperties.Builder().gatewayIpAddress(gatewayIpAddress);
} }
@AutoValue.Builder @AutoValue.Builder
@ -62,35 +60,4 @@ public abstract class LocalNetworkGatewayProperties implements Provisionable {
public abstract LocalNetworkGatewayProperties build(); 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() {
}
}
} }

View File

@ -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 PFSGroup {
ECP256, ECP384, PFS1, PFS14, PFS2, PFS2048, PFS24, PFSMM, None, Unrecognized;
public static PFSGroup fromValue(final String text) {
return (PFSGroup) GetEnumValue.fromValueOrDefault(text, PFSGroup.Unrecognized);
}
}

View File

@ -0,0 +1,55 @@
/*
* 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;
import org.jclouds.json.SerializedNames;
import com.google.auto.value.AutoValue;
@AutoValue
public abstract class SKU {
public static enum SKUName {
Basic, HighPerformance, Standard, UltraPerformance, VpnGw1, VpnGw2, VpnGw3, Unrecognized;
public static SKUName fromValue(final String text) {
return (SKUName) GetEnumValue.fromValueOrDefault(text, SKUName.Unrecognized);
}
}
public static enum SKUTier {
Basic, HighPerformance, Standard, UltraPerformance, VpnGw1, VpnGw2, VpnGw3, Unrecognized;
public static SKUTier fromValue(final String text) {
return (SKUTier) GetEnumValue.fromValueOrDefault(text, SKUTier.Unrecognized);
}
}
public abstract int capacity();
public abstract SKUName name();
public abstract SKUTier tier();
SKU() {
}
@SerializedNames({ "capacity", "name", "tier" })
public static SKU create(int capacity, SKUName name, SKUTier tier) {
return new AutoValue_SKU(capacity, name, tier);
}
}

View File

@ -0,0 +1,89 @@
/*
* 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 java.util.List;
import org.jclouds.azurecompute.arm.domain.AddressSpace;
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 VPNClientConfiguration {
@Nullable public abstract String radiusServerAddress();
@Nullable public abstract String radiusServerSecret();
@Nullable public abstract AddressSpace vpnClientAddressPool();
public abstract List<IPSecPolicy> vpnClientIpsecPolicies();
public abstract List<String> vpnClientProtocols();
public abstract List<VPNClientRevokedCertificate> vpnClientRevokedCertificates();
public abstract List<VPNClientRootCertificate> vpnClientRootCertificates();
VPNClientConfiguration() {
}
@SerializedNames({ "radiusServerAddress", "radiusServerSecret", "vpnClientAddressPool", "vpnClientIpsecPolicies",
"vpnClientProtocols", "vpnClientRevokedCertificates", "vpnClientRootCertificates" })
public static VPNClientConfiguration create(String radiusServerAddress, String radiusServerSecret,
AddressSpace vpnClientAddressPool, List<IPSecPolicy> vpnClientIpsecPolicies, List<String> vpnClientProtocols,
List<VPNClientRevokedCertificate> vpnClientRevokedCertificates,
List<VPNClientRootCertificate> vpnClientRootCertificates) {
return builder().radiusServerAddress(radiusServerAddress).radiusServerSecret(radiusServerSecret)
.vpnClientAddressPool(vpnClientAddressPool).vpnClientIpsecPolicies(vpnClientIpsecPolicies)
.vpnClientProtocols(vpnClientProtocols).vpnClientRevokedCertificates(vpnClientRevokedCertificates)
.vpnClientRootCertificates(vpnClientRootCertificates).build();
}
public static Builder builder() {
return new AutoValue_VPNClientConfiguration.Builder();
}
public abstract Builder toBuilder();
@AutoValue.Builder
public abstract static class Builder {
public abstract Builder radiusServerAddress(String radiusServerAddress);
public abstract Builder radiusServerSecret(String radiusServerSecret);
public abstract Builder vpnClientAddressPool(AddressSpace vpnClientAddressPool);
public abstract Builder vpnClientIpsecPolicies(List<IPSecPolicy> vpnClientIpsecPolicies);
public abstract Builder vpnClientProtocols(List<String> vpnClientProtocols);
public abstract Builder vpnClientRevokedCertificates(List<VPNClientRevokedCertificate> vpnClientRevokedCertificates);
public abstract Builder vpnClientRootCertificates(List<VPNClientRootCertificate> vpnClientRootCertificates);
abstract List<IPSecPolicy> vpnClientIpsecPolicies();
abstract List<String> vpnClientProtocols();
abstract List<VPNClientRevokedCertificate> vpnClientRevokedCertificates();
abstract List<VPNClientRootCertificate> vpnClientRootCertificates();
abstract VPNClientConfiguration autoBuild();
public VPNClientConfiguration build() {
vpnClientIpsecPolicies(vpnClientIpsecPolicies() == null ? ImmutableList.<IPSecPolicy> of() : ImmutableList
.copyOf(vpnClientIpsecPolicies()));
vpnClientProtocols(vpnClientProtocols() == null ? ImmutableList.<String> of() : ImmutableList
.copyOf(vpnClientProtocols()));
vpnClientRevokedCertificates(vpnClientRevokedCertificates() == null ? ImmutableList
.<VPNClientRevokedCertificate> of() : ImmutableList.copyOf(vpnClientRevokedCertificates()));
vpnClientRootCertificates(vpnClientRootCertificates() == null ? ImmutableList.<VPNClientRootCertificate> of()
: ImmutableList.copyOf(vpnClientRootCertificates()));
return autoBuild();
}
}
}

View File

@ -0,0 +1,57 @@
/*
* 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.domain.Provisionable;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.json.SerializedNames;
import com.google.auto.value.AutoValue;
@AutoValue
public abstract class VPNClientRevokedCertificate {
@Nullable public abstract String id();
public abstract String name();
@Nullable public abstract String etag();
public abstract VPNClientRevokedCertificateProperties properties();
VPNClientRevokedCertificate() {
}
@SerializedNames({ "id", "name", "etag", "properties" })
public static VPNClientRevokedCertificate create(String id, String name, String etag,
VPNClientRevokedCertificateProperties properties) {
return new AutoValue_VPNClientRevokedCertificate(id, name, etag, properties);
}
@AutoValue
public abstract static class VPNClientRevokedCertificateProperties implements Provisionable {
public abstract String provisioningState();
public abstract String thumbprint();
VPNClientRevokedCertificateProperties() {
}
@SerializedNames({ "provisioningState", "thumbprint" })
public static VPNClientRevokedCertificateProperties create(String provisioningState, String thumbprint) {
return new AutoValue_VPNClientRevokedCertificate_VPNClientRevokedCertificateProperties(provisioningState,
thumbprint);
}
}
}

View File

@ -0,0 +1,57 @@
/*
* 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.domain.Provisionable;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.json.SerializedNames;
import com.google.auto.value.AutoValue;
@AutoValue
public abstract class VPNClientRootCertificate {
@Nullable public abstract String id();
public abstract String name();
@Nullable public abstract String etag();
public abstract VPNClientRootCertificateProperties properties();
VPNClientRootCertificate() {
}
@SerializedNames({ "id", "name", "etag", "properties" })
public static VPNClientRootCertificate create(String id, String name, String etag,
VPNClientRootCertificateProperties properties) {
return new AutoValue_VPNClientRootCertificate(id, name, etag, properties);
}
@AutoValue
public abstract static class VPNClientRootCertificateProperties implements Provisionable {
public abstract String provisioningState();
public abstract String publicCertData();
VPNClientRootCertificateProperties() {
}
@SerializedNames({ "provisioningState", "publicCertData" })
public static VPNClientRootCertificateProperties create(String provisioningState, String publicCertData) {
return new AutoValue_VPNClientRootCertificate_VPNClientRootCertificateProperties(provisioningState,
publicCertData);
}
}
}

View File

@ -0,0 +1,27 @@
/*
* 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 VPNType {
PolicyBased, RouteBased, Unrecognized;
public static VPNType fromValue(final String text) {
return (VPNType) GetEnumValue.fromValueOrDefault(text, VPNType.Unrecognized);
}
}

View File

@ -0,0 +1,72 @@
/*
* 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 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 VirtualNetworkGateway {
@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 VirtualNetworkGatewayProperties properties();
VirtualNetworkGateway() {
}
@SerializedNames({ "id", "name", "location", "type", "tags", "etag", "properties" })
public static VirtualNetworkGateway create(String id, String name, String location, String type,
Map<String, String> tags, String etag, VirtualNetworkGatewayProperties properties) {
return builder(name, location, properties).id(id).type(type).tags(tags).etag(etag).build();
}
public abstract Builder toBuilder();
public static Builder builder(String name, String location, VirtualNetworkGatewayProperties properties) {
return new AutoValue_VirtualNetworkGateway.Builder().name(name).location(location).properties(properties);
}
@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(VirtualNetworkGatewayProperties properties);
abstract Map<String, String> tags();
abstract VirtualNetworkGateway autoBuild();
public VirtualNetworkGateway build() {
tags(tags() != null ? ImmutableMap.copyOf(tags()) : null);
return autoBuild();
}
}
}

View File

@ -0,0 +1,144 @@
/*
* 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 java.util.List;
import org.jclouds.azurecompute.arm.domain.IdReference;
import org.jclouds.azurecompute.arm.domain.IpAllocationMethod;
import org.jclouds.azurecompute.arm.domain.Provisionable;
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 VirtualNetworkGatewayProperties implements Provisionable {
@Nullable public abstract Boolean activeActive();
@Nullable public abstract BGPSettings bgpSettings();
public abstract boolean enableBGP();
@Nullable public abstract IdReference gatewayDefaultSite();
public abstract VirtualNetworkGatewayType gatewayType();
public abstract List<IpConfiguration> ipConfigurations();
@Nullable public abstract String provisioningState();
@Nullable public abstract String resourceGuid();
public abstract SKU sku();
@Nullable public abstract VPNClientConfiguration vpnClientConfiguration();
@Nullable public abstract VPNType vpnType();
VirtualNetworkGatewayProperties() {
}
@SerializedNames({ "activeActive", "bgpSettings", "enableBgp", "gatewayDefaultSite", "gatewayType",
"ipConfigurations", "provisioningState", "resourceGuid", "sku", "vpnClientConfiguration", "vpnType" })
public static VirtualNetworkGatewayProperties create(Boolean activeActive, BGPSettings bgpSettings,
boolean enableBGP, IdReference gatewayDefaultSite, VirtualNetworkGatewayType gatewayType,
List<IpConfiguration> ipConfigurations, String provisioningState, String resourceGuid, SKU sku,
VPNClientConfiguration vpnClientConfiguration, VPNType vpnType) {
return builder(enableBGP, gatewayType, sku).activeActive(activeActive).bgpSettings(bgpSettings)
.gatewayDefaultSite(gatewayDefaultSite).ipConfigurations(ipConfigurations)
.provisioningState(provisioningState).resourceGuid(resourceGuid)
.vpnClientConfiguration(vpnClientConfiguration).vpnType(vpnType).build();
}
public static Builder builder(boolean enableBGP, VirtualNetworkGatewayType virtualNetworkGatewayType, SKU sku) {
return new AutoValue_VirtualNetworkGatewayProperties.Builder().enableBGP(enableBGP)
.gatewayType(virtualNetworkGatewayType).sku(sku);
}
public abstract Builder toBuilder();
@AutoValue.Builder
public abstract static class Builder {
public abstract Builder activeActive( Boolean activeActive);
public abstract Builder bgpSettings(BGPSettings bgpSettings);
public abstract Builder enableBGP(boolean enableBG);
public abstract Builder gatewayDefaultSite(IdReference gatewayDefaultSite);
public abstract Builder gatewayType(VirtualNetworkGatewayType gatewayType);
public abstract Builder ipConfigurations(List<IpConfiguration> ipConfigurations);
public abstract Builder provisioningState(String provisioningState);
public abstract Builder resourceGuid(String resourceGuid);
public abstract Builder sku(SKU sku);
public abstract Builder vpnClientConfiguration(VPNClientConfiguration vpnClientConfiguration);
public abstract Builder vpnType(VPNType vpnType);
abstract List<IpConfiguration> ipConfigurations();
abstract VirtualNetworkGatewayProperties autoBuild();
public VirtualNetworkGatewayProperties build() {
ipConfigurations(ipConfigurations() == null ? ImmutableList.<IpConfiguration> of() : ImmutableList
.copyOf(ipConfigurations()));
return autoBuild();
}
}
@AutoValue
public abstract static class IpConfiguration {
@Nullable public abstract String id();
public abstract String name();
@Nullable public abstract String etag();
public abstract IpConfigurationProperties properties();
IpConfiguration() {
}
@SerializedNames({ "id", "name", "etag", "properties" })
public static IpConfiguration create(String id, String name, String etag, IpConfigurationProperties properties) {
return new AutoValue_VirtualNetworkGatewayProperties_IpConfiguration(id, name, etag, properties);
}
@AutoValue
public abstract static class IpConfigurationProperties implements Provisionable {
public abstract IpAllocationMethod privateIPAllocationMethod();
@Nullable public abstract String provisioningState();
@Nullable public abstract IdReference publicIPAddress();
@Nullable public abstract IdReference subnet();
@SerializedNames({ "privateIPAllocationMethod", "provisioningState", "publicIPAddress", "subnet" })
public static IpConfigurationProperties create(IpAllocationMethod privateIPAllocationMethod,
String provisioningState, IdReference publicIPAddress, IdReference subnet) {
return builder(privateIPAllocationMethod).provisioningState(provisioningState)
.publicIPAddress(publicIPAddress).subnet(subnet).build();
}
IpConfigurationProperties() {
}
public static Builder builder(IpAllocationMethod privateIPAllocationMethod) {
return new AutoValue_VirtualNetworkGatewayProperties_IpConfiguration_IpConfigurationProperties.Builder()
.privateIPAllocationMethod(privateIPAllocationMethod);
}
public abstract Builder toBuilder();
@AutoValue.Builder
public abstract static class Builder {
public abstract Builder privateIPAllocationMethod(IpAllocationMethod privateIPAllocationMethod);
public abstract Builder provisioningState(String provisioningState);
public abstract Builder publicIPAddress(IdReference publicIPAddress);
public abstract Builder subnet(IdReference subnet);
public abstract IpConfigurationProperties build();
}
}
}
}

View File

@ -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 VirtualNetworkGatewayType {
ExpressRoute, Vpn, Unrecognized;
public static VirtualNetworkGatewayType fromValue(final String text) {
return (VirtualNetworkGatewayType) GetEnumValue.fromValueOrDefault(text,
VirtualNetworkGatewayType.Unrecognized);
}
}

View File

@ -32,8 +32,8 @@ import javax.ws.rs.core.MediaType;
import org.jclouds.Fallbacks.EmptyListOnNotFoundOr404; import org.jclouds.Fallbacks.EmptyListOnNotFoundOr404;
import org.jclouds.Fallbacks.NullOnNotFoundOr404; import org.jclouds.Fallbacks.NullOnNotFoundOr404;
import org.jclouds.azurecompute.arm.domain.LocalNetworkGateway; import org.jclouds.azurecompute.arm.domain.vpn.LocalNetworkGateway;
import org.jclouds.azurecompute.arm.domain.LocalNetworkGatewayProperties; import org.jclouds.azurecompute.arm.domain.vpn.LocalNetworkGatewayProperties;
import org.jclouds.azurecompute.arm.filters.ApiVersionFilter; import org.jclouds.azurecompute.arm.filters.ApiVersionFilter;
import org.jclouds.azurecompute.arm.functions.URIParser; import org.jclouds.azurecompute.arm.functions.URIParser;
import org.jclouds.javax.annotation.Nullable; import org.jclouds.javax.annotation.Nullable;

View File

@ -0,0 +1,80 @@
/*
* 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.features;
import java.io.Closeable;
import java.net.URI;
import java.util.List;
import java.util.Map;
import javax.inject.Named;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.MediaType;
import org.jclouds.Fallbacks.EmptyListOnNotFoundOr404;
import org.jclouds.Fallbacks.NullOnNotFoundOr404;
import org.jclouds.azurecompute.arm.domain.vpn.VirtualNetworkGateway;
import org.jclouds.azurecompute.arm.domain.vpn.VirtualNetworkGatewayProperties;
import org.jclouds.azurecompute.arm.filters.ApiVersionFilter;
import org.jclouds.azurecompute.arm.functions.URIParser;
import org.jclouds.javax.annotation.Nullable;
import org.jclouds.oauth.v2.filters.OAuthFilter;
import org.jclouds.rest.annotations.Fallback;
import org.jclouds.rest.annotations.MapBinder;
import org.jclouds.rest.annotations.PayloadParam;
import org.jclouds.rest.annotations.RequestFilters;
import org.jclouds.rest.annotations.ResponseParser;
import org.jclouds.rest.annotations.SelectJson;
import org.jclouds.rest.binders.BindToJsonPayload;
@Path("/resourcegroups/{resourcegroup}/providers/Microsoft.Network/virtualNetworkGateways")
@RequestFilters({ OAuthFilter.class, ApiVersionFilter.class })
@Consumes(MediaType.APPLICATION_JSON)
public interface VirtualNetworkGatewayApi extends Closeable {
@Named("virtualnetworkgateway:list")
@GET
@SelectJson("value")
@Fallback(EmptyListOnNotFoundOr404.class)
List<VirtualNetworkGateway> list();
@Named("virtualnetworkgateway:get")
@Path("/{name}")
@GET
@Fallback(NullOnNotFoundOr404.class)
VirtualNetworkGateway get(@PathParam("name") String name);
@Named("virtualnetworkgateway:createOrUpdate")
@MapBinder(BindToJsonPayload.class)
@Path("/{name}")
@PUT
VirtualNetworkGateway createOrUpdate(@PathParam("name") String name, @PayloadParam("location") String location,
@Nullable @PayloadParam("tags") Map<String, String> tags,
@PayloadParam("properties") VirtualNetworkGatewayProperties properties);
@Named("virtualnetworkgateway:delete")
@Path("/{name}")
@DELETE
@ResponseParser(URIParser.class)
@Fallback(NullOnNotFoundOr404.class)
URI delete(@PathParam("name") String name);
}

View File

@ -23,10 +23,10 @@ import static org.testng.Assert.assertTrue;
import java.net.URI; import java.net.URI;
import org.jclouds.azurecompute.arm.domain.LocalNetworkGateway; import org.jclouds.azurecompute.arm.domain.AddressSpace;
import org.jclouds.azurecompute.arm.domain.LocalNetworkGatewayProperties;
import org.jclouds.azurecompute.arm.domain.LocalNetworkGatewayProperties.AddressSpace;
import org.jclouds.azurecompute.arm.domain.Provisionable; import org.jclouds.azurecompute.arm.domain.Provisionable;
import org.jclouds.azurecompute.arm.domain.vpn.LocalNetworkGateway;
import org.jclouds.azurecompute.arm.domain.vpn.LocalNetworkGatewayProperties;
import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest; import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest;
import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test; import org.testng.annotations.Test;
@ -52,7 +52,7 @@ public class LocalNetworkGatewayApiLiveTest extends BaseAzureComputeApiLiveTest
@Test @Test
public void createLocalNetworkGateway() { public void createLocalNetworkGateway() {
AddressSpace localAddresses = AddressSpace.create(ImmutableList.of("192.168.0.0/24")); AddressSpace localAddresses = AddressSpace.create(ImmutableList.of("192.168.0.0/24"));
LocalNetworkGatewayProperties props = LocalNetworkGatewayProperties.builder().gatewayIpAddress("1.2.3.4") LocalNetworkGatewayProperties props = LocalNetworkGatewayProperties.builder("1.2.3.4")
.localNetworkAddressSpace(localAddresses).build(); .localNetworkAddressSpace(localAddresses).build();
LocalNetworkGateway gw = api().createOrUpdate(name, LOCATION, null, props); LocalNetworkGateway gw = api().createOrUpdate(name, LOCATION, null, props);

View File

@ -25,9 +25,9 @@ import static org.testng.Assert.assertTrue;
import java.net.URI; import java.net.URI;
import java.util.List; import java.util.List;
import org.jclouds.azurecompute.arm.domain.LocalNetworkGateway; import org.jclouds.azurecompute.arm.domain.AddressSpace;
import org.jclouds.azurecompute.arm.domain.LocalNetworkGatewayProperties; import org.jclouds.azurecompute.arm.domain.vpn.LocalNetworkGateway;
import org.jclouds.azurecompute.arm.domain.LocalNetworkGatewayProperties.AddressSpace; import org.jclouds.azurecompute.arm.domain.vpn.LocalNetworkGatewayProperties;
import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiMockTest; import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiMockTest;
import org.testng.annotations.Test; import org.testng.annotations.Test;
@ -46,7 +46,7 @@ public class LocalNetworkGatewayApiMockTest extends BaseAzureComputeApiMockTest
LocalNetworkGatewayApi gwapi = api.getLocalNetworkGatewayApi(resourcegroup); LocalNetworkGatewayApi gwapi = api.getLocalNetworkGatewayApi(resourcegroup);
AddressSpace localAddresses = AddressSpace.create(ImmutableList.of("192.168.0.0/24")); AddressSpace localAddresses = AddressSpace.create(ImmutableList.of("192.168.0.0/24"));
LocalNetworkGatewayProperties props = LocalNetworkGatewayProperties.builder().gatewayIpAddress("1.2.3.4") LocalNetworkGatewayProperties props = LocalNetworkGatewayProperties.builder("1.2.3.4")
.localNetworkAddressSpace(localAddresses).build(); .localNetworkAddressSpace(localAddresses).build();
LocalNetworkGateway gw = gwapi.createOrUpdate(name, "westeurope", null, props); LocalNetworkGateway gw = gwapi.createOrUpdate(name, "westeurope", null, props);

View File

@ -49,7 +49,6 @@ public class NetworkInterfaceCardApiLiveTest extends BaseAzureComputeApiLiveTest
public void setup() { public void setup() {
super.setup(); super.setup();
createTestResourceGroup(); createTestResourceGroup();
assertNotNull(api.getResourceGroupApi().create(resourceGroupName, LOCATION, ImmutableMap.<String, String>of()));
String virtualNetworkName = String.format("vn-%s-%s", this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name")); String virtualNetworkName = String.format("vn-%s-%s", this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name"));
nicName = String.format("nic-%s-%s", this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name")); nicName = String.format("nic-%s-%s", this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name"));
String subnetName = String.format("s-%s-%s", this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name")); String subnetName = String.format("s-%s-%s", this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name"));

View File

@ -24,6 +24,7 @@ import static org.testng.Assert.assertTrue;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import org.jclouds.azurecompute.arm.domain.AddressSpace;
import org.jclouds.azurecompute.arm.domain.VirtualNetwork; import org.jclouds.azurecompute.arm.domain.VirtualNetwork;
import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest; import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest;
import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeClass;
@ -53,7 +54,7 @@ public class VirtualNetworkApiLiveTest extends BaseAzureComputeApiLiveTest {
final VirtualNetwork.VirtualNetworkProperties virtualNetworkProperties = final VirtualNetwork.VirtualNetworkProperties virtualNetworkProperties =
VirtualNetwork.VirtualNetworkProperties.builder().addressSpace( VirtualNetwork.VirtualNetworkProperties.builder().addressSpace(
VirtualNetwork.AddressSpace.create(Arrays.asList(DEFAULT_VIRTUALNETWORK_ADDRESS_PREFIX))).build(); AddressSpace.create(Arrays.asList(DEFAULT_VIRTUALNETWORK_ADDRESS_PREFIX))).build();
VirtualNetwork vn = api().createOrUpdate(virtualNetworkName, LOCATION, null, virtualNetworkProperties); VirtualNetwork vn = api().createOrUpdate(virtualNetworkName, LOCATION, null, virtualNetworkProperties);

View File

@ -16,21 +16,19 @@
*/ */
package org.jclouds.azurecompute.arm.features; package org.jclouds.azurecompute.arm.features;
import org.jclouds.azurecompute.arm.domain.VirtualNetwork; import static com.google.common.collect.Iterables.isEmpty;
import static org.testng.Assert.assertEquals;
import org.testng.annotations.Test; import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNull;
import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiMockTest; import static org.testng.Assert.assertTrue;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import static com.google.common.collect.Iterables.isEmpty; import org.jclouds.azurecompute.arm.domain.AddressSpace;
import org.jclouds.azurecompute.arm.domain.VirtualNetwork;
import static org.testng.Assert.assertEquals; import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiMockTest;
import static org.testng.Assert.assertFalse; import org.testng.annotations.Test;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.assertNull;
@Test(groups = "unit", testName = "VirtualNetworkApiMockTest", singleThreaded = true) @Test(groups = "unit", testName = "VirtualNetworkApiMockTest", singleThreaded = true)
public class VirtualNetworkApiMockTest extends BaseAzureComputeApiMockTest { public class VirtualNetworkApiMockTest extends BaseAzureComputeApiMockTest {
@ -98,7 +96,7 @@ public class VirtualNetworkApiMockTest extends BaseAzureComputeApiMockTest {
final VirtualNetwork.VirtualNetworkProperties virtualNetworkProperties = final VirtualNetwork.VirtualNetworkProperties virtualNetworkProperties =
VirtualNetwork.VirtualNetworkProperties.create(null, null, VirtualNetwork.VirtualNetworkProperties.create(null, null,
VirtualNetwork.AddressSpace.create(Arrays.asList("10.2.0.0/16")), null); AddressSpace.create(Arrays.asList("10.2.0.0/16")), null);
vnApi.createOrUpdate(virtualNetwork, location, null, virtualNetworkProperties); vnApi.createOrUpdate(virtualNetwork, location, null, virtualNetworkProperties);

View File

@ -0,0 +1,132 @@
/*
* 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.features;
import static com.google.common.collect.Iterables.any;
import static java.util.Collections.singletonList;
import static org.jclouds.azurecompute.arm.domain.vpn.VirtualNetworkGatewayType.Vpn;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
import java.net.URI;
import java.util.Collections;
import org.jclouds.azurecompute.arm.domain.IdReference;
import org.jclouds.azurecompute.arm.domain.IpAllocationMethod;
import org.jclouds.azurecompute.arm.domain.PublicIPAddress;
import org.jclouds.azurecompute.arm.domain.PublicIPAddressProperties;
import org.jclouds.azurecompute.arm.domain.Subnet;
import org.jclouds.azurecompute.arm.domain.VirtualNetwork;
import org.jclouds.azurecompute.arm.domain.vpn.SKU;
import org.jclouds.azurecompute.arm.domain.vpn.SKU.SKUName;
import org.jclouds.azurecompute.arm.domain.vpn.SKU.SKUTier;
import org.jclouds.azurecompute.arm.domain.vpn.VPNType;
import org.jclouds.azurecompute.arm.domain.vpn.VirtualNetworkGateway;
import org.jclouds.azurecompute.arm.domain.vpn.VirtualNetworkGatewayProperties;
import org.jclouds.azurecompute.arm.domain.vpn.VirtualNetworkGatewayProperties.IpConfiguration;
import org.jclouds.azurecompute.arm.domain.vpn.VirtualNetworkGatewayProperties.IpConfiguration.IpConfigurationProperties;
import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableMap;
@Test(groups = "live", testName = "VirtualNetworkGatewayApiLiveTest", singleThreaded = true)
public class VirtualNetworkGatewayApiLiveTest extends BaseAzureComputeApiLiveTest {
private String name;
private String subnetId;
private PublicIPAddress publicIp;
private Predicate<String> virtualNetworkGatewayAvailable;
@BeforeClass
@Override
public void setup() {
super.setup();
createTestResourceGroup();
name = "jclouds-" + RAND;
virtualNetworkGatewayAvailable = virtualNetworkGatewayStatus.create(resourceGroupName);
VirtualNetwork vnet = createDefaultVirtualNetwork(resourceGroupName, name + "-net", "10.2.0.0/16", LOCATION);
Subnet subnet = createDefaultSubnet(resourceGroupName, Subnet.GATEWAY_SUBNET_NAME, vnet.name(), "10.2.0.0/23");
subnetId = subnet.id();
PublicIPAddressProperties props = PublicIPAddressProperties.builder()
.publicIPAllocationMethod(IpAllocationMethod.Dynamic.name()).idleTimeoutInMinutes(4).build();
publicIp = api.getPublicIPAddressApi(resourceGroupName).createOrUpdate(name + "-publicip", LOCATION,
Collections.<String, String> emptyMap(), props);
}
@Test
public void createVirtualNetworkGateway() {
IpConfigurationProperties ipprops = IpConfigurationProperties.builder(IpAllocationMethod.Dynamic)
.subnet(IdReference.create(subnetId)).publicIPAddress(IdReference.create(publicIp.id())).build();
IpConfiguration ipconf = IpConfiguration.create(null, name + "-ipconf", null, ipprops);
VirtualNetworkGatewayProperties props = VirtualNetworkGatewayProperties
.builder(false, Vpn, SKU.create(1, SKUName.Basic, SKUTier.Basic)).vpnType(VPNType.PolicyBased)
.ipConfigurations(singletonList(ipconf)).build();
VirtualNetworkGateway gw = api().createOrUpdate(name, LOCATION, null, props);
assertNotNull(gw);
assertEquals(gw.name(), name);
assertNotNull(gw.properties());
}
@Test(dependsOnMethods = "createVirtualNetworkGateway")
public void getVirtualNetworkGateway() {
assertNotNull(api().get(name));
}
@Test(dependsOnMethods = "createVirtualNetworkGateway")
public void listVirtualNetworkGateways() {
assertTrue(any(api().list(), new Predicate<VirtualNetworkGateway>() {
@Override
public boolean apply(VirtualNetworkGateway input) {
return name.equals(input.name());
}
}));
}
@Test(dependsOnMethods = "createVirtualNetworkGateway")
public void updateVirtualNetworkGateway() {
// Make sure the resource is fully provisioned before modifying it
assertTrue(virtualNetworkGatewayAvailable.apply(name));
VirtualNetworkGateway gw = api().get(name);
gw = api().createOrUpdate(name, LOCATION, ImmutableMap.of("foo", "bar"), gw.properties());
assertNotNull(gw);
assertTrue(gw.tags().containsKey("foo"));
assertEquals(gw.tags().get("foo"), "bar");
}
@Test(dependsOnMethods = { "getVirtualNetworkGateway", "listVirtualNetworkGateways", "updateVirtualNetworkGateway" }, alwaysRun = true)
public void deleteVirtualNetworkGateway() {
// Make sure the resource is fully provisioned before deleting it
assertTrue(virtualNetworkGatewayAvailable.apply(name));
URI uri = api().delete(name);
assertResourceDeleted(uri);
}
private VirtualNetworkGatewayApi api() {
return api.getVirtualNetworkGatewayApi(resourceGroupName);
}
}

View File

@ -0,0 +1,161 @@
/*
* 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.features;
import static com.google.common.collect.Iterables.isEmpty;
import static java.util.Collections.singletonList;
import static org.jclouds.azurecompute.arm.domain.vpn.VirtualNetworkGatewayType.Vpn;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
import java.net.URI;
import java.util.List;
import org.jclouds.azurecompute.arm.domain.IdReference;
import org.jclouds.azurecompute.arm.domain.IpAllocationMethod;
import org.jclouds.azurecompute.arm.domain.vpn.SKU;
import org.jclouds.azurecompute.arm.domain.vpn.SKU.SKUName;
import org.jclouds.azurecompute.arm.domain.vpn.SKU.SKUTier;
import org.jclouds.azurecompute.arm.domain.vpn.VPNType;
import org.jclouds.azurecompute.arm.domain.vpn.VirtualNetworkGateway;
import org.jclouds.azurecompute.arm.domain.vpn.VirtualNetworkGatewayProperties;
import org.jclouds.azurecompute.arm.domain.vpn.VirtualNetworkGatewayProperties.IpConfiguration;
import org.jclouds.azurecompute.arm.domain.vpn.VirtualNetworkGatewayProperties.IpConfiguration.IpConfigurationProperties;
import org.jclouds.azurecompute.arm.domain.vpn.VirtualNetworkGatewayType;
import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiMockTest;
import org.testng.annotations.Test;
@Test(groups = "unit", testName = "VirtualNetworkGatewayApiMockTest", singleThreaded = true)
public class VirtualNetworkGatewayApiMockTest extends BaseAzureComputeApiMockTest {
private final String subscriptionid = "SUBSCRIPTIONID";
private final String resourcegroup = "myresourcegroup";
private final String name = "myvirtualgw";
private final String apiVersion = "api-version=2018-02-01";
private static final String SUBNET_ID = "/subscriptions/SUBSCRIPTIONID/resourceGroups/rg-virtualnetworkgatewayapilivetest-nacx/providers/Microsoft.Network/virtualNetworks/myvirtualgw-net/subnets/GatewaySubnet";
private static final String PUBLIC_IP = "/subscriptions/SUBSCRIPTIONID/resourceGroups/rg-virtualnetworkgatewayapilivetest-nacx/providers/Microsoft.Network/publicIPAddresses/myvirtualgw-publicip";
public void createOrUpdateVirtualNetworkGateway() throws InterruptedException {
server.enqueue(jsonResponse("/virtualnetworkgatewaycreate.json").setResponseCode(200));
VirtualNetworkGatewayApi gwapi = api.getVirtualNetworkGatewayApi(resourcegroup);
IpConfigurationProperties ipprops = IpConfigurationProperties.builder(IpAllocationMethod.Dynamic)
.subnet(IdReference.create(SUBNET_ID)).publicIPAddress(IdReference.create(PUBLIC_IP)).build();
IpConfiguration ipconf = IpConfiguration.create(null, name + "-ipconf", null, ipprops);
VirtualNetworkGatewayProperties props = VirtualNetworkGatewayProperties
.builder(false, Vpn, SKU.create(1, SKUName.Basic, SKUTier.Basic)).vpnType(VPNType.PolicyBased)
.ipConfigurations(singletonList(ipconf)).build();
VirtualNetworkGateway gw = gwapi.createOrUpdate(name, "westeurope", null, props);
String path = String.format(
"/subscriptions/%s/resourcegroups/%s/providers/Microsoft.Network/virtualNetworkGateways/%s?%s",
subscriptionid, resourcegroup, name, apiVersion);
String json = "{\"location\":\"westeurope\",\"properties\":{\"enableBgp\":false,\"gatewayType\":\"Vpn\",\"ipConfigurations\":[{\"name\":\"myvirtualgw-ipconf\",\"properties\":{\"privateIPAllocationMethod\":\"Dynamic\",\"publicIPAddress\":{\"id\":\"/subscriptions/SUBSCRIPTIONID/resourceGroups/rg-virtualnetworkgatewayapilivetest-nacx/providers/Microsoft.Network/publicIPAddresses/myvirtualgw-publicip\"},\"subnet\":{\"id\":\"/subscriptions/SUBSCRIPTIONID/resourceGroups/rg-virtualnetworkgatewayapilivetest-nacx/providers/Microsoft.Network/virtualNetworks/myvirtualgw-net/subnets/GatewaySubnet\"}}}],\"sku\":{\"capacity\":1,\"name\":\"Basic\",\"tier\":\"Basic\"},\"vpnType\":\"PolicyBased\"}}";
assertSent(server, "PUT", path, json);
assertEquals(gw.name(), name);
assertNotNull(gw.properties());
assertEquals(gw.properties().gatewayType(), VirtualNetworkGatewayType.Vpn);
}
public void getVirtualNetworkGateway() throws InterruptedException {
server.enqueue(jsonResponse("/virtualnetworkgatewayget.json").setResponseCode(200));
VirtualNetworkGatewayApi gwapi = api.getVirtualNetworkGatewayApi(resourcegroup);
VirtualNetworkGateway gw = gwapi.get(name);
String path = String.format(
"/subscriptions/%s/resourcegroups/%s/providers/Microsoft.Network/virtualNetworkGateways/%s?%s",
subscriptionid, resourcegroup, name, apiVersion);
assertSent(server, "GET", path);
assertEquals(gw.name(), name);
}
public void getVirtualNetworkGatewayReturns404() throws InterruptedException {
server.enqueue(response404());
VirtualNetworkGatewayApi gwapi = api.getVirtualNetworkGatewayApi(resourcegroup);
VirtualNetworkGateway gw = gwapi.get(name);
String path = String.format(
"/subscriptions/%s/resourcegroups/%s/providers/Microsoft.Network/virtualNetworkGateways/%s?%s",
subscriptionid, resourcegroup, name, apiVersion);
assertSent(server, "GET", path);
assertNull(gw);
}
public void listVirtualNetworkGateways() throws InterruptedException {
server.enqueue(jsonResponse("/virtualnetworkgatewaylist.json").setResponseCode(200));
VirtualNetworkGatewayApi gwapi = api.getVirtualNetworkGatewayApi(resourcegroup);
List<VirtualNetworkGateway> gws = gwapi.list();
String path = String.format(
"/subscriptions/%s/resourcegroups/%s/providers/Microsoft.Network/virtualNetworkGateways?%s",
subscriptionid, resourcegroup, apiVersion);
assertSent(server, "GET", path);
assertTrue(gws.size() > 0);
}
public void listVirtualNetworkGatewaysReturns404() throws InterruptedException {
server.enqueue(response404());
VirtualNetworkGatewayApi gwapi = api.getVirtualNetworkGatewayApi(resourcegroup);
List<VirtualNetworkGateway> gws = gwapi.list();
String path = String.format(
"/subscriptions/%s/resourcegroups/%s/providers/Microsoft.Network/virtualNetworkGateways?%s",
subscriptionid, resourcegroup, apiVersion);
assertSent(server, "GET", path);
assertTrue(isEmpty(gws));
}
public void deleteVirtualNetworkGateway() throws InterruptedException {
server.enqueue(response202WithHeader());
VirtualNetworkGatewayApi gwapi = api.getVirtualNetworkGatewayApi(resourcegroup);
URI uri = gwapi.delete(name);
assertNotNull(uri);
String path = String.format(
"/subscriptions/%s/resourcegroups/%s/providers/Microsoft.Network/virtualNetworkGateways/%s?%s",
subscriptionid, resourcegroup, name, apiVersion);
assertSent(server, "DELETE", path);
}
public void deleteVirtualNetworkGatewayDoesNotExist() throws InterruptedException {
server.enqueue(response204());
VirtualNetworkGatewayApi gwapi = api.getVirtualNetworkGatewayApi(resourcegroup);
URI uri = gwapi.delete(name);
assertNull(uri);
String path = String.format(
"/subscriptions/%s/resourcegroups/%s/providers/Microsoft.Network/virtualNetworkGateways/%s?%s",
subscriptionid, resourcegroup, name, apiVersion);
assertSent(server, "DELETE", path);
}
}

View File

@ -17,19 +17,19 @@
package org.jclouds.azurecompute.arm.internal; package org.jclouds.azurecompute.arm.internal;
import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkNotNull;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.TIMEOUT_RESOURCE_DELETED;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.VAULT_CERTIFICATE_DELETE_STATUS;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.VAULT_CERTIFICATE_OPERATION_STATUS;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.VAULT_CERTIFICATE_RECOVERABLE_STATUS;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.VAULT_DELETE_STATUS;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.VAULT_KEY_DELETED_STATUS;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.VAULT_KEY_RECOVERABLE_STATUS;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.VAULT_SECRET_DELETE_STATUS;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.VAULT_SECRET_RECOVERABLE_STATUS;
import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_IMAGE_AVAILABLE; import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_IMAGE_AVAILABLE;
import static org.jclouds.util.Predicates2.retry; import static org.jclouds.util.Predicates2.retry;
import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue; import static org.testng.Assert.assertTrue;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.TIMEOUT_RESOURCE_DELETED;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.VAULT_DELETE_STATUS;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.VAULT_SECRET_DELETE_STATUS;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.VAULT_SECRET_RECOVERABLE_STATUS;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.VAULT_KEY_DELETED_STATUS;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.VAULT_KEY_RECOVERABLE_STATUS;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.VAULT_CERTIFICATE_DELETE_STATUS;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.VAULT_CERTIFICATE_RECOVERABLE_STATUS;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.VAULT_CERTIFICATE_OPERATION_STATUS;
import java.io.IOException; import java.io.IOException;
import java.net.URI; import java.net.URI;
@ -38,21 +38,20 @@ import java.util.List;
import java.util.Properties; import java.util.Properties;
import java.util.Random; import java.util.Random;
import com.google.common.base.Charsets;
import com.google.common.base.Throwables;
import com.google.common.io.Resources;
import org.jclouds.apis.BaseApiLiveTest; import org.jclouds.apis.BaseApiLiveTest;
import org.jclouds.azurecompute.arm.AzureComputeApi; import org.jclouds.azurecompute.arm.AzureComputeApi;
import org.jclouds.azurecompute.arm.config.Tenant; import org.jclouds.azurecompute.arm.compute.config.AzurePredicatesModule.PublicIpAvailablePredicateFactory;
import org.jclouds.azurecompute.arm.compute.config.AzurePredicatesModule.VaultPredicates.DeletedVaultStatusPredicateFactory;
import org.jclouds.azurecompute.arm.compute.config.AzurePredicatesModule.VaultKeyPredicates.DeletedKeyStatusPredicateFactory;
import org.jclouds.azurecompute.arm.compute.config.AzurePredicatesModule.VaultKeyPredicates.RecoverableKeyStatusPredicateFactory;
import org.jclouds.azurecompute.arm.compute.config.AzurePredicatesModule.VaultSecretPredicates.DeletedSecretStatusPredicateFactory;
import org.jclouds.azurecompute.arm.compute.config.AzurePredicatesModule.VaultSecretPredicates.RecoverableSecretStatusPredicateFactory;
import org.jclouds.azurecompute.arm.compute.config.AzurePredicatesModule.VaultCertificatePredicates.CertificateOperationStatusPredicateFactory; import org.jclouds.azurecompute.arm.compute.config.AzurePredicatesModule.VaultCertificatePredicates.CertificateOperationStatusPredicateFactory;
import org.jclouds.azurecompute.arm.compute.config.AzurePredicatesModule.VaultCertificatePredicates.DeletedCertificateStatusPredicateFactory; import org.jclouds.azurecompute.arm.compute.config.AzurePredicatesModule.VaultCertificatePredicates.DeletedCertificateStatusPredicateFactory;
import org.jclouds.azurecompute.arm.compute.config.AzurePredicatesModule.VaultCertificatePredicates.RecoverableCertificateStatusPredicateFactory; import org.jclouds.azurecompute.arm.compute.config.AzurePredicatesModule.VaultCertificatePredicates.RecoverableCertificateStatusPredicateFactory;
import org.jclouds.azurecompute.arm.compute.config.AzurePredicatesModule.PublicIpAvailablePredicateFactory; import org.jclouds.azurecompute.arm.compute.config.AzurePredicatesModule.VaultKeyPredicates.DeletedKeyStatusPredicateFactory;
import org.jclouds.azurecompute.arm.compute.config.AzurePredicatesModule.VaultKeyPredicates.RecoverableKeyStatusPredicateFactory;
import org.jclouds.azurecompute.arm.compute.config.AzurePredicatesModule.VaultPredicates.DeletedVaultStatusPredicateFactory;
import org.jclouds.azurecompute.arm.compute.config.AzurePredicatesModule.VaultSecretPredicates.DeletedSecretStatusPredicateFactory;
import org.jclouds.azurecompute.arm.compute.config.AzurePredicatesModule.VaultSecretPredicates.RecoverableSecretStatusPredicateFactory;
import org.jclouds.azurecompute.arm.compute.config.AzurePredicatesModule.VirtualNetworkGatewayAvailablePredicateFactory;
import org.jclouds.azurecompute.arm.config.Tenant;
import org.jclouds.azurecompute.arm.domain.AddressSpace;
import org.jclouds.azurecompute.arm.domain.NetworkSecurityGroup; import org.jclouds.azurecompute.arm.domain.NetworkSecurityGroup;
import org.jclouds.azurecompute.arm.domain.NetworkSecurityGroupProperties; import org.jclouds.azurecompute.arm.domain.NetworkSecurityGroupProperties;
import org.jclouds.azurecompute.arm.domain.NetworkSecurityRule; import org.jclouds.azurecompute.arm.domain.NetworkSecurityRule;
@ -64,15 +63,18 @@ import org.jclouds.azurecompute.arm.domain.VirtualNetwork;
import org.testng.annotations.AfterClass; import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeClass;
import com.google.common.base.Charsets;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.base.Supplier; import com.google.common.base.Supplier;
import com.google.common.base.Throwables;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.inject.name.Names; import com.google.common.io.Resources;
import com.google.inject.Injector; import com.google.inject.Injector;
import com.google.inject.Module;
import com.google.inject.Key; import com.google.inject.Key;
import com.google.inject.Module;
import com.google.inject.TypeLiteral; import com.google.inject.TypeLiteral;
import com.google.inject.name.Names;
public class BaseAzureComputeApiLiveTest extends BaseApiLiveTest<AzureComputeApi> { public class BaseAzureComputeApiLiveTest extends BaseApiLiveTest<AzureComputeApi> {
@ -84,6 +86,7 @@ public class BaseAzureComputeApiLiveTest extends BaseApiLiveTest<AzureComputeApi
protected Predicate<URI> imageAvailablePredicate; protected Predicate<URI> imageAvailablePredicate;
protected Predicate<URI> resourceDeleted; protected Predicate<URI> resourceDeleted;
protected PublicIpAvailablePredicateFactory publicIpAvailable; protected PublicIpAvailablePredicateFactory publicIpAvailable;
protected VirtualNetworkGatewayAvailablePredicateFactory virtualNetworkGatewayStatus;
protected Predicate<Supplier<Provisionable>> resourceAvailable; protected Predicate<Supplier<Provisionable>> resourceAvailable;
protected DeletedVaultStatusPredicateFactory deletedVaultStatus; protected DeletedVaultStatusPredicateFactory deletedVaultStatus;
protected DeletedKeyStatusPredicateFactory deletedKeyStatus; protected DeletedKeyStatusPredicateFactory deletedKeyStatus;
@ -94,7 +97,6 @@ public class BaseAzureComputeApiLiveTest extends BaseApiLiveTest<AzureComputeApi
protected RecoverableCertificateStatusPredicateFactory recoverableCertificateStatus; protected RecoverableCertificateStatusPredicateFactory recoverableCertificateStatus;
protected CertificateOperationStatusPredicateFactory certificateOperationStatus; protected CertificateOperationStatusPredicateFactory certificateOperationStatus;
protected String resourceGroupName; protected String resourceGroupName;
protected String vaultResourceGroup; protected String vaultResourceGroup;
@ -139,6 +141,7 @@ public class BaseAzureComputeApiLiveTest extends BaseApiLiveTest<AzureComputeApi
resourceDeleted = injector.getInstance(Key.get(new TypeLiteral<Predicate<URI>>() { resourceDeleted = injector.getInstance(Key.get(new TypeLiteral<Predicate<URI>>() {
}, Names.named(TIMEOUT_RESOURCE_DELETED))); }, Names.named(TIMEOUT_RESOURCE_DELETED)));
publicIpAvailable = injector.getInstance(PublicIpAvailablePredicateFactory.class); publicIpAvailable = injector.getInstance(PublicIpAvailablePredicateFactory.class);
virtualNetworkGatewayStatus = injector.getInstance(VirtualNetworkGatewayAvailablePredicateFactory.class);
resourceAvailable = injector.getInstance(Key.get(new TypeLiteral<Predicate<Supplier<Provisionable>>>() { resourceAvailable = injector.getInstance(Key.get(new TypeLiteral<Predicate<Supplier<Provisionable>>>() {
})); }));
deletedVaultStatus = injector.getInstance(Key.get(DeletedVaultStatusPredicateFactory.class, Names.named(VAULT_DELETE_STATUS))); deletedVaultStatus = injector.getInstance(Key.get(DeletedVaultStatusPredicateFactory.class, Names.named(VAULT_DELETE_STATUS)));
@ -172,7 +175,7 @@ public class BaseAzureComputeApiLiveTest extends BaseApiLiveTest<AzureComputeApi
protected VirtualNetwork createDefaultVirtualNetwork(final String resourceGroupName, final String virtualNetworkName, final String virtualnetworkAddressPrefix, final String location) { protected VirtualNetwork createDefaultVirtualNetwork(final String resourceGroupName, final String virtualNetworkName, final String virtualnetworkAddressPrefix, final String location) {
final VirtualNetwork.VirtualNetworkProperties virtualNetworkProperties = final VirtualNetwork.VirtualNetworkProperties virtualNetworkProperties =
VirtualNetwork.VirtualNetworkProperties.create(null, null, VirtualNetwork.VirtualNetworkProperties.create(null, null,
VirtualNetwork.AddressSpace.create(Arrays.asList(virtualnetworkAddressPrefix)), null); AddressSpace.create(Arrays.asList(virtualnetworkAddressPrefix)), null);
VirtualNetwork virtualNetwork = api.getVirtualNetworkApi(resourceGroupName).createOrUpdate(virtualNetworkName, location, null, virtualNetworkProperties); VirtualNetwork virtualNetwork = api.getVirtualNetworkApi(resourceGroupName).createOrUpdate(virtualNetworkName, location, null, virtualNetworkProperties);
retry(new Predicate<String>() { retry(new Predicate<String>() {
@Override @Override

View File

@ -0,0 +1,45 @@
{
"name": "myvirtualgw",
"id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/rg-virtualnetworkgatewayapilivetest-nacx/providers/Microsoft.Network/virtualNetworkGateways/myvirtualgw",
"etag": "W/\"7d15735c-35b4-4e22-a281-d7d54c6fdecf\"",
"type": "Microsoft.Network/virtualNetworkGateways",
"location": "westeurope",
"properties": {
"provisioningState": "Updating",
"resourceGuid": "36998db6-e664-4683-ad8d-9afb2e23b1d8",
"ipConfigurations": [
{
"name": "myvirtualgw-ipconf",
"id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/rg-virtualnetworkgatewayapilivetest-nacx/providers/Microsoft.Network/virtualNetworkGateways/myvirtualgw/ipConfigurations/myvirtualgw-ipconf",
"etag": "W/\"7d15735c-35b4-4e22-a281-d7d54c6fdecf\"",
"properties": {
"provisioningState": "Updating",
"privateIPAllocationMethod": "Dynamic",
"publicIPAddress": {
"id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/rg-virtualnetworkgatewayapilivetest-nacx/providers/Microsoft.Network/publicIPAddresses/myvirtualgw-publicip"
},
"subnet": {
"id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/rg-virtualnetworkgatewayapilivetest-nacx/providers/Microsoft.Network/virtualNetworks/myvirtualgw-net/subnets/GatewaySubnet"
}
}
}
],
"sku": {
"name": "Basic",
"tier": "Basic",
"capacity": 2
},
"gatewayType": "Vpn",
"vpnType": "PolicyBased",
"enableBgp": false,
"activeActive": false,
"vpnClientConfiguration": {
"vpnClientProtocols": [
"SSTP"
],
"vpnClientRootCertificates": [],
"vpnClientRevokedCertificates": [],
"vpnClientIpsecPolicies": []
}
}
}

View File

@ -0,0 +1,37 @@
{
"name": "myvirtualgw",
"id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/rg-virtualnetworkgatewayapilivetest-nacx/providers/Microsoft.Network/virtualNetworkGateways/myvirtualgw",
"etag": "W/\"7d15735c-35b4-4e22-a281-d7d54c6fdecf\"",
"type": "Microsoft.Network/virtualNetworkGateways",
"location": "westeurope",
"properties": {
"provisioningState": "Updating",
"resourceGuid": "36998db6-e664-4683-ad8d-9afb2e23b1d8",
"ipConfigurations": [
{
"name": "myvirtualgw-ipconf",
"id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/rg-virtualnetworkgatewayapilivetest-nacx/providers/Microsoft.Network/virtualNetworkGateways/myvirtualgw/ipConfigurations/myvirtualgw-ipconf",
"etag": "W/\"7d15735c-35b4-4e22-a281-d7d54c6fdecf\"",
"properties": {
"provisioningState": "Updating",
"privateIPAllocationMethod": "Dynamic",
"publicIPAddress": {
"id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/rg-virtualnetworkgatewayapilivetest-nacx/providers/Microsoft.Network/publicIPAddresses/myvirtualgw-publicip"
},
"subnet": {
"id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/rg-virtualnetworkgatewayapilivetest-nacx/providers/Microsoft.Network/virtualNetworks/myvirtualgw-net/subnets/GatewaySubnet"
}
}
}
],
"sku": {
"name": "Basic",
"tier": "Basic",
"capacity": 2
},
"gatewayType": "Vpn",
"vpnType": "PolicyBased",
"enableBgp": false,
"activeActive": false
}
}

View File

@ -0,0 +1,49 @@
{
"value": [
{
"name": "myvirtualgw",
"id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/rg-virtualnetworkgatewayapilivetest-nacx/providers/Microsoft.Network/virtualNetworkGateways/myvirtualgw",
"etag": "W/\"7d15735c-35b4-4e22-a281-d7d54c6fdecf\"",
"type": "Microsoft.Network/virtualNetworkGateways",
"location": "westeurope",
"properties": {
"provisioningState": "Updating",
"resourceGuid": "36998db6-e664-4683-ad8d-9afb2e23b1d8",
"ipConfigurations": [
{
"name": "myvirtualgw-ipconf",
"id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/rg-virtualnetworkgatewayapilivetest-nacx/providers/Microsoft.Network/virtualNetworkGateways/myvirtualgw/ipConfigurations/myvirtualgw-ipconf",
"etag": "W/\"7d15735c-35b4-4e22-a281-d7d54c6fdecf\"",
"properties": {
"provisioningState": "Updating",
"privateIPAllocationMethod": "Dynamic",
"publicIPAddress": {
"id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/rg-virtualnetworkgatewayapilivetest-nacx/providers/Microsoft.Network/publicIPAddresses/myvirtualgw-publicip"
},
"subnet": {
"id": "/subscriptions/SUBSCRIPTIONID/resourceGroups/rg-virtualnetworkgatewayapilivetest-nacx/providers/Microsoft.Network/virtualNetworks/myvirtualgw-net/subnets/GatewaySubnet"
}
}
}
],
"sku": {
"name": "Basic",
"tier": "Basic",
"capacity": 2
},
"gatewayType": "Vpn",
"vpnType": "PolicyBased",
"enableBgp": false,
"activeActive": false,
"vpnClientConfiguration": {
"vpnClientProtocols": [
"SSTP"
],
"vpnClientRootCertificates": [],
"vpnClientRevokedCertificates": [],
"vpnClientIpsecPolicies": []
}
}
}
]
}