Repository: ambari
Updated Branches:
  refs/heads/trunk 58347de3d -> c84c7a14e


AMBARI-6666. Ambari deployment, Ganglia installation failed in Ubuntu12 
(aonishuk)


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

Branch: refs/heads/trunk
Commit: c84c7a14e1d4df417524574cbe23b8cb95824290
Parents: 58347de
Author: Andrew Onishuk <aonis...@hortonworks.com>
Authored: Wed Jul 30 01:10:04 2014 +0300
Committer: Andrew Onishuk <aonis...@hortonworks.com>
Committed: Wed Jul 30 01:10:04 2014 +0300

----------------------------------------------------------------------
 .../core/providers/package/apt.py               | 12 ++++++--
 .../resource_management/TestPackageResource.py  | 31 ++++++++++++++++----
 2 files changed, 36 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/c84c7a14/ambari-agent/src/main/python/resource_management/core/providers/package/apt.py
----------------------------------------------------------------------
diff --git 
a/ambari-agent/src/main/python/resource_management/core/providers/package/apt.py
 
b/ambari-agent/src/main/python/resource_management/core/providers/package/apt.py
index 03d27df..4c6e2dd 100644
--- 
a/ambari-agent/src/main/python/resource_management/core/providers/package/apt.py
+++ 
b/ambari-agent/src/main/python/resource_management/core/providers/package/apt.py
@@ -23,7 +23,8 @@ from resource_management.core.providers.package import 
PackageProvider
 from resource_management.core import shell
 from resource_management.core.logger import Logger
 
-INSTALL_CMD = "env DEBIAN_FRONTEND=noninteractive /usr/bin/apt-get -q -o 
Dpkg::Options::='--force-confdef' --allow-unauthenticated --assume-yes install 
%s"
+INSTALL_CMD = "DEBIAN_FRONTEND=noninteractive /usr/bin/apt-get -q -o 
Dpkg::Options::='--force-confdef' --allow-unauthenticated --assume-yes install 
%s"
+REPO_UPDATE_CMD = "apt-get update -qq"
 REMOVE_CMD = "/usr/bin/apt-get -y -q remove %s"
 CHECK_CMD = "dpkg --get-selections %s | grep -v deinstall"
 
@@ -32,7 +33,14 @@ class AptProvider(PackageProvider):
     if not self._check_existence(name):
       cmd = INSTALL_CMD % (name)
       Logger.info("Installing package %s ('%s')" % (name, cmd))
-      shell.checked_call(cmd)
+      code = shell.call(cmd)[0]
+      
+      # apt-get update wasn't done too long
+      if code:
+        Logger.info("Failed to install package %s. Executing `apt-get update`" 
% (name))
+        shell.checked_call(REPO_UPDATE_CMD)
+        Logger.info("Retrying to install package %s" % (name))
+        shell.checked_call(cmd)
     else:
       Logger.info("Skipping installing existent package %s" % (name))
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/c84c7a14/ambari-agent/src/test/python/resource_management/TestPackageResource.py
----------------------------------------------------------------------
diff --git 
a/ambari-agent/src/test/python/resource_management/TestPackageResource.py 
b/ambari-agent/src/test/python/resource_management/TestPackageResource.py
index 08c7ac3..d36c543 100644
--- a/ambari-agent/src/test/python/resource_management/TestPackageResource.py
+++ b/ambari-agent/src/test/python/resource_management/TestPackageResource.py
@@ -17,7 +17,7 @@ limitations under the License.
 '''
 
 from unittest import TestCase
-from mock.mock import patch, MagicMock
+from mock.mock import patch, MagicMock, call
 
 from resource_management.core import Environment, Fail
 from resource_management.core.system import System
@@ -26,17 +26,38 @@ from resource_management.core.resources import Package
 from resource_management.core import shell
 
 class TestPackageResource(TestCase):
-
   @patch.object(shell, "call")
   @patch.object(shell, "checked_call")
   @patch.object(System, "os_family", new = 'debian')
-  def test_action_install_debian(self, shell_mock, call_mock):
+  def test_action_install_debian_update(self, shell_mock, call_mock):
     call_mock.return_value= (1, None)
     with Environment('/') as env:
       Package("some_package",
       )
-    call_mock.assert_called_with('dpkg --get-selections some_package | grep -v 
deinstall')
-    shell_mock.assert_called_with("env DEBIAN_FRONTEND=noninteractive 
/usr/bin/apt-get -q -o Dpkg::Options::='--force-confdef' 
--allow-unauthenticated --assume-yes install some_package")
+    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'"
+                                      " --allow-unauthenticated --assume-yes 
install some_package")
+                              ])
+    
+    shell_mock.assert_has_calls([call("apt-get update -qq"),
+                                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, "checked_call")
+  @patch.object(System, "os_family", new = 'debian')
+  def test_action_install_debian(self, shell_mock, call_mock):
+    call_mock.side_effect = [(1, None), (0, None)]
+    with Environment('/') as env:
+      Package("some_package",
+      )
+    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'"
+                                      " --allow-unauthenticated --assume-yes 
install some_package")
+                              ])
+    
+    self.assertEqual(shell_mock.call_count, 0, "shell.checked_call shouldn't 
be called")
+
 
 
   @patch.object(shell, "call")

Reply via email to