You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by rl...@apache.org on 2017/06/14 21:19:39 UTC

[08/26] ambari git commit: AMBARI-21091. HDP deploy from public repo failed (dlysnichenko)

AMBARI-21091. HDP deploy from public repo failed (dlysnichenko)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/871f85b3
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/871f85b3
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/871f85b3

Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 871f85b34e5d0586dd21ed332a16abd012a72eef
Parents: 7750c9a
Author: Lisnichenko Dmitro <dl...@hortonworks.com>
Authored: Mon Jun 12 19:38:34 2017 +0300
Committer: Lisnichenko Dmitro <dl...@hortonworks.com>
Committed: Mon Jun 12 19:38:34 2017 +0300

----------------------------------------------------------------------
 .../test/python/ambari_agent/TestHostInfo.py    | 107 ++++++++++
 .../libraries/functions/packages_analyzer.py    |  53 ++++-
 .../libraries/script/script.py                  |  25 ++-
 .../server/orm/entities/UpgradeEntity.java      |   3 +-
 .../orm/entities/UpgradeHistoryEntity.java      |   3 +-
 .../custom_actions/scripts/install_packages.py  |   8 +-
 .../upgrades/UpgradeActionTest.java             |   2 +-
 .../custom_actions/TestInstallPackages.py       | 202 +++++++------------
 .../configs/install_packages_config.json        |  19 +-
 .../stacks/2.0.6/HBASE/test_hbase_master.py     |  11 +-
 .../stacks/2.0.6/configs/hbase_with_phx.json    |  12 ++
 utility/pom.xml                                 |  21 ++
 12 files changed, 322 insertions(+), 144 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py b/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py
index a00771d..027a0a8 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py
@@ -538,5 +538,112 @@ class TestHostInfo(TestCase):
     os_path_isfile_mock.return_value = False
     self.assertEqual("", hostInfo.getTransparentHugePage())
 
+  @staticmethod
+  def _add_packages_available(command, arg):
+    arg.append(["hadoop_2_2_0_1_885", "1.0", "HDP-2.2"])
+    arg.append(["hadooplzo_2_2_0_1_885", "1.0", "HDP-2.2"])
+    arg.append(["hadoop_2_2_0_1_885-libhdfs", "1.0", "HDP-2.2"])
+
+  @staticmethod
+  def _add_packages_lookUpYum(command, key, arg):
+    TestHostInfo._add_packages_available(command, arg)
+
+  @patch("ambari_commons.os_check.OSCheck.is_suse_family")
+  @patch("ambari_commons.os_check.OSCheck.is_ubuntu_family")
+  @patch("ambari_commons.os_check.OSCheck.is_redhat_family")
+  @patch("resource_management.libraries.functions.packages_analyzer._lookUpZypperPackages")
+  def test_get_available_packages_in_repos_suse(self, lookUpZypperPackages, is_redhat_family, is_ubuntu_family,
+                                                is_suse_family_mock):
+    is_suse_family_mock.return_value = True
+    is_redhat_family.return_value = False
+    is_ubuntu_family.return_value = False
+    lookUpZypperPackages.side_effect = TestHostInfo._add_packages_available
+
+    command_json = {
+      "repositoryFile": {
+        "stackName": "HDP",
+        "repoVersionId": 1,
+        "repoVersion": "2",
+        "repositories": [
+          {
+            "repoName": "HDP",
+            "baseUrl": "http://repo1/HDP/centos5/2.x/updates/2.2.0.0",
+            "repoId": "HDP-2.2"
+          }
+        ]
+      }
+    }
+
+    available_packages_in_repos = packages_analyzer.get_available_packages_in_repos(
+      command_json['repositoryFile']['repositories'])
+
+    self.assertEqual(available_packages_in_repos,
+                     ["hadoop_2_2_0_1_885", "hadooplzo_2_2_0_1_885", "hadoop_2_2_0_1_885-libhdfs"])
+
+  @patch("ambari_commons.os_check.OSCheck.is_suse_family")
+  @patch("ambari_commons.os_check.OSCheck.is_ubuntu_family")
+  @patch("ambari_commons.os_check.OSCheck.is_redhat_family")
+  @patch("resource_management.libraries.functions.packages_analyzer._lookUpYumPackages")
+  def test_get_available_packages_in_repos_rhel(self, lookUpYumPackages, is_redhat_family, is_ubuntu_family,
+                                                is_suse_family_mock):
+    is_suse_family_mock.return_value = False
+    is_redhat_family.return_value = True
+    is_ubuntu_family.return_value = False
+    lookUpYumPackages.side_effect = TestHostInfo._add_packages_lookUpYum
+
+    command_json = {
+      "repositoryFile": {
+        "stackName": "HDP",
+        "repoVersionId": 1,
+        "repoVersion": "2",
+        "repositories": [
+          {
+            "repoName": "HDP",
+            "baseUrl": "http://repo1/HDP/centos5/2.x/updates/2.2.0.0",
+            "repoId": "HDP-2.2"
+          }
+        ]
+      }
+    }
+
+    available_packages_in_repos = packages_analyzer.get_available_packages_in_repos(
+      command_json['repositoryFile']['repositories'])
+
+    self.assertEqual(available_packages_in_repos,
+                     ["hadoop_2_2_0_1_885", "hadooplzo_2_2_0_1_885", "hadoop_2_2_0_1_885-libhdfs", "hadoop_2_2_0_1_885",
+                      "hadooplzo_2_2_0_1_885", "hadoop_2_2_0_1_885-libhdfs"])
+
+  @patch("ambari_commons.os_check.OSCheck.is_suse_family")
+  @patch("ambari_commons.os_check.OSCheck.is_ubuntu_family")
+  @patch("ambari_commons.os_check.OSCheck.is_redhat_family")
+  @patch("resource_management.libraries.functions.packages_analyzer._lookUpAptPackages")
+  def test_get_available_packages_in_repos_ubuntu(self, lookUpAptPackages, is_redhat_family, is_ubuntu_family,
+                                                  is_suse_family_mock):
+    is_suse_family_mock.return_value = False
+    is_redhat_family.return_value = False
+    is_ubuntu_family.return_value = True
+    lookUpAptPackages.side_effect = TestHostInfo._add_packages_available
+
+    command_json = {
+      "repositoryFile": {
+        "stackName": "HDP",
+        "repoVersionId": 1,
+        "repoVersion": "2",
+        "repositories": [
+          {
+            "repoName": "HDP",
+            "baseUrl": "http://repo1/HDP/centos5/2.x/updates/2.2.0.0",
+            "repoId": "HDP-2.2"
+          }
+        ]
+      }
+    }
+
+    available_packages_in_repos = packages_analyzer.get_available_packages_in_repos(
+      command_json['repositoryFile']['repositories'])
+
+    self.assertEqual(available_packages_in_repos,
+                     ["hadoop_2_2_0_1_885", "hadooplzo_2_2_0_1_885", "hadoop_2_2_0_1_885-libhdfs"])
+
 if __name__ == "__main__":
   unittest.main()

http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-common/src/main/python/resource_management/libraries/functions/packages_analyzer.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/packages_analyzer.py b/ambari-common/src/main/python/resource_management/libraries/functions/packages_analyzer.py
index 8a15ee5..f4db3d2 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/packages_analyzer.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/packages_analyzer.py
@@ -34,8 +34,8 @@ __all__ = ["installedPkgsByName", "allInstalledPackages", "allAvailablePackages"
            "getInstalledRepos", "getInstalledPkgsByRepo", "getInstalledPkgsByNames", "getPackageDetails"]
 
 LIST_INSTALLED_PACKAGES_UBUNTU = "COLUMNS=9999 ; for i in $(dpkg -l |grep ^ii |awk -F' ' '{print $2}'); do      apt-cache showpkg \"$i\"|head -3|grep -v '^Versions'| tr -d '()' | awk '{ print $1\" \"$2 }'|sed -e 's/^Package: //;' | paste -d ' ' - -;  done"
-LIST_AVAILABLE_PACKAGES_UBUNTU = "packages=`for  i in $(ls -1 /var/lib/apt/lists  | grep -v \"ubuntu.com\") ; do grep ^Package: /var/lib/apt/lists/$i |  awk '{print $2}' ; done` ; for i in $packages; do      apt-cache showpkg \"$i\"|head -3|grep -v '^Versions'| tr -d '()' | awk '{ print $1\" \"$2 }'|sed -e 's/^Package: //;' | paste -d ' ' - -;  done"
-
+LIST_AVAILABLE_PACKAGES_UBUNTU = "packages=`for  i in $(ls -1 /var/lib/apt/lists  | grep %s ) ; do grep ^Package: /var/lib/apt/lists/$i |  awk '{print $2}' ; done` ; for i in $packages; do      apt-cache showpkg \"$i\"|head -3|grep -v '^Versions'| tr -d '()' | awk '{ print $1\" \"$2 }'|sed -e 's/^Package: //;' | paste -d ' ' - -;  done"
+GREP_REPO_EXCLUDE_SYSTEM = "-v \"ubuntu.com\""
 logger = logging.getLogger()
 
 # default timeout for async invoked processes
@@ -91,8 +91,6 @@ def allInstalledPackages(allInstalledPackages):
   """
   All installed packages in system
   """
-  osType = OSCheck.get_os_family()
-
   if OSCheck.is_suse_family():
     return _lookUpZypperPackages(
       ["sudo", "zypper", "--no-gpg-checks", "search", "--installed-only", "--details"],
@@ -108,9 +106,47 @@ def allInstalledPackages(allInstalledPackages):
       allInstalledPackages)
 
 
-def allAvailablePackages(allAvailablePackages):
-  osType = OSCheck.get_os_family()
+def get_available_packages_in_repos(repositories):
+  """
+  Gets all (both installed and available) packages that are available at given repositories.
+  :param repositories: from command configs like config['repositoryFile']['repositories']
+  :return: installed and available packages from these repositories
+  """
 
+  available_packages = []
+  installed_packages = []
+  available_packages_in_repos = []
+  repo_ids = [repository['repoId'] for repository in repositories]
+  if OSCheck.is_ubuntu_family():
+    allInstalledPackages(installed_packages)
+    repo_urls = [repository['baseUrl'] for repository in repositories]
+    repo_urls = [repo_url.replace("http://","") for repo_url in repo_urls]
+    repo_urls = [repo_url.replace("/","_") for repo_url in repo_urls]
+    for url in repo_urls:
+      _lookUpAptPackages(
+        LIST_AVAILABLE_PACKAGES_UBUNTU % url,
+        available_packages)
+      for package in installed_packages:
+        if url in package[2]:
+          available_packages_in_repos.append(package[0])
+    for package in available_packages:
+      available_packages_in_repos.append(package[0])
+  elif OSCheck.is_suse_family():
+    for repo in repo_ids:
+      _lookUpZypperPackages(["sudo", "zypper", "--no-gpg-checks", "search", "--details", "--repo", repo],
+                            available_packages)
+    available_packages_in_repos += [package[0] for package in available_packages]
+  elif OSCheck.is_redhat_family():
+    for repo in repo_ids:
+      _lookUpYumPackages(["sudo", "yum", "list", "available", "--disablerepo=*", "--enablerepo=" + repo],
+                         'Available Packages', available_packages)
+      _lookUpYumPackages(["sudo", "yum", "list", "installed", "--disablerepo=*", "--enablerepo=" + repo],
+                         'Installed Packages', installed_packages)
+    available_packages_in_repos += [package[0] for package in available_packages + installed_packages]
+  return available_packages_in_repos
+
+
+def allAvailablePackages(allAvailablePackages):
   if OSCheck.is_suse_family():
     return _lookUpZypperPackages(
       ["sudo", "zypper", "--no-gpg-checks", "search", "--uninstalled-only", "--details"],
@@ -122,7 +158,7 @@ def allAvailablePackages(allAvailablePackages):
       allAvailablePackages)
   elif OSCheck.is_ubuntu_family():
      return _lookUpAptPackages(
-      LIST_AVAILABLE_PACKAGES_UBUNTU,
+       LIST_AVAILABLE_PACKAGES_UBUNTU % GREP_REPO_EXCLUDE_SYSTEM,
       allAvailablePackages)
 
 # ToDo: add execution via sudo for ubuntu (currently Ubuntu is not supported)
@@ -170,7 +206,6 @@ def _lookUpZypperPackages(command, allPackages):
     if 0 == result['retCode']:
       lines = result['out'].split('\n')
       lines = [line.strip() for line in lines]
-      items = []
       for index in range(len(lines)):
         if "--+--" in lines[index]:
           skipIndex = index + 1
@@ -281,7 +316,7 @@ def getInstalledPackageVersion(package_name):
     code, out, err = rmf_shell.checked_call("dpkg -s {0} | grep Version | awk '{{print $2}}'".format(package_name), stderr=subprocess.PIPE)
   else:
     code, out, err = rmf_shell.checked_call("rpm -q --queryformat '%{{version}}-%{{release}}' {0} | sed -e 's/\.el[0-9]//g'".format(package_name), stderr=subprocess.PIPE)
-    
+
   return out
 
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/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 054490b..2c56a13 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
@@ -463,10 +463,26 @@ class Script(object):
 
     return Script.stack_version_from_distro_select
 
+
+  def get_package_from_available(self, name, available_packages_in_repos):
+    """
+    This function matches package names with ${stack_version} placeholder to actual package names from
+    Ambari-managed repository.
+    Package names without ${stack_version} placeholder are returned as is.
+    """
+    if STACK_VERSION_PLACEHOLDER not in name:
+      return name
+    package_delimiter = '-' if OSCheck.is_ubuntu_family() else '_'
+    package_regex = name.replace(STACK_VERSION_PLACEHOLDER, '(\d|{0})+'.format(package_delimiter))
+    for package in available_packages_in_repos:
+      if re.match(package_regex, package):
+        return package
+
+
   def format_package_name(self, name):
     from resource_management.libraries.functions.default import default
     """
-    This function replaces ${stack_version} placeholder into actual version.  If the package
+    This function replaces ${stack_version} placeholder with actual version.  If the package
     version is passed from the server, use that as an absolute truth.
     """
 
@@ -703,12 +719,15 @@ 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'])
-
+      try:
+        available_packages_in_repos = packages_analyzer.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:
         package_list = json.loads(package_list_str)
         for package in package_list:
           if self.check_package_condition(package):
-            name = self.format_package_name(package['name'])
+            name = self.get_package_from_available(package['name'], available_packages_in_repos)
             # HACK: On Windows, only install ambari-metrics packages using Choco Package Installer
             # TODO: Update this once choco packages for hadoop are created. This is because, service metainfo.xml support
             # <osFamily>any<osFamily> which would cause installation failure on Windows.

http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java
index 975d6a6..43b2e08 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java
@@ -41,7 +41,8 @@ import org.apache.ambari.server.actionmanager.HostRoleStatus;
 import org.apache.ambari.server.state.stack.upgrade.Direction;
 import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
 import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.hadoop.metrics2.sink.relocated.google.common.base.Objects;
+
+import com.google.common.base.Objects;
 
 /**
  * Models the data representation of an upgrade

http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeHistoryEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeHistoryEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeHistoryEntity.java
index 8bfafd3..0f7ac72 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeHistoryEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeHistoryEntity.java
@@ -31,7 +31,8 @@ import javax.persistence.TableGenerator;
 import javax.persistence.UniqueConstraint;
 
 import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.hadoop.metrics2.sink.relocated.google.common.base.Objects;
+
+import com.google.common.base.Objects;
 
 /**
  * The {@link UpgradeHistoryEntity} represents the version history of components

http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/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 d6da0fc..a4a7a8c 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
@@ -22,6 +22,7 @@ import signal
 import re
 
 import ambari_simplejson as json
+import sys, traceback
 
 from ambari_commons.os_check import OSCheck
 from ambari_commons.str_utils import cbool, cint
@@ -36,6 +37,7 @@ 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.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
@@ -352,8 +354,12 @@ class InstallPackages(Script):
       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.format_package_name(package['name'])
+        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,

http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
index e3ffae0..50d219c 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
@@ -79,7 +79,7 @@ import org.apache.ambari.server.state.UpgradeState;
 import org.apache.ambari.server.state.stack.UpgradePack;
 import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
 import org.apache.ambari.server.utils.EventBusSynchronizer;
-import org.apache.hadoop.metrics2.sink.relocated.commons.lang.StringUtils;
+import org.apache.commons.lang.StringUtils;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;

http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-server/src/test/python/custom_actions/TestInstallPackages.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/custom_actions/TestInstallPackages.py b/ambari-server/src/test/python/custom_actions/TestInstallPackages.py
index 5f5576e..3e90c64 100644
--- a/ambari-server/src/test/python/custom_actions/TestInstallPackages.py
+++ b/ambari-server/src/test/python/custom_actions/TestInstallPackages.py
@@ -61,8 +61,18 @@ class TestInstallPackages(RMFTestCase):
     arg.append(["pkg1", "1.0", "repo"])
     arg.append(["pkg2", "2.0", "repo2"])
 
+  @staticmethod
+  def _add_packages_available(command, arg):
+    arg.append(["hadoop_2_2_0_1_885", "1.0", "HDP-2.2"])
+    arg.append(["hadooplzo_2_2_0_1_885", "1.0", "HDP-2.2"])
+    arg.append(["hadoop_2_2_0_1_885-libhdfs", "1.0", "HDP-2.2"])
+
+  @staticmethod
+  def _add_packages_lookUpYum(command, key, arg):
+    TestInstallPackages._add_packages_available(command, arg)
+
   @patch("resource_management.libraries.functions.list_ambari_managed_repos.list_ambari_managed_repos")
-  @patch("resource_management.libraries.functions.packages_analyzer.allInstalledPackages")
+  @patch("resource_management.libraries.functions.packages_analyzer._lookUpYumPackages")
   @patch("resource_management.libraries.script.Script.put_structured_out")
   @patch("resource_management.libraries.functions.stack_select.get_stack_versions")
   @patch("resource_management.libraries.functions.repo_version_history.read_actual_version_from_history_file")
@@ -71,12 +81,13 @@ class TestInstallPackages(RMFTestCase):
                             write_actual_version_to_history_file_mock,
                             read_actual_version_from_history_file_mock,
                             stack_versions_mock,
-                            put_structured_out_mock, allInstalledPackages_mock, list_ambari_managed_repos_mock):
+                            put_structured_out_mock,
+                            lookUpYumPackages, list_ambari_managed_repos_mock):
     stack_versions_mock.side_effect = [
       [],  # before installation attempt
       [VERSION_STUB]
     ]
-    allInstalledPackages_mock.side_effect = TestInstallPackages._add_packages
+    lookUpYumPackages.side_effect = TestInstallPackages._add_packages_lookUpYum
     list_ambari_managed_repos_mock.return_value=[]
     self.executeScript("scripts/install_packages.py",
                        classname="InstallPackages",
@@ -91,21 +102,21 @@ class TestInstallPackages(RMFTestCase):
                        'installed_repository_version': VERSION_STUB,
                        'stack_id': 'HDP-2.2',
                        'actual_version': VERSION_STUB})
-    self.assertResourceCalled('Repository', 'HDP-UTILS-2.2.0.1-885',
+    self.assertResourceCalled('Repository', 'HDP-UTILS-1.1.0.20',
                               base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
                               action=['create'],
                               components=[u'HDP-UTILS', 'main'],
                               repo_template='[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
-                              repo_file_name=u'HDP-2.2.0.1-885',
+                              repo_file_name=u'ambari-hdp-1',
                               mirror_list=None,
                               append_to_file=False,
     )
-    self.assertResourceCalled('Repository', 'HDP-2.2.0.1-885',
+    self.assertResourceCalled('Repository', 'HDP-2.2',
                               base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
                               action=['create'],
                               components=[u'HDP', 'main'],
                               repo_template='[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
-                              repo_file_name=u'HDP-2.2.0.1-885',
+                              repo_file_name=u'ambari-hdp-1',
                               mirror_list=None,
                               append_to_file=True,
     )
@@ -140,6 +151,7 @@ class TestInstallPackages(RMFTestCase):
       command_json = json.load(f)
 
     command_json['roleParams']['base_urls'] = "[]"
+    del command_json['repositoryFile']
 
 
     allInstalledPackages_mock.side_effect = TestInstallPackages._add_packages
@@ -159,32 +171,33 @@ class TestInstallPackages(RMFTestCase):
                        'actual_version': VERSION_STUB})
     
     self.assertResourceCalled('Package', 'hdp-select', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'hadoop_2_2_0_1_885', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+    self.assertResourceCalled('Package', None, action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
     self.assertResourceCalled('Package', 'snappy', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
     self.assertResourceCalled('Package', 'snappy-devel', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
     self.assertResourceCalled('Package', 'lzo', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'hadooplzo_2_2_0_1_885', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'hadoop_2_2_0_1_885-libhdfs', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+    self.assertResourceCalled('Package', None, action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+    self.assertResourceCalled('Package', None, action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
     self.assertResourceCalled('Package', 'ambari-log4j', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
     self.assertNoMoreResources()
 
   @patch("ambari_commons.os_check.OSCheck.is_suse_family")
   @patch("resource_management.libraries.functions.list_ambari_managed_repos.list_ambari_managed_repos")
-  @patch("resource_management.libraries.functions.packages_analyzer.allInstalledPackages")
+  @patch("resource_management.libraries.functions.packages_analyzer._lookUpZypperPackages")
   @patch("resource_management.libraries.script.Script.put_structured_out")
   @patch("resource_management.libraries.functions.stack_select.get_stack_versions")
   @patch("resource_management.libraries.functions.repo_version_history.read_actual_version_from_history_file")
   @patch("resource_management.libraries.functions.repo_version_history.write_actual_version_to_history_file")
   def test_normal_flow_sles(self, write_actual_version_to_history_file_mock,
                             read_actual_version_from_history_file_mock,
-                            stack_versions_mock, put_structured_out_mock, allInstalledPackages_mock, list_ambari_managed_repos_mock, is_suse_family_mock):
+                            stack_versions_mock, put_structured_out_mock,
+                            lookUpZypperPackages, list_ambari_managed_repos_mock, is_suse_family_mock):
     is_suse_family_mock = True
     Script.stack_version_from_distro_select = VERSION_STUB
     stack_versions_mock.side_effect = [
       [],  # before installation attempt
       [VERSION_STUB]
     ]
-    allInstalledPackages_mock.side_effect = TestInstallPackages._add_packages
+    lookUpZypperPackages.side_effect = TestInstallPackages._add_packages_available
     list_ambari_managed_repos_mock.return_value=[]
     self.executeScript("scripts/install_packages.py",
                        classname="InstallPackages",
@@ -199,21 +212,21 @@ class TestInstallPackages(RMFTestCase):
                        'installed_repository_version': VERSION_STUB,
                        'stack_id': 'HDP-2.2',
                        'actual_version': VERSION_STUB})
-    self.assertResourceCalled('Repository', 'HDP-UTILS-2.2.0.1-885',
+    self.assertResourceCalled('Repository', 'HDP-UTILS-1.1.0.20',
                               base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
                               action=['create'],
                               components=[u'HDP-UTILS', 'main'],
                               repo_template='[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
-                              repo_file_name=u'HDP-2.2.0.1-885',
+                              repo_file_name=u'ambari-hdp-1',
                               mirror_list=None,
                               append_to_file=False,
                               )
-    self.assertResourceCalled('Repository', 'HDP-2.2.0.1-885',
+    self.assertResourceCalled('Repository', 'HDP-2.2',
                               base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
                               action=['create'],
                               components=[u'HDP', 'main'],
                               repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
-                              repo_file_name=u'HDP-2.2.0.1-885',
+                              repo_file_name=u'ambari-hdp-1',
                               mirror_list=None,
                               append_to_file=True,
                               )
@@ -231,21 +244,21 @@ class TestInstallPackages(RMFTestCase):
   @patch("resource_management.libraries.functions.list_ambari_managed_repos.list_ambari_managed_repos")
   @patch("ambari_commons.os_check.OSCheck.is_redhat_family")
   @patch("resource_management.libraries.script.Script.put_structured_out")
-  @patch("resource_management.libraries.functions.packages_analyzer.allInstalledPackages")
+  @patch("resource_management.libraries.functions.packages_analyzer._lookUpYumPackages")
   @patch("resource_management.libraries.functions.stack_select.get_stack_versions")
   @patch("resource_management.libraries.functions.repo_version_history.read_actual_version_from_history_file")
   @patch("resource_management.libraries.functions.repo_version_history.write_actual_version_to_history_file")
-  def test_exclude_existing_repo(self,  write_actual_version_to_history_file_mock,
+  def test_exclude_existing_repo(self, write_actual_version_to_history_file_mock,
                                  read_actual_version_from_history_file_mock,
                                  stack_versions_mock,
-                                 allInstalledPackages_mock, put_structured_out_mock,
+                                 lookUpYumPackages, put_structured_out_mock,
                                  is_redhat_family_mock, list_ambari_managed_repos_mock):
     stack_versions_mock.side_effect = [
       [],  # before installation attempt
       [VERSION_STUB]
     ]
     Script.stack_version_from_distro_select = VERSION_STUB
-    allInstalledPackages_mock.side_effect = TestInstallPackages._add_packages
+    lookUpYumPackages.side_effect = TestInstallPackages._add_packages_lookUpYum
     list_ambari_managed_repos_mock.return_value=["HDP-UTILS-2.2.0.1-885"]
     is_redhat_family_mock.return_value = True
     self.executeScript("scripts/install_packages.py",
@@ -261,21 +274,21 @@ class TestInstallPackages(RMFTestCase):
                        'installed_repository_version': VERSION_STUB,
                        'stack_id': 'HDP-2.2',
                        'actual_version': VERSION_STUB})
-    self.assertResourceCalled('Repository', 'HDP-UTILS-2.2.0.1-885',
+    self.assertResourceCalled('Repository', 'HDP-UTILS-1.1.0.20',
                               base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
                               action=['create'],
                               components=[u'HDP-UTILS', 'main'],
                               repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
-                              repo_file_name='HDP-2.2.0.1-885',
+                              repo_file_name='ambari-hdp-1',
                               mirror_list=None,
                               append_to_file=False,
     )
-    self.assertResourceCalled('Repository', 'HDP-2.2.0.1-885',
+    self.assertResourceCalled('Repository', 'HDP-2.2',
                               base_url='http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
                               action=['create'],
                               components=[u'HDP', 'main'],
                               repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
-                              repo_file_name=u'HDP-2.2.0.1-885',
+                              repo_file_name=u'ambari-hdp-1',
                               mirror_list=None,
                               append_to_file=True,
     )
@@ -337,21 +350,21 @@ class TestInstallPackages(RMFTestCase):
                       {'stack_id': 'HDP-2.2',
                       'installed_repository_version': VERSION_STUB,
                       'package_installation_result': 'FAIL'})
-    self.assertResourceCalled('Repository', 'HDP-UTILS-2.2.0.1-885',
+    self.assertResourceCalled('Repository', 'HDP-UTILS-1.1.0.20',
                               base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
                               action=['create'],
                               components=[u'HDP-UTILS', 'main'],
                               repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
-                              repo_file_name=u'HDP-2.2.0.1-885',
+                              repo_file_name=u'ambari-hdp-1',
                               mirror_list=None,
                               append_to_file=False,
                               )
-    self.assertResourceCalled('Repository', 'HDP-2.2.0.1-885',
+    self.assertResourceCalled('Repository', 'HDP-2.2',
                               base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
                               action=['create'],
                               components=[u'HDP', 'main'],
                               repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
-                              repo_file_name=u'HDP-2.2.0.1-885',
+                              repo_file_name=u'ambari-hdp-1',
                               mirror_list=None,
                               append_to_file=True,
                               )
@@ -363,14 +376,14 @@ class TestInstallPackages(RMFTestCase):
   @patch("ambari_commons.os_check.OSCheck.is_suse_family")
   @patch("resource_management.core.resources.packaging.Package")
   @patch("resource_management.libraries.script.Script.put_structured_out")
-  @patch("resource_management.libraries.functions.packages_analyzer.allInstalledPackages")
+  @patch("resource_management.libraries.functions.packages_analyzer._lookUpZypperPackages")
   @patch("resource_management.libraries.functions.stack_select.get_stack_versions")
   @patch("resource_management.libraries.functions.repo_version_history.read_actual_version_from_history_file")
   @patch("resource_management.libraries.functions.repo_version_history.write_actual_version_to_history_file")
-  def test_format_package_name(self,                                                                                    write_actual_version_to_history_file_mock,
+  def test_format_package_name(self, write_actual_version_to_history_file_mock,
                                read_actual_version_from_history_file_mock,
                                stack_versions_mock,
-                               allInstalledPackages_mock, put_structured_out_mock,
+                               lookUpZypperPackages, put_structured_out_mock,
                                package_mock, is_suse_family_mock):
     Script.stack_version_from_distro_select = VERSION_STUB
     stack_versions_mock.side_effect = [
@@ -378,7 +391,7 @@ class TestInstallPackages(RMFTestCase):
       [VERSION_STUB]
     ]
     read_actual_version_from_history_file_mock.return_value = VERSION_STUB
-    allInstalledPackages_mock = MagicMock(side_effect = TestInstallPackages._add_packages)
+    lookUpZypperPackages.side_effect = TestInstallPackages._add_packages_available
     is_suse_family_mock.return_value = True
     self.executeScript("scripts/install_packages.py",
                        classname="InstallPackages",
@@ -393,21 +406,21 @@ class TestInstallPackages(RMFTestCase):
                        'installed_repository_version': VERSION_STUB,
                        'stack_id': 'HDP-2.2',
                        'actual_version': VERSION_STUB})
-    self.assertResourceCalled('Repository', 'HDP-UTILS-2.2.0.1-885',
+    self.assertResourceCalled('Repository', 'HDP-UTILS-1.1.0.20',
                               base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
                               action=['create'],
                               components=[u'HDP-UTILS', 'main'],
                               repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
-                              repo_file_name=u'HDP-2.2.0.1-885',
+                              repo_file_name=u'ambari-hdp-1',
                               mirror_list=None,
                               append_to_file=False,
                               )
-    self.assertResourceCalled('Repository', 'HDP-2.2.0.1-885',
+    self.assertResourceCalled('Repository', 'HDP-2.2',
                               base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
                               action=['create'],
                               components=[u'HDP', 'main'],
                               repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
-                              repo_file_name=u'HDP-2.2.0.1-885',
+                              repo_file_name=u'ambari-hdp-1',
                               mirror_list=None,
                               append_to_file=True,
                               )
@@ -421,99 +434,30 @@ class TestInstallPackages(RMFTestCase):
     self.assertResourceCalled('Package', 'ambari-log4j', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
     self.assertNoMoreResources()
 
-  @patch("ambari_commons.os_check.OSCheck.is_suse_family")
-  @patch("resource_management.core.resources.packaging.Package")
-  @patch("resource_management.libraries.script.Script.put_structured_out")
-  @patch("resource_management.libraries.functions.packages_analyzer.allInstalledPackages")
-  @patch("resource_management.libraries.functions.stack_select.get_stack_versions")
-  @patch("resource_management.libraries.functions.repo_version_history.read_actual_version_from_history_file")
-  @patch("resource_management.libraries.functions.repo_version_history.write_actual_version_to_history_file")
-  def test_format_package_name_specific(self, write_actual_version_to_history_file_mock,
-                               read_actual_version_from_history_file_mock,
-                               stack_versions_mock,
-                               allInstalledPackages_mock, put_structured_out_mock,
-                               package_mock, is_suse_family_mock):
-    Script.stack_version_from_distro_select = VERSION_STUB
-    stack_versions_mock.side_effect = [
-      [],  # before installation attempt
-      [VERSION_STUB]
-    ]
-    read_actual_version_from_history_file_mock.return_value = VERSION_STUB
-    allInstalledPackages_mock = MagicMock(side_effect = TestInstallPackages._add_packages)
-    is_suse_family_mock.return_value = True
-
-    
-    config_file = self.get_src_folder() + "/test/python/custom_actions/configs/install_packages_config.json"
-    with open(config_file, "r") as f:
-      command_json = json.load(f)
-
-    command_json['roleParams']['package_version'] = "2_2_0_1_889"
-
-
-    self.executeScript("scripts/install_packages.py",
-                       classname="InstallPackages",
-                       command="actionexecute",
-                       config_dict=command_json,
-                       target=RMFTestCase.TARGET_CUSTOM_ACTIONS,
-                       os_type=('Suse', '11', 'Final'),
-                       )
-    self.assertTrue(put_structured_out_mock.called)
-    self.assertEquals(put_structured_out_mock.call_args[0][0],
-                      {'package_installation_result': 'SUCCESS',
-                       'installed_repository_version': VERSION_STUB,
-                       'stack_id': 'HDP-2.2',
-                       'actual_version': VERSION_STUB})
-    self.assertResourceCalled('Repository', 'HDP-UTILS-2.2.0.1-885',
-                              base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
-                              action=['create'],
-                              components=[u'HDP-UTILS', 'main'],
-                              repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
-                              repo_file_name=u'HDP-2.2.0.1-885',
-                              mirror_list=None,
-                              append_to_file=False,
-                              )
-    self.assertResourceCalled('Repository', 'HDP-2.2.0.1-885',
-                              base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
-                              action=['create'],
-                              components=[u'HDP', 'main'],
-                              repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
-                              repo_file_name=u'HDP-2.2.0.1-885',
-                              mirror_list=None,
-                              append_to_file=True,
-                              )
-    self.assertResourceCalled('Package', 'hdp-select', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'hadoop_2_2_0_1_889', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'snappy', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'snappy-devel', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'lzo', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'hadooplzo_2_2_0_1_889', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'hadoop_2_2_0_1_889-libhdfs', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'ambari-log4j', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertNoMoreResources()
 
 
   @patch("ambari_commons.os_check.OSCheck.is_suse_family")
   @patch("resource_management.core.resources.packaging.Package")
   @patch("resource_management.libraries.script.Script.put_structured_out")
-  @patch("resource_management.libraries.functions.packages_analyzer.allInstalledPackages")
+  @patch("resource_management.libraries.functions.packages_analyzer._lookUpZypperPackages")
   @patch("resource_management.libraries.functions.stack_select.get_stack_versions")
   @patch("resource_management.libraries.functions.repo_version_history.read_actual_version_from_history_file")
   @patch("resource_management.libraries.functions.repo_version_history.write_actual_version_to_history_file")
   def test_format_package_name_via_repositoryFile(self, write_actual_version_to_history_file_mock,
-                               read_actual_version_from_history_file_mock,
-                               stack_versions_mock,
-                               allInstalledPackages_mock, put_structured_out_mock,
-                               package_mock, is_suse_family_mock):
+                                                  read_actual_version_from_history_file_mock,
+                                                  stack_versions_mock,
+                                                  lookUpZypperPackages, put_structured_out_mock,
+                                                  package_mock, is_suse_family_mock):
     Script.stack_version_from_distro_select = VERSION_STUB
     stack_versions_mock.side_effect = [
       [],  # before installation attempt
       [VERSION_STUB]
     ]
     read_actual_version_from_history_file_mock.return_value = VERSION_STUB
-    allInstalledPackages_mock = MagicMock(side_effect = TestInstallPackages._add_packages)
+    lookUpZypperPackages.side_effect = TestInstallPackages._add_packages_available
     is_suse_family_mock.return_value = True
 
-    
+
     config_file = self.get_src_folder() + "/test/python/custom_actions/configs/install_packages_repository_file.json"
     with open(config_file, "r") as f:
       command_json = json.load(f)
@@ -552,12 +496,15 @@ class TestInstallPackages(RMFTestCase):
                               append_to_file=True,
                               )
     self.assertResourceCalled('Package', 'hdp-select', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'hadoop_2_2_0_1_990', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+    self.assertResourceCalled('Package', 'hadoop_2_2_0_1_885', action=["upgrade"], retry_count=5,
+                              retry_on_repo_unavailability=False)
     self.assertResourceCalled('Package', 'snappy', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
     self.assertResourceCalled('Package', 'snappy-devel', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
     self.assertResourceCalled('Package', 'lzo', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'hadooplzo_2_2_0_1_990', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'hadoop_2_2_0_1_990-libhdfs', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+    self.assertResourceCalled('Package', 'hadooplzo_2_2_0_1_885', action=["upgrade"], retry_count=5,
+                              retry_on_repo_unavailability=False)
+    self.assertResourceCalled('Package', 'hadoop_2_2_0_1_885-libhdfs', action=["upgrade"], retry_count=5,
+                              retry_on_repo_unavailability=False)
     self.assertResourceCalled('Package', 'ambari-log4j', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
     self.assertNoMoreResources()
 
@@ -1106,21 +1053,23 @@ class TestInstallPackages(RMFTestCase):
     self.assertFalse(write_actual_version_to_history_file_mock.called)
 
   @patch("resource_management.libraries.functions.list_ambari_managed_repos.list_ambari_managed_repos")
-  @patch("resource_management.libraries.functions.packages_analyzer.allInstalledPackages")
+  @patch("resource_management.libraries.functions.packages_analyzer._lookUpYumPackages")
   @patch("resource_management.libraries.script.Script.put_structured_out")
   @patch("resource_management.libraries.functions.stack_select.get_stack_versions")
   @patch("resource_management.libraries.functions.repo_version_history.read_actual_version_from_history_file")
   @patch("resource_management.libraries.functions.repo_version_history.write_actual_version_to_history_file")
   def test_normal_flow_rhel_with_command_repo(self,
-                            write_actual_version_to_history_file_mock,
-                            read_actual_version_from_history_file_mock,
-                            stack_versions_mock,
-                            put_structured_out_mock, allInstalledPackages_mock, list_ambari_managed_repos_mock):
+                                              write_actual_version_to_history_file_mock,
+                                              read_actual_version_from_history_file_mock,
+                                              stack_versions_mock,
+                                              put_structured_out_mock,
+                                              lookUpYumPackages,
+                                              list_ambari_managed_repos_mock):
     stack_versions_mock.side_effect = [
       [],  # before installation attempt
       [VERSION_STUB]
     ]
-    allInstalledPackages_mock.side_effect = TestInstallPackages._add_packages
+    lookUpYumPackages.side_effect = TestInstallPackages._add_packages_lookUpYum
     list_ambari_managed_repos_mock.return_value=[]
     self.executeScript("scripts/install_packages.py",
                        classname="InstallPackages",
@@ -1155,11 +1104,14 @@ class TestInstallPackages(RMFTestCase):
                               append_to_file=True,
     )
     self.assertResourceCalled('Package', 'hdp-select', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'hadoop_2_2_0_1_885', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+    self.assertResourceCalled('Package', 'hadoop_2_2_0_1_885', action=["upgrade"], retry_count=5,
+                              retry_on_repo_unavailability=False)
     self.assertResourceCalled('Package', 'snappy', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
     self.assertResourceCalled('Package', 'snappy-devel', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
     self.assertResourceCalled('Package', 'lzo', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'hadooplzo_2_2_0_1_885', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
-    self.assertResourceCalled('Package', 'hadoop_2_2_0_1_885-libhdfs', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+    self.assertResourceCalled('Package', 'hadooplzo_2_2_0_1_885', action=["upgrade"], retry_count=5,
+                              retry_on_repo_unavailability=False)
+    self.assertResourceCalled('Package', 'hadoop_2_2_0_1_885-libhdfs', action=["upgrade"], retry_count=5,
+                              retry_on_repo_unavailability=False)
     self.assertResourceCalled('Package', 'ambari-log4j', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
     self.assertNoMoreResources()

http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-server/src/test/python/custom_actions/configs/install_packages_config.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/custom_actions/configs/install_packages_config.json b/ambari-server/src/test/python/custom_actions/configs/install_packages_config.json
index c6575b5..be010b3 100644
--- a/ambari-server/src/test/python/custom_actions/configs/install_packages_config.json
+++ b/ambari-server/src/test/python/custom_actions/configs/install_packages_config.json
@@ -49,7 +49,24 @@
         "package_list": "[{\"name\":\"hadoop_${stack_version}\", \"condition\": \"\"},{\"name\":\"snappy\", \"condition\": \"\"},{\"name\":\"snappy-devel\", \"condition\": \"\"},{\"name\":\"lzo\", \"condition\": \"\"},{\"name\":\"hadooplzo_${stack_version}\", \"condition\": \"\"},{\"name\":\"hadoop_${stack_version}-libhdfs\", \"condition\": \"\"},{\"name\":\"ambari-log4j\", \"condition\": \"\"}]",
         "script": "install_packages.py"
     }, 
-    "commandId": "14-1", 
+    "commandId": "14-1",
+    "repositoryFile": {
+        "stackName": "HDP",
+        "repoVersionId": 1,
+        "repoVersion": "2",
+        "repositories": [
+            {
+                "repoName": "HDP-UTILS",
+                "baseUrl": "http://repo1/HDP/centos5/2.x/updates/2.2.0.0",
+                "repoId": "HDP-UTILS-1.1.0.20"
+            },
+            {
+                "repoName": "HDP",
+                "baseUrl": "http://repo1/HDP/centos5/2.x/updates/2.2.0.0",
+                "repoId": "HDP-2.2"
+            }
+        ]
+    },
     "clusterHostInfo": {
         "snamenode_host": [
             "0b3.vm"

http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py b/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py
index fda63e0..05fa204 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py
@@ -69,11 +69,17 @@ class TestHBaseMaster(RMFTestCase):
 
     self.assertNoMoreResources()
 
-  def test_install_hbase_master_with_version(self):
+  @patch("resource_management.libraries.functions.packages_analyzer._lookUpYumPackages")
+  def test_install_hbase_master_with_version(self, lookUpYumPackages):
+    def _add_packages_available(command, key, arg):
+      arg.append(["hbase_2_3_0_1_1234", "1.0", "testrepo"])
+
     config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/hbase_with_phx.json"
     with open(config_file, "r") as f:
       json_content = json.load(f)
     version = '2.3.0.1-1234'
+
+    lookUpYumPackages.side_effect = _add_packages_available
     # the json file is not a "well formed" install command
     json_content['roleCommand'] = 'INSTALL'
     json_content['commandParams']['version'] = version
@@ -86,8 +92,9 @@ class TestHBaseMaster(RMFTestCase):
                        stack_version = self.STACK_VERSION,
                        target = RMFTestCase.TARGET_COMMON_SERVICES,
                        try_install=True,
+                       os_type=('Redhat', '6.4', 'Final'),
                        checked_call_mocks = [(0, "OK.", "")],
-    )
+                       )
 
     # only assert that the correct package is trying to be installed
     self.assertResourceCalled('Package', 'hbase_2_3_0_1_1234',

http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_with_phx.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_with_phx.json b/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_with_phx.json
index 5147603..9979e9d 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_with_phx.json
+++ b/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_with_phx.json
@@ -28,6 +28,18 @@
     "roleParams": {}, 
     "serviceName": "HIVE",
     "role": "HIVE_SERVER",
+    "repositoryFile": {
+      "stackName": "HDP",
+      "repoVersionId": 1,
+      "repoVersion": "2",
+      "repositories": [
+        {
+          "repoName": "HDP",
+          "baseUrl": "testurl",
+          "repoId": "testrepo"
+        }
+      ]
+    },
     "commandParams": {
         "command_timeout": "300", 
         "service_package_folder": "OOZIE",

http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/utility/pom.xml
----------------------------------------------------------------------
diff --git a/utility/pom.xml b/utility/pom.xml
index 7d5eb93..918080e 100644
--- a/utility/pom.xml
+++ b/utility/pom.xml
@@ -67,6 +67,27 @@
         </configuration>
       </plugin>
       <plugin>
+        <groupId>org.vafer</groupId>
+        <artifactId>jdeb</artifactId>
+        <version>1.0.1</version>
+        <executions>
+          <execution>
+            <!--Stub execution on direct plugin call - workaround for ambari deb build process-->
+            <id>stub-execution</id>
+            <phase>none</phase>
+            <goals>
+              <goal>jdeb</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <skip>true</skip>
+          <attach>false</attach>
+          <submodules>false</submodules>
+          <controlDir>${project.basedir}/../src/main/package/deb/control</controlDir>
+        </configuration>
+      </plugin>
+      <plugin>
         <artifactId>maven-assembly-plugin</artifactId>
         <configuration>
           <descriptors>