@Override public MachineDetails[] startManagementMachines(final long duration, final TimeUnit unit) throws TimeoutException, CloudProvisioningException { long endTime = System.currentTimeMillis() + unit.toMillis(duration); try { azureClient.createAffinityGroup(affinityGroup, location, endTime); azureClient.createVirtualNetworkSite(addressSpace, affinityGroup, networkName, endTime); azureClient.createStorageAccount(affinityGroup, storageAccountName, endTime); } catch (final MicrosoftAzureException e) { throw new CloudProvisioningException(e); } catch (InterruptedException e) { throw new CloudProvisioningException(e); } int numberOfManagementMachines = this.cloud.getProvider().getNumberOfManagementMachines(); final ExecutorService executorService = Executors.newFixedThreadPool(numberOfManagementMachines); try { return startManagementMachines(endTime, numberOfManagementMachines, executorService); } finally { executorService.shutdown(); } }