use of com.sequenceiq.cloudbreak.orchestrator.OrchestratorBootstrap in project cloudbreak by hortonworks.
the class SaltOrchestrator method upgradeAmbari.
@SuppressFBWarnings("REC_CATCH_EXCEPTION")
@Override
public void upgradeAmbari(GatewayConfig gatewayConfig, Set<String> target, Set<Node> allNodes, SaltConfig pillarConfig, ExitCriteriaModel exitCriteriaModel) throws CloudbreakOrchestratorException {
try (SaltConnector sc = new SaltConnector(gatewayConfig, restDebug)) {
for (Entry<String, SaltPillarProperties> propertiesEntry : pillarConfig.getServicePillarConfig().entrySet()) {
OrchestratorBootstrap pillarSave = new PillarSave(sc, Sets.newHashSet(gatewayConfig.getPrivateAddress()), propertiesEntry.getValue());
Callable<Boolean> saltPillarRunner = runner(pillarSave, exitCriteria, exitCriteriaModel);
Future<Boolean> saltPillarRunnerFuture = parallelOrchestratorComponentRunner.submit(saltPillarRunner);
saltPillarRunnerFuture.get();
}
// add 'ambari_upgrade' role to all nodes
Set<String> targets = allNodes.stream().map(Node::getPrivateIp).collect(Collectors.toSet());
runSaltCommand(sc, new GrainAddRunner(targets, allNodes, "roles", "ambari_upgrade", CompoundType.IP), exitCriteriaModel);
Set<String> all = allNodes.stream().map(Node::getPrivateIp).collect(Collectors.toSet());
runSaltCommand(sc, new SyncGrainsRunner(all, allNodes), exitCriteriaModel);
runNewService(sc, new HighStateRunner(all, allNodes), exitCriteriaModel, maxRetryRecipe, true);
// remove 'ambari_upgrade' role from all nodes
targets = allNodes.stream().map(Node::getPrivateIp).collect(Collectors.toSet());
runSaltCommand(sc, new GrainRemoveRunner(targets, allNodes, "roles", "ambari_upgrade", CompoundType.IP), exitCriteriaModel);
} catch (Exception e) {
LOGGER.error("Error occurred during ambari upgrade", e);
throw new CloudbreakOrchestratorFailedException(e);
}
}
use of com.sequenceiq.cloudbreak.orchestrator.OrchestratorBootstrap in project cloudbreak by hortonworks.
the class SaltOrchestrator method runSaltCommand.
private void runSaltCommand(SaltConnector sc, BaseSaltJobRunner baseSaltJobRunner, ExitCriteriaModel exitCriteriaModel) throws ExecutionException, InterruptedException {
OrchestratorBootstrap saltCommandTracker = new SaltCommandTracker(sc, baseSaltJobRunner);
Callable<Boolean> saltCommandRunBootstrapRunner = runner(saltCommandTracker, exitCriteria, exitCriteriaModel);
Future<Boolean> saltCommandRunBootstrapFuture = parallelOrchestratorComponentRunner.submit(saltCommandRunBootstrapRunner);
saltCommandRunBootstrapFuture.get();
}
use of com.sequenceiq.cloudbreak.orchestrator.OrchestratorBootstrap in project cloudbreak by hortonworks.
the class SaltOrchestrator method runService.
@SuppressFBWarnings("REC_CATCH_EXCEPTION")
@Override
public void runService(List<GatewayConfig> allGateway, Set<Node> allNodes, SaltConfig saltConfig, ExitCriteriaModel exitModel) throws CloudbreakOrchestratorException {
LOGGER.info("Run Services on nodes: {}", allNodes);
GatewayConfig primaryGateway = getPrimaryGatewayConfig(allGateway);
Set<String> gatewayTargets = getGatewayPrivateIps(allGateway);
String ambariServerAddress = primaryGateway.getPrivateAddress();
try (SaltConnector sc = new SaltConnector(primaryGateway, restDebug)) {
OrchestratorBootstrap hostSave = new PillarSave(sc, gatewayTargets, allNodes);
Callable<Boolean> saltPillarRunner = runner(hostSave, exitCriteria, exitModel);
Future<Boolean> saltPillarRunnerFuture = parallelOrchestratorComponentRunner.submit(saltPillarRunner);
saltPillarRunnerFuture.get();
for (Entry<String, SaltPillarProperties> propertiesEntry : saltConfig.getServicePillarConfig().entrySet()) {
OrchestratorBootstrap pillarSave = new PillarSave(sc, gatewayTargets, propertiesEntry.getValue());
saltPillarRunner = runner(pillarSave, exitCriteria, exitModel);
saltPillarRunnerFuture = parallelOrchestratorComponentRunner.submit(saltPillarRunner);
saltPillarRunnerFuture.get();
}
Set<String> server = Sets.newHashSet(ambariServerAddress);
Set<String> all = allNodes.stream().map(Node::getPrivateIp).collect(Collectors.toSet());
// knox
if (primaryGateway.getKnoxGatewayEnabled()) {
runSaltCommand(sc, new GrainAddRunner(gatewayTargets, allNodes, "gateway"), exitModel);
}
setPostgreRoleIfNeeded(allNodes, saltConfig, exitModel, sc, server);
// ambari server
runSaltCommand(sc, new GrainAddRunner(server, allNodes, "ambari_server_install"), exitModel);
runSaltCommand(sc, new GrainAddRunner(server, allNodes, "ambari_server"), exitModel);
// ambari server standby
Set<String> standbyServers = gatewayTargets.stream().filter(ip -> !server.contains(ip)).collect(Collectors.toSet());
if (!standbyServers.isEmpty()) {
runSaltCommand(sc, new GrainAddRunner(standbyServers, allNodes, "ambari_server_install"), exitModel);
runSaltCommand(sc, new GrainAddRunner(standbyServers, allNodes, "ambari_server_standby"), exitModel);
}
// ambari agent
runSaltCommand(sc, new GrainAddRunner(all, allNodes, "ambari_agent_install"), exitModel);
runSaltCommand(sc, new GrainAddRunner(all, allNodes, "ambari_agent"), exitModel);
// kerberos
if (saltConfig.getServicePillarConfig().containsKey("kerberos")) {
runSaltCommand(sc, new GrainAddRunner(server, allNodes, "kerberos_server_master"), exitModel);
if (!standbyServers.isEmpty()) {
runSaltCommand(sc, new GrainAddRunner(standbyServers, allNodes, "kerberos_server_slave"), exitModel);
}
}
// smartsense
if (configureSmartSense) {
runSaltCommand(sc, new GrainAddRunner(gatewayTargets, allNodes, "smartsense"), exitModel);
runSaltCommand(sc, new GrainAddRunner(all, allNodes, "smartsense_agent_update"), exitModel);
}
uploadGrains(allNodes, saltConfig.getGrainsProperties(), exitModel, sc);
runSaltCommand(sc, new SyncGrainsRunner(all, allNodes), exitModel);
runSaltCommand(sc, new MineUpdateRunner(gatewayTargets, allNodes), exitModel);
runNewService(sc, new HighStateRunner(all, allNodes), exitModel);
} catch (Exception e) {
LOGGER.error("Error occurred during ambari bootstrap", e);
if (e instanceof ExecutionException && e.getCause() instanceof CloudbreakOrchestratorFailedException) {
throw (CloudbreakOrchestratorFailedException) e.getCause();
}
throw new CloudbreakOrchestratorFailedException(e);
}
LOGGER.info("Run services on nodes finished: {}", allNodes);
}
use of com.sequenceiq.cloudbreak.orchestrator.OrchestratorBootstrap in project cloudbreak by hortonworks.
the class SaltOrchestrator method uploadFileToGateways.
private void uploadFileToGateways(SaltConnector saltConnector, Set<String> targets, ExitCriteriaModel exitCriteriaModel, String path, String fileName, byte[] content) throws CloudbreakOrchestratorFailedException {
try {
OrchestratorBootstrap saltUpload = new SaltUpload(saltConnector, targets, path, fileName, content);
Callable<Boolean> saltUploadRunner = runner(saltUpload, exitCriteria, exitCriteriaModel);
Future<Boolean> saltUploadRunnerFuture = parallelOrchestratorComponentRunner.submit(saltUploadRunner);
saltUploadRunnerFuture.get();
} catch (Exception e) {
LOGGER.error("Error occurred during file distribute to gateway nodes", e);
throw new CloudbreakOrchestratorFailedException(e);
}
}
use of com.sequenceiq.cloudbreak.orchestrator.OrchestratorBootstrap in project cloudbreak by hortonworks.
the class SaltOrchestrator method uploadRecipes.
@Override
public void uploadRecipes(List<GatewayConfig> allGatewayConfigs, Map<String, List<RecipeModel>> recipes, ExitCriteriaModel exitModel) throws CloudbreakOrchestratorFailedException {
GatewayConfig primaryGateway = allGatewayConfigs.stream().filter(GatewayConfig::isPrimary).findFirst().get();
Set<String> gatewayTargets = getGatewayPrivateIps(allGatewayConfigs);
try (SaltConnector sc = new SaltConnector(primaryGateway, restDebug)) {
OrchestratorBootstrap scriptPillarSave = new PillarSave(sc, gatewayTargets, recipes);
Callable<Boolean> saltPillarRunner = runner(scriptPillarSave, exitCriteria, exitModel);
Future<Boolean> saltPillarRunnerFuture = parallelOrchestratorComponentRunner.submit(saltPillarRunner);
saltPillarRunnerFuture.get();
for (List<RecipeModel> recipeList : recipes.values()) {
for (RecipeModel model : recipeList) {
uploadRecipe(sc, gatewayTargets, exitModel, model.getName(), model.getScript(), RecipeExecutionPhase.convert(model.getRecipeType()));
}
}
} catch (Exception e) {
LOGGER.error("Error occurred during recipe upload", e);
throw new CloudbreakOrchestratorFailedException(e);
}
}
Aggregations