use of com.sequenceiq.cloudbreak.orchestrator.salt.poller.checker.HighStateAllRunner in project cloudbreak by hortonworks.
the class SaltOrchestrator method executeRecipes.
@SuppressFBWarnings("REC_CATCH_EXCEPTION")
private void executeRecipes(GatewayConfig gatewayConfig, Set<Node> allNodes, ExitCriteriaModel exitCriteriaModel, RecipeExecutionPhase phase, boolean forced) throws CloudbreakOrchestratorFailedException, CloudbreakOrchestratorTimeoutException {
int maxRetry = forced ? maxRetryRecipeForced : maxRetryRecipe;
try (SaltConnector sc = saltService.createSaltConnector(gatewayConfig)) {
// add 'recipe' grain to all nodes
Set<String> targetHostnames = allNodes.stream().map(Node::getHostname).collect(Collectors.toSet());
saltCommandRunner.runSaltCommand(sc, new GrainAddRunner(targetHostnames, allNodes, "recipes", phase.value()), exitCriteriaModel, maxRetry, exitCriteria);
Set<String> allHostnames = allNodes.stream().map(Node::getHostname).collect(Collectors.toSet());
runSyncAll(sc, allHostnames, allNodes, exitCriteriaModel);
if (phase == PRE_CLOUDERA_MANAGER_START) {
// Execute highstate before recipe. Otherwise ipa domain names will not be resolvable in recipe scripts.
runNewService(sc, new HighStateAllRunner(allHostnames, allNodes), exitCriteriaModel, maxRetryRecipe, true);
} else {
// Skip highstate and just execute other recipes for performace.
StateRunner stateAllRunner = new StateRunner(targetHostnames, allNodes, "recipes." + phase.value());
OrchestratorBootstrap saltJobIdTracker = new SaltJobIdTracker(sc, stateAllRunner);
Callable<Boolean> saltJobRunBootstrapRunner = saltRunner.runner(saltJobIdTracker, exitCriteria, exitCriteriaModel, maxRetry, false);
saltJobRunBootstrapRunner.call();
}
} catch (CloudbreakOrchestratorTimeoutException e) {
LOGGER.info("Recipe execution timeout. {}", phase, e);
throw e;
} catch (CloudbreakOrchestratorFailedException e) {
LOGGER.info("Orchestration error occurred during execution of recipes.", e);
throw e;
} catch (Exception e) {
LOGGER.info("Unknown error occurred during execution of recipes.", e);
throw new CloudbreakOrchestratorFailedException(e.getMessage(), e);
} finally {
try (SaltConnector sc = saltService.createSaltConnector(gatewayConfig)) {
// remove 'recipe' grain from all nodes
Set<String> targetHostnames = allNodes.stream().map(Node::getHostname).collect(Collectors.toSet());
saltCommandRunner.runSaltCommand(sc, new GrainRemoveRunner(targetHostnames, allNodes, "recipes", phase.value()), exitCriteriaModel, maxRetry, exitCriteria);
} catch (Exception e) {
LOGGER.info("Error occurred during removing recipe roles.", e);
throw new CloudbreakOrchestratorFailedException(e.getMessage(), e);
}
}
}
use of com.sequenceiq.cloudbreak.orchestrator.salt.poller.checker.HighStateAllRunner in project cloudbreak by hortonworks.
the class SaltOrchestrator method leaveDomain.
public void leaveDomain(GatewayConfig gatewayConfig, Set<Node> allNodes, String roleToRemove, String roleToAdd, ExitCriteriaModel exitCriteriaModel) throws CloudbreakOrchestratorFailedException {
try (SaltConnector sc = saltService.createSaltConnector(gatewayConfig)) {
if (isChangingRolesNecessary(gatewayConfig, sc, roleToRemove)) {
Set<String> targetHostnames = allNodes.stream().map(Node::getHostname).collect(Collectors.toSet());
saltCommandRunner.runSaltCommand(sc, new GrainAddRunner(targetHostnames, allNodes, "roles", roleToAdd), exitCriteriaModel, maxRetryLeave, exitCriteria);
saltCommandRunner.runSaltCommand(sc, new GrainRemoveRunner(targetHostnames, allNodes, "roles", roleToRemove), exitCriteriaModel, maxRetryLeave, exitCriteria);
Set<String> allHostnames = allNodes.stream().map(Node::getHostname).collect(Collectors.toSet());
SaltJobIdTracker syncAllTracker = new SaltJobIdTracker(sc, new SyncAllRunner(allHostnames, allNodes));
saltRunner.runner(syncAllTracker, exitCriteria, exitCriteriaModel, maxRetryLeave, false).call();
runNewService(sc, new HighStateAllRunner(allHostnames, allNodes), exitCriteriaModel, maxRetryLeave, true);
}
} catch (Exception e) {
LOGGER.info("Error occurred during executing highstate (for recipes).", e);
throw new CloudbreakOrchestratorFailedException(e.getMessage(), e);
}
}
Aggregations