Search in sources :

Example 86 with Node

use of com.sequenceiq.cloudbreak.common.orchestration.Node in project cloudbreak by hortonworks.

the class ClusterBootstrapper method bootstrapOnHostInternal.

private void bootstrapOnHostInternal(Stack stack, Consumer<Stack> saveOrUpdateSaltComponent) throws CloudbreakException {
    try {
        Set<Node> nodes = transactionService.required(() -> collectNodesForBootstrap(stack));
        List<GatewayConfig> allGatewayConfig = collectAndCheckGateways(stack);
        saveOrUpdateSaltComponent.accept(stack);
        BootstrapParams params = createBootstrapParams(stack);
        hostOrchestrator.bootstrap(allGatewayConfig, nodes, params, clusterDeletionBasedModel(stack.getId(), null));
        InstanceMetaData primaryGateway = stack.getPrimaryGatewayInstance();
        saveOrchestrator(stack, primaryGateway);
        checkIfAllNodesAvailable(stack, nodes, primaryGateway);
    } catch (TransactionExecutionException e) {
        throw new CloudbreakException(e.getCause());
    } catch (CloudbreakOrchestratorFailedException e) {
        checkIfAnyInstanceIsNotInStartedState(stack, e);
        throw new CloudbreakException(e);
    } catch (Exception e) {
        throw new CloudbreakException(e);
    }
}
Also used : InstanceMetaData(com.sequenceiq.cloudbreak.domain.stack.instance.InstanceMetaData) CloudbreakOrchestratorFailedException(com.sequenceiq.cloudbreak.orchestrator.exception.CloudbreakOrchestratorFailedException) TransactionExecutionException(com.sequenceiq.cloudbreak.common.service.TransactionService.TransactionExecutionException) Node(com.sequenceiq.cloudbreak.common.orchestration.Node) BootstrapParams(com.sequenceiq.cloudbreak.orchestrator.model.BootstrapParams) CloudbreakException(com.sequenceiq.cloudbreak.service.CloudbreakException) CloudbreakException(com.sequenceiq.cloudbreak.service.CloudbreakException) CloudbreakOrchestratorCancelledException(com.sequenceiq.cloudbreak.orchestrator.exception.CloudbreakOrchestratorCancelledException) CloudbreakOrchestratorException(com.sequenceiq.cloudbreak.orchestrator.exception.CloudbreakOrchestratorException) CloudbreakOrchestratorFailedException(com.sequenceiq.cloudbreak.orchestrator.exception.CloudbreakOrchestratorFailedException) TransactionExecutionException(com.sequenceiq.cloudbreak.common.service.TransactionService.TransactionExecutionException) CancellationException(com.sequenceiq.cloudbreak.cloud.scheduler.CancellationException) IOException(java.io.IOException) CloudbreakImageNotFoundException(com.sequenceiq.cloudbreak.core.CloudbreakImageNotFoundException) CloudbreakServiceException(com.sequenceiq.cloudbreak.common.exception.CloudbreakServiceException) GatewayConfig(com.sequenceiq.cloudbreak.orchestrator.model.GatewayConfig)

Example 87 with Node

use of com.sequenceiq.cloudbreak.common.orchestration.Node in project cloudbreak by hortonworks.

the class ClusterBootstrapper method cleanupOldSaltState.

private void cleanupOldSaltState(List<GatewayConfig> allGatewayConfigs, Set<Node> nodes) throws CloudbreakOrchestratorFailedException {
    List<GatewayConfig> saltMastersToCorrect = allGatewayConfigs.stream().filter(gc -> nodes.stream().noneMatch(n -> gc.getPrivateAddress().equals(n.getPrivateIp()))).collect(Collectors.toList());
    for (GatewayConfig masterToCorrect : saltMastersToCorrect) {
        LOGGER.info("Remove dead salt minions on master: {}", masterToCorrect);
        hostOrchestrator.removeDeadSaltMinions(masterToCorrect);
    }
}
Also used : CloudbreakException(com.sequenceiq.cloudbreak.service.CloudbreakException) ComponentType(com.sequenceiq.cloudbreak.common.type.ComponentType) CloudbreakOrchestratorCancelledException(com.sequenceiq.cloudbreak.orchestrator.exception.CloudbreakOrchestratorCancelledException) LoggerFactory(org.slf4j.LoggerFactory) HostDiscoveryService(com.sequenceiq.cloudbreak.common.service.HostDiscoveryService) CloudInstance(com.sequenceiq.cloudbreak.cloud.model.CloudInstance) ComponentConfigProviderService(com.sequenceiq.cloudbreak.service.ComponentConfigProviderService) Orchestrator(com.sequenceiq.cloudbreak.domain.Orchestrator) Base64(org.apache.commons.codec.binary.Base64) TransactionService(com.sequenceiq.cloudbreak.common.service.TransactionService) InstanceMetaDataToCloudInstanceConverter(com.sequenceiq.cloudbreak.converter.spi.InstanceMetaDataToCloudInstanceConverter) BootstrapParams(com.sequenceiq.cloudbreak.orchestrator.model.BootstrapParams) Map(java.util.Map) CloudVmInstanceStatus(com.sequenceiq.cloudbreak.cloud.model.CloudVmInstanceStatus) HostOrchestrator(com.sequenceiq.cloudbreak.orchestrator.host.HostOrchestrator) Set(java.util.Set) ExtendedPollingResult(com.sequenceiq.cloudbreak.polling.ExtendedPollingResult) CloudbreakOrchestratorException(com.sequenceiq.cloudbreak.orchestrator.exception.CloudbreakOrchestratorException) Collectors(java.util.stream.Collectors) HostOrchestratorClusterContext(com.sequenceiq.cloudbreak.core.bootstrap.service.host.context.HostOrchestratorClusterContext) Json(com.sequenceiq.cloudbreak.common.json.Json) GatewayConfigService(com.sequenceiq.cloudbreak.service.GatewayConfigService) EXIT(com.sequenceiq.cloudbreak.polling.PollingResult.EXIT) List(java.util.List) PollingService(com.sequenceiq.cloudbreak.polling.PollingService) CloudbreakOrchestratorFailedException(com.sequenceiq.cloudbreak.orchestrator.exception.CloudbreakOrchestratorFailedException) TransactionExecutionException(com.sequenceiq.cloudbreak.common.service.TransactionService.TransactionExecutionException) GatewayConfig(com.sequenceiq.cloudbreak.orchestrator.model.GatewayConfig) Optional(java.util.Optional) CancellationException(com.sequenceiq.cloudbreak.cloud.scheduler.CancellationException) OrchestratorService(com.sequenceiq.cloudbreak.service.orchestrator.OrchestratorService) PollingResult(com.sequenceiq.cloudbreak.polling.PollingResult) StackService(com.sequenceiq.cloudbreak.service.stack.StackService) SuppressFBWarnings(edu.umd.cs.findbugs.annotations.SuppressFBWarnings) StringUtils.isNoneBlank(org.apache.commons.lang3.StringUtils.isNoneBlank) Stack(com.sequenceiq.cloudbreak.domain.stack.Stack) Cluster(com.sequenceiq.cloudbreak.domain.stack.cluster.Cluster) HashMap(java.util.HashMap) Image(com.sequenceiq.cloudbreak.cloud.model.Image) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) Inject(javax.inject.Inject) Value(org.springframework.beans.factory.annotation.Value) HostBootstrapApiContext(com.sequenceiq.cloudbreak.core.bootstrap.service.host.context.HostBootstrapApiContext) InstanceMetaDataService(com.sequenceiq.cloudbreak.service.stack.InstanceMetaDataService) ClusterComponentConfigProvider(com.sequenceiq.cloudbreak.cluster.service.ClusterComponentConfigProvider) StackInstanceStatusChecker(com.sequenceiq.cloudbreak.service.stack.StackInstanceStatusChecker) HostClusterAvailabilityCheckerTask(com.sequenceiq.cloudbreak.core.bootstrap.service.host.HostClusterAvailabilityCheckerTask) ClusterDeletionBasedExitCriteriaModel.clusterDeletionBasedModel(com.sequenceiq.cloudbreak.core.bootstrap.service.ClusterDeletionBasedExitCriteriaModel.clusterDeletionBasedModel) Logger(org.slf4j.Logger) Node(com.sequenceiq.cloudbreak.common.orchestration.Node) IOException(java.io.IOException) HostBootstrapApiCheckerTask(com.sequenceiq.cloudbreak.core.bootstrap.service.host.HostBootstrapApiCheckerTask) CloudbreakImageNotFoundException(com.sequenceiq.cloudbreak.core.CloudbreakImageNotFoundException) Consumer(java.util.function.Consumer) ClusterComponent(com.sequenceiq.cloudbreak.domain.stack.cluster.ClusterComponent) AtomicLong(java.util.concurrent.atomic.AtomicLong) Component(org.springframework.stereotype.Component) InstanceStatus(com.sequenceiq.cloudbreak.cloud.model.InstanceStatus) InstanceMetaData(com.sequenceiq.cloudbreak.domain.stack.instance.InstanceMetaData) CloudbreakServiceException(com.sequenceiq.cloudbreak.common.exception.CloudbreakServiceException) GatewayConfig(com.sequenceiq.cloudbreak.orchestrator.model.GatewayConfig)

Example 88 with Node

use of com.sequenceiq.cloudbreak.common.orchestration.Node in project cloudbreak by hortonworks.

the class ClusterBootstrapper method collectNodes.

private void collectNodes(Long stackId, Set<String> upscaleCandidateAddresses, Stack stack, Set<Node> nodes, Set<Node> allNodes) {
    Set<InstanceMetaData> metaDataSet = instanceMetaDataService.getReachableInstanceMetadataByStackId(stackId).stream().filter(im -> im.getPrivateIp() != null && im.getPublicIpWrapper() != null).collect(Collectors.toSet());
    String clusterDomain = getClusterDomain(metaDataSet, stack.getCustomDomain());
    LOGGER.info("Cluster domain: {}", clusterDomain);
    Map<String, AtomicLong> hostGroupNodeIndexes = new HashMap<>();
    Set<String> clusterNodeNames = stack.getNotTerminatedInstanceMetaDataSet().stream().map(InstanceMetaData::getShortHostname).collect(Collectors.toSet());
    LOGGER.info("Cluster node names: {}", clusterNodeNames);
    for (InstanceMetaData im : metaDataSet) {
        Node node = createNodeAndInitFqdnInInstanceMetadata(stack, im, clusterDomain, hostGroupNodeIndexes, clusterNodeNames);
        if (upscaleCandidateAddresses.contains(im.getPrivateIp())) {
            LOGGER.info("Node is an upscale candidate: {}", node.getInstanceId());
            nodes.add(node);
        }
        allNodes.add(node);
    }
    instanceMetaDataService.saveAll(metaDataSet);
}
Also used : InstanceMetaData(com.sequenceiq.cloudbreak.domain.stack.instance.InstanceMetaData) CloudbreakException(com.sequenceiq.cloudbreak.service.CloudbreakException) ComponentType(com.sequenceiq.cloudbreak.common.type.ComponentType) CloudbreakOrchestratorCancelledException(com.sequenceiq.cloudbreak.orchestrator.exception.CloudbreakOrchestratorCancelledException) LoggerFactory(org.slf4j.LoggerFactory) HostDiscoveryService(com.sequenceiq.cloudbreak.common.service.HostDiscoveryService) CloudInstance(com.sequenceiq.cloudbreak.cloud.model.CloudInstance) ComponentConfigProviderService(com.sequenceiq.cloudbreak.service.ComponentConfigProviderService) Orchestrator(com.sequenceiq.cloudbreak.domain.Orchestrator) Base64(org.apache.commons.codec.binary.Base64) TransactionService(com.sequenceiq.cloudbreak.common.service.TransactionService) InstanceMetaDataToCloudInstanceConverter(com.sequenceiq.cloudbreak.converter.spi.InstanceMetaDataToCloudInstanceConverter) BootstrapParams(com.sequenceiq.cloudbreak.orchestrator.model.BootstrapParams) Map(java.util.Map) CloudVmInstanceStatus(com.sequenceiq.cloudbreak.cloud.model.CloudVmInstanceStatus) HostOrchestrator(com.sequenceiq.cloudbreak.orchestrator.host.HostOrchestrator) Set(java.util.Set) ExtendedPollingResult(com.sequenceiq.cloudbreak.polling.ExtendedPollingResult) CloudbreakOrchestratorException(com.sequenceiq.cloudbreak.orchestrator.exception.CloudbreakOrchestratorException) Collectors(java.util.stream.Collectors) HostOrchestratorClusterContext(com.sequenceiq.cloudbreak.core.bootstrap.service.host.context.HostOrchestratorClusterContext) Json(com.sequenceiq.cloudbreak.common.json.Json) GatewayConfigService(com.sequenceiq.cloudbreak.service.GatewayConfigService) EXIT(com.sequenceiq.cloudbreak.polling.PollingResult.EXIT) List(java.util.List) PollingService(com.sequenceiq.cloudbreak.polling.PollingService) CloudbreakOrchestratorFailedException(com.sequenceiq.cloudbreak.orchestrator.exception.CloudbreakOrchestratorFailedException) TransactionExecutionException(com.sequenceiq.cloudbreak.common.service.TransactionService.TransactionExecutionException) GatewayConfig(com.sequenceiq.cloudbreak.orchestrator.model.GatewayConfig) Optional(java.util.Optional) CancellationException(com.sequenceiq.cloudbreak.cloud.scheduler.CancellationException) OrchestratorService(com.sequenceiq.cloudbreak.service.orchestrator.OrchestratorService) PollingResult(com.sequenceiq.cloudbreak.polling.PollingResult) StackService(com.sequenceiq.cloudbreak.service.stack.StackService) SuppressFBWarnings(edu.umd.cs.findbugs.annotations.SuppressFBWarnings) StringUtils.isNoneBlank(org.apache.commons.lang3.StringUtils.isNoneBlank) Stack(com.sequenceiq.cloudbreak.domain.stack.Stack) Cluster(com.sequenceiq.cloudbreak.domain.stack.cluster.Cluster) HashMap(java.util.HashMap) Image(com.sequenceiq.cloudbreak.cloud.model.Image) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) Inject(javax.inject.Inject) Value(org.springframework.beans.factory.annotation.Value) HostBootstrapApiContext(com.sequenceiq.cloudbreak.core.bootstrap.service.host.context.HostBootstrapApiContext) InstanceMetaDataService(com.sequenceiq.cloudbreak.service.stack.InstanceMetaDataService) ClusterComponentConfigProvider(com.sequenceiq.cloudbreak.cluster.service.ClusterComponentConfigProvider) StackInstanceStatusChecker(com.sequenceiq.cloudbreak.service.stack.StackInstanceStatusChecker) HostClusterAvailabilityCheckerTask(com.sequenceiq.cloudbreak.core.bootstrap.service.host.HostClusterAvailabilityCheckerTask) ClusterDeletionBasedExitCriteriaModel.clusterDeletionBasedModel(com.sequenceiq.cloudbreak.core.bootstrap.service.ClusterDeletionBasedExitCriteriaModel.clusterDeletionBasedModel) Logger(org.slf4j.Logger) Node(com.sequenceiq.cloudbreak.common.orchestration.Node) IOException(java.io.IOException) HostBootstrapApiCheckerTask(com.sequenceiq.cloudbreak.core.bootstrap.service.host.HostBootstrapApiCheckerTask) CloudbreakImageNotFoundException(com.sequenceiq.cloudbreak.core.CloudbreakImageNotFoundException) Consumer(java.util.function.Consumer) ClusterComponent(com.sequenceiq.cloudbreak.domain.stack.cluster.ClusterComponent) AtomicLong(java.util.concurrent.atomic.AtomicLong) Component(org.springframework.stereotype.Component) InstanceStatus(com.sequenceiq.cloudbreak.cloud.model.InstanceStatus) InstanceMetaData(com.sequenceiq.cloudbreak.domain.stack.instance.InstanceMetaData) CloudbreakServiceException(com.sequenceiq.cloudbreak.common.exception.CloudbreakServiceException) AtomicLong(java.util.concurrent.atomic.AtomicLong) HashMap(java.util.HashMap) Node(com.sequenceiq.cloudbreak.common.orchestration.Node)

Example 89 with Node

use of com.sequenceiq.cloudbreak.common.orchestration.Node in project cloudbreak by hortonworks.

the class ClusterBootstrapper method collectNodesForBootstrap.

private Set<Node> collectNodesForBootstrap(Stack stack) {
    Set<Node> nodes = new HashSet<>();
    String domain = hostDiscoveryService.determineDomain(stack.getCustomDomain(), stack.getName(), stack.isClusterNameAsSubdomain());
    Map<String, AtomicLong> hostGroupNodeIndexes = new HashMap<>();
    Set<String> clusterNodeNames = stack.getNotTerminatedInstanceMetaDataSet().stream().map(InstanceMetaData::getShortHostname).collect(Collectors.toSet());
    // Ordered list of metadata to guarantee consistent hostname generation across multiple cluster recoveries
    List<InstanceMetaData> notDeletedInstanceMetaDataSet = instanceMetaDataService.findNotTerminatedAsOrderedListForStack(stack.getId());
    LOGGER.debug("There are the following available instances: {}", notDeletedInstanceMetaDataSet);
    for (InstanceMetaData im : notDeletedInstanceMetaDataSet) {
        if (im.getPrivateIp() == null && im.getPublicIpWrapper() == null) {
            LOGGER.debug("Skipping instance metadata because the public ip and private ips are null '{}'.", im);
        } else {
            String generatedHostName = clusterNodeNameGenerator.getNodeNameForInstanceMetadata(im, stack, hostGroupNodeIndexes, clusterNodeNames);
            String instanceId = im.getInstanceId();
            String instanceType = im.getInstanceGroup().getTemplate().getInstanceType();
            nodes.add(new Node(im.getPrivateIp(), im.getPublicIpWrapper(), instanceId, instanceType, generatedHostName, domain, im.getInstanceGroupName()));
            initializeDiscoveryFqdnOfInstanceMetadata(im, domain, generatedHostName);
        }
    }
    instanceMetaDataService.saveAll(notDeletedInstanceMetaDataSet);
    return nodes;
}
Also used : InstanceMetaData(com.sequenceiq.cloudbreak.domain.stack.instance.InstanceMetaData) AtomicLong(java.util.concurrent.atomic.AtomicLong) HashMap(java.util.HashMap) Node(com.sequenceiq.cloudbreak.common.orchestration.Node) HashSet(java.util.HashSet)

Example 90 with Node

use of com.sequenceiq.cloudbreak.common.orchestration.Node in project cloudbreak by hortonworks.

the class ClusterBootstrapper method bootstrapNewNodes.

public void bootstrapNewNodes(Long stackId, Set<String> upscaleCandidateAddresses) throws CloudbreakException {
    LOGGER.info("Bootstrap new nodes: {}", upscaleCandidateAddresses);
    Stack stack = stackService.getByIdWithListsInTransaction(stackId);
    Set<Node> nodes = new HashSet<>();
    Set<Node> allNodes = new HashSet<>();
    try {
        transactionService.required(() -> collectNodes(stackId, upscaleCandidateAddresses, stack, nodes, allNodes));
        List<GatewayConfig> allGatewayConfigs = gatewayConfigService.getAllGatewayConfigs(stack);
        cleanupOldSaltState(allGatewayConfigs, nodes);
        bootstrapNewNodesOnHost(stack, allGatewayConfigs, nodes, allNodes);
    } catch (CloudbreakOrchestratorCancelledException e) {
        throw new CancellationException(e.getMessage());
    } catch (CloudbreakOrchestratorException e) {
        throw new CloudbreakException(e);
    } catch (TransactionExecutionException e) {
        throw new CloudbreakException(e.getCause());
    }
}
Also used : CloudbreakOrchestratorException(com.sequenceiq.cloudbreak.orchestrator.exception.CloudbreakOrchestratorException) CloudbreakOrchestratorCancelledException(com.sequenceiq.cloudbreak.orchestrator.exception.CloudbreakOrchestratorCancelledException) CancellationException(com.sequenceiq.cloudbreak.cloud.scheduler.CancellationException) TransactionExecutionException(com.sequenceiq.cloudbreak.common.service.TransactionService.TransactionExecutionException) Node(com.sequenceiq.cloudbreak.common.orchestration.Node) CloudbreakException(com.sequenceiq.cloudbreak.service.CloudbreakException) Stack(com.sequenceiq.cloudbreak.domain.stack.Stack) HashSet(java.util.HashSet) GatewayConfig(com.sequenceiq.cloudbreak.orchestrator.model.GatewayConfig)

Aggregations

Node (com.sequenceiq.cloudbreak.common.orchestration.Node)126 GatewayConfig (com.sequenceiq.cloudbreak.orchestrator.model.GatewayConfig)57 HashSet (java.util.HashSet)42 Map (java.util.Map)32 JsonNode (com.fasterxml.jackson.databind.JsonNode)30 CloudbreakOrchestratorFailedException (com.sequenceiq.cloudbreak.orchestrator.exception.CloudbreakOrchestratorFailedException)29 Test (org.junit.Test)29 HashMap (java.util.HashMap)28 Stack (com.sequenceiq.cloudbreak.domain.stack.Stack)27 CloudbreakOrchestratorException (com.sequenceiq.cloudbreak.orchestrator.exception.CloudbreakOrchestratorException)26 ArrayList (java.util.ArrayList)26 InstanceMetaData (com.sequenceiq.cloudbreak.domain.stack.instance.InstanceMetaData)25 ExitCriteriaModel (com.sequenceiq.cloudbreak.orchestrator.state.ExitCriteriaModel)25 Set (java.util.Set)25 Test (org.junit.jupiter.api.Test)25 List (java.util.List)22 CloudbreakServiceException (com.sequenceiq.cloudbreak.common.exception.CloudbreakServiceException)21 IOException (java.io.IOException)21 Collectors (java.util.stream.Collectors)21 BootstrapParams (com.sequenceiq.cloudbreak.orchestrator.model.BootstrapParams)19