You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by dm...@apache.org on 2013/08/14 21:23:46 UTC

git commit: AMBARI-2828 Add check for java exec - run the version command before we can start/stop/smoke services (Andrew Onischuk via dlysnichenko)

Updated Branches:
  refs/heads/trunk 1d93addee -> ad24d766d


AMBARI-2828 Add check for java exec - run the version command before we can start/stop/smoke services  (Andrew Onischuk via dlysnichenko)


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

Branch: refs/heads/trunk
Commit: ad24d766d2ec0804ab555a4dd63c27ea8ed01406
Parents: 1d93add
Author: Lisnichenko Dmitro <dl...@hortonworks.com>
Authored: Wed Aug 14 22:22:57 2013 +0300
Committer: Lisnichenko Dmitro <dl...@hortonworks.com>
Committed: Wed Aug 14 22:22:57 2013 +0300

----------------------------------------------------------------------
 .../main/python/ambari_agent/PuppetExecutor.py  | 14 ++++++-
 .../src/test/python/TestPuppetExecutor.py       | 40 ++++++++++++++++++--
 2 files changed, 50 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/ad24d766/ambari-agent/src/main/python/ambari_agent/PuppetExecutor.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/ambari_agent/PuppetExecutor.py b/ambari-agent/src/main/python/ambari_agent/PuppetExecutor.py
index 61390cd..4769b07 100644
--- a/ambari-agent/src/main/python/ambari_agent/PuppetExecutor.py
+++ b/ambari-agent/src/main/python/ambari_agent/PuppetExecutor.py
@@ -25,11 +25,13 @@ import pprint
 import threading
 from threading import Thread
 
+from shell import shellRunner
 from manifestGenerator import generateManifest
 from RepoInstaller import RepoInstaller
 from Grep import Grep
 import shell
 
+JAVANOTVALID_MSG = "Cannot access JDK! Make sure you have permission to execute {0}/bin/java"
 
 logger = logging.getLogger()
 
@@ -54,6 +56,7 @@ class PuppetExecutor:
     self.reposInstalled = False
     self.config = config
     self.modulesdir = self.puppetModule + "/modules"
+    self.sh = shellRunner()
 
   def configureEnviron(self, environ):
     if not self.config.has_option("puppet", "ruby_home"):
@@ -143,8 +146,17 @@ class PuppetExecutor:
 
     logger.info("ExitCode : "  + str(result["exitcode"]))
     return result
-
+  
+  def isJavaAvailable(self, command):
+    javaExecutablePath = "{0}/bin/java".format(command['configurations']['global']['java64_home'])
+    return not self.sh.run([javaExecutablePath, '-version'])['exitCode']
+    
   def runCommand(self, command, tmpoutfile, tmperrfile):
+    # After installing we must have jdk available for start/stop/smoke
+    if command['roleCommand']!="INSTALL" and not self.isJavaAvailable(command):
+      errMsg = JAVANOTVALID_MSG.format(command['configurations']['global']['java64_home'])
+      return {'stdout': '', 'stderr': errMsg, 'exitcode': 1}
+
     taskId = 0
     if command.has_key("taskId"):
       taskId = command['taskId']

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/ad24d766/ambari-agent/src/test/python/TestPuppetExecutor.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/TestPuppetExecutor.py b/ambari-agent/src/test/python/TestPuppetExecutor.py
index bc0d910..85e480e 100644
--- a/ambari-agent/src/test/python/TestPuppetExecutor.py
+++ b/ambari-agent/src/test/python/TestPuppetExecutor.py
@@ -30,6 +30,7 @@ import json
 from AmbariConfig import AmbariConfig
 from mock.mock import patch, MagicMock, call
 from threading import Thread
+from shell import shellRunner
 
 class TestPuppetExecutor(TestCase):
 
@@ -42,9 +43,22 @@ class TestPuppetExecutor(TestCase):
     self.assertEquals("--confdir=/tmp", command[2],"conf dir tmp")
     self.assertEquals("--detailed-exitcodes", command[3], "make sure output \
     correct")
-
+    
+  @patch.object(shellRunner,'run')
+  def test_isJavaAvailable(self, cmdrun_mock):
+    puppetInstance = PuppetExecutor("/tmp", "/x", "/y", '/tmpdir', None)
+    command = {'configurations':{'global':{'java64_home':'/usr/jdk/jdk123'}}}
+    
+    cmdrun_mock.return_value = {'exitCode': 1, 'output': 'Command not found', 'error': ''}
+    self.assertEquals(puppetInstance.isJavaAvailable(command), False)
+    
+    cmdrun_mock.return_value = {'exitCode': 0, 'output': 'OK', 'error': ''}
+    self.assertEquals(puppetInstance.isJavaAvailable(command), True)
+    
+    
+  @patch.object(PuppetExecutor, 'isJavaAvailable')
   @patch.object(PuppetExecutor, 'runPuppetFile')
-  def test_run_command(self, runPuppetFileMock):
+  def test_run_command(self, runPuppetFileMock, isJavaAvailableMock):
     tmpdir = AmbariConfig().getConfig().get("stack", "installprefix")
     puppetInstance = PuppetExecutor("/tmp", "/x", "/y", tmpdir, AmbariConfig().getConfig())
     jsonFile = open('../../main/python/ambari_agent/test.json', 'r')
@@ -55,6 +69,7 @@ class TestPuppetExecutor(TestCase):
         result["exitcode"] = 0
     runPuppetFileMock.side_effect = side_effect1
     puppetInstance.reposInstalled = False
+    isJavaAvailableMock.return_value = True
     res = puppetInstance.runCommand(parsedJson, tmpdir + '/out.txt', tmpdir + '/err.txt')
     self.assertEquals(res["exitcode"], 0)
     self.assertTrue(puppetInstance.reposInstalled)
@@ -63,14 +78,31 @@ class TestPuppetExecutor(TestCase):
         result["exitcode"] = 999
     runPuppetFileMock.side_effect = side_effect2
     puppetInstance.reposInstalled = False
+    isJavaAvailableMock.return_value = True
     res = puppetInstance.runCommand(parsedJson, tmpdir + '/out.txt', tmpdir + '/err.txt')
     self.assertEquals(res["exitcode"], 999)
     self.assertFalse(puppetInstance.reposInstalled)
     os.unlink(tmpdir + os.sep + 'site-' + str(parsedJson["taskId"]) + '.pp')
+    
+    def side_effect2(puppetFile, result, puppetEnv, tmpoutfile, tmperrfile):
+        result["exitcode"] = 0
+    runPuppetFileMock.side_effect = side_effect2
+    puppetInstance.reposInstalled = False
+    isJavaAvailableMock.return_value = False
+    parsedJson['roleCommand'] = "START"
+    parsedJson['configurations'] = {'global':{'java64_home':'/usr/jdk/jdk123'}}
+    res = puppetInstance.runCommand(parsedJson, tmpdir + '/out.txt', tmpdir + '/err.txt')
+    
+    JAVANOTVALID_MSG = "Cannot access JDK! Make sure you have permission to execute {0}/bin/java"
+    errMsg = JAVANOTVALID_MSG.format('/usr/jdk/jdk123')
+    self.assertEquals(res["exitcode"], 1)
+    self.assertEquals(res["stderr"], errMsg)
+    self.assertFalse(puppetInstance.reposInstalled)
 
+  @patch.object(PuppetExecutor, 'isJavaAvailable')
   @patch.object(RepoInstaller, 'generate_repo_manifests')
   @patch.object(PuppetExecutor, 'runPuppetFile')
-  def test_overwrite_repos(self, runPuppetFileMock, generateRepoManifestMock):
+  def test_overwrite_repos(self, runPuppetFileMock, generateRepoManifestMock, isJavaAvailableMock):
     tmpdir = AmbariConfig().getConfig().get("stack", "installprefix")
     puppetInstance = PuppetExecutor("/tmp", "/x", "/y", tmpdir, AmbariConfig().getConfig())
     jsonFile = open('../../main/python/ambari_agent/test.json', 'r')
@@ -80,6 +112,8 @@ class TestPuppetExecutor(TestCase):
     def side_effect(puppetFile, result, puppetEnv, tmpoutfile, tmperrfile):
       result["exitcode"] = 0
     runPuppetFileMock.side_effect = side_effect
+    
+    isJavaAvailableMock.return_value = True
 
     #If ambari-agent has been just started and no any commands were executed by
     # PuppetExecutor.runCommand, then no repo files were updated by