use of com.sequenceiq.freeipa.flow.instance.reboot.RebootInstanceEvent in project cloudbreak by hortonworks.
the class RepairInstancesService method rebootInstances.
/**
* If no instance passed in request, reboot all bad instances
* If instances passed in request, reboot all valid passed bad instances
* If force and instances passed in request, reboot all valid passed instances
* If force and no instances passed in request, reboot all instances
*
* @param accountId - The account id for the instance to reboot.
* @param request - A RebootInstanceRequest containing request parameters.
*/
public OperationStatus rebootInstances(String accountId, RebootInstancesRequest request) {
Stack stack = stackService.getByEnvironmentCrnAndAccountIdWithListsAndMdcContext(request.getEnvironmentCrn(), accountId);
Map<String, InstanceMetaData> allInstancesByInstanceId = getAllInstancesFromStack(stack);
Map<String, InstanceStatus> healthMap = request.isForceReboot() ? Collections.emptyMap() : getInstanceHealthMap(accountId, request.getEnvironmentCrn());
Map<String, InstanceMetaData> instancesToReboot = getInstancesToRepair(healthMap, allInstancesByInstanceId, request.getInstanceIds(), request.isForceReboot(), true);
if (instancesToReboot.keySet().isEmpty()) {
throw new NotFoundException("No unhealthy instances to reboot. Maybe use the force option.");
}
Operation operation = operationService.startOperation(accountId, OperationType.REBOOT, Set.of(stack.getEnvironmentCrn()), Collections.emptySet());
if (operation.getStatus() == OperationState.RUNNING) {
stackUpdater.updateStackStatus(stack.getId(), DetailedStackStatus.REPAIR_REQUESTED, "Reboot requested");
flowManager.notify(REBOOT_EVENT.event(), new RebootInstanceEvent(REBOOT_EVENT.event(), stack.getId(), instancesToReboot.keySet().stream().collect(Collectors.toList()), operation.getOperationId()));
}
return operationToOperationStatusConverter.convert(operation);
}
use of com.sequenceiq.freeipa.flow.instance.reboot.RebootInstanceEvent in project cloudbreak by hortonworks.
the class RebootActions method rebootAction.
@Bean(name = "REBOOT_STATE")
public Action<?, ?> rebootAction() {
return new AbstractRebootAction<>(RebootInstanceEvent.class) {
@Override
protected void doExecute(RebootContext context, RebootInstanceEvent payload, Map<Object, Object> variables) {
setOperationId(variables, payload.getOperationId());
LOGGER.info("Starting reboot for {}", context.getInstanceIds());
rebootService.startInstanceReboot(context);
sendEvent(context);
}
@Override
protected Object getFailurePayload(RebootInstanceEvent payload, Optional<RebootContext> flowContext, Exception ex) {
return new InstanceFailureEvent(payload.getResourceId(), ex, payload.getInstanceIds());
}
@Override
protected Selectable createRequest(RebootContext context) {
List<CloudInstance> cloudInstances = context.getInstanceMetaDataList().stream().map(instanceMetaData -> instanceMetaDataToCloudInstanceConverter.convert(instanceMetaData)).collect(Collectors.toList());
List<CloudResource> cloudResources = getCloudResources(context.getStack().getId());
return new RebootInstancesRequest<>(context.getCloudContext(), context.getCloudCredential(), cloudResources, cloudInstances);
}
@Override
protected RebootContext createFlowContext(FlowParameters flowParameters, StateContext<RebootState, RebootEvent> stateContext, RebootInstanceEvent payload) {
Long stackId = payload.getResourceId();
Stack stack = stackService.getStackById(stackId);
MDCBuilder.buildMdcContext(stack);
List<InstanceMetaData> instances = instanceMetaDataService.findNotTerminatedForStack(stackId).stream().filter(instanceMetaData -> payload.getInstanceIds().contains(instanceMetaData.getInstanceId())).collect(Collectors.toList());
CloudContext cloudContext = getCloudContext(stack);
Credential credential = credentialService.getCredentialByEnvCrn(stack.getEnvironmentCrn());
CloudCredential cloudCredential = credentialConverter.convert(credential);
return new RebootContext(flowParameters, stack, instances, cloudContext, cloudCredential);
}
};
}
Aggregations