You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ds...@apache.org on 2015/01/26 15:21:11 UTC
ambari git commit: AMBARI-8462 Ambari agent should catch all
exceptions which raised during bootstrap agent process and traceback they
only if it "-v" was setup (dsen)
Repository: ambari
Updated Branches:
refs/heads/trunk 03456c57d -> 7552355ce
AMBARI-8462 Ambari agent should catch all exceptions which raised during bootstrap agent process and traceback they only if it "-v" was setup (dsen)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/7552355c
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/7552355c
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/7552355c
Branch: refs/heads/trunk
Commit: 7552355ce0223313e2bbc34a7c8b7d27786ec831
Parents: 03456c5
Author: Dmytro Sen <ds...@apache.org>
Authored: Mon Jan 26 15:36:31 2015 +0200
Committer: Dmytro Sen <ds...@apache.org>
Committed: Mon Jan 26 16:20:38 2015 +0200
----------------------------------------------------------------------
ambari-server/src/main/python/setupAgent.py | 43 ++++++++++++++------
ambari-server/src/test/python/TestSetupAgent.py | 24 +++++++++--
2 files changed, 51 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/7552355c/ambari-server/src/main/python/setupAgent.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/python/setupAgent.py b/ambari-server/src/main/python/setupAgent.py
index 69be139..8f9c48f 100755
--- a/ambari-server/src/main/python/setupAgent.py
+++ b/ambari-server/src/main/python/setupAgent.py
@@ -72,11 +72,13 @@ def configureAgent(server_hostname, user_run_as):
execOsCommand(osCommand)
return
-
-def runAgent(passPhrase, expected_hostname, user_run_as):
+def runAgent(passPhrase, expected_hostname, user_run_as, verbose):
os.environ[AMBARI_PASSPHRASE_VAR] = passPhrase
- agent_retcode = subprocess.call("su - %1s -c '/usr/sbin/ambari-agent restart --expected-hostname=%2s'" % (user_run_as, expected_hostname)
- , shell=True)
+ vo = ""
+ if verbose:
+ vo = " -v"
+ cmd = "su - {0} -c '/usr/sbin/ambari-agent restart --expected-hostname={1} {2}'".format(user_run_as, expected_hostname, vo)
+ agent_retcode = subprocess.call(cmd, shell=True)
for i in range(3):
time.sleep(1)
ret = execOsCommand(["tail", "-20", "/var/log/ambari-agent/ambari-agent.log"])
@@ -88,9 +90,15 @@ def runAgent(passPhrase, expected_hostname, user_run_as):
print log
return agent_retcode
return agent_retcode
-
+
def tryStopAgent():
+ verbose = False
+ cmds = ["bash", "-c", "ps aux | grep 'AmbariAgent.py' | grep ' \-v'"]
+ cmdl = ["bash", "-c", "ps aux | grep 'AmbariAgent.py' | grep ' \--verbose'"]
+ if execOsCommand(cmds)["exitstatus"] == 0 or execOsCommand(cmdl)["exitstatus"] == 0:
+ verbose = True
subprocess.call("/usr/sbin/ambari-agent stop", shell=True)
+ return verbose
def getOptimalVersion(initialProjectVersion):
optimalVersion = initialProjectVersion
@@ -202,20 +210,16 @@ def parseArguments(argv=None):
return expected_hostname, passPhrase, hostname, user_run_as, projectVersion, server_port
-def main(argv=None):
+def run_setup(argv=None):
# Parse passed arguments
expected_hostname, passPhrase, hostname,\
user_run_as, projectVersion, server_port = parseArguments(argv)
-
checkServerReachability(hostname, server_port)
if projectVersion == "null" or projectVersion == "{ambariVersion}" or projectVersion == "":
retcode = getOptimalVersion("")
else:
retcode = getOptimalVersion(projectVersion)
-
- tryStopAgent()
-
if retcode["exitstatus"] == 0 and retcode["log"] != None and retcode["log"] != "" and retcode["log"][0].strip() != "":
availiableProjectVersion = retcode["log"].strip()
if not isAgentPackageAlreadyInstalled(availiableProjectVersion):
@@ -228,10 +232,23 @@ def main(argv=None):
" Repository has following "
"versions of ambari-agent:"+retcode["log"][0].strip()})
else:
- sys.exit(retcode)
-
+ sys.exit(retcode)
+
configureAgent(hostname, user_run_as)
- sys.exit(runAgent(passPhrase, expected_hostname, user_run_as))
+ sys.exit(runAgent(passPhrase, expected_hostname, user_run_as, verbose))
+
+def main(argv=None):
+ #Try stop agent and check --verbose option if agent already run
+ global verbose
+ verbose = tryStopAgent()
+ if verbose:
+ run_setup(argv)
+ else:
+ try:
+ run_setup(argv)
+ except Exception, e:
+ print e
+ sys.exit(-1)
if __name__ == '__main__':
logging.basicConfig(level=logging.DEBUG)
http://git-wip-us.apache.org/repos/asf/ambari/blob/7552355c/ambari-server/src/test/python/TestSetupAgent.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/TestSetupAgent.py b/ambari-server/src/test/python/TestSetupAgent.py
index 8293fd0..249ce0b 100644
--- a/ambari-server/src/test/python/TestSetupAgent.py
+++ b/ambari-server/src/test/python/TestSetupAgent.py
@@ -62,25 +62,43 @@ class TestSetupAgent(TestCase):
call_mock.return_value = 0
execOsCommand_mock.return_value = {'log': 'log', 'exitstatus': 0}
# Test if expected_hostname is passed
- ret = setup_agent.runAgent(passphrase, expected_hostname, "root")
+ ret = setup_agent.runAgent(passphrase, expected_hostname, "root", False)
cmdStr = str(call_mock.call_args_list[0][0])
self.assertTrue(expected_hostname in cmdStr)
+ self.assertFalse('-v' in cmdStr)
self.assertEqual(ret, 0)
self.assertTrue(sleep_mock.called)
self.assertEqual(execOsCommand_mock.call_count, 1)
execOsCommand_mock.reset_mock()
+ call_mock.reset_mock()
+ sleep_mock.reset_mock()
+
+ # Test if verbose=True
+ ret = setup_agent.runAgent(passphrase, expected_hostname, "root", True)
+ self.assertTrue(expected_hostname in cmdStr)
+ cmdStr = str(call_mock.call_args_list[0][0])
+ self.assertTrue('-v' in cmdStr)
+ self.assertEqual(ret, 0)
+ self.assertTrue(sleep_mock.called)
+ self.assertEqual(execOsCommand_mock.call_count, 1)
+ execOsCommand_mock.reset_mock()
+ call_mock.reset_mock()
+ sleep_mock.reset_mock()
+
# Key 'log' not found
execOsCommand_mock.return_value = None
- ret = setup_agent.runAgent(passphrase, expected_hostname, "root")
+ ret = setup_agent.runAgent(passphrase, expected_hostname, "root", False)
cmdStr = str(call_mock.call_args_list[0][0])
self.assertTrue(expected_hostname in cmdStr)
self.assertEqual(ret, 0)
self.assertEqual(execOsCommand_mock.call_count, 3)
execOsCommand_mock.reset_mock()
+ call_mock.reset_mock()
+
# Retcode id not 0
call_mock.return_value = 2
execOsCommand_mock.return_value = {'log': 'log', 'exitstatus': 2}
- ret = setup_agent.runAgent(passphrase, expected_hostname, "root")
+ ret = setup_agent.runAgent(passphrase, expected_hostname, "root", False)
cmdStr = str(call_mock.call_args_list[0][0])
self.assertTrue(expected_hostname in cmdStr)
self.assertEqual(ret, 2)