Skip to content

Instantly share code, notes, and snippets.

@nacx
Last active September 20, 2016 10:28
Show Gist options
  • Save nacx/3d16f26e3db8a329dd5f737e80b46f74 to your computer and use it in GitHub Desktop.
Save nacx/3d16f26e3db8a329dd5f737e80b46f74 to your computer and use it in GitHub Desktop.
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java
index 460df67..5c5a6ae 100644
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java
+++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureComputeProviderMetadata.java
@@ -17,31 +17,30 @@
package org.jclouds.azurecompute.arm;
+import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.DEFAULT_DATADISKSIZE;
+import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.DEFAULT_IMAGE_LOGIN;
+import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.DEFAULT_SUBNET_ADDRESS_PREFIX;
+import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.DEFAULT_VNET_ADDRESS_SPACE_PREFIX;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.IMAGE_PUBLISHERS;
-import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.RESOURCE_GROUP_NAME;
-import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.OPERATION_TIMEOUT;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.OPERATION_POLL_INITIAL_PERIOD;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.OPERATION_POLL_MAX_PERIOD;
+import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.OPERATION_TIMEOUT;
+import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.RESOURCE_GROUP_NAME;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.TCP_RULE_FORMAT;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.TCP_RULE_REGEXP;
-import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.DEFAULT_VNET_ADDRESS_SPACE_PREFIX;
-import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.DEFAULT_SUBNET_ADDRESS_PREFIX;
-import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.DEFAULT_DATADISKSIZE;
-
-import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.DEFAULT_IMAGE_LOGIN;
-
+import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_TERMINATED;
+import static org.jclouds.location.reference.LocationConstants.PROPERTY_REGIONS;
import static org.jclouds.oauth.v2.config.CredentialType.CLIENT_CREDENTIALS_SECRET;
-import static org.jclouds.oauth.v2.config.OAuthProperties.RESOURCE;
import static org.jclouds.oauth.v2.config.OAuthProperties.CREDENTIAL_TYPE;
+import static org.jclouds.oauth.v2.config.OAuthProperties.RESOURCE;
import java.net.URI;
import java.util.Properties;
+
import org.jclouds.azurecompute.arm.domain.Region;
+import org.jclouds.compute.config.ComputeServiceProperties;
import org.jclouds.providers.ProviderMetadata;
import org.jclouds.providers.internal.BaseProviderMetadata;
-import org.jclouds.compute.config.ComputeServiceProperties;
-
-import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_TERMINATED;
import com.google.auto.service.AutoService;
@@ -79,6 +78,7 @@ public class AzureComputeProviderMetadata extends BaseProviderMetadata {
properties.put(IMAGE_PUBLISHERS, "Canonical,RedHat");
properties.put(DEFAULT_IMAGE_LOGIN, "jclouds:Password1!");
properties.put(TIMEOUT_NODE_TERMINATED, 60 * 10 * 1000);
+ properties.put(PROPERTY_REGIONS, Region.locationIds());
return properties;
}
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java
index 82b792c..9d8c006 100644
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java
+++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceAdapter.java
@@ -16,6 +16,12 @@
*/
package org.jclouds.azurecompute.arm.compute;
+import static com.google.common.base.Preconditions.checkState;
+import static java.lang.String.format;
+import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.jclouds.location.reference.LocationConstants.PROPERTY_REGIONS;
+import static org.jclouds.util.Predicates2.retry;
+
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -34,32 +40,30 @@ import org.jclouds.azurecompute.arm.compute.functions.VMImageToImage;
import org.jclouds.azurecompute.arm.domain.Deployment;
import org.jclouds.azurecompute.arm.domain.DeploymentBody;
import org.jclouds.azurecompute.arm.domain.DeploymentProperties;
-import org.jclouds.azurecompute.arm.domain.NetworkInterfaceCard;
-import org.jclouds.azurecompute.arm.domain.ResourceProviderMetaData;
-import org.jclouds.azurecompute.arm.domain.StorageService;
-import org.jclouds.azurecompute.arm.domain.VMImage;
-import org.jclouds.azurecompute.arm.domain.VMHardware;
import org.jclouds.azurecompute.arm.domain.Location;
+import org.jclouds.azurecompute.arm.domain.NetworkInterfaceCard;
import org.jclouds.azurecompute.arm.domain.Offer;
import org.jclouds.azurecompute.arm.domain.PublicIPAddress;
+import org.jclouds.azurecompute.arm.domain.ResourceProviderMetaData;
import org.jclouds.azurecompute.arm.domain.SKU;
+import org.jclouds.azurecompute.arm.domain.StorageService;
import org.jclouds.azurecompute.arm.domain.VMDeployment;
+import org.jclouds.azurecompute.arm.domain.VMHardware;
+import org.jclouds.azurecompute.arm.domain.VMImage;
import org.jclouds.azurecompute.arm.domain.VMSize;
import org.jclouds.azurecompute.arm.domain.Version;
import org.jclouds.azurecompute.arm.domain.VirtualMachine;
import org.jclouds.azurecompute.arm.domain.VirtualMachineInstance;
import org.jclouds.azurecompute.arm.features.DeploymentApi;
import org.jclouds.azurecompute.arm.features.OSImageApi;
-import org.jclouds.azurecompute.arm.util.BlobHelper;
import org.jclouds.azurecompute.arm.functions.CleanupResources;
+import org.jclouds.azurecompute.arm.util.BlobHelper;
import org.jclouds.azurecompute.arm.util.DeploymentTemplateBuilder;
import org.jclouds.compute.ComputeServiceAdapter;
import org.jclouds.compute.domain.Template;
import org.jclouds.compute.reference.ComputeServiceConstants;
import org.jclouds.domain.LoginCredentials;
-import org.jclouds.location.reference.LocationConstants;
import org.jclouds.logging.Logger;
-import org.jclouds.providers.ProviderMetadata;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
@@ -72,11 +76,6 @@ import com.google.common.collect.Multimap;
import com.google.common.collect.Sets;
import com.google.common.net.UrlEscapers;
-import static com.google.common.base.Preconditions.checkState;
-import static java.lang.String.format;
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.jclouds.util.Predicates2.retry;
-
/**
* Defines the connection between the {@link AzureComputeApi} implementation and the jclouds
* {@link org.jclouds.compute.ComputeService}.
@@ -95,11 +94,11 @@ public class AzureComputeServiceAdapter implements ComputeServiceAdapter<VMDeplo
private final AzureComputeConstants azureComputeConstants;
- private final ProviderMetadata providerMetadata;
+ private final List<String> whitelistedRegions;
@Inject
AzureComputeServiceAdapter(final AzureComputeApi api, final AzureComputeConstants azureComputeConstants,
- CleanupResources cleanupResources, ProviderMetadata providerMetadata) {
+ CleanupResources cleanupResources, @Named(PROPERTY_REGIONS) String regions) {
this.api = api;
this.azureComputeConstants = azureComputeConstants;
@@ -108,7 +107,7 @@ public class AzureComputeServiceAdapter implements ComputeServiceAdapter<VMDeplo
logger.debug("AzureComputeServiceAdapter set azuregroup to: " + azureGroup);
this.cleanupResources = cleanupResources;
- this.providerMetadata = providerMetadata;
+ this.whitelistedRegions = Splitter.on(',').trimResults().omitEmptyStrings().splitToList(regions);
}
@Override
@@ -288,8 +287,6 @@ public class AzureComputeServiceAdapter implements ComputeServiceAdapter<VMDeplo
@Override
public Iterable<Location> listLocations() {
- final Iterable<String> whiteListZoneName = findWhiteListOfRegions();
-
final Iterable<String> vmLocations = FluentIterable.from(api.getResourceProviderApi().get("Microsoft.Compute"))
.filter(new Predicate<ResourceProviderMetaData>() {
@Override
@@ -314,7 +311,7 @@ public class AzureComputeServiceAdapter implements ComputeServiceAdapter<VMDeplo
.filter(new Predicate<Location>() {
@Override
public boolean apply(Location location) {
- return whiteListZoneName == null ? true : Iterables.contains(whiteListZoneName, location.name());
+ return whitelistedRegions.isEmpty() ? true : Iterables.contains(whitelistedRegions, location.name());
}
})
.toList();
@@ -322,11 +319,6 @@ public class AzureComputeServiceAdapter implements ComputeServiceAdapter<VMDeplo
return locations;
}
- private Iterable<String> findWhiteListOfRegions() {
- if (providerMetadata.getDefaultProperties().get(LocationConstants.PROPERTY_REGIONS) == null) return null;
- return Splitter.on(",").trimResults().split((CharSequence) providerMetadata.getDefaultProperties().get(LocationConstants.PROPERTY_REGIONS));
- }
-
private String getResourceGroupFromId(String id) {
String searchStr = "/resourceGroups/";
int indexStart = id.lastIndexOf(searchStr) + searchStr.length();
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/config/AzureComputeHttpApiModule.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/config/AzureComputeHttpApiModule.java
index ab37962..014cde5 100644
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/config/AzureComputeHttpApiModule.java
+++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/config/AzureComputeHttpApiModule.java
@@ -51,9 +51,9 @@ public class AzureComputeHttpApiModule extends HttpApiModule<AzureComputeApi> {
@Override
protected void configure() {
+ super.configure();
install(new AzureComputeParserModule());
install(new FactoryModuleBuilder().build(DeploymentTemplateBuilder.Factory.class));
- super.configure();
bind(OAuthScopes.class).toInstance(OAuthScopes.NoScopes.create());
}
}
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Region.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Region.java
index a4453f5..8df80b3 100644
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Region.java
+++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/domain/Region.java
@@ -19,6 +19,7 @@ package org.jclouds.azurecompute.arm.domain;
import java.util.Arrays;
import java.util.Set;
+import com.google.common.base.CaseFormat;
import com.google.common.base.Function;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableSet;
@@ -72,6 +73,10 @@ public enum Region {
public String iso3166Code() {
return iso3166Code;
}
+
+ public String locationId() {
+ return name.replaceAll("\\s", "").toLowerCase();
+ }
public static Region byName(final String name) {
Preconditions.checkNotNull(name);
@@ -93,5 +98,15 @@ public enum Region {
}
}));
}
+
+ public static Set<String> locationIds() {
+ return ImmutableSet.copyOf(Iterables.transform(Arrays.asList(values()), new Function<Region, String>() {
+
+ @Override
+ public String apply(final Region region) {
+ return region.locationId();
+ }
+ }));
+ }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment