public void migrateUnomi()

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 */ });
        }
    }