You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by dr...@apache.org on 2017/06/22 09:08:25 UTC

[1/4] brooklyn-server git commit: A default network is now created when deploying to Azure ARM

Repository: brooklyn-server
Updated Branches:
  refs/heads/master 9ebc32c10 -> b1fc16d02


A default network is now created when deploying to Azure ARM


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/44470854
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/44470854
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/44470854

Branch: refs/heads/master
Commit: 44470854f19224fd3c62fb912db7951af0b38c3f
Parents: 0b9717a
Author: graeme.miller <gr...@cloudsoftcorp.com>
Authored: Tue Jun 20 15:59:04 2017 +0100
Committer: graeme.miller <gr...@cloudsoftcorp.com>
Committed: Wed Jun 21 11:44:04 2017 +0100

----------------------------------------------------------------------
 .../location/jclouds/JcloudsLocation.java       |   6 +
 .../creator/DefaultAzureArmNetworkCreator.java  | 129 +++++++++++++
 .../DefaultAzureArmNetworkCreatorTest.java      | 181 +++++++++++++++++++
 3 files changed, 316 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/44470854/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
index a701083..2409727 100644
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
@@ -80,6 +80,7 @@ import org.apache.brooklyn.core.mgmt.persist.PersistenceObjectStore;
 import org.apache.brooklyn.core.mgmt.persist.jclouds.JcloudsBlobStoreBasedObjectStore;
 import org.apache.brooklyn.location.jclouds.api.JcloudsLocationPublic;
 import org.apache.brooklyn.location.jclouds.networking.JcloudsPortForwarderExtension;
+import org.apache.brooklyn.location.jclouds.networking.creator.DefaultAzureArmNetworkCreator;
 import org.apache.brooklyn.location.jclouds.templates.PortableTemplateBuilder;
 import org.apache.brooklyn.location.jclouds.templates.customize.TemplateBuilderCustomizer;
 import org.apache.brooklyn.location.jclouds.templates.customize.TemplateBuilderCustomizers;
@@ -667,6 +668,11 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
             Template template;
 
             try {
+                // Create default network for Azure ARM if necessary
+                if ("azurecompute-arm".equals(this.getProvider())) {
+                    DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptions(computeService, setup);
+                }
+
                 // Setup the template
                 template = buildTemplate(computeService, setup, ImmutableList.of(customizersDelegate));
                 boolean expectWindows = isWindows(template, setup);

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/44470854/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
new file mode 100644
index 0000000..f12d929
--- /dev/null
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/networking/creator/DefaultAzureArmNetworkCreator.java
@@ -0,0 +1,129 @@
+/*
+ * 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.apache.brooklyn.location.jclouds.networking.creator;
+
+import static org.apache.brooklyn.core.location.cloud.CloudLocationConfig.CLOUD_REGION_ID;
+import static org.apache.brooklyn.location.jclouds.api.JcloudsLocationConfigPublic.NETWORK_NAME;
+import static org.apache.brooklyn.location.jclouds.api.JcloudsLocationConfigPublic.TEMPLATE_OPTIONS;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+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.compute.ComputeService;
+
+import org.apache.brooklyn.util.core.config.ConfigBag;
+
+public class DefaultAzureArmNetworkCreator {
+
+    public static final Logger LOG = LoggerFactory.getLogger(DefaultAzureArmNetworkCreator.class);
+
+    private static final String DEFAULT_RESOURCE_GROUP = "brooklyn-default-resource-group";
+    private static final String DEFAULT_NETWORK_NAME = "brooklyn-default-network";
+    private static final String DEFAULT_SUBNET_NAME = "brooklyn-default-subnet";
+
+    private static final String defaultVnetAddressPrefix = "10.1.0.0/16";
+    private static final String defaultSubnetAddressPrefix = "10.1.0.0/24";
+
+    public static void createDefaultNetworkAndAddToTemplateOptions(ComputeService computeService, ConfigBag config) {
+        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.info("Network config specified when creating Azure location. Not creating default network");
+            return;
+        }
+        if (templateOptions != null && (templateOptions.containsKey(NETWORK_NAME.getName()) || templateOptions.containsKey("ipOptions"))) {
+            LOG.info("Network config specified when creating Azure location. Not creating default network");
+            return;
+        }
+
+        LOG.info("Network config not specified when creating Azure location. Creating default network if doesn't exist");
+
+        AzureComputeApi api = computeService.getContext().unwrapApi(AzureComputeApi.class);
+        String location = config.get(CLOUD_REGION_ID);
+
+        String resourceGroupName = DEFAULT_RESOURCE_GROUP  + "-" + location;
+        String vnetName = DEFAULT_NETWORK_NAME + "-" + location;
+        String subnetName = DEFAULT_SUBNET_NAME + "-" + location;
+
+        //Check if default already exists
+        Subnet preexistingSubnet = api.getSubnetApi(resourceGroupName, vnetName).get(subnetName);
+        if(preexistingSubnet != null){
+            LOG.info("Default Azure network and subnet already created, "+vnetName);
+            updateTemplateOptions(config, preexistingSubnet);
+            return;
+        }
+
+
+        LOG.info("Network config not specified when creating Azure location and default network/subnet does not exists. Creating");
+
+        createResourceGroupIfNeeded(api, resourceGroupName, location);
+
+        //Setup properties for creating subnet/network
+        Subnet subnet = Subnet.create(subnetName, null, null,
+                Subnet.SubnetProperties.builder().addressPrefix(defaultSubnetAddressPrefix).build());
+
+        VirtualNetwork.VirtualNetworkProperties virtualNetworkProperties = VirtualNetwork.VirtualNetworkProperties
+                .builder().addressSpace(VirtualNetwork.AddressSpace.create(Arrays.asList(defaultVnetAddressPrefix)))
+                .subnets(Arrays.asList(subnet)).build();
+
+        //Create network
+        api.getVirtualNetworkApi(resourceGroupName).createOrUpdate(vnetName, location, virtualNetworkProperties);
+        Subnet createdSubnet = api.getSubnetApi(resourceGroupName, vnetName).get(subnetName);
+
+        //Add config
+        updateTemplateOptions(config, createdSubnet);
+
+    }
+
+    private static void updateTemplateOptions(ConfigBag config, Subnet createdSubnet){
+        Map<String, Object> templateOptions = config.get(TEMPLATE_OPTIONS);
+
+        if(templateOptions == null) {
+            templateOptions = new HashMap<>();
+            config.put(TEMPLATE_OPTIONS, templateOptions);
+        }
+
+        Map<String, Object> ipOptions = new HashMap<>();
+        ipOptions.put("allocateNewPublicIp", true); //JClouds will not provide a public IP unless we set this
+        ipOptions.put("subnet", createdSubnet.id());
+        templateOptions.put("ipOptions", ipOptions);
+    }
+
+
+    private static void createResourceGroupIfNeeded(AzureComputeApi api, String resourceGroup, String location) {
+        LOG.debug("using resource group [%s]", resourceGroup);
+        ResourceGroup rg = api.getResourceGroupApi().get(resourceGroup);
+        if (rg == null) {
+            LOG.debug("resource group [%s] does not exist. Creating!", resourceGroup);
+            api.getResourceGroupApi().create(resourceGroup, location,
+                    ImmutableMap.of("description", "brooklyn default resource group"));
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/44470854/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
new file mode 100644
index 0000000..2dd6a5d
--- /dev/null
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/networking/creator/DefaultAzureArmNetworkCreatorTest.java
@@ -0,0 +1,181 @@
+/*
+ * 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.apache.brooklyn.location.jclouds.networking.creator;
+
+import static org.apache.brooklyn.core.location.cloud.CloudLocationConfig.CLOUD_REGION_ID;
+import static org.apache.brooklyn.location.jclouds.api.JcloudsLocationConfigPublic.NETWORK_NAME;
+import static org.apache.brooklyn.location.jclouds.api.JcloudsLocationConfigPublic.TEMPLATE_OPTIONS;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import static org.testng.Assert.assertEquals;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import org.jclouds.azurecompute.arm.AzureComputeApi;
+import org.jclouds.azurecompute.arm.domain.Subnet;
+import org.jclouds.azurecompute.arm.features.ResourceGroupApi;
+import org.jclouds.azurecompute.arm.features.SubnetApi;
+import org.jclouds.azurecompute.arm.features.VirtualNetworkApi;
+import org.jclouds.compute.ComputeService;
+
+import org.apache.brooklyn.util.core.config.ConfigBag;
+
+public class DefaultAzureArmNetworkCreatorTest {
+
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS) ComputeService computeService;
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS) AzureComputeApi azureComputeApi;
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS) ResourceGroupApi resourceGroupApi;
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS) VirtualNetworkApi virtualNetworkApi;
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS) SubnetApi subnetApi;
+
+    @Mock Subnet subnet;
+
+    final String TEST_RESOURCE_GROUP = "brooklyn-default-resource-group-test-loc";
+    final String TEST_NETWORK_NAME = "brooklyn-default-network-test-loc";
+    final String TEST_SUBNET_NAME = "brooklyn-default-subnet-test-loc";
+    final String TEST_SUBNET_ID = "/test/resource/id";
+    final String TEST_LOCATION = "test-loc";
+
+    @BeforeMethod
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+    }
+
+    @Test
+    public void testPreExisting() {
+        //Setup config bag
+        ConfigBag configBag = ConfigBag.newInstance();
+        configBag.put(CLOUD_REGION_ID, TEST_LOCATION);
+
+        //Setup mocks
+        when(computeService.getContext().unwrapApi(AzureComputeApi.class)).thenReturn(azureComputeApi);
+        when(azureComputeApi.getSubnetApi(TEST_RESOURCE_GROUP, TEST_NETWORK_NAME)).thenReturn(subnetApi);
+        when(subnetApi.get(TEST_SUBNET_NAME)).thenReturn(subnet);
+        when(subnet.id()).thenReturn(TEST_SUBNET_ID);
+
+        //Test
+        DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptions(computeService, configBag);
+
+        //verify
+        verify(subnetApi).get(TEST_SUBNET_NAME);
+        verify(subnet).id();
+        verify(azureComputeApi).getSubnetApi(TEST_RESOURCE_GROUP, TEST_NETWORK_NAME);
+
+        Map<String, Object> templateOptions = configBag.get(TEMPLATE_OPTIONS);
+        Map<String, Object> ipOptions = (Map<String, Object>)templateOptions.get("ipOptions");
+        assertEquals(ipOptions.get("subnet"), TEST_SUBNET_ID);
+        assertEquals(ipOptions.get("allocateNewPublicIp"), true);
+    }
+
+    @Test
+    public void testVanilla() {
+        //Setup config bag
+        ConfigBag configBag = ConfigBag.newInstance();
+        configBag.put(CLOUD_REGION_ID, TEST_LOCATION);
+
+        //Setup mocks
+        when(computeService.getContext().unwrapApi(AzureComputeApi.class)).thenReturn(azureComputeApi);
+        when(azureComputeApi.getSubnetApi(TEST_RESOURCE_GROUP, TEST_NETWORK_NAME)).thenReturn(subnetApi);
+        when(subnetApi.get(TEST_SUBNET_NAME)).thenReturn(null).thenReturn(subnet); //null first time, subnet next
+        when(subnet.id()).thenReturn(TEST_SUBNET_ID);
+
+        when(azureComputeApi.getResourceGroupApi()).thenReturn(resourceGroupApi);
+        when(resourceGroupApi.get(TEST_RESOURCE_GROUP)).thenReturn(null);
+
+        when(azureComputeApi.getVirtualNetworkApi(TEST_RESOURCE_GROUP)).thenReturn(virtualNetworkApi);
+
+
+        //Test
+        DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptions(computeService, configBag);
+
+        //verify
+        verify(subnetApi, times(2)).get(TEST_SUBNET_NAME);
+        verify(subnet).id();
+        verify(azureComputeApi, times(2)).getSubnetApi(TEST_RESOURCE_GROUP, TEST_NETWORK_NAME);
+
+        verify(azureComputeApi, times(2)).getResourceGroupApi();
+        verify(resourceGroupApi).get(TEST_RESOURCE_GROUP);
+        verify(azureComputeApi).getVirtualNetworkApi(TEST_RESOURCE_GROUP);
+
+        Map<String, Object> templateOptions = configBag.get(TEMPLATE_OPTIONS);
+        Map<String, Object> ipOptions = (Map<String, Object>)templateOptions.get("ipOptions");
+        assertEquals(ipOptions.get("subnet"), TEST_SUBNET_ID);
+        assertEquals(ipOptions.get("allocateNewPublicIp"), true);
+    }
+
+    @Test
+    public void testNetworkInConfig() {
+        ConfigBag configBag = ConfigBag.newInstance();
+        configBag.put(CLOUD_REGION_ID, TEST_LOCATION);
+        configBag.put(NETWORK_NAME, TEST_NETWORK_NAME);
+
+        Map<String, Object> configCopy = configBag.getAllConfig();
+
+        DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptions(computeService, configBag);
+
+        //Ensure nothing changed, and no calls were made to the compute service
+        assertEquals(configCopy, configBag.getAllConfig());
+        Mockito.verifyZeroInteractions(computeService);
+    }
+
+    @Test
+    public void testNetworkInTemplate() {
+        HashMap<String, Object> templateOptions = new HashMap<>();
+        templateOptions.put(NETWORK_NAME.getName(), TEST_NETWORK_NAME);
+
+        ConfigBag configBag = ConfigBag.newInstance();
+        configBag.put(CLOUD_REGION_ID, TEST_LOCATION);
+        configBag.put(TEMPLATE_OPTIONS, templateOptions);
+
+        Map<String, Object> configCopy = configBag.getAllConfig();
+
+        DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptions(computeService, configBag);
+
+        //Ensure nothing changed, and no calls were made to the compute service
+        assertEquals(configCopy, configBag.getAllConfig());
+        Mockito.verifyZeroInteractions(computeService);
+    }
+
+    @Test
+    public void testIpOptionsInTemplate() {
+        HashMap<String, Object> templateOptions = new HashMap<>();
+        templateOptions.put("ipOptions", TEST_NETWORK_NAME);
+
+        ConfigBag configBag = ConfigBag.newInstance();
+        configBag.put(CLOUD_REGION_ID, TEST_LOCATION);
+        configBag.put(TEMPLATE_OPTIONS, templateOptions);
+
+        Map<String, Object> configCopy = configBag.getAllConfig();
+
+        DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptions(computeService, configBag);
+
+        //Ensure nothing changed, and no calls were made to the compute service
+        assertEquals(configCopy, configBag.getAllConfig());
+        Mockito.verifyZeroInteractions(computeService);
+    }
+}


[3/4] brooklyn-server git commit: added a new test for default azure arm network

Posted by dr...@apache.org.
added a new test for default azure arm network


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/ab17a2af
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/ab17a2af
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/ab17a2af

Branch: refs/heads/master
Commit: ab17a2af78941efe0d6564782e78a8671c8683f1
Parents: 72d8233
Author: graeme.miller <gr...@cloudsoftcorp.com>
Authored: Wed Jun 21 15:02:43 2017 +0100
Committer: graeme.miller <gr...@cloudsoftcorp.com>
Committed: Wed Jun 21 15:02:43 2017 +0100

----------------------------------------------------------------------
 .../DefaultAzureArmNetworkCreatorTest.java      | 41 ++++++++++++++++++++
 1 file changed, 41 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/ab17a2af/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 a2c4fc6..832776e 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
@@ -37,6 +37,8 @@ import org.mockito.MockitoAnnotations;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
+import com.google.common.collect.ImmutableMap;
+
 import org.jclouds.azurecompute.arm.AzureComputeApi;
 import org.jclouds.azurecompute.arm.domain.Subnet;
 import org.jclouds.azurecompute.arm.features.ResourceGroupApi;
@@ -130,6 +132,45 @@ public class DefaultAzureArmNetworkCreatorTest {
     }
 
     @Test
+    public void testVanillaWhereTemplateOptionsAlreadySpecified() {
+        //Setup config bag
+        ConfigBag configBag = ConfigBag.newInstance();
+        configBag.put(CLOUD_REGION_ID, TEST_LOCATION);
+        configBag.put(TEMPLATE_OPTIONS, ImmutableMap.of("unrelated-key", "unrelated-value"));
+
+        //Setup mocks
+        when(computeService.getContext().unwrapApi(AzureComputeApi.class)).thenReturn(azureComputeApi);
+        when(azureComputeApi.getSubnetApi(TEST_RESOURCE_GROUP, TEST_NETWORK_NAME)).thenReturn(subnetApi);
+        when(subnetApi.get(TEST_SUBNET_NAME)).thenReturn(null).thenReturn(subnet); //null first time, subnet next
+        when(subnet.id()).thenReturn(TEST_SUBNET_ID);
+
+        when(azureComputeApi.getResourceGroupApi()).thenReturn(resourceGroupApi);
+        when(resourceGroupApi.get(TEST_RESOURCE_GROUP)).thenReturn(null);
+
+        when(azureComputeApi.getVirtualNetworkApi(TEST_RESOURCE_GROUP)).thenReturn(virtualNetworkApi);
+
+
+        //Test
+        DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptionsIfRequired(computeService, configBag);
+
+        //verify
+        verify(subnetApi, times(2)).get(TEST_SUBNET_NAME);
+        verify(subnet).id();
+        verify(azureComputeApi, times(2)).getSubnetApi(TEST_RESOURCE_GROUP, TEST_NETWORK_NAME);
+
+        verify(azureComputeApi, times(2)).getResourceGroupApi();
+        verify(resourceGroupApi).get(TEST_RESOURCE_GROUP);
+        verify(azureComputeApi).getVirtualNetworkApi(TEST_RESOURCE_GROUP);
+
+        Map<String, Object> templateOptions = configBag.get(TEMPLATE_OPTIONS);
+        assertEquals(templateOptions.get("unrelated-key"), "unrelated-value");
+
+        Map<String, Object> ipOptions = (Map<String, Object>)templateOptions.get("ipOptions");
+        assertEquals(ipOptions.get("subnet"), TEST_SUBNET_ID);
+        assertEquals(ipOptions.get("allocateNewPublicIp"), true);
+    }
+
+    @Test
     public void testNetworkInConfig() {
         ConfigBag configBag = ConfigBag.newInstance();
         configBag.put(CLOUD_REGION_ID, TEST_LOCATION);


[2/4] brooklyn-server git commit: Minor tweaks for PR comments

Posted by dr...@apache.org.
Minor tweaks for PR comments


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/72d82330
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/72d82330
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/72d82330

Branch: refs/heads/master
Commit: 72d823308c71aa71ce1f4260db4adb9430d6b04b
Parents: 4447085
Author: graeme.miller <gr...@cloudsoftcorp.com>
Authored: Wed Jun 21 14:55:47 2017 +0100
Committer: graeme.miller <gr...@cloudsoftcorp.com>
Committed: Wed Jun 21 14:55:47 2017 +0100

----------------------------------------------------------------------
 .../location/jclouds/JcloudsLocation.java       |  2 +-
 .../creator/DefaultAzureArmNetworkCreator.java  | 50 +++++++++++++-------
 .../DefaultAzureArmNetworkCreatorTest.java      | 26 ++++++++--
 3 files changed, 56 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/72d82330/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
index 2409727..c0d419c 100644
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
@@ -670,7 +670,7 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
             try {
                 // Create default network for Azure ARM if necessary
                 if ("azurecompute-arm".equals(this.getProvider())) {
-                    DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptions(computeService, setup);
+                    DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptionsIfRequired(computeService, setup);
                 }
 
                 // Setup the template

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/72d82330/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 f12d929..179c12c 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
@@ -37,6 +37,9 @@ import org.jclouds.azurecompute.arm.domain.Subnet;
 import org.jclouds.azurecompute.arm.domain.VirtualNetwork;
 import org.jclouds.compute.ComputeService;
 
+import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.config.ConfigKeys;
+import org.apache.brooklyn.util.collections.MutableMap;
 import org.apache.brooklyn.util.core.config.ConfigBag;
 
 public class DefaultAzureArmNetworkCreator {
@@ -47,23 +50,35 @@ public class DefaultAzureArmNetworkCreator {
     private static final String DEFAULT_NETWORK_NAME = "brooklyn-default-network";
     private static final String DEFAULT_SUBNET_NAME = "brooklyn-default-subnet";
 
-    private static final String defaultVnetAddressPrefix = "10.1.0.0/16";
-    private static final String defaultSubnetAddressPrefix = "10.1.0.0/24";
+    private static final String DEFAULT_VNET_ADDRESS_PREFIX = "10.1.0.0/16";
+    private static final String DEFAULT_SUBNET_ADDRESS_PREFIX = "10.1.0.0/24";
+
+    public static ConfigKey<Boolean> AZURE_ARM_DEFAULT_NETWORK_ENABLED = ConfigKeys.newBooleanConfigKey(
+            "azure.arm.default.network.enabled",
+            "When set to true, AMP will create a default network and subnet per Azure region and " +
+                    "deploy applications there (if no network configuration has been set for the application).",
+            true);
+
+    public static void createDefaultNetworkAndAddToTemplateOptionsIfRequired(ComputeService computeService, ConfigBag config) {
+        if (!config.get(AZURE_ARM_DEFAULT_NETWORK_ENABLED)) {
+            LOG.info("azure.arm.default.network.enabled is disabled, not creating default network");
+            return;
+        }
+
 
-    public static void createDefaultNetworkAndAddToTemplateOptions(ComputeService computeService, ConfigBag config) {
         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.info("Network config specified when creating Azure location. Not creating default network");
+            LOG.info("Network config specified when provisioning Azure machine. Not creating default network");
             return;
         }
         if (templateOptions != null && (templateOptions.containsKey(NETWORK_NAME.getName()) || templateOptions.containsKey("ipOptions"))) {
-            LOG.info("Network config specified when creating Azure location. Not creating default network");
+            LOG.info("Network config specified when provisioning Azure machine. Not creating default network");
             return;
         }
 
-        LOG.info("Network config not specified when creating Azure location. Creating default network if doesn't exist");
+        LOG.info("Network config not specified when provisioning Azure machine. Creating default network if doesn't exist");
 
         AzureComputeApi api = computeService.getContext().unwrapApi(AzureComputeApi.class);
         String location = config.get(CLOUD_REGION_ID);
@@ -87,10 +102,10 @@ public class DefaultAzureArmNetworkCreator {
 
         //Setup properties for creating subnet/network
         Subnet subnet = Subnet.create(subnetName, null, null,
-                Subnet.SubnetProperties.builder().addressPrefix(defaultSubnetAddressPrefix).build());
+                Subnet.SubnetProperties.builder().addressPrefix(DEFAULT_SUBNET_ADDRESS_PREFIX).build());
 
         VirtualNetwork.VirtualNetworkProperties virtualNetworkProperties = VirtualNetwork.VirtualNetworkProperties
-                .builder().addressSpace(VirtualNetwork.AddressSpace.create(Arrays.asList(defaultVnetAddressPrefix)))
+                .builder().addressSpace(VirtualNetwork.AddressSpace.create(Arrays.asList(DEFAULT_VNET_ADDRESS_PREFIX)))
                 .subnets(Arrays.asList(subnet)).build();
 
         //Create network
@@ -103,19 +118,22 @@ public class DefaultAzureArmNetworkCreator {
     }
 
     private static void updateTemplateOptions(ConfigBag config, Subnet createdSubnet){
-        Map<String, Object> templateOptions = config.get(TEMPLATE_OPTIONS);
+        Map<String, Object> templateOptions;
 
-        if(templateOptions == null) {
+        if(config.containsKey(TEMPLATE_OPTIONS)) {
+            templateOptions = MutableMap.copyOf(config.get(TEMPLATE_OPTIONS));
+        } else {
             templateOptions = new HashMap<>();
-            config.put(TEMPLATE_OPTIONS, templateOptions);
         }
 
-        Map<String, Object> ipOptions = new HashMap<>();
-        ipOptions.put("allocateNewPublicIp", true); //JClouds will not provide a public IP unless we set this
-        ipOptions.put("subnet", createdSubnet.id());
-        templateOptions.put("ipOptions", ipOptions);
-    }
+        templateOptions.put("ipOptions", ImmutableMap.of(
+                "allocateNewPublicIp", true, //jclouds will not provide a public IP unless we set this
+                "subnet", createdSubnet.id()
+        ));
 
+        config.put(TEMPLATE_OPTIONS, templateOptions);
+
+    }
 
     private static void createResourceGroupIfNeeded(AzureComputeApi api, String resourceGroup, String location) {
         LOG.debug("using resource group [%s]", resourceGroup);

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/72d82330/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 2dd6a5d..a2c4fc6 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
@@ -21,6 +21,7 @@ package org.apache.brooklyn.location.jclouds.networking.creator;
 import static org.apache.brooklyn.core.location.cloud.CloudLocationConfig.CLOUD_REGION_ID;
 import static org.apache.brooklyn.location.jclouds.api.JcloudsLocationConfigPublic.NETWORK_NAME;
 import static org.apache.brooklyn.location.jclouds.api.JcloudsLocationConfigPublic.TEMPLATE_OPTIONS;
+import static org.apache.brooklyn.location.jclouds.networking.creator.DefaultAzureArmNetworkCreator.AZURE_ARM_DEFAULT_NETWORK_ENABLED;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -79,7 +80,7 @@ public class DefaultAzureArmNetworkCreatorTest {
         when(subnet.id()).thenReturn(TEST_SUBNET_ID);
 
         //Test
-        DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptions(computeService, configBag);
+        DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptionsIfRequired(computeService, configBag);
 
         //verify
         verify(subnetApi).get(TEST_SUBNET_NAME);
@@ -111,7 +112,7 @@ public class DefaultAzureArmNetworkCreatorTest {
 
 
         //Test
-        DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptions(computeService, configBag);
+        DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptionsIfRequired(computeService, configBag);
 
         //verify
         verify(subnetApi, times(2)).get(TEST_SUBNET_NAME);
@@ -136,7 +137,7 @@ public class DefaultAzureArmNetworkCreatorTest {
 
         Map<String, Object> configCopy = configBag.getAllConfig();
 
-        DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptions(computeService, configBag);
+        DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptionsIfRequired(computeService, configBag);
 
         //Ensure nothing changed, and no calls were made to the compute service
         assertEquals(configCopy, configBag.getAllConfig());
@@ -154,7 +155,7 @@ public class DefaultAzureArmNetworkCreatorTest {
 
         Map<String, Object> configCopy = configBag.getAllConfig();
 
-        DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptions(computeService, configBag);
+        DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptionsIfRequired(computeService, configBag);
 
         //Ensure nothing changed, and no calls were made to the compute service
         assertEquals(configCopy, configBag.getAllConfig());
@@ -172,7 +173,22 @@ public class DefaultAzureArmNetworkCreatorTest {
 
         Map<String, Object> configCopy = configBag.getAllConfig();
 
-        DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptions(computeService, configBag);
+        DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptionsIfRequired(computeService, configBag);
+
+        //Ensure nothing changed, and no calls were made to the compute service
+        assertEquals(configCopy, configBag.getAllConfig());
+        Mockito.verifyZeroInteractions(computeService);
+    }
+
+    @Test
+    public void testConfigDisabled() {
+        ConfigBag configBag = ConfigBag.newInstance();
+        configBag.put(CLOUD_REGION_ID, TEST_LOCATION);
+        configBag.put(AZURE_ARM_DEFAULT_NETWORK_ENABLED, false);
+
+        Map<String, Object> configCopy = configBag.getAllConfig();
+
+        DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptionsIfRequired(computeService, configBag);
 
         //Ensure nothing changed, and no calls were made to the compute service
         assertEquals(configCopy, configBag.getAllConfig());


[4/4] brooklyn-server git commit: This closes #739

Posted by dr...@apache.org.
This closes #739


Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/b1fc16d0
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/b1fc16d0
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/b1fc16d0

Branch: refs/heads/master
Commit: b1fc16d022b7e08b1c3505bc9eac2970ff919c44
Parents: 9ebc32c ab17a2a
Author: Duncan Godwin <dr...@googlemail.com>
Authored: Thu Jun 22 10:08:18 2017 +0100
Committer: Duncan Godwin <dr...@googlemail.com>
Committed: Thu Jun 22 10:08:18 2017 +0100

----------------------------------------------------------------------
 .../location/jclouds/JcloudsLocation.java       |   6 +
 .../creator/DefaultAzureArmNetworkCreator.java  | 147 ++++++++++++
 .../DefaultAzureArmNetworkCreatorTest.java      | 238 +++++++++++++++++++
 3 files changed, 391 insertions(+)
----------------------------------------------------------------------