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