AMBARI-21755 Unexpected Package Names in CentOS Cause Installation Failures 
(dgrinenko)


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

Branch: refs/heads/feature-branch-AMBARI-21307
Commit: 6de8094a45c536340b56d73d4b0116c68349096c
Parents: d5904b9
Author: Dmytro Grinenko <hapyles...@apache.org>
Authored: Tue Aug 22 06:14:31 2017 +0300
Committer: Dmytro Grinenko <hapyles...@apache.org>
Committed: Tue Aug 22 06:14:31 2017 +0300

----------------------------------------------------------------------
 .../core/providers/package/__init__.py             | 17 ++++++++++-------
 .../python/custom_actions/TestInstallPackages.py   | 10 ++++++++++
 2 files changed, 20 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/6de8094a/ambari-common/src/main/python/resource_management/core/providers/package/__init__.py
----------------------------------------------------------------------
diff --git 
a/ambari-common/src/main/python/resource_management/core/providers/package/__init__.py
 
b/ambari-common/src/main/python/resource_management/core/providers/package/__init__.py
index 9793a84..9404757 100644
--- 
a/ambari-common/src/main/python/resource_management/core/providers/package/__init__.py
+++ 
b/ambari-common/src/main/python/resource_management/core/providers/package/__init__.py
@@ -23,9 +23,6 @@ Ambari Agent
 import time
 import re
 import logging
-import sys
-
-import subprocess
 
 from resource_management.core.exceptions import ExecutionFailed
 from resource_management.core.providers import Provider
@@ -344,6 +341,7 @@ class RPMBasedPackageProvider(PackageProvider):
   """
    RPM Based abstract package provider
   """
+  INSTALLED_PACKAGE_VERSION_COMMAND = "rpm -q --queryformat 
'%{{version}}-%{{release}}' \"{0}\""
 
   def rpm_check_package_available(self, name):
     import rpm # this is faster then calling 'rpm'-binary externally.
@@ -359,8 +357,13 @@ class RPMBasedPackageProvider(PackageProvider):
     return False
 
   def get_installed_package_version(self, package_name):
-    result = self.checked_call("rpm -q --queryformat 
'%{{version}}-%{{release}}' {0} | sed -e 
's/\.el[0-9]//g'".format(package_name), stderr=subprocess.PIPE)
-    if len(result) >= 2:
-      return result[1]
+    version = None
 
-    return None
+    result = 
self.checked_call(self.INSTALLED_PACKAGE_VERSION_COMMAND.format(package_name))
+    try:
+      if result[0] == 0:
+        version = result[1].strip().partition(".el")[0]
+    except IndexError:
+      pass
+
+    return version

http://git-wip-us.apache.org/repos/asf/ambari/blob/6de8094a/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 b31e2f5..de2cced 100644
--- a/ambari-server/src/test/python/custom_actions/TestInstallPackages.py
+++ b/ambari-server/src/test/python/custom_actions/TestInstallPackages.py
@@ -75,6 +75,16 @@ class TestInstallPackages(RMFTestCase):
   def _add_packages_lookUpYum(*args):
     return TestInstallPackages._add_packages_available(*args)
 
+  def test_get_installed_package_version(self):
+    from resource_management.core.providers.package.yumrpm import YumProvider
+
+    provider = YumProvider(None)
+    with patch.object(provider, "checked_call") as checked_call_mock:
+      checked_call_mock.return_value = 0, "3.1.0.0-54.el7.centos"
+      expected_version = provider.get_installed_package_version("test")
+      self.assertEquals("3.1.0.0-54", expected_version)
+
+
   
@patch("resource_management.libraries.functions.list_ambari_managed_repos.list_ambari_managed_repos")
   @patch("resource_management.core.providers.get_provider")
   @patch("resource_management.libraries.script.Script.put_structured_out")

Reply via email to