use of com.sequenceiq.cloudbreak.common.json.Json in project cloudbreak by hortonworks.
the class StackService method setDefaultTags.
private void setDefaultTags(Stack stack) {
try {
StackTags stackTag = stack.getTags().get(StackTags.class);
Map<String, String> userDefinedTags = stackTag.getUserDefinedTags();
String accountId = Crn.safeFromString(stack.getResourceCrn()).getAccountId();
boolean internalTenant = entitlementService.internalTenant(accountId);
CDPTagGenerationRequest request = CDPTagGenerationRequest.Builder.builder().withCreatorCrn(stack.getCreator().getUserCrn()).withEnvironmentCrn(stack.getEnvironmentCrn()).withPlatform(stack.getCloudPlatform()).withAccountId(accountId).withResourceCrn(stack.getResourceCrn()).withIsInternalTenant(internalTenant).withUserName(stack.getCreator().getUserName()).withAccountTags(accountTagClientService.list()).withUserDefinedTags(userDefinedTags).build();
Map<String, String> defaultTags = stackTag.getDefaultTags();
defaultTags.putAll(costTagging.prepareDefaultTags(request));
stack.setTags(new Json(new StackTags(userDefinedTags, stackTag.getApplicationTags(), defaultTags)));
} catch (AccountTagValidationFailed aTVF) {
throw new BadRequestException(aTVF.getMessage(), aTVF);
} catch (Exception e) {
LOGGER.debug("Exception during reading default tags.", e);
}
}
use of com.sequenceiq.cloudbreak.common.json.Json in project cloudbreak by hortonworks.
the class AwsEncodedAuthorizationFailureMessageDecoder method getResultMessage.
private String getResultMessage(AwsCredentialView credentialView, String region, String encodedMessage) {
AmazonSecurityTokenServiceClient awsSts = awsClient.createSecurityTokenService(credentialView, region);
DecodeAuthorizationMessageRequest decodeAuthorizationMessageRequest = new DecodeAuthorizationMessageRequest().withEncodedMessage(encodedMessage);
DecodeAuthorizationMessageResult decodeAuthorizationMessageResult = awsSts.decodeAuthorizationMessage(decodeAuthorizationMessageRequest);
String decodedMessage = decodeAuthorizationMessageResult.getDecodedMessage();
Json authorizationError = new Json(decodedMessage);
String action = authorizationError.getValue("context.action");
String resource = authorizationError.getValue("context.resource");
return String.format("Your AWS credential is not authorized to perform action %s on resource %s. " + "Please contact your system administrator to update your AWS policy.", action, resource);
}
use of com.sequenceiq.cloudbreak.common.json.Json in project cloudbreak by hortonworks.
the class AzureNetworkConnector method createNetworkWithSubnets.
@Override
public CreatedCloudNetwork createNetworkWithSubnets(NetworkCreationRequest networkRequest) {
AzureClient azureClient = azureClientService.getClient(networkRequest.getCloudCredential());
String region = networkRequest.getRegion().value();
List<SubnetRequest> subnetRequests = azureSubnetRequestProvider.provide(region, Lists.newArrayList(networkRequest.getPublicSubnets()), Lists.newArrayList(networkRequest.getPrivateSubnets()), networkRequest.isPrivateSubnetEnabled());
Deployment templateDeployment;
ResourceGroup resourceGroup;
try {
resourceGroup = getOrCreateResourceGroup(azureClient, networkRequest);
String template = azureNetworkTemplateBuilder.build(networkRequest, subnetRequests, resourceGroup.name());
String parametersMapAsString = new Json(Map.of()).getValue();
templateDeployment = azureClient.createTemplateDeployment(resourceGroup.name(), networkRequest.getStackName(), template, parametersMapAsString);
} catch (CloudException e) {
throw azureUtils.convertToCloudConnectorException(e, "Network template deployment provisioning");
} catch (Exception e) {
LOGGER.warn("Provisioning error:", e);
throw new CloudConnectorException(String.format("Error in provisioning network %s: %s", networkRequest.getStackName(), e.getMessage()));
}
Map<String, Map> outputMap = (HashMap) templateDeployment.outputs();
String networkName = cropId((String) outputMap.get(NETWORK_ID_KEY).get("value"));
Set<CreatedSubnet> subnets = createSubnets(subnetRequests, outputMap, region);
return new CreatedCloudNetwork(networkRequest.getStackName(), networkName, subnets, createProperties(resourceGroup.name(), networkRequest.getStackName()));
}
use of com.sequenceiq.cloudbreak.common.json.Json in project cloudbreak by hortonworks.
the class AzureResourceDeploymentHelperService method deployTemplate.
public void deployTemplate(AzureClient azureClient, AzureDnsZoneDeploymentParameters parameters) {
List<AzurePrivateDnsZoneServiceEnum> enabledPrivateEndpointServices = parameters.getEnabledPrivateEndpointServices();
String resourceGroup = parameters.getResourceGroupName();
LOGGER.debug("Deploying Private DNS Zones and applying network link for services {}", enabledPrivateEndpointServices.stream().map(AzurePrivateDnsZoneServiceEnum::getSubResource).collect(Collectors.toList()));
String suffix = getDeploymentSuffix(parameters);
String deploymentName = generateDeploymentName(enabledPrivateEndpointServices, suffix);
try {
String template = azureNetworkDnsZoneTemplateBuilder.build(parameters);
String parametersMapAsString = new Json(Map.of()).getValue();
LOGGER.debug("Creating deployment with name {} in resource group {}", deploymentName, resourceGroup);
azureClient.createTemplateDeployment(resourceGroup, deploymentName, template, parametersMapAsString);
} catch (CloudException e) {
LOGGER.info("Provisioning error, cloud exception happened: ", e);
throw azureUtils.convertToCloudConnectorException(e, "DNS Zone and network link template deployment");
} catch (Exception e) {
LOGGER.warn("Provisioning error:", e);
throw new CloudConnectorException(String.format("Error in provisioning network dns zone template %s: %s", deploymentName, e.getMessage()));
}
}
use of com.sequenceiq.cloudbreak.common.json.Json in project cloudbreak by hortonworks.
the class AzureDatabaseResourceService method buildDatabaseResourcesForLaunch.
public List<CloudResourceStatus> buildDatabaseResourcesForLaunch(AuthenticatedContext ac, DatabaseStack stack, PersistenceNotifier persistenceNotifier) {
CloudContext cloudContext = ac.getCloudContext();
AzureClient client = ac.getParameter(AzureClient.class);
String stackName = azureUtils.getStackName(cloudContext);
String resourceGroupName = azureResourceGroupMetadataProvider.getResourceGroupName(cloudContext, stack);
ResourceGroupUsage resourceGroupUsage = azureResourceGroupMetadataProvider.getResourceGroupUsage(stack);
String template = azureDatabaseTemplateBuilder.build(cloudContext, stack);
if (!client.resourceGroupExists(resourceGroupName)) {
if (resourceGroupUsage != ResourceGroupUsage.MULTIPLE) {
LOGGER.warn("Resource group with name {} does not exist", resourceGroupName);
throw new CloudConnectorException(String.format("Resource group with name %s does not exist!", resourceGroupName));
} else {
LOGGER.debug("Resource group with name {} does not exist, creating it now..", resourceGroupName);
String region = ac.getCloudContext().getLocation().getRegion().value();
client.createResourceGroup(resourceGroupName, region, stack.getTags());
}
}
createResourceGroupResource(persistenceNotifier, cloudContext, resourceGroupName);
createTemplateResource(persistenceNotifier, cloudContext, stackName);
Deployment deployment;
try {
String parametersMapAsString = new Json(Map.of()).getValue();
client.createTemplateDeployment(resourceGroupName, stackName, template, parametersMapAsString);
} catch (CloudException e) {
throw azureUtils.convertToCloudConnectorException(e, "Database stack provisioning");
} catch (Exception e) {
throw new CloudConnectorException(String.format("Error in provisioning database stack %s: %s", stackName, e.getMessage()), e);
} finally {
deployment = client.getTemplateDeployment(resourceGroupName, stackName);
if (deployment != null) {
List<CloudResource> cloudResources = azureCloudResourceService.getDeploymentCloudResources(deployment);
cloudResources.forEach(cloudResource -> persistenceNotifier.notifyAllocation(cloudResource, cloudContext));
}
}
String fqdn = (String) ((Map) ((Map) deployment.outputs()).get(DATABASE_SERVER_FQDN)).get("value");
List<CloudResource> databaseResources = createCloudResources(fqdn);
databaseResources.forEach(dbr -> persistenceNotifier.notifyAllocation(dbr, cloudContext));
return databaseResources.stream().map(resource -> new CloudResourceStatus(resource, ResourceStatus.CREATED)).collect(Collectors.toList());
}
Aggregations