Search in sources :

Example 11 with Node

use of com.sequenceiq.cloudbreak.orchestrator.model.Node in project cloudbreak by hortonworks.

the class HighStateRunnerTest method submit.

@Test
public void submit() {
    targets = new HashSet<>();
    targets.add("10.0.0.1");
    targets.add("10.0.0.2");
    targets.add("10.0.0.3");
    allNode = new HashSet<>();
    allNode.add(new Node("10.0.0.1", "5.5.5.1", "10-0-0-1.example.com", "hg"));
    allNode.add(new Node("10.0.0.2", "5.5.5.2", "10-0-0-2.example.com", "hg"));
    allNode.add(new Node("10.0.0.3", "5.5.5.3", "10-0-0-3.example.com", "hg"));
    HighStateRunner highStateRunner = new HighStateRunner(targets, allNode);
    SaltConnector saltConnector = Mockito.mock(SaltConnector.class);
    PowerMockito.mockStatic(SaltStates.class);
    String jobId = "1";
    PowerMockito.when(SaltStates.highstate(any())).thenReturn(jobId);
    String jid = highStateRunner.submit(saltConnector);
    assertEquals(jobId, jid);
    PowerMockito.verifyStatic();
    SaltStates.highstate(eq(saltConnector));
}
Also used : Node(com.sequenceiq.cloudbreak.orchestrator.model.Node) SaltConnector(com.sequenceiq.cloudbreak.orchestrator.salt.client.SaltConnector) Test(org.junit.Test) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest)

Example 12 with Node

use of com.sequenceiq.cloudbreak.orchestrator.model.Node in project cloudbreak by hortonworks.

the class SyncGrainsRunnerTest method submit.

@Test
public void submit() {
    Set<String> targets = new HashSet<>();
    targets.add("10.0.0.1");
    targets.add("10.0.0.2");
    targets.add("10.0.0.3");
    Set<Node> allNode = new HashSet<>();
    allNode.add(new Node("10.0.0.1", "5.5.5.1", "10-0-0-1.example.com", "hg"));
    allNode.add(new Node("10.0.0.2", "5.5.5.2", "10-0-0-2.example.com", "hg"));
    allNode.add(new Node("10.0.0.3", "5.5.5.3", "10-0-0-3.example.com", "hg"));
    PowerMockito.mockStatic(SaltStates.class);
    ApplyResponse applyResponse = new ApplyResponse();
    List<Map<String, Object>> result = new ArrayList<>();
    Map<String, Object> nodes = new HashMap<>();
    nodes.put("10-0-0-1.example.com", "something");
    nodes.put("10-0-0-2.example.com", "something");
    result.add(nodes);
    applyResponse.setResult(result);
    PowerMockito.when(SaltStates.syncGrains(any())).thenReturn(applyResponse);
    SyncGrainsRunner syncGrainsRunner = new SyncGrainsRunner(targets, allNode);
    SaltConnector saltConnector = Mockito.mock(SaltConnector.class);
    String missingIps = syncGrainsRunner.submit(saltConnector);
    assertThat(syncGrainsRunner.getTarget(), hasItems("10.0.0.3"));
    assertEquals("[10.0.0.3]", missingIps);
}
Also used : HashMap(java.util.HashMap) Node(com.sequenceiq.cloudbreak.orchestrator.model.Node) ArrayList(java.util.ArrayList) SaltConnector(com.sequenceiq.cloudbreak.orchestrator.salt.client.SaltConnector) HashMap(java.util.HashMap) Map(java.util.Map) HashSet(java.util.HashSet) ApplyResponse(com.sequenceiq.cloudbreak.orchestrator.salt.domain.ApplyResponse) Test(org.junit.Test) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest)

Example 13 with Node

use of com.sequenceiq.cloudbreak.orchestrator.model.Node in project cloudbreak by hortonworks.

the class SaltBootstrap method createBootstrap.

private SaltAction createBootstrap() {
    SaltAction saltAction = new SaltAction(SaltActionType.RUN);
    SaltAuth auth = new SaltAuth();
    auth.setPassword(sc.getSaltPassword());
    List<String> targetIps = targets.stream().map(Node::getPrivateIp).collect(Collectors.toList());
    for (GatewayConfig gatewayConfig : allGatewayConfigs) {
        String gatewayAddress = gatewayConfig.getPrivateAddress();
        if (targetIps.contains(gatewayAddress)) {
            Node saltMaster = targets.stream().filter(n -> n.getPrivateIp().equals(gatewayAddress)).findFirst().get();
            SaltMaster master = new SaltMaster();
            master.setAddress(gatewayAddress);
            master.setAuth(auth);
            master.setDomain(saltMaster.getDomain());
            master.setHostName(saltMaster.getHostname());
            // set due to compatibility reasons
            saltAction.setServer(gatewayAddress);
            saltAction.setMaster(master);
            saltAction.addMinion(createMinion(saltMaster));
            saltAction.addMaster(master);
        }
    }
    for (Node minion : targets.stream().filter(node -> !getGatewayPrivateIps().contains(node.getPrivateIp())).collect(Collectors.toList())) {
        saltAction.addMinion(createMinion(minion));
    }
    return saltAction;
}
Also used : GenericResponse(com.sequenceiq.cloudbreak.orchestrator.model.GenericResponse) Logger(org.slf4j.Logger) LoggerFactory(org.slf4j.LoggerFactory) SaltAuth(com.sequenceiq.cloudbreak.orchestrator.salt.domain.SaltAuth) Set(java.util.Set) SaltMaster(com.sequenceiq.cloudbreak.orchestrator.salt.domain.SaltMaster) Collectors(java.util.stream.Collectors) HashSet(java.util.HashSet) HttpStatus(org.springframework.http.HttpStatus) GenericResponses(com.sequenceiq.cloudbreak.orchestrator.model.GenericResponses) List(java.util.List) Minion(com.sequenceiq.cloudbreak.orchestrator.salt.domain.Minion) SaltStates(com.sequenceiq.cloudbreak.orchestrator.salt.states.SaltStates) CloudbreakOrchestratorFailedException(com.sequenceiq.cloudbreak.orchestrator.exception.CloudbreakOrchestratorFailedException) Node(com.sequenceiq.cloudbreak.orchestrator.model.Node) Map(java.util.Map) GatewayConfig(com.sequenceiq.cloudbreak.orchestrator.model.GatewayConfig) OrchestratorBootstrap(com.sequenceiq.cloudbreak.orchestrator.OrchestratorBootstrap) Glob(com.sequenceiq.cloudbreak.orchestrator.salt.client.target.Glob) Collections(java.util.Collections) SaltAction(com.sequenceiq.cloudbreak.orchestrator.salt.domain.SaltAction) SaltConnector(com.sequenceiq.cloudbreak.orchestrator.salt.client.SaltConnector) SaltActionType(com.sequenceiq.cloudbreak.orchestrator.salt.client.SaltActionType) SaltAuth(com.sequenceiq.cloudbreak.orchestrator.salt.domain.SaltAuth) Node(com.sequenceiq.cloudbreak.orchestrator.model.Node) SaltMaster(com.sequenceiq.cloudbreak.orchestrator.salt.domain.SaltMaster) SaltAction(com.sequenceiq.cloudbreak.orchestrator.salt.domain.SaltAction) GatewayConfig(com.sequenceiq.cloudbreak.orchestrator.model.GatewayConfig)

Example 14 with Node

use of com.sequenceiq.cloudbreak.orchestrator.model.Node in project cloudbreak by hortonworks.

the class SaltBootstrap method call.

@Override
public Boolean call() throws Exception {
    LOGGER.info("Bootstrapping of nodes [{}/{}]", originalTargets.size() - targets.size(), originalTargets.size());
    if (!targets.isEmpty()) {
        LOGGER.info("Missing targets for SaltBootstrap: {}", targets);
        SaltAction saltAction = createBootstrap();
        GenericResponses responses = sc.action(saltAction);
        Set<Node> failedTargets = new HashSet<>();
        LOGGER.info("SaltBootstrap responses: {}", responses);
        for (GenericResponse genericResponse : responses.getResponses()) {
            if (genericResponse.getStatusCode() != HttpStatus.OK.value()) {
                LOGGER.info("Failed to distributed salt run to: " + genericResponse.getAddress());
                String address = genericResponse.getAddress().split(":")[0];
                failedTargets.addAll(originalTargets.stream().filter(a -> a.getPrivateIp().equals(address)).collect(Collectors.toList()));
            }
        }
        targets = failedTargets;
        if (!targets.isEmpty()) {
            LOGGER.info("Missing nodes to run saltbootstrap: {}", targets);
            throw new CloudbreakOrchestratorFailedException("There are missing nodes from saltbootstrap: " + targets);
        }
    }
    String iFace = SaltStates.defaultRoute(sc, Glob.ALL).getGatewayInterfaceName();
    Map<String, String> networkResult = SaltStates.networkInterfaceIP(sc, Glob.ALL, iFace).getResultGroupByIP();
    originalTargets.forEach(node -> {
        if (!networkResult.containsKey(node.getPrivateIp())) {
            LOGGER.info("Salt-minion is not responding on host: {}, yet", node);
            targets.add(node);
        }
    });
    if (!targets.isEmpty()) {
        throw new CloudbreakOrchestratorFailedException("There are missing nodes from salt network response: " + targets);
    }
    LOGGER.info("Bootstrapping of nodes completed: {}", originalTargets.size());
    return true;
}
Also used : CloudbreakOrchestratorFailedException(com.sequenceiq.cloudbreak.orchestrator.exception.CloudbreakOrchestratorFailedException) GenericResponse(com.sequenceiq.cloudbreak.orchestrator.model.GenericResponse) Node(com.sequenceiq.cloudbreak.orchestrator.model.Node) GenericResponses(com.sequenceiq.cloudbreak.orchestrator.model.GenericResponses) SaltAction(com.sequenceiq.cloudbreak.orchestrator.salt.domain.SaltAction) HashSet(java.util.HashSet)

Example 15 with Node

use of com.sequenceiq.cloudbreak.orchestrator.model.Node in project cloudbreak by hortonworks.

the class ClusterBootstrapperErrorHandler method terminateFailedNodes.

public void terminateFailedNodes(HostOrchestrator hostOrchestrator, ContainerOrchestrator containerOrchestrator, Stack stack, GatewayConfig gatewayConfig, Set<Node> nodes) throws CloudbreakOrchestratorFailedException {
    List<String> allAvailableNode;
    allAvailableNode = hostOrchestrator != null ? hostOrchestrator.getAvailableNodes(gatewayConfig, nodes) : containerOrchestrator.getAvailableNodes(gatewayConfig, nodes);
    List<Node> missingNodes = selectMissingNodes(nodes, allAvailableNode);
    if (!missingNodes.isEmpty()) {
        String message = cloudbreakMessagesService.getMessage(Msg.BOOTSTRAPPER_ERROR_BOOTSTRAP_FAILED_ON_NODES.code(), Collections.singletonList(missingNodes.size()));
        LOGGER.info(message);
        eventService.fireCloudbreakEvent(stack.getId(), Status.UPDATE_IN_PROGRESS.name(), message);
        for (Node missingNode : missingNodes) {
            InstanceMetaData instanceMetaData = instanceMetaDataRepository.findNotTerminatedByPrivateAddress(stack.getId(), missingNode.getPrivateIp());
            InstanceGroup ig = instanceGroupRepository.findOneByGroupNameInStack(stack.getId(), instanceMetaData.getInstanceGroup().getGroupName());
            ig.setNodeCount(ig.getNodeCount() - 1);
            if (ig.getNodeCount() < 1) {
                throw new CloudbreakOrchestratorFailedException(cloudbreakMessagesService.getMessage(Msg.BOOTSTRAPPER_ERROR_INVALID_NODECOUNT.code(), Collections.singletonList(ig.getGroupName())));
            }
            instanceGroupRepository.save(ig);
            message = cloudbreakMessagesService.getMessage(Msg.BOOTSTRAPPER_ERROR_DELETING_NODE.code(), Arrays.asList(instanceMetaData.getInstanceId(), ig.getGroupName()));
            LOGGER.info(message);
            eventService.fireCloudbreakEvent(stack.getId(), Status.UPDATE_IN_PROGRESS.name(), message);
            deleteResourceAndDependencies(stack, instanceMetaData);
            deleteInstanceResourceFromDatabase(stack, instanceMetaData);
            long timeInMillis = Calendar.getInstance().getTimeInMillis();
            instanceMetaData.setTerminationDate(timeInMillis);
            instanceMetaData.setInstanceStatus(InstanceStatus.TERMINATED);
            instanceMetaDataRepository.save(instanceMetaData);
            LOGGER.info("InstanceMetadata [name: {}, id: {}] status set to {}.", instanceMetaData.getId(), instanceMetaData.getInstanceId(), instanceMetaData.getInstanceStatus());
        }
    }
}
Also used : InstanceMetaData(com.sequenceiq.cloudbreak.domain.InstanceMetaData) CloudbreakOrchestratorFailedException(com.sequenceiq.cloudbreak.orchestrator.exception.CloudbreakOrchestratorFailedException) Node(com.sequenceiq.cloudbreak.orchestrator.model.Node) InstanceGroup(com.sequenceiq.cloudbreak.domain.InstanceGroup)

Aggregations

Node (com.sequenceiq.cloudbreak.orchestrator.model.Node)25 HashSet (java.util.HashSet)13 SaltConnector (com.sequenceiq.cloudbreak.orchestrator.salt.client.SaltConnector)12 CloudbreakOrchestratorFailedException (com.sequenceiq.cloudbreak.orchestrator.exception.CloudbreakOrchestratorFailedException)11 CloudbreakOrchestratorException (com.sequenceiq.cloudbreak.orchestrator.exception.CloudbreakOrchestratorException)10 GatewayConfig (com.sequenceiq.cloudbreak.orchestrator.model.GatewayConfig)10 ArrayList (java.util.ArrayList)9 IOException (java.io.IOException)8 HostOrchestrator (com.sequenceiq.cloudbreak.orchestrator.host.HostOrchestrator)7 Map (java.util.Map)7 Set (java.util.Set)7 Test (org.junit.Test)7 SaltConfig (com.sequenceiq.cloudbreak.orchestrator.model.SaltConfig)6 SuppressFBWarnings (edu.umd.cs.findbugs.annotations.SuppressFBWarnings)6 CancellationException (com.sequenceiq.cloudbreak.cloud.scheduler.CancellationException)5 OrchestratorBootstrap (com.sequenceiq.cloudbreak.orchestrator.OrchestratorBootstrap)5 CloudbreakOrchestratorCancelledException (com.sequenceiq.cloudbreak.orchestrator.exception.CloudbreakOrchestratorCancelledException)5 GrainAddRunner (com.sequenceiq.cloudbreak.orchestrator.salt.poller.checker.GrainAddRunner)5 HighStateRunner (com.sequenceiq.cloudbreak.orchestrator.salt.poller.checker.HighStateRunner)5 SyncGrainsRunner (com.sequenceiq.cloudbreak.orchestrator.salt.poller.checker.SyncGrainsRunner)5