All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.gs.obevo.db.cmdline.DbDeployerMain Maven / Gradle / Ivy

/**
 * Copyright 2017 Goldman Sachs.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package com.gs.obevo.db.cmdline;

import java.util.Date;

import com.gs.obevo.api.appdata.Environment;
import com.gs.obevo.api.platform.DeployerAppContext;
import com.gs.obevo.api.platform.MainDeployerArgs;
import com.gs.obevo.cmdline.AbstractMain;
import com.gs.obevo.cmdline.DeployerArgs;
import com.gs.obevo.impl.changepredicate.ChangeKeyPredicateBuilder;
import com.gs.obevo.util.inputreader.ConsoleInputReader;
import com.gs.obevo.util.inputreader.UserInputReader;
import org.apache.commons.lang3.Validate;
import org.eclipse.collections.impl.list.fixed.ArrayAdapter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class DbDeployerMain extends AbstractMain {
    private static final Logger LOG = LoggerFactory.getLogger(DbDeployerMain.class);
    private final UserInputReader userInputReader = new ConsoleInputReader();

    public void start(DeployerAppContext ctxt, DeployerArgs args) {
        Environment env = ctxt.getEnvironment();

        LOG.info("Setting up the the environment infrastructure for {}; will {} on setup exception", env.getName(), args.isStrictSetupEnvInfra() ? "fail" : "warn");
        if (args.getForceEnvSetup() != null && args.getForceEnvSetup().booleanValue()) {
            ctxt.setupEnvInfra(args.isStrictSetupEnvInfra(), args.getForceEnvSetup().booleanValue());
        } else {
            ctxt.setupEnvInfra(args.isStrictSetupEnvInfra());
        }

        if (args.shouldExecuteClean()) {
            this.checkIfCleanBuildShouldProceed(env, args.isNoPrompt());
            LOG.info("Now cleaning the environment " + env.getName()
                    + ", as specified at the command line");
            ctxt.cleanEnvironment();
            LOG.info("Done cleaning the environment");
        }

        if (args.shouldExecuteDeploy()) {
            LOG.info("Starting deployment for [" + env.getDisplayString() + "] at time [" + new Date() + "]");
            MainDeployerArgs dbArgs = new MainDeployerArgs();
            // Note - while the API-side arg objects default to noPrompt == true, the command-line API will default it to false
            // (using appropriate defaults for each mechanism)
            dbArgs.setNoPrompt(args.isNoPrompt());
            dbArgs.setPerformInitOnly(args.isPerformInitOnly());
            dbArgs.setPreview(args.isPreview());
            dbArgs.setRollback(args.isRollback());
            dbArgs.setUseBaseline(args.isUseBaseline());
            dbArgs.setOnboardingMode(args.isOnboardingMode());
            dbArgs.setProductVersion(args.getProductVersion());
            if (args.getChangesets() != null && args.getChangesets().length > 0) {
                dbArgs.setChangesetNames(ArrayAdapter.adapt(args.getChangesets()).toSet().toImmutable());
            }
            if (args.isAllChangesets()) {
                dbArgs.setAllChangesets(args.isAllChangesets());
            }
            if (args.getChangeCriteria() != null) {
                dbArgs.setChangeInclusionPredicate(ChangeKeyPredicateBuilder.parseFullPredicate(args.getChangeCriteria()));
            }
            dbArgs.setSourceGraphExportFile(args.getSourceGraphExportFile());
            dbArgs.setSourceGraphExportFormat(args.getSourceGraphExportFormat());

            ctxt.deploy(dbArgs);
        }
    }

    private void checkIfCleanBuildShouldProceed(Environment env, boolean noPrompt) {
        LOG.info("Request was made to clean the environment...");

        Validate.isTrue(env.isCleanBuildAllowed(), "Clean build not allowed for this environment [" + env.getName()
                + "] ! Exiting...");

        if (!noPrompt) {
            LOG.info("WARNING - This will wipe the whole environment!!! Are you sure you want to proceed? (Y/N)");

            String input = this.userInputReader.readLine(null);
            Validate.isTrue(input.trim().equalsIgnoreCase("Y"), "User did not enter Y. Hence, we will exit from here.");
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy