Package com.cloudbees.sdk.commands.bg

Source Code of com.cloudbees.sdk.commands.bg.ApplicationBlueGreenSwitch

package com.cloudbees.sdk.commands.bg;

import com.cloudbees.api.ApplicationInfo;
import com.cloudbees.api.ApplicationStatusResponse;
import com.cloudbees.api.BeesClient;
import com.cloudbees.api.ConfigurationParametersResponse;
import com.cloudbees.api.config.ConfigParameters;
import com.cloudbees.api.config.ParameterMap;
import com.cloudbees.sdk.cli.BeesCommand;
import com.cloudbees.sdk.cli.CLICommand;
import com.cloudbees.sdk.utils.Helper;
import org.kohsuke.args4j.Option;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@BeesCommand(group="Application", description = "Switch an application proxy alias using the Blue-Green process")
@CLICommand("app:bg:switch")
public class ApplicationBlueGreenSwitch extends ApplicationBlueGreenBase {

    @Option(name = "-f", usage = "force switch without prompting", aliases = "--force")
    private Boolean force;


    public ApplicationBlueGreenSwitch() {
    }

    @Override
    public int main() throws Exception {
        BeesClient client = getBeesClient(BeesClient.class, getAppId());

        List<ApplicationAlias> aliases = getAliases(client, getAppId());
        if (aliases.isEmpty()) {
            System.err.println("ERROR: Application not configured for Blue-Green deployment switch. Use the \"blue-green=APP_ID[ALIASES]\" parameter");
            return 1;
        }

        if (force == null || !force.booleanValue()) {
            if (!Helper.promptMatches("Are you sure you want to switch the application aliases: (y/n) ", "[yY].*")) {
                return 0;
            }
        }

        for (ApplicationAlias alias : aliases) {
            Map<String, String> settings = new HashMap<String, String>();
            settings.put("aliases", alias.getAliasString());

            try {
                ApplicationStatusResponse res = client.applicationProxyUpdate(alias.getAppId(), settings);
                System.out.println("application proxy for " + alias.getAppId() + " : " + res.getStatus());
            } catch (Exception e) {
                System.err.println("ERROR: failed to update application proxy for " + alias.getAppId() + " : " + e.getMessage());
            }
        }

        return 0;
    }

    protected List<ApplicationAlias> getAliases(BeesClient client, String appId) throws IOException {
        List<ApplicationAlias> applicationAliasList = new ArrayList<ApplicationAlias>();
        try {
            ConfigurationParametersResponse res = client.configurationParameters(appId, "application");
            if (res.getConfiguration() != null) {
                ConfigParameters configParameters = ConfigParameters.parse(res.getConfiguration());
                ParameterMap parameterMap = configParameters.getParameters();

                String param = parameterMap.get("blue-green");
                if (param != null) {
                    ApplicationAlias bgApp = new ApplicationAlias(getAccount(), param);

                    // Get the current alias if any
                    ApplicationInfo applicationInfo = client.applicationInfo(appId);
                    String aliases = applicationInfo.getSettings().get("aliases");
                    ApplicationAlias currentApp = new ApplicationAlias(getAccount(), appId, aliases);

                    // If the current app has the alias already, set the other app alias
                    if (currentApp.containAliases(bgApp.getAliases())) {
                        addApplicationAlias(applicationAliasList, bgApp);

                        // Check to see if the other app has aliases
                        ApplicationInfo applicationInfo2 = client.applicationInfo(bgApp.getAppId());
                        String aliases2 = applicationInfo2.getSettings().get("aliases");
                        // If it has aliases, let swap them to the current app
                        if (aliases2 != null) {
                            addApplicationAlias(applicationAliasList, currentApp.getAppId(), aliases2);
                        }
                    // If the current app does not have the alias, set them
                    } else {
                        addApplicationAlias(applicationAliasList, currentApp.getAppId(), bgApp.getAliases());

                        // if the current app has other aliases, set the new app with them
                        if (currentApp.hasAliases()) {
                            addApplicationAlias(applicationAliasList, bgApp.getAppId(), currentApp.getAliases());
                        }
                    }
                }
            }

        } catch (Exception e) {
            System.err.println("WARNING: Cannot determine Blue-Green settings: " + e.getMessage());
        }

        return applicationAliasList;
    }

    private void addApplicationAlias(List<ApplicationAlias> applicationAliasList, String appId, String alias) throws IOException {
        ApplicationAlias applicationAlias = new ApplicationAlias(getAccount(), appId, alias);
        addApplicationAlias(applicationAliasList, applicationAlias);
    }
    private void addApplicationAlias(List<ApplicationAlias> applicationAliasList, String appId, List<String> alias) throws IOException {
        ApplicationAlias applicationAlias = new ApplicationAlias(getAccount(), appId, alias);
        addApplicationAlias(applicationAliasList, applicationAlias);
    }
    private void addApplicationAlias(List<ApplicationAlias> applicationAliasList, ApplicationAlias alias) {
        applicationAliasList.add(alias);
        System.out.println(String.format("Setting alias [%s] for application: %s", alias.getAliasString(), alias.getAppId()));
    }
}
TOP

Related Classes of com.cloudbees.sdk.commands.bg.ApplicationBlueGreenSwitch

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.