Search in sources :

Example 26 with Json

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);
    }
}
Also used : StackTags(com.sequenceiq.cloudbreak.cloud.model.StackTags) BadRequestException(com.sequenceiq.cloudbreak.common.exception.BadRequestException) CDPTagGenerationRequest(com.sequenceiq.cloudbreak.tag.request.CDPTagGenerationRequest) Json(com.sequenceiq.cloudbreak.common.json.Json) AccountTagValidationFailed(com.sequenceiq.cloudbreak.tag.AccountTagValidationFailed) CloudbreakException(com.sequenceiq.cloudbreak.service.CloudbreakException) TransactionRuntimeExecutionException(com.sequenceiq.cloudbreak.common.service.TransactionService.TransactionRuntimeExecutionException) CloudbreakOrchestratorException(com.sequenceiq.cloudbreak.orchestrator.exception.CloudbreakOrchestratorException) BadRequestException(com.sequenceiq.cloudbreak.common.exception.BadRequestException) IOException(java.io.IOException) CloudbreakImageCatalogException(com.sequenceiq.cloudbreak.core.CloudbreakImageCatalogException) NotFoundException(com.sequenceiq.cloudbreak.common.exception.NotFoundException) TransactionExecutionException(com.sequenceiq.cloudbreak.common.service.TransactionService.TransactionExecutionException) CloudbreakApiException(com.sequenceiq.cloudbreak.exception.CloudbreakApiException) CloudbreakImageNotFoundException(com.sequenceiq.cloudbreak.core.CloudbreakImageNotFoundException)

Example 27 with Json

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);
}
Also used : DecodeAuthorizationMessageResult(com.amazonaws.services.securitytoken.model.DecodeAuthorizationMessageResult) DecodeAuthorizationMessageRequest(com.amazonaws.services.securitytoken.model.DecodeAuthorizationMessageRequest) Json(com.sequenceiq.cloudbreak.common.json.Json) AmazonSecurityTokenServiceClient(com.sequenceiq.cloudbreak.cloud.aws.common.client.AmazonSecurityTokenServiceClient)

Example 28 with Json

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()));
}
Also used : SubnetRequest(com.sequenceiq.cloudbreak.cloud.model.network.SubnetRequest) CloudConnectorException(com.sequenceiq.cloudbreak.cloud.exception.CloudConnectorException) HashMap(java.util.HashMap) Deployment(com.microsoft.azure.management.resources.Deployment) Json(com.sequenceiq.cloudbreak.common.json.Json) CloudException(com.microsoft.azure.CloudException) CloudConnectorException(com.sequenceiq.cloudbreak.cloud.exception.CloudConnectorException) BadRequestException(javax.ws.rs.BadRequestException) CloudException(com.microsoft.azure.CloudException) AzureClient(com.sequenceiq.cloudbreak.cloud.azure.client.AzureClient) CreatedCloudNetwork(com.sequenceiq.cloudbreak.cloud.model.network.CreatedCloudNetwork) CreatedSubnet(com.sequenceiq.cloudbreak.cloud.model.network.CreatedSubnet) HashMap(java.util.HashMap) Map(java.util.Map) ResourceGroup(com.microsoft.azure.management.resources.ResourceGroup)

Example 29 with Json

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()));
    }
}
Also used : CloudConnectorException(com.sequenceiq.cloudbreak.cloud.exception.CloudConnectorException) Json(com.sequenceiq.cloudbreak.common.json.Json) CloudException(com.microsoft.azure.CloudException) CloudConnectorException(com.sequenceiq.cloudbreak.cloud.exception.CloudConnectorException) CloudException(com.microsoft.azure.CloudException)

Example 30 with Json

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());
}
Also used : AzureClient(com.sequenceiq.cloudbreak.cloud.azure.client.AzureClient) CloudContext(com.sequenceiq.cloudbreak.cloud.context.CloudContext) ARM_TEMPLATE(com.sequenceiq.common.api.type.ResourceType.ARM_TEMPLATE) AzureDatabaseTemplateProvider(com.sequenceiq.cloudbreak.cloud.azure.AzureDatabaseTemplateProvider) LoggerFactory(org.slf4j.LoggerFactory) ResourceGroupUsage(com.sequenceiq.cloudbreak.cloud.azure.ResourceGroupUsage) Inject(javax.inject.Inject) CloudConnectorException(com.sequenceiq.cloudbreak.cloud.exception.CloudConnectorException) AZURE_PRIVATE_ENDPOINT(com.sequenceiq.common.api.type.ResourceType.AZURE_PRIVATE_ENDPOINT) Lists(com.google.common.collect.Lists) AuthenticatedContext(com.sequenceiq.cloudbreak.cloud.context.AuthenticatedContext) AzureDatabaseTemplateBuilder(com.sequenceiq.cloudbreak.cloud.azure.AzureDatabaseTemplateBuilder) Service(org.springframework.stereotype.Service) Map(java.util.Map) ResourceGroup(com.microsoft.azure.management.resources.ResourceGroup) AzureUtils(com.sequenceiq.cloudbreak.cloud.azure.AzureUtils) ResourceStatus(com.sequenceiq.cloudbreak.cloud.model.ResourceStatus) ResourceType(com.sequenceiq.common.api.type.ResourceType) AZURE_RESOURCE_GROUP(com.sequenceiq.common.api.type.ResourceType.AZURE_RESOURCE_GROUP) Deployment(com.microsoft.azure.management.resources.Deployment) Logger(org.slf4j.Logger) AzureResourceGroupMetadataProvider(com.sequenceiq.cloudbreak.cloud.azure.AzureResourceGroupMetadataProvider) CloudResource(com.sequenceiq.cloudbreak.cloud.model.CloudResource) ExternalDatabaseStatus(com.sequenceiq.cloudbreak.cloud.model.ExternalDatabaseStatus) CloudResourceStatus(com.sequenceiq.cloudbreak.cloud.model.CloudResourceStatus) PersistenceNotifier(com.sequenceiq.cloudbreak.cloud.notification.PersistenceNotifier) Collectors(java.util.stream.Collectors) AzureCloudResourceService(com.sequenceiq.cloudbreak.cloud.azure.AzureCloudResourceService) DatabaseStack(com.sequenceiq.cloudbreak.cloud.model.DatabaseStack) Json(com.sequenceiq.cloudbreak.common.json.Json) AZURE_DATABASE(com.sequenceiq.common.api.type.ResourceType.AZURE_DATABASE) RDS_HOSTNAME(com.sequenceiq.common.api.type.ResourceType.RDS_HOSTNAME) List(java.util.List) AzureTransientDeploymentService(com.sequenceiq.cloudbreak.cloud.azure.template.AzureTransientDeploymentService) CloudException(com.microsoft.azure.CloudException) Optional(java.util.Optional) CloudConnectorException(com.sequenceiq.cloudbreak.cloud.exception.CloudConnectorException) CloudContext(com.sequenceiq.cloudbreak.cloud.context.CloudContext) Deployment(com.microsoft.azure.management.resources.Deployment) Json(com.sequenceiq.cloudbreak.common.json.Json) CloudException(com.microsoft.azure.CloudException) CloudConnectorException(com.sequenceiq.cloudbreak.cloud.exception.CloudConnectorException) CloudException(com.microsoft.azure.CloudException) AzureClient(com.sequenceiq.cloudbreak.cloud.azure.client.AzureClient) ResourceGroupUsage(com.sequenceiq.cloudbreak.cloud.azure.ResourceGroupUsage) CloudResourceStatus(com.sequenceiq.cloudbreak.cloud.model.CloudResourceStatus) CloudResource(com.sequenceiq.cloudbreak.cloud.model.CloudResource) Map(java.util.Map)

Aggregations

Json (com.sequenceiq.cloudbreak.common.json.Json)266 Test (org.junit.jupiter.api.Test)95 HashMap (java.util.HashMap)49 InstanceTemplate (com.sequenceiq.cloudbreak.cloud.model.InstanceTemplate)31 Template (com.sequenceiq.freeipa.entity.Template)26 AwsInstanceTemplate (com.sequenceiq.cloudbreak.cloud.model.instance.AwsInstanceTemplate)25 List (java.util.List)24 ArgumentMatchers.anyString (org.mockito.ArgumentMatchers.anyString)24 AzureInstanceTemplate (com.sequenceiq.cloudbreak.cloud.model.instance.AzureInstanceTemplate)23 Map (java.util.Map)22 Stack (com.sequenceiq.cloudbreak.domain.stack.Stack)21 InstanceMetaData (com.sequenceiq.cloudbreak.domain.stack.instance.InstanceMetaData)21 ArrayList (java.util.ArrayList)21 Test (org.junit.Test)21 InstanceGroup (com.sequenceiq.cloudbreak.domain.stack.instance.InstanceGroup)20 IOException (java.io.IOException)20 Cluster (com.sequenceiq.cloudbreak.domain.stack.cluster.Cluster)18 RestRequestDetails (com.sequenceiq.cloudbreak.structuredevent.event.rest.RestRequestDetails)16 DetailedEnvironmentResponse (com.sequenceiq.environment.api.v1.environment.model.response.DetailedEnvironmentResponse)16 BadRequestException (com.sequenceiq.cloudbreak.common.exception.BadRequestException)14