Search in sources :

Example 11 with Status

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

the class FreeIpaPollerProvider method upgradeCcmPoller.

public AttemptResult<Void> upgradeCcmPoller(Long envId, String envCrn, String operationId) {
    if (PollGroup.CANCELLED.equals(EnvironmentInMemoryStateStore.get(envId))) {
        LOGGER.info("FreeIpa polling cancelled in inmemory store, id: " + envId);
        return AttemptResults.breakFor("FreeIpa polling cancelled in inmemory store, id: " + envId);
    }
    OperationStatus operationStatus = freeIpaService.getOperationStatus(operationId);
    LOGGER.debug("Operation status: {}", operationStatus);
    if (operationCompleted(operationStatus)) {
        return AttemptResults.finishWith(null);
    } else {
        return checkUpgradeCcmStatus(operationStatus);
    }
}
Also used : OperationStatus(com.sequenceiq.freeipa.api.v1.operation.model.OperationStatus) SyncOperationStatus(com.sequenceiq.freeipa.api.v1.freeipa.user.model.SyncOperationStatus)

Example 12 with Status

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

the class RepairInstancesServiceTest method createStack.

private Stack createStack(Status stackStatus, List<InstanceStatus> instanceStatuses, int requestedInstancesWithoutInstanceIds) {
    Stack stack = new Stack();
    stack.setId(STACK_ID);
    stack.setEnvironmentCrn(ENVIRONMENT_ID1);
    StackStatus s = new StackStatus();
    s.setStatus(stackStatus);
    stack.setStackStatus(s);
    int i = 1;
    Set<InstanceMetaData> instanceMetaDataSet = new HashSet<>();
    for (InstanceStatus instanceStatus : instanceStatuses) {
        InstanceMetaData instanceMetaData = new InstanceMetaData();
        instanceMetaData.setInstanceId("i-" + i);
        instanceMetaData.setInstanceStatus(instanceStatus);
        instanceMetaDataSet.add(instanceMetaData);
        i++;
    }
    for (i = 0; i < requestedInstancesWithoutInstanceIds; i++) {
        InstanceMetaData instanceMetaData = new InstanceMetaData();
        instanceMetaData.setInstanceStatus(InstanceStatus.REQUESTED);
        instanceMetaDataSet.add(instanceMetaData);
    }
    InstanceGroup instanceGroup = new InstanceGroup();
    instanceGroup.setInstanceMetaData(instanceMetaDataSet);
    instanceGroup.setNodeCount(instanceMetaDataSet.size());
    stack.setInstanceGroups(Set.of(instanceGroup));
    return stack;
}
Also used : InstanceMetaData(com.sequenceiq.freeipa.entity.InstanceMetaData) InstanceStatus(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.InstanceStatus) DetailedStackStatus(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.DetailedStackStatus) StackStatus(com.sequenceiq.freeipa.entity.StackStatus) Stack(com.sequenceiq.freeipa.entity.Stack) HashSet(java.util.HashSet) InstanceGroup(com.sequenceiq.freeipa.entity.InstanceGroup)

Example 13 with Status

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

the class FreeIpaCreationRetrievalTask method checkStatus.

@Override
public boolean checkStatus(FreeIpaPollerObject freeIpaPollerObject) {
    String environmentCrn = freeIpaPollerObject.getEnvironmentCrn();
    try {
        LOGGER.info("Checking the state of FreeIpa creation progress for environment: '{}'", environmentCrn);
        Optional<DescribeFreeIpaResponse> freeIpaOptional = freeIpaService.describe(environmentCrn);
        if (freeIpaOptional.isEmpty()) {
            throw new FreeIpaOperationFailedException("FreeIpa cluster not found for environment: " + environmentCrn);
        }
        DescribeFreeIpaResponse freeIpa = freeIpaOptional.get();
        if (freeIpa.getStatus().isDeletionInProgress() || freeIpa.getStatus().isSuccessfullyDeleted()) {
            LOGGER.error("FreeIpa '{}' '{}' is getting terminated (status:'{}'), polling is cancelled.", freeIpa.getName(), freeIpa.getCrn(), freeIpa.getStatus());
            throw new FreeIpaOperationFailedException("FreeIpa instance deleted under the creation process.");
        }
        if (freeIpa.getStatus().isFailed()) {
            LOGGER.error("FreeIpa '{}' '{}' is in failed state (status:'{}'), polling is cancelled.", freeIpa.getName(), freeIpa.getCrn(), freeIpa.getStatus());
            throw new FreeIpaOperationFailedException(String.format("Reason: '%s'", freeIpa.getStatusReason()));
        }
        if (freeIpa.getAvailabilityStatus() != null && freeIpa.getAvailabilityStatus().isAvailable()) {
            return true;
        }
    } catch (Exception e) {
        throw new FreeIpaOperationFailedException("FreeIpa creation operation failed. " + e.getMessage(), e);
    }
    return false;
}
Also used : DescribeFreeIpaResponse(com.sequenceiq.freeipa.api.v1.freeipa.stack.model.describe.DescribeFreeIpaResponse) FreeIpaOperationFailedException(com.sequenceiq.environment.exception.FreeIpaOperationFailedException) FreeIpaOperationFailedException(com.sequenceiq.environment.exception.FreeIpaOperationFailedException)

Example 14 with Status

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

the class UserSyncForEnvService method synchronizeUsers.

public void synchronizeUsers(String operationId, String accountId, List<Stack> stacks, UserSyncRequestFilter userSyncFilter, UserSyncOptions options, long startTime) {
    operationService.tryWithOperationCleanup(operationId, accountId, () -> {
        Set<String> environmentCrns = stacks.stream().map(Stack::getEnvironmentCrn).collect(Collectors.toSet());
        UserSyncLogEvent logUserSyncEvent = options.isFullSync() ? FULL_USER_SYNC : PARTIAL_USER_SYNC;
        LOGGER.info("Starting {} for environments {} with operationId {} ...", logUserSyncEvent, environmentCrns, operationId);
        if (options.isFullSync()) {
            umsVirtualGroupCreateService.createVirtualGroups(accountId, stacks);
        }
        Map<String, Future<SyncStatusDetail>> statusFutures = startAsyncSyncsForStacks(operationId, accountId, stacks, userSyncFilter, options, environmentCrns);
        List<SuccessDetails> success = new ArrayList<>();
        List<FailureDetails> failure = new ArrayList<>();
        statusFutures.forEach((envCrn, statusFuture) -> {
            try {
                SyncStatusDetail statusDetail = waitForSyncStatusDetailResult(startTime, statusFuture, accountId);
                switch(statusDetail.getStatus()) {
                    case COMPLETED:
                        success.add(new SuccessDetails(envCrn));
                        break;
                    case FAILED:
                        failure.add(createFailureDetails(envCrn, statusDetail.getDetails(), statusDetail.getWarnings()));
                        break;
                    default:
                        failure.add(createFailureDetails(envCrn, "Unexpected status: " + statusDetail.getStatus(), statusDetail.getWarnings()));
                        break;
                }
            } catch (TimeoutException e) {
                LOGGER.warn("Sync timed out for env: {}", envCrn, e);
                statusFuture.cancel(true);
                failure.add(new FailureDetails(envCrn, "Timed out"));
            } catch (InterruptedException | ExecutionException e) {
                LOGGER.error("Sync is interrupted for env: {}", envCrn, e);
                failure.add(new FailureDetails(envCrn, e.getLocalizedMessage()));
            }
        });
        operationService.completeOperation(accountId, operationId, success, failure);
        LOGGER.info("Finished {} for environments {} with operationId {}.", logUserSyncEvent, environmentCrns, operationId);
    });
}
Also used : SuccessDetails(com.sequenceiq.freeipa.api.v1.freeipa.user.model.SuccessDetails) ArrayList(java.util.ArrayList) FailureDetails(com.sequenceiq.freeipa.api.v1.freeipa.user.model.FailureDetails) SyncStatusDetail(com.sequenceiq.freeipa.service.freeipa.user.model.SyncStatusDetail) Future(java.util.concurrent.Future) ExecutionException(java.util.concurrent.ExecutionException) TimeoutException(java.util.concurrent.TimeoutException)

Example 15 with Status

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

the class UserSyncService method performSyncForStacks.

private Operation performSyncForStacks(String accountId, UserSyncRequestFilter userSyncFilter, UserSyncOptions options, List<Stack> stacks) {
    logAffectedStacks(stacks);
    Set<String> environmentCrns = stacks.stream().map(Stack::getEnvironmentCrn).collect(Collectors.toSet());
    Operation operation = operationService.startOperation(accountId, OperationType.USER_SYNC, environmentCrns, union(userSyncFilter.getUserCrnFilter(), userSyncFilter.getMachineUserCrnFilter()));
    LOGGER.info("Starting operation [{}] with status [{}]", operation.getOperationId(), operation.getStatus());
    if (operation.getStatus() == OperationState.RUNNING) {
        operationService.tryWithOperationCleanup(operation.getOperationId(), accountId, () -> ThreadBasedUserCrnProvider.doAs(regionAwareInternalCrnGeneratorFactory.iam().getInternalCrnForServiceAsString(), () -> {
            if (userSyncFilter.isFullSync()) {
                stacks.forEach(stack -> updateUserSyncStatusForStack(operation, stack));
            }
            asyncSynchronizeUsers(operation.getOperationId(), accountId, stacks, userSyncFilter, options);
        }));
    }
    return operation;
}
Also used : EntitlementService(com.sequenceiq.cloudbreak.auth.altus.EntitlementService) LoggerFactory(org.slf4j.LoggerFactory) CustomCheckUtil(com.sequenceiq.authorization.service.CustomCheckUtil) MDCBuilder(com.sequenceiq.cloudbreak.logger.MDCBuilder) Inject(javax.inject.Inject) Value(org.springframework.beans.factory.annotation.Value) Future(java.util.concurrent.Future) ThreadBasedUserCrnProvider(com.sequenceiq.cloudbreak.auth.ThreadBasedUserCrnProvider) Service(org.springframework.stereotype.Service) Operation(com.sequenceiq.freeipa.entity.Operation) Map(java.util.Map) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) Qualifier(org.springframework.beans.factory.annotation.Qualifier) WorkloadCredentialsUpdateType(com.sequenceiq.freeipa.api.v1.freeipa.user.model.WorkloadCredentialsUpdateType) OperationType(com.sequenceiq.freeipa.api.v1.operation.model.OperationType) UsersyncConfig(com.sequenceiq.freeipa.configuration.UsersyncConfig) StackService(com.sequenceiq.freeipa.service.stack.StackService) CommonPermissionCheckingUtils(com.sequenceiq.authorization.service.CommonPermissionCheckingUtils) NotFoundException(com.sequenceiq.cloudbreak.common.exception.NotFoundException) ExecutorService(java.util.concurrent.ExecutorService) Stack(com.sequenceiq.freeipa.entity.Stack) Logger(org.slf4j.Logger) OperationState(com.sequenceiq.freeipa.api.v1.operation.model.OperationState) UserSyncOptions(com.sequenceiq.freeipa.service.freeipa.user.model.UserSyncOptions) Collection(java.util.Collection) Set(java.util.Set) UserSyncStatus(com.sequenceiq.freeipa.entity.UserSyncStatus) Collectors(java.util.stream.Collectors) RegionAwareInternalCrnGeneratorFactory(com.sequenceiq.cloudbreak.auth.crn.RegionAwareInternalCrnGeneratorFactory) OperationService(com.sequenceiq.freeipa.service.operation.OperationService) TimeUnit(java.util.concurrent.TimeUnit) List(java.util.List) Stream(java.util.stream.Stream) Optional(java.util.Optional) AuthorizationResourceAction(com.sequenceiq.authorization.resource.AuthorizationResourceAction) Operation(com.sequenceiq.freeipa.entity.Operation)

Aggregations

Test (org.junit.jupiter.api.Test)30 SyncOperationStatus (com.sequenceiq.freeipa.api.v1.freeipa.user.model.SyncOperationStatus)23 Stack (com.sequenceiq.freeipa.entity.Stack)16 DetailedStackStatus (com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.DetailedStackStatus)14 DescribeFreeIpaResponse (com.sequenceiq.freeipa.api.v1.freeipa.stack.model.describe.DescribeFreeIpaResponse)14 Operation (com.sequenceiq.freeipa.entity.Operation)14 OperationToSyncOperationStatus (com.sequenceiq.freeipa.converter.freeipa.user.OperationToSyncOperationStatus)12 StackStatus (com.sequenceiq.freeipa.entity.StackStatus)11 InstanceStatus (com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.instance.InstanceStatus)10 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)10 UserSyncRequestFilter (com.sequenceiq.freeipa.service.freeipa.user.UserSyncRequestFilter)8 OperationStatus (com.sequenceiq.freeipa.api.v1.operation.model.OperationStatus)7 ArrayList (java.util.ArrayList)7 List (java.util.List)7 Map (java.util.Map)7 EnumSource (org.junit.jupiter.params.provider.EnumSource)7 Status (com.sequenceiq.freeipa.api.v1.freeipa.stack.model.common.Status)6 SynchronizeAllUsersRequest (com.sequenceiq.freeipa.api.v1.freeipa.user.model.SynchronizeAllUsersRequest)6 InstanceMetaData (com.sequenceiq.freeipa.entity.InstanceMetaData)6 FailureDetails (com.sequenceiq.freeipa.api.v1.freeipa.user.model.FailureDetails)5