Repository: ambari Updated Branches: refs/heads/branch-2.6 754b1f609 -> c43673f69
AMBARI-22453. ambari-server setup should surface GPL software agreement (aonishuk) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/81439af0 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/81439af0 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/81439af0 Branch: refs/heads/branch-2.6 Commit: 81439af03e4464fcf5bb7fb8b2bbc5ec858cbf64 Parents: 56079f2 Author: Andrew Onishuk <[email protected]> Authored: Thu Nov 16 11:22:58 2017 +0200 Committer: Andrew Onishuk <[email protected]> Committed: Thu Nov 16 11:22:58 2017 +0200 ---------------------------------------------------------------------- .../ambari/server/agent/ExecutionCommand.java | 1 + .../server/configuration/Configuration.java | 13 ++++++++++ .../AmbariCustomCommandExecutionHelper.java | 2 ++ .../internal/ClientConfigResourceProvider.java | 2 ++ ambari-server/src/main/python/ambari-server.py | 2 ++ .../python/ambari_server/serverConfiguration.py | 27 ++++++++++++++++---- .../main/python/ambari_server/serverSetup.py | 23 ++++++++++++++--- 7 files changed, 61 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/81439af0/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java index 91df506..9d5e29e 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java @@ -455,6 +455,7 @@ public class ExecutionCommand extends AgentCommand { String IGNORE_PACKAGE_DEPENDENCIES = "ignore_package_dependencies"; String JDK_LOCATION = "jdk_location"; String JAVA_HOME = "java_home"; + String GPL_LICENSE_ACCEPTED = "gpl_license_accepted"; String JAVA_VERSION = "java_version"; String JDK_NAME = "jdk_name"; String JCE_NAME = "jce_name"; http://git-wip-us.apache.org/repos/asf/ambari/blob/81439af0/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java index 0bd6af6..085f420 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java @@ -726,6 +726,15 @@ public class Configuration { "server.version.file", null); /** + * The full path to the file which contains the Ambari Server version. + */ + @Markdown( + description = "Whether user accepted GPL license.", + examples = { "true", "false" }) + public static final ConfigurationProperty<String> GPL_LICENSE_ACCEPTED = new ConfigurationProperty<>( + "gpl.license.accepted", null); + + /** * The location of the JDK on the Ambari Agent hosts. */ @Markdown( @@ -5319,6 +5328,10 @@ public class Configuration { return NumberUtils.toInt(getProperty(VERSION_DEFINITION_READ_TIMEOUT)); } + public Boolean getGplLicenseAccepted(){ + return getProperty(GPL_LICENSE_ACCEPTED).toLowerCase().equals("true"); + } + public String getAgentStackRetryOnInstallCount(){ return getProperty(AGENT_STACK_RETRY_COUNT); } http://git-wip-us.apache.org/repos/asf/ambari/blob/81439af0/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java index 04719a4..f75e315 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java @@ -29,6 +29,7 @@ import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.DB_NAME; import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.GROUP_LIST; import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.HOST_SYS_PREPPED; import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.JAVA_HOME; +import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.GPL_LICENSE_ACCEPTED; import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.JAVA_VERSION; import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.JCE_NAME; import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.JDK_LOCATION; @@ -1305,6 +1306,7 @@ public class AmbariCustomCommandExecutionHelper { hostLevelParams.put(HOST_SYS_PREPPED, configs.areHostsSysPrepped()); hostLevelParams.put(AGENT_STACK_RETRY_ON_UNAVAILABILITY, configs.isAgentStackRetryOnInstallEnabled()); hostLevelParams.put(AGENT_STACK_RETRY_COUNT, configs.getAgentStackRetryOnInstallCount()); + hostLevelParams.put(GPL_LICENSE_ACCEPTED, configs.getGplLicenseAccepted().toString()); Map<String, DesiredConfig> desiredConfigs = cluster.getDesiredConfigs(); Map<PropertyInfo, String> notManagedHdfsPathMap = configHelper.getPropertiesWithPropertyType(stackId, PropertyType.NOT_MANAGED_HDFS_PATH, cluster, desiredConfigs); http://git-wip-us.apache.org/repos/asf/ambari/blob/81439af0/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java index 0b048ad..0786d52 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java @@ -37,6 +37,7 @@ import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.STACK_NAM import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.STACK_VERSION; import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.USER_GROUPS; import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.USER_LIST; +import static org.apache.ambari.server.agent.ExecutionCommand.KeyNames.GPL_LICENSE_ACCEPTED; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; @@ -370,6 +371,7 @@ public class ClientConfigResourceProvider extends AbstractControllerResourceProv hostLevelParams.putAll(managementController.getRcaParameters()); hostLevelParams.put(AGENT_STACK_RETRY_ON_UNAVAILABILITY, configs.isAgentStackRetryOnInstallEnabled()); hostLevelParams.put(AGENT_STACK_RETRY_COUNT, configs.getAgentStackRetryOnInstallCount()); + hostLevelParams.put(GPL_LICENSE_ACCEPTED, configs.getGplLicenseAccepted().toString()); // Write down os specific info for the service ServiceOsSpecific anyOs = null; http://git-wip-us.apache.org/repos/asf/ambari/blob/81439af0/ambari-server/src/main/python/ambari-server.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/python/ambari-server.py b/ambari-server/src/main/python/ambari-server.py index 60c6005..6d242a3 100755 --- a/ambari-server/src/main/python/ambari-server.py +++ b/ambari-server/src/main/python/ambari-server.py @@ -409,6 +409,7 @@ def init_parser_options(parser): parser.add_option('--skip-database-check', action="store_true", default=False, help="Skip database consistency check", dest="skip_database_check") parser.add_option('--skip-view-extraction', action="store_true", default=False, help="Skip extraction of system views", dest="skip_view_extraction") parser.add_option('--auto-fix-database', action="store_true", default=False, help="Automatically fix database consistency issues", dest="fix_database_consistency") + parser.add_option('--accept-gpl', action="store_true", default=False, help="Automatically accepts GPL license", dest="accept_gpl") add_parser_options('--mpack', default=None, help="Specify the path for management pack to be installed/upgraded", @@ -512,6 +513,7 @@ def init_parser_options(parser): parser.add_option('--skip-database-check', action="store_true", default=False, help="Skip database consistency check", dest="skip_database_check") parser.add_option('--skip-view-extraction', action="store_true", default=False, help="Skip extraction of system views", dest="skip_view_extraction") parser.add_option('--auto-fix-database', action="store_true", default=False, help="Automatically fix database consistency issues", dest="fix_database_consistency") + parser.add_option('--accept-gpl', action="store_true", default=False, help="Automatically accepts GPL license", dest="accept_gpl") parser.add_option('--force-version', action="store_true", default=False, help="Force version to current", dest="force_repo_version") parser.add_option('--version', dest="stack_versions", default=None, action="append", type="string", help="Specify stack version that needs to be enabled. All other stacks versions will be disabled") http://git-wip-us.apache.org/repos/asf/ambari/blob/81439af0/ambari-server/src/main/python/ambari_server/serverConfiguration.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/python/ambari_server/serverConfiguration.py b/ambari-server/src/main/python/ambari_server/serverConfiguration.py index c7ac134..262e944 100644 --- a/ambari-server/src/main/python/ambari_server/serverConfiguration.py +++ b/ambari-server/src/main/python/ambari_server/serverConfiguration.py @@ -40,6 +40,7 @@ from ambari_server.properties import Properties from ambari_server.userInput import get_validated_string_input from ambari_server.utils import compare_versions, locate_file, on_powerpc from ambari_server.ambariPath import AmbariPath +from ambari_server.userInput import get_YN_input OS_VERSION = OSCheck().get_os_major_version() @@ -189,6 +190,15 @@ SETUP_OR_UPGRADE_MSG = "- If this is a new setup, then run the \"ambari-server s "- If this is an upgrade of an existing setup, run the \"ambari-server upgrade\" command.\n" \ "Refer to the Ambari documentation for more information on setup and upgrade." +GPL_LICENSE_PROMPT_TEXT = """To download GPL licensed products like lzo you must accept the license terms below: +LICENSE_LINE_1 +LICENSE_LINE_2 +LICENSE_LINE_3 +LICENSE_LINE_4 +LICENSE_LINE_5 +LICENSE_LINE_6 +Do you accept the GPL License Agreement [y/n] (y)?""" + DEFAULT_DB_NAME = "ambari" SECURITY_KEYS_DIR = "security.server.keys_dir" @@ -203,6 +213,9 @@ BOOTSTRAP_SETUP_AGENT_SCRIPT = 'bootstrap.setup_agent.script' STACKADVISOR_SCRIPT = 'stackadvisor.script' PID_DIR_PROPERTY = 'pid.dir' SERVER_TMP_DIR_PROPERTY = "server.tmp.dir" + +GPL_LICENSE_ACCEPTED_PROPERTY = 'gpl.license.accepted' + REQUIRED_PROPERTIES = [OS_FAMILY_PROPERTY, OS_TYPE_PROPERTY, COMMON_SERVICES_PATH_PROPERTY, SERVER_VERSION_FILE_PATH, WEBAPP_DIR_PROPERTY, STACK_LOCATION_KEY, SECURITY_KEYS_DIR, JDBC_DATABASE_NAME_PROPERTY, NR_USER_PROPERTY, JAVA_HOME_PROPERTY, JDBC_PASSWORD_PROPERTY, SHARED_RESOURCES_DIR, @@ -357,7 +370,7 @@ class ServerConfigDefaults(object): properties = get_ambari_properties() if properties == -1: print_error_msg("Error getting ambari properties") - + self.JAVA_SHARE_PATH = "/usr/share/java" self.SHARE_PATH = "/usr/share" self.OUT_DIR = parse_log4j_file(get_conf_dir() + "/log4j.properties")['ambari.log.dir'].replace("//", "/") @@ -382,10 +395,10 @@ class ServerConfigDefaults(object): self.PID_DIR = properties.get_property(PID_DIR_PROPERTY) self.BOOTSTRAP_DIR = properties.get_property(BOOTSTRAP_DIR_PROPERTY) self.RECOMMENDATIONS_DIR = properties.get_property(RECOMMENDATIONS_DIR_PROPERTY) - + # this directories should be pre-created by user and be writable. self.check_if_directories_writable([self.OUT_DIR, self.PID_DIR]) - + self.DEFAULT_LIBS_DIR = "" self.DEFAULT_VLIBS_DIR = "" @@ -425,7 +438,7 @@ class ServerConfigDefaults(object): self.MESSAGE_ERROR_RESET_NOT_ROOT = "" self.MESSAGE_ERROR_UPGRADE_NOT_ROOT = "" self.MESSAGE_CHECK_FIREWALL = "" - + def check_if_directories_writable(self, directories): for directory in directories: if not os.path.isdir(directory): @@ -434,7 +447,7 @@ class ServerConfigDefaults(object): except Exception as ex: # permission denied here is expected when ambari runs as non-root print_info_msg("Could not create {0}. Reason: {1}".format(directory, ex)) - + if not os.path.isdir(directory) or not os.access(directory, os.W_OK): raise FatalException(-1, "Unable to access {0} directory. Confirm the directory is created and is writable by Ambari Server user account '{1}'".format(directory, getpass.getuser())) @@ -1136,6 +1149,10 @@ def update_ambari_env(): return 0 +def prompt_gpl_agreement(): + result = get_YN_input(GPL_LICENSE_PROMPT_TEXT, True) + return str(result).lower() + def update_ambari_properties(): prev_conf_file = search_file(configDefaults.AMBARI_PROPERTIES_BACKUP_FILE, get_conf_dir()) conf_file = search_file(AMBARI_PROPERTIES_FILE, get_conf_dir()) http://git-wip-us.apache.org/repos/asf/ambari/blob/81439af0/ambari-server/src/main/python/ambari_server/serverSetup.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/python/ambari_server/serverSetup.py b/ambari-server/src/main/python/ambari_server/serverSetup.py index c1643f2..8a14066 100644 --- a/ambari-server/src/main/python/ambari_server/serverSetup.py +++ b/ambari-server/src/main/python/ambari_server/serverSetup.py @@ -38,10 +38,10 @@ from ambari_commons.str_utils import compress_backslashes from ambari_server.dbConfiguration import DBMSConfigFactory, TAR_GZ_ARCHIVE_TYPE, default_connectors_map, check_jdbc_drivers from ambari_server.serverConfiguration import configDefaults, JDKRelease, \ get_ambari_properties, get_is_secure, get_is_persisted, get_java_exe_path, get_JAVA_HOME, get_missing_properties, \ - get_resources_location, get_value_from_properties, read_ambari_user, update_properties, validate_jdk, write_property, \ + get_resources_location, get_value_from_properties, read_ambari_user, update_properties, validate_jdk, prompt_gpl_agreement, write_property, \ JAVA_HOME, JAVA_HOME_PROPERTY, JCE_NAME_PROPERTY, JDBC_RCA_URL_PROPERTY, JDBC_URL_PROPERTY, \ JDK_NAME_PROPERTY, JDK_RELEASES, NR_USER_PROPERTY, OS_FAMILY, OS_FAMILY_PROPERTY, OS_TYPE, OS_TYPE_PROPERTY, OS_VERSION, \ - VIEWS_DIR_PROPERTY, JDBC_DATABASE_PROPERTY, JDK_DOWNLOAD_SUPPORTED_PROPERTY, JCE_DOWNLOAD_SUPPORTED_PROPERTY, SETUP_DONE_PROPERTIES + VIEWS_DIR_PROPERTY, JDBC_DATABASE_PROPERTY, JDK_DOWNLOAD_SUPPORTED_PROPERTY, JCE_DOWNLOAD_SUPPORTED_PROPERTY, SETUP_DONE_PROPERTIES, GPL_LICENSE_ACCEPTED_PROPERTY from ambari_server.serverUtils import is_server_runing from ambari_server.setupSecurity import adjust_directory_permissions from ambari_server.userInput import get_YN_input, get_validated_string_input @@ -79,8 +79,6 @@ UNTAR_JDK_ARCHIVE = "tar --no-same-owner -xvf {0}" JDK_PROMPT = "[{0}] {1}\n" JDK_VALID_CHOICES = "^[{0}{1:d}]$" - - def get_supported_jdbc_drivers(): factory = DBMSConfigFactory() return factory.get_supported_jdbc_drivers() @@ -1083,6 +1081,20 @@ def check_setup_already_done(): return not bool(get_missing_properties(properties, property_set=SETUP_DONE_PROPERTIES)) +def write_gpl_license_accepted(options): + properties = get_ambari_properties() + if properties == -1: + err = "Error getting ambari properties" + raise FatalException(-1, err) + + if get_silent(): + result = str(options.accept_gpl).lower() + else: + result = prompt_gpl_agreement() + + properties.process_pair(GPL_LICENSE_ACCEPTED_PROPERTY, result) + update_properties(properties) + # # Setup the Ambari Server. # @@ -1130,6 +1142,9 @@ def setup(options): err = 'Downloading or installing JDK failed: {0}. Exiting.'.format(e) raise FatalException(e.code, err) + print 'Prompting GPL software agreement...' + write_gpl_license_accepted(options) + print 'Completing setup...' retcode = configure_os_settings() if not retcode == 0:
