use of com.sequenceiq.freeipa.flow.stack.provision.event.clusterproxy.ClusterProxyRegistrationRequest in project cloudbreak by hortonworks.
the class ClusterProxyRegistrationHandler method accept.
@Override
public void accept(Event<ClusterProxyRegistrationRequest> event) {
ClusterProxyRegistrationRequest request = event.getData();
try {
Set<InstanceMetaData> ims = instanceMetaDataService.findNotTerminatedForStack(request.getResourceId());
if (ims.isEmpty()) {
LOGGER.error("Cluster Proxy registration has failed. No available instances found for FreeIPA");
ClusterProxyRegistrationFailed response = new ClusterProxyRegistrationFailed(request.getResourceId(), new NotFoundException("Cluster Proxy registration has failed. No available instances found for FreeIPA"));
sendEvent(response, event);
} else {
boolean allInstanceHasFqdn = ims.stream().allMatch(im -> StringUtils.isNotBlank(im.getDiscoveryFQDN()));
if (allInstanceHasFqdn) {
LOGGER.info("All instances already have FQDN set, register all to cluster proxy");
clusterProxyService.registerFreeIpa(request.getResourceId());
} else {
LOGGER.info("Instances missing FQDN, fallback to PGW registration");
clusterProxyService.registerFreeIpaForBootstrap(request.getResourceId());
}
sendEvent(new ClusterProxyRegistrationSuccess(request.getResourceId()), event);
}
} catch (Exception e) {
LOGGER.error("Cluster Proxy bootstrap registration has failed", e);
sendEvent(new ClusterProxyRegistrationFailed(request.getResourceId(), e), event);
}
}
use of com.sequenceiq.freeipa.flow.stack.provision.event.clusterproxy.ClusterProxyRegistrationRequest in project cloudbreak by hortonworks.
the class ClusterProxyRegistrationHandlerTest method testRegistrationFailsWithNoInstancesFound.
@Test
public void testRegistrationFailsWithNoInstancesFound() {
when(instanceMetaDataService.findNotTerminatedForStack(1L)).thenReturn(Set.of());
underTest.accept(new Event<>(new ClusterProxyRegistrationRequest(1L)));
verifyNoInteractions(clusterProxyService);
ArgumentCaptor<String> selectorCaptor = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<Event> eventCaptor = ArgumentCaptor.forClass(Event.class);
verify(eventBus).notify(selectorCaptor.capture(), eventCaptor.capture());
String selector = selectorCaptor.getValue();
assertEquals(EventSelectorUtil.selector(ClusterProxyRegistrationFailed.class), selector);
ClusterProxyRegistrationFailed event = (ClusterProxyRegistrationFailed) eventCaptor.getValue().getData();
assertEquals(1L, event.getResourceId());
}
use of com.sequenceiq.freeipa.flow.stack.provision.event.clusterproxy.ClusterProxyRegistrationRequest in project cloudbreak by hortonworks.
the class FreeIpaUpscaleActions method updateClusterProxyRegistrationPreBootstrapAction.
@Bean(name = "UPSCALE_UPDATE_CLUSTERPROXY_REGISTRATION_PRE_BOOTSTRAP_STATE")
public Action<?, ?> updateClusterProxyRegistrationPreBootstrapAction() {
return new AbstractUpscaleAction<>(StackEvent.class) {
@Override
protected void doExecute(StackContext context, StackEvent payload, Map<Object, Object> variables) {
Stack stack = context.getStack();
stackUpdater.updateStackStatus(stack.getId(), getInProgressStatus(variables), "Update cluster proxy registration before bootstrap");
List<String> instanceIds = getInstanceIds(variables);
Set<InstanceMetaData> newInstances = instanceMetaDataService.getByInstanceIds(stack.getId(), instanceIds);
boolean allNewInstanceHasFqdn = newInstances.stream().allMatch(im -> StringUtils.isNotBlank(im.getDiscoveryFQDN()));
Selectable event = allNewInstanceHasFqdn ? new ClusterProxyRegistrationRequest(stack.getId()) : new ClusterProxyRegistrationSuccess(stack.getId());
sendEvent(context, event.selector(), event);
}
};
}
use of com.sequenceiq.freeipa.flow.stack.provision.event.clusterproxy.ClusterProxyRegistrationRequest in project cloudbreak by hortonworks.
the class ClusterProxyRegistrationHandlerTest method testRegistrationFails.
@Test
public void testRegistrationFails() {
when(instanceMetaDataService.findNotTerminatedForStack(1L)).thenReturn(Set.of(createInstanceMetadata("aa"), createInstanceMetadata(null)));
when(clusterProxyService.registerFreeIpaForBootstrap(1L)).thenThrow(new RuntimeException("bumm"));
underTest.accept(new Event<>(new ClusterProxyRegistrationRequest(1L)));
verifyNoMoreInteractions(clusterProxyService);
ArgumentCaptor<String> selectorCaptor = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<Event> eventCaptor = ArgumentCaptor.forClass(Event.class);
verify(eventBus).notify(selectorCaptor.capture(), eventCaptor.capture());
String selector = selectorCaptor.getValue();
assertEquals(EventSelectorUtil.selector(ClusterProxyRegistrationFailed.class), selector);
ClusterProxyRegistrationFailed event = (ClusterProxyRegistrationFailed) eventCaptor.getValue().getData();
assertEquals(1L, event.getResourceId());
}
use of com.sequenceiq.freeipa.flow.stack.provision.event.clusterproxy.ClusterProxyRegistrationRequest in project cloudbreak by hortonworks.
the class ClusterProxyRegistrationHandlerTest method testRegistrationFailsWithFqdnFilled.
@Test
public void testRegistrationFailsWithFqdnFilled() {
when(instanceMetaDataService.findNotTerminatedForStack(1L)).thenReturn(Set.of(createInstanceMetadata("aa"), createInstanceMetadata("test")));
when(clusterProxyService.registerFreeIpa(1L)).thenThrow(new RuntimeException("bumm"));
underTest.accept(new Event<>(new ClusterProxyRegistrationRequest(1L)));
verifyNoMoreInteractions(clusterProxyService);
ArgumentCaptor<String> selectorCaptor = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<Event> eventCaptor = ArgumentCaptor.forClass(Event.class);
verify(eventBus).notify(selectorCaptor.capture(), eventCaptor.capture());
String selector = selectorCaptor.getValue();
assertEquals(EventSelectorUtil.selector(ClusterProxyRegistrationFailed.class), selector);
ClusterProxyRegistrationFailed event = (ClusterProxyRegistrationFailed) eventCaptor.getValue().getData();
assertEquals(1L, event.getResourceId());
}
Aggregations