use of com.sequenceiq.cloudbreak.core.flow2.validate.kerberosconfig.event.ValidateKerberosConfigEvent in project cloudbreak by hortonworks.
the class PollBindUserCreationHandler method doAccept.
@Override
protected Selectable doAccept(HandlerEvent<PollBindUserCreationEvent> event) {
PollBindUserCreationEvent data = event.getData();
FreeIpaOperationPollerObject operationPollerObject = new FreeIpaOperationPollerObject(data.getOperationId(), OperationType.BIND_USER_CREATE.name(), operationV1Endpoint, data.getAccountId(), regionAwareInternalCrnGeneratorFactory);
ExtendedPollingResult result = freeIpaOperationChecker.pollWithAbsoluteTimeout(new FreeIpaOperationCheckerTask<>(), operationPollerObject, pollIntervalMilliSec, pollWaitTimeSec, pollMaxError);
if (result.isSuccess()) {
return new ValidateKerberosConfigEvent(VALIDATE_KERBEROS_CONFIG_EXISTS_EVENT.event(), data.getResourceId(), true);
} else {
StringBuilder errorMessage = new StringBuilder("Bind user creation failed");
if (result.getException() != null) {
errorMessage.append(" with: ");
errorMessage.append(result.getException().getMessage());
}
return new StackFailureEvent(VALIDATE_KERBEROS_CONFIG_FAILED_EVENT.event(), data.getResourceId(), new Exception(errorMessage.toString()));
}
}
use of com.sequenceiq.cloudbreak.core.flow2.validate.kerberosconfig.event.ValidateKerberosConfigEvent in project cloudbreak by hortonworks.
the class CheckFreeIpaExistsHandlerTest method testFreeIpaDontExists.
@Test
public void testFreeIpaDontExists() {
Event<CheckFreeIpaExistsEvent> event = new Event<>(new CheckFreeIpaExistsEvent(1L));
when(freeIpaV1Endpoint.describeInternal(ENV_CRN, "1234")).thenThrow(new NotFoundException());
when(regionAwareInternalCrnGenerator.getInternalCrnForServiceAsString()).thenReturn("crn");
when(regionAwareInternalCrnGeneratorFactory.iam()).thenReturn(regionAwareInternalCrnGenerator);
ValidateKerberosConfigEvent result = (ValidateKerberosConfigEvent) ThreadBasedUserCrnProvider.doAs(USER_CRN, () -> underTest.doAccept(new HandlerEvent<>(event)));
assertEquals(KerberosConfigValidationEvent.VALIDATE_KERBEROS_CONFIG_EXISTS_EVENT.event(), result.selector());
assertEquals(1L, result.getResourceId());
assertFalse(result.doesFreeipaExistsForEnv());
}
use of com.sequenceiq.cloudbreak.core.flow2.validate.kerberosconfig.event.ValidateKerberosConfigEvent in project cloudbreak by hortonworks.
the class PollBindUserCreationHandlerTest method testPollingSuccessful.
@Test
public void testPollingSuccessful() {
Event<PollBindUserCreationEvent> event = new Event<>(new PollBindUserCreationEvent(1L, "opId", "acc"));
ArgumentCaptor<FreeIpaOperationPollerObject> captor = ArgumentCaptor.forClass(FreeIpaOperationPollerObject.class);
ExtendedPollingResult extendedPollingResult = new ExtendedPollingResult.ExtendedPollingResultBuilder().success().build();
when(freeIpaOperationChecker.pollWithAbsoluteTimeout(any(FreeIpaOperationCheckerTask.class), captor.capture(), anyLong(), anyLong(), anyInt())).thenReturn(extendedPollingResult);
ValidateKerberosConfigEvent result = (ValidateKerberosConfigEvent) underTest.doAccept(new HandlerEvent<>(event));
assertEquals(VALIDATE_KERBEROS_CONFIG_EXISTS_EVENT.event(), result.selector());
assertEquals(1L, result.getResourceId());
assertTrue(result.doesFreeipaExistsForEnv());
FreeIpaOperationPollerObject pollerObject = captor.getValue();
assertEquals(BIND_USER_CREATE.name(), pollerObject.getOperationType());
assertEquals("opId", pollerObject.getOperationId());
assertEquals(operationV1Endpoint, pollerObject.getOperationV1Endpoint());
}
use of com.sequenceiq.cloudbreak.core.flow2.validate.kerberosconfig.event.ValidateKerberosConfigEvent in project cloudbreak by hortonworks.
the class KerberosConfigValidationActions method kerberosConfigValidationAction.
@Bean(name = "VALIDATE_KERBEROS_CONFIG_STATE")
public Action<?, ?> kerberosConfigValidationAction() {
return new AbstractStackCreationAction<>(ValidateKerberosConfigEvent.class) {
@Override
protected void doExecute(StackCreationContext context, ValidateKerberosConfigEvent payload, Map<Object, Object> variables) {
decorateStackWithCustomDomainIfAdOrIpaJoinable(context.getStack());
Cluster cluster = context.getStack().getCluster();
if ((cluster != null && Boolean.TRUE.equals(cluster.getAutoTlsEnabled())) || payload.doesFreeipaExistsForEnv()) {
boolean hasFreeIpaKerberosConfig = clusterCreationEnvironmentValidator.hasFreeIpaKerberosConfig(context.getStack());
if (!hasFreeIpaKerberosConfig) {
throw new IllegalStateException("AutoTLS works only with FreeIPA. No FreeIPA Kerberos configuration is found.");
}
}
sendEvent(context, KerberosConfigValidationEvent.VALIDATE_KERBEROS_CONFIG_FINISHED_EVENT.selector(), payload);
}
@Override
protected Object getFailurePayload(ValidateKerberosConfigEvent payload, Optional<StackCreationContext> flowContext, Exception ex) {
return new StackFailureEvent(KerberosConfigValidationEvent.VALIDATE_KERBEROS_CONFIG_FAILED_EVENT.selector(), payload.getResourceId(), ex);
}
private void decorateStackWithCustomDomainIfAdOrIpaJoinable(Stack stack) {
Optional<KerberosConfig> kerberosConfig = measure(() -> kerberosConfigService.get(stack.getEnvironmentCrn(), stack.getName()), LOGGER, "kerberosConfigService get {} ms");
if (kerberosConfig.isPresent() && StringUtils.isNotBlank(kerberosConfig.get().getDomain())) {
LOGGER.info("Setting custom domain [{}] for cluster [{}]", kerberosConfig.get().getDomain(), stack.getName());
stack.setCustomDomain(kerberosConfig.get().getDomain());
stackService.save(stack);
} else {
LOGGER.info("No kerberos config or no custom domain found");
}
}
};
}
Aggregations