use of com.sequenceiq.cloudbreak.orchestrator.salt.poller.checker.StateRunner in project cloudbreak by hortonworks.
the class SaltOrchestrator method callBackupRestore.
private void callBackupRestore(GatewayConfig primaryGateway, Set<String> target, Set<Node> allNodes, SaltConfig saltConfig, ExitCriteriaModel exitModel, String state) throws CloudbreakOrchestratorFailedException {
try (SaltConnector sc = saltService.createSaltConnector(primaryGateway)) {
for (Entry<String, SaltPillarProperties> propertiesEntry : saltConfig.getServicePillarConfig().entrySet()) {
OrchestratorBootstrap pillarSave = PillarSave.createCustomPillar(sc, Sets.newHashSet(primaryGateway.getPrivateAddress()), propertiesEntry.getValue());
Callable<Boolean> saltPillarRunner = saltRunner.runner(pillarSave, exitCriteria, exitModel, maxDatabaseDrRetry, maxDatabaseDrRetryOnError);
saltPillarRunner.call();
}
StateRunner stateRunner = new StateRunner(target, allNodes, state);
OrchestratorBootstrap saltJobIdTracker = new SaltJobIdTracker(sc, stateRunner);
Callable<Boolean> saltJobRunBootstrapRunner = saltRunner.runner(saltJobIdTracker, exitCriteria, exitModel, maxDatabaseDrRetry, maxDatabaseDrRetryOnError);
saltJobRunBootstrapRunner.call();
} catch (Exception e) {
LOGGER.error("Error occurred during database backup/restore", e);
throw new CloudbreakOrchestratorFailedException(e.getMessage(), e);
}
}
use of com.sequenceiq.cloudbreak.orchestrator.salt.poller.checker.StateRunner in project cloudbreak by hortonworks.
the class SaltOrchestrator method restartClusterManagerOnMaster.
@Override
public void restartClusterManagerOnMaster(GatewayConfig gatewayConfig, Set<String> target, Set<Node> allNodes, ExitCriteriaModel exitCriteriaModel) throws CloudbreakOrchestratorException {
try (SaltConnector sc = saltService.createSaltConnector(gatewayConfig)) {
StateRunner stateRunner = new StateRunner(target, allNodes, CM_SERVER_RESTART);
OrchestratorBootstrap saltJobIdTracker = new SaltJobIdTracker(sc, stateRunner);
Callable<Boolean> saltJobRunBootstrapRunner = saltRunner.runner(saltJobIdTracker, exitCriteria, exitCriteriaModel);
saltJobRunBootstrapRunner.call();
} catch (Exception e) {
LOGGER.error("Error occurred during CM Server restart", e);
throw new CloudbreakOrchestratorFailedException(e.getMessage(), e);
}
}
use of com.sequenceiq.cloudbreak.orchestrator.salt.poller.checker.StateRunner 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.StateRunner in project cloudbreak by hortonworks.
the class SaltOrchestrator method updateAgentCertDirectoryPermission.
@Override
public void updateAgentCertDirectoryPermission(GatewayConfig gatewayConfig, Set<String> target, Set<Node> allNodes, ExitCriteriaModel exitCriteriaModel) throws CloudbreakOrchestratorException {
try (SaltConnector sc = saltService.createSaltConnector(gatewayConfig)) {
StateRunner stateRunner = new StateRunner(target, allNodes, CM_AGENT_CERTDIR_PERMISSION);
OrchestratorBootstrap saltJobIdTracker = new SaltJobIdTracker(sc, stateRunner);
Callable<Boolean> saltJobRunBootstrapRunner = saltRunner.runner(saltJobIdTracker, exitCriteria, exitCriteriaModel);
saltJobRunBootstrapRunner.call();
} catch (Exception e) {
LOGGER.error("Error occurred during CM Agent certdir permission update", e);
throw new CloudbreakOrchestratorFailedException(e.getMessage(), e);
}
}
use of com.sequenceiq.cloudbreak.orchestrator.salt.poller.checker.StateRunner in project cloudbreak by hortonworks.
the class SaltOrchestrator method runOrchestratorState.
@Override
public void runOrchestratorState(OrchestratorStateParams stateParams) throws CloudbreakOrchestratorFailedException {
try (SaltConnector sc = saltService.createSaltConnector(stateParams.getPrimaryGatewayConfig())) {
StateRunner stateRunner = createStateRunner(stateParams);
OrchestratorBootstrap saltJobIdTracker = new SaltJobIdTracker(sc, stateRunner);
Optional<OrchestratorStateRetryParams> stateRetryParams = stateParams.getStateRetryParams();
Callable<Boolean> saltJobRunBootstrapRunner = stateRetryParams.isPresent() ? saltRunner.runner(saltJobIdTracker, exitCriteria, stateParams.getExitCriteriaModel(), stateRetryParams.get()) : saltRunner.runner(saltJobIdTracker, exitCriteria, stateParams.getExitCriteriaModel());
saltJobRunBootstrapRunner.call();
} catch (Exception e) {
LOGGER.error(stateParams.getErrorMessage(), e);
throw new CloudbreakOrchestratorFailedException(e.getMessage(), e);
}
}
Aggregations