예제 #1
0
  def ensure_jdbc_driver_installed(self, properties):
    (result, msg) = self._prompt_jdbc_driver_install(properties)
    if result == -1:
      print_error_msg(msg)
      raise FatalException(-1, msg)

    if result != 1:
      result = self._install_jdbc_driver(properties, result)
    return cbool(result)
  def ensure_jdbc_driver_installed(self, properties):
    (result, msg) = self._prompt_jdbc_driver_install(properties)
    if result == -1:
      print_error_msg(msg)
      raise FatalException(-1, msg)

    if result != 1:
      result = self._install_jdbc_driver(properties, result)
    return cbool(result)
예제 #3
0
  def install_packages(self, package_list):
    """
    Actually install the packages using the package manager.
    :param package_list: List of package names to install
    :return: Returns 0 if no errors were found, and 1 otherwise.
    """
    ret_code = 0
    
    config = self.get_config()
    agent_stack_retry_on_unavailability = cbool(config['hostLevelParams']['agent_stack_retry_on_unavailability'])
    agent_stack_retry_count = cint(config['hostLevelParams']['agent_stack_retry_count'])

    # Install packages
    packages_were_checked = False
    stack_selector_package = stack_tools.get_stack_tool_package(stack_tools.STACK_SELECTOR_NAME)
    try:
      Package(stack_selector_package,
              action="upgrade",
              retry_on_repo_unavailability=agent_stack_retry_on_unavailability,
              retry_count=agent_stack_retry_count
      )
      
      packages_installed_before = []
      allInstalledPackages(packages_installed_before)
      packages_installed_before = [package[0] for package in packages_installed_before]
      packages_were_checked = True
      filtered_package_list = self.filter_package_list(package_list)
      for package in filtered_package_list:
        name = self.format_package_name(package['name'])
        Package(name,
          action="upgrade", # this enables upgrading non-versioned packages, despite the fact they exist. Needed by 'mahout' which is non-version but have to be updated     
          retry_on_repo_unavailability=agent_stack_retry_on_unavailability,
          retry_count=agent_stack_retry_count
        )
    except Exception, err:
      ret_code = 1
      Logger.logger.exception("Package Manager failed to install packages. Error: {0}".format(str(err)))

      # Remove already installed packages in case of fail
      if packages_were_checked and packages_installed_before:
        packages_installed_after = []
        allInstalledPackages(packages_installed_after)
        packages_installed_after = [package[0] for package in packages_installed_after]
        packages_installed_before = set(packages_installed_before)
        new_packages_installed = [package for package in packages_installed_after if package not in packages_installed_before]

        if OSCheck.is_ubuntu_family():
          package_version_string = self.repository_version.replace('.', '-')
        else:
          package_version_string = self.repository_version.replace('-', '_')
          package_version_string = package_version_string.replace('.', '_')
        for package in new_packages_installed:
          if package_version_string and (package_version_string in package):
            Package(package, action="remove")
예제 #4
0
    def __init__(self, options, properties, storage_type):
        super(SQLServerConfig, self).__init__(options, properties,
                                              storage_type)
        """
    #Just load the defaults. The derived classes will be able to modify them later
    """
        self.dbms = DATABASE_DBMS_SQLSERVER
        self.driver_class_name = DATABASE_DRIVER_NAME_SQLSERVER

        self.JDBC_DRIVER_INSTALL_MSG = 'Before starting Ambari Server, you must install the SQL Server JDBC driver.'

        # The values from options supersede the values from properties
        self.database_host = DBMSConfig._init_member_with_prop_default(
            options, "database_host", properties, self.dbPropKeys.server_key,
            "")
        try:
            if not self.database_host:
                self.database_host = options.default_database_host
            else:
                self.database_host = compress_backslashes(self.database_host)
        except:
            self.database_host = DATABASE_SERVER_SQLSERVER_DEFAULT
            pass
        self.database_port = DBMSConfig._init_member_with_prop_default(
            options, "database_port", properties, self.dbPropKeys.port_key,
            "1433")
        self.database_name = DBMSConfig._init_member_with_prop_default(
            options, "database_name", properties, self.dbPropKeys.db_name_key,
            configDefaults.DEFAULT_DB_NAME)

        self.use_windows_authentication = cbool(
            DBMSConfig._init_member_with_prop_default(
                options, "database_windows_auth", properties,
                self.dbAuthKeys.integrated_auth_key, False))
        self.database_username = DBMSConfig._init_member_with_prop_default(
            options, "database_username", properties,
            self.dbAuthKeys.user_name_key, DEFAULT_USERNAME)
        self.database_password = DBMSConfig._init_member_with_default(
            options, "database_password", "")
        if not self.database_password:
            self.database_password = DBMSConfig._read_password_from_properties(
                properties)

        self.database_url = self._build_sql_server_connection_string()

        self.persistence_property = None

        self.env_var_db_name = ""
        self.env_var_db_log_name = ""
        self.env_var_db_owner = ""

        self.init_script_file = ""
        self.drop_tables_script_file = ""
  def __init__(self, options, properties, storage_type):
    super(SQLServerConfig, self).__init__(options, properties, storage_type)

    """
    #Just load the defaults. The derived classes will be able to modify them later
    """
    self.dbms = DATABASE_DBMS_SQLSERVER
    self.driver_class_name = DATABASE_DRIVER_NAME_SQLSERVER

    self.JDBC_DRIVER_INSTALL_MSG = 'Before starting Ambari Server, you must install the SQL Server JDBC driver.'

    # The values from options supersede the values from properties
    self.database_host = DBMSConfig._init_member_with_prop_default(options, "database_host", properties, self.dbPropKeys.server_key, "")
    try:
      if not self.database_host:
        self.database_host = options.default_database_host
      else:
        self.database_host = compress_backslashes(self.database_host)
    except:
      self.database_host = DATABASE_SERVER_SQLSERVER_DEFAULT
      pass
    self.database_port = DBMSConfig._init_member_with_prop_default(options, "database_port",
                                                                   properties, self.dbPropKeys.port_key, "1433")
    self.database_name = DBMSConfig._init_member_with_prop_default(options, "database_name",
                                                                   properties, self.dbPropKeys.db_name_key, configDefaults.DEFAULT_DB_NAME)

    self.use_windows_authentication = cbool(DBMSConfig._init_member_with_prop_default(options, "database_windows_auth",
        properties, self.dbAuthKeys.integrated_auth_key, False))
    self.database_username = DBMSConfig._init_member_with_prop_default(options, "database_username",
                                                                       properties, self.dbAuthKeys.user_name_key, DEFAULT_USERNAME)
    self.database_password = DBMSConfig._init_member_with_default(options, "database_password", "")
    if not self.database_password:
      self.database_password = DBMSConfig._read_password_from_properties(properties)

    self.database_url = self._build_sql_server_connection_string()

    self.persistence_property = None

    self.env_var_db_name = ""
    self.env_var_db_log_name = ""
    self.env_var_db_owner = ""

    self.init_script_file = ""
    self.drop_tables_script_file = ""
예제 #6
0
from resource_management.libraries.functions.is_empty import is_empty
from resource_management.libraries.functions.version import format_stack_version
from resource_management.libraries.functions.copy_tarball import STACK_VERSION_PATTERN
from resource_management.libraries.functions import get_kinit_path
from resource_management.libraries.functions.get_not_managed_resources import get_not_managed_resources
from resource_management.libraries.script.script import Script
from resource_management.libraries.functions.get_port_from_url import get_port_from_url
from resource_management.libraries import functions

# server configurations
config = Script.get_config()
tmp_dir = Script.get_tmp_dir()
sudo = AMBARI_SUDO_BINARY

stack_name = default("/hostLevelParams/stack_name", None)
agent_stack_retry_on_unavailability = cbool(
    config["hostLevelParams"]["agent_stack_retry_on_unavailability"])
agent_stack_retry_count = cint(
    config["hostLevelParams"]["agent_stack_retry_count"])

# node hostname
hostname = config["hostname"]

# This is expected to be of the form #.#.#.#
stack_version_unformatted = str(config['hostLevelParams']['stack_version'])
stack_version_formatted_major = format_stack_version(stack_version_unformatted)
stack_is_hdp21 = Script.is_stack_less_than("2.2")

# this is not available on INSTALL action because hdp-select is not available
stack_version_formatted = functions.get_stack_version('hive-server2')

# New Cluster Stack Version that is defined during the RESTART of a Rolling Upgrade.
예제 #7
0
파일: params.py 프로젝트: gauravn7/ambari
"""

from ambari_commons.constants import AMBARI_SUDO_BINARY
from ambari_commons.str_utils import cbool, cint
from resource_management.libraries.functions.version import format_stack_version, compare_versions
from resource_management.core.system import System
from resource_management.libraries.script.script import Script
from resource_management.libraries.functions import default, format

config = Script.get_config()
tmp_dir = Script.get_tmp_dir()
sudo = AMBARI_SUDO_BINARY

stack_version_unformatted = str(config['hostLevelParams']['stack_version'])
agent_stack_retry_on_unavailability = cbool(
    default("/hostLevelParams/agent_stack_retry_on_unavailability", None))
agent_stack_retry_count = cint(
    default("/hostLevelParams/agent_stack_retry_count", None))
stack_version_formatted = format_stack_version(stack_version_unformatted)

#users and groups
hbase_user = config['configurations']['hbase-env']['hbase_user']
smoke_user = config['configurations']['cluster-env']['smokeuser']
gmetad_user = config['configurations']['ganglia-env']["gmetad_user"]
gmond_user = config['configurations']['ganglia-env']["gmond_user"]
tez_user = config['configurations']['tez-env']["tez_user"]

user_group = config['configurations']['cluster-env']['user_group']
proxyuser_group = default("/configurations/hadoop-env/proxyuser_group",
                          "users")
예제 #8
0
    def install_packages(self, package_list):
        """
    Actually install the packages using the package manager.
    :param package_list: List of package names to install
    :return: Returns 0 if no errors were found, and 1 otherwise.
    """
        ret_code = 0

        config = self.get_config()
        agent_stack_retry_on_unavailability = cbool(
            config['ambariLevelParams']['agent_stack_retry_on_unavailability'])
        agent_stack_retry_count = cint(
            config['ambariLevelParams']['agent_stack_retry_count'])

        # Install packages
        packages_were_checked = False
        packages_installed_before = []
        stack_selector_package = stack_tools.get_stack_tool_package(
            stack_tools.STACK_SELECTOR_NAME)

        try:
            # install the stack-selector; we need to supply the action as "upgrade" here since the normal
            # install command will skip if the package is already installed in the system.
            # This is required for non-versioned components, like stack-select, since each version of
            # the stack comes with one. Also, scope the install by repository since we need to pick a
            # specific repo that the stack-select tools are coming out of in case there are multiple
            # patches installed
            repositories = config['repositoryFile']['repositories']
            command_repos = CommandRepository(config['repositoryFile'])
            repository_ids = [
                repository['repoId'] for repository in repositories
            ]
            repos_to_use = {}
            for repo_id in repository_ids:
                if repo_id in self.repo_files:
                    repos_to_use[repo_id] = self.repo_files[repo_id]

            self.repo_mgr.upgrade_package(
                stack_selector_package,
                RepoCallContext(ignore_errors=False,
                                use_repos=repos_to_use,
                                retry_on_repo_unavailability=
                                agent_stack_retry_on_unavailability,
                                retry_count=agent_stack_retry_count))

            packages_installed_before = self.repo_mgr.installed_packages()
            packages_installed_before = [
                package[0] for package in packages_installed_before
            ]
            packages_were_checked = True
            filtered_package_list = self.filter_package_list(package_list)
            try:
                available_packages_in_repos = self.repo_mgr.get_available_packages_in_repos(
                    command_repos)
            except Exception:
                available_packages_in_repos = []

            installation_context = RepoCallContext(
                ignore_errors=False,
                retry_on_repo_unavailability=
                agent_stack_retry_on_unavailability,
                retry_count=agent_stack_retry_count)

            for package in filtered_package_list:
                name = self.get_package_from_available(
                    package['name'], available_packages_in_repos)

                # This enables upgrading non-versioned packages, despite the fact they exist.
                # Needed by 'mahout' which is non-version but have to be updated
                self.repo_mgr.upgrade_package(name, installation_context)
        except Exception as err:
            ret_code = 1
            Logger.logger.error(
                "Package Manager failed to install packages: {0}".format(
                    str(err)))

            # Remove already installed packages in case of fail
            if packages_were_checked and packages_installed_before:
                packages_installed_after = self.repo_mgr.installed_packages()
                packages_installed_after = [
                    package[0] for package in packages_installed_after
                ]
                packages_installed_before = set(packages_installed_before)
                new_packages_installed = [
                    package for package in packages_installed_after
                    if package not in packages_installed_before
                ]

                if OSCheck.is_ubuntu_family():
                    package_version_string = self.repository_version.replace(
                        '.', '-')
                else:
                    package_version_string = self.repository_version.replace(
                        '-', '_')
                    package_version_string = package_version_string.replace(
                        '.', '_')

                for package in new_packages_installed:
                    if package_version_string and (package_version_string
                                                   in package):
                        self.repo_mgr.remove_package(package,
                                                     RepoCallContext())

        if not self.repo_mgr.verify_dependencies():
            ret_code = 1
            Logger.logger.error("Failure while verifying dependencies")
            Logger.logger.error(
                "*******************************************************************************"
            )
            Logger.logger.error(
                "Manually verify and fix package dependencies and then re-run install_packages"
            )
            Logger.logger.error(
                "*******************************************************************************"
            )

        # Compute the actual version in order to save it in structured out
        try:
            if ret_code == 0:
                self.compute_actual_version()
            else:
                self.check_partial_install()
        except Fail as err:
            ret_code = 1
            Logger.logger.exception(
                "Failure while computing actual version. Error: {0}".format(
                    str(err)))
        return ret_code
예제 #9
0
    def install_packages(self, package_list):
        """
    Actually install the packages using the package manager.
    :param package_list: List of package names to install
    :return: Returns 0 if no errors were found, and 1 otherwise.
    """
        ret_code = 0

        config = self.get_config()
        agent_stack_retry_on_unavailability = cbool(
            config['hostLevelParams']['agent_stack_retry_on_unavailability'])
        agent_stack_retry_count = cint(
            config['hostLevelParams']['agent_stack_retry_count'])

        # Install packages
        packages_were_checked = False
        stack_selector_package = stack_tools.get_stack_tool_package(
            stack_tools.STACK_SELECTOR_NAME)
        try:
            Package(stack_selector_package,
                    action="upgrade",
                    retry_on_repo_unavailability=
                    agent_stack_retry_on_unavailability,
                    retry_count=agent_stack_retry_count)

            packages_installed_before = []
            allInstalledPackages(packages_installed_before)
            packages_installed_before = [
                package[0] for package in packages_installed_before
            ]
            packages_were_checked = True
            filtered_package_list = self.filter_package_list(package_list)
            try:
                available_packages_in_repos = packages_analyzer.get_available_packages_in_repos(
                    config['repositoryFile']['repositories'])
            except Exception:
                available_packages_in_repos = []
            for package in filtered_package_list:
                name = self.get_package_from_available(
                    package['name'], available_packages_in_repos)
                Package(
                    name,
                    action=
                    "upgrade",  # this enables upgrading non-versioned packages, despite the fact they exist. Needed by 'mahout' which is non-version but have to be updated     
                    retry_on_repo_unavailability=
                    agent_stack_retry_on_unavailability,
                    retry_count=agent_stack_retry_count)
        except Exception as err:
            ret_code = 1
            Logger.logger.exception(
                "Package Manager failed to install packages. Error: {0}".
                format(str(err)))

            # Remove already installed packages in case of fail
            if packages_were_checked and packages_installed_before:
                packages_installed_after = []
                allInstalledPackages(packages_installed_after)
                packages_installed_after = [
                    package[0] for package in packages_installed_after
                ]
                packages_installed_before = set(packages_installed_before)
                new_packages_installed = [
                    package for package in packages_installed_after
                    if package not in packages_installed_before
                ]

                if OSCheck.is_ubuntu_family():
                    package_version_string = self.repository_version.replace(
                        '.', '-')
                else:
                    package_version_string = self.repository_version.replace(
                        '-', '_')
                    package_version_string = package_version_string.replace(
                        '.', '_')

                for package in new_packages_installed:
                    if package_version_string and (package_version_string
                                                   in package):
                        Package(package, action="remove")

        if not verifyDependencies():
            ret_code = 1
            Logger.logger.error("Failure while verifying dependencies")
            Logger.logger.error(
                "*******************************************************************************"
            )
            Logger.logger.error(
                "Manually verify and fix package dependencies and then re-run install_packages"
            )
            Logger.logger.error(
                "*******************************************************************************"
            )

        # Compute the actual version in order to save it in structured out
        try:
            if ret_code == 0:
                self.compute_actual_version()
            else:
                self.check_partial_install()
        except Fail as err:
            ret_code = 1
            Logger.logger.exception(
                "Failure while computing actual version. Error: {0}".format(
                    str(err)))
        return ret_code
예제 #10
0
    def install_packages(self, package_list):
        """
    Actually install the packages using the package manager.
    :param package_list: List of package names to install
    :return: Returns 0 if no errors were found, and 1 otherwise.
    """
        ret_code = 0

        # Clear cache of package manager right before installation of the packages
        self._clear_package_manager_cache()

        config = self.get_config()
        agent_stack_retry_on_unavailability = cbool(
            config['hostLevelParams']['agent_stack_retry_on_unavailability'])
        agent_stack_retry_count = cint(
            config['hostLevelParams']['agent_stack_retry_count'])

        # Install packages
        packages_were_checked = False
        try:
            Package(self.get_base_packages_to_install(),
                    retry_on_repo_unavailability=
                    agent_stack_retry_on_unavailability,
                    retry_count=agent_stack_retry_count)

            packages_installed_before = []
            allInstalledPackages(packages_installed_before)
            packages_installed_before = [
                package[0] for package in packages_installed_before
            ]
            packages_were_checked = True
            filtered_package_list = self.filter_package_list(package_list)
            for package in filtered_package_list:
                name = self.format_package_name(package['name'],
                                                self.repository_version)
                Package(
                    name,
                    use_repos=list(self.current_repo_files) if
                    OSCheck.is_ubuntu_family() else self.current_repositories,
                    skip_repos=[self.REPO_FILE_NAME_PREFIX +
                                "*"] if OSCheck.is_redhat_family() else [],
                    retry_on_repo_unavailability=
                    agent_stack_retry_on_unavailability,
                    retry_count=agent_stack_retry_count)
        except Exception, err:
            ret_code = 1
            Logger.logger.exception(
                "Package Manager failed to install packages. Error: {0}".
                format(str(err)))

            # Remove already installed packages in case of fail
            if packages_were_checked and packages_installed_before:
                packages_installed_after = []
                allInstalledPackages(packages_installed_after)
                packages_installed_after = [
                    package[0] for package in packages_installed_after
                ]
                packages_installed_before = set(packages_installed_before)
                new_packages_installed = [
                    package for package in packages_installed_after
                    if package not in packages_installed_before
                ]

                if OSCheck.is_ubuntu_family():
                    package_version_string = self.repository_version.replace(
                        '.', '-')
                else:
                    package_version_string = self.repository_version.replace(
                        '-', '_')
                    package_version_string = package_version_string.replace(
                        '.', '_')
                for package in new_packages_installed:
                    if package_version_string and (package_version_string
                                                   in package):
                        Package(package, action="remove")