http://git-wip-us.apache.org/repos/asf/ambari/blob/33879743/ambari-common/src/main/python/resource_management/libraries/script/script.py
----------------------------------------------------------------------
diff --git 
a/ambari-common/src/main/python/resource_management/libraries/script/script.py 
b/ambari-common/src/main/python/resource_management/libraries/script/script.py
index 54a7e6d..313b666 100644
--- 
a/ambari-common/src/main/python/resource_management/libraries/script/script.py
+++ 
b/ambari-common/src/main/python/resource_management/libraries/script/script.py
@@ -51,13 +51,13 @@ from resource_management.libraries.functions.version import 
compare_versions
 from resource_management.libraries.functions.version import 
format_stack_version
 from resource_management.libraries.functions import stack_tools
 from resource_management.libraries.functions.constants import Direction
-from resource_management.libraries.functions import packages_analyzer
 from resource_management.libraries.script.config_dictionary import 
ConfigDictionary, UnknownConfiguration
 from resource_management.core.resources.system import Execute
 from contextlib import closing
 from resource_management.libraries.functions.stack_features import 
check_stack_feature
 from resource_management.libraries.functions.constants import StackFeature
 from resource_management.libraries.functions.show_logs import show_logs
+from resource_management.core.providers import get_provider
 from resource_management.libraries.functions.fcntl_based_process_lock import 
FcntlBasedProcessLock
 
 import ambari_simplejson as json # simplejson is much faster comparing to 
Python 2.6 json module and has the same functions set.
@@ -435,7 +435,9 @@ class Script(object):
     if not Script.stack_version_from_distro_select or '*' in 
Script.stack_version_from_distro_select:
       # FIXME: this method is not reliable to get stack-selector-version
       # as if there are multiple versions installed with different 
<stack-selector-tool>, we won't detect the older one (if needed).
-      Script.stack_version_from_distro_select = 
packages_analyzer.getInstalledPackageVersion(
+      pkg_provider = get_provider("Package")
+
+      Script.stack_version_from_distro_select = 
pkg_provider.get_installed_package_version(
               
stack_tools.get_stack_tool_package(stack_tools.STACK_SELECTOR_NAME))
 
     return Script.stack_version_from_distro_select
@@ -456,12 +458,19 @@ class Script(object):
         return package
 
 
-  def format_package_name(self, name):
+  def format_package_name(self, name, repo_version=None):
     from resource_management.libraries.functions.default import default
     """
     This function replaces ${stack_version} placeholder with actual version.  
If the package
     version is passed from the server, use that as an absolute truth.
+    
+    :param name name of the package
+    :param repo_version actual version of the repo currently installing
     """
+    stack_version_package_formatted = ""
+
+    if not repo_version:
+      repo_version = self.get_stack_version_before_packages_installed()
 
     package_delimiter = '-' if OSCheck.is_ubuntu_family() else '_'
 
@@ -497,7 +506,7 @@ class Script(object):
 
     # Wildcards cause a lot of troubles with installing packages, if the 
version contains wildcards we try to specify it.
     if not package_version or '*' in package_version:
-      stack_version_package_formatted = 
self.get_stack_version_before_packages_installed().replace('.', 
package_delimiter).replace('-', package_delimiter) if STACK_VERSION_PLACEHOLDER 
in name else name
+      stack_version_package_formatted = repo_version.replace('.', 
package_delimiter).replace('-', package_delimiter) if STACK_VERSION_PLACEHOLDER 
in name else name
 
     package_name = name.replace(STACK_VERSION_PLACEHOLDER, 
stack_version_package_formatted)
 
@@ -703,7 +712,7 @@ class Script(object):
 
     if 'host_sys_prepped' in config['hostLevelParams']:
       # do not install anything on sys-prepped host
-      if config['hostLevelParams']['host_sys_prepped'] == True:
+      if config['hostLevelParams']['host_sys_prepped'] is True:
         Logger.info("Node has all packages pre-installed. Skipping.")
         return
       pass
@@ -711,8 +720,9 @@ class Script(object):
       package_list_str = config['hostLevelParams']['package_list']
       agent_stack_retry_on_unavailability = 
bool(config['hostLevelParams']['agent_stack_retry_on_unavailability'])
       agent_stack_retry_count = 
int(config['hostLevelParams']['agent_stack_retry_count'])
+      pkg_provider = get_provider("Package")
       try:
-        available_packages_in_repos = 
packages_analyzer.get_available_packages_in_repos(config['repositoryFile']['repositories'])
+        available_packages_in_repos = 
pkg_provider.get_available_packages_in_repos(config['repositoryFile']['repositories'])
       except Exception as err:
         available_packages_in_repos = []
       if isinstance(package_list_str, basestring) and len(package_list_str) > 
0:

http://git-wip-us.apache.org/repos/asf/ambari/blob/33879743/ambari-server/src/main/resources/custom_actions/scripts/check_host.py
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/custom_actions/scripts/check_host.py 
b/ambari-server/src/main/resources/custom_actions/scripts/check_host.py
index 358c104..a485415 100644
--- a/ambari-server/src/main/resources/custom_actions/scripts/check_host.py
+++ b/ambari-server/src/main/resources/custom_actions/scripts/check_host.py
@@ -27,7 +27,6 @@ import socket
 import getpass
 import tempfile
 
-from resource_management.libraries.functions import packages_analyzer
 from resource_management.libraries.functions.default import default
 from ambari_commons import os_utils
 from ambari_commons.os_check import OSCheck, OSConst
@@ -40,6 +39,7 @@ from resource_management.core.exceptions import Fail
 from ambari_commons.constants import AMBARI_SUDO_BINARY
 from resource_management.core import shell
 from resource_management.core.logger import Logger
+from resource_management.core.providers import get_provider
 
 # WARNING. If you are adding a new host check that is used by cleanup, add it 
to BEFORE_CLEANUP_HOST_CHECKS
 # It is used by HostCleanup.py
@@ -113,6 +113,7 @@ class CheckHost(Script):
   
   def __init__(self):
     self.reportFileHandler = HostCheckReportFileHandler()
+    self.pkg_provider = get_provider("Package")
   
   def actionexecute(self, env):
     Logger.info("Host checks started.")
@@ -229,21 +230,18 @@ class CheckHost(Script):
   def execute_existing_repos_and_installed_packages_check(self, config):
       Logger.info("Installed packages and existing repos checks started.")
 
-      installedPackages = []
-      availablePackages = []
-      packages_analyzer.allInstalledPackages(installedPackages)
-      packages_analyzer.allAvailablePackages(availablePackages)
-
-      repos = []
-      packages_analyzer.getInstalledRepos(self.PACKAGES, installedPackages + 
availablePackages,
-                                      self.IGNORE_PACKAGES_FROM_REPOS, repos)
-      packagesInstalled = packages_analyzer.getInstalledPkgsByRepo(repos, 
self.IGNORE_PACKAGES, installedPackages)
-      additionalPkgsInstalled = packages_analyzer.getInstalledPkgsByNames(
-        self.ADDITIONAL_PACKAGES, installedPackages)
+      installedPackages = self.pkg_provider.all_installed_packages()
+      availablePackages = self.pkg_provider.all_available_packages()
+
+      repos = self.pkg_provider.get_installed_repos(self.PACKAGES, 
installedPackages + availablePackages,
+                                                    
self.IGNORE_PACKAGES_FROM_REPOS)
+
+      packagesInstalled = self.pkg_provider.get_installed_pkgs_by_repo(repos, 
self.IGNORE_PACKAGES, installedPackages)
+      additionalPkgsInstalled = 
self.pkg_provider.get_installed_pkgs_by_names(self.ADDITIONAL_PACKAGES, 
installedPackages)
       allPackages = list(set(packagesInstalled + additionalPkgsInstalled))
       
-      installedPackages = 
packages_analyzer.getPackageDetails(installedPackages, allPackages)
-      repos = packages_analyzer.getReposToRemove(repos, self.IGNORE_REPOS)
+      installedPackages = 
self.pkg_provider.get_package_details(installedPackages, allPackages)
+      repos = self.pkg_provider.get_repos_to_remove(repos, self.IGNORE_REPOS)
 
       Logger.info("Installed packages and existing repos checks completed.")
       return installedPackages, repos

http://git-wip-us.apache.org/repos/asf/ambari/blob/33879743/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py 
b/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
index a86a71d..189043b 100644
--- 
a/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
+++ 
b/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
@@ -28,20 +28,21 @@ from ambari_commons.str_utils import cbool, cint
 from resource_management.core.exceptions import Fail
 from resource_management.core.logger import Logger
 from resource_management.core.resources import Package
-from resource_management.libraries.functions.packages_analyzer import 
allInstalledPackages, verifyDependencies
 from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions import stack_tools
 from resource_management.libraries.functions.stack_select import 
get_stack_versions
 from resource_management.libraries.functions.version import 
format_stack_version
 from resource_management.libraries.functions.repo_version_history \
     import read_actual_version_from_history_file, 
write_actual_version_to_history_file, REPO_VERSION_HISTORY_FILE
+from resource_management.core.providers import get_provider
 from resource_management.core.resources.system import Link
 from resource_management.libraries.functions import StackFeature
-from resource_management.libraries.functions import packages_analyzer
 from resource_management.libraries.functions.repository_util import 
create_repo_files, CommandRepository
 from resource_management.libraries.functions.stack_features import 
check_stack_feature
 from resource_management.libraries.resources.repository import Repository
 from resource_management.libraries.script.script import Script
+from resource_management.core import sudo
+
 
 class InstallPackages(Script):
   """
@@ -53,6 +54,11 @@ class InstallPackages(Script):
 
   UBUNTU_REPO_COMPONENTS_POSTFIX = ["main"]
 
+  def __init__(self):
+    super(InstallPackages, self).__init__()
+
+    self.pkg_provider = get_provider("Package")
+
   def actionexecute(self, env):
     num_errors = 0
 
@@ -83,8 +89,6 @@ class InstallPackages(Script):
     except KeyError:
       pass
 
-
-
     self.stack_name = Script.get_stack_name()
     if self.stack_name is None:
       raise Fail("Cannot determine the stack name")
@@ -99,7 +103,7 @@ class InstallPackages(Script):
     self.repository_version = self.repository_version.strip()
 
     try:
-      if 0 == len(command_repository.repositories):
+      if not command_repository.repositories:
         Logger.warning(
           "Repository list is empty. Ambari may not be managing the 
repositories for {0}.".format(
             self.repository_version))
@@ -171,13 +175,12 @@ class InstallPackages(Script):
 
     # After upgrading hdf-select package from HDF-2.X to HDF-3.Y, we need to 
create this symlink
     if self.stack_name.upper() == "HDF" \
-            and not os.path.exists("/usr/bin/conf-select") and 
os.path.exists("/usr/bin/hdfconf-select"):
-      Link("/usr/bin/conf-select", to = "/usr/bin/hdfconf-select")
+            and not sudo.path_exists("/usr/bin/conf-select") and 
sudo.path_exists("/usr/bin/hdfconf-select"):
+      Link("/usr/bin/conf-select", to="/usr/bin/hdfconf-select")
 
     for package_name, directories in 
conf_select.get_package_dirs().iteritems():
       conf_select.select(self.stack_name, package_name, stack_version, 
ignore_errors = True)
 
-
   def compute_actual_version(self):
     """
     After packages are installed, determine what the new actual version is.
@@ -313,6 +316,7 @@ class InstallPackages(Script):
 
     # Install packages
     packages_were_checked = False
+    packages_installed_before = []
     stack_selector_package = 
stack_tools.get_stack_tool_package(stack_tools.STACK_SELECTOR_NAME)
     try:
       Package(stack_selector_package,
@@ -321,13 +325,12 @@ class InstallPackages(Script):
               retry_count=agent_stack_retry_count
       )
 
-      packages_installed_before = []
-      allInstalledPackages(packages_installed_before)
+      packages_installed_before = self.pkg_provider.all_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 = 
packages_analyzer.get_available_packages_in_repos(config['repositoryFile']['repositories'])
+        available_packages_in_repos = 
self.pkg_provider.get_available_packages_in_repos(config['repositoryFile']['repositories'])
       except Exception:
         available_packages_in_repos = []
       for package in filtered_package_list:
@@ -343,8 +346,7 @@ class InstallPackages(Script):
 
       # 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 = self.pkg_provider.all_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]
@@ -361,7 +363,7 @@ class InstallPackages(Script):
 
     if self.ignore_package_dependencies:
       Logger.info("Ignoring package dependencies")
-    elif not verifyDependencies():
+    elif not self.pkg_provider.verify_dependencies():
       ret_code = 1
       Logger.logger.error("Failure while verifying dependencies")
       
Logger.logger.error("*******************************************************************************")
@@ -379,36 +381,6 @@ class InstallPackages(Script):
       Logger.logger.exception("Failure while computing actual version. Error: 
{0}".format(str(err)))
     return ret_code
 
-  def install_repository(self, url_info, append_to_file, template):
-
-    repo = {
-      'repoName': "{0}-{1}".format(url_info['name'], self.repository_version)
-    }
-
-    if not 'baseUrl' in url_info:
-      repo['baseurl'] = None
-    else:
-      repo['baseurl'] = url_info['baseUrl']
-
-    if not 'mirrorsList' in url_info:
-      repo['mirrorsList'] = None
-    else:
-      repo['mirrorsList'] = url_info['mirrorsList']
-
-    ubuntu_components = [url_info['name']] + 
self.UBUNTU_REPO_COMPONENTS_POSTFIX
-    file_name = self.stack_name + "-" + self.repository_version
-
-    Repository(repo['repoName'],
-      action = "create",
-      base_url = repo['baseurl'],
-      mirror_list = repo['mirrorsList'],
-      repo_file_name = file_name,
-      repo_template = template,
-      append_to_file = append_to_file,
-      components = ubuntu_components,  # ubuntu specific
-    )
-    return repo['repoName'], file_name
-
   def abort_handler(self, signum, frame):
     Logger.error("Caught signal {0}, will handle it gracefully. Compute the 
actual version if possible before exiting.".format(signum))
     self.check_partial_install()

http://git-wip-us.apache.org/repos/asf/ambari/blob/33879743/ambari-server/src/main/resources/custom_actions/scripts/remove_previous_stacks.py
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/custom_actions/scripts/remove_previous_stacks.py
 
b/ambari-server/src/main/resources/custom_actions/scripts/remove_previous_stacks.py
index 958b800..2b50171 100644
--- 
a/ambari-server/src/main/resources/custom_actions/scripts/remove_previous_stacks.py
+++ 
b/ambari-server/src/main/resources/custom_actions/scripts/remove_previous_stacks.py
@@ -25,8 +25,8 @@ import os
 from resource_management import Script, format, Package, Execute, Fail
 from resource_management.core.logger import Logger
 from resource_management.libraries.functions import stack_tools
-from resource_management.libraries.functions.packages_analyzer import 
allInstalledPackages
 from resource_management.libraries.functions.stack_select import 
get_stack_versions
+from resource_management.core.providers import get_provider
 
 CURRENT_ = "/current/"
 stack_root = Script.get_stack_root()
@@ -43,6 +43,7 @@ class RemovePreviousStacks(Script):
     self.stack_tool_package = 
stack_tools.get_stack_tool_package(stack_tools.STACK_SELECTOR_NAME)
 
     versions_to_remove = self.get_lower_versions(version)
+    self.pkg_provider = get_provider("Package")
 
     for low_version in versions_to_remove:
       self.remove_stack_version(structured_output, low_version)
@@ -73,8 +74,8 @@ class RemovePreviousStacks(Script):
   def get_packages_to_remove(self, version):
     packages = []
     formated_version = version.replace('.', '_').replace('-', '_')
-    all_installed_packages = []
-    allInstalledPackages(all_installed_packages)
+    all_installed_packages = self.pkg_provider.all_installed_packages()
+
     all_installed_packages = [package[0] for package in all_installed_packages]
     for package in all_installed_packages:
       if formated_version in package and self.stack_tool_package not in 
package:

Reply via email to