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);
}
}
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);
}
}
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);
}
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;
}
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());
}
}
Aggregations