use of com.sequenceiq.freeipa.api.v1.kerberosmgmt.model.ServiceKeytabResponse in project cloudbreak by hortonworks.
the class KeytabConfigurationHandler method accept.
@Override
public void accept(Event<KeytabConfigurationRequest> keytabConfigurationRequestEvent) {
Long stackId = keytabConfigurationRequestEvent.getData().getResourceId();
Selectable response;
try {
Stack stack = stackService.getByIdWithListsInTransaction(stackId);
Optional<KerberosConfig> kerberosConfigOptional = kerberosConfigService.get(stack.getEnvironmentCrn(), stack.getName());
boolean childEnvironment = environmentConfigProvider.isChildEnvironment(stack.getEnvironmentCrn());
if (kerberosDetailService.keytabsShouldBeUpdated(stack.cloudPlatform(), childEnvironment, kerberosConfigOptional)) {
GatewayConfig primaryGatewayConfig = gatewayConfigService.getPrimaryGatewayConfig(stack);
ServiceKeytabResponse serviceKeytabResponse = keytabProvider.getServiceKeytabResponse(stack, primaryGatewayConfig);
KeytabModel keytabModel = buildKeytabModel(serviceKeytabResponse);
hostOrchestrator.uploadKeytabs(List.of(primaryGatewayConfig), Set.of(keytabModel), ClusterDeletionBasedExitCriteriaModel.clusterDeletionBasedModel(stackId, stack.getCluster().getId()));
}
response = new KeytabConfigurationSuccess(stackId);
} catch (Exception e) {
LOGGER.info("Error during keytab configuration, stackId: " + stackId, e);
KeytabConfigurationException configurationException = new KeytabConfigurationException("Keytab generation failed with: " + e.getMessage(), e);
response = new KeytabConfigurationFailed(stackId, configurationException);
}
eventBus.notify(response.selector(), new Event<>(keytabConfigurationRequestEvent.getHeaders(), response));
}
use of com.sequenceiq.freeipa.api.v1.kerberosmgmt.model.ServiceKeytabResponse in project cloudbreak by hortonworks.
the class ServiceKeytabServiceTest method testGenerateExistingNotCachedServiceMissing.
@Test
public void testGenerateExistingNotCachedServiceMissing() throws FreeIpaClientException {
ServiceKeytabRequest request = new ServiceKeytabRequest();
request.setEnvironmentCrn(ENVIRONMENT_CRN);
request.setServiceName(SERVICE_NAME);
request.setServerHostName(HOST);
request.setDoNotRecreateKeytab(Boolean.TRUE);
request.setServerHostNameAlias(ALIAS);
RoleRequest roleRequest = new RoleRequest();
request.setRoleRequest(roleRequest);
when(keytabCacheService.findByEnvironmentCrnAndPrincipal(ENVIRONMENT_CRN, PRINCIPAL)).thenReturn(Optional.empty());
FreeIpaClient ipaClient = mock(FreeIpaClient.class);
when(freeIpaClientFactory.getFreeIpaClientForStack(stack)).thenReturn(ipaClient);
when(roleComponent.privilegesExist(roleRequest, ipaClient)).thenReturn(Boolean.TRUE);
Service service = new Service();
service.setKrbcanonicalname(PRINCIPAL);
service.setHasKeytab(Boolean.TRUE);
when(ipaClient.showService(PRINCIPAL)).thenThrow(new FreeIpaClientException("notfound", new JsonRpcClientException(NOT_FOUND.getValue(), "notfound", null)));
when(ipaClient.addService(PRINCIPAL)).thenReturn(service);
when(keytabCommonService.constructPrincipal(SERVICE_NAME, ALIAS, REALM)).thenReturn(ALIAS_PRINCIPAL);
when(keytabCommonService.getExistingKeytab(ENVIRONMENT_CRN, PRINCIPAL, HOST, ipaClient)).thenReturn(keytabCache);
ServiceKeytabResponse result = underTest.generateServiceKeytab(request, ACCOUNT_ID);
verify(ipaClient).addServiceAlias(PRINCIPAL, ALIAS_PRINCIPAL);
verify(roleComponent).addRoleAndPrivileges(Optional.of(service), Optional.empty(), roleRequest, ipaClient);
assertEquals(keytabResponse, result.getKeytab());
assertEquals(principalResponse, result.getServicePrincipal());
}
use of com.sequenceiq.freeipa.api.v1.kerberosmgmt.model.ServiceKeytabResponse in project cloudbreak by hortonworks.
the class ServiceKeytabServiceTest method testGenerateExistingNotCachedDoNotRecreateTrueAliasExists.
@Test
public void testGenerateExistingNotCachedDoNotRecreateTrueAliasExists() throws FreeIpaClientException {
ServiceKeytabRequest request = new ServiceKeytabRequest();
request.setEnvironmentCrn(ENVIRONMENT_CRN);
request.setServiceName(SERVICE_NAME);
request.setServerHostName(HOST);
request.setDoNotRecreateKeytab(Boolean.TRUE);
request.setServerHostNameAlias(ALIAS);
RoleRequest roleRequest = new RoleRequest();
request.setRoleRequest(roleRequest);
when(keytabCacheService.findByEnvironmentCrnAndPrincipal(ENVIRONMENT_CRN, PRINCIPAL)).thenReturn(Optional.empty());
FreeIpaClient ipaClient = mock(FreeIpaClient.class);
when(freeIpaClientFactory.getFreeIpaClientForStack(stack)).thenReturn(ipaClient);
when(roleComponent.privilegesExist(roleRequest, ipaClient)).thenReturn(Boolean.TRUE);
Service service = new Service();
service.setKrbcanonicalname(PRINCIPAL);
service.setHasKeytab(Boolean.TRUE);
when(ipaClient.showService(PRINCIPAL)).thenReturn(service);
when(keytabCommonService.constructPrincipal(SERVICE_NAME, ALIAS, REALM)).thenReturn(ALIAS_PRINCIPAL);
when(keytabCommonService.getExistingKeytab(ENVIRONMENT_CRN, PRINCIPAL, HOST, ipaClient)).thenReturn(keytabCache);
doThrow(new FreeIpaClientException("notfound", new JsonRpcClientException(EXECUTION_ERROR.getValue(), "notfound", null))).when(ipaClient).addServiceAlias(PRINCIPAL, ALIAS_PRINCIPAL);
ServiceKeytabResponse result = underTest.generateServiceKeytab(request, ACCOUNT_ID);
verify(roleComponent).addRoleAndPrivileges(Optional.of(service), Optional.empty(), roleRequest, ipaClient);
assertEquals(keytabResponse, result.getKeytab());
assertEquals(principalResponse, result.getServicePrincipal());
}
use of com.sequenceiq.freeipa.api.v1.kerberosmgmt.model.ServiceKeytabResponse in project cloudbreak by hortonworks.
the class ServiceKeytabServiceTest method testGetExistingFromIpa.
@Test
public void testGetExistingFromIpa() throws FreeIpaClientException {
ServiceKeytabRequest request = new ServiceKeytabRequest();
request.setEnvironmentCrn(ENVIRONMENT_CRN);
request.setServiceName(SERVICE_NAME);
request.setServerHostName(HOST);
when(keytabCacheService.findByEnvironmentCrnAndPrincipal(ENVIRONMENT_CRN, PRINCIPAL)).thenReturn(Optional.empty());
FreeIpaClient ipaClient = mock(FreeIpaClient.class);
when(freeIpaClientFactory.getFreeIpaClientForStack(stack)).thenReturn(ipaClient);
when(keytabCommonService.getExistingKeytab(ENVIRONMENT_CRN, PRINCIPAL, HOST, ipaClient)).thenReturn(keytabCache);
ServiceKeytabResponse result = underTest.getExistingServiceKeytab(request, ACCOUNT_ID);
assertEquals(keytabResponse, result.getKeytab());
assertEquals(principalResponse, result.getServicePrincipal());
}
use of com.sequenceiq.freeipa.api.v1.kerberosmgmt.model.ServiceKeytabResponse in project cloudbreak by hortonworks.
the class ServiceKeytabService method createServiceKeytabResponse.
private ServiceKeytabResponse createServiceKeytabResponse(KeytabCache serviceKeytab) {
ServiceKeytabResponse response = new ServiceKeytabResponse();
response.setKeytab(secretResponseConverter.convert(serviceKeytab.getKeytab().getSecret()));
response.setServicePrincipal(secretResponseConverter.convert(serviceKeytab.getPrincipal().getSecret()));
return response;
}
Aggregations