use of com.microsoft.azure.CloudException in project photon-model by vmware.
the class AzureTestUtil method createAzureVirtualNetwork.
private static void createAzureVirtualNetwork(String resourceGroupName, AzureNicSpecs azureNicSpecs, NetworkManagementClientImpl networkManagementClient) throws Exception {
try {
VirtualNetworkInner vNet = new VirtualNetworkInner();
vNet.withLocation(azureNicSpecs.network.zoneId);
AddressSpace addressSpace = new AddressSpace();
// Azure's custom serializers don't handle well collections constructed with
// Collections.singletonList(), so initialize an ArrayList
List<String> cidrs = new ArrayList<>();
cidrs.add(azureNicSpecs.network.cidr);
addressSpace.withAddressPrefixes(cidrs);
vNet.withAddressSpace(addressSpace);
List<SubnetInner> subnetList = new ArrayList<>();
for (int i = 0; i < azureNicSpecs.nicSpecs.size(); i++) {
SubnetInner subnet = new SubnetInner();
subnet.withName(azureNicSpecs.nicSpecs.get(i).subnetSpec.name);
subnet.withAddressPrefix(azureNicSpecs.nicSpecs.get(i).subnetSpec.cidr);
subnetList.add(subnet);
}
vNet.withSubnets(subnetList);
networkManagementClient.virtualNetworks().createOrUpdate(resourceGroupName, azureNicSpecs.network.name, vNet);
addAzureGatewayToVirtualNetwork(resourceGroupName, azureNicSpecs, networkManagementClient);
} catch (CloudException ex) {
/*
* CloudException is thrown if the vNet already exists and we are trying to do an
* update, because there are objects (GatewaySubnet) attached to it
*/
assertTrue(ex.body().code().equals("InUseSubnetCannotBeDeleted"));
}
}
use of com.microsoft.azure.CloudException in project photon-model by vmware.
the class AzureDeferredResultServiceCallback method consumeError.
/**
* Hook that might be implemented by descendants to handle failed Azure call.
*
* <p>
* Default implementation should be good enough for most of the cases. It provides a list of 1)
* exceptions to recover from and 2) customizable CloudError handlers.
*
* @see #cloudErrorHandlers
* @see #addRecoverFromCloudError(String)
*/
protected Throwable consumeError(Throwable exc) {
if (!(exc instanceof CloudException)) {
return exc;
}
final CloudError cloudError = ((CloudException) exc).body();
if (cloudError == null) {
return exc;
}
BiFunction<Throwable, CloudError, Throwable> cloudErrorHandler = this.cloudErrorHandlers.getOrDefault(// Lookup handler by code
cloudError.code(), // Fall back to the default 're-throw' exc handler
(originalExc, cloudErr) -> originalExc);
exc = cloudErrorHandler.apply(exc, cloudError);
return exc;
}
use of com.microsoft.azure.CloudException in project cloudbreak by hortonworks.
the class AzureInstanceConnector method check.
@Override
public List<CloudVmInstanceStatus> check(AuthenticatedContext ac, List<CloudInstance> vms) {
List<CloudVmInstanceStatus> statuses = new ArrayList<>();
String stackName = armTemplateUtils.getStackName(ac.getCloudContext());
for (CloudInstance vm : vms) {
try {
AzureClient azureClient = ac.getParameter(AzureClient.class);
boolean virtualMachineExists = azureClient.isVirtualMachineExists(stackName, vm.getInstanceId());
if (virtualMachineExists) {
PowerState virtualMachinePowerState = azureClient.getVirtualMachinePowerState(stackName, vm.getInstanceId());
statuses.add(new CloudVmInstanceStatus(vm, AzureInstanceStatus.get(virtualMachinePowerState)));
} else {
statuses.add(new CloudVmInstanceStatus(vm, InstanceStatus.TERMINATED));
}
} catch (CloudException e) {
if (e.body() != null && "ResourceNotFound".equals(e.body().code())) {
statuses.add(new CloudVmInstanceStatus(vm, InstanceStatus.TERMINATED));
} else {
statuses.add(new CloudVmInstanceStatus(vm, InstanceStatus.UNKNOWN));
}
} catch (RuntimeException ignored) {
statuses.add(new CloudVmInstanceStatus(vm, InstanceStatus.UNKNOWN));
}
}
return statuses;
}
use of com.microsoft.azure.CloudException in project cloudbreak by hortonworks.
the class AzureResourceConnector method terminate.
@Override
public List<CloudResourceStatus> terminate(AuthenticatedContext authenticatedContext, CloudStack stack, List<CloudResource> resources) {
AzureClient client = authenticatedContext.getParameter(AzureClient.class);
for (CloudResource resource : resources) {
try {
try {
retryService.testWith2SecDelayMax5Times(() -> {
if (!client.resourceGroupExists(resource.getName())) {
throw new ActionWentFailException("Resource group not exists");
}
return true;
});
client.deleteResourceGroup(resource.getName());
} catch (ActionWentFailException ignored) {
LOGGER.info(String.format("Resource group not found with name: %s", resource.getName()));
}
if (azureStorage.isPersistentStorage(azureStorage.getPersistentStorageName(stack))) {
CloudContext cloudCtx = authenticatedContext.getCloudContext();
AzureCredentialView azureCredentialView = new AzureCredentialView(authenticatedContext.getCloudCredential());
String imageStorageName = azureStorage.getImageStorageName(azureCredentialView, cloudCtx, stack);
String imageResourceGroupName = azureStorage.getImageResourceGroupName(cloudCtx, stack);
String diskContainer = azureStorage.getDiskContainerName(cloudCtx);
deleteContainer(client, imageResourceGroupName, imageStorageName, diskContainer);
}
} catch (CloudException e) {
if (e.response().code() != AzureConstants.NOT_FOUND) {
throw new CloudConnectorException(String.format("Could not delete resource group: %s", resource.getName()), e);
} else {
return check(authenticatedContext, Collections.emptyList());
}
}
}
return check(authenticatedContext, resources);
}
use of com.microsoft.azure.CloudException in project cloudbreak by hortonworks.
the class AzureResourceConnector method launch.
@Override
public List<CloudResourceStatus> launch(AuthenticatedContext ac, CloudStack stack, PersistenceNotifier notifier, AdjustmentType adjustmentType, Long threshold) {
AzureCredentialView azureCredentialView = new AzureCredentialView(ac.getCloudCredential());
String stackName = azureUtils.getStackName(ac.getCloudContext());
String resourceGroupName = azureUtils.getResourceGroupName(ac.getCloudContext());
AzureClient client = ac.getParameter(AzureClient.class);
AzureStackView azureStackView = getAzureStack(azureCredentialView, ac.getCloudContext(), stack, getNumberOfAvailableIPsInSubnets(client, stack.getNetwork()));
String customImageId = azureStorage.getCustomImageId(client, ac, stack);
String template = azureTemplateBuilder.build(stackName, customImageId, azureCredentialView, azureStackView, ac.getCloudContext(), stack);
String parameters = azureTemplateBuilder.buildParameters(ac.getCloudCredential(), stack.getNetwork(), stack.getImage());
Boolean encrytionNeeded = azureStorage.isEncrytionNeeded(stack.getParameters());
try {
String region = ac.getCloudContext().getLocation().getRegion().value();
if (AzureUtils.hasUnmanagedDisk(stack)) {
Map<String, AzureDiskType> storageAccounts = azureStackView.getStorageAccounts();
for (Entry<String, AzureDiskType> entry : storageAccounts.entrySet()) {
azureStorage.createStorage(client, entry.getKey(), entry.getValue(), resourceGroupName, region, encrytionNeeded, stack.getTags());
}
}
if (!client.templateDeploymentExists(resourceGroupName, stackName)) {
Deployment templateDeployment = client.createTemplateDeployment(resourceGroupName, stackName, template, parameters);
LOGGER.info("created template deployment for launch: {}", templateDeployment.exportTemplate().template());
if (!azureUtils.isExistingNetwork(stack.getNetwork())) {
client.collectAndSaveNetworkAndSubnet(resourceGroupName, stackName, notifier, ac.getCloudContext());
}
}
} catch (CloudException e) {
LOGGER.error("Provisioning error, cloud exception happened: ", e);
if (e.body() != null && e.body().details() != null) {
String details = e.body().details().stream().map(CloudError::message).collect(Collectors.joining(", "));
throw new CloudConnectorException(String.format("Stack provisioning failed, status code %s, error message: %s, details: %s", e.body().code(), e.body().message(), details));
} else {
throw new CloudConnectorException(String.format("Stack provisioning failed: '%s', please go to Azure Portal for detailed message", e));
}
} catch (Exception e) {
LOGGER.error("Provisioning error:", e);
throw new CloudConnectorException(String.format("Error in provisioning stack %s: %s", stackName, e.getMessage()));
}
CloudResource cloudResource = new Builder().type(ResourceType.ARM_TEMPLATE).name(stackName).build();
List<CloudResourceStatus> resources = check(ac, Collections.singletonList(cloudResource));
LOGGER.debug("Launched resources: {}", resources);
return resources;
}
Aggregations