Search in sources :

Example 1 with AwsInstanceTemplateParameters

use of com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.aws.AwsInstanceTemplateParameters in project cloudbreak by hortonworks.

the class StackToCreateFreeIpaRequestConverter method getInstanceTemplateRequest.

private InstanceTemplateRequest getInstanceTemplateRequest(Template template) {
    InstanceTemplateRequest request = null;
    if (template != null) {
        request = new InstanceTemplateRequest();
        request.setInstanceType(template.getInstanceType());
        Integer spotPercentage = template.getAttributes().getValue(AwsInstanceTemplate.EC2_SPOT_PERCENTAGE);
        Double maxPrice = template.getAttributes().getValue(AwsInstanceTemplate.EC2_SPOT_MAX_PRICE);
        if (spotPercentage != null) {
            LOGGER.debug("EC2 spot percentage found in the instances template attributes");
            AwsInstanceTemplateParameters aws = new AwsInstanceTemplateParameters();
            AwsInstanceTemplateSpotParameters spot = new AwsInstanceTemplateSpotParameters();
            spot.setPercentage(spotPercentage);
            if (maxPrice != null) {
                LOGGER.debug("EC2 max price found in the instances template attributes");
                spot.setMaxPrice(maxPrice);
            }
            aws.setSpot(spot);
            request.setAws(aws);
        }
        VolumeRequest volumeRequest = new VolumeRequest();
        volumeRequest.setType(template.getVolumeType());
        volumeRequest.setCount(template.getVolumeCount());
        volumeRequest.setSize(template.getVolumeSize());
        request.setAttachedVolumes(Optional.of(volumeRequest).filter(v -> v.getCount() != null && v.getCount() > 0 && v.getSize() != null && v.getSize() > 0).stream().collect(Collectors.toSet()));
    }
    LOGGER.debug("Created instance template request {} from instance template {}", request, template);
    return request;
}
Also used : InstanceGroupNetwork(com.sequenceiq.freeipa.entity.InstanceGroupNetwork) Arrays(java.util.Arrays) URISyntaxException(java.net.URISyntaxException) Template(com.sequenceiq.freeipa.entity.Template) LoggerFactory(org.slf4j.LoggerFactory) FeaturesRequest(com.sequenceiq.common.api.telemetry.request.FeaturesRequest) StringUtils(org.apache.commons.lang3.StringUtils) TelemetryRequest(com.sequenceiq.common.api.telemetry.request.TelemetryRequest) InstanceTemplateRequest(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.InstanceTemplateRequest) StackAuthenticationRequest(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.security.StackAuthenticationRequest) Map(java.util.Map) Telemetry(com.sequenceiq.common.api.telemetry.model.Telemetry) URI(java.net.URI) InstanceGroupRequest(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.InstanceGroupRequest) FreeIpaServerRequest(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.FreeIpaServerRequest) InstanceGroupNetworkRequest(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.InstanceGroupNetworkRequest) FreeIpa(com.sequenceiq.freeipa.entity.FreeIpa) Network(com.sequenceiq.freeipa.entity.Network) StackTags(com.sequenceiq.cloudbreak.cloud.model.StackTags) Logging(com.sequenceiq.common.api.telemetry.model.Logging) Collectors(java.util.stream.Collectors) Json(com.sequenceiq.cloudbreak.common.json.Json) List(java.util.List) FreeIpaService(com.sequenceiq.freeipa.service.freeipa.FreeIpaService) AwsInstanceTemplate(com.sequenceiq.cloudbreak.cloud.model.instance.AwsInstanceTemplate) Optional(java.util.Optional) NetworkConstants(com.sequenceiq.cloudbreak.common.network.NetworkConstants) StackAuthentication(com.sequenceiq.freeipa.entity.StackAuthentication) Features(com.sequenceiq.common.api.telemetry.model.Features) PlacementRequest(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.region.PlacementRequest) SecurityGroup(com.sequenceiq.freeipa.entity.SecurityGroup) CreateFreeIpaRequest(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.create.CreateFreeIpaRequest) BackupRequest(com.sequenceiq.common.api.backup.request.BackupRequest) ImageEntity(com.sequenceiq.freeipa.entity.ImageEntity) CloudPlatform(com.sequenceiq.cloudbreak.common.mappable.CloudPlatform) Inject(javax.inject.Inject) Backup(com.sequenceiq.freeipa.api.model.Backup) WorkloadAnalyticsRequest(com.sequenceiq.common.api.telemetry.request.WorkloadAnalyticsRequest) Monitoring(com.sequenceiq.common.api.telemetry.model.Monitoring) AwsInstanceTemplateParameters(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.aws.AwsInstanceTemplateParameters) Stack(com.sequenceiq.freeipa.entity.Stack) ImageSettingsRequest(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.image.ImageSettingsRequest) Converter(org.springframework.core.convert.converter.Converter) BadRequestException(com.sequenceiq.cloudbreak.common.exception.BadRequestException) Logger(org.slf4j.Logger) WorkloadAnalytics(com.sequenceiq.common.api.telemetry.model.WorkloadAnalytics) SecurityRule(com.sequenceiq.freeipa.entity.SecurityRule) SecurityGroupRequest(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.security.SecurityGroupRequest) IOException(java.io.IOException) Maps(com.google.common.collect.Maps) NetworkRequest(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.network.NetworkRequest) LoggingRequest(com.sequenceiq.common.api.telemetry.request.LoggingRequest) SecurityRuleRequest(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.security.SecurityRuleRequest) Component(org.springframework.stereotype.Component) VolumeRequest(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.VolumeRequest) InstanceGroup(com.sequenceiq.freeipa.entity.InstanceGroup) AwsInstanceTemplateSpotParameters(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.aws.AwsInstanceTemplateSpotParameters) InstanceGroupAwsNetworkParameters(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.aws.InstanceGroupAwsNetworkParameters) MonitoringRequest(com.sequenceiq.common.api.telemetry.request.MonitoringRequest) AwsInstanceTemplateSpotParameters(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.aws.AwsInstanceTemplateSpotParameters) InstanceTemplateRequest(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.InstanceTemplateRequest) AwsInstanceTemplateParameters(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.aws.AwsInstanceTemplateParameters) VolumeRequest(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.VolumeRequest)

Example 2 with AwsInstanceTemplateParameters

use of com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.aws.AwsInstanceTemplateParameters in project cloudbreak by hortonworks.

the class FreeIpaTestDto method withSpotPercentage.

public FreeIpaTestDto withSpotPercentage(int spotPercentage) {
    getRequest().getInstanceGroups().forEach(instanceGroupRequest -> {
        AwsInstanceTemplateParameters aws = instanceGroupRequest.getInstanceTemplate().getAws();
        if (Objects.isNull(aws)) {
            aws = new AwsInstanceTemplateParameters();
            instanceGroupRequest.getInstanceTemplate().setAws(aws);
        }
        AwsInstanceTemplateSpotParameters spot = new AwsInstanceTemplateSpotParameters();
        spot.setPercentage(spotPercentage);
        aws.setSpot(spot);
    });
    return this;
}
Also used : AwsInstanceTemplateSpotParameters(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.aws.AwsInstanceTemplateSpotParameters) AwsInstanceTemplateParameters(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.aws.AwsInstanceTemplateParameters)

Example 3 with AwsInstanceTemplateParameters

use of com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.aws.AwsInstanceTemplateParameters in project cloudbreak by hortonworks.

the class FreeIpaTestDto method mapInstanceTemplateRequest.

private InstanceTemplateRequest mapInstanceTemplateRequest(InstanceGroupV4Request request) {
    InstanceTemplateRequest template = new InstanceTemplateRequest();
    template.setInstanceType(request.getTemplate().getInstanceType());
    template.setAttachedVolumes(request.getTemplate().getAttachedVolumes().stream().map(volreq -> {
        VolumeRequest volumeRequest = new VolumeRequest();
        volumeRequest.setCount(volreq.getCount());
        volumeRequest.setSize(volreq.getSize());
        volumeRequest.setType(volreq.getType());
        return volumeRequest;
    }).collect(Collectors.toSet()));
    Optional.ofNullable(request.getTemplate().getAws()).map(AwsInstanceTemplateV4Parameters::getSpot).map(AwsInstanceTemplateV4SpotParameters::getPercentage).ifPresent(spotPercentage -> {
        AwsInstanceTemplateParameters awsInstanceTemplateParameters = new AwsInstanceTemplateParameters();
        AwsInstanceTemplateSpotParameters awsInstanceTemplateSpotParameters = new AwsInstanceTemplateSpotParameters();
        awsInstanceTemplateSpotParameters.setPercentage(spotPercentage);
        awsInstanceTemplateParameters.setSpot(awsInstanceTemplateSpotParameters);
        template.setAws(awsInstanceTemplateParameters);
    });
    return template;
}
Also used : AwsInstanceTemplateSpotParameters(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.aws.AwsInstanceTemplateSpotParameters) InstanceTemplateRequest(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.InstanceTemplateRequest) AwsInstanceTemplateV4Parameters(com.sequenceiq.cloudbreak.api.endpoint.v4.stacks.base.parameter.template.AwsInstanceTemplateV4Parameters) AwsInstanceTemplateParameters(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.aws.AwsInstanceTemplateParameters) VolumeRequest(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.VolumeRequest)

Example 4 with AwsInstanceTemplateParameters

use of com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.aws.AwsInstanceTemplateParameters in project cloudbreak by hortonworks.

the class InstanceTemplateRequestToTemplateConverterTest method createAwsInstanceTemplateParameters.

private AwsInstanceTemplateParameters createAwsInstanceTemplateParameters(int spotPercentage, Double spotMaxPrice) {
    AwsInstanceTemplateSpotParameters spot = new AwsInstanceTemplateSpotParameters();
    spot.setPercentage(spotPercentage);
    spot.setMaxPrice(spotMaxPrice);
    AwsInstanceTemplateParameters aws = new AwsInstanceTemplateParameters();
    aws.setSpot(spot);
    return aws;
}
Also used : AwsInstanceTemplateSpotParameters(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.aws.AwsInstanceTemplateSpotParameters) AwsInstanceTemplateParameters(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.aws.AwsInstanceTemplateParameters)

Example 5 with AwsInstanceTemplateParameters

use of com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.aws.AwsInstanceTemplateParameters in project cloudbreak by hortonworks.

the class FreeIpaCreationHandlerTest method testSpotParameters.

@Test
public void testSpotParameters() {
    EnvironmentDto environmentDto = someEnvironmentWithFreeIpaCreation();
    Environment environment = new Environment();
    environment.setCreateFreeIpa(true);
    Credential credential = new Credential();
    environment.setCredential(credential);
    int spotPercentage = 100;
    Double spotMaxPrice = 0.9;
    environmentDto.getFreeIpaCreation().setAws(FreeIpaCreationAwsParametersDto.builder().withSpot(FreeIpaCreationAwsSpotParametersDto.builder().withMaxPrice(spotMaxPrice).withPercentage(spotPercentage).build()).build());
    environmentDto.setCredential(new Credential());
    ExtendedPollingResult extendedPollingResult = new ExtendedPollingResult.ExtendedPollingResultBuilder().success().build();
    when(environmentService.findEnvironmentById(ENVIRONMENT_ID)).thenReturn(Optional.of(environment));
    when(supportedPlatforms.supportedPlatformForFreeIpa(environment.getCloudPlatform())).thenReturn(true);
    when(freeIpaService.describe(ENVIRONMENT_CRN)).thenReturn(Optional.empty());
    when(connectors.getDefault(any())).thenReturn(mock(CloudConnector.class));
    when(freeIpaPollingService.pollWithTimeout(any(FreeIpaCreationRetrievalTask.class), any(FreeIpaPollerObject.class), anyLong(), anyInt(), anyInt())).thenReturn(extendedPollingResult);
    victim.accept(new Event<>(environmentDto));
    ArgumentCaptor<CreateFreeIpaRequest> freeIpaRequestCaptor = ArgumentCaptor.forClass(CreateFreeIpaRequest.class);
    verify(freeIpaService).create(freeIpaRequestCaptor.capture());
    CreateFreeIpaRequest freeIpaRequest = freeIpaRequestCaptor.getValue();
    freeIpaRequest.getInstanceGroups().stream().map(InstanceGroupRequest::getInstanceTemplate).map(InstanceTemplateRequest::getAws).map(AwsInstanceTemplateParameters::getSpot).forEach(spotParameters -> {
        assertEquals(spotMaxPrice, spotParameters.getMaxPrice());
        assertEquals(spotPercentage, spotParameters.getPercentage());
    });
}
Also used : Credential(com.sequenceiq.environment.credential.domain.Credential) CloudConnector(com.sequenceiq.cloudbreak.cloud.CloudConnector) CreateFreeIpaRequest(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.create.CreateFreeIpaRequest) EnvironmentDto(com.sequenceiq.environment.environment.dto.EnvironmentDto) DnsV1Endpoint(com.sequenceiq.freeipa.api.v1.dns.DnsV1Endpoint) InstanceTemplateRequest(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.InstanceTemplateRequest) Environment(com.sequenceiq.environment.environment.domain.Environment) ExtendedPollingResult(com.sequenceiq.cloudbreak.polling.ExtendedPollingResult) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Aggregations

AwsInstanceTemplateParameters (com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.aws.AwsInstanceTemplateParameters)5 AwsInstanceTemplateSpotParameters (com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.aws.AwsInstanceTemplateSpotParameters)5 InstanceTemplateRequest (com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.InstanceTemplateRequest)4 VolumeRequest (com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.VolumeRequest)2 CreateFreeIpaRequest (com.sequenceiq.freeipa.api.v1.freeipa.stack.model.create.CreateFreeIpaRequest)2 Maps (com.google.common.collect.Maps)1 AwsInstanceTemplateV4Parameters (com.sequenceiq.cloudbreak.api.endpoint.v4.stacks.base.parameter.template.AwsInstanceTemplateV4Parameters)1 CloudConnector (com.sequenceiq.cloudbreak.cloud.CloudConnector)1 StackTags (com.sequenceiq.cloudbreak.cloud.model.StackTags)1 AwsInstanceTemplate (com.sequenceiq.cloudbreak.cloud.model.instance.AwsInstanceTemplate)1 BadRequestException (com.sequenceiq.cloudbreak.common.exception.BadRequestException)1 Json (com.sequenceiq.cloudbreak.common.json.Json)1 CloudPlatform (com.sequenceiq.cloudbreak.common.mappable.CloudPlatform)1 NetworkConstants (com.sequenceiq.cloudbreak.common.network.NetworkConstants)1 ExtendedPollingResult (com.sequenceiq.cloudbreak.polling.ExtendedPollingResult)1 BackupRequest (com.sequenceiq.common.api.backup.request.BackupRequest)1 Features (com.sequenceiq.common.api.telemetry.model.Features)1 Logging (com.sequenceiq.common.api.telemetry.model.Logging)1 Monitoring (com.sequenceiq.common.api.telemetry.model.Monitoring)1 Telemetry (com.sequenceiq.common.api.telemetry.model.Telemetry)1