Search in sources :

Example 1 with LoadBalancerUpdateEvent

use of com.sequenceiq.environment.environment.flow.loadbalancer.event.LoadBalancerUpdateEvent in project cloudbreak by hortonworks.

the class EnvironmentReactorFlowManager method triggerLoadBalancerUpdateFlow.

public FlowIdentifier triggerLoadBalancerUpdateFlow(EnvironmentDto environmentDto, Long envId, String envName, String envCrn, PublicEndpointAccessGateway endpointAccessGateway, Set<String> subnetIds, String userCrn) {
    LOGGER.info("Load balancer update flow triggered.");
    if (PublicEndpointAccessGateway.ENABLED.equals(endpointAccessGateway)) {
        if (subnetIds != null && !subnetIds.isEmpty()) {
            LOGGER.debug("Adding Endpoint Gateway with subnet ids {}", subnetIds);
        } else {
            LOGGER.debug("Adding Endpoint Gateway using environment subnets.");
        }
    }
    LoadBalancerUpdateEvent loadBalancerUpdateEvent = LoadBalancerUpdateEvent.LoadBalancerUpdateEventBuilder.aLoadBalancerUpdateEvent().withAccepted(new Promise<>()).withSelector(LoadBalancerUpdateStateSelectors.LOAD_BALANCER_UPDATE_START_EVENT.selector()).withResourceId(envId).withResourceName(envName).withResourceCrn(envCrn).withEnvironmentDto(environmentDto).withPublicEndpointAccessGateway(endpointAccessGateway).withSubnetIds(subnetIds).build();
    return eventSender.sendEvent(loadBalancerUpdateEvent, new Event.Headers(getFlowTriggerUsercrn(userCrn)));
}
Also used : LoadBalancerUpdateEvent(com.sequenceiq.environment.environment.flow.loadbalancer.event.LoadBalancerUpdateEvent) EnvStackConfigUpdatesEvent(com.sequenceiq.environment.environment.flow.config.update.event.EnvStackConfigUpdatesEvent) EnvCreationEvent(com.sequenceiq.environment.environment.flow.creation.event.EnvCreationEvent) Event(reactor.bus.Event) EnvStopEvent(com.sequenceiq.environment.environment.flow.stop.event.EnvStopEvent) EnvStartEvent(com.sequenceiq.environment.environment.flow.start.event.EnvStartEvent) LoadBalancerUpdateEvent(com.sequenceiq.environment.environment.flow.loadbalancer.event.LoadBalancerUpdateEvent) UpgradeCcmEvent(com.sequenceiq.environment.environment.flow.upgrade.ccm.event.UpgradeCcmEvent) EnvDeleteEvent(com.sequenceiq.environment.environment.flow.deletion.event.EnvDeleteEvent)

Example 2 with LoadBalancerUpdateEvent

use of com.sequenceiq.environment.environment.flow.loadbalancer.event.LoadBalancerUpdateEvent in project cloudbreak by hortonworks.

the class LoadBalancerUpdateActions method stackLoadBalancerUpdate.

@Bean(name = "STACK_UPDATE_STATE")
public Action<?, ?> stackLoadBalancerUpdate() {
    return new AbstractLoadBalancerUpdateAction<>(LoadBalancerUpdateEvent.class) {

        @Override
        protected void doExecute(CommonContext context, LoadBalancerUpdateEvent payload, Map<Object, Object> variables) {
            EnvironmentStatus environmentStatus = EnvironmentStatus.LOAD_BALANCER_STACK_UPDATE_STARTED;
            ResourceEvent resourceEvent = ResourceEvent.ENVIRONMENT_LOAD_BALANCER_STACK_UPDATE_STARTED;
            LoadBalancerUpdateState loadBalancerUpdateState = LoadBalancerUpdateState.STACK_UPDATE_STATE;
            EnvironmentDto envDto = environmentStatusUpdateService.updateEnvironmentStatusAndNotify(context, payload, environmentStatus, resourceEvent, loadBalancerUpdateState);
            EnvironmentLoadBalancerDto environmentLoadBalancerDto = EnvironmentLoadBalancerDto.builder().withId(envDto.getId()).withEnvironmentDto(payload.getEnvironmentDto()).withEndpointAccessGateway(payload.getEndpointAccessGateway()).withEndpointGatewaySubnetIds(payload.getSubnetIds()).build();
            sendEvent(context, LoadBalancerUpdateHandlerSelectors.STACK_UPDATE_HANDLER_EVENT.selector(), environmentLoadBalancerDto);
        }
    };
}
Also used : EnvironmentLoadBalancerDto(com.sequenceiq.environment.environment.dto.EnvironmentLoadBalancerDto) EnvironmentStatus(com.sequenceiq.environment.environment.EnvironmentStatus) EnvironmentDto(com.sequenceiq.environment.environment.dto.EnvironmentDto) CommonContext(com.sequenceiq.flow.core.CommonContext) LoadBalancerUpdateEvent(com.sequenceiq.environment.environment.flow.loadbalancer.event.LoadBalancerUpdateEvent) ResourceEvent(com.sequenceiq.cloudbreak.event.ResourceEvent) Map(java.util.Map) Bean(org.springframework.context.annotation.Bean)

Example 3 with LoadBalancerUpdateEvent

use of com.sequenceiq.environment.environment.flow.loadbalancer.event.LoadBalancerUpdateEvent in project cloudbreak by hortonworks.

the class LoadBalancerUpdateActions method environmentLoadBalancerUpdate.

@Bean(name = "ENVIRONMENT_UPDATE_STATE")
public Action<?, ?> environmentLoadBalancerUpdate() {
    return new AbstractLoadBalancerUpdateAction<>(LoadBalancerUpdateEvent.class) {

        @Override
        protected void doExecute(CommonContext context, LoadBalancerUpdateEvent payload, Map<Object, Object> variables) {
            EnvironmentStatus environmentStatus = EnvironmentStatus.LOAD_BALANCER_ENV_UPDATE_STARTED;
            ResourceEvent resourceEvent = ResourceEvent.ENVIRONMENT_LOAD_BALANCER_ENV_UPDATE_STARTED;
            LoadBalancerUpdateState loadBalancerUpdateState = LoadBalancerUpdateState.ENVIRONMENT_UPDATE_STATE;
            EnvironmentDto envDto = environmentStatusUpdateService.updateEnvironmentStatusAndNotify(context, payload, environmentStatus, resourceEvent, loadBalancerUpdateState);
            EnvironmentLoadBalancerDto environmentLoadBalancerDto = EnvironmentLoadBalancerDto.builder().withId(envDto.getId()).withEnvironmentDto(payload.getEnvironmentDto()).withEndpointAccessGateway(payload.getEndpointAccessGateway()).withEndpointGatewaySubnetIds(payload.getSubnetIds()).build();
            sendEvent(context, LoadBalancerUpdateHandlerSelectors.ENVIRONMENT_UPDATE_HANDLER_EVENT.selector(), environmentLoadBalancerDto);
        }
    };
}
Also used : EnvironmentLoadBalancerDto(com.sequenceiq.environment.environment.dto.EnvironmentLoadBalancerDto) EnvironmentStatus(com.sequenceiq.environment.environment.EnvironmentStatus) EnvironmentDto(com.sequenceiq.environment.environment.dto.EnvironmentDto) CommonContext(com.sequenceiq.flow.core.CommonContext) LoadBalancerUpdateEvent(com.sequenceiq.environment.environment.flow.loadbalancer.event.LoadBalancerUpdateEvent) ResourceEvent(com.sequenceiq.cloudbreak.event.ResourceEvent) Map(java.util.Map) Bean(org.springframework.context.annotation.Bean)

Example 4 with LoadBalancerUpdateEvent

use of com.sequenceiq.environment.environment.flow.loadbalancer.event.LoadBalancerUpdateEvent in project cloudbreak by hortonworks.

the class LoadBalancerEnvUpdateHandler method accept.

@Override
public void accept(Event<EnvironmentLoadBalancerDto> envLoadBalancerDtoEvent) {
    EnvironmentLoadBalancerDto environmentLoadBalancerDto = envLoadBalancerDtoEvent.getData();
    EnvironmentDto environmentDto = environmentLoadBalancerDto.getEnvironmentDto();
    requireNonNull(environmentDto);
    requireNonNull(environmentDto.getNetwork());
    try {
        Environment environment = environmentService.findEnvironmentByIdOrThrow(environmentDto.getResourceId());
        requireNonNull(environment);
        requireNonNull(environment.getNetwork());
        LOGGER.debug("Starting endpoint gateway update for environment {}", environmentDto.getResourceCrn());
        NetworkDto networkDto = environmentDto.getNetwork();
        if (PublicEndpointAccessGateway.ENABLED.equals(environmentLoadBalancerDto.getEndpointAccessGateway())) {
            LOGGER.debug("Enabling endpoint gateway on environment network.");
            networkDto.setPublicEndpointAccessGateway(PublicEndpointAccessGateway.ENABLED);
            Map<String, CloudSubnet> tempSubnetMetas = environmentLoadBalancerDto.getEndpointGatewaySubnetIds().stream().collect(toMap(id -> id, id -> new CloudSubnet(id, null)));
            networkDto.setEndpointGatewaySubnetMetas(tempSubnetMetas);
            LOGGER.debug("Fetching metadata for endpoint gateway subnets.");
            Map<String, CloudSubnet> endpointGatewaySubnetMetas = networkValidationService.getEndpointGatewaySubnetMetadata(environment, environmentDto);
            LOGGER.debug("Updating environment network settings.");
            environment.getNetwork().setPublicEndpointAccessGateway(PublicEndpointAccessGateway.ENABLED);
            environment.getNetwork().setEndpointGatewaySubnetMetas(endpointGatewaySubnetMetas);
            LOGGER.debug("Persisting updated network to database.");
            networkService.save(environment.getNetwork());
        }
        LOGGER.debug("Environment network load balancer update complete.");
        LoadBalancerUpdateEvent loadBalancerUpdateEvent = LoadBalancerUpdateEvent.LoadBalancerUpdateEventBuilder.aLoadBalancerUpdateEvent().withSelector(LoadBalancerUpdateStateSelectors.LOAD_BALANCER_STACK_UPDATE_EVENT.selector()).withResourceId(environment.getId()).withResourceName(environment.getResourceName()).withResourceCrn(environment.getResourceCrn()).withEnvironmentDto(environmentDto).withEnvironment(environment).withPublicEndpointAccessGateway(environmentLoadBalancerDto.getEndpointAccessGateway()).withSubnetIds(environmentLoadBalancerDto.getEndpointGatewaySubnetIds()).build();
        eventSender().sendEvent(loadBalancerUpdateEvent, envLoadBalancerDtoEvent.getHeaders());
    } catch (Exception e) {
        LOGGER.error("Caught exception while updating environment state with laod balancers.", e);
        LoadBalancerUpdateFailedEvent failedEvent = new LoadBalancerUpdateFailedEvent(environmentDto, e, EnvironmentStatus.LOAD_BALANCER_ENV_UPDATE_FAILED);
        eventSender().sendEvent(failedEvent, envLoadBalancerDtoEvent.getHeaders());
    }
}
Also used : LoadBalancerUpdateStateSelectors(com.sequenceiq.environment.environment.flow.loadbalancer.event.LoadBalancerUpdateStateSelectors) Environment(com.sequenceiq.environment.environment.domain.Environment) CloudSubnet(com.sequenceiq.cloudbreak.cloud.model.CloudSubnet) EventSender(com.sequenceiq.flow.reactor.api.event.EventSender) Logger(org.slf4j.Logger) LoadBalancerUpdateFailedEvent(com.sequenceiq.environment.environment.flow.loadbalancer.event.LoadBalancerUpdateFailedEvent) LoggerFactory(org.slf4j.LoggerFactory) EnvironmentDto(com.sequenceiq.environment.environment.dto.EnvironmentDto) EnvironmentService(com.sequenceiq.environment.environment.service.EnvironmentService) NetworkMetadataValidationService(com.sequenceiq.environment.environment.service.network.NetworkMetadataValidationService) LoadBalancerUpdateEvent(com.sequenceiq.environment.environment.flow.loadbalancer.event.LoadBalancerUpdateEvent) NetworkService(com.sequenceiq.environment.network.NetworkService) EnvironmentLoadBalancerDto(com.sequenceiq.environment.environment.dto.EnvironmentLoadBalancerDto) Component(org.springframework.stereotype.Component) Collectors.toMap(java.util.stream.Collectors.toMap) Event(reactor.bus.Event) NetworkDto(com.sequenceiq.environment.network.dto.NetworkDto) EventSenderAwareHandler(com.sequenceiq.flow.reactor.api.handler.EventSenderAwareHandler) PublicEndpointAccessGateway(com.sequenceiq.common.api.type.PublicEndpointAccessGateway) LoadBalancerUpdateHandlerSelectors(com.sequenceiq.environment.environment.flow.loadbalancer.event.LoadBalancerUpdateHandlerSelectors) Objects.requireNonNull(java.util.Objects.requireNonNull) Map(java.util.Map) EnvironmentStatus(com.sequenceiq.environment.environment.EnvironmentStatus) EnvironmentLoadBalancerDto(com.sequenceiq.environment.environment.dto.EnvironmentLoadBalancerDto) NetworkDto(com.sequenceiq.environment.network.dto.NetworkDto) EnvironmentDto(com.sequenceiq.environment.environment.dto.EnvironmentDto) LoadBalancerUpdateFailedEvent(com.sequenceiq.environment.environment.flow.loadbalancer.event.LoadBalancerUpdateFailedEvent) Environment(com.sequenceiq.environment.environment.domain.Environment) LoadBalancerUpdateEvent(com.sequenceiq.environment.environment.flow.loadbalancer.event.LoadBalancerUpdateEvent) CloudSubnet(com.sequenceiq.cloudbreak.cloud.model.CloudSubnet)

Example 5 with LoadBalancerUpdateEvent

use of com.sequenceiq.environment.environment.flow.loadbalancer.event.LoadBalancerUpdateEvent in project cloudbreak by hortonworks.

the class LoadBalancerStackUpdateHandler method accept.

@Override
public void accept(Event<EnvironmentLoadBalancerDto> envLoadBalancerDtoEvent) {
    EnvironmentLoadBalancerDto environmentLoadBalancerDto = envLoadBalancerDtoEvent.getData();
    EnvironmentDto environmentDto = environmentLoadBalancerDto.getEnvironmentDto();
    try {
        LOGGER.debug("Initating stack load balancer update");
        loadBalancerPollerService.updateStackWithLoadBalancer(environmentDto.getId(), environmentDto.getResourceCrn(), environmentDto.getName(), environmentLoadBalancerDto.getEndpointAccessGateway());
        LOGGER.debug("Stack load balancer update complete.");
        LoadBalancerUpdateEvent loadBalancerUpdateEvent = LoadBalancerUpdateEvent.LoadBalancerUpdateEventBuilder.aLoadBalancerUpdateEvent().withSelector(LoadBalancerUpdateStateSelectors.FINISH_LOAD_BALANCER_UPDATE_EVENT.selector()).withResourceId(environmentDto.getResourceId()).withResourceName(environmentDto.getName()).withResourceCrn(environmentDto.getResourceCrn()).withEnvironmentDto(environmentDto).withPublicEndpointAccessGateway(environmentLoadBalancerDto.getEndpointAccessGateway()).withSubnetIds(environmentLoadBalancerDto.getEndpointGatewaySubnetIds()).build();
        eventSender().sendEvent(loadBalancerUpdateEvent, envLoadBalancerDtoEvent.getHeaders());
    } catch (Exception e) {
        LoadBalancerUpdateFailedEvent failedEvent = new LoadBalancerUpdateFailedEvent(environmentDto, e, EnvironmentStatus.LOAD_BALANCER_STACK_UPDATE_FAILED);
        eventSender().sendEvent(failedEvent, envLoadBalancerDtoEvent.getHeaders());
    }
}
Also used : EnvironmentLoadBalancerDto(com.sequenceiq.environment.environment.dto.EnvironmentLoadBalancerDto) EnvironmentDto(com.sequenceiq.environment.environment.dto.EnvironmentDto) LoadBalancerUpdateFailedEvent(com.sequenceiq.environment.environment.flow.loadbalancer.event.LoadBalancerUpdateFailedEvent) LoadBalancerUpdateEvent(com.sequenceiq.environment.environment.flow.loadbalancer.event.LoadBalancerUpdateEvent)

Aggregations

LoadBalancerUpdateEvent (com.sequenceiq.environment.environment.flow.loadbalancer.event.LoadBalancerUpdateEvent)5 EnvironmentDto (com.sequenceiq.environment.environment.dto.EnvironmentDto)4 EnvironmentLoadBalancerDto (com.sequenceiq.environment.environment.dto.EnvironmentLoadBalancerDto)4 EnvironmentStatus (com.sequenceiq.environment.environment.EnvironmentStatus)3 Map (java.util.Map)3 ResourceEvent (com.sequenceiq.cloudbreak.event.ResourceEvent)2 LoadBalancerUpdateFailedEvent (com.sequenceiq.environment.environment.flow.loadbalancer.event.LoadBalancerUpdateFailedEvent)2 CommonContext (com.sequenceiq.flow.core.CommonContext)2 Bean (org.springframework.context.annotation.Bean)2 Event (reactor.bus.Event)2 CloudSubnet (com.sequenceiq.cloudbreak.cloud.model.CloudSubnet)1 PublicEndpointAccessGateway (com.sequenceiq.common.api.type.PublicEndpointAccessGateway)1 Environment (com.sequenceiq.environment.environment.domain.Environment)1 EnvStackConfigUpdatesEvent (com.sequenceiq.environment.environment.flow.config.update.event.EnvStackConfigUpdatesEvent)1 EnvCreationEvent (com.sequenceiq.environment.environment.flow.creation.event.EnvCreationEvent)1 EnvDeleteEvent (com.sequenceiq.environment.environment.flow.deletion.event.EnvDeleteEvent)1 LoadBalancerUpdateHandlerSelectors (com.sequenceiq.environment.environment.flow.loadbalancer.event.LoadBalancerUpdateHandlerSelectors)1 LoadBalancerUpdateStateSelectors (com.sequenceiq.environment.environment.flow.loadbalancer.event.LoadBalancerUpdateStateSelectors)1 EnvStartEvent (com.sequenceiq.environment.environment.flow.start.event.EnvStartEvent)1 EnvStopEvent (com.sequenceiq.environment.environment.flow.stop.event.EnvStopEvent)1