Search in sources :

Example 1 with ClusterProxyRegistrationRequest

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);
    }
}
Also used : InstanceMetaData(com.sequenceiq.freeipa.entity.InstanceMetaData) ClusterProxyRegistrationFailed(com.sequenceiq.freeipa.flow.stack.provision.event.clusterproxy.ClusterProxyRegistrationFailed) ClusterProxyRegistrationRequest(com.sequenceiq.freeipa.flow.stack.provision.event.clusterproxy.ClusterProxyRegistrationRequest) NotFoundException(com.sequenceiq.cloudbreak.common.exception.NotFoundException) ClusterProxyRegistrationSuccess(com.sequenceiq.freeipa.flow.stack.provision.event.clusterproxy.ClusterProxyRegistrationSuccess) NotFoundException(com.sequenceiq.cloudbreak.common.exception.NotFoundException)

Example 2 with ClusterProxyRegistrationRequest

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());
}
Also used : ClusterProxyRegistrationFailed(com.sequenceiq.freeipa.flow.stack.provision.event.clusterproxy.ClusterProxyRegistrationFailed) ClusterProxyRegistrationRequest(com.sequenceiq.freeipa.flow.stack.provision.event.clusterproxy.ClusterProxyRegistrationRequest) Event(reactor.bus.Event) Test(org.junit.jupiter.api.Test)

Example 3 with ClusterProxyRegistrationRequest

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);
        }
    };
}
Also used : ClusterProxyRegistrationRequest(com.sequenceiq.freeipa.flow.stack.provision.event.clusterproxy.ClusterProxyRegistrationRequest) Stack(com.sequenceiq.freeipa.entity.Stack) CloudStack(com.sequenceiq.cloudbreak.cloud.model.CloudStack) InstanceMetaData(com.sequenceiq.freeipa.entity.InstanceMetaData) StackEvent(com.sequenceiq.freeipa.flow.stack.StackEvent) Selectable(com.sequenceiq.cloudbreak.common.event.Selectable) StackContext(com.sequenceiq.freeipa.flow.stack.StackContext) ClusterProxyRegistrationSuccess(com.sequenceiq.freeipa.flow.stack.provision.event.clusterproxy.ClusterProxyRegistrationSuccess) Map(java.util.Map) Bean(org.springframework.context.annotation.Bean)

Example 4 with ClusterProxyRegistrationRequest

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());
}
Also used : ClusterProxyRegistrationFailed(com.sequenceiq.freeipa.flow.stack.provision.event.clusterproxy.ClusterProxyRegistrationFailed) ClusterProxyRegistrationRequest(com.sequenceiq.freeipa.flow.stack.provision.event.clusterproxy.ClusterProxyRegistrationRequest) Event(reactor.bus.Event) Test(org.junit.jupiter.api.Test)

Example 5 with ClusterProxyRegistrationRequest

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());
}
Also used : ClusterProxyRegistrationFailed(com.sequenceiq.freeipa.flow.stack.provision.event.clusterproxy.ClusterProxyRegistrationFailed) ClusterProxyRegistrationRequest(com.sequenceiq.freeipa.flow.stack.provision.event.clusterproxy.ClusterProxyRegistrationRequest) Event(reactor.bus.Event) Test(org.junit.jupiter.api.Test)

Aggregations

ClusterProxyRegistrationRequest (com.sequenceiq.freeipa.flow.stack.provision.event.clusterproxy.ClusterProxyRegistrationRequest)5 ClusterProxyRegistrationFailed (com.sequenceiq.freeipa.flow.stack.provision.event.clusterproxy.ClusterProxyRegistrationFailed)4 Test (org.junit.jupiter.api.Test)3 Event (reactor.bus.Event)3 InstanceMetaData (com.sequenceiq.freeipa.entity.InstanceMetaData)2 ClusterProxyRegistrationSuccess (com.sequenceiq.freeipa.flow.stack.provision.event.clusterproxy.ClusterProxyRegistrationSuccess)2 CloudStack (com.sequenceiq.cloudbreak.cloud.model.CloudStack)1 Selectable (com.sequenceiq.cloudbreak.common.event.Selectable)1 NotFoundException (com.sequenceiq.cloudbreak.common.exception.NotFoundException)1 Stack (com.sequenceiq.freeipa.entity.Stack)1 StackContext (com.sequenceiq.freeipa.flow.stack.StackContext)1 StackEvent (com.sequenceiq.freeipa.flow.stack.StackEvent)1 Map (java.util.Map)1 Bean (org.springframework.context.annotation.Bean)1