Просмотр исходного кода

AMBARI-7724 Use versioned packages for Ubuntu for HDP 2.2 stack (dsen)

Dmytro Sen 10 лет назад
Родитель
Сommit
8ff254b4dc

+ 15 - 5
ambari-agent/src/test/python/resource_management/TestPackageResource.py

@@ -24,6 +24,7 @@ from resource_management.core.system import System
 from resource_management.core.resources import Package
 from resource_management.core.resources import Package
 
 
 from resource_management.core import shell
 from resource_management.core import shell
+from resource_management.core.providers.package.apt import replace_underscores
 
 
 class TestPackageResource(TestCase):
 class TestPackageResource(TestCase):
   @patch.object(shell, "call")
   @patch.object(shell, "call")
@@ -34,13 +35,13 @@ class TestPackageResource(TestCase):
     with Environment('/') as env:
     with Environment('/') as env:
       Package("some_package",
       Package("some_package",
       )
       )
-    call_mock.assert_has_calls([call("dpkg --get-selections some_package | grep -v deinstall"),
+    call_mock.assert_has_calls([call("dpkg --get-selections some-package | grep -v deinstall"),
                                 call("DEBIAN_FRONTEND=noninteractive /usr/bin/apt-get -q -o Dpkg::Options::='--force-confdef'"
                                 call("DEBIAN_FRONTEND=noninteractive /usr/bin/apt-get -q -o Dpkg::Options::='--force-confdef'"
-                                      " --allow-unauthenticated --assume-yes install some_package"),
+                                      " --allow-unauthenticated --assume-yes install some-package"),
                                 call("apt-get update -qq")
                                 call("apt-get update -qq")
                               ])
                               ])
     
     
-    shell_mock.assert_has_calls([call("DEBIAN_FRONTEND=noninteractive /usr/bin/apt-get -q -o Dpkg::Options::='--force-confdef' --allow-unauthenticated --assume-yes install some_package")
+    shell_mock.assert_has_calls([call("DEBIAN_FRONTEND=noninteractive /usr/bin/apt-get -q -o Dpkg::Options::='--force-confdef' --allow-unauthenticated --assume-yes install some-package")
                               ])
                               ])
   
   
   @patch.object(shell, "call")
   @patch.object(shell, "call")
@@ -51,9 +52,9 @@ class TestPackageResource(TestCase):
     with Environment('/') as env:
     with Environment('/') as env:
       Package("some_package",
       Package("some_package",
       )
       )
-    call_mock.assert_has_calls([call("dpkg --get-selections some_package | grep -v deinstall"),
+    call_mock.assert_has_calls([call("dpkg --get-selections some-package | grep -v deinstall"),
                                 call("DEBIAN_FRONTEND=noninteractive /usr/bin/apt-get -q -o Dpkg::Options::='--force-confdef'"
                                 call("DEBIAN_FRONTEND=noninteractive /usr/bin/apt-get -q -o Dpkg::Options::='--force-confdef'"
-                                      " --allow-unauthenticated --assume-yes install some_package")
+                                      " --allow-unauthenticated --assume-yes install some-package")
                               ])
                               ])
     
     
     self.assertEqual(shell_mock.call_count, 0, "shell.checked_call shouldn't be called")
     self.assertEqual(shell_mock.call_count, 0, "shell.checked_call shouldn't be called")
@@ -129,3 +130,12 @@ class TestPackageResource(TestCase):
               version = "3.5.0"
               version = "3.5.0"
       )
       )
     shell_mock.assert_called_with("/usr/bin/yum -d 0 -e 0 -y install some_package-3.5.0")
     shell_mock.assert_called_with("/usr/bin/yum -d 0 -e 0 -y install some_package-3.5.0")
+
+  @replace_underscores
+  def func_to_test(self, name):
+    return name
+
+  def testReplaceUnderscore(self):
+    self.assertEqual("-", self.func_to_test("_"))
+    self.assertEqual("hadoop-x-x-x-*", self.func_to_test("hadoop_x_x_x-*"))
+    self.assertEqual("hadoop", self.func_to_test("hadoop"))

+ 12 - 0
ambari-common/src/main/python/resource_management/core/providers/package/apt.py

@@ -28,7 +28,16 @@ REPO_UPDATE_CMD = "apt-get update -qq"
 REMOVE_CMD = "/usr/bin/apt-get -y -q remove %s"
 REMOVE_CMD = "/usr/bin/apt-get -y -q remove %s"
 CHECK_CMD = "dpkg --get-selections %s | grep -v deinstall"
 CHECK_CMD = "dpkg --get-selections %s | grep -v deinstall"
 
 
+def replace_underscores(function_to_decorate):
+  def wrapper(*args):
+    self = args[0]
+    name = args[1].replace("_", "-")
+    return function_to_decorate(self, name)
+  return wrapper
+
 class AptProvider(PackageProvider):
 class AptProvider(PackageProvider):
+
+  @replace_underscores
   def install_package(self, name):
   def install_package(self, name):
     if not self._check_existence(name):
     if not self._check_existence(name):
       cmd = INSTALL_CMD % (name)
       cmd = INSTALL_CMD % (name)
@@ -49,9 +58,11 @@ class AptProvider(PackageProvider):
     else:
     else:
       Logger.info("Skipping installing existent package %s" % (name))
       Logger.info("Skipping installing existent package %s" % (name))
 
 
+  @replace_underscores
   def upgrade_package(self, name):
   def upgrade_package(self, name):
     return self.install_package(name)
     return self.install_package(name)
 
 
+  @replace_underscores
   def remove_package(self, name):
   def remove_package(self, name):
     if self._check_existence(name):
     if self._check_existence(name):
       cmd = REMOVE_CMD % (name)
       cmd = REMOVE_CMD % (name)
@@ -60,6 +71,7 @@ class AptProvider(PackageProvider):
     else:
     else:
       Logger.info("Skipping removing non-existent package %s" % (name))
       Logger.info("Skipping removing non-existent package %s" % (name))
 
 
+  @replace_underscores
   def _check_existence(self, name):
   def _check_existence(self, name):
     code, out = shell.call(CHECK_CMD % name)
     code, out = shell.call(CHECK_CMD % name)
     return not bool(code)
     return not bool(code)

+ 2 - 2
ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/after-INSTALL/scripts/shared_initialization.py

@@ -22,7 +22,7 @@ from resource_management import *
 def setup_hdp_install_directory():
 def setup_hdp_install_directory():
   import params
   import params
   if params.rpm_version:
   if params.rpm_version:
-    Execute(format('hdp-select set all `hdp-select versions | grep ^{rpm_version}- | tail -1`')
+    Execute(format('ambari-python-wrap /usr/bin/hdp-select set all `ambari-python-wrap /usr/bin/hdp-select versions | grep ^{rpm_version}- | tail -1`')
     )
     )
 
 
 def setup_config():
 def setup_config():
@@ -34,4 +34,4 @@ def setup_config():
               configuration_attributes=params.config['configuration_attributes']['core-site'],
               configuration_attributes=params.config['configuration_attributes']['core-site'],
               owner=params.hdfs_user,
               owner=params.hdfs_user,
               group=params.user_group
               group=params.user_group
-    )
+    )