in tools/shell-commands/src/main/java/org/apache/unomi/shell/migration/service/MigrationServiceImpl.java [70:146]
public void migrateUnomi(String originVersion, boolean skipConfirmation, Session session) throws Exception {
System.out.println("Migrating Unomi...");
// Wait for config to be loaded by file install, in case of unomi.autoMigrate the OSGI conf may take a few seconds to be loaded correctly.
waitForMigrationConfigLoad(60, 1);
// Load migration scrips
Set<MigrationScript> scripts = loadOSGIScripts();
scripts.addAll(loadFileSystemScripts());
// Create migration context
Files.createDirectories(MIGRATION_FS_SCRIPTS_FOLDER);
MigrationContext context = new MigrationContext(session, migrationConfig);
context.tryRecoverFromHistory();
// no origin version, just print available scripts
if (originVersion == null) {
displayMigrations(scripts, context);
context.printMessage("Select your migration starting point by specifying the current version (e.g. 1.2.0) or the last script that was already run (e.g. 1.2.1)");
return;
}
// Check that there is some migration scripts available from given version
Version fromVersion = new Version(originVersion);
scripts = filterScriptsFromVersion(scripts, fromVersion);
if (scripts.size() == 0) {
context.printMessage("No migration scripts available found starting from version: " + originVersion);
return;
} else {
context.printMessage("The following migration scripts starting from version: " + originVersion + " will be executed.");
displayMigrations(scripts, context);
}
// Check for user approval before migrate
if (!skipConfirmation && context.askUserWithAuthorizedAnswer(
"[WARNING] You are about to execute a migration, this a very sensitive operation, are you sure? (yes/no): ",
Arrays.asList("yes", "no")).equalsIgnoreCase("no")) {
context.printMessage("Migration process aborted");
return;
}
// Handle credentials
CredentialsProvider credentialsProvider = null;
String login = context.getConfigString(CONFIG_ES_LOGIN);
if (StringUtils.isNotEmpty(login)) {
credentialsProvider = new BasicCredentialsProvider();
UsernamePasswordCredentials credentials
= new UsernamePasswordCredentials(login, context.getConfigString(CONFIG_ES_PASSWORD));
credentialsProvider.setCredentials(AuthScope.ANY, credentials);
}
try (CloseableHttpClient httpClient = HttpUtils.initHttpClient(context.getConfigBoolean(CONFIG_TRUST_ALL_CERTIFICATES), credentialsProvider)) {
// Compile scripts
context.setHttpClient(httpClient);
scripts = parseScripts(scripts, context);
// Start migration
context.printMessage("Starting migration process from version: " + originVersion);
for (MigrationScript migrateScript : scripts) {
context.printMessage("Starting execution of: " + migrateScript);
try {
migrateScript.getCompiledScript().run();
} catch (MigrationException e) {
context.printException("Error executing: " + migrateScript);
throw e;
} catch (Exception e) {
context.printException("Error executing: " + migrateScript, e);
throw e;
}
context.printMessage("Finish execution of: " + migrateScript);
}
// Persist final flag in history
context.performMigrationStep("migrationStatus", () -> { /* nothing it's just a marker to persist in the history to know that everything is finished */ });
}
}