You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by sv...@apache.org on 2017/07/04 11:31:52 UTC
[2/3] brooklyn-server git commit: Azure ARM default network fixes
from PR suggestions
Azure ARM default network fixes from PR suggestions
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/a11fd427
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/a11fd427
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/a11fd427
Branch: refs/heads/master
Commit: a11fd427b0ec94748516867194d8531d6966e784
Parents: 3d8675e
Author: graeme.miller <gr...@cloudsoftcorp.com>
Authored: Fri Jun 23 12:53:41 2017 +0100
Committer: graeme.miller <gr...@cloudsoftcorp.com>
Committed: Tue Jul 4 11:34:58 2017 +0100
----------------------------------------------------------------------
.../creator/DefaultAzureArmNetworkCreator.java | 56 ++++++++++-----
.../DefaultAzureArmNetworkCreatorTest.java | 76 +++++++++++++++-----
2 files changed, 96 insertions(+), 36 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/a11fd427/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/networking/creator/DefaultAzureArmNetworkCreator.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/networking/creator/DefaultAzureArmNetworkCreator.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/networking/creator/DefaultAzureArmNetworkCreator.java
index dc87cfc..d08bd03 100644
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/networking/creator/DefaultAzureArmNetworkCreator.java
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/networking/creator/DefaultAzureArmNetworkCreator.java
@@ -26,15 +26,19 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
+import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import org.jclouds.azurecompute.arm.AzureComputeApi;
import org.jclouds.azurecompute.arm.domain.ResourceGroup;
import org.jclouds.azurecompute.arm.domain.Subnet;
import org.jclouds.azurecompute.arm.domain.VirtualNetwork;
+import org.jclouds.azurecompute.arm.features.SubnetApi;
+import org.jclouds.azurecompute.arm.features.VirtualNetworkApi;
import org.jclouds.compute.ComputeService;
import org.apache.brooklyn.config.ConfigKey;
@@ -64,29 +68,36 @@ public class DefaultAzureArmNetworkCreator {
LOG.debug("azure.arm.default.network.enabled is disabled, not creating default network");
return;
}
-
+ String location = config.get(CLOUD_REGION_ID);
+ if(StringUtils.isEmpty(location)) {
+ LOG.debug("No region information, so cannot create a default network");
+ return;
+ }
Map<String, Object> templateOptions = config.get(TEMPLATE_OPTIONS);
+
//Only create a default network if we haven't specified a network name (in template options or config) or ip options
if (config.containsKey(NETWORK_NAME)) {
- LOG.debug("Network config specified when provisioning Azure machine. Not creating default network");
+ LOG.debug("Network config [{}] specified when provisioning Azure machine. Not creating default network", NETWORK_NAME.getName());
return;
}
- if (templateOptions != null && (templateOptions.containsKey(NETWORK_NAME.getName()) || templateOptions.containsKey("ipOptions"))) {
+ if (templateOptions != null && (templateOptions.containsKey("networks") || templateOptions.containsKey("ipOptions"))) {
LOG.debug("Network config specified when provisioning Azure machine. Not creating default network");
return;
}
AzureComputeApi api = computeService.getContext().unwrapApi(AzureComputeApi.class);
- String location = config.get(CLOUD_REGION_ID);
String resourceGroupName = DEFAULT_RESOURCE_GROUP_PREFIX + "-" + location;
String vnetName = DEFAULT_NETWORK_NAME_PREFIX + "-" + location;
String subnetName = DEFAULT_SUBNET_NAME_PREFIX + "-" + location;
+ SubnetApi subnetApi = api.getSubnetApi(resourceGroupName, vnetName);
+ VirtualNetworkApi virtualNetworkApi = api.getVirtualNetworkApi(resourceGroupName);
+
//Check if default already exists
- Subnet preexistingSubnet = api.getSubnetApi(resourceGroupName, vnetName).get(subnetName);
+ Subnet preexistingSubnet = subnetApi.get(subnetName);
if(preexistingSubnet != null){
LOG.info("Using pre-existing default Azure network [{}] and subnet [{}] when provisioning machine",
vnetName, subnetName);
@@ -94,27 +105,34 @@ public class DefaultAzureArmNetworkCreator {
return;
}
+ createResourceGroupIfNeeded(api, resourceGroupName, location);
- LOG.info("Network config not specified when provisioning Azure machine, and default network/subnet does not exists. "
- + "Creating network [{}] and subnet [{}], and updating template options", vnetName, subnetName);
+ Subnet.SubnetProperties subnetProperties = Subnet.SubnetProperties.builder().addressPrefix(DEFAULT_SUBNET_ADDRESS_PREFIX).build();
- createResourceGroupIfNeeded(api, resourceGroupName, location);
+ //Creating network + subnet if network doesn't exist
+ if(virtualNetworkApi.get(vnetName) == null) {
+ LOG.info("Network config not specified when provisioning Azure machine, and default network/subnet does not exists. "
+ + "Creating network [{}] and subnet [{}], and updating template options", vnetName, subnetName);
- //Setup properties for creating subnet/network
- Subnet subnet = Subnet.create(subnetName, null, null,
- Subnet.SubnetProperties.builder().addressPrefix(DEFAULT_SUBNET_ADDRESS_PREFIX).build());
+ Subnet subnet = Subnet.create(subnetName, null, null, subnetProperties);
- VirtualNetwork.VirtualNetworkProperties virtualNetworkProperties = VirtualNetwork.VirtualNetworkProperties
- .builder().addressSpace(VirtualNetwork.AddressSpace.create(Arrays.asList(DEFAULT_VNET_ADDRESS_PREFIX)))
- .subnets(Arrays.asList(subnet)).build();
+ VirtualNetwork.VirtualNetworkProperties virtualNetworkProperties = VirtualNetwork.VirtualNetworkProperties
+ .builder().addressSpace(VirtualNetwork.AddressSpace.create(Arrays.asList(DEFAULT_VNET_ADDRESS_PREFIX)))
+ .subnets(Arrays.asList(subnet)).build();
+ virtualNetworkApi.createOrUpdate(vnetName, location, virtualNetworkProperties);
+ } else {
+ LOG.info("Network config not specified when provisioning Azure machine, and default subnet does not exists. "
+ + "Creating subnet [{}] on network [{}], and updating template options", subnetName, vnetName);
- //Create network
- api.getVirtualNetworkApi(resourceGroupName).createOrUpdate(vnetName, location, virtualNetworkProperties);
+ //Just creating the subnet
+ subnetApi.createOrUpdate(subnetName, subnetProperties);
+ }
+
+ //Get created subnet
Subnet createdSubnet = api.getSubnetApi(resourceGroupName, vnetName).get(subnetName);
//Add config
updateTemplateOptions(config, createdSubnet);
-
}
private static void updateTemplateOptions(ConfigBag config, Subnet createdSubnet){
@@ -126,10 +144,10 @@ public class DefaultAzureArmNetworkCreator {
templateOptions = new HashMap<>();
}
- templateOptions.put("ipOptions", ImmutableMap.of(
+ templateOptions.put("ipOptions", ImmutableList.of(ImmutableMap.of(
"allocateNewPublicIp", true, //jclouds will not provide a public IP unless we set this
"subnet", createdSubnet.id()
- ));
+ )));
config.put(TEMPLATE_OPTIONS, templateOptions);
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/a11fd427/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/networking/creator/DefaultAzureArmNetworkCreatorTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/networking/creator/DefaultAzureArmNetworkCreatorTest.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/networking/creator/DefaultAzureArmNetworkCreatorTest.java
index 86a5778..48d6024 100644
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/networking/creator/DefaultAzureArmNetworkCreatorTest.java
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/networking/creator/DefaultAzureArmNetworkCreatorTest.java
@@ -31,12 +31,14 @@ import static org.mockito.Mockito.when;
import static org.testng.Assert.assertEquals;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import org.apache.brooklyn.util.core.config.ConfigBag;
import org.jclouds.azurecompute.arm.AzureComputeApi;
import org.jclouds.azurecompute.arm.domain.ResourceGroup;
import org.jclouds.azurecompute.arm.domain.Subnet;
+import org.jclouds.azurecompute.arm.domain.VirtualNetwork;
import org.jclouds.azurecompute.arm.features.ResourceGroupApi;
import org.jclouds.azurecompute.arm.features.SubnetApi;
import org.jclouds.azurecompute.arm.features.VirtualNetworkApi;
@@ -58,6 +60,7 @@ public class DefaultAzureArmNetworkCreatorTest {
@Mock ResourceGroupApi resourceGroupApi;
@Mock VirtualNetworkApi virtualNetworkApi;
@Mock SubnetApi subnetApi;
+ @Mock VirtualNetwork virtualNetwork;
@Mock ResourceGroup resourceGroup;
@Mock Subnet subnet;
@@ -89,7 +92,6 @@ public class DefaultAzureArmNetworkCreatorTest {
//Setup mocks
when(subnetApi.get(TEST_SUBNET_NAME)).thenReturn(subnet);
-
//Test
DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptionsIfRequired(computeService, configBag);
@@ -100,7 +102,7 @@ public class DefaultAzureArmNetworkCreatorTest {
//verify templateOptions updated to include defaults
Map<String, Object> templateOptions = configBag.get(TEMPLATE_OPTIONS);
- Map<?, ?> ipOptions = (Map<?, ?>)templateOptions.get("ipOptions");
+ Map<String, Object> ipOptions = (Map<String, Object>) ((List)templateOptions.get("ipOptions")).iterator().next();
assertEquals(ipOptions.get("subnet"), TEST_SUBNET_ID);
assertEquals(ipOptions.get("allocateNewPublicIp"), true);
}
@@ -121,9 +123,9 @@ public class DefaultAzureArmNetworkCreatorTest {
protected ConfigBag runVanilla(Map<?, ?> additionalConfig) throws Exception {
//Setup config bag
ConfigBag configBag = ConfigBag.newInstance();
- configBag.put(CLOUD_REGION_ID, TEST_LOCATION);
configBag.putAll(additionalConfig);
-
+ configBag.put(CLOUD_REGION_ID, TEST_LOCATION);
+
//Setup mocks
when(subnetApi.get(TEST_SUBNET_NAME)).thenReturn(null).thenReturn(subnet); //null first time, subnet next
@@ -144,7 +146,7 @@ public class DefaultAzureArmNetworkCreatorTest {
//verify templateOptions updated to include defaults
Map<String, Object> templateOptions = configBag.get(TEMPLATE_OPTIONS);
- Map<?, ?> ipOptions = (Map<?, ?>)templateOptions.get("ipOptions");
+ Map<String, Object> ipOptions = (Map<String, Object>) ((List)templateOptions.get("ipOptions")).iterator().next();
assertEquals(ipOptions.get("subnet"), TEST_SUBNET_ID);
assertEquals(ipOptions.get("allocateNewPublicIp"), true);
@@ -156,10 +158,9 @@ public class DefaultAzureArmNetworkCreatorTest {
//Setup config bag
ConfigBag configBag = ConfigBag.newInstance();
configBag.put(CLOUD_REGION_ID, TEST_LOCATION);
-
+
//Setup mocks
when(subnetApi.get(TEST_SUBNET_NAME)).thenReturn(null).thenReturn(subnet); //null first time, subnet next
-
when(resourceGroupApi.get(TEST_RESOURCE_GROUP)).thenReturn(resourceGroup);
@@ -177,7 +178,41 @@ public class DefaultAzureArmNetworkCreatorTest {
//verify templateOptions updated to include defaults
Map<String, Object> templateOptions = configBag.get(TEMPLATE_OPTIONS);
- Map<?, ?> ipOptions = (Map<?, ?>)templateOptions.get("ipOptions");
+ Map<String, Object> ipOptions = (Map<String, Object>) ((List)templateOptions.get("ipOptions")).iterator().next();
+ assertEquals(ipOptions.get("subnet"), TEST_SUBNET_ID);
+ assertEquals(ipOptions.get("allocateNewPublicIp"), true);
+ }
+
+
+
+ @Test
+ public void testVanillaWhereExistingNetworkButNoSubnet() throws Exception {
+ //Setup config bag
+ ConfigBag configBag = ConfigBag.newInstance();
+ configBag.put(CLOUD_REGION_ID, TEST_LOCATION);
+
+ //Setup mocks
+ when(subnetApi.get(TEST_SUBNET_NAME)).thenReturn(null).thenReturn(subnet); //null first time, subnet next
+ when(virtualNetworkApi.get(TEST_NETWORK_NAME)).thenReturn(virtualNetwork);
+ when(resourceGroupApi.get(TEST_RESOURCE_GROUP)).thenReturn(resourceGroup);
+
+
+ //Test
+ DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptionsIfRequired(computeService, configBag);
+
+ //verify
+ verify(subnetApi, times(2)).get(TEST_SUBNET_NAME);
+ verify(subnetApi).createOrUpdate(eq(TEST_SUBNET_NAME), any());
+ verify(subnet).id();
+
+ verify(resourceGroupApi).get(TEST_RESOURCE_GROUP);
+ verify(resourceGroupApi, never()).create(any(), any(), any());
+
+ verify(virtualNetworkApi, never()).createOrUpdate(any(), any(), any());
+
+ //verify templateOptions updated to include defaults
+ Map<String, Object> templateOptions = configBag.get(TEMPLATE_OPTIONS);
+ Map<String, Object> ipOptions = (Map<String, Object>) ((List)templateOptions.get("ipOptions")).iterator().next();
assertEquals(ipOptions.get("subnet"), TEST_SUBNET_ID);
assertEquals(ipOptions.get("allocateNewPublicIp"), true);
}
@@ -188,19 +223,19 @@ public class DefaultAzureArmNetworkCreatorTest {
configBag.put(CLOUD_REGION_ID, TEST_LOCATION);
configBag.put(NETWORK_NAME, TEST_NETWORK_NAME);
- runAssertingNoIteractions(configBag);
+ runAssertingNoInteractions(configBag);
}
@Test
public void testNetworkInTemplate() throws Exception {
HashMap<String, Object> templateOptions = new HashMap<>();
- templateOptions.put(NETWORK_NAME.getName(), TEST_NETWORK_NAME);
+ templateOptions.put("networks", TEST_NETWORK_NAME);
ConfigBag configBag = ConfigBag.newInstance();
- configBag.put(CLOUD_REGION_ID, TEST_LOCATION);
configBag.put(TEMPLATE_OPTIONS, templateOptions);
+ configBag.put(CLOUD_REGION_ID, TEST_LOCATION);
- runAssertingNoIteractions(configBag);
+ runAssertingNoInteractions(configBag);
}
@Test
@@ -209,22 +244,29 @@ public class DefaultAzureArmNetworkCreatorTest {
templateOptions.put("ipOptions", TEST_NETWORK_NAME);
ConfigBag configBag = ConfigBag.newInstance();
- configBag.put(CLOUD_REGION_ID, TEST_LOCATION);
configBag.put(TEMPLATE_OPTIONS, templateOptions);
+ configBag.put(CLOUD_REGION_ID, TEST_LOCATION);
- runAssertingNoIteractions(configBag);
+ runAssertingNoInteractions(configBag);
}
@Test
public void testConfigDisabled() throws Exception {
ConfigBag configBag = ConfigBag.newInstance();
- configBag.put(CLOUD_REGION_ID, TEST_LOCATION);
configBag.put(AZURE_ARM_DEFAULT_NETWORK_ENABLED, false);
+ configBag.put(CLOUD_REGION_ID, TEST_LOCATION);
+
+ runAssertingNoInteractions(configBag);
+ }
+
+ @Test
+ public void testNoRegion() throws Exception {
+ ConfigBag configBag = ConfigBag.newInstance();
- runAssertingNoIteractions(configBag);
+ runAssertingNoInteractions(configBag);
}
- protected void runAssertingNoIteractions(ConfigBag configBag) throws Exception {
+ protected void runAssertingNoInteractions(ConfigBag configBag) throws Exception {
Map<String, Object> configCopy = configBag.getAllConfig();
DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptionsIfRequired(computeService, configBag);