Repository: brooklyn-server Updated Branches: refs/heads/master 3d8675e24 -> eb9795c13
DefaultNetworkCreator now waits for subnet to be created Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/6d40d632 Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/6d40d632 Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/6d40d632 Branch: refs/heads/master Commit: 6d40d632cd9a49f0ab792af3714d87dfa4597ca1 Parents: a11fd42 Author: graeme.miller <[email protected]> Authored: Tue Jul 4 09:25:12 2017 +0100 Committer: graeme.miller <[email protected]> Committed: Tue Jul 4 11:34:58 2017 +0100 ---------------------------------------------------------------------- .../creator/DefaultAzureArmNetworkCreator.java | 23 ++++++++++++++++++++ .../DefaultAzureArmNetworkCreatorTest.java | 16 ++++++++------ 2 files changed, 32 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6d40d632/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 d08bd03..6028280 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 @@ -45,6 +45,8 @@ 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; +import org.apache.brooklyn.util.time.CountdownTimer; +import org.apache.brooklyn.util.time.Duration; public class DefaultAzureArmNetworkCreator { @@ -54,6 +56,9 @@ public class DefaultAzureArmNetworkCreator { private static final String DEFAULT_NETWORK_NAME_PREFIX = "brooklyn-default-network"; private static final String DEFAULT_SUBNET_NAME_PREFIX = "brooklyn-default-subnet"; + private static final String PROVISIONING_STATE_UPDATING = "Updating"; + private static final String PROVISIONING_STATE_SUCCEEDED = "Succeeded"; + 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"; @@ -131,6 +136,24 @@ public class DefaultAzureArmNetworkCreator { //Get created subnet Subnet createdSubnet = api.getSubnetApi(resourceGroupName, vnetName).get(subnetName); + //Wait until subnet is created + CountdownTimer timeout = CountdownTimer.newInstanceStarted(Duration.minutes(new Integer(20))); + while (PROVISIONING_STATE_UPDATING.equals(createdSubnet.properties().provisioningState())) { + if (timeout.isExpired()) { + throw new IllegalStateException("Creating subnet " + subnetName + " stuck in the updating state, aborting."); + } + LOG.debug("Created subnet {} is still in updating state, waiting for it to complete", createdSubnet); + Duration.sleep(Duration.ONE_SECOND); + createdSubnet = api.getSubnetApi(resourceGroupName, vnetName).get(subnetName); + } + + String lastProvisioningState = createdSubnet.properties().provisioningState(); + if (!lastProvisioningState.equals(PROVISIONING_STATE_SUCCEEDED)) { + LOG.debug("Created subnet {} in wrong state, expected state {} but found {}", new Object[] {subnetName, PROVISIONING_STATE_SUCCEEDED, lastProvisioningState}); + throw new IllegalStateException("Created subnet " + subnetName + " in wrong state, expected state " + PROVISIONING_STATE_SUCCEEDED + + " but found " + lastProvisioningState ); + } + //Add config updateTemplateOptions(config, createdSubnet); } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/6d40d632/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 48d6024..542e4ab 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 @@ -24,6 +24,7 @@ import static org.apache.brooklyn.location.jclouds.api.JcloudsLocationConfigPubl import static org.apache.brooklyn.location.jclouds.networking.creator.DefaultAzureArmNetworkCreator.AZURE_ARM_DEFAULT_NETWORK_ENABLED; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.atLeast; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -63,7 +64,7 @@ public class DefaultAzureArmNetworkCreatorTest { @Mock VirtualNetwork virtualNetwork; @Mock ResourceGroup resourceGroup; - @Mock Subnet subnet; + @Mock(answer = org.mockito.Answers.RETURNS_DEEP_STUBS) Subnet subnet; final String TEST_LOCATION = "test-loc"; final String TEST_RESOURCE_GROUP = "brooklyn-default-resource-group-" + TEST_LOCATION; @@ -128,16 +129,17 @@ public class DefaultAzureArmNetworkCreatorTest { //Setup mocks when(subnetApi.get(TEST_SUBNET_NAME)).thenReturn(null).thenReturn(subnet); //null first time, subnet next - when(resourceGroupApi.get(TEST_RESOURCE_GROUP)).thenReturn(null); + when(subnet.properties().provisioningState()).thenReturn("Updating").thenReturn("Succeeded"); + //Test DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptionsIfRequired(computeService, configBag); //verify calls made - verify(subnetApi, times(2)).get(TEST_SUBNET_NAME); verify(subnet).id(); + verify(subnetApi, atLeast(2)).get(TEST_SUBNET_NAME); verify(resourceGroupApi).get(TEST_RESOURCE_GROUP); verify(resourceGroupApi).create(eq(TEST_RESOURCE_GROUP), eq(TEST_LOCATION), any()); @@ -162,13 +164,13 @@ public class DefaultAzureArmNetworkCreatorTest { //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); - + when(subnet.properties().provisioningState()).thenReturn("Updating").thenReturn("Succeeded"); //Test DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptionsIfRequired(computeService, configBag); //verify - verify(subnetApi, times(2)).get(TEST_SUBNET_NAME); + verify(subnetApi, atLeast(2)).get(TEST_SUBNET_NAME); verify(subnet).id(); verify(resourceGroupApi).get(TEST_RESOURCE_GROUP); @@ -195,14 +197,14 @@ public class DefaultAzureArmNetworkCreatorTest { 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); - + when(subnet.properties().provisioningState()).thenReturn("Updating").thenReturn("Succeeded"); //Test DefaultAzureArmNetworkCreator.createDefaultNetworkAndAddToTemplateOptionsIfRequired(computeService, configBag); //verify - verify(subnetApi, times(2)).get(TEST_SUBNET_NAME); verify(subnetApi).createOrUpdate(eq(TEST_SUBNET_NAME), any()); + verify(subnetApi, atLeast(2)).get(TEST_SUBNET_NAME); verify(subnet).id(); verify(resourceGroupApi).get(TEST_RESOURCE_GROUP);
