Преглед на файлове

AMBARI-13284. HostCleanup script does not work for hosts that are manually registered (aonishuk)

Andrew Onishuk преди 9 години
родител
ревизия
d2e11c8680
променени са 3 файла, в които са добавени 49 реда и са изтрити 1 реда
  1. 27 1
      ambari-agent/src/main/python/ambari_agent/HostCleanup.py
  2. 6 0
      ambari-server/src/main/resources/custom_actions/scripts/check_host.py
  3. 16 0
      nohup.out

+ 27 - 1
ambari-agent/src/main/python/ambari_agent/HostCleanup.py

@@ -34,7 +34,9 @@ import ConfigParser
 import optparse
 import shlex
 import datetime
+import tempfile
 from AmbariConfig import AmbariConfig
+from ambari_agent.Constants import AGENT_TMP_DIR
 from ambari_commons import OSCheck, OSConst
 from ambari_commons.constants import AMBARI_SUDO_BINARY
 from ambari_commons.os_family_impl import OsFamilyImpl, OsFamilyFuncImpl
@@ -46,6 +48,7 @@ GROUP_ERASE_CMD = "groupdel {0}"
 PROC_KILL_CMD = "kill -9 {0}"
 ALT_DISP_CMD = "alternatives --display {0}"
 ALT_ERASE_CMD = "alternatives --remove {0} {1}"
+RUN_HOST_CHECKS_CMD = '/var/lib/ambari-agent/cache/custom_actions/scripts/check_host.py ACTIONEXECUTE {0} /var/lib/ambari-agent/cache/custom_actions {1} INFO {2}'
 
 REPO_PATH_RHEL = "/etc/yum.repos.d"
 REPO_PATH_SUSE = "/etc/zypp/repos.d/"
@@ -492,6 +495,19 @@ class HostCleanup:
     (stdoutdata, stderrdata) = process.communicate()
     return process.returncode, stdoutdata, stderrdata
 
+  def run_check_hosts(self):
+    config_json = '{"commandParams": {"check_execute_list": "*BEFORE_CLEANUP_HOST_CHECKS*"}}'
+    with tempfile.NamedTemporaryFile(delete=False) as config_json_file:
+      config_json_file.write(config_json)
+
+    with tempfile.NamedTemporaryFile(delete=False) as tmp_output_file:
+      tmp_output_file.write('{}')
+
+    run_checks_command = RUN_HOST_CHECKS_CMD.format(config_json_file.name, tmp_output_file.name, AGENT_TMP_DIR)
+    (returncode, stdoutdata, stderrdata) = self.run_os_command(run_checks_command)
+    if returncode != 0:
+      logger.warn('Failed to run host checks,\nstderr:\n ' + stderrdata + '\n\nstdout:\n' + stdoutdata)
+
 # Copy file and save with file.# (timestamp)
 def backup_file(filePath):
   if filePath is not None and os.path.exists(filePath):
@@ -584,7 +600,17 @@ def main():
         sys.exit(1)
 
   hostcheckfile, hostcheckfileca  = options.inputfiles.split(",")
-  
+
+  # Manage non UI install
+  if not os.path.exists(hostcheckfileca):
+    if options.silent:
+      print 'Host Check results not found. There is no {0}. Running host checks.'.format(hostcheckfileca)
+      h.run_check_hosts()
+    else:
+      run_check_hosts_input = get_YN_input('Host Check results not found. There is no {0}. Do you want to run host checks [y/n] (y)'.format(hostcheckfileca), True)
+      if run_check_hosts_input:
+        h.run_check_hosts()
+
   with open(TMP_HOST_CHECK_FILE_NAME, "wb") as tmp_f:
     with open(hostcheckfile, "rb") as f1:
       with open(hostcheckfileca, "rb") as f2:

+ 6 - 0
ambari-server/src/main/resources/custom_actions/scripts/check_host.py

@@ -37,6 +37,8 @@ from resource_management.core.resources import Directory, File
 from ambari_commons.constants import AMBARI_SUDO_BINARY
 from resource_management.core import shell
 
+# WARNING. If you are adding a new host check that is used by cleanup, add it to BEFORE_CLEANUP_HOST_CHECKS
+# It is used by HostCleanup.py
 CHECK_JAVA_HOME = "java_home_check"
 CHECK_DB_CONNECTION = "db_connection_check"
 CHECK_HOST_RESOLUTION = "host_resolution_check"
@@ -45,6 +47,8 @@ CHECK_INSTALLED_PACKAGES = "installed_packages"
 CHECK_EXISTING_REPOS = "existing_repos"
 CHECK_TRANSPARENT_HUGE_PAGE = "transparentHugePage"
 
+BEFORE_CLEANUP_HOST_CHECKS = ','.join([CHECK_LAST_AGENT_ENV, CHECK_INSTALLED_PACKAGES, CHECK_EXISTING_REPOS, CHECK_TRANSPARENT_HUGE_PAGE])
+
 DB_MYSQL = "mysql"
 DB_ORACLE = "oracle"
 DB_POSTGRESQL = "postgres"
@@ -115,6 +119,8 @@ class CheckHost(Script):
     #print "CONFIG: " + str(config)
 
     check_execute_list = config['commandParams']['check_execute_list']
+    if check_execute_list == '*BEFORE_CLEANUP_HOST_CHECKS*':
+      check_execute_list = BEFORE_CLEANUP_HOST_CHECKS
     structured_output = {}
 
     # check each of the commands; if an unknown exception wasn't handled

+ 16 - 0
nohup.out

@@ -0,0 +1,16 @@
+[debug] execute contextualize
+[debug] execute contextualize
+[debug] execute contextualize
+[debug] execute contextualize
+[debug] execute contextualize
+[debug] execute contextualize
+[debug] execute contextualize
+[debug] execute contextualize
+[debug] execute contextualize
+[debug] execute contextualize
+[debug] execute contextualize
+[debug] execute contextualize
+[debug] execute contextualize
+[debug] execute contextualize
+[debug] execute contextualize
+[debug] execute contextualize