use of com.sequenceiq.cloudbreak.domain.stack.cluster.ClusterComponent in project cloudbreak by hortonworks.
the class ClusterCreationSetupService method prepare.
public Cluster prepare(ClusterV4Request request, Stack stack, Blueprint blueprint, User user, String parentEnvironmentCloudPlatform) throws IOException, CloudbreakImageCatalogException, TransactionExecutionException {
String stackName = stack.getName();
Cluster clusterStub = stack.getCluster();
stack.setCluster(null);
if (request.getCloudStorage() != null) {
FileSystem fileSystem = cloudStorageConverter.requestToFileSystem(request.getCloudStorage());
measure(() -> fileSystemConfigService.createWithMdcContextRestore(fileSystem, stack.getWorkspace(), user), LOGGER, "File system saving took {} ms for stack {}", stackName);
}
clusterStub.setStack(stack);
clusterStub.setWorkspace(stack.getWorkspace());
Cluster cluster = measure(() -> clusterDecorator.decorate(clusterStub, request, blueprint, user, stack.getWorkspace(), stack, parentEnvironmentCloudPlatform), LOGGER, "Cluster decorator {} ms for stack {}", stackName);
List<ClusterComponent> components = multiCheckedMeasure((MultiCheckedSupplier<List<ClusterComponent>, IOException, CloudbreakImageCatalogException>) () -> {
if (blueprint != null) {
Set<Component> allComponent = componentConfigProviderService.getAllComponentsByStackIdAndType(stack.getId(), Sets.newHashSet(ComponentType.CM_REPO_DETAILS, ComponentType.CDH_PRODUCT_DETAILS, ComponentType.IMAGE));
Optional<Component> stackCmRepoConfig = allComponent.stream().filter(c -> c.getComponentType().equals(ComponentType.CM_REPO_DETAILS)).findAny();
List<Component> stackCdhRepoConfig = allComponent.stream().filter(c -> c.getComponentType().equals(ComponentType.CDH_PRODUCT_DETAILS)).collect(Collectors.toList());
Optional<Component> stackImageComponent = allComponent.stream().filter(c -> c.getComponentType().equals(ComponentType.IMAGE) && c.getName().equalsIgnoreCase(ComponentType.IMAGE.name())).findAny();
return clouderaManagerClusterCreationSetupService.prepareClouderaManagerCluster(request, cluster, stackCmRepoConfig, stackCdhRepoConfig, stackImageComponent);
}
return Collections.emptyList();
}, LOGGER, "Cluster components saved in {} ms for stack {}", stackName);
return clusterOperationService.create(stack, cluster, components, user);
}
use of com.sequenceiq.cloudbreak.domain.stack.cluster.ClusterComponent in project cloudbreak by hortonworks.
the class ClusterBootstrapper method bootstrapNewNodesOnHost.
private void bootstrapNewNodesOnHost(Stack stack, List<GatewayConfig> allGatewayConfigs, Set<Node> nodes, Set<Node> allNodes) throws CloudbreakOrchestratorException {
LOGGER.info("Bootstrap new nodes: {}", nodes);
Cluster cluster = stack.getCluster();
Boolean enableKnox = cluster.getGateway() != null;
for (InstanceMetaData gateway : stack.getNotTerminatedAndNotZombieGatewayInstanceMetadata()) {
GatewayConfig gatewayConfig = gatewayConfigService.getGatewayConfig(stack, gateway, enableKnox);
ExtendedPollingResult bootstrapApiPolling = hostBootstrapApiPollingService.pollWithAbsoluteTimeout(hostBootstrapApiCheckerTask, new HostBootstrapApiContext(stack, gatewayConfig, hostOrchestrator), POLL_INTERVAL, MAX_POLLING_ATTEMPTS);
validatePollingResultForCancellation(bootstrapApiPolling.getPollingResult(), "Polling of bootstrap API was cancelled.");
}
byte[] stateZip = null;
ClusterComponent stateComponent = clusterComponentProvider.getComponent(cluster.getId(), ComponentType.SALT_STATE);
if (stateComponent != null) {
String content = (String) stateComponent.getAttributes().getMap().getOrDefault(ComponentType.SALT_STATE.name(), "");
if (!content.isEmpty()) {
stateZip = Base64.decodeBase64(content);
}
}
BootstrapParams params = createBootstrapParams(stack);
hostOrchestrator.bootstrapNewNodes(allGatewayConfigs, nodes, allNodes, stateZip, params, clusterDeletionBasedModel(stack.getId(), null));
InstanceMetaData primaryGateway = stack.getPrimaryGatewayInstance();
GatewayConfig gatewayConfig = gatewayConfigService.getGatewayConfig(stack, primaryGateway, enableKnox);
ExtendedPollingResult allNodesAvailabilityPolling = hostClusterAvailabilityPollingService.pollWithAbsoluteTimeout(hostClusterAvailabilityCheckerTask, new HostOrchestratorClusterContext(stack, hostOrchestrator, gatewayConfig, nodes), POLL_INTERVAL, MAX_POLLING_ATTEMPTS);
validatePollingResultForCancellation(allNodesAvailabilityPolling.getPollingResult(), "Polling of new nodes availability was cancelled.");
if (allNodesAvailabilityPolling.isTimeout()) {
clusterBootstrapperErrorHandler.terminateFailedNodes(hostOrchestrator, null, stack, gatewayConfig, nodes);
}
}
use of com.sequenceiq.cloudbreak.domain.stack.cluster.ClusterComponent in project cloudbreak by hortonworks.
the class ClusterUpgradeHandler method doAccept.
@Override
protected Selectable doAccept(HandlerEvent<ClusterUpgradeRequest> event) {
LOGGER.debug("Accepting Cluster upgrade event..");
ClusterUpgradeRequest request = event.getData();
Long stackId = request.getResourceId();
Selectable result;
try {
Stack stack = stackService.getByIdWithClusterInTransaction(stackId);
Optional<String> remoteDataContext = getRemoteDataContext(stack);
ClusterApi connector = clusterApiConnectors.getConnector(stack);
Set<ClusterComponent> components = parcelService.getParcelComponentsByBlueprint(stack);
connector.upgradeClusterRuntime(components, request.isPatchUpgrade(), remoteDataContext);
ParcelOperationStatus parcelOperationStatus = parcelService.removeUnusedParcelComponents(stack, components);
if (parcelOperationStatus.getFailed().isEmpty()) {
result = new ClusterUpgradeSuccess(request.getResourceId());
} else {
LOGGER.info("There are failed parcel removals: {}", parcelOperationStatus);
CloudbreakException exception = new CloudbreakException(format("Failed to remove the following parcels: %s", parcelOperationStatus.getFailed()));
result = new ClusterUpgradeFailedEvent(request.getResourceId(), exception, DetailedStackStatus.CLUSTER_UPGRADE_FAILED);
}
} catch (Exception e) {
LOGGER.error("Cluster upgrade event failed", e);
result = new ClusterUpgradeFailedEvent(request.getResourceId(), e, DetailedStackStatus.CLUSTER_UPGRADE_FAILED);
}
return result;
}
use of com.sequenceiq.cloudbreak.domain.stack.cluster.ClusterComponent in project cloudbreak by hortonworks.
the class ClouderaManagerClusterCreationSetupService method determineCmRepoConfig.
private ClusterComponent determineCmRepoConfig(Optional<Component> stackClouderaManagerRepoConfig, String osType, Cluster cluster, String cdhStackVersion) throws CloudbreakImageCatalogException {
Json json;
if (Objects.isNull(stackClouderaManagerRepoConfig) || stackClouderaManagerRepoConfig.isEmpty()) {
ImageCatalogPlatform platform = platformStringTransformer.getPlatformStringForImageCatalog(cluster.getStack().getCloudPlatform(), cluster.getStack().getPlatformVariant());
ClouderaManagerRepo clouderaManagerRepo = defaultClouderaManagerRepoService.getDefault(osType, StackType.CDH.name(), cdhStackVersion, platform);
if (clouderaManagerRepo == null) {
throw new BadRequestException(String.format("Couldn't determine Cloudera Manager repo for the stack: %s", cluster.getStack().getName()));
}
json = new Json(clouderaManagerRepo);
} else {
json = stackClouderaManagerRepoConfig.get().getAttributes();
}
return new ClusterComponent(ComponentType.CM_REPO_DETAILS, json, cluster);
}
use of com.sequenceiq.cloudbreak.domain.stack.cluster.ClusterComponent in project cloudbreak by hortonworks.
the class ClusterCreationSetupService method prepare.
public Cluster prepare(ClusterV4Request request, Stack stack, Blueprint blueprint, User user) throws IOException, CloudbreakImageCatalogException, TransactionExecutionException {
String stackName = stack.getName();
Cluster clusterStub = stack.getCluster();
stack.setCluster(null);
if (request.getCloudStorage() != null) {
FileSystem fileSystem = cloudStorageConverter.requestToFileSystem(request.getCloudStorage());
measure(() -> fileSystemConfigService.createWithMdcContextRestore(fileSystem, stack.getWorkspace(), user), LOGGER, "File system saving took {} ms for stack {}", stackName);
}
clusterStub.setStack(stack);
clusterStub.setWorkspace(stack.getWorkspace());
Cluster cluster = measure(() -> clusterDecorator.decorate(clusterStub, request, blueprint, user, stack.getWorkspace(), stack), LOGGER, "Cluster decorator {} ms for stack {}", stackName);
List<ClusterComponent> components = multiCheckedMeasure((MultiCheckedSupplier<List<ClusterComponent>, IOException, CloudbreakImageCatalogException>) () -> {
if (blueprint != null) {
Set<Component> allComponent = componentConfigProviderService.getAllComponentsByStackIdAndType(stack.getId(), Sets.newHashSet(ComponentType.CM_REPO_DETAILS, ComponentType.CDH_PRODUCT_DETAILS, ComponentType.IMAGE));
Optional<Component> stackCmRepoConfig = allComponent.stream().filter(c -> c.getComponentType().equals(ComponentType.CM_REPO_DETAILS)).findAny();
List<Component> stackCdhRepoConfig = allComponent.stream().filter(c -> c.getComponentType().equals(ComponentType.CDH_PRODUCT_DETAILS)).collect(Collectors.toList());
Optional<Component> stackImageComponent = allComponent.stream().filter(c -> c.getComponentType().equals(ComponentType.IMAGE) && c.getName().equalsIgnoreCase(ComponentType.IMAGE.name())).findAny();
return clouderaManagerClusterCreationSetupService.prepareClouderaManagerCluster(request, cluster, stackCmRepoConfig, stackCdhRepoConfig, stackImageComponent);
}
return Collections.emptyList();
}, LOGGER, "Cluster components saved in {} ms for stack {}", stackName);
return clusterOperationService.create(stack, cluster, components, user);
}
Aggregations