You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ao...@apache.org on 2015/03/27 18:27:14 UTC

[2/2] ambari git commit: AMBARI-10244. Ubuntu7 title for debian7 repourl is confusing (aonishuk)

AMBARI-10244. Ubuntu7 title for debian7 repourl is confusing (aonishuk)


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

Branch: refs/heads/trunk
Commit: 36ac57824554600b63fe8e979bcf888047bdd14a
Parents: fd9649d
Author: Andrew Onishuk <ao...@hortonworks.com>
Authored: Fri Mar 27 19:27:02 2015 +0200
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Fri Mar 27 19:27:02 2015 +0200

----------------------------------------------------------------------
 .../src/main/python/ambari_agent/HostCleanup.py | 31 +++++-----
 .../src/main/python/ambari_agent/HostInfo.py    | 17 +++---
 .../TestMonitorWebserverResource.py             | 17 +++++-
 .../TestRepositoryResource.py                   | 51 ++++++++++++----
 .../src/main/python/ambari_commons/firewall.py  |  4 +-
 .../src/main/python/ambari_commons/os_check.py  | 37 +++++++-----
 .../ambari_commons/resources/os_family.json     | 13 ++++-
 .../core/providers/__init__.py                  |  3 +
 .../python/resource_management/core/system.py   |  2 +-
 .../libraries/functions/__init__.py             |  1 +
 .../libraries/functions/get_lzo_packages.py     | 47 +++++++++++++++
 .../libraries/functions/packages_analyzer.py    | 12 ++--
 .../libraries/providers/__init__.py             |  3 +
 .../libraries/providers/monitor_webserver.py    |  3 +-
 .../libraries/providers/repository.py           | 14 ++---
 .../server/configuration/Configuration.java     |  3 +-
 .../server/state/stack/JsonOsFamilyEntry.java   | 49 ++++++++++++++++
 .../server/state/stack/LatestRepoCallable.java  |  3 +-
 .../ambari/server/state/stack/OsFamily.java     | 56 +++++++++++++-----
 .../ambari_server/dbConfiguration_linux.py      |  8 +--
 .../src/main/python/ambari_server/utils.py      | 37 +++++++-----
 ambari-server/src/main/python/bootstrap.py      | 34 ++++-------
 .../GANGLIA/3.5.0/package/scripts/functions.py  |  3 +-
 .../3.5.0/package/scripts/ganglia_server.py     |  3 +-
 .../GANGLIA/3.5.0/package/scripts/params.py     |  9 +--
 .../HDFS/2.1.0.2.0/package/scripts/hdfs.py      |  5 +-
 .../HDFS/2.1.0.2.0/package/scripts/params.py    | 24 ++------
 .../HIVE/0.12.0.2.0/package/scripts/params.py   |  3 +-
 .../0.12.0.2.0/package/scripts/status_params.py |  3 +-
 .../package/scripts/kerberos_server.py          | 17 +++---
 .../1.10.3-10/package/scripts/params.py         |  7 +--
 .../OOZIE/4.0.0.2.0/package/scripts/oozie.py    |  4 +-
 .../OOZIE/4.0.0.2.0/package/scripts/params.py   | 18 +-----
 .../2.0.6/hooks/after-INSTALL/scripts/params.py |  3 +-
 .../2.0.6/hooks/before-ANY/scripts/params.py    |  3 +-
 .../scripts/repo_initialization.py              |  3 +-
 .../2.0.6/hooks/before-START/scripts/params.py  |  3 +-
 .../resources/stacks/HDP/2.3/repos/repoinfo.xml |  2 +-
 .../HDP/2.3/services/ACCUMULO/metainfo.xml      |  2 +-
 .../stacks/HDP/2.3/services/FALCON/metainfo.xml |  2 +-
 .../stacks/HDP/2.3/services/FLUME/metainfo.xml  |  2 +-
 .../stacks/HDP/2.3/services/HBASE/metainfo.xml  |  2 +-
 .../stacks/HDP/2.3/services/HDFS/metainfo.xml   |  2 +-
 .../stacks/HDP/2.3/services/HIVE/metainfo.xml   |  2 +-
 .../stacks/HDP/2.3/services/KAFKA/metainfo.xml  |  2 +-
 .../stacks/HDP/2.3/services/KNOX/metainfo.xml   |  2 +-
 .../stacks/HDP/2.3/services/OOZIE/metainfo.xml  |  2 +-
 .../stacks/HDP/2.3/services/PIG/metainfo.xml    |  2 +-
 .../stacks/HDP/2.3/services/RANGER/metainfo.xml |  2 +-
 .../stacks/HDP/2.3/services/SLIDER/metainfo.xml |  2 +-
 .../stacks/HDP/2.3/services/SPARK/metainfo.xml  |  2 +-
 .../stacks/HDP/2.3/services/SQOOP/metainfo.xml  |  2 +-
 .../stacks/HDP/2.3/services/STORM/metainfo.xml  |  2 +-
 .../stacks/HDP/2.3/services/TEZ/metainfo.xml    |  2 +-
 .../stacks/HDP/2.3/services/YARN/metainfo.xml   |  4 +-
 .../HDP/2.3/services/ZOOKEEPER/metainfo.xml     |  2 +-
 ambari-server/src/test/python/TestBootstrap.py  | 61 ++++++++++++--------
 ambari-server/src/test/python/TestUtils.py      | 58 +++++--------------
 58 files changed, 426 insertions(+), 286 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-agent/src/main/python/ambari_agent/HostCleanup.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/ambari_agent/HostCleanup.py b/ambari-agent/src/main/python/ambari_agent/HostCleanup.py
index ca2bcf4..a725d43 100644
--- a/ambari-agent/src/main/python/ambari_agent/HostCleanup.py
+++ b/ambari-agent/src/main/python/ambari_agent/HostCleanup.py
@@ -41,12 +41,6 @@ from ambari_commons.os_family_impl import OsFamilyImpl, OsFamilyFuncImpl
 
 logger = logging.getLogger()
 
-PACKAGE_ERASE_CMD = {
-  "redhat": "yum erase -y {0}",
-  "suse": "zypper -n -q remove {0}",
-  "ubuntu": "/usr/bin/apt-get -y -q remove {0}"
-}
-
 USER_ERASE_CMD = "userdel -rf {0}"
 GROUP_ERASE_CMD = "groupdel {0}"
 PROC_KILL_CMD = "kill -9 {0}"
@@ -55,6 +49,7 @@ ALT_ERASE_CMD = "alternatives --remove {0} {1}"
 
 REPO_PATH_RHEL = "/etc/yum.repos.d"
 REPO_PATH_SUSE = "/etc/zypp/repos.d/"
+REPO_PATH_UBUNTU = "/etc/apt/sources.list.d"
 SKIP_LIST = []
 TMP_HOST_CHECK_FILE_NAME = "tmp_hostcheck.result"
 HOST_CHECK_FILE_NAME = "hostcheck.result"
@@ -90,6 +85,17 @@ DIRNAME_PATTERNS = [
 REPOSITORY_BLACK_LIST = ["ambari.repo"]
 PACKAGES_BLACK_LIST = ["ambari-server", "ambari-agent"]
 
+def get_erase_cmd():
+  if OSCheck.is_redhat_family():
+    return "yum erase -y {0}"
+  elif OSCheck.is_suse_family():
+    return "zypper -n -q remove {0}"
+  elif OSCheck.is_ubuntu_family():
+    return "/usr/bin/apt-get -y -q remove {0}"
+  else:
+    raise Exception("Unsupported OS family '{0}', cannot remove package. ".format(OSCheck.get_os_family()))
+
+
 class HostCleanup:
 
   SELECT_ALL_PERFORMED_MARKER = "/var/lib/ambari-agent/data/hdp-select-set-all.performed"
@@ -349,10 +355,12 @@ class HostCleanup:
         repoNameList.append("name=" + repoName)
     if repoNameList:
       # get list of files
-      if osType == 'suse':
+      if OSCheck.is_suse_family():
         fileList = self.get_files_in_dir(REPO_PATH_SUSE)
-      elif osType == "redhat":
+      elif OSCheck.is_redhat_family():
         fileList = self.get_files_in_dir(REPO_PATH_RHEL)
+      elif OSCheck.is_ubuntu_family():
+        fileList = self.get_files_in_dir(REPO_PATH_UBUNTU)
       else:
         logger.warn("Unsupported OS type, cannot get repository location.")
         return []
@@ -376,12 +384,7 @@ class HostCleanup:
       packageStr = ' '.join(packageList)
       logger.debug("Erasing packages: " + packageStr)
     if packageStr is not None and packageStr:
-      os_name = OSCheck.get_os_family()
-      command = ''
-      if os_name in PACKAGE_ERASE_CMD:
-        command = PACKAGE_ERASE_CMD[os_name].format(packageStr)
-      else:
-        logger.warn("Unsupported OS type, cannot remove package.")
+      command = get_erase_cmd().format(packageStr)
 
       if command != '':
         logger.debug('Executing: ' + str(command))

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-agent/src/main/python/ambari_agent/HostInfo.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/ambari_agent/HostInfo.py b/ambari-agent/src/main/python/ambari_agent/HostInfo.py
index b0b96cc..1d1e853 100644
--- a/ambari-agent/src/main/python/ambari_agent/HostInfo.py
+++ b/ambari-agent/src/main/python/ambari_agent/HostInfo.py
@@ -72,10 +72,7 @@ class HostInfo(object):
     osType = OSCheck.get_os_family()
     for service in services:
       svcCheckResult = {}
-      if isinstance(service, dict):
-        serviceName = service[osType]
-      else:
-        serviceName = service
+      serviceName = service
       svcCheckResult['name'] = serviceName
       svcCheckResult['status'] = "UNKNOWN"
       svcCheckResult['desc'] = ""
@@ -121,6 +118,12 @@ class HostInfo(object):
       pass
     return False
 
+def get_ntp_service():
+  if OSCheck.is_redhat_family():
+    return "ntpd"
+  elif OSCheck.is_suse_family() or OSCheck.is_ubuntu_family():
+    return "ntp"
+
 
 @OsFamilyImpl(os_family=OsFamilyImpl.DEFAULT)
 class HostInfoLinux(HostInfo):
@@ -135,11 +138,11 @@ class HostInfoLinux(HostInfo):
     "ganglia-web"
   ]
 
+
   # List of live services checked for on the host, takes a map of plan strings
   DEFAULT_LIVE_SERVICES = [
-    {OSConst.REDHAT_FAMILY: "ntpd", OSConst.SUSE_FAMILY: "ntp", OSConst.UBUNTU_FAMILY: "ntp"}
+    get_ntp_service()
   ]
-
   # Set of default users (need to be replaced with the configured user names)
   DEFAULT_USERS = [
     "hive", "ambari-qa", "oozie", "hbase", "hcat", "mapred",
@@ -326,7 +329,7 @@ class HostInfoWindows(HostInfo):
   GET_USERS_CMD = '$accounts=(Get-WmiObject -Class Win32_UserAccount -Namespace "root\cimv2" -Filter "LocalAccount=\'$True\'" -ComputerName "LocalHost" -ErrorAction Stop); foreach ($acc in $accounts) {echo $acc.Name}'
   GET_JAVA_PROC_CMD = 'foreach ($process in (gwmi Win32_Process -Filter "name = \'java.exe\'")){echo $process.ProcessId;echo $process.CommandLine; echo $process.GetOwner().User}'
   DEFAULT_LIVE_SERVICES = [
-    {OSConst.WINSRV_FAMILY: "W32Time"}
+    "W32Time"
   ]
   DEFAULT_USERS = ["hadoop"]
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-agent/src/test/python/resource_management/TestMonitorWebserverResource.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/resource_management/TestMonitorWebserverResource.py b/ambari-agent/src/test/python/resource_management/TestMonitorWebserverResource.py
index 2e4b473..f149a3c 100644
--- a/ambari-agent/src/test/python/resource_management/TestMonitorWebserverResource.py
+++ b/ambari-agent/src/test/python/resource_management/TestMonitorWebserverResource.py
@@ -23,11 +23,18 @@ from resource_management.libraries.providers.monitor_webserver\
   import MonitorWebserverProvider
 from resource_management.libraries.resources.monitor_webserver\
   import MonitorWebserver
+from ambari_commons.os_check import OSCheck
 
 
 class TestMonitorWebserverResource(TestCase):
+  @patch.object(OSCheck, "is_suse_family")
+  @patch.object(OSCheck, "is_ubuntu_family")
+  @patch.object(OSCheck, "is_redhat_family")
   @patch.object(System, "os_family", new='redhat')
-  def test_setup_redhat(self):
+  def test_setup_redhat(self, is_redhat_family, is_ubuntu_family, is_suse_family):
+    is_redhat_family.return_value = True
+    is_ubuntu_family.return_value = False
+    is_suse_family.return_value = False
     with Environment(test_mode=True) as env:
       MonitorWebserverProvider(MonitorWebserver("start")).action_start()
     defined_resources = env.resource_list
@@ -50,8 +57,14 @@ class TestMonitorWebserverResource(TestCase):
                          ' Execute[\'(\'/etc/init.d/apache2\', \'start\')\']]'
     self.assertEqual(str(defined_resources), expected_resources)
 
+  @patch.object(OSCheck, "is_suse_family")
+  @patch.object(OSCheck, "is_ubuntu_family")
+  @patch.object(OSCheck, "is_redhat_family")
   @patch.object(System, "os_family", new='redhat')
-  def test_stop_redhat(self):
+  def test_stop_redhat(self, is_redhat_family, is_ubuntu_family, is_suse_family):
+    is_redhat_family.return_value = True
+    is_ubuntu_family.return_value = False
+    is_suse_family.return_value = False
     with Environment(test_mode=True) as env:
       MonitorWebserverProvider(MonitorWebserver("stop")).action_stop()
     defined_resources = env.resource_list

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-agent/src/test/python/resource_management/TestRepositoryResource.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/resource_management/TestRepositoryResource.py b/ambari-agent/src/test/python/resource_management/TestRepositoryResource.py
index 37a9584..0539d25 100644
--- a/ambari-agent/src/test/python/resource_management/TestRepositoryResource.py
+++ b/ambari-agent/src/test/python/resource_management/TestRepositoryResource.py
@@ -23,7 +23,7 @@ from mock.mock import patch, MagicMock
 
 from resource_management import *
 from resource_management.libraries.providers import repository
-
+from ambari_commons.os_check import OSCheck
 
 class DummyTemplate(object):
 
@@ -53,9 +53,16 @@ gpgcheck=0
 
 
 class TestRepositoryResource(TestCase):
-    @patch.object(System, "os_family", new='redhat')
+    @patch.object(OSCheck, "is_suse_family")
+    @patch.object(OSCheck, "is_ubuntu_family")
+    @patch.object(OSCheck, "is_redhat_family")
     @patch("resource_management.libraries.providers.repository.File")
-    def test_create_repo_redhat(self, file_mock):
+    @patch.object(System, "os_family", new='redhat')
+    def test_create_repo_redhat(self, file_mock,
+                                is_redhat_family, is_ubuntu_family, is_suse_family):
+        is_redhat_family.return_value = True
+        is_ubuntu_family.return_value = False
+        is_suse_family.return_value = False
         with Environment('/') as env:
           with patch.object(repository,"Template", new=DummyTemplate.create(RHEL_SUSE_DEFAULT_TEMPLATE)):
             Repository('hadoop',
@@ -85,9 +92,16 @@ class TestRepositoryResource(TestCase):
             self.assertEqual('dummy.j2', template)
 
 
+    @patch.object(OSCheck, "is_suse_family")
+    @patch.object(OSCheck, "is_ubuntu_family")
+    @patch.object(OSCheck, "is_redhat_family")
     @patch.object(System, "os_family", new='suse')
     @patch("resource_management.libraries.providers.repository.File")
-    def test_create_repo_suse(self, file_mock):
+    def test_create_repo_suse(self, file_mock,
+                              is_redhat_family, is_ubuntu_family, is_suse_family):
+        is_redhat_family.return_value = False
+        is_ubuntu_family.return_value = False
+        is_suse_family.return_value = True
         with Environment('/') as env:
           with patch.object(repository,"Template", new=DummyTemplate.create(RHEL_SUSE_DEFAULT_TEMPLATE)):
             Repository('hadoop',
@@ -116,6 +130,9 @@ class TestRepositoryResource(TestCase):
             self.assertEqual(expected_template_arguments, template_item.context._dict)
             self.assertEqual('dummy.j2', template)
     
+    @patch.object(OSCheck, "is_suse_family")
+    @patch.object(OSCheck, "is_ubuntu_family")
+    @patch.object(OSCheck, "is_redhat_family")
     @patch("resource_management.libraries.providers.repository.checked_call")
     @patch.object(tempfile, "NamedTemporaryFile")
     @patch("resource_management.libraries.providers.repository.Execute")
@@ -125,7 +142,10 @@ class TestRepositoryResource(TestCase):
     @patch.object(System, "os_release_name", new='precise')        
     @patch.object(System, "os_family", new='ubuntu')
     def test_create_repo_ubuntu_repo_exists(self, file_mock, execute_mock,
-                                            tempfile_mock, checked_call_mock):
+                                            tempfile_mock, checked_call_mock, is_redhat_family, is_ubuntu_family, is_suse_family):
+      is_redhat_family.return_value = False
+      is_ubuntu_family.return_value = True
+      is_suse_family.return_value = False
       tempfile_mock.return_value = MagicMock(spec=file)
       tempfile_mock.return_value.__enter__.return_value.name = "/tmp/1.txt"
       checked_call_mock.return_value = 0, "The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 123ABCD"
@@ -253,9 +273,15 @@ class TestRepositoryResource(TestCase):
       self.assertEqual(file_mock.call_count, 0)
       self.assertEqual(execute_mock.call_count, 0)
 
-    @patch.object(System, "os_family", new='redhat')
+    @patch.object(OSCheck, "is_suse_family")
+    @patch.object(OSCheck, "is_ubuntu_family")
+    @patch.object(OSCheck, "is_redhat_family")
     @patch("resource_management.libraries.providers.repository.File")
-    def test_remove_repo_redhat(self, file_mock):
+    def test_remove_repo_redhat(self, file_mock,
+                              is_redhat_family, is_ubuntu_family, is_suse_family):
+        is_redhat_family.return_value = True
+        is_ubuntu_family.return_value = False
+        is_suse_family.return_value = False
         with Environment('/') as env:
             Repository('hadoop',
                        action='remove',
@@ -270,13 +296,18 @@ class TestRepositoryResource(TestCase):
                                   'mirror_list': 'https://mirrors.base_url.org/?repo=Repository&arch=$basearch',
                                   'repo_file_name': 'Repository'}
             self.assertEqual(defined_arguments, expected_arguments)
-            self.assertEqual(file_mock.call_args[1]['action'], 'delete')
-            self.assertEqual(file_mock.call_args[0][0], '/etc/yum.repos.d/Repository.repo')
 
 
+    @patch.object(OSCheck, "is_suse_family")
+    @patch.object(OSCheck, "is_ubuntu_family")
+    @patch.object(OSCheck, "is_redhat_family")
     @patch.object(System, "os_family", new='suse')
     @patch("resource_management.libraries.providers.repository.File")
-    def test_remove_repo_suse(self, file_mock):
+    def test_remove_repo_suse(self, file_mock,
+                              is_redhat_family, is_ubuntu_family, is_suse_family):
+        is_redhat_family.return_value = False
+        is_ubuntu_family.return_value = False
+        is_suse_family.return_value = True
         with Environment('/') as env:
             Repository('hadoop',
                        action='remove',

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-common/src/main/python/ambari_commons/firewall.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/ambari_commons/firewall.py b/ambari-common/src/main/python/ambari_commons/firewall.py
index 2c4108e..e6a1ff9 100644
--- a/ambari-common/src/main/python/ambari_commons/firewall.py
+++ b/ambari-common/src/main/python/ambari_commons/firewall.py
@@ -44,11 +44,11 @@ class FirewallWindows(Firewall):
 @OsFamilyImpl(os_family=OsFamilyImpl.DEFAULT)
 class FirewallLinux(Firewall):
   def getFirewallObject(self):
-    if self.OS_TYPE == OSConst.OS_UBUNTU:
+    if OSCheck.is_ubuntu_family():
       return UbuntuFirewallChecks()
     elif self.OS_TYPE == OSConst.OS_FEDORA and int(self.OS_VERSION) >= 18:
       return Fedora18FirewallChecks()
-    elif self.OS_FAMILY == OSConst.SUSE_FAMILY:
+    elif OSCheck.is_suse_family():
       return SuseFirewallChecks()
     else:
       return FirewallChecks()

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-common/src/main/python/ambari_commons/os_check.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/ambari_commons/os_check.py b/ambari-common/src/main/python/ambari_commons/os_check.py
index 5d3dad3..904a23b 100644
--- a/ambari-common/src/main/python/ambari_commons/os_check.py
+++ b/ambari-common/src/main/python/ambari_commons/os_check.py
@@ -57,6 +57,7 @@ RESOURCES_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), "resou
 OSFAMILY_JSON_RESOURCE = "os_family.json"
 JSON_OS_TYPE = "distro"
 JSON_OS_VERSION = "versions"
+JSON_EXTENDS = "extends"
 
 #windows family constants
 SYSTEM_WINDOWS = "Windows"
@@ -104,6 +105,9 @@ class OS_CONST_TYPE(type):
           'name': family,
           'os_list': json_data[family][JSON_OS_TYPE]
         }]
+        
+        if JSON_EXTENDS in json_data[family]:
+          cls.OS_FAMILY_COLLECTION[-1][JSON_EXTENDS] = json_data[family][JSON_EXTENDS]
     except:
       raise Exception("Couldn't load '%s' file" % OSFAMILY_JSON_RESOURCE)
 
@@ -217,6 +221,15 @@ class OSCheck:
     return os_family.lower()
 
   @staticmethod
+  def get_os_family_parent(os_family):
+    for os_family_item in OSConst.OS_FAMILY_COLLECTION:
+      if os_family_item['name'] == os_family:
+        if JSON_EXTENDS in os_family_item:
+          return os_family_item[JSON_EXTENDS]
+        else:
+          return None
+
+  @staticmethod
   def get_os_version():
     """
     Returns the OS version
@@ -264,14 +277,9 @@ class OSCheck:
     """
      Return true if it is so or false if not
 
-     This is safe check for debian family, doesn't generate exception
+     This is safe check for ubuntu/debian families, doesn't generate exception
     """
-    try:
-      if OSCheck.get_os_family() == OSConst.UBUNTU_FAMILY:
-        return True
-    except Exception:
-      pass
-    return False
+    return OSCheck.is_in_family(OSCheck.get_os_family(), OSConst.UBUNTU_FAMILY)
 
   @staticmethod
   def is_suse_family():
@@ -280,12 +288,7 @@ class OSCheck:
 
      This is safe check for suse family, doesn't generate exception
     """
-    try:
-      if OSCheck.get_os_family() == OSConst.SUSE_FAMILY:
-        return True
-    except Exception:
-      pass
-    return False
+    return OSCheck.is_in_family(OSCheck.get_os_family(), OSConst.SUSE_FAMILY)
 
   @staticmethod
   def is_redhat_family():
@@ -294,12 +297,16 @@ class OSCheck:
 
      This is safe check for redhat family, doesn't generate exception
     """
+    return OSCheck.is_in_family(OSCheck.get_os_family(), OSConst.REDHAT_FAMILY)
+  
+  @staticmethod
+  def is_in_family(current_family, family):
     try:
-      if OSCheck.get_os_family() == OSConst.REDHAT_FAMILY:
+      if current_family == family or OSCheck.get_os_family_parent(current_family) and OSCheck.is_in_family(OSCheck.get_os_family_parent(current_family), family):
         return True
     except Exception:
       pass
-    return False
+    return False    
 
   @staticmethod
   def is_redhat7():

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-common/src/main/python/ambari_commons/resources/os_family.json
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/ambari_commons/resources/os_family.json b/ambari-common/src/main/python/ambari_commons/resources/os_family.json
index 2e484c6..dd57e37 100644
--- a/ambari-common/src/main/python/ambari_commons/resources/os_family.json
+++ b/ambari-common/src/main/python/ambari_commons/resources/os_family.json
@@ -21,13 +21,20 @@
       7
     ]
   },
-  "ubuntu": {
+  "debian": {
+    "extends" : "ubuntu",
     "distro": [
-      "ubuntu",
       "debian"
     ],
     "versions": [
-      7,
+      7
+    ]
+  },
+  "ubuntu": {
+    "distro": [
+      "ubuntu"
+    ],
+    "versions": [
       12
     ]
   },

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-common/src/main/python/resource_management/core/providers/__init__.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/core/providers/__init__.py b/ambari-common/src/main/python/resource_management/core/providers/__init__.py
index 7f97336..b7f94e5 100644
--- a/ambari-common/src/main/python/resource_management/core/providers/__init__.py
+++ b/ambari-common/src/main/python/resource_management/core/providers/__init__.py
@@ -50,6 +50,9 @@ PROVIDERS = dict(
   ubuntu=dict(
     Package="resource_management.core.providers.package.apt.AptProvider",
   ),
+  debian=dict(
+    Package="resource_management.core.providers.package.apt.AptProvider",
+  ),
   winsrv=dict(
     Service="resource_management.core.providers.windows.service.ServiceProvider",
     Execute="resource_management.core.providers.windows.system.ExecuteProvider",

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-common/src/main/python/resource_management/core/system.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/core/system.py b/ambari-common/src/main/python/resource_management/core/system.py
index 8ec9972..228474b 100644
--- a/ambari-common/src/main/python/resource_management/core/system.py
+++ b/ambari-common/src/main/python/resource_management/core/system.py
@@ -94,7 +94,7 @@ class System(object):
     Return values:
     redhat, fedora, centos, oraclelinux, ascendos,
     amazon, xenserver, oel, ovs, cloudlinux, slc, scientific, psbm,
-    ubuntu, ubuntu, sles, sled, opensuse, suse ... and others
+    debian, ubuntu, sles, sled, opensuse, suse ... and others
     
     In case cannot detect raises exception.
     """

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-common/src/main/python/resource_management/libraries/functions/__init__.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/__init__.py b/ambari-common/src/main/python/resource_management/libraries/functions/__init__.py
index 73607e1..6b3d572 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/__init__.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/__init__.py
@@ -39,6 +39,7 @@ from resource_management.libraries.functions.version import *
 from resource_management.libraries.functions.format_jvm_option import *
 from resource_management.libraries.functions.constants import *
 from resource_management.libraries.functions.get_hdp_version import *
+from resource_management.libraries.functions.get_lzo_packages import *
 
 IS_WINDOWS = platform.system() == "Windows"
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-common/src/main/python/resource_management/libraries/functions/get_lzo_packages.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/get_lzo_packages.py b/ambari-common/src/main/python/resource_management/libraries/functions/get_lzo_packages.py
new file mode 100644
index 0000000..2f2cc33
--- /dev/null
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/get_lzo_packages.py
@@ -0,0 +1,47 @@
+#!/usr/bin/env python
+"""
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Ambari Agent
+
+"""
+__all__ = ["get_lzo_packages"]
+
+from ambari_commons.os_check import OSCheck
+from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
+from resource_management.libraries.functions.format import format
+
+def get_lzo_packages(stack_version_unformatted):
+  lzo_packages = ["hadoop-lzo"]
+ 
+  if OSCheck.is_redhat_family() or OSCheck.is_suse_family():
+    lzo_packages += ["lzo", "hadoop-lzo-native"]
+  elif  OSCheck.is_ubuntu_family():
+    lzo_packages += ["liblzo2-2"]
+    
+  underscored_version = stack_version_unformatted.replace('.', '_')
+  dashed_version = stack_version_unformatted.replace('.', '-')
+  hdp_stack_version = format_hdp_stack_version(stack_version_unformatted)
+
+  if hdp_stack_version != "" and compare_versions(hdp_stack_version, '2.2') >= 0:
+    if OSCheck.is_redhat_family() or OSCheck.is_suse_family():
+      lzo_packages += [format("hadooplzo_{underscored_version}_*")]
+    elif OSCheck.is_ubuntu_family():
+      lzo_packages += [format("hadooplzo_{dashed_version}_*")]
+
+  return lzo_packages
+  
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/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 55c1eb8..3693886 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
@@ -89,16 +89,16 @@ def allInstalledPackages(allInstalledPackages):
   """
   osType = OSCheck.get_os_family()
 
-  if osType == OSConst.SUSE_FAMILY:
+  if OSCheck.is_suse_family():
     return _lookUpZypperPackages(
       ["zypper", "search", "--installed-only", "--details"],
       allInstalledPackages)
-  elif osType == OSConst.REDHAT_FAMILY:
+  elif OSCheck.is_redhat_family():
     return _lookUpYumPackages(
       ["yum", "list", "installed"],
       'Installed Packages',
       allInstalledPackages)
-  elif osType == OSConst.UBUNTU_FAMILY:
+  elif OSCheck.is_ubuntu_family():
      return _lookUpAptPackages(
       LIST_INSTALLED_PACKAGES_UBUNTU,
       allInstalledPackages)
@@ -107,16 +107,16 @@ def allInstalledPackages(allInstalledPackages):
 def allAvailablePackages(allAvailablePackages):
   osType = OSCheck.get_os_family()
 
-  if osType == OSConst.SUSE_FAMILY:
+  if OSCheck.is_suse_family():
     return _lookUpZypperPackages(
       ["zypper", "search", "--uninstalled-only", "--details"],
       allAvailablePackages)
-  elif osType == OSConst.REDHAT_FAMILY:
+  elif OSCheck.is_redhat_family():
     return _lookUpYumPackages(
       ["yum", "list", "available"],
       'Available Packages',
       allAvailablePackages)
-  elif osType == OSConst.UBUNTU_FAMILY:
+  elif OSCheck.is_ubuntu_family():
      return _lookUpAptPackages(
       LIST_AVAILABLE_PACKAGES_UBUNTU,
       allAvailablePackages)

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-common/src/main/python/resource_management/libraries/providers/__init__.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/providers/__init__.py b/ambari-common/src/main/python/resource_management/libraries/providers/__init__.py
index c765218..0038800 100644
--- a/ambari-common/src/main/python/resource_management/libraries/providers/__init__.py
+++ b/ambari-common/src/main/python/resource_management/libraries/providers/__init__.py
@@ -30,6 +30,9 @@ PROVIDERS = dict(
   ubuntu=dict(
     Repository="resource_management.libraries.providers.repository.UbuntuRepositoryProvider",
   ),
+  debian=dict(
+    Repository="resource_management.libraries.providers.repository.UbuntuRepositoryProvider",
+  ),
   winsrv=dict(
     Msi="resource_management.libraries.providers.msi.MsiProvider"
   ),

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-common/src/main/python/resource_management/libraries/providers/monitor_webserver.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/providers/monitor_webserver.py b/ambari-common/src/main/python/resource_management/libraries/providers/monitor_webserver.py
index 8ed9b03..276dd20 100644
--- a/ambari-common/src/main/python/resource_management/libraries/providers/monitor_webserver.py
+++ b/ambari-common/src/main/python/resource_management/libraries/providers/monitor_webserver.py
@@ -25,6 +25,7 @@ from resource_management.core.providers import Provider
 from resource_management.libraries.functions.format import format
 from resource_management.core.shell import as_sudo
 from resource_management.core.system import System
+from ambari_commons.os_check import OSCheck
 
 
 class MonitorWebserverProvider(Provider):
@@ -49,7 +50,7 @@ class MonitorWebserverProvider(Provider):
 
   def get_serivice_params(self):
     self.system = System.get_instance()
-    if self.system.os_family in ["suse","ubuntu"]:
+    if OSCheck.is_suse_family() or OSCheck.is_ubuntu_family():
       self.service_name = "apache2"
       self.httpd_conf_dir = '/etc/apache2'
     else:

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-common/src/main/python/resource_management/libraries/providers/repository.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/providers/repository.py b/ambari-common/src/main/python/resource_management/libraries/providers/repository.py
index 9bd89ec..94f057e 100644
--- a/ambari-common/src/main/python/resource_management/libraries/providers/repository.py
+++ b/ambari-common/src/main/python/resource_management/libraries/providers/repository.py
@@ -38,7 +38,7 @@ class RhelSuseRepositoryProvider(Provider):
   def action_create(self):
     with Environment.get_instance_copy() as env:
       repo_file_name = self.resource.repo_file_name
-      repo_dir = repos_dirs[env.system.os_family]
+      repo_dir = get_repo_dir()
       repo_template = self.resource.repo_template
       new_content = Template(repo_template, repo_id=self.resource.repo_id, repo_file_name=self.resource.repo_file_name,
                              base_url=self.resource.base_url, mirror_list=self.resource.mirror_list)
@@ -52,17 +52,17 @@ class RhelSuseRepositoryProvider(Provider):
   def action_remove(self):
     with Environment.get_instance_copy() as env:
       repo_file_name = self.resource.repo_file_name
-      repo_dir = repos_dirs[env.system.os_family]
+      repo_dir = get_repo_dir()
 
       File(format("{repo_dir}/{repo_file_name}.repo"),
            action = "delete")
     
   
-repos_dirs = {
-  'redhat': '/etc/yum.repos.d',
-  'suse': '/etc/zypp/repos.d'
-}
-
+def get_repo_dir():
+  if OSCheck.is_redhat_family():
+    return '/etc/yum.repos.d'
+  elif OSCheck.is_suse_family():
+    return '/etc/zypp/repos.d'
 
 class UbuntuRepositoryProvider(Provider):
   package_type = "deb"

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
index c3ad685..2b65956 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
@@ -1143,10 +1143,9 @@ public class Configuration {
    * @return a string array of suffixes used to validate repo URLs.
    */
   public String[] getRepoValidationSuffixes(String osType) {
-    String osFamily = this.osFamily.find_family(osType);
     String repoSuffixes;
 
-    if(osFamily.equals(OsFamily.UBUNTU_FAMILY)) {
+    if(osFamily.isUbuntuFamily(osType)) {
       repoSuffixes = properties.getProperty(REPO_SUFFIX_KEY_UBUNTU,
           REPO_SUFFIX_UBUNTU);
     } else {

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/java/org/apache/ambari/server/state/stack/JsonOsFamilyEntry.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/JsonOsFamilyEntry.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/JsonOsFamilyEntry.java
new file mode 100644
index 0000000..a937d52
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/JsonOsFamilyEntry.java
@@ -0,0 +1,49 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ambari.server.state.stack;
+
+import java.util.Set;
+
+import com.google.gson.annotations.SerializedName;
+
+class JsonOsFamilyEntry {
+  @SerializedName("extends")
+  private String extendsFamily;
+  private Set<String> distro;
+
+  private Set<String> versions;
+  
+  public String getExtendsFamily() {
+    return extendsFamily;
+  }
+  public void setExtendsFamily(String extendsFamily) {
+    this.extendsFamily = extendsFamily;
+  }
+  public Set<String> getDistro() {
+    return distro;
+  }
+  public void setDistro(Set<String> distro) {
+    this.distro = distro;
+  }
+  public Set<String> getVersions() {
+    return versions;
+  }
+  public void setVersions(Set<String> versions) {
+    this.versions = versions;
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/java/org/apache/ambari/server/state/stack/LatestRepoCallable.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/LatestRepoCallable.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/LatestRepoCallable.java
index 9eb2387..f4578a6 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/LatestRepoCallable.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/LatestRepoCallable.java
@@ -108,9 +108,8 @@ public class LatestRepoCallable implements Callable<Void> {
               // Agents do the reverse action (take the base url, and append <name>.repo)
 
               String repo_file_format;
-              String osFamily = os_family.find_family(ri.getOsType());
               
-              if(osFamily.equals(OsFamily.UBUNTU_FAMILY)) {
+              if(os_family.isUbuntuFamily(ri.getOsType())) {
                 repo_file_format = "list";
               } else {
                 repo_file_format = "repo";

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/java/org/apache/ambari/server/state/stack/OsFamily.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/OsFamily.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/OsFamily.java
index 2df3fcf..3cdc2ce 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/OsFamily.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/OsFamily.java
@@ -25,8 +25,8 @@ import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-
 import com.google.inject.Singleton;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -41,7 +41,9 @@ import org.apache.commons.io.IOUtils;
  */
 @Singleton
 public class OsFamily {
-    public final static String UBUNTU_FAMILY = "ubuntu";
+    private final static String OS_FAMILY_UBUNTU = "ubuntu";
+    private final static String OS_FAMILY_SUSE = "suse";
+    private final static String OS_FAMILY_REDHAT = "redhat";
     
     private final String os_pattern = "([^\\d]*)([\\d]*)";
     private final String OS_DISTRO = "distro";
@@ -50,7 +52,7 @@ public class OsFamily {
     private final String FILE_NAME = "os_family.json";
     private final Logger LOG = LoggerFactory.getLogger(OsFamily.class);
 
-    private Map<String, Map<String, Set<String>>> osMap = null;
+    private Map<String, JsonOsFamilyEntry> osMap = null;
 
   /**
    * Initialize object
@@ -75,7 +77,7 @@ public class OsFamily {
         if (!f.exists()) throw new Exception();
         inputStream = new FileInputStream(f);
 
-        Type type = new TypeToken<Map<String, Map<String, Set<String>>>>() {}.getType();
+        Type type = new TypeToken<Map<String, JsonOsFamilyEntry>>() {}.getType();
         Gson gson = new Gson();
         osMap = gson.fromJson(new InputStreamReader(inputStream), type);
       } catch (Exception e) {
@@ -115,10 +117,10 @@ public class OsFamily {
     public Set<String> findTypes(String os) {
       Map<String,String>  pos = parse_os(os);
       for ( String family : osMap.keySet()) {
-        Map<String, Set<String>> fam = osMap.get(family);
-        if (fam.get(OS_DISTRO).contains(pos.get(OS_DISTRO)) && fam.get(OS_VERSION).contains(pos.get(OS_VERSION))){
+        JsonOsFamilyEntry fam = osMap.get(family);
+        if (fam.getDistro().contains(pos.get(OS_DISTRO)) && fam.getVersions().contains(pos.get(OS_VERSION))){
           Set<String> data=new HashSet<String>();
-          for (String item: fam.get(OS_DISTRO)) data.add(item + pos.get(OS_VERSION));
+          for (String item: fam.getDistro()) data.add(item + pos.get(OS_VERSION));
             return Collections.unmodifiableSet(data);
         }
       }
@@ -133,8 +135,8 @@ public class OsFamily {
     public String find(String os) {
       Map<String,String>  pos = parse_os(os);
       for ( String family : osMap.keySet()) {
-        Map<String, Set<String>> fam = osMap.get(family);
-        if (fam.get(OS_DISTRO).contains(pos.get(OS_DISTRO)) && fam.get(OS_VERSION).contains(pos.get(OS_VERSION))){
+        JsonOsFamilyEntry fam = osMap.get(family);
+        if (fam.getDistro().contains(pos.get(OS_DISTRO)) && fam.getVersions().contains(pos.get(OS_VERSION))){
           return family + pos.get(OS_VERSION);
         }
       }
@@ -149,14 +151,13 @@ public class OsFamily {
     public String find_family(String os) {
       Map<String,String>  pos = parse_os(os);
       for ( String family : osMap.keySet()) {
-        Map<String, Set<String>> fam = osMap.get(family);
-        if (fam.get(OS_DISTRO).contains(pos.get(OS_DISTRO)) && fam.get(OS_VERSION).contains(pos.get(OS_VERSION))){
+        JsonOsFamilyEntry fam = osMap.get(family);
+        if (fam.getDistro().contains(pos.get(OS_DISTRO)) && fam.getVersions().contains(pos.get(OS_VERSION))){
           return family;
         }
       }
       return null;
     }
-
     /**
      * Form list of all supported os types
      * @return one dimension list with os types
@@ -164,13 +165,38 @@ public class OsFamily {
     public Set<String> os_list(){
       Set<String> r= new HashSet<String>();
       for ( String family : osMap.keySet()) {
-        Map<String, Set<String>> fam = osMap.get(family);
-        for (String version: fam.get(OS_VERSION)){
+        JsonOsFamilyEntry fam = osMap.get(family);
+        for (String version: fam.getVersions()){
           Set<String> data=new HashSet<String>();
-          for (String item: fam.get(OS_DISTRO)) data.add(item + version);
+          for (String item: fam.getDistro()) data.add(item + version);
           r.addAll(data);
         }
       }
       return r;
     }
+    
+    public boolean isUbuntuFamily(String osType) {
+      return isOsInFamily(osType, OS_FAMILY_UBUNTU);
+    }
+    
+    public boolean isSuseFamily(String osType) {
+      return isOsInFamily(osType, OS_FAMILY_SUSE);
+    }
+    
+    public boolean isRedhatFamily(String osType) {
+      return isOsInFamily(osType, OS_FAMILY_REDHAT);
+    }
+
+    public boolean isOsInFamily(String osType, String osFamily) {
+      String familyOfOsType = find_family(osType);
+      return (familyOfOsType != null && isFamilyExtendedByFamily(familyOfOsType, osFamily));
+    }
+
+    private boolean isFamilyExtendedByFamily(String currentFamily, String family) {
+      return (currentFamily.equals(family) || getOsFamilyParent(currentFamily)!=null && isFamilyExtendedByFamily(getOsFamilyParent(currentFamily), family));
+    }
+      
+    private String getOsFamilyParent(String osFamily) {
+      return osMap.get(osFamily).getExtendsFamily();
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/python/ambari_server/dbConfiguration_linux.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/python/ambari_server/dbConfiguration_linux.py b/ambari-server/src/main/python/ambari_server/dbConfiguration_linux.py
index 735336c..e59f1ed 100644
--- a/ambari-server/src/main/python/ambari_server/dbConfiguration_linux.py
+++ b/ambari-server/src/main/python/ambari_server/dbConfiguration_linux.py
@@ -35,7 +35,7 @@ from ambari_server.dbConfiguration import DBMSConfig, USERNAME_PATTERN, SETUP_DB
     SETUP_DB_CONNECT_TIMEOUT, STORAGE_TYPE_LOCAL, DEFAULT_USERNAME, DEFAULT_PASSWORD
 from ambari_server.serverConfiguration import encrypt_password, store_password_file, \
     get_ambari_properties, get_resources_location, get_value_from_properties, configDefaults, \
-    OS_TYPE, OS_FAMILY, AMBARI_PROPERTIES_FILE, RESOURCES_DIR_PROPERTY, \
+    OS_FAMILY, AMBARI_PROPERTIES_FILE, RESOURCES_DIR_PROPERTY, \
     JDBC_DATABASE_PROPERTY, JDBC_DATABASE_NAME_PROPERTY, JDBC_POSTGRES_SCHEMA_PROPERTY, \
     JDBC_HOSTNAME_PROPERTY, JDBC_PORT_PROPERTY, \
     JDBC_USER_NAME_PROPERTY, JDBC_PASSWORD_PROPERTY, JDBC_PASSWORD_FILENAME, \
@@ -347,7 +347,7 @@ class PGConfig(LinuxDBMSConfig):
     self._is_user_changed = False
 
     if self.persistence_type == STORAGE_TYPE_LOCAL:
-      PGConfig.PG_STATUS_RUNNING = get_postgre_running_status(OS_TYPE)
+      PGConfig.PG_STATUS_RUNNING = get_postgre_running_status()
       PGConfig.PG_HBA_DIR = get_postgre_hba_dir(OS_FAMILY)
 
       PGConfig.PG_HBA_CONF_FILE = os.path.join(PGConfig.PG_HBA_DIR, "pg_hba.conf")
@@ -537,7 +537,7 @@ class PGConfig(LinuxDBMSConfig):
       return pg_status, 0, out, err
     else:
       # run initdb only on non ubuntu systems as ubuntu does not have initdb cmd.
-      if OS_TYPE != OSConst.OS_UBUNTU:
+      if not OSCheck.is_ubuntu_family():
         print "Running initdb: This may take upto a minute."
         retcode, out, err = run_os_command(PGConfig.PG_INITDB_CMD)
         if retcode == 0:
@@ -549,7 +549,7 @@ class PGConfig(LinuxDBMSConfig):
                                    stdin=subprocess.PIPE,
                                    stderr=subprocess.PIPE
         )
-        if OS_TYPE == OSConst.OS_SUSE:
+        if OSCheck.is_suse_family():
           time.sleep(20)
           result = process.poll()
           print_info_msg("Result of postgres start cmd: " + str(result))

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/python/ambari_server/utils.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/python/ambari_server/utils.py b/ambari-server/src/main/python/ambari_server/utils.py
index 23bd9d6..f09a95c 100644
--- a/ambari-server/src/main/python/ambari_server/utils.py
+++ b/ambari-server/src/main/python/ambari_server/utils.py
@@ -30,9 +30,6 @@ from ambari_commons import OSConst,OSCheck
 # PostgreSQL settings
 PG_STATUS_RUNNING_DEFAULT = "running"
 PG_HBA_ROOT_DEFAULT = "/var/lib/pgsql/data"
-PG_HBA_INIT_FILES = {'ubuntu': '/etc/postgresql',
-                     'redhat': '/etc/rc.d/init.d/postgresql',
-                     'suse': '/etc/init.d/postgresql'}
 
 #Environment
 ENV_PATH_DEFAULT = ['/bin', '/usr/bin', '/sbin', '/usr/sbin']  # default search path
@@ -43,6 +40,16 @@ PROC_DIR = '/proc'
 PROC_CMDLINE = 'cmdline'
 PROC_EXEC = 'exe'
 
+def get_pg_hba_init_files():
+  if OSCheck.is_ubuntu_family():
+    return '/etc/postgresql'
+  elif OSCheck.is_redhat_family():
+    return '/etc/rc.d/init.d/postgresql'
+  elif OSCheck.is_suse_family():
+    return '/etc/init.d/postgresql'
+  else:
+    raise Exception("Unsupported OS family '{0}'".format(OSCheck.get_os_family()))
+
 
   # ToDo: move that function to common-functions
 def locate_file(filename, default=''):
@@ -189,11 +196,10 @@ def get_ubuntu_pg_version():
   """
   postgre_ver = ""
 
-  if os.path.isdir(PG_HBA_INIT_FILES[
-    'ubuntu']):  # detect actual installed versions of PG and select a more new one
+  if os.path.isdir(get_pg_hba_init_files()):  # detect actual installed versions of PG and select a more new one
     postgre_ver = sorted(
-      [fld for fld in os.listdir(PG_HBA_INIT_FILES[OSConst.UBUNTU_FAMILY]) if
-       os.path.isdir(os.path.join(PG_HBA_INIT_FILES[OSConst.UBUNTU_FAMILY], fld))],
+      [fld for fld in os.listdir(get_pg_hba_init_files()) if
+       os.path.isdir(os.path.join(get_pg_hba_init_files(), fld))],
       reverse=True)
     if len(postgre_ver) > 0:
       return postgre_ver[0]
@@ -206,21 +212,20 @@ def get_postgre_hba_dir(OS_FAMILY):
   1) /etc/rc.d/init.d/postgresql --> /etc/rc.d/init.d/postgresql-9.3
   2) /etc/init.d/postgresql --> /etc/init.d/postgresql-9.1
   """
-  if OS_FAMILY == OSConst.UBUNTU_FAMILY:
+  if OSCheck.is_ubuntu_family():
     # Like: /etc/postgresql/9.1/main/
-    return os.path.join(PG_HBA_INIT_FILES[OS_FAMILY], get_ubuntu_pg_version(),
+    return os.path.join(get_pg_hba_init_files(), get_ubuntu_pg_version(),
                         "main")
   elif OSCheck.is_redhat7():
     return PG_HBA_ROOT_DEFAULT
   else:
-    if not os.path.isfile(PG_HBA_INIT_FILES[OS_FAMILY]):
+    if not os.path.isfile(get_pg_hba_init_files()):
       # Link: /etc/init.d/postgresql --> /etc/init.d/postgresql-9.1
-      os.symlink(glob.glob(PG_HBA_INIT_FILES[OS_FAMILY] + '*')[0],
-                 PG_HBA_INIT_FILES[OS_FAMILY])
+      os.symlink(glob.glob(get_pg_hba_init_files() + '*')[0],
+                 get_pg_hba_init_files())
 
     # Get postgres_data location (default: /var/lib/pgsql/data)
-    cmd = "alias exit=return; source " + PG_HBA_INIT_FILES[
-      OS_FAMILY] + " status &>/dev/null; echo $PGDATA"
+    cmd = "alias exit=return; source " + get_pg_hba_init_files() + " status &>/dev/null; echo $PGDATA"
     p = subprocess.Popen(cmd,
                          stdout=subprocess.PIPE,
                          stdin=subprocess.PIPE,
@@ -234,9 +239,9 @@ def get_postgre_hba_dir(OS_FAMILY):
       return PG_HBA_ROOT_DEFAULT
 
 
-def get_postgre_running_status(OS_FAMILY):
+def get_postgre_running_status():
   """Return postgre running status indicator"""
-  if OS_FAMILY == OSConst.UBUNTU_FAMILY:
+  if OSCheck.is_ubuntu_family():
     return os.path.join(get_ubuntu_pg_version(), "main")
   else:
     return PG_STATUS_RUNNING_DEFAULT

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/python/bootstrap.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/python/bootstrap.py b/ambari-server/src/main/python/bootstrap.py
index 111ff46..692ce27 100755
--- a/ambari-server/src/main/python/bootstrap.py
+++ b/ambari-server/src/main/python/bootstrap.py
@@ -33,6 +33,7 @@ import traceback
 import re
 from datetime import datetime
 from resource_management.core.shell import quote_bash_args
+from ambari_commons.os_check import OSCheck
 
 AMBARI_PASSPHRASE_VAR_NAME = "AMBARI_PASSPHRASE"
 HOST_BOOTSTRAP_TIMEOUT = 300
@@ -164,7 +165,7 @@ class Bootstrap(threading.Thread):
     self.host_log = HostLog(log_file)
     self.daemon = True
 
-    if self.is_ubuntu():
+    if OSCheck.is_ubuntu_family():
       self.AMBARI_REPO_FILENAME = self.AMBARI_REPO_FILENAME + ".list"
     else:
       self.AMBARI_REPO_FILENAME = self.AMBARI_REPO_FILENAME + ".repo"
@@ -192,26 +193,16 @@ class Bootstrap(threading.Thread):
     def _call(*args, **kwargs):
       self(obj, *args, **kwargs)
     return _call
-
-  def is_suse(self):
-    if os.path.isfile("/etc/issue"):
-      if "suse" in open("/etc/issue").read().lower():
-        return True
-    return False
-
-  def is_ubuntu(self):
-    if self.getServerFamily()[0] == "ubuntu":
-      return True
-    return False
-
+  
   def getRepoDir(self):
-    """ Ambari repo file for Ambari."""
-    if self.is_suse():
+    if OSCheck.is_redhat_family():
+      return "/etc/yum.repos.d"
+    elif OSCheck.is_suse_family():
       return "/etc/zypp/repos.d"
-    elif self.is_ubuntu():
+    elif OSCheck.is_ubuntu_family():
       return "/etc/apt/sources.list.d"
     else:
-      return "/etc/yum.repos.d"
+      raise Exception("Unsupported OS family '{0}'".format(OSCheck.get_os_family()))
 
 
   def getRepoFile(self):
@@ -325,7 +316,7 @@ class Bootstrap(threading.Thread):
     self.host_log.write("\n")
 
     # Update repo cache for ubuntu OS
-    if self.is_ubuntu():
+    if OSCheck.is_ubuntu_family():
       self.host_log.write("==========================\n")
       self.host_log.write("Update apt cache of repository...")
       command = self.getAptUpdateCommand()
@@ -430,17 +421,12 @@ class Bootstrap(threading.Thread):
       doneFile.write(str(retcode))
       doneFile.close()
 
-  def getServerFamily(self):
-    '''Return server OS family and version'''
-    cot = re.search("([^\d]+)([\d]*)", self.shared_state.cluster_os_type)
-    return cot.group(1).lower(),cot.group(2).lower()
-
   def checkSudoPackage(self):
     """ Checking 'sudo' package on remote host """
     self.host_log.write("==========================\n")
     self.host_log.write("Checking 'sudo' package on remote host...")
     params = self.shared_state
-    if self.getServerFamily()[0] == "ubuntu":
+    if OSCheck.is_ubuntu_family():
       command = "dpkg --get-selections|grep -e '^sudo\s*install'"
     else:
       command = "rpm -qa | grep -e '^sudo\-'"

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/common-services/GANGLIA/3.5.0/package/scripts/functions.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/GANGLIA/3.5.0/package/scripts/functions.py b/ambari-server/src/main/resources/common-services/GANGLIA/3.5.0/package/scripts/functions.py
index 0f20f17..02c44f0 100644
--- a/ambari-server/src/main/resources/common-services/GANGLIA/3.5.0/package/scripts/functions.py
+++ b/ambari-server/src/main/resources/common-services/GANGLIA/3.5.0/package/scripts/functions.py
@@ -16,10 +16,11 @@
 # under the License.
 #
 from resource_management import *
+from ambari_commons.os_check import OSCheck
 
 
 def turn_off_autostart(service):
-  if System.get_instance().os_family == "ubuntu":
+  if OSCheck.is_ubuntu_family():
     Execute(('update-rc.d', service, 'disable'),
             path='/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin',
             sudo = True

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/common-services/GANGLIA/3.5.0/package/scripts/ganglia_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/GANGLIA/3.5.0/package/scripts/ganglia_server.py b/ambari-server/src/main/resources/common-services/GANGLIA/3.5.0/package/scripts/ganglia_server.py
index 5bbb545..1893483 100644
--- a/ambari-server/src/main/resources/common-services/GANGLIA/3.5.0/package/scripts/ganglia_server.py
+++ b/ambari-server/src/main/resources/common-services/GANGLIA/3.5.0/package/scripts/ganglia_server.py
@@ -24,6 +24,7 @@ from ganglia import generate_daemon
 import ganglia
 import functions
 import ganglia_server_service
+from ambari_commons.os_check import OSCheck
 
 
 class GangliaServer(Script):
@@ -114,7 +115,7 @@ def server_files():
             recursive=True
   )
   
-  if System.get_instance().os_family in ["ubuntu","suse"]:
+  if OSCheck.is_suse_family() or OSCheck.is_ubuntu_family():
     File( params.ganglia_apache_config_file,
       content = Template("ganglia.conf.j2"),
       mode = 0644

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/common-services/GANGLIA/3.5.0/package/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/GANGLIA/3.5.0/package/scripts/params.py b/ambari-server/src/main/resources/common-services/GANGLIA/3.5.0/package/scripts/params.py
index 5fe6335..30f8ee4 100644
--- a/ambari-server/src/main/resources/common-services/GANGLIA/3.5.0/package/scripts/params.py
+++ b/ambari-server/src/main/resources/common-services/GANGLIA/3.5.0/package/scripts/params.py
@@ -18,6 +18,7 @@ limitations under the License.
 
 from resource_management import *
 from resource_management.core.system import System
+from ambari_commons.os_check import OSCheck
 import os
 
 config = Script.get_config()
@@ -42,7 +43,7 @@ for x in gmond_app_strs:
   a,b = x.strip().split(':')
   gmond_apps.append((a.strip(),b.strip()))
 
-if System.get_instance().os_family == "ubuntu":
+if OSCheck.is_ubuntu_family():
   gmond_service_name = "ganglia-monitor"
   modules_dir = "/usr/lib/ganglia"
 else:
@@ -145,7 +146,7 @@ if len(gmond_apps) > 0:
 
 ganglia_apache_config_file = "/etc/apache2/conf.d/ganglia.conf"
 ganglia_web_path="/var/www/html/ganglia"
-if System.get_instance().os_family == "suse":
+if OSCheck.is_suse_family():
   rrd_py_path = '/srv/www/cgi-bin'
   dwoo_path = '/var/lib/ganglia-web/dwoo'
   web_user = "wwwrun"
@@ -153,11 +154,11 @@ if System.get_instance().os_family == "suse":
   if not os.path.exists(ganglia_web_path):
     ganglia_web_path='/srv/www/htdocs/ganglia'
 
-elif  System.get_instance().os_family == "redhat":
+elif OSCheck.is_redhat_family():
   rrd_py_path = '/var/www/cgi-bin'
   dwoo_path = '/var/lib/ganglia/dwoo'
   web_user = "apache"
-elif  System.get_instance().os_family == "ubuntu":
+elif OSCheck.is_ubuntu_family():
   rrd_py_path = '/usr/lib/cgi-bin'
   ganglia_web_path = '/usr/share/ganglia-webfrontend'
   dwoo_path = '/var/lib/ganglia/dwoo'

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs.py b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs.py
index 795b315..b203800 100644
--- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs.py
+++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs.py
@@ -79,6 +79,5 @@ def hdfs(name=None):
        content=Template("slaves.j2")
   )
   
-  if params.lzo_enabled:
-    if len(params.lzo_packages_for_current_host) > 0:
-      Package(params.lzo_packages_for_current_host)
+  if params.lzo_enabled and len(params.lzo_packages) > 0:
+      Package(params.lzo_packages)

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/params.py b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/params.py
index 6b66158..7061057 100644
--- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/params.py
+++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/params.py
@@ -18,6 +18,7 @@ limitations under the License.
 """
 
 from resource_management.libraries.functions.version import format_hdp_stack_version, compare_versions
+from ambari_commons.os_check import OSCheck
 from resource_management.libraries.functions.default import default
 from resource_management import *
 import status_params
@@ -269,28 +270,11 @@ HdfsDirectory = functools.partial(
 # The logic for LZO also exists in OOZIE's params.py
 io_compression_codecs = default("/configurations/core-site/io.compression.codecs", None)
 lzo_enabled = io_compression_codecs is not None and "com.hadoop.compression.lzo" in io_compression_codecs.lower()
-
-# stack_is_hdp22_or_further
-underscored_version = stack_version_unformatted.replace('.', '_')
-dashed_version = stack_version_unformatted.replace('.', '-')
-lzo_packages_to_family = {
-  "any": ["hadoop-lzo", ],
-  "redhat": ["lzo", "hadoop-lzo-native"],
-  "suse": ["lzo", "hadoop-lzo-native"],
-  "ubuntu": ["liblzo2-2", ]
-}
-
-if hdp_stack_version != "" and compare_versions(hdp_stack_version, '2.2') >= 0:
-  lzo_packages_to_family["redhat"] += [format("hadooplzo_{underscored_version}_*")]
-  lzo_packages_to_family["suse"] += [format("hadooplzo_{underscored_version}_*")]
-  lzo_packages_to_family["ubuntu"] += [format("hadooplzo_{dashed_version}_*")]
-
-lzo_packages_for_current_host = lzo_packages_to_family['any'] + lzo_packages_to_family[System.get_instance().os_family]
-all_lzo_packages = set(itertools.chain(*lzo_packages_to_family.values()))
+lzo_packages = get_lzo_packages(stack_version_unformatted)
 
 exclude_packages = []
 if not lzo_enabled:
-  exclude_packages += all_lzo_packages
+  exclude_packages += lzo_packages
   
 name_node_params = default("/commandParams/namenode", None)
 
@@ -300,7 +284,7 @@ hadoop_env_sh_template = config['configurations']['hadoop-env']['content']
 #hadoop-env.sh
 java_home = config['hostLevelParams']['java_home']
 
-if hdp_stack_version != "" and compare_versions(hdp_stack_version, '2.0') >= 0 and compare_versions(hdp_stack_version, '2.1') < 0 and System.get_instance().os_family != "suse":
+if hdp_stack_version != "" and compare_versions(hdp_stack_version, '2.0') >= 0 and compare_versions(hdp_stack_version, '2.1') < 0 and not OSCheck.is_suse_family():
   # deprecated rhel jsvc_path
   jsvc_path = "/usr/libexec/bigtop-utils"
 else:

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params.py b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params.py
index 17db636..69ac68d 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params.py
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params.py
@@ -19,6 +19,7 @@ limitations under the License.
 """
 
 from ambari_commons.constants import AMBARI_SUDO_BINARY
+from ambari_commons.os_check import OSCheck
 from resource_management.libraries.functions.version import format_hdp_stack_version, compare_versions
 from resource_management.libraries.functions.default import default
 from resource_management import *
@@ -279,7 +280,7 @@ app_dir_files = {tez_local_api_jars:None}
 # Tez libraries
 tez_lib_uris = default("/configurations/tez-site/tez.lib.uris", None)
 
-if System.get_instance().os_family == "ubuntu":
+if OSCheck.is_ubuntu_family():
   mysql_configname = '/etc/mysql/my.cnf'
 else:
   mysql_configname = '/etc/my.cnf'

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/status_params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/status_params.py b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/status_params.py
index b5a38f4..3b75b98 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/status_params.py
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/status_params.py
@@ -19,6 +19,7 @@ limitations under the License.
 """
 
 from resource_management import *
+from ambari_commons.os_check import OSCheck
 
 config = Script.get_config()
 
@@ -31,7 +32,7 @@ hcat_pid_dir = config['configurations']['hive-env']['hcat_pid_dir'] #hcat_pid_di
 webhcat_pid_file = format('{hcat_pid_dir}/webhcat.pid')
 
 process_name = 'mysqld'
-if System.get_instance().os_family == "suse" or System.get_instance().os_family == "ubuntu":
+if OSCheck.is_suse_family() or OSCheck.is_ubuntu_family():
   daemon_name = 'mysql'
 else:
   daemon_name = 'mysqld'

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/kerberos_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/kerberos_server.py b/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/kerberos_server.py
index 3e15f50..8cc4312 100644
--- a/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/kerberos_server.py
+++ b/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/kerberos_server.py
@@ -18,6 +18,7 @@ limitations under the License.
 """
 
 from kerberos_common import *
+from ambari_commons.os_check import OSCheck
 
 class KerberosServer(KerberosScript):
   @staticmethod
@@ -81,18 +82,16 @@ class KerberosServer(KerberosScript):
 
 
   def start(self, env):
-    os_family = System.get_instance().os_family
-
     # Attempt to reconfigure the service before starting
     self.configure(env)
 
     # Create or update the administrator account
     KerberosScript.create_or_update_administrator_identity()
 
-    if os_family == "suse":
+    if OSCheck.is_suse_family():
       Execute('rckadmind start')
       Execute('rckrb5kdc start')
-    elif os_family == 'ubuntu':
+    elif OSCheck.is_ubuntu_family():
       Execute('service krb5-kdc start')
       Execute('service krb5-admin-server start')
     else:
@@ -100,12 +99,10 @@ class KerberosServer(KerberosScript):
       Execute('service kadmin start')
 
   def stop(self, env):
-    os_family = System.get_instance().os_family
-
-    if os_family == "suse":
+    if OSCheck.is_suse_family():
       Execute('rckadmind stop')
       Execute('rckrb5kdc stop')
-    elif os_family == 'ubuntu':
+    elif OSCheck.is_ubuntu_family():
       Execute('service krb5-kdc stop')
       Execute('service krb5-admin-server stop')
     else:
@@ -124,14 +121,14 @@ class KerberosServer(KerberosScript):
   def status(self, env):
     import params
 
-    if params.os_family == "suse":
+    if OSCheck.is_suse_family():
       try:
         Execute('checkproc `which krb5kdc`')
         Execute('checkproc `which kadmind`')
       except Fail as ex:
         raise ComponentIsNotRunning()
 
-    elif params.os_family == 'ubuntu':
+    elif OSCheck.is_ubuntu_family():
       check_process_status(params.kdamin_pid_path)
       check_process_status(params.krb5kdc_pid_path)
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/params.py b/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/params.py
index 18255bd..5482f6c 100644
--- a/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/params.py
+++ b/ambari-server/src/main/resources/common-services/KERBEROS/1.10.3-10/package/scripts/params.py
@@ -19,16 +19,15 @@ limitations under the License.
 
 from resource_management import *
 from utils import get_property_value, get_unstructured_data
-
-os_family = System.get_instance().os_family
+from ambari_commons.os_check import OSCheck
 
 krb5_conf_dir = '/etc'
 krb5_conf_file = 'krb5.conf'
 krb5_conf_path = krb5_conf_dir + '/' + krb5_conf_file
 
-if os_family == 'suse':
+if OSCheck.is_suse_family():
   kdc_conf_dir = '/var/lib/kerberos/krb5kdc'
-elif os_family == 'ubuntu':
+elif OSCheck.is_ubuntu_family():
   kdc_conf_dir = '/etc/krb5kdc'
 else:
   kdc_conf_dir = '/var/kerberos/krb5kdc'

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py
index 4e31673..1cf0e9d 100644
--- a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py
+++ b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py
@@ -182,8 +182,8 @@ def oozie_server_specific():
     Execute(format('{sudo} chown {oozie_user}:{user_group} {oozie_libext_dir}/falcon-oozie-el-extension-*.jar'),
       not_if  = no_op_test,
     )
-  if params.lzo_enabled and len(params.lzo_packages_for_current_host) > 0:
-    Package(params.lzo_packages_for_current_host)
+  if params.lzo_enabled and len(params.all_lzo_packages) > 0:
+    Package(params.all_lzo_packages)
     Execute(format('{sudo} cp {hadoop_lib_home}/hadoop-lzo*.jar {oozie_lib_dir}'),
       not_if  = no_op_test,
     )

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params.py b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params.py
index 454491f..d1ad6df 100644
--- a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params.py
+++ b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params.py
@@ -19,6 +19,7 @@ limitations under the License.
 """
 
 from ambari_commons.constants import AMBARI_SUDO_BINARY
+from resource_management import *
 from resource_management.core import System
 from resource_management.libraries import Script
 from resource_management.libraries.functions import default
@@ -208,20 +209,5 @@ HdfsDirectory = functools.partial(
 # The logic for LZO also exists in HDFS' params.py
 io_compression_codecs = default("/configurations/core-site/io.compression.codecs", None)
 lzo_enabled = io_compression_codecs is not None and "com.hadoop.compression.lzo" in io_compression_codecs.lower()
-# stack_is_hdp22_or_further
-underscored_version = stack_version_unformatted.replace('.', '_')
-dashed_version = stack_version_unformatted.replace('.', '-')
-lzo_packages_to_family = {
-  "any": ["hadoop-lzo", ],
-  "redhat": ["lzo", "hadoop-lzo-native"],
-  "suse": ["lzo", "hadoop-lzo-native"],
-  "ubuntu": ["liblzo2-2", ]
-}
 
-if hdp_stack_version != "" and compare_versions(hdp_stack_version, '2.2') >= 0:
-  lzo_packages_to_family["redhat"] += [format("hadooplzo_{underscored_version}_*")]
-  lzo_packages_to_family["suse"] += [format("hadooplzo_{underscored_version}_*")]
-  lzo_packages_to_family["ubuntu"] += [format("hadooplzo_{dashed_version}_*")]
-
-lzo_packages_for_current_host = lzo_packages_to_family['any'] + lzo_packages_to_family[System.get_instance().os_family]
-all_lzo_packages = set(itertools.chain(*lzo_packages_to_family.values()))
\ No newline at end of file
+all_lzo_packages = get_lzo_packages(stack_version_unformatted)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/after-INSTALL/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/after-INSTALL/scripts/params.py b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/after-INSTALL/scripts/params.py
index 755c18c..16f78b2 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/after-INSTALL/scripts/params.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/after-INSTALL/scripts/params.py
@@ -21,6 +21,7 @@ from ambari_commons.constants import AMBARI_SUDO_BINARY
 from resource_management.libraries.functions.version import format_hdp_stack_version, compare_versions
 from resource_management import *
 from resource_management.core.system import System
+from ambari_commons.os_check import OSCheck
 
 config = Script.get_config()
 sudo = AMBARI_SUDO_BINARY
@@ -48,7 +49,7 @@ hdfs_log_dir_prefix = config['configurations']['hadoop-env']['hdfs_log_dir_prefi
 hadoop_pid_dir_prefix = config['configurations']['hadoop-env']['hadoop_pid_dir_prefix']
 hadoop_root_logger = config['configurations']['hadoop-env']['hadoop_root_logger']
 
-if hdp_stack_version != "" and compare_versions(hdp_stack_version, '2.0') >= 0 and compare_versions(hdp_stack_version, '2.1') < 0 and System.get_instance().os_family != "suse":
+if hdp_stack_version != "" and compare_versions(hdp_stack_version, '2.0') >= 0 and compare_versions(hdp_stack_version, '2.1') < 0  and not OSCheck.is_suse_family():
   # deprecated rhel jsvc_path
   jsvc_path = "/usr/libexec/bigtop-utils"
 else:

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-ANY/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-ANY/scripts/params.py b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-ANY/scripts/params.py
index 5a069b9..012ed2c 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-ANY/scripts/params.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-ANY/scripts/params.py
@@ -18,6 +18,7 @@ limitations under the License.
 """
 
 from resource_management.libraries.functions.version import format_hdp_stack_version, compare_versions
+from ambari_commons.os_check import OSCheck
 from resource_management import *
 import collections
 import json
@@ -105,7 +106,7 @@ hdfs_log_dir_prefix = config['configurations']['hadoop-env']['hdfs_log_dir_prefi
 hadoop_pid_dir_prefix = config['configurations']['hadoop-env']['hadoop_pid_dir_prefix']
 hadoop_root_logger = config['configurations']['hadoop-env']['hadoop_root_logger']
 
-if hdp_stack_version != "" and compare_versions(hdp_stack_version, '2.0') >= 0 and compare_versions(hdp_stack_version, '2.1') < 0 and System.get_instance().os_family != "suse":
+if hdp_stack_version != "" and compare_versions(hdp_stack_version, '2.0') >= 0 and compare_versions(hdp_stack_version, '2.1') < 0 and not OSCheck.is_suse_family():
   # deprecated rhel jsvc_path
   jsvc_path = "/usr/libexec/bigtop-utils"
 else:

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-INSTALL/scripts/repo_initialization.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-INSTALL/scripts/repo_initialization.py b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-INSTALL/scripts/repo_initialization.py
index 87ce1f1..f040bcc 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-INSTALL/scripts/repo_initialization.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-INSTALL/scripts/repo_initialization.py
@@ -17,6 +17,7 @@ limitations under the License.
 
 """
 from resource_management import *
+from ambari_commons.os_check import OSCheck
 import json
 
 # components_lits = repoName + postfix
@@ -51,7 +52,7 @@ def _alter_repo(action, repo_string, repo_template):
 
 def install_repos():
   import params
-  template = "repo_suse_rhel.j2" if System.get_instance().os_family in ["suse", "redhat"] else "repo_ubuntu.j2"
+  template = "repo_suse_rhel.j2" if OSCheck.is_suse_family() or OSCheck.is_redhat_family() else "repo_ubuntu.j2"
   _alter_repo("create", params.repo_info, template)
   if params.service_repo_info:
     _alter_repo("create", params.service_repo_info, template)

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-START/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-START/scripts/params.py b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-START/scripts/params.py
index d39a2fc..0c18645 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-START/scripts/params.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/before-START/scripts/params.py
@@ -18,6 +18,7 @@ limitations under the License.
 """
 
 from resource_management.libraries.functions.version import format_hdp_stack_version, compare_versions
+from ambari_commons.os_check import OSCheck
 from resource_management import *
 from resource_management.core.system import System
 import os
@@ -132,7 +133,7 @@ else:
 #hadoop-env.sh
 java_home = config['hostLevelParams']['java_home']
 
-if hdp_stack_version != "" and compare_versions(hdp_stack_version, '2.0') >= 0 and compare_versions(hdp_stack_version, '2.1') < 0 and System.get_instance().os_family != "suse":
+if hdp_stack_version != "" and compare_versions(hdp_stack_version, '2.0') >= 0 and compare_versions(hdp_stack_version, '2.1') < 0 and not OSCheck.is_suse_family():
   # deprecated rhel jsvc_path
   jsvc_path = "/usr/libexec/bigtop-utils"
 else:

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/stacks/HDP/2.3/repos/repoinfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/repos/repoinfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/repos/repoinfo.xml
index 20c0ea3..a4c867a 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/repos/repoinfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/repos/repoinfo.xml
@@ -53,7 +53,7 @@
       <reponame>HDP-UTILS</reponame>
     </repo>
   </os>
-  <os family="ubuntu7">
+  <os family="debian7">
     <repo>
       <baseurl>http://s3.amazonaws.com/dev.hortonworks.com/HDP/debian6/2.x/updates/2.3.0.0</baseurl>
       <repoid>HDP-2.3</repoid>

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/stacks/HDP/2.3/services/ACCUMULO/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/services/ACCUMULO/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/services/ACCUMULO/metainfo.xml
index 91692f6..7d48b3e 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/services/ACCUMULO/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/ACCUMULO/metainfo.xml
@@ -31,7 +31,7 @@
           </packages>
         </osSpecific>
         <osSpecific>
-          <osFamily>ubuntu7,ubuntu12</osFamily>
+          <osFamily>debian7,ubuntu12</osFamily>
           <packages>
             <package>
               <name>accumulo-2-3-.*</name>

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/stacks/HDP/2.3/services/FALCON/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/services/FALCON/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/services/FALCON/metainfo.xml
index 017d494..02683e5 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/services/FALCON/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/FALCON/metainfo.xml
@@ -31,7 +31,7 @@
           </packages>
         </osSpecific>
         <osSpecific>
-          <osFamily>ubuntu7,ubuntu12</osFamily>
+          <osFamily>debian7,ubuntu12</osFamily>
           <packages>
             <package>
               <name>falcon-2-3-.*</name>

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/stacks/HDP/2.3/services/FLUME/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/services/FLUME/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/services/FLUME/metainfo.xml
index 1398ca5..af75fc5 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/services/FLUME/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/FLUME/metainfo.xml
@@ -32,7 +32,7 @@
           </packages>
         </osSpecific>
         <osSpecific>
-          <osFamily>ubuntu7,ubuntu12</osFamily>
+          <osFamily>debian7,ubuntu12</osFamily>
           <packages>
             <package>
               <name>flume-2-3-.*</name>

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/stacks/HDP/2.3/services/HBASE/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/services/HBASE/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/services/HBASE/metainfo.xml
index 3fe37bd..060721b 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/services/HBASE/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/HBASE/metainfo.xml
@@ -35,7 +35,7 @@
           </packages>
         </osSpecific>
         <osSpecific>
-          <osFamily>ubuntu7,ubuntu12</osFamily>
+          <osFamily>debian7,ubuntu12</osFamily>
           <packages>
             <package>
               <name>hbase-2-3-.*</name>

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/stacks/HDP/2.3/services/HDFS/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/services/HDFS/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/services/HDFS/metainfo.xml
index 2c8d8be..071ec91 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/services/HDFS/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/HDFS/metainfo.xml
@@ -51,7 +51,7 @@
         </osSpecific>
 
         <osSpecific>
-          <osFamily>ubuntu7,ubuntu12</osFamily>
+          <osFamily>debian7,ubuntu12</osFamily>
           <packages>
             <package>
               <name>hadoop-2-3-.*-client</name>

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/stacks/HDP/2.3/services/HIVE/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/services/HIVE/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/services/HIVE/metainfo.xml
index 2a32b0d..1e6bdfd 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/services/HIVE/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/HIVE/metainfo.xml
@@ -49,7 +49,7 @@
           </packages>
         </osSpecific>
         <osSpecific>
-          <osFamily>ubuntu7,ubuntu12</osFamily>
+          <osFamily>debian7,ubuntu12</osFamily>
           <packages>
             <package>
               <name>hive-2-3-.*</name>

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/stacks/HDP/2.3/services/KAFKA/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/services/KAFKA/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/services/KAFKA/metainfo.xml
index dad36ed..92c4da0 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/services/KAFKA/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/KAFKA/metainfo.xml
@@ -31,7 +31,7 @@
           </packages>
         </osSpecific>
         <osSpecific>
-          <osFamily>ubuntu7,ubuntu12</osFamily>
+          <osFamily>debian7,ubuntu12</osFamily>
           <packages>
             <package>
               <name>kafka-2-3-.*</name>

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/stacks/HDP/2.3/services/KNOX/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/services/KNOX/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/services/KNOX/metainfo.xml
index 1ab9c2f..8a3670b 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/services/KNOX/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/KNOX/metainfo.xml
@@ -31,7 +31,7 @@
           </packages>
         </osSpecific>
         <osSpecific>
-          <osFamily>ubuntu7,ubuntu12</osFamily>
+          <osFamily>debian7,ubuntu12</osFamily>
           <packages>
             <package>
               <name>knox-2-3-.*</name>

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/stacks/HDP/2.3/services/OOZIE/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/services/OOZIE/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/services/OOZIE/metainfo.xml
index e551b10..9b4d05c 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/services/OOZIE/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/OOZIE/metainfo.xml
@@ -48,7 +48,7 @@
           </packages>
         </osSpecific>
         <osSpecific>
-          <osFamily>ubuntu7,ubuntu12</osFamily>
+          <osFamily>debian7,ubuntu12</osFamily>
           <packages>
             <package>
               <name>oozie-2-3-.*</name>

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/stacks/HDP/2.3/services/PIG/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/services/PIG/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/services/PIG/metainfo.xml
index 38e3c80..ae5718f 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/services/PIG/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/PIG/metainfo.xml
@@ -39,7 +39,7 @@
           </packages>
         </osSpecific>
         <osSpecific>
-          <osFamily>ubuntu7,ubuntu12</osFamily>
+          <osFamily>debian7,ubuntu12</osFamily>
           <packages>
             <package>
               <name>pig-2-3-.*</name>

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/stacks/HDP/2.3/services/RANGER/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/services/RANGER/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/services/RANGER/metainfo.xml
index 7f98fb3..429270c 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/services/RANGER/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/RANGER/metainfo.xml
@@ -37,7 +37,7 @@
           </packages>
         </osSpecific>
         <osSpecific>
-          <osFamily>ubuntu7,ubuntu12</osFamily>
+          <osFamily>debian7,ubuntu12</osFamily>
           <packages>
             <package>
               <name>ranger-2-3-.*-admin</name>

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/stacks/HDP/2.3/services/SLIDER/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/services/SLIDER/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/services/SLIDER/metainfo.xml
index 10b78bc..4c33d52 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/services/SLIDER/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/SLIDER/metainfo.xml
@@ -34,7 +34,7 @@
           </packages>
         </osSpecific>
         <osSpecific>
-          <osFamily>ubuntu7,ubuntu12</osFamily>
+          <osFamily>debian7,ubuntu12</osFamily>
           <packages>
             <package>
               <name>slider-2-3-.*</name>

http://git-wip-us.apache.org/repos/asf/ambari/blob/36ac5782/ambari-server/src/main/resources/stacks/HDP/2.3/services/SPARK/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/services/SPARK/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/services/SPARK/metainfo.xml
index bb00924..a4b9ef4 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/services/SPARK/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/SPARK/metainfo.xml
@@ -37,7 +37,7 @@
               </packages>
             </osSpecific>
             <osSpecific>
-              <osFamily>ubuntu7,ubuntu12</osFamily>
+              <osFamily>debian7,ubuntu12</osFamily>
               <packages>
                 <package>
                   <name>spark-2-3-.*</name>