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);
}
}
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;
}
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;
}
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);
});
}
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;
}
Aggregations