package com.sequenceiq.cloudbreak.shell.commands.common; import org.springframework.shell.core.CommandMarker; import org.springframework.shell.core.annotation.CliAvailabilityIndicator; import org.springframework.shell.core.annotation.CliCommand; import org.springframework.shell.core.annotation.CliOption; import com.sequenceiq.cloudbreak.api.model.AmbariDatabaseDetailsJson; import com.sequenceiq.cloudbreak.shell.completion.DatabaseVendor; import com.sequenceiq.cloudbreak.shell.model.ShellContext; public class DatabaseCommands implements CommandMarker { private ShellContext shellContext; public DatabaseCommands(ShellContext shellContext) { this.shellContext = shellContext; } @CliAvailabilityIndicator("database configure") public boolean isConfigureAvailable() { return true; } @CliCommand(value = "database configure", help = "Configure Ambari remote database") public String configureDatabase( @CliOption(key = "vendor", mandatory = true, help = "Vendor of database") DatabaseVendor vendor, @CliOption(key = "host", mandatory = true, help = "Hostname of database") String host, @CliOption(key = "port", mandatory = true, help = "Port number of database") Integer port, @CliOption(key = "name", mandatory = true, help = "Database name") String name, @CliOption(key = "username", mandatory = true, help = "Database user") String username, @CliOption(key = "password", mandatory = true, help = "Database password") String password ) { AmbariDatabaseDetailsJson databaseDetails = new AmbariDatabaseDetailsJson(); databaseDetails.setVendor(com.sequenceiq.cloudbreak.api.model.DatabaseVendor.valueOf(vendor.getName())); databaseDetails.setHost(host); databaseDetails.setPort(port); databaseDetails.setName(name); databaseDetails.setUserName(username); databaseDetails.setPassword(password); try { String error = shellContext.cloudbreakClient().utilEndpoint().testAmbariDatabase(databaseDetails).getError(); if (error == null) { shellContext.setAmbariDatabaseDetailsJson(databaseDetails); return com.sequenceiq.cloudbreak.api.model.DatabaseVendor.outOfTheBoxVendors().contains(databaseDetails.getVendor()) ? "This type of database supported out of the box, Cloudbreak would initialize it" : "This type of database not supported out of the box, Cloudbreak couldn't initialize it"; } return error; } catch (Exception ex) { shellContext.resetAmbariDatabaseDetailsJson(); throw shellContext.exceptionTransformer().transformToRuntimeException(ex); } } }