You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ad...@apache.org on 2017/05/23 09:53:00 UTC
[02/50] [abbrv] ambari git commit: AMBARI-20532 Ambari-server CLI to
setup Database Options Broken (dsen)
AMBARI-20532 Ambari-server CLI to setup Database Options Broken (dsen)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/772be786
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/772be786
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/772be786
Branch: refs/heads/ambari-rest-api-explorer
Commit: 772be786d930322e4a95e4755c36ffece24d30e4
Parents: 735c413
Author: Dmytro Sen <ds...@apache.org>
Authored: Wed May 17 19:07:44 2017 +0300
Committer: Dmytro Sen <ds...@apache.org>
Committed: Wed May 17 19:07:44 2017 +0300
----------------------------------------------------------------------
ambari-server/src/main/python/ambari-server.py | 299 ++++++++------
.../main/python/ambari_server/setupMpacks.py | 7 +-
.../src/test/python/TestAmbariServer.py | 409 ++++++++++---------
3 files changed, 389 insertions(+), 326 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/772be786/ambari-server/src/main/python/ambari-server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/python/ambari-server.py b/ambari-server/src/main/python/ambari-server.py
index 737be6a..4f680cb 100755
--- a/ambari-server/src/main/python/ambari-server.py
+++ b/ambari-server/src/main/python/ambari-server.py
@@ -367,7 +367,7 @@ def print_action_arguments_help(action):
";".join([print_opt for print_opt, _ in optional_options]))
@OsFamilyFuncImpl(OSConst.WINSRV_FAMILY)
-def init_parser_options(parser):
+def init_action_parser(action, parser):
parser.add_option('-k', '--service-user-name', dest="svc_user",
default=None,
help="User account under which the Ambari Server service will run")
@@ -455,31 +455,58 @@ def init_parser_options(parser):
# -h reserved for help
@OsFamilyFuncImpl(OsFamilyImpl.DEFAULT)
-def init_parser_options(parser):
- parser.add_option('-f', '--init-script-file', default=None,
- help="File with setup script")
- parser.add_option('-r', '--drop-script-file', default=None,
- help="File with drop script")
- parser.add_option('-u', '--upgrade-script-file', default=AmbariPath.get("/var/lib/"
- "ambari-server/resources/upgrade/ddl/"
- "Ambari-DDL-Postgres-UPGRADE-1.3.0.sql"),
- help="File with upgrade script")
- parser.add_option('-t', '--upgrade-stack-script-file', default=AmbariPath.get("/var/lib/"
- "ambari-server/resources/upgrade/dml/"
- "Ambari-DML-Postgres-UPGRADE_STACK.sql"),
- help="File with stack upgrade script")
- parser.add_option('-j', '--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. For db-cleanup command, silent mode will stop ambari server.")
+def init_setup_parser_options(parser):
+ database_group = optparse.OptionGroup(parser, 'Database options (command need to include all options)')
+ database_group.add_option('--database', default=None, help="Database to use embedded|oracle|mysql|mssql|postgres|sqlanywhere", dest="dbms")
+ database_group.add_option('--databasehost', default=None, help="Hostname of database server", dest="database_host")
+ database_group.add_option('--databaseport', default=None, help="Database port", dest="database_port")
+ database_group.add_option('--databasename', default=None, help="Database/Service name or ServiceID",
+ dest="database_name")
+ database_group.add_option('--databaseusername', default=None, help="Database user login", dest="database_username")
+ database_group.add_option('--databasepassword', default=None, help="Database user password", dest="database_password")
+ parser.add_option_group(database_group)
+
+ jdbc_group = optparse.OptionGroup(parser, 'JDBC options (command need to include all options)')
+ jdbc_group.add_option('--jdbc-driver', default=None, help="Specifies the path to the JDBC driver JAR file or archive " \
+ "with all required files(jdbc jar, libraries and etc), for the " \
+ "database type specified with the --jdbc-db option. " \
+ "Used only with --jdbc-db option. Archive is supported only for" \
+ " sqlanywhere database." ,
+ dest="jdbc_driver")
+ jdbc_group.add_option('--jdbc-db', default=None, help="Specifies the database type [postgres|mysql|mssql|oracle|hsqldb|sqlanywhere] for the " \
+ "JDBC driver specified with the --jdbc-driver option. Used only with --jdbc-driver option.",
+ dest="jdbc_db")
+ parser.add_option_group(jdbc_group)
+
+ other_group = optparse.OptionGroup(parser, 'Other options')
+
+ other_group.add_option('-j', '--java-home', default=None,
+ help="Use specified java_home. Must be valid on all hosts")
+ other_group.add_option('--skip-view-extraction', action="store_true", default=False, help="Skip extraction of system views", dest="skip_view_extraction")
+ other_group.add_option('--postgresschema', default=None, help="Postgres database schema name",
+ dest="postgres_schema")
+ other_group.add_option('--sqla-server-name', default=None, help="SQL Anywhere server name", dest="sqla_server_name")
+ other_group.add_option('--sidorsname', default="sname", help="Oracle database identifier type, Service ID/Service "
+ "Name sid|sname", dest="sid_or_sname")
+
+ parser.add_option_group(other_group)
+
+@OsFamilyFuncImpl(OsFamilyImpl.DEFAULT)
+def init_start_parser_options(parser):
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('--skip-properties-validation', action="store_true", default=False, help="Skip properties file validation", dest="skip_properties_validation")
+ parser.add_option('--skip-database-check', action="store_true", default=False, help="Skip database consistency check", dest="skip_database_check")
+ parser.add_option('--auto-fix-database', action="store_true", default=False, help="Automatically fix database consistency issues", dest="fix_database_consistency")
+
+@OsFamilyFuncImpl(OsFamilyImpl.DEFAULT)
+def init_empty_parser_options(parser):
+ pass
+
+@OsFamilyFuncImpl(OsFamilyImpl.DEFAULT)
+def init_ldap_sync_parser_options(parser):
parser.add_option('--all', action="store_true", default=False, help="LDAP sync all option. Synchronize all LDAP users and groups.",
dest="ldap_sync_all")
parser.add_option('--existing', action="store_true", default=False,
@@ -488,79 +515,11 @@ def init_parser_options(parser):
dest="ldap_sync_users")
parser.add_option('--groups', default=None, help="LDAP sync groups option. Specifies the path to a CSV file of group names to be synchronized.",
dest="ldap_sync_groups")
- parser.add_option('--database', default=None, help="Database to use embedded|oracle|mysql|mssql|postgres|sqlanywhere", dest="dbms")
- parser.add_option('--databasehost', default=None, help="Hostname of database server", dest="database_host")
- parser.add_option('--databaseport', default=None, help="Database port", dest="database_port")
- parser.add_option('--databasename', default=None, help="Database/Service name or ServiceID",
- dest="database_name")
- parser.add_option('--postgresschema', default=None, help="Postgres database schema name",
- dest="postgres_schema")
- parser.add_option('--databaseusername', default=None, help="Database user login", dest="database_username")
- parser.add_option('--databasepassword', default=None, help="Database user password", dest="database_password")
- parser.add_option('--sidorsname', default="sname", help="Oracle database identifier type, Service ID/Service "
- "Name sid|sname", dest="sid_or_sname")
- parser.add_option('--sqla-server-name', default=None, help="SQL Anywhere server name", dest="sqla_server_name")
- parser.add_option('--jdbc-driver', default=None, help="Specifies the path to the JDBC driver JAR file or archive " \
- "with all required files(jdbc jar, libraries and etc), for the " \
- "database type specified with the --jdbc-db option. " \
- "Used only with --jdbc-db option. Archive is supported only for" \
- " sqlanywhere database." ,
- dest="jdbc_driver")
- parser.add_option('--jdbc-db', default=None, help="Specifies the database type [postgres|mysql|mssql|oracle|hsqldb|sqlanywhere] for the " \
- "JDBC driver specified with the --jdbc-driver option. Used only with --jdbc-driver option.",
- dest="jdbc_db")
- parser.add_option('--cluster-name', default=None, help="Cluster name", dest="cluster_name")
- parser.add_option('--version-display-name', default=None, help="Display name of desired repo version", dest="desired_repo_version")
- parser.add_option('--skip-properties-validation', action="store_true", default=False, help="Skip properties file validation", dest="skip_properties_validation")
- parser.add_option('--skip-database-check', action="store_true", default=False, help="Skip database consistency check", dest="skip_database_check")
- parser.add_option('--skip-view-extraction', action="store_true", default=False, help="Skip extraction of system views", dest="skip_view_extraction")
- parser.add_option('--auto-fix-database', action="store_true", default=False, help="Automatically fix database consistency issues", dest="fix_database_consistency")
- parser.add_option('--force-version', action="store_true", default=False, help="Force version to current", dest="force_repo_version")
- parser.add_option('--version', dest="stack_versions", default=None, action="append", type="string",
- help="Specify stack version that needs to be enabled. All other stacks versions will be disabled")
- parser.add_option('--stack', dest="stack_name", default=None, type="string",
- help="Specify stack name for the stack versions that needs to be enabled")
- parser.add_option("-d", "--from-date", dest="cleanup_from_date", default=None, type="string", help="Specify date for the cleanup process in 'yyyy-MM-dd' format")
- add_parser_options('--mpack',
- default=None,
- help="Specify the path for management pack to be installed/upgraded",
- dest="mpack_path",
- parser=parser,
- required_for_actions=[INSTALL_MPACK_ACTION, UPGRADE_MPACK_ACTION]
- )
- add_parser_options('--mpack-name',
- default=None,
- help="Specify the management pack name to be uninstalled",
- dest="mpack_name",
- parser=parser,
- required_for_actions=[UNINSTALL_MPACK_ACTION]
- )
- add_parser_options('--purge',
- action="store_true",
- default=False,
- help="Purge existing resources specified in purge-list",
- dest="purge",
- parser=parser,
- optional_for_actions=[INSTALL_MPACK_ACTION]
- )
- purge_resources = ",".join([STACK_DEFINITIONS_RESOURCE_NAME, SERVICE_DEFINITIONS_RESOURCE_NAME, MPACKS_RESOURCE_NAME])
- default_purge_resources = ",".join([STACK_DEFINITIONS_RESOURCE_NAME, MPACKS_RESOURCE_NAME])
- add_parser_options('--purge-list',
- default=default_purge_resources,
- help="Comma separated list of resources to purge ({0}). By default ({1}) will be purged.".format(purge_resources, default_purge_resources),
- dest="purge_list",
- parser=parser,
- optional_for_actions=[INSTALL_MPACK_ACTION]
- )
- add_parser_options('--force',
- action="store_true",
- default=False,
- help="Force install management pack",
- dest="force",
- parser=parser,
- optional_for_actions=[INSTALL_MPACK_ACTION]
- )
+ parser.add_option('--ldap-sync-admin-name', default=None, help="Username for LDAP sync", dest="ldap_sync_admin_name")
+ parser.add_option('--ldap-sync-admin-password', default=None, help="Password for LDAP sync", dest="ldap_sync_admin_password")
+@OsFamilyFuncImpl(OsFamilyImpl.DEFAULT)
+def init_ldap_setup_parser_options(parser):
parser.add_option('--ldap-url', default=None, help="Primary url for LDAP", dest="ldap_url")
parser.add_option('--ldap-secondary-url', default=None, help="Secondary url for LDAP", dest="ldap_secondary_url")
parser.add_option('--ldap-ssl', default=None, help="Use SSL [true/false] for LDAP", dest="ldap_ssl")
@@ -576,29 +535,83 @@ def init_parser_options(parser):
parser.add_option('--ldap-save-settings', action="store_true", default=None, help="Save without review for LDAP", dest="ldap_save_settings")
parser.add_option('--ldap-referral', default=None, help="Referral method [follow/ignore] for LDAP", dest="ldap_referral")
parser.add_option('--ldap-bind-anonym', default=None, help="Bind anonymously [true/false] for LDAP", dest="ldap_bind_anonym")
- parser.add_option('--ldap-sync-admin-name', default=None, help="Username for LDAP sync", dest="ldap_sync_admin_name")
- parser.add_option('--ldap-sync-admin-password', default=None, help="Password for LDAP sync", dest="ldap_sync_admin_password")
parser.add_option('--ldap-sync-username-collisions-behavior', default=None, help="Handling behavior for username collisions [convert/skip] for LDAP sync", dest="ldap_sync_username_collisions_behavior")
- parser.add_option('--truststore-type', default=None, help="Type of TrustStore (jks|jceks|pkcs12)", dest="trust_store_type")
- parser.add_option('--truststore-path', default=None, help="Path of TrustStore", dest="trust_store_path")
- parser.add_option('--truststore-password', default=None, help="Password for TrustStore", dest="trust_store_password")
- parser.add_option('--truststore-reconfigure', action="store_true", default=None, help="Force to reconfigure TrustStore if exits", dest="trust_store_reconfigure")
+@OsFamilyFuncImpl(OsFamilyImpl.DEFAULT)
+def init_set_current_parser_options(parser):
+ parser.add_option('--cluster-name', default=None, help="Cluster name", dest="cluster_name")
+ parser.add_option('--version-display-name', default=None, help="Display name of desired repo version", dest="desired_repo_version")
+ parser.add_option('--force-version', action="store_true", default=False, help="Force version to current", dest="force_repo_version")
+@OsFamilyFuncImpl(OsFamilyImpl.DEFAULT)
+def init_setup_security_parser_options(parser):
parser.add_option('--security-option', default=None,
help="Setup security option (setup-https|encrypt-password|setup-kerberos-jaas|setup-truststore|import-certificate)",
dest="security_option")
- parser.add_option('--api-ssl', default=None, help="Enable SSL for Ambari API [true/false]", dest="api_ssl")
- parser.add_option('--api-ssl-port', default=None, help="Client API SSL port", dest="api_ssl_port")
- parser.add_option('--import-cert-path', default=None, help="Path to Certificate (import)", dest="import_cert_path")
- parser.add_option('--import-cert-alias', default=None, help="Alias for the imported certificate", dest="import_cert_alias")
- parser.add_option('--import-key-path', default=None, help="Path to Private Key (import)", dest="import_key_path")
- parser.add_option('--pem-password', default=None, help="Password for Private Key", dest="pem_password")
- parser.add_option('--master-key', default=None, help="Master key for encrypting passwords", dest="master_key")
- parser.add_option('--master-key-persist', default=None, help="Persist master key [true/false]", dest="master_key_persist")
- parser.add_option('--jaas-principal', default=None, help="Kerberos principal for ambari server", dest="jaas_principal")
- parser.add_option('--jaas-keytab', default=None, help="Keytab path for Kerberos principal", dest="jaas_keytab")
+ https_group = optparse.OptionGroup(parser, "setup-https options")
+ https_group.add_option('--api-ssl', default=None, help="Enable SSL for Ambari API [true/false]", dest="api_ssl")
+ https_group.add_option('--api-ssl-port', default=None, help="Client API SSL port", dest="api_ssl_port")
+ https_group.add_option('--import-key-path', default=None, help="Path to Private Key (import)", dest="import_key_path")
+ https_group.add_option('--pem-password', default=None, help="Password for Private Key", dest="pem_password")
+ parser.add_option_group(https_group)
+
+ encrypt_passwords_group = optparse.OptionGroup(parser, "encrypt-passwords options")
+ encrypt_passwords_group.add_option('--master-key', default=None, help="Master key for encrypting passwords", dest="master_key")
+ encrypt_passwords_group.add_option('--master-key-persist', default=None, help="Persist master key [true/false]", dest="master_key_persist")
+ parser.add_option_group(encrypt_passwords_group)
+
+ setup_kerberos_jaas_group = optparse.OptionGroup(parser, "setup-kerberos-jaas options")
+ setup_kerberos_jaas_group.add_option('--jaas-principal', default=None, help="Kerberos principal for ambari server", dest="jaas_principal")
+ setup_kerberos_jaas_group.add_option('--jaas-keytab', default=None, help="Keytab path for Kerberos principal", dest="jaas_keytab")
+ parser.add_option_group(setup_kerberos_jaas_group)
+
+ setup_truststore_group = optparse.OptionGroup(parser, "setup-truststore options, uses encrypt-passwords options if configured")
+ setup_truststore_group.add_option('--truststore-type', default=None, help="Type of TrustStore (jks|jceks|pkcs12)", dest="trust_store_type")
+ setup_truststore_group.add_option('--truststore-path', default=None, help="Path of TrustStore", dest="trust_store_path")
+ setup_truststore_group.add_option('--truststore-password', default=None, help="Password for TrustStore", dest="trust_store_password")
+ setup_truststore_group.add_option('--truststore-reconfigure', action="store_true", default=None, help="Force to reconfigure TrustStore if exits", dest="trust_store_reconfigure")
+ parser.add_option_group(setup_truststore_group)
+
+ import_certificate_group = optparse.OptionGroup(parser, "import-certificate options, uses --truststore-path option")
+ import_certificate_group.add_option('--import-cert-path', default=None, help="Path to Certificate (import)", dest="import_cert_path")
+ import_certificate_group.add_option('--import-cert-alias', default=None, help="Alias for the imported certificate", dest="import_cert_alias")
+ parser.add_option_group(import_certificate_group)
+
+@OsFamilyFuncImpl(OsFamilyImpl.DEFAULT)
+def init_enable_stack_parser_options(parser):
+ parser.add_option('--version', dest="stack_versions", default=None, action="append", type="string",
+ help="Specify stack version that needs to be enabled. All other stacks versions will be disabled")
+ parser.add_option('--stack', dest="stack_name", default=None, type="string",
+ help="Specify stack name for the stack versions that needs to be enabled")
+
+@OsFamilyFuncImpl(OsFamilyImpl.DEFAULT)
+def init_db_cleanup_parser_options(parser):
+ parser.add_option('--cluster-name', default=None, help="Cluster name", dest="cluster_name")
+ parser.add_option("-d", "--from-date", dest="cleanup_from_date", default=None, type="string", help="Specify date for the cleanup process in 'yyyy-MM-dd' format")
+
+@OsFamilyFuncImpl(OsFamilyImpl.DEFAULT)
+def init_install_mpack_parser_options(parser):
+ parser.add_option('--mpack', default=None, help="Specify the path for management pack to be installed", dest="mpack_path")
+ parser.add_option('--purge', action="store_true", default=False, help="Purge existing resources specified in purge-list", dest="purge")
+ purge_resources = ",".join([STACK_DEFINITIONS_RESOURCE_NAME, SERVICE_DEFINITIONS_RESOURCE_NAME, MPACKS_RESOURCE_NAME])
+ default_purge_resources = ",".join([STACK_DEFINITIONS_RESOURCE_NAME, MPACKS_RESOURCE_NAME])
+
+ parser.add_option('--purge-list', default=default_purge_resources,
+ help="Comma separated list of resources to purge ({0}). By default ({1}) will be purged.".format(purge_resources, default_purge_resources),
+ dest="purge_list")
+ parser.add_option('--force', action="store_true", default=False, help="Force install management pack", dest="force")
+
+@OsFamilyFuncImpl(OsFamilyImpl.DEFAULT)
+def init_uninstall_mpack_parser_options(parser):
+ parser.add_option('--mpack-name', default=None, help="Specify the management pack name to be uninstalled", dest="mpack_name")
+
+@OsFamilyFuncImpl(OsFamilyImpl.DEFAULT)
+def init_upgrade_mpack_parser_options(parser):
+ parser.add_option('--mpack', default=None, help="Specify the path for management pack to be updated", dest="mpack_path")
+
+@OsFamilyFuncImpl(OsFamilyImpl.DEFAULT)
+def init_kerberos_setup_parser_options(parser):
parser.add_option('--kerberos-setup', default=None, help="Setup Kerberos Authentication", dest="kerberos_setup")
parser.add_option('--kerberos-enabled', default=False, help="Kerberos enabled", dest="kerberos_enabled")
parser.add_option('--kerberos-spnego-principal', default="HTTP/_HOST", help="Kerberos SPNEGO principal", dest="kerberos_spnego_principal")
@@ -774,6 +787,46 @@ def create_user_action_map(args, options):
}
return action_map
+@OsFamilyFuncImpl(OsFamilyImpl.DEFAULT)
+def init_action_parser(action, parser):
+ action_parser_map = {
+ SETUP_ACTION: init_setup_parser_options,
+ SETUP_JCE_ACTION: init_empty_parser_options,
+ START_ACTION: init_start_parser_options,
+ STOP_ACTION: init_empty_parser_options,
+ RESTART_ACTION: init_start_parser_options,
+ RESET_ACTION: init_empty_parser_options,
+ STATUS_ACTION: init_empty_parser_options,
+ UPGRADE_ACTION: init_empty_parser_options,
+ UPGRADE_STACK_ACTION:init_empty_parser_options,
+ LDAP_SETUP_ACTION: init_ldap_setup_parser_options,
+ LDAP_SYNC_ACTION: init_ldap_sync_parser_options,
+ SET_CURRENT_ACTION: init_set_current_parser_options,
+ SETUP_SECURITY_ACTION: init_setup_security_parser_options,
+ REFRESH_STACK_HASH_ACTION: init_empty_parser_options,
+ BACKUP_ACTION: init_empty_parser_options,
+ RESTORE_ACTION: init_empty_parser_options,
+ UPDATE_HOST_NAMES_ACTION: init_empty_parser_options,
+ CHECK_DATABASE_ACTION: init_empty_parser_options,
+ ENABLE_STACK_ACTION: init_enable_stack_parser_options,
+ SETUP_SSO_ACTION: init_empty_parser_options,
+ DB_CLEANUP_ACTION: init_db_cleanup_parser_options,
+ INSTALL_MPACK_ACTION: init_install_mpack_parser_options,
+ UNINSTALL_MPACK_ACTION: init_uninstall_mpack_parser_options,
+ UPGRADE_MPACK_ACTION: init_upgrade_mpack_parser_options,
+ PAM_SETUP_ACTION: init_empty_parser_options,
+ KERBEROS_SETUP_ACTION: init_kerberos_setup_parser_options,
+ }
+ 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. For db-cleanup command, silent mode will stop ambari server.")
+ try:
+ action_parser_map[action](parser)
+ except KeyError:
+ parser.error("Invalid action: " + action)
def setup_logging(logger, filename, logging_level):
formatter = logging.Formatter(formatstr)
@@ -825,16 +878,6 @@ def main(options, args, parser):
options.warnings = []
- 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.')
- else:
- options.must_set_database_options = False
-
- #correct database
- fix_database_options(options, parser)
-
if len(args) == 0:
print parser.print_help()
parser.error("No action entered")
@@ -848,6 +891,17 @@ def main(options, args, parser):
except KeyError:
parser.error("Invalid action: " + action)
+ if action == SETUP_ACTION:
+ 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.')
+ else:
+ options.must_set_database_options = False
+
+ #correct database
+ fix_database_options(options, parser)
+
matches = 0
for args_number_required in action_obj.possible_args_numbers:
matches += int(len(args) == args_number_required)
@@ -900,8 +954,9 @@ def main(options, args, parser):
sys.exit(options.exit_code)
def mainBody():
- parser = optparse.OptionParser(usage="usage: %prog [options] action [stack_id os]",)
- init_parser_options(parser)
+ parser = optparse.OptionParser(usage="usage: %prog action [options]",)
+ action = sys.argv[1]
+ init_action_parser(action, parser)
(options, args) = parser.parse_args()
# check if only silent key set
http://git-wip-us.apache.org/repos/asf/ambari/blob/772be786/ambari-server/src/main/python/ambari_server/setupMpacks.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/python/ambari_server/setupMpacks.py b/ambari-server/src/main/python/ambari_server/setupMpacks.py
index aaf9c10..625e428 100755
--- a/ambari-server/src/main/python/ambari_server/setupMpacks.py
+++ b/ambari-server/src/main/python/ambari_server/setupMpacks.py
@@ -714,7 +714,7 @@ def _install_mpack(options, replay_mode=False, is_upgrade=False):
_execute_hook(mpack_metadata, BEFORE_INSTALL_HOOK_NAME, tmp_root_dir)
# Purge previously installed stacks and management packs
- if options.purge and options.purge_list:
+ if not is_upgrade and options.purge and options.purge_list:
purge_resources = options.purge_list.split(",")
validate_purge(options, purge_resources, tmp_root_dir, mpack_metadata, replay_mode)
purge_stacks_and_mpacks(purge_resources, replay_mode)
@@ -934,9 +934,6 @@ def upgrade_mpack(options, replay_mode=False):
"""
logger.info("Upgrade mpack.")
mpack_path = options.mpack_path
- if options.purge:
- print_error_msg("Purge is not supported with upgrade_mpack action!")
- raise FatalException(-1, "Purge is not supported with upgrade_mpack action!")
if not mpack_path:
print_error_msg("Management pack not specified!")
@@ -962,7 +959,7 @@ def upgrade_mpack(options, replay_mode=False):
print_info_msg("Management pack {0}-{1} successfully upgraded!".format(mpack_name, mpack_version))
if not replay_mode:
- add_replay_log(UPGRADE_MPACK_ACTION, mpack_archive_path, options.purge, options.purge_list, options.force, options.verbose)
+ add_replay_log(UPGRADE_MPACK_ACTION, mpack_archive_path, False, [], options.force, options.verbose)
def replay_mpack_logs():
"""
http://git-wip-us.apache.org/repos/asf/ambari/blob/772be786/ambari-server/src/test/python/TestAmbariServer.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/TestAmbariServer.py b/ambari-server/src/test/python/TestAmbariServer.py
index 9579c22..66b5ac5 100644
--- a/ambari-server/src/test/python/TestAmbariServer.py
+++ b/ambari-server/src/test/python/TestAmbariServer.py
@@ -85,7 +85,7 @@ with patch.object(platform, "linux_distribution", return_value = MagicMock(retur
print_info_msg, print_warning_msg, print_error_msg
from ambari_commons.os_utils import run_os_command, search_file, set_file_permissions, remove_file, copy_file, \
is_valid_filepath
- from ambari_server.dbConfiguration import DBMSConfigFactory, check_jdbc_drivers
+ from ambari_server.dbConfiguration import DBMSConfigFactory, check_jdbc_drivers, DBMSConfig
from ambari_server.dbConfiguration_linux import PGConfig, LinuxDBMSConfig, OracleConfig
from ambari_server.properties import Properties
from ambari_server.resourceFilesKeeper import ResourceFilesKeeper, KeeperException
@@ -302,30 +302,27 @@ class TestAmbariServer(TestCase):
@patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value))
@patch.object(_ambari_server_, "setup_security")
- @patch("optparse.OptionParser")
@patch.object(_ambari_server_, "logger")
@patch("ambari_server.serverConfiguration.get_ambari_properties")
@patch.object(_ambari_server_, "setup_logging")
@patch.object(_ambari_server_, "init_logging")
def test_main_test_setup_security(self, init_logging_mock, setup_logging_mock, get_ambari_properties_mock,
- logger_mock, OptionParserMock,
- setup_security_method):
- opm = OptionParserMock.return_value
- options = MagicMock()
- args = ["setup-security"]
- opm.parse_args.return_value = (options, args)
- options.dbms = None
- options.security_option = "setup-security"
- options.sid_or_sname = "sid"
- setup_security_method.return_value = None
+ logger_mock, setup_security_method):
+ import sys
+ tmp_argv = sys.argv
+ try:
+ sys.argv = ['ambari-server', 'setup-security', '--security-option=setup-security']
+ setup_security_method.return_value = None
- _ambari_server_.mainBody()
+ _ambari_server_.mainBody()
- _ambari_server_.mainBody()
- self.assertTrue(setup_security_method.called)
- self.assertFalse(False, get_verbose())
- self.assertFalse(False, get_silent())
- pass
+ _ambari_server_.mainBody()
+ self.assertTrue(setup_security_method.called)
+ self.assertFalse(False, get_verbose())
+ self.assertFalse(False, get_silent())
+ finally:
+ sys.argv = tmp_argv
+ pass
@patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value))
@patch.object(_ambari_server_, "setup_ambari_krb5_jaas")
@@ -404,148 +401,147 @@ class TestAmbariServer(TestCase):
@patch.object(_ambari_server_, "start")
@patch.object(_ambari_server_, "stop")
@patch.object(_ambari_server_, "reset")
- @patch("optparse.OptionParser")
@patch.object(_ambari_server_, "logger")
@patch("ambari_server.serverConfiguration.get_ambari_properties")
@patch.object(_ambari_server_, "setup_logging")
@patch.object(_ambari_server_, "init_logging")
def test_main_test_setup(self, init_logging_mock, setup_logging_mock, get_ambari_properties_mock,
- logger_mock, OptionParserMock, reset_method, stop_method,
+ logger_mock, reset_method, stop_method,
start_method, setup_method, exit_mock):
- opm = OptionParserMock.return_value
- options = self._create_empty_options_mock()
- args = ["setup"]
- opm.parse_args.return_value = (options, args)
+ import sys
+ tmp_argv = sys.argv
+ try:
+ sys.argv = ["ambari-server", "setup"]
- options.dbms = None
- options.sid_or_sname = "sid"
- _ambari_server_.mainBody()
+ _ambari_server_.mainBody()
- self.assertTrue(setup_method.called)
- self.assertFalse(start_method.called)
- self.assertFalse(stop_method.called)
- self.assertFalse(reset_method.called)
+ self.assertTrue(setup_method.called)
+ self.assertFalse(start_method.called)
+ self.assertFalse(stop_method.called)
+ self.assertFalse(reset_method.called)
- self.assertFalse(False, get_verbose())
- self.assertFalse(False, get_silent())
+ self.assertFalse(False, get_verbose())
+ self.assertFalse(False, get_silent())
- setup_method.reset_mock()
- start_method.reset_mock()
- stop_method.reset_mock()
- reset_method.reset_mock()
- exit_mock.reset_mock()
- args = ["setup", "-v"]
- options = self._create_empty_options_mock()
- opm.parse_args.return_value = (options, args)
- options.dbms = None
- options.sid_or_sname = "sid"
- setup_method.side_effect = Exception("Unexpected error")
- try:
+ setup_method.reset_mock()
+ start_method.reset_mock()
+ stop_method.reset_mock()
+ reset_method.reset_mock()
+ exit_mock.reset_mock()
+ sys.argv = ["ambari-server", "setup", "-v"]
+ setup_method.side_effect = Exception("Unexpected error")
+ try:
+ _ambari_server_.mainBody()
+ except Exception:
+ self.assertTrue(True)
+ self.assertTrue(setup_method.called)
+ self.assertFalse(start_method.called)
+ self.assertFalse(stop_method.called)
+ self.assertFalse(reset_method.called)
+ self.assertTrue(get_verbose())
+
+ setup_method.reset_mock()
+ start_method.reset_mock()
+ stop_method.reset_mock()
+ reset_method.reset_mock()
+ exit_mock.reset_mock()
+ sys.argv = ["ambari-server", "setup"]
+ setup_method.side_effect = Exception("Unexpected error")
_ambari_server_.mainBody()
- except Exception:
- self.assertTrue(True)
- self.assertTrue(setup_method.called)
- self.assertFalse(start_method.called)
- self.assertFalse(stop_method.called)
- self.assertFalse(reset_method.called)
- self.assertTrue(get_verbose())
-
- setup_method.reset_mock()
- start_method.reset_mock()
- stop_method.reset_mock()
- reset_method.reset_mock()
- exit_mock.reset_mock()
- args = ["setup"]
- options = self._create_empty_options_mock()
- opm.parse_args.return_value = (options, args)
- options.dbms = None
- options.sid_or_sname = "sid"
- options.verbose = False
- setup_method.side_effect = Exception("Unexpected error")
- _ambari_server_.mainBody()
- self.assertTrue(exit_mock.called)
- self.assertTrue(setup_method.called)
- self.assertFalse(start_method.called)
- self.assertFalse(stop_method.called)
- self.assertFalse(reset_method.called)
- self.assertFalse(get_verbose())
+ self.assertTrue(exit_mock.called)
+ self.assertTrue(setup_method.called)
+ self.assertFalse(start_method.called)
+ self.assertFalse(stop_method.called)
+ self.assertFalse(reset_method.called)
+ self.assertFalse(get_verbose())
- pass
+ pass
+ finally:
+ sys.argv = tmp_argv
@patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value))
- @patch.object(_ambari_server_, "setup")
- @patch("optparse.OptionParser")
+ @patch.object(PGConfig, "_setup_local_server")
@patch.object(_ambari_server_, "logger")
@patch("ambari_server.serverConfiguration.get_ambari_properties")
@patch.object(_ambari_server_, "setup_logging")
@patch.object(_ambari_server_, "init_logging")
- def test_main_with_preset_dbms(self, init_logging_mock, setup_logging_mock, get_ambari_properties_mock,
- logger_mock, optionParserMock, setup_method):
- opm = optionParserMock.return_value
- options = self._create_empty_options_mock()
- args = ["setup"]
- opm.parse_args.return_value = (options, args)
+ @patch("ambari_server.serverSetup.check_ambari_user")
+ @patch('ambari_server.serverSetup.download_and_install_jdk')
+ @patch("ambari_server.serverSetup.configure_os_settings")
+ @patch.object(DBMSConfig, "setup_database")
+ @patch("ambari_server.serverSetup.check_jdbc_drivers")
+ @patch("ambari_server.serverSetup.extract_views")
+ @patch("ambari_server.serverSetup.adjust_directory_permissions")
+ @patch("ambari_server.serverSetup.service_setup")
+ def test_main_with_preset_dbms(self, service_setup_mock, adjust_directory_permissions_mock, extract_views_mock, check_jdbc_drivers_mock, setup_database_mock, configure_os_settings_mock, download_and_install_jdk_mock, check_ambari_user_mock, init_logging_mock, setup_logging_mock, get_ambari_properties_mock,
+ logger_mock, setup_local_db_method):
+ extract_views_mock.return_value = 0
+ check_ambari_user_mock.return_value = (0, False, 'user', None)
+ configure_os_settings_mock.return_value = 0
+ import sys
+ tmp_argv = sys.argv
+ try:
+ sys.argv = ["ambari-server", "setup", "-s"]
- options.dbms = "sqlanywhere"
- options.sid_or_sname = "sname"
- _ambari_server_.mainBody()
+ _ambari_server_.mainBody()
- self.assertTrue(setup_method.called)
- self.assertEquals(options.database_index, 5)
- pass
+ self.assertTrue(setup_local_db_method.called)
+ pass
+ finally:
+ sys.argv = tmp_argv
@patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value))
@patch.object(_ambari_server_, "setup")
@patch.object(_ambari_server_, "fix_database_options")
- @patch("optparse.OptionParser")
@patch.object(_ambari_server_, "logger")
@patch("ambari_server.serverConfiguration.get_ambari_properties")
@patch.object(_ambari_server_, "setup_logging")
@patch.object(_ambari_server_, "init_logging")
- def test_fix_database_options_called(self, init_logging_mock, setup_logging_mock, get_ambari_properties_mock, logger_mock, optionParserMock,
+ def test_fix_database_options_called(self, init_logging_mock, setup_logging_mock, get_ambari_properties_mock, logger_mock,
fixDBOptionsMock, setup_method):
- opm = optionParserMock.return_value
- options = self._create_empty_options_mock()
- args = ["setup"]
- opm.parse_args.return_value = (options, args)
+ import sys
+ tmp_argv = sys.argv
+ try:
+ sys.argv = ['ambari-server', 'setup']
- _ambari_server_.mainBody()
+ _ambari_server_.mainBody()
- self.assertTrue(setup_method.called)
- self.assertTrue(fixDBOptionsMock.called)
- set_silent(False)
- pass
+ self.assertTrue(setup_method.called)
+ self.assertTrue(fixDBOptionsMock.called)
+ set_silent(False)
+ pass
+ finally:
+ sys.argv = tmp_argv
@patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value))
@patch.object(_ambari_server_, "setup")
@patch.object(_ambari_server_, "start")
@patch.object(_ambari_server_, "stop")
@patch.object(_ambari_server_, "reset")
- @patch("optparse.OptionParser")
@patch.object(_ambari_server_, "logger")
@patch("ambari_server.serverConfiguration.get_ambari_properties")
@patch.object(_ambari_server_, "setup_logging")
@patch.object(_ambari_server_, "init_logging")
def test_main_test_start(self, init_logging_mock, setup_logging_mock, get_ambari_properties_mock, logger_mock,
- optionParserMock, reset_method, stop_method,
+ reset_method, stop_method,
start_method, setup_method):
- opm = optionParserMock.return_value
- options = self._create_empty_options_mock()
- args = ["setup"]
- opm.parse_args.return_value = (options, args)
+ import sys
+ tmp_argv = sys.argv
+ try:
+ sys.argv = ['ambari-server', "setup"]
- options.dbms = None
- options.sid_or_sname = "sname"
- _ambari_server_.mainBody()
+ _ambari_server_.mainBody()
- self.assertTrue(setup_method.called)
- self.assertFalse(start_method.called)
- self.assertFalse(stop_method.called)
- self.assertFalse(reset_method.called)
+ self.assertTrue(setup_method.called)
+ self.assertFalse(start_method.called)
+ self.assertFalse(stop_method.called)
+ self.assertFalse(reset_method.called)
- self.assertFalse(False, get_verbose())
- self.assertFalse(False, get_silent())
- pass
+ self.assertFalse(False, get_verbose())
+ self.assertFalse(False, get_silent())
+ pass
+ finally:
+ sys.argv = tmp_argv
@not_for_platform(PLATFORM_WINDOWS)
@patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value))
@@ -656,33 +652,32 @@ class TestAmbariServer(TestCase):
@patch.object(_ambari_server_, "reset")
@patch.object(_ambari_server_, "backup")
@patch.object(_ambari_server_, "restore")
- @patch("optparse.OptionParser")
@patch.object(_ambari_server_, "logger")
@patch("ambari_server.serverConfiguration.get_ambari_properties")
@patch.object(_ambari_server_, "setup_logging")
@patch.object(_ambari_server_, "init_logging")
def test_main_test_backup(self, init_logging_mock, setup_logging_mock, get_ambari_properties_mock, logger_mock,
- optionParserMock, restore_mock, backup_mock, reset_method, stop_method,
+ restore_mock, backup_mock, reset_method, stop_method,
start_method, setup_method):
- opm = optionParserMock.return_value
- options = self._create_empty_options_mock()
- args = ["backup"]
- opm.parse_args.return_value = (options, args)
+ import sys
+ tmp_argv = sys.argv
+ try:
+ sys.argv = ['ambari-server', "backup"]
- options.dbms = None
- options.sid_or_sname = "sname"
- _ambari_server_.mainBody()
+ _ambari_server_.mainBody()
- self.assertTrue(backup_mock.called)
- self.assertFalse(restore_mock.called)
- self.assertFalse(setup_method.called)
- self.assertFalse(start_method.called)
- self.assertFalse(stop_method.called)
- self.assertFalse(reset_method.called)
+ self.assertTrue(backup_mock.called)
+ self.assertFalse(restore_mock.called)
+ self.assertFalse(setup_method.called)
+ self.assertFalse(start_method.called)
+ self.assertFalse(stop_method.called)
+ self.assertFalse(reset_method.called)
- self.assertFalse(False, get_verbose())
- self.assertFalse(False, get_silent())
- pass
+ self.assertFalse(False, get_verbose())
+ self.assertFalse(False, get_silent())
+ pass
+ finally:
+ sys.argv = tmp_argv
#Restore is not yet supported on Windows
@not_for_platform(PLATFORM_WINDOWS)
@@ -693,33 +688,31 @@ class TestAmbariServer(TestCase):
@patch.object(_ambari_server_, "reset")
@patch.object(_ambari_server_, "backup")
@patch.object(_ambari_server_, "restore")
- @patch("optparse.OptionParser")
@patch.object(_ambari_server_, "logger")
@patch("ambari_server.serverConfiguration.get_ambari_properties")
@patch.object(_ambari_server_, "setup_logging")
@patch.object(_ambari_server_, "init_logging")
def test_main_test_restore(self, init_logging_mock, setup_logging_mock, get_ambari_properties_mock, logger_mock,
- optionParserMock, restore_mock, backup_mock, reset_method, stop_method,
+ restore_mock, backup_mock, reset_method, stop_method,
start_method, setup_method):
- opm = optionParserMock.return_value
- options = self._create_empty_options_mock()
- args = ["restore"]
- opm.parse_args.return_value = (options, args)
-
- options.dbms = None
- options.sid_or_sname = "sname"
- _ambari_server_.mainBody()
+ import sys
+ tmp_argv = sys.argv
+ try:
+ sys.argv = ['ambari-server', "restore"]
+ _ambari_server_.mainBody()
- self.assertTrue(restore_mock.called)
- self.assertFalse(backup_mock.called)
- self.assertFalse(setup_method.called)
- self.assertFalse(start_method.called)
- self.assertFalse(stop_method.called)
- self.assertFalse(reset_method.called)
+ self.assertTrue(restore_mock.called)
+ self.assertFalse(backup_mock.called)
+ self.assertFalse(setup_method.called)
+ self.assertFalse(start_method.called)
+ self.assertFalse(stop_method.called)
+ self.assertFalse(reset_method.called)
- self.assertFalse(False, get_verbose())
- self.assertFalse(False, get_silent())
- pass
+ self.assertFalse(False, get_verbose())
+ self.assertFalse(False, get_silent())
+ pass
+ finally:
+ sys.argv = tmp_argv
@not_for_platform(PLATFORM_WINDOWS)
@patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value))
@@ -791,32 +784,30 @@ class TestAmbariServer(TestCase):
@patch.object(_ambari_server_, "start")
@patch.object(_ambari_server_, "stop")
@patch.object(_ambari_server_, "reset")
- @patch("optparse.OptionParser")
@patch.object(_ambari_server_, "logger")
@patch("ambari_server.serverConfiguration.get_ambari_properties")
@patch.object(_ambari_server_, "setup_logging")
@patch.object(_ambari_server_, "init_logging")
def test_main_test_reset(self, init_logging_mock, setup_logging_mock, get_ambari_properties_mock,
- logger_mock, optionParserMock, reset_method, stop_method,
+ logger_mock, reset_method, stop_method,
start_method, setup_method):
- opm = optionParserMock.return_value
-
- options = self._create_empty_options_mock()
- args = ["reset"]
- opm.parse_args.return_value = (options, args)
- options.dbms = None
- options.sid_or_sname = "sid"
+ import sys
+ tmp_argv = sys.argv
+ try:
+ sys.argv = ['ambari-server', "reset"]
- _ambari_server_.mainBody()
+ _ambari_server_.mainBody()
- self.assertFalse(setup_method.called)
- self.assertFalse(start_method.called)
- self.assertFalse(stop_method.called)
- self.assertTrue(reset_method.called)
+ self.assertFalse(setup_method.called)
+ self.assertFalse(start_method.called)
+ self.assertFalse(stop_method.called)
+ self.assertTrue(reset_method.called)
- self.assertFalse(False, get_verbose())
- self.assertFalse(False, get_silent())
- pass
+ self.assertFalse(False, get_verbose())
+ self.assertFalse(False, get_silent())
+ pass
+ finally:
+ sys.argv = tmp_argv
@not_for_platform(PLATFORM_WINDOWS)
@@ -8497,64 +8488,84 @@ class TestAmbariServer(TestCase):
@not_for_platform(PLATFORM_WINDOWS)
@patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value))
@patch.object(_ambari_server_, "is_server_runing")
- @patch("optparse.OptionParser")
@patch.object(_ambari_server_, "logger")
@patch("ambari_server.serverConfiguration.get_ambari_properties")
@patch.object(_ambari_server_, "setup_logging")
@patch.object(_ambari_server_, "init_logging")
def test_main_test_status_running(self, init_logging_mock, setup_logging_mock, get_ambari_properties_mock,
- logger_mock, optionParserMock, is_server_runing_method):
- opm = optionParserMock.return_value
- options = self._create_empty_options_mock()
- del options.exit_message
+ logger_mock, is_server_runing_method):
- args = ["status"]
- opm.parse_args.return_value = (options, args)
+ import sys
+ tmp_argv = sys.argv
+ try:
+ sys.argv = ['ambari-server', "status"]
- is_server_runing_method.return_value = (True, 100)
+ is_server_runing_method.return_value = (True, 100)
- options.dbms = None
- options.sid_or_sname = "sid"
- try:
- _ambari_server_.mainBody()
- except SystemExit as e:
- self.assertTrue(e.code == 0)
+ try:
+ _ambari_server_.mainBody()
+ except SystemExit as e:
+ self.assertTrue(e.code == 0)
- self.assertTrue(is_server_runing_method.called)
- pass
+ self.assertTrue(is_server_runing_method.called)
+ pass
+ finally:
+ sys.argv = tmp_argv
@not_for_platform(PLATFORM_WINDOWS)
@patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value))
@patch.object(_ambari_server_, "is_server_runing")
- @patch("optparse.OptionParser")
@patch.object(_ambari_server_, "logger")
@patch("ambari_server.serverConfiguration.get_ambari_properties")
@patch.object(_ambari_server_, "setup_logging")
@patch.object(_ambari_server_, "init_logging")
def test_main_test_status_not_running(self, init_logging_mock, setup_logging_mock, get_ambari_properties_mock,
- logger_mock, optionParserMock, is_server_runing_method):
- opm = optionParserMock.return_value
- options = self._create_empty_options_mock()
- del options.exit_message
+ logger_mock, is_server_runing_method):
- args = ["status"]
- opm.parse_args.return_value = (options, args)
+ import sys
+ tmp_argv = sys.argv
+ try:
+ sys.argv = ['ambari-server', "status"]
- is_server_runing_method.return_value = (False, None)
+ is_server_runing_method.return_value = (False, None)
- options.dbms = None
- options.sid_or_sname = "sid"
+ try:
+ _ambari_server_.mainBody()
+ except SystemExit as e:
+ self.assertTrue(e.code == 3)
+ self.assertTrue(is_server_runing_method.called)
+ pass
+ finally:
+ sys.argv = tmp_argv
+
+ @not_for_platform(PLATFORM_WINDOWS)
+ @patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value))
+ @patch.object(_ambari_server_, "logger")
+ @patch("ambari_server.serverConfiguration.get_ambari_properties")
+ @patch.object(_ambari_server_, "setup_logging")
+ @patch.object(_ambari_server_, "init_logging")
+ def test_status_extra_option(self, init_logging_mock, setup_logging_mock, get_ambari_properties_mock,
+ logger_mock):
+
+ import sys
+ tmp_argv = sys.argv
try:
- _ambari_server_.mainBody()
- except SystemExit as e:
- self.assertTrue(e.code == 3)
+ sys.argv = ['ambari-server', "status", '--skip-database-check']
+ flag = False
+ try:
+ _ambari_server_.mainBody()
+ except SystemExit as e:
+ self.assertEquals(e.code, 2)
+ flag = True
- self.assertTrue(is_server_runing_method.called)
- pass
+ self.assertTrue(flag)
+ pass
+ finally:
+ sys.argv = tmp_argv
def test_web_server_startup_timeout(self):
from ambari_server.serverConfiguration import get_web_server_startup_timeout