You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by fb...@apache.org on 2015/01/24 10:39:04 UTC
[5/5] ambari git commit: AMBARI-8317 AMBARI-8317 Refactor the
OS-dependent Ambari Server Windows components - Part 2
AMBARI-8317 AMBARI-8317 Refactor the OS-dependent Ambari Server Windows components - Part 2
+Moved LDAP and HTTPS setup routines away from ambari-server.py
+Merged ambari-server-windows.py into ambari-server.py, leaving out only the Windows service wrapper and the server start routine
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/244f1879
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/244f1879
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/244f1879
Branch: refs/heads/trunk
Commit: 244f1879eb70a63a0846352b305b4c2d21e96895
Parents: 85f61a7
Author: Florian Barca <fb...@hortonworks.com>
Authored: Sat Jan 24 01:38:45 2015 -0800
Committer: Florian Barca <fb...@hortonworks.com>
Committed: Sat Jan 24 01:38:45 2015 -0800
----------------------------------------------------------------------
ambari-server/pom.xml | 3 +
.../src/main/assemblies/server-windows.xml | 10 +-
.../src/main/python/ambari-server-windows.py | 559 -----
ambari-server/src/main/python/ambari-server.py | 1921 ++++--------------
.../python/ambari_server/dbConfiguration.py | 32 +-
.../ambari_server/dbConfiguration_linux.py | 18 +-
.../ambari_server/dbConfiguration_windows.py | 24 +-
.../python/ambari_server/serverConfiguration.py | 115 +-
.../main/python/ambari_server/serverSetup.py | 55 +-
.../main/python/ambari_server/serverUpgrade.py | 21 +-
.../main/python/ambari_server/serverUtils.py | 92 +
.../main/python/ambari_server/setupActions.py | 3 -
.../src/main/python/ambari_server/setupHttps.py | 504 +++++
.../main/python/ambari_server/setupSecurity.py | 879 +++-----
.../src/main/python/ambari_server/userInput.py | 33 +
.../src/main/python/ambari_server_main.py | 361 ++++
.../src/main/python/ambari_windows_service.py | 100 +
.../src/main/windows/ambari-server.ps1 | 2 +-
.../src/test/python/TestAmbariServer.py | 1208 ++++++-----
19 files changed, 2561 insertions(+), 3379 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/244f1879/ambari-server/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-server/pom.xml b/ambari-server/pom.xml
index e01375f..9d8c88b 100644
--- a/ambari-server/pom.xml
+++ b/ambari-server/pom.xml
@@ -350,6 +350,9 @@
<location>src/main/python/ambari-server.py</location>
</source>
<source>
+ <location>src/main/python/ambari_server_main.py</location>
+ </source>
+ <source>
<location>sbin/ambari-server</location>
<filter>true</filter>
</source>
http://git-wip-us.apache.org/repos/asf/ambari/blob/244f1879/ambari-server/src/main/assemblies/server-windows.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/assemblies/server-windows.xml b/ambari-server/src/main/assemblies/server-windows.xml
index 68e3a4e..d3fa7cb 100644
--- a/ambari-server/src/main/assemblies/server-windows.xml
+++ b/ambari-server/src/main/assemblies/server-windows.xml
@@ -44,7 +44,15 @@
<outputDirectory>/ambari-server-${project.version}/keystore</outputDirectory>
</file>
<file>
- <source>${basedir}/src/main/python/ambari-server-windows.py</source>
+ <source>${basedir}/src/main/python/ambari-server.py</source>
+ <outputDirectory>/ambari-server-${project.version}/sbin</outputDirectory>
+ </file>
+ <file>
+ <source>${basedir}/src/main/python/ambari_server_main.py</source>
+ <outputDirectory>/ambari-server-${project.version}/sbin</outputDirectory>
+ </file>
+ <file>
+ <source>${basedir}/src/main/python/ambari_windows_service.py</source>
<outputDirectory>/ambari-server-${project.version}/sbin</outputDirectory>
</file>
<file>
http://git-wip-us.apache.org/repos/asf/ambari/blob/244f1879/ambari-server/src/main/python/ambari-server-windows.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/python/ambari-server-windows.py b/ambari-server/src/main/python/ambari-server-windows.py
deleted file mode 100644
index b4d4878..0000000
--- a/ambari-server/src/main/python/ambari-server-windows.py
+++ /dev/null
@@ -1,559 +0,0 @@
-#!/usr/bin/env python
-
-'''
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements. See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership. The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-'''
-
-import optparse
-import os
-import sys
-import subprocess
-
-from ambari_commons.ambari_service import AmbariService
-from ambari_commons.exceptions import FatalException, NonFatalException
-from ambari_commons.logging_utils import print_info_msg, print_warning_msg, print_error_msg, \
- get_verbose, set_verbose, get_silent, set_silent, get_debug_mode, set_debug_mode_from_options
-from ambari_commons.os_utils import remove_file, set_open_files_limit
-from ambari_commons.os_windows import SvcStatusCallback
-
-from ambari_server import utils
-from ambari_server.dbConfiguration import DBMSConfigFactory
-from ambari_server.resourceFilesKeeper import ResourceFilesKeeper, KeeperException
-from ambari_server.serverConfiguration import find_jdk, get_ambari_classpath, get_ambari_properties, get_conf_dir, \
- get_value_from_properties, configDefaults, DEBUG_MODE_KEY, RESOURCES_DIR_DEFAULT, RESOURCES_DIR_PROPERTY, \
- SERVER_OUT_FILE_KEY, SERVICE_PASSWORD_KEY, SERVICE_USERNAME_KEY, \
- SUSPEND_START_MODE_KEY, VERBOSE_OUTPUT_KEY, PID_NAME, get_java_exe_path
-from ambari_server.serverSetup import setup, reset, is_server_running
-from ambari_server.serverUpgrade import upgrade
-from ambari_server.setupActions import SETUP_ACTION, START_ACTION, PSTART_ACTION, STOP_ACTION, RESET_ACTION, \
- STATUS_ACTION, UPGRADE_ACTION, UPGRADE_STACK_ACTION, LDAP_SETUP_ACTION, SETUP_SECURITY_ACTION, ACTION_REQUIRE_RESTART
-from ambari_server.setupSecurity import setup_ambari_krb5_jaas, setup_https, setup_ldap, setup_master_key
-from ambari_server.userInput import get_validated_string_input
-
-# debug settings
-
-SERVER_START_DEBUG = False
-SUSPEND_START_MODE = False
-
-# server commands
-ambari_provider_module_option = ""
-ambari_provider_module = os.environ.get('AMBARI_PROVIDER_MODULE')
-
-AMBARI_SERVER_DIE_MSG = "Ambari Server java process died with exitcode {0}. Check {1} for more information."
-
-if ambari_provider_module is not None:
- ambari_provider_module_option = "-Dprovider.module.class=" +\
- ambari_provider_module + " "
-
-SERVER_START_CMD = \
- "-server -XX:NewRatio=3 "\
- "-XX:+UseConcMarkSweepGC " +\
- "-XX:-UseGCOverheadLimit -XX:CMSInitiatingOccupancyFraction=60 " +\
- ambari_provider_module_option +\
- os.getenv('AMBARI_JVM_ARGS', '-Xms512m -Xmx2048m') +\
- " -cp {0}" +\
- " org.apache.ambari.server.controller.AmbariServer"
-SERVER_START_CMD_DEBUG = \
- "-server -XX:NewRatio=2 -XX:+UseConcMarkSweepGC " +\
- ambari_provider_module_option +\
- os.getenv('AMBARI_JVM_ARGS', '-Xms512m -Xmx2048m') +\
- " -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,"\
- "server=y,suspend={1} -cp {0}" +\
- " org.apache.ambari.server.controller.AmbariServer"
-
-SERVER_INIT_TIMEOUT = 5
-SERVER_START_TIMEOUT = 10
-
-EXITCODE_NAME = "ambari-server.exitcode"
-
-# linux open-file limit
-ULIMIT_OPEN_FILES_KEY = 'ulimit.open.files'
-ULIMIT_OPEN_FILES_DEFAULT = 10000
-
-
-class AmbariServerService(AmbariService):
- AmbariService._svc_name_ = "Ambari Server"
- AmbariService._svc_display_name_ = "Ambari Server"
- AmbariService._svc_description_ = "Ambari Server"
-
- AmbariService._AdjustServiceVersion()
-
- # Adds the necessary script dir to the Python's modules path
- def _adjustPythonPath(self, current_dir):
- python_path = os.path.join(current_dir, "sbin")
- sys.path.insert(0, python_path)
-
- def SvcDoRun(self):
- scmStatus = SvcStatusCallback(self)
-
- properties = get_ambari_properties()
- self.options.verbose = get_value_from_properties(properties, VERBOSE_OUTPUT_KEY, self.options.verbose)
- self.options.debug = get_value_from_properties(properties, DEBUG_MODE_KEY, self.options.debug)
- self.options.suspend_start = get_value_from_properties(properties, SUSPEND_START_MODE_KEY, self.options.suspend_start)
-
- # set verbose
- set_verbose(self.options.verbose)
-
- # set silent
- set_silent(self.options.silent)
-
- self.redirect_output_streams()
-
- childProc = server_process_main(self.options, scmStatus)
-
- if not self._StopOrWaitForChildProcessToFinish(childProc):
- return
-
- pid_file_path = os.path.join(configDefaults.PID_DIR, PID_NAME)
- remove_file(pid_file_path)
- pass
-
- def _InitOptionsParser(self):
- return init_options_parser()
-
- def redirect_output_streams(self):
- properties = get_ambari_properties()
-
- outFilePath = properties[SERVER_OUT_FILE_KEY]
- if (outFilePath is None or outFilePath == ""):
- outFilePath = configDefaults.SERVER_OUT_FILE
-
- self._RedirectOutputStreamsToFile(outFilePath)
- pass
-
-def ctrlHandler(ctrlType):
- AmbariServerService.DefCtrlCHandler()
- return True
-
-def svcsetup():
- AmbariServerService.set_ctrl_c_handler(ctrlHandler)
- # we don't save password between 'setup' runs, so we can't run Install every time. We run 'setup' only if user and
- # password provided or if service not installed
- if (SERVICE_USERNAME_KEY in os.environ and SERVICE_PASSWORD_KEY in os.environ):
- AmbariServerService.Install(username=os.environ[SERVICE_USERNAME_KEY], password=os.environ[SERVICE_PASSWORD_KEY])
- elif AmbariServerService.QueryStatus() == "not installed":
- AmbariServerService.Install()
- pass
-
-#
-# Starts the Ambari Server as a standalone process.
-# args:
-# <no arguments> = start the server as a process. For now, there is no restrictions for the number of server instances
-# that can run like this.
-# -s, --single-instance = Reserved for future use. When starting the server as a process, ensure only one instance of the process is running.
-# If this is the second instance of the process, the function fails.
-#
-def start(options):
- AmbariServerService.set_ctrl_c_handler(ctrlHandler)
-
- #Run as a normal process. Invoke the ServiceMain directly.
- childProc = server_process_main(options)
-
- childProc.wait()
-
- pid_file_path = os.path.join(configDefaults.PID_DIR, PID_NAME)
- remove_file(pid_file_path)
-
-#
-# Starts the Ambari Server as a service.
-# Start the server in normal mode, as a Windows service. If the Ambari server is
-# not registered as a service, the function fails. By default, only one instance of the service can
-# possibly run.
-#
-def svcstart():
- AmbariServerService.Start()
- pass
-
-def server_process_main(options, scmStatus=None):
- # debug mode, including stop Java process at startup
- try:
- set_debug_mode_from_options(options)
- except AttributeError:
- pass
-
- if not utils.check_reverse_lookup():
- print_warning_msg("The hostname was not found in the reverse DNS lookup. "
- "This may result in incorrect behavior. "
- "Please check the DNS setup and fix the issue.")
-
- properties = get_ambari_properties()
-
- print_info_msg("Ambari Server is not running...")
-
- conf_dir = get_conf_dir()
- jdk_path = find_jdk()
- if jdk_path is None:
- err = "No JDK found, please run the \"ambari-server setup\" " \
- "command to install a JDK automatically or install any " \
- "JDK manually to " + configDefaults.JDK_INSTALL_DIR
- raise FatalException(1, err)
-
- # Preparations
-
- result = ensure_dbms_is_running(options, properties, scmStatus)
- if result == -1:
- raise FatalException(-1, "Unable to connect to the database")
-
- if scmStatus is not None:
- scmStatus.reportStartPending()
-
- ensure_resources_are_organized(properties)
-
- if scmStatus is not None:
- scmStatus.reportStartPending()
-
- environ = os.environ.copy()
- ensure_server_security_is_configured(properties, environ)
-
- if scmStatus is not None:
- scmStatus.reportStartPending()
-
- conf_dir = os.path.abspath(conf_dir) + os.pathsep + get_ambari_classpath()
- if conf_dir.find(' ') != -1:
- conf_dir = '"' + conf_dir + '"'
-
- java_exe = get_java_exe_path()
- pidfile = os.path.join(configDefaults.PID_DIR, PID_NAME)
-
- debug_mode = get_debug_mode()
- debug_start = (debug_mode & 1) or SERVER_START_DEBUG
- suspend_start = (debug_mode & 2) or SUSPEND_START_MODE
-
- command_base = SERVER_START_CMD_DEBUG if debug_start else SERVER_START_CMD
- suspend_mode = 'y' if suspend_start else 'n'
- command = command_base.format(conf_dir, suspend_mode)
- if not os.path.exists(configDefaults.PID_DIR):
- os.makedirs(configDefaults.PID_DIR, 0755)
-
- set_open_files_limit(get_ulimit_open_files());
-
- #Ignore the requirement to run as root. In Windows, by default the child process inherits the security context
- # and the environment from the parent process.
- param_list = java_exe + " " + command
-
- print_info_msg("Running server: " + str(param_list))
- procJava = subprocess.Popen(param_list, env=environ)
-
- #wait for server process for SERVER_START_TIMEOUT seconds
- print "Waiting for server start..."
-
- pidJava = procJava.pid
- if pidJava <= 0:
- procJava.terminate()
- exitcode = procJava.returncode
- exitfile = os.path.join(configDefaults.PID_DIR, EXITCODE_NAME)
- utils.save_pid(exitcode, exitfile)
-
- if scmStatus is not None:
- scmStatus.reportStopPending()
-
- raise FatalException(-1, AMBARI_SERVER_DIE_MSG.format(exitcode, configDefaults.SERVER_OUT_FILE))
- else:
- utils.save_pid(pidJava, pidfile)
- print "Server PID at: "+pidfile
- print "Server out at: "+configDefaults.SERVER_OUT_FILE
- print "Server log at: "+configDefaults.SERVER_LOG_FILE
-
- if scmStatus is not None:
- scmStatus.reportStarted()
-
- return procJava
-
-#Check the JDBC driver status
-#If not found abort
-#Get SQL Server service status from SCM
-#If 'stopped' then start it
-#Wait until the status is 'started' or a configured timeout elapses
-#If the timeout has been reached, bail out with exception
-def ensure_dbms_is_running(options, properties, scmStatus):
- factory = DBMSConfigFactory()
- dbms = factory.create(options, properties, "Ambari")
- if not dbms._is_jdbc_driver_installed(properties):
- raise FatalException(-1, "JDBC driver is not installed. Run ambari-server setup and try again.")
-
- dbms.ensure_dbms_is_running(options, properties, scmStatus)
-
-def ensure_resources_are_organized(properties):
- resources_location = get_resources_location(properties)
- resource_files_keeper = ResourceFilesKeeper(resources_location)
- try:
- print "Organizing resource files at {0}...".format(resources_location,
- verbose=get_verbose())
- resource_files_keeper.perform_housekeeping()
- except KeeperException, ex:
- msg = "Can not organize resource files at {0}: {1}".format(
- resources_location, str(ex))
- raise FatalException(-1, msg)
-
-
-def ensure_server_security_is_configured(properties, environ):
- pass
-
-
-#
-# Stops the Ambari Server.
-#
-def svcstop():
- AmbariServerService.Stop()
-
-
-### Stack upgrade ###
-
-def get_resources_location(properties):
- res_location = properties[RESOURCES_DIR_PROPERTY]
- if res_location is None:
- res_location = RESOURCES_DIR_DEFAULT
- return res_location
-# pass
-
-
-#
-# The Ambari Server status.
-#
-def svcstatus(options):
- options.exit_message = None
-
- statusStr = AmbariServerService.QueryStatus()
- print "Ambari Server is " + statusStr
-
-
-def get_ulimit_open_files():
- properties = get_ambari_properties()
- if properties == -1:
- print "Error reading ambari properties"
- return None
-
- open_files = int(properties[ULIMIT_OPEN_FILES_KEY])
- if open_files > 0:
- return open_files
- else:
- return ULIMIT_OPEN_FILES_DEFAULT
-
-
-def init_options_parser():
- parser = optparse.OptionParser(usage="usage: %prog action [options] [stack_id os]", )
- #parser.add_option('-i', '--create-db-script-file', dest="create_db_script_file",
- # default="resources" + os.sep + "Ambari-DDL-SQLServer-CREATELOCAL.sql",
- # help="File with database creation script")
- parser.add_option('-f', '--init-script-file', dest="init_db_script_file",
- default="resources" + os.sep + "Ambari-DDL-SQLServer-CREATE.sql",
- help="File with database setup script")
- parser.add_option('-r', '--drop-script-file', dest="cleanup_db_script_file",
- default="resources" + os.sep + "Ambari-DDL-SQLServer-DROP.sql",
- help="File with database cleanup script")
- parser.add_option('-j', '--java-home', dest="java_home", default=None,
- help="Use specified java_home. Must be valid on all hosts")
- parser.add_option("-v", "--verbose",
- action="store_true", dest="verbose", default=False,
- help="Print verbose status messages")
- parser.add_option("-s", "--silent",
- action="store_true", dest="silent", default=False,
- help="Silently accepts default prompt values")
- parser.add_option('-g', '--debug', action="store_true", dest='debug', default=False,
- help="Start ambari-server in debug mode")
- parser.add_option('-y', '--suspend-start', action="store_true", dest='suspend_start', default=False,
- help="Freeze ambari-server Java process at startup in debug mode")
-
- parser.add_option('-a', '--databasehost', dest="database_host", default=None,
- help="Hostname of database server")
- parser.add_option('-n', '--databaseport', dest="database_port", default=None,
- help="Database server listening port")
- parser.add_option('-d', '--databasename', dest="database_name", default=None,
- help="Database/Schema/Service name or ServiceID")
- parser.add_option('-w', '--windowsauth', action="store_true", dest="database_windows_auth", default=None,
- help="Integrated Windows authentication")
- parser.add_option('-u', '--databaseusername', dest="database_username", default=None,
- help="Database user login")
- parser.add_option('-p', '--databasepassword', dest="database_password", default=None,
- help="Database user password")
- parser.add_option('--jdbc-driver', default=None, dest="jdbc_driver",
- help="Specifies the path to the JDBC driver JAR file for the " \
- "database type specified with the --jdbc-db option. Used only with --jdbc-db option.")
- # -b, -i, -k and -x the remaining available short options
- # -h reserved for help
- return parser
-
-def are_cmd_line_db_args_blank(options):
- if (options.database_host is None \
- and options.database_name is None \
- and options.database_windows_auth is None \
- and options.database_username is None \
- and options.database_password is None):
- return True
- return False
-
-
-def are_db_auth_options_ok(db_windows_auth, db_username, db_password):
- if db_windows_auth is True:
- return True
- else:
- if db_username is not None and db_username is not "" and db_password is not None and db_password is not "":
- return True
- return False
-
-def are_cmd_line_db_args_valid(options):
- if (options.database_host is not None and options.database_host is not "" \
- #and options.database_name is not None \ # ambari by default is ok
- and are_db_auth_options_ok(options.database_windows_auth,
- options.database_username,
- options.database_password)):
- return True
- return False
-
-
-def setup_security(args):
- need_restart = True
- #Print menu options
- print '=' * 75
- print 'Choose one of the following options: '
- print ' [1] Enable HTTPS for Ambari server.'
- print ' [2] Encrypt passwords stored in ambari.properties file.'
- print ' [3] Setup Ambari kerberos JAAS configuration.'
- print '=' * 75
- choice = get_validated_string_input('Enter choice, (1-3): ', '0', '[1-3]',
- 'Invalid choice', False, False)
-
- if choice == '1':
- need_restart = setup_https(args)
- elif choice == '2':
- setup_master_key()
- elif choice == '3':
- setup_ambari_krb5_jaas()
- else:
- raise FatalException('Unknown option for setup-security command.')
-
- return need_restart
-
-#
-# Main.
-#
-def main():
- parser = init_options_parser()
- (options, args) = parser.parse_args()
-
- #perform checks
- options.warnings = []
- options.must_set_database_options = False
-
- if are_cmd_line_db_args_blank(options):
- options.must_set_database_options = True
-
- elif not are_cmd_line_db_args_valid(options):
- parser.error('All database options should be set. Please see help for the options.')
-
- # set verbose
- set_verbose(options.verbose)
-
- # set silent
- set_silent(options.silent)
-
- ## jdbc driver and db options validation
- #if options.jdbc_driver is None and options.jdbc_db is not None:
- # parser.error("Option --jdbc-db is used only in pair with --jdbc-driver")
- #elif options.jdbc_driver is not None and options.jdbc_db is None:
- # parser.error("Option --jdbc-driver is used only in pair with --jdbc-db")
-
- if options.debug:
- sys.frozen = 'windows_exe' # Fake py2exe so we can debug
-
- if len(args) == 0:
- print parser.print_help()
- parser.error("No action entered")
-
- action = args[0]
-
- if action == UPGRADE_STACK_ACTION:
- possible_args_numbers = [2,4] # OR
- else:
- possible_args_numbers = [1]
-
- matches = 0
- for args_number_required in possible_args_numbers:
- matches += int(len(args) == args_number_required)
-
- if matches == 0:
- print parser.print_help()
- possible_args = ' or '.join(str(x) for x in possible_args_numbers)
- parser.error("Invalid number of arguments. Entered: " + str(len(args)) + ", required: " + possible_args)
-
- options.exit_message = "Ambari Server '%s' completed successfully." % action
- need_restart = True
- try:
- if action == SETUP_ACTION:
- setup(options)
- svcsetup()
- elif action == START_ACTION:
- svcstart()
- elif action == PSTART_ACTION:
- start(options)
- elif action == STOP_ACTION:
- svcstop()
- elif action == RESET_ACTION:
- reset(options, AmbariServerService)
- elif action == STATUS_ACTION:
- svcstatus(options)
- elif action == UPGRADE_ACTION:
- upgrade(options)
-# elif action == UPGRADE_STACK_ACTION:
-# stack_id = args[1]
-# repo_url = None
-# repo_url_os = None
-#
-# if len(args) > 2:
-# repo_url = args[2]
-# if len(args) > 3:
-# repo_url_os = args[3]
-#
-# upgrade_stack(options, stack_id, repo_url, repo_url_os)
- elif action == LDAP_SETUP_ACTION:
- setup_ldap()
- elif action == SETUP_SECURITY_ACTION:
- need_restart = setup_security(options)
- else:
- parser.error("Invalid action")
-
- if action in ACTION_REQUIRE_RESTART and need_restart:
- status, stateDesc = is_server_running(AmbariServerService)
- if status:
- print 'NOTE: Restart Ambari Server to apply changes' + \
- ' ("ambari-server restart|stop|start")'
-
- if options.warnings:
- for warning in options.warnings:
- print_warning_msg(warning)
- pass
- options.exit_message = "Ambari Server '%s' completed with warnings." % action
- pass
- except FatalException as e:
- if e.reason is not None:
- print_error_msg("Exiting with exit code {0}. \nREASON: {1}".format(e.code, e.reason))
- sys.exit(e.code)
- except NonFatalException as e:
- options.exit_message = "Ambari Server '%s' completed with warnings." % action
- if e.reason is not None:
- print_warning_msg(e.reason)
-
- if options.exit_message is not None:
- print options.exit_message
-
-
-if __name__ == "__main__":
- try:
- main()
- except (KeyboardInterrupt, EOFError):
- print("\nAborting ... Keyboard Interrupt.")
- sys.exit(1)
\ No newline at end of file