Repository: ambari
Updated Branches:
  refs/heads/trunk f65a5af6c -> 22c5e69d7


AMBARI-7998. Expose the ability to trigger all Host Checks on demand via API 
(Szilard Nemethy via ncole)


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

Branch: refs/heads/trunk
Commit: 22c5e69d752569e03b2e6ae03124471eca5b66a1
Parents: f65a5af
Author: Nate Cole <[email protected]>
Authored: Thu Oct 30 10:31:53 2014 -0400
Committer: Nate Cole <[email protected]>
Committed: Thu Oct 30 10:31:53 2014 -0400

----------------------------------------------------------------------
 .../main/resources/custom_actions/check_host.py | 21 +++++++-
 ambari-server/src/test/python/TestCheckHost.py  | 52 ++++++++++++++++++++
 .../custom_actions/check_last_agent_env.json    | 30 +++++++++++
 3 files changed, 102 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/22c5e69d/ambari-server/src/main/resources/custom_actions/check_host.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/custom_actions/check_host.py 
b/ambari-server/src/main/resources/custom_actions/check_host.py
index ddb1c59..898957d 100644
--- a/ambari-server/src/main/resources/custom_actions/check_host.py
+++ b/ambari-server/src/main/resources/custom_actions/check_host.py
@@ -25,10 +25,12 @@ import subprocess
 import socket
 
 from resource_management import Script, Execute, format
+from ambari_agent.HostInfo import HostInfo
 
 CHECK_JAVA_HOME = "java_home_check"
 CHECK_DB_CONNECTION = "db_connection_check"
 CHECK_HOST_RESOLUTION = "host_resolution_check"
+CHECK_LAST_AGENT_ENV = "last_agent_env_check"
 
 DB_MYSQL = "mysql"
 DB_ORACLE = "oracle"
@@ -72,12 +74,19 @@ class CheckHost(Script):
         structured_output[CHECK_DB_CONNECTION] = {"exit_code" : 1, "message": 
str(exception)}
 
     if CHECK_HOST_RESOLUTION in check_execute_list:
-      try : 
+      try :
         host_resolution_structured_output = 
self.execute_host_resolution_check(config)
         structured_output[CHECK_HOST_RESOLUTION] = 
host_resolution_structured_output
       except Exception, exception :
         print "There was an unknown error while checking IP address lookups: " 
+ str(exception)
         structured_output[CHECK_HOST_RESOLUTION] = {"exit_code" : 1, 
"message": str(exception)}
+    if CHECK_LAST_AGENT_ENV in check_execute_list:
+      try :
+        last_agent_env_structured_output = self.execute_last_agent_env_check()
+        structured_output[CHECK_LAST_AGENT_ENV] = 
last_agent_env_structured_output
+      except Exception, exception :
+        print "There was an unknown error while checking last host environment 
details: " + str(exception)
+        structured_output[CHECK_LAST_AGENT_ENV] = {"exit_code" : 1, "message": 
str(exception)}
 
     self.put_structured_out(structured_output)
 
@@ -268,5 +277,15 @@ class CheckHost(Script):
     
     return host_resolution_check_structured_output
 
+  # computes and returns the host information of the agent
+  def execute_last_agent_env_check(self):
+    print "Last Agent Env check started."
+    hostInfo = HostInfo()
+    last_agent_env_check_structured_output = { }
+    hostInfo.register(last_agent_env_check_structured_output)
+    print "Last Agent Env check completed successfully."
+
+    return last_agent_env_check_structured_output
+
 if __name__ == "__main__":
   CheckHost().execute()

http://git-wip-us.apache.org/repos/asf/ambari/blob/22c5e69d/ambari-server/src/test/python/TestCheckHost.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/TestCheckHost.py 
b/ambari-server/src/test/python/TestCheckHost.py
index 6a471ec..3cc590b 100644
--- a/ambari-server/src/test/python/TestCheckHost.py
+++ b/ambari-server/src/test/python/TestCheckHost.py
@@ -231,3 +231,55 @@ class TestCheckHost(TestCase):
     # ensure the correct function was called
     self.assertTrue(structured_out_mock.called)
     structured_out_mock.assert_called_with({})
+
+  @patch.object(Script, 'get_config')
+  @patch.object(Script, 'get_tmp_dir')
+  @patch('resource_management.libraries.script.Script.put_structured_out')
+  @patch('ambari_agent.HostInfo.HostInfo.javaProcs')
+  @patch('ambari_agent.HostInfo.HostInfo.checkLiveServices')
+  @patch('ambari_agent.HostInfo.HostInfo.getUMask')
+  @patch('ambari_agent.HostInfo.HostInfo.getTransparentHugePage')
+  @patch('ambari_agent.HostInfo.HostInfo.checkIptables')
+  @patch('ambari_agent.HostInfo.HostInfo.checkReverseLookup')
+  @patch('time.time')
+  def testLastAgentEnv(self, time_mock, checkReverseLookup_mock, 
checkIptables_mock, getTransparentHugePage_mock,
+                       getUMask_mock, checkLiveServices_mock, javaProcs_mock, 
put_structured_out_mock,
+                       get_tmp_dir_mock, get_config_mock):
+    jsonFilePath = os.path.join("../resources/custom_actions", 
"check_last_agent_env.json")
+    with open(jsonFilePath, "r") as jsonFile:
+      jsonPayload = json.load(jsonFile)
+
+    get_config_mock.return_value = ConfigDictionary(jsonPayload)
+    get_tmp_dir_mock.return_value = "/tmp"
+
+    checkHost = CheckHost()
+    checkHost.actionexecute(None)
+
+    # ensure the correct function was called
+    self.assertTrue(time_mock.called)
+    self.assertTrue(checkReverseLookup_mock.called)
+    self.assertTrue(checkIptables_mock.called)
+    self.assertTrue(getTransparentHugePage_mock.called)
+    self.assertTrue(getUMask_mock.called)
+    self.assertTrue(checkLiveServices_mock.called)
+    self.assertTrue(javaProcs_mock.called)
+    self.assertTrue(put_structured_out_mock.called)
+    # ensure the correct keys are in the result map
+    last_agent_env_check_result = put_structured_out_mock.call_args[0][0]
+    self.assertTrue('last_agent_env_check' in last_agent_env_check_result)
+    self.assertTrue('hostHealth' in 
last_agent_env_check_result['last_agent_env_check'])
+    self.assertTrue('iptablesIsRunning' in 
last_agent_env_check_result['last_agent_env_check'])
+    self.assertTrue('reverseLookup' in 
last_agent_env_check_result['last_agent_env_check'])
+    self.assertTrue('alternatives' in 
last_agent_env_check_result['last_agent_env_check'])
+    self.assertTrue('umask' in 
last_agent_env_check_result['last_agent_env_check'])
+    self.assertTrue('stackFoldersAndFiles' in 
last_agent_env_check_result['last_agent_env_check'])
+    self.assertTrue('existingRepos' in 
last_agent_env_check_result['last_agent_env_check'])
+    self.assertTrue('installedPackages' in 
last_agent_env_check_result['last_agent_env_check'])
+    self.assertTrue('existingUsers' in 
last_agent_env_check_result['last_agent_env_check'])
+
+    # try it now with errors
+    javaProcs_mock.side_effect = Exception("test exception")
+    checkHost.actionexecute(None)
+
+    #ensure the correct response is returned
+    put_structured_out_mock.assert_called_with({'last_agent_env_check': 
{'message': 'test exception', 'exit_code': 1}})
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/22c5e69d/ambari-server/src/test/resources/custom_actions/check_last_agent_env.json
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/resources/custom_actions/check_last_agent_env.json 
b/ambari-server/src/test/resources/custom_actions/check_last_agent_env.json
new file mode 100644
index 0000000..2b9db3e
--- /dev/null
+++ b/ambari-server/src/test/resources/custom_actions/check_last_agent_env.json
@@ -0,0 +1,30 @@
+{
+    "clusterName": "c1",
+    "configuration_attributes": {},
+    "roleParams": {
+        "threshold": "20",
+        "check_execute_list": "last_agent_env_check",
+        "jdk_location": "http://c6401.ambari.apache.org:8080/resources/";
+    },
+    "hostname": "c6402.ambari.apache.org",
+    "passiveInfo": [],
+    "hostLevelParams": {},
+    "commandType": "EXECUTION_COMMAND",
+    "roleCommand": "ACTIONEXECUTE",
+    "serviceName": "null",
+    "role": "check_host",
+    "forceRefreshConfigTags": [],
+    "taskId": 4,
+    "public_hostname": "c6402.ambari.apache.org",
+    "configurations": {},
+    "commandParams": {
+        "jdk_location": "http://c6401.ambari.apache.org:8080/resources/";,
+        "script": "check_host.py",
+        "check_execute_list": "last_agent_env_check",
+        "threshold": "20",
+        "command_timeout": "60",
+        "script_type": "PYTHON"
+    },
+    "commandId": "4-1",
+    "clusterHostInfo": {}
+}
\ No newline at end of file

Reply via email to