Search in sources :

Example 1 with ResizeRecommendation

use of com.sequenceiq.cloudbreak.cloud.model.ResizeRecommendation in project cloudbreak by hortonworks.

the class CloudResourceAdvisor method getPlatformRecommendationByCredential.

private PlatformRecommendation getPlatformRecommendationByCredential(Long workspaceId, String blueprintName, String region, String platformVariant, String availabilityZone, CdpResourceType cdpResourceType, Credential credential) {
    String cloudPlatform = credential.cloudPlatform();
    Map<String, VmType> vmTypesByHostGroup = new HashMap<>();
    Map<String, Boolean> hostGroupContainsMasterComp = new HashMap<>();
    LOGGER.debug("Advising resources for blueprintName: {}, provider: {} and region: {}.", blueprintName, cloudPlatform, region);
    List<String> entitlements = entitlementService.getEntitlements(credential.getAccount());
    BlueprintTextProcessor blueprintTextProcessor = getBlueprintTextProcessor(workspaceId, blueprintName);
    Map<String, Set<String>> componentsByHostGroup = blueprintTextProcessor.getComponentsByHostGroup();
    componentsByHostGroup.forEach((hGName, components) -> hostGroupContainsMasterComp.put(hGName, isThereMasterComponents(blueprintTextProcessor.getClusterManagerType(), hGName, components)));
    PlatformDisks platformDisks = cloudParameterService.getDiskTypes();
    Platform platform = platform(cloudPlatform);
    DiskTypes diskTypes = new DiskTypes(platformDisks.getDiskTypes().get(platform), platformDisks.getDefaultDisks().get(platform), platformDisks.getDiskMappings().get(platform), platformDisks.getDiskDisplayNames().get(platform));
    CloudVmTypes vmTypes = cloudParameterService.getVmTypesV2(extendedCloudCredentialConverter.convert(credential), region, platformVariant, cdpResourceType, Maps.newHashMap());
    VmType defaultVmType = getDefaultVmType(availabilityZone, vmTypes);
    if (defaultVmType != null) {
        componentsByHostGroup.keySet().forEach(comp -> vmTypesByHostGroup.put(comp, defaultVmType));
    }
    VmRecommendations recommendations = cloudParameterService.getRecommendation(cloudPlatform);
    Set<VmType> availableVmTypes = null;
    if (StringUtils.isNotBlank(availabilityZone)) {
        availableVmTypes = vmTypes.getCloudVmResponses().get(availabilityZone);
    } else if (vmTypes.getCloudVmResponses() != null && !vmTypes.getCloudVmResponses().isEmpty()) {
        availableVmTypes = vmTypes.getCloudVmResponses().values().iterator().next();
    }
    if (availableVmTypes == null) {
        availableVmTypes = Collections.emptySet();
    }
    if (recommendations != null) {
        Map<String, VmType> masterVmTypes = getVmTypesForComponentType(true, recommendations.getMaster(), hostGroupContainsMasterComp, availableVmTypes, cloudPlatform, diskTypes, recommendations.getMaster());
        vmTypesByHostGroup.putAll(masterVmTypes);
        Map<String, VmType> workerVmTypes = getVmTypesForComponentType(false, recommendations.getWorker(), hostGroupContainsMasterComp, availableVmTypes, cloudPlatform, diskTypes, recommendations.getWorker(), recommendations.getBroker(), recommendations.getQuorum());
        vmTypesByHostGroup.putAll(workerVmTypes);
    } else {
        componentsByHostGroup.keySet().forEach(hg -> vmTypesByHostGroup.put(hg, null));
    }
    Map<String, InstanceCount> instanceCounts = recommendInstanceCounts(blueprintTextProcessor);
    GatewayRecommendation gateway = recommendGateway(blueprintTextProcessor);
    AutoscaleRecommendation autoscale = recommendAutoscale(blueprintTextProcessor);
    ResizeRecommendation resize = recommendResize(blueprintTextProcessor, entitlements);
    return new PlatformRecommendation(vmTypesByHostGroup, availableVmTypes, diskTypes, instanceCounts, gateway, autoscale, resize);
}
Also used : AutoscaleRecommendation(com.sequenceiq.cloudbreak.cloud.model.AutoscaleRecommendation) ResizeRecommendation(com.sequenceiq.cloudbreak.cloud.model.ResizeRecommendation) Set(java.util.Set) Platform(com.sequenceiq.cloudbreak.cloud.model.Platform) HashMap(java.util.HashMap) PlatformDisks(com.sequenceiq.cloudbreak.cloud.model.PlatformDisks) InstanceCount(com.sequenceiq.cloudbreak.cloud.model.InstanceCount) CloudVmTypes(com.sequenceiq.cloudbreak.cloud.model.CloudVmTypes) VmRecommendations(com.sequenceiq.cloudbreak.cloud.model.VmRecommendations) GatewayRecommendation(com.sequenceiq.cloudbreak.cloud.model.GatewayRecommendation) BlueprintTextProcessor(com.sequenceiq.cloudbreak.template.processor.BlueprintTextProcessor) DiskTypes(com.sequenceiq.cloudbreak.cloud.model.DiskTypes) VmType(com.sequenceiq.cloudbreak.cloud.model.VmType) PlatformRecommendation(com.sequenceiq.cloudbreak.cloud.model.PlatformRecommendation)

Example 2 with ResizeRecommendation

use of com.sequenceiq.cloudbreak.cloud.model.ResizeRecommendation in project cloudbreak by hortonworks.

the class CloudResourceAdvisorTest method testReturnScaleRecommendationForBlueprintWhenCloudManagerVersionGreaterThanEqualTo721.

@Test
public void testReturnScaleRecommendationForBlueprintWhenCloudManagerVersionGreaterThanEqualTo721() {
    when(blueprintTextProcessor.getVersion()).thenReturn(java.util.Optional.of(VERSION_7_2_1));
    when(entitlementService.getEntitlements(anyString())).thenReturn(Collections.emptyList());
    Blueprint blueprint = createBlueprint();
    when(blueprintTextProcessorFactory.createBlueprintTextProcessor("{\"Blueprints\":{123:2}}")).thenReturn(blueprintTextProcessor);
    when(blueprintTextProcessor.recommendAutoscale(any())).thenReturn(new AutoscaleRecommendation(Set.of("compute"), Set.of("compute")));
    when(blueprintTextProcessor.recommendResize(anyList(), any())).thenReturn(new ResizeRecommendation(Set.of("compute"), Set.of("compute")));
    ScaleRecommendation scaleRecommendation = underTest.createForBlueprint(this.workspace.getId(), blueprint);
    assertEquals(new AutoscaleRecommendation(Set.of("compute"), Set.of("compute")), scaleRecommendation.getAutoscaleRecommendation());
    assertEquals(new ResizeRecommendation(Set.of("compute"), Set.of("compute")), scaleRecommendation.getResizeRecommendation());
}
Also used : AutoscaleRecommendation(com.sequenceiq.cloudbreak.cloud.model.AutoscaleRecommendation) ResizeRecommendation(com.sequenceiq.cloudbreak.cloud.model.ResizeRecommendation) ScaleRecommendation(com.sequenceiq.cloudbreak.cloud.model.ScaleRecommendation) Blueprint(com.sequenceiq.cloudbreak.domain.Blueprint) Test(org.junit.Test)

Example 3 with ResizeRecommendation

use of com.sequenceiq.cloudbreak.cloud.model.ResizeRecommendation in project cloudbreak by hortonworks.

the class CloudResourceAdvisorTest method testReturnEmptyScaleRecommendationForBlueprintWhenCloudManagerVersionLessThanEqualTo720.

@Test
public void testReturnEmptyScaleRecommendationForBlueprintWhenCloudManagerVersionLessThanEqualTo720() {
    when(blueprintTextProcessor.getVersion()).thenReturn(java.util.Optional.of(VERSION_7_2_0));
    when(entitlementService.getEntitlements(anyString())).thenReturn(Collections.emptyList());
    Blueprint blueprint = createBlueprint();
    when(blueprintTextProcessorFactory.createBlueprintTextProcessor("{\"Blueprints\":{123:2}}")).thenReturn(blueprintTextProcessor);
    when(blueprintTextProcessor.recommendResize(anyList(), any())).thenReturn(new ResizeRecommendation(Set.of(), Set.of()));
    ScaleRecommendation scaleRecommendation = underTest.createForBlueprint(this.workspace.getId(), blueprint);
    assertEquals(new AutoscaleRecommendation(Set.of(), Set.of()), scaleRecommendation.getAutoscaleRecommendation());
    assertEquals(new ResizeRecommendation(Set.of(), Set.of()), scaleRecommendation.getResizeRecommendation());
}
Also used : AutoscaleRecommendation(com.sequenceiq.cloudbreak.cloud.model.AutoscaleRecommendation) ResizeRecommendation(com.sequenceiq.cloudbreak.cloud.model.ResizeRecommendation) ScaleRecommendation(com.sequenceiq.cloudbreak.cloud.model.ScaleRecommendation) Blueprint(com.sequenceiq.cloudbreak.domain.Blueprint) Test(org.junit.Test)

Example 4 with ResizeRecommendation

use of com.sequenceiq.cloudbreak.cloud.model.ResizeRecommendation in project cloudbreak by hortonworks.

the class CloudResourceAdvisor method createForBlueprint.

public ScaleRecommendation createForBlueprint(Long workspaceId, Blueprint blueprint) {
    LOGGER.debug("Scale advice for blueprintName: {}.", blueprint.getName());
    BlueprintTextProcessor blueprintTextProcessor = getBlueprintTextProcessor(blueprint);
    AutoscaleRecommendation autoscale = recommendAutoscale(blueprintTextProcessor);
    List<String> entitlements = entitlementService.getEntitlements(blueprint.getWorkspace().getTenant().getName());
    ResizeRecommendation resize = recommendResize(blueprintTextProcessor, entitlements);
    return new ScaleRecommendation(autoscale, resize);
}
Also used : AutoscaleRecommendation(com.sequenceiq.cloudbreak.cloud.model.AutoscaleRecommendation) ResizeRecommendation(com.sequenceiq.cloudbreak.cloud.model.ResizeRecommendation) ScaleRecommendation(com.sequenceiq.cloudbreak.cloud.model.ScaleRecommendation) BlueprintTextProcessor(com.sequenceiq.cloudbreak.template.processor.BlueprintTextProcessor)

Example 5 with ResizeRecommendation

use of com.sequenceiq.cloudbreak.cloud.model.ResizeRecommendation in project cloudbreak by hortonworks.

the class CloudResourceAdvisor method recommendResize.

private ResizeRecommendation recommendResize(BlueprintTextProcessor blueprintTextProcessor, List<String> entitlements) {
    Versioned blueprintVersion = () -> blueprintTextProcessor.getVersion().get();
    ResizeRecommendation resizeRecommendation = blueprintTextProcessor.recommendResize(entitlements, blueprintVersion);
    if (resizeRecommendation.getScaleUpHostGroups().isEmpty()) {
        Set<String> scaleUpHostGroups = filterHostGroupByPredicate(blueprintTextProcessor, this::fallbackScaleUpFilter);
        if (!scaleUpHostGroups.isEmpty()) {
            resizeRecommendation.setScaleUpHostGroups(scaleUpHostGroups);
        }
    }
    if (resizeRecommendation.getScaleDownHostGroups().isEmpty()) {
        Set<String> scaleDownHostGroups = filterHostGroupByPredicate(blueprintTextProcessor, this::fallbackScaleDownFilter);
        if (!scaleDownHostGroups.isEmpty()) {
            resizeRecommendation.setScaleDownHostGroups(scaleDownHostGroups);
        }
    }
    return resizeRecommendation;
}
Also used : ResizeRecommendation(com.sequenceiq.cloudbreak.cloud.model.ResizeRecommendation) Versioned(com.sequenceiq.cloudbreak.common.type.Versioned)

Aggregations

ResizeRecommendation (com.sequenceiq.cloudbreak.cloud.model.ResizeRecommendation)6 AutoscaleRecommendation (com.sequenceiq.cloudbreak.cloud.model.AutoscaleRecommendation)4 ScaleRecommendation (com.sequenceiq.cloudbreak.cloud.model.ScaleRecommendation)3 Versioned (com.sequenceiq.cloudbreak.common.type.Versioned)2 Blueprint (com.sequenceiq.cloudbreak.domain.Blueprint)2 BlueprintTextProcessor (com.sequenceiq.cloudbreak.template.processor.BlueprintTextProcessor)2 Test (org.junit.Test)2 CloudVmTypes (com.sequenceiq.cloudbreak.cloud.model.CloudVmTypes)1 DiskTypes (com.sequenceiq.cloudbreak.cloud.model.DiskTypes)1 GatewayRecommendation (com.sequenceiq.cloudbreak.cloud.model.GatewayRecommendation)1 InstanceCount (com.sequenceiq.cloudbreak.cloud.model.InstanceCount)1 Platform (com.sequenceiq.cloudbreak.cloud.model.Platform)1 PlatformDisks (com.sequenceiq.cloudbreak.cloud.model.PlatformDisks)1 PlatformRecommendation (com.sequenceiq.cloudbreak.cloud.model.PlatformRecommendation)1 VmRecommendations (com.sequenceiq.cloudbreak.cloud.model.VmRecommendations)1 VmType (com.sequenceiq.cloudbreak.cloud.model.VmType)1 HashMap (java.util.HashMap)1 Set (java.util.Set)1 Test (org.junit.jupiter.api.Test)1