You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jo...@apache.org on 2016/11/28 13:38:53 UTC

[01/47] ambari git commit: AMBARI-18950. Refactor hive() function in HIVE service (aonishuk)

Repository: ambari
Updated Branches:
  refs/heads/branch-feature-AMBARI-18456 936626bdb -> 1f804d139


AMBARI-18950. Refactor hive() function in HIVE service (aonishuk)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: cfc161299031e5485f8bb96457b1d06acb1bacdc
Parents: c9a4881
Author: Andrew Onishuk <ao...@hortonworks.com>
Authored: Mon Nov 21 18:28:55 2016 +0200
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Mon Nov 21 18:28:55 2016 +0200

----------------------------------------------------------------------
 .../HIVE/0.12.0.2.0/package/scripts/hive.py     | 497 ++++++++++---------
 .../stacks/2.0.6/HIVE/test_hive_metastore.py    | 147 +++---
 .../stacks/2.0.6/HIVE/test_hive_server.py       | 311 ++++++------
 .../stacks/2.1/HIVE/test_hive_metastore.py      | 170 +++++--
 4 files changed, 603 insertions(+), 522 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/cfc16129/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive.py b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive.py
index ec64200..f08c458 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive.py
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive.py
@@ -45,171 +45,10 @@ from ambari_commons.constants import SERVICE
 from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl
 from ambari_commons import OSConst
 
-
-
-@OsFamilyFuncImpl(os_family=OSConst.WINSRV_FAMILY)
-def hive(name=None):
-  import params
-
-  XmlConfig("hive-site.xml",
-            conf_dir = params.hive_conf_dir,
-            configurations = params.config['configurations']['hive-site'],
-            owner=params.hive_user,
-            configuration_attributes=params.config['configuration_attributes']['hive-site']
-  )
-
-  if name in ["hiveserver2","metastore"]:
-    # Manually overriding service logon user & password set by the installation package
-    service_name = params.service_map[name]
-    ServiceConfig(service_name,
-                  action="change_user",
-                  username = params.hive_user,
-                  password = Script.get_password(params.hive_user))
-    Execute(format("cmd /c hadoop fs -mkdir -p {hive_warehouse_dir}"), logoutput=True, user=params.hadoop_user)
-
-  if name == 'metastore':
-    if params.init_metastore_schema:
-      check_schema_created_cmd = format('cmd /c "{hive_bin}\\hive.cmd --service schematool -info '
-                                        '-dbType {hive_metastore_db_type} '
-                                        '-userName {hive_metastore_user_name} '
-                                        '-passWord {hive_metastore_user_passwd!p}'
-                                        '&set EXITCODE=%ERRORLEVEL%&exit /B %EXITCODE%"', #cmd "feature", propagate the process exit code manually
-                                        hive_bin=params.hive_bin,
-                                        hive_metastore_db_type=params.hive_metastore_db_type,
-                                        hive_metastore_user_name=params.hive_metastore_user_name,
-                                        hive_metastore_user_passwd=params.hive_metastore_user_passwd)
-      try:
-        Execute(check_schema_created_cmd)
-      except Fail:
-        create_schema_cmd = format('cmd /c {hive_bin}\\hive.cmd --service schematool -initSchema '
-                                   '-dbType {hive_metastore_db_type} '
-                                   '-userName {hive_metastore_user_name} '
-                                   '-passWord {hive_metastore_user_passwd!p}',
-                                   hive_bin=params.hive_bin,
-                                   hive_metastore_db_type=params.hive_metastore_db_type,
-                                   hive_metastore_user_name=params.hive_metastore_user_name,
-                                   hive_metastore_user_passwd=params.hive_metastore_user_passwd)
-        Execute(create_schema_cmd,
-                user = params.hive_user,
-                logoutput=True
-        )
-
-  if name == "hiveserver2":
-    if params.hive_execution_engine == "tez":
-      # Init the tez app dir in hadoop
-      script_file = __file__.replace('/', os.sep)
-      cmd_file = os.path.normpath(os.path.join(os.path.dirname(script_file), "..", "files", "hiveTezSetup.cmd"))
-
-      Execute("cmd /c " + cmd_file, logoutput=True, user=params.hadoop_user)
-
-
 @OsFamilyFuncImpl(os_family=OsFamilyImpl.DEFAULT)
 def hive(name=None):
   import params
-
-  if name == 'hiveserver2':
-    # copy tarball to HDFS feature not supported
-    if not (params.stack_version_formatted_major and check_stack_feature(StackFeature.COPY_TARBALL_TO_HDFS, params.stack_version_formatted_major)):  
-      params.HdfsResource(params.webhcat_apps_dir,
-                            type="directory",
-                            action="create_on_execute",
-                            owner=params.webhcat_user,
-                            mode=0755
-                          )
-    
-    # Create webhcat dirs.
-    if params.hcat_hdfs_user_dir != params.webhcat_hdfs_user_dir:
-      params.HdfsResource(params.hcat_hdfs_user_dir,
-                           type="directory",
-                           action="create_on_execute",
-                           owner=params.webhcat_user,
-                           mode=params.hcat_hdfs_user_mode
-      )
-
-    params.HdfsResource(params.webhcat_hdfs_user_dir,
-                         type="directory",
-                         action="create_on_execute",
-                         owner=params.webhcat_user,
-                         mode=params.webhcat_hdfs_user_mode
-    )
-
-    # ****** Begin Copy Tarballs ******
-    # *********************************
-    #  if copy tarball to HDFS feature  supported copy mapreduce.tar.gz and tez.tar.gz to HDFS
-    if params.stack_version_formatted_major and check_stack_feature(StackFeature.COPY_TARBALL_TO_HDFS, params.stack_version_formatted_major):
-      copy_to_hdfs("mapreduce", params.user_group, params.hdfs_user, skip=params.sysprep_skip_copy_tarballs_hdfs)
-      copy_to_hdfs("tez", params.user_group, params.hdfs_user, skip=params.sysprep_skip_copy_tarballs_hdfs)
-
-    # Always copy pig.tar.gz and hive.tar.gz using the appropriate mode.
-    # This can use a different source and dest location to account
-    copy_to_hdfs("pig",
-                 params.user_group,
-                 params.hdfs_user,
-                 file_mode=params.tarballs_mode,
-                 custom_source_file=params.pig_tar_source,
-                 custom_dest_file=params.pig_tar_dest_file,
-                 skip=params.sysprep_skip_copy_tarballs_hdfs)
-    copy_to_hdfs("hive",
-                 params.user_group,
-                 params.hdfs_user,
-                 file_mode=params.tarballs_mode,
-                 custom_source_file=params.hive_tar_source,
-                 custom_dest_file=params.hive_tar_dest_file,
-                 skip=params.sysprep_skip_copy_tarballs_hdfs)
-
-    wildcard_tarballs = ["sqoop", "hadoop_streaming"]
-    for tarball_name in wildcard_tarballs:
-      source_file_pattern = eval("params." + tarball_name + "_tar_source")
-      dest_dir = eval("params." + tarball_name + "_tar_dest_dir")
-
-      if source_file_pattern is None or dest_dir is None:
-        continue
-
-      source_files = glob.glob(source_file_pattern) if "*" in source_file_pattern else [source_file_pattern]
-      for source_file in source_files:
-        src_filename = os.path.basename(source_file)
-        dest_file = os.path.join(dest_dir, src_filename)
-
-        copy_to_hdfs(tarball_name,
-                     params.user_group,
-                     params.hdfs_user,
-                     file_mode=params.tarballs_mode,
-                     custom_source_file=source_file,
-                     custom_dest_file=dest_file,
-                     skip=params.sysprep_skip_copy_tarballs_hdfs)
-    # ******* End Copy Tarballs *******
-    # *********************************
     
-    # if warehouse directory is in DFS
-    if not params.whs_dir_protocol or params.whs_dir_protocol == urlparse(params.default_fs).scheme:
-      # Create Hive Metastore Warehouse Dir
-      params.HdfsResource(params.hive_apps_whs_dir,
-                           type="directory",
-                            action="create_on_execute",
-                            owner=params.hive_user,
-                            mode=0777
-      )
-    else:
-      Logger.info(format("Not creating warehouse directory '{hive_apps_whs_dir}', as the location is not in DFS."))
-
-    # Create Hive User Dir
-    params.HdfsResource(params.hive_hdfs_user_dir,
-                         type="directory",
-                          action="create_on_execute",
-                          owner=params.hive_user,
-                          mode=params.hive_hdfs_user_mode
-    )
-    
-    if not is_empty(params.hive_exec_scratchdir) and not urlparse(params.hive_exec_scratchdir).path.startswith("/tmp"):
-      params.HdfsResource(params.hive_exec_scratchdir,
-                           type="directory",
-                           action="create_on_execute",
-                           owner=params.hive_user,
-                           group=params.hdfs_user,
-                           mode=0777) # Hive expects this dir to be writeable by everyone as it is used as a temp dir
-      
-    params.HdfsResource(None, action="execute")
-
   Directory(params.hive_etc_dir_prefix,
             mode=0755
   )
@@ -233,24 +72,6 @@ def hive(name=None):
     atlas_hook_filepath = os.path.join(params.hive_config_dir, params.atlas_hook_filename)
     setup_atlas_hook(SERVICE.HIVE, params.hive_atlas_application_properties, atlas_hook_filepath, params.hive_user, params.user_group)
   
-  if name == 'hiveserver2':
-    XmlConfig("hiveserver2-site.xml",
-              conf_dir=params.hive_server_conf_dir,
-              configurations=params.config['configurations']['hiveserver2-site'],
-              configuration_attributes=params.config['configuration_attributes']['hiveserver2-site'],
-              owner=params.hive_user,
-              group=params.user_group,
-              mode=0644)
-
-  if params.hive_metastore_site_supported and name == 'metastore':
-    XmlConfig("hivemetastore-site.xml",
-              conf_dir=params.hive_server_conf_dir,
-              configurations=params.config['configurations']['hivemetastore-site'],
-              configuration_attributes=params.config['configuration_attributes']['hivemetastore-site'],
-              owner=params.hive_user,
-              group=params.user_group,
-              mode=0644)
-  
   File(format("{hive_config_dir}/hive-env.sh"),
        owner=params.hive_user,
        group=params.user_group,
@@ -271,86 +92,217 @@ def hive(name=None):
        content=Template("hive.conf.j2")
        )
 
-  if name == 'metastore' or name == 'hiveserver2':
-    if params.hive_jdbc_target is not None and not os.path.exists(params.hive_jdbc_target):
-      jdbc_connector(params.hive_jdbc_target, params.hive_previous_jdbc_jar)
-    if params.hive2_jdbc_target is not None and not os.path.exists(params.hive2_jdbc_target):
-      jdbc_connector(params.hive2_jdbc_target, params.hive2_previous_jdbc_jar)
-
   File(format("/usr/lib/ambari-agent/{check_db_connection_jar_name}"),
        content = DownloadSource(format("{jdk_location}{check_db_connection_jar_name}")),
        mode = 0644,
   )
 
+  if name != "client":
+    setup_non_client()
+  if name == 'hiveserver2':
+    setup_hiveserver2()
   if name == 'metastore':
-    File(os.path.join(params.hive_server_conf_dir, "hadoop-metrics2-hivemetastore.properties"),
-         owner=params.hive_user,
-         group=params.user_group,
-         content=Template("hadoop-metrics2-hivemetastore.properties.j2")
-    )
+    setup_metastore() # schematool work
 
-    File(params.start_metastore_path,
-         mode=0755,
-         content=StaticFile('startMetastore.sh')
-    )
-    if params.init_metastore_schema:
-      create_schema_cmd = format("export HIVE_CONF_DIR={hive_server_conf_dir} ; "
-                                 "{hive_schematool_bin}/schematool -initSchema "
-                                 "-dbType {hive_metastore_db_type} "
-                                 "-userName {hive_metastore_user_name} "
-                                 "-passWord {hive_metastore_user_passwd!p} -verbose")
-
-      check_schema_created_cmd = as_user(format("export HIVE_CONF_DIR={hive_server_conf_dir} ; "
-                                        "{hive_schematool_bin}/schematool -info "
-                                        "-dbType {hive_metastore_db_type} "
-                                        "-userName {hive_metastore_user_name} "
-                                        "-passWord {hive_metastore_user_passwd!p} -verbose"), params.hive_user)
-
-      # HACK: in cases with quoted passwords and as_user (which does the quoting as well) !p won't work for hiding passwords.
-      # Fixing it with the hack below:
-      quoted_hive_metastore_user_passwd = quote_bash_args(quote_bash_args(params.hive_metastore_user_passwd))
-      if quoted_hive_metastore_user_passwd[0] == "'" and quoted_hive_metastore_user_passwd[-1] == "'" \
-          or quoted_hive_metastore_user_passwd[0] == '"' and quoted_hive_metastore_user_passwd[-1] == '"':
-        quoted_hive_metastore_user_passwd = quoted_hive_metastore_user_passwd[1:-1]
-      Logger.sensitive_strings[repr(check_schema_created_cmd)] = repr(check_schema_created_cmd.replace(
-          format("-passWord {quoted_hive_metastore_user_passwd}"), "-passWord " + utils.PASSWORDS_HIDE_STRING))
-
-      Execute(create_schema_cmd,
-              not_if = check_schema_created_cmd,
-              user = params.hive_user
-      )
-  elif name == 'hiveserver2':
-    File(params.start_hiveserver2_path,
-         mode=0755,
-         content=Template(format('{start_hiveserver2_script}'))
+def setup_hiveserver2():
+  import params
+  
+  File(params.start_hiveserver2_path,
+       mode=0755,
+       content=Template(format('{start_hiveserver2_script}'))
+  )
+
+  File(os.path.join(params.hive_server_conf_dir, "hadoop-metrics2-hiveserver2.properties"),
+       owner=params.hive_user,
+       group=params.user_group,
+       content=Template("hadoop-metrics2-hiveserver2.properties.j2")
+  )
+  XmlConfig("hiveserver2-site.xml",
+            conf_dir=params.hive_server_conf_dir,
+            configurations=params.config['configurations']['hiveserver2-site'],
+            configuration_attributes=params.config['configuration_attributes']['hiveserver2-site'],
+            owner=params.hive_user,
+            group=params.user_group,
+            mode=0644)
+  
+  # copy tarball to HDFS feature not supported
+  if not (params.stack_version_formatted_major and check_stack_feature(StackFeature.COPY_TARBALL_TO_HDFS, params.stack_version_formatted_major)):  
+    params.HdfsResource(params.webhcat_apps_dir,
+                          type="directory",
+                          action="create_on_execute",
+                          owner=params.webhcat_user,
+                          mode=0755
+                        )
+  
+  # Create webhcat dirs.
+  if params.hcat_hdfs_user_dir != params.webhcat_hdfs_user_dir:
+    params.HdfsResource(params.hcat_hdfs_user_dir,
+                         type="directory",
+                         action="create_on_execute",
+                         owner=params.webhcat_user,
+                         mode=params.hcat_hdfs_user_mode
     )
 
-    File(os.path.join(params.hive_server_conf_dir, "hadoop-metrics2-hiveserver2.properties"),
-         owner=params.hive_user,
-         group=params.user_group,
-         content=Template("hadoop-metrics2-hiveserver2.properties.j2")
+  params.HdfsResource(params.webhcat_hdfs_user_dir,
+                       type="directory",
+                       action="create_on_execute",
+                       owner=params.webhcat_user,
+                       mode=params.webhcat_hdfs_user_mode
+  )
+
+  # ****** Begin Copy Tarballs ******
+  # *********************************
+  #  if copy tarball to HDFS feature  supported copy mapreduce.tar.gz and tez.tar.gz to HDFS
+  if params.stack_version_formatted_major and check_stack_feature(StackFeature.COPY_TARBALL_TO_HDFS, params.stack_version_formatted_major):
+    copy_to_hdfs("mapreduce", params.user_group, params.hdfs_user, skip=params.sysprep_skip_copy_tarballs_hdfs)
+    copy_to_hdfs("tez", params.user_group, params.hdfs_user, skip=params.sysprep_skip_copy_tarballs_hdfs)
+
+  # Always copy pig.tar.gz and hive.tar.gz using the appropriate mode.
+  # This can use a different source and dest location to account
+  copy_to_hdfs("pig",
+               params.user_group,
+               params.hdfs_user,
+               file_mode=params.tarballs_mode,
+               custom_source_file=params.pig_tar_source,
+               custom_dest_file=params.pig_tar_dest_file,
+               skip=params.sysprep_skip_copy_tarballs_hdfs)
+  copy_to_hdfs("hive",
+               params.user_group,
+               params.hdfs_user,
+               file_mode=params.tarballs_mode,
+               custom_source_file=params.hive_tar_source,
+               custom_dest_file=params.hive_tar_dest_file,
+               skip=params.sysprep_skip_copy_tarballs_hdfs)
+
+  wildcard_tarballs = ["sqoop", "hadoop_streaming"]
+  for tarball_name in wildcard_tarballs:
+    source_file_pattern = eval("params." + tarball_name + "_tar_source")
+    dest_dir = eval("params." + tarball_name + "_tar_dest_dir")
+
+    if source_file_pattern is None or dest_dir is None:
+      continue
+
+    source_files = glob.glob(source_file_pattern) if "*" in source_file_pattern else [source_file_pattern]
+    for source_file in source_files:
+      src_filename = os.path.basename(source_file)
+      dest_file = os.path.join(dest_dir, src_filename)
+
+      copy_to_hdfs(tarball_name,
+                   params.user_group,
+                   params.hdfs_user,
+                   file_mode=params.tarballs_mode,
+                   custom_source_file=source_file,
+                   custom_dest_file=dest_file,
+                   skip=params.sysprep_skip_copy_tarballs_hdfs)
+  # ******* End Copy Tarballs *******
+  # *********************************
+  
+  # if warehouse directory is in DFS
+  if not params.whs_dir_protocol or params.whs_dir_protocol == urlparse(params.default_fs).scheme:
+    # Create Hive Metastore Warehouse Dir
+    params.HdfsResource(params.hive_apps_whs_dir,
+                         type="directory",
+                          action="create_on_execute",
+                          owner=params.hive_user,
+                          mode=0777
     )
+  else:
+    Logger.info(format("Not creating warehouse directory '{hive_apps_whs_dir}', as the location is not in DFS."))
+
+  # Create Hive User Dir
+  params.HdfsResource(params.hive_hdfs_user_dir,
+                       type="directory",
+                        action="create_on_execute",
+                        owner=params.hive_user,
+                        mode=params.hive_hdfs_user_mode
+  )
+  
+  if not is_empty(params.hive_exec_scratchdir) and not urlparse(params.hive_exec_scratchdir).path.startswith("/tmp"):
+    params.HdfsResource(params.hive_exec_scratchdir,
+                         type="directory",
+                         action="create_on_execute",
+                         owner=params.hive_user,
+                         group=params.hdfs_user,
+                         mode=0777) # Hive expects this dir to be writeable by everyone as it is used as a temp dir
+    
+  params.HdfsResource(None, action="execute")
+  
+def setup_non_client():
+  import params
+  
+  Directory(params.hive_pid_dir,
+            create_parents = True,
+            cd_access='a',
+            owner=params.hive_user,
+            group=params.user_group,
+            mode=0755)
+  Directory(params.hive_log_dir,
+            create_parents = True,
+            cd_access='a',
+            owner=params.hive_user,
+            group=params.user_group,
+            mode=0755)
+  Directory(params.hive_var_lib,
+            create_parents = True,
+            cd_access='a',
+            owner=params.hive_user,
+            group=params.user_group,
+            mode=0755)
 
-  if name != "client":
-    Directory(params.hive_pid_dir,
-              create_parents = True,
-              cd_access='a',
-              owner=params.hive_user,
-              group=params.user_group,
-              mode=0755)
-    Directory(params.hive_log_dir,
-              create_parents = True,
-              cd_access='a',
-              owner=params.hive_user,
-              group=params.user_group,
-              mode=0755)
-    Directory(params.hive_var_lib,
-              create_parents = True,
-              cd_access='a',
+  if params.hive_jdbc_target is not None and not os.path.exists(params.hive_jdbc_target):
+    jdbc_connector(params.hive_jdbc_target, params.hive_previous_jdbc_jar)
+  if params.hive2_jdbc_target is not None and not os.path.exists(params.hive2_jdbc_target):
+    jdbc_connector(params.hive2_jdbc_target, params.hive2_previous_jdbc_jar)
+    
+def setup_metastore():
+  import params
+  
+  if params.hive_metastore_site_supported:
+    XmlConfig("hivemetastore-site.xml",
+              conf_dir=params.hive_server_conf_dir,
+              configurations=params.config['configurations']['hivemetastore-site'],
+              configuration_attributes=params.config['configuration_attributes']['hivemetastore-site'],
               owner=params.hive_user,
               group=params.user_group,
-              mode=0755)
+              mode=0644)
+  
+  File(os.path.join(params.hive_server_conf_dir, "hadoop-metrics2-hivemetastore.properties"),
+       owner=params.hive_user,
+       group=params.user_group,
+       content=Template("hadoop-metrics2-hivemetastore.properties.j2")
+  )
 
+  File(params.start_metastore_path,
+       mode=0755,
+       content=StaticFile('startMetastore.sh')
+  )
+  if params.init_metastore_schema:
+    create_schema_cmd = format("export HIVE_CONF_DIR={hive_server_conf_dir} ; "
+                               "{hive_schematool_bin}/schematool -initSchema "
+                               "-dbType {hive_metastore_db_type} "
+                               "-userName {hive_metastore_user_name} "
+                               "-passWord {hive_metastore_user_passwd!p} -verbose")
+
+    check_schema_created_cmd = as_user(format("export HIVE_CONF_DIR={hive_server_conf_dir} ; "
+                                      "{hive_schematool_bin}/schematool -info "
+                                      "-dbType {hive_metastore_db_type} "
+                                      "-userName {hive_metastore_user_name} "
+                                      "-passWord {hive_metastore_user_passwd!p} -verbose"), params.hive_user)
+
+    # HACK: in cases with quoted passwords and as_user (which does the quoting as well) !p won't work for hiding passwords.
+    # Fixing it with the hack below:
+    quoted_hive_metastore_user_passwd = quote_bash_args(quote_bash_args(params.hive_metastore_user_passwd))
+    if quoted_hive_metastore_user_passwd[0] == "'" and quoted_hive_metastore_user_passwd[-1] == "'" \
+        or quoted_hive_metastore_user_passwd[0] == '"' and quoted_hive_metastore_user_passwd[-1] == '"':
+      quoted_hive_metastore_user_passwd = quoted_hive_metastore_user_passwd[1:-1]
+    Logger.sensitive_strings[repr(check_schema_created_cmd)] = repr(check_schema_created_cmd.replace(
+        format("-passWord {quoted_hive_metastore_user_passwd}"), "-passWord " + utils.PASSWORDS_HIDE_STRING))
+
+    Execute(create_schema_cmd,
+            not_if = check_schema_created_cmd,
+            user = params.hive_user
+    )
+    
 """
 Writes configuration files required by Hive.
 """
@@ -479,3 +431,58 @@ def jdbc_connector(target, hive_previous_jdbc_jar):
   File(target,
        mode = 0644,
   )
+  
+@OsFamilyFuncImpl(os_family=OSConst.WINSRV_FAMILY)
+def hive(name=None):
+  import params
+
+  XmlConfig("hive-site.xml",
+            conf_dir = params.hive_conf_dir,
+            configurations = params.config['configurations']['hive-site'],
+            owner=params.hive_user,
+            configuration_attributes=params.config['configuration_attributes']['hive-site']
+  )
+
+  if name in ["hiveserver2","metastore"]:
+    # Manually overriding service logon user & password set by the installation package
+    service_name = params.service_map[name]
+    ServiceConfig(service_name,
+                  action="change_user",
+                  username = params.hive_user,
+                  password = Script.get_password(params.hive_user))
+    Execute(format("cmd /c hadoop fs -mkdir -p {hive_warehouse_dir}"), logoutput=True, user=params.hadoop_user)
+
+  if name == 'metastore':
+    if params.init_metastore_schema:
+      check_schema_created_cmd = format('cmd /c "{hive_bin}\\hive.cmd --service schematool -info '
+                                        '-dbType {hive_metastore_db_type} '
+                                        '-userName {hive_metastore_user_name} '
+                                        '-passWord {hive_metastore_user_passwd!p}'
+                                        '&set EXITCODE=%ERRORLEVEL%&exit /B %EXITCODE%"', #cmd "feature", propagate the process exit code manually
+                                        hive_bin=params.hive_bin,
+                                        hive_metastore_db_type=params.hive_metastore_db_type,
+                                        hive_metastore_user_name=params.hive_metastore_user_name,
+                                        hive_metastore_user_passwd=params.hive_metastore_user_passwd)
+      try:
+        Execute(check_schema_created_cmd)
+      except Fail:
+        create_schema_cmd = format('cmd /c {hive_bin}\\hive.cmd --service schematool -initSchema '
+                                   '-dbType {hive_metastore_db_type} '
+                                   '-userName {hive_metastore_user_name} '
+                                   '-passWord {hive_metastore_user_passwd!p}',
+                                   hive_bin=params.hive_bin,
+                                   hive_metastore_db_type=params.hive_metastore_db_type,
+                                   hive_metastore_user_name=params.hive_metastore_user_name,
+                                   hive_metastore_user_passwd=params.hive_metastore_user_passwd)
+        Execute(create_schema_cmd,
+                user = params.hive_user,
+                logoutput=True
+        )
+
+  if name == "hiveserver2":
+    if params.hive_execution_engine == "tez":
+      # Init the tez app dir in hadoop
+      script_file = __file__.replace('/', os.sep)
+      cmd_file = os.path.normpath(os.path.join(os.path.dirname(script_file), "..", "files", "hiveTezSetup.cmd"))
+
+      Execute("cmd /c " + cmd_file, logoutput=True, user=params.hadoop_user)

http://git-wip-us.apache.org/repos/asf/ambari/blob/cfc16129/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_metastore.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_metastore.py b/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_metastore.py
index c79e773..799ee39 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_metastore.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_metastore.py
@@ -212,33 +212,12 @@ class TestHiveMetastore(RMFTestCase):
                               group = 'root',
                               mode = 0644,
                               )
-    self.assertResourceCalled('Execute', ('cp',
-                                          '--remove-destination',
-                                          '/usr/share/java/mysql-connector-java.jar',
-                                          '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar'),
-                              path = ['/bin', '/usr/bin/'],
-                              sudo = True,
-                              )
-    self.assertResourceCalled('File', '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar',
-        mode = 0644,
-    )
+
     self.assertResourceCalled('File', '/usr/lib/ambari-agent/DBConnectionVerification.jar',
         content = DownloadSource('http://c6401.ambari.apache.org:8080/resources/DBConnectionVerification.jar'),
         mode = 0644,
     )
-    self.assertResourceCalled('File', '/etc/hive/conf.server/hadoop-metrics2-hivemetastore.properties',
-                              owner = 'hive',
-                              group = 'hadoop',
-                              content = Template('hadoop-metrics2-hivemetastore.properties.j2')
-                              )
-    self.assertResourceCalled('File', '/tmp/start_metastore_script',
-                              content = StaticFile('startMetastore.sh'),
-                              mode = 0755,
-                              )
-    self.assertResourceCalled('Execute', 'export HIVE_CONF_DIR=/etc/hive/conf.server ; /usr/hdp/current/hive-server2/bin/schematool -initSchema -dbType mysql -userName hive -passWord \'!`"\'"\'"\' 1\' -verbose',
-        not_if = 'ambari-sudo.sh su hive -l -s /bin/bash -c \'[RMF_EXPORT_PLACEHOLDER]export HIVE_CONF_DIR=/etc/hive/conf.server ; /usr/hdp/current/hive-server2/bin/schematool -info -dbType mysql -userName hive -passWord \'"\'"\'!`"\'"\'"\'"\'"\'"\'"\'"\'"\' 1\'"\'"\' -verbose\'',
-        user = 'hive',
-    )
+
     self.assertResourceCalled('Directory', '/var/run/hive',
                               owner = 'hive',
                               group = 'hadoop',
@@ -260,6 +239,30 @@ class TestHiveMetastore(RMFTestCase):
                               create_parents = True,
                               cd_access = 'a',
                               )
+    
+    self.assertResourceCalled('Execute', ('cp',
+                                          '--remove-destination',
+                                          '/usr/share/java/mysql-connector-java.jar',
+                                          '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar'),
+                              path = ['/bin', '/usr/bin/'],
+                              sudo = True,
+                              )
+    self.assertResourceCalled('File', '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar',
+        mode = 0644,
+    )
+    self.assertResourceCalled('File', '/etc/hive/conf.server/hadoop-metrics2-hivemetastore.properties',
+                              owner = 'hive',
+                              group = 'hadoop',
+                              content = Template('hadoop-metrics2-hivemetastore.properties.j2')
+                              )
+    self.assertResourceCalled('File', '/tmp/start_metastore_script',
+                              content = StaticFile('startMetastore.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('Execute', 'export HIVE_CONF_DIR=/etc/hive/conf.server ; /usr/hdp/current/hive-server2/bin/schematool -initSchema -dbType mysql -userName hive -passWord \'!`"\'"\'"\' 1\' -verbose',
+        not_if = 'ambari-sudo.sh su hive -l -s /bin/bash -c \'[RMF_EXPORT_PLACEHOLDER]export HIVE_CONF_DIR=/etc/hive/conf.server ; /usr/hdp/current/hive-server2/bin/schematool -info -dbType mysql -userName hive -passWord \'"\'"\'!`"\'"\'"\'"\'"\'"\'"\'"\'"\' 1\'"\'"\' -verbose\'',
+        user = 'hive',
+    )
 
   def assert_configure_secured(self):
     self.assertResourceCalled('Directory', '/etc/hive',
@@ -325,33 +328,10 @@ class TestHiveMetastore(RMFTestCase):
                               group = 'root',
                               mode = 0644,
                               )
-    self.assertResourceCalled('Execute', ('cp',
-                                          '--remove-destination',
-                                          '/usr/share/java/mysql-connector-java.jar',
-                                          '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar'),
-                              path = ['/bin', '/usr/bin/'],
-                              sudo = True,
-                              )
-    self.assertResourceCalled('File', '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar',
-        mode = 0644,
-    )
     self.assertResourceCalled('File', '/usr/lib/ambari-agent/DBConnectionVerification.jar',
         content = DownloadSource('http://c6401.ambari.apache.org:8080/resources/DBConnectionVerification.jar'),
         mode = 0644,
     )
-    self.assertResourceCalled('File', '/etc/hive/conf.server/hadoop-metrics2-hivemetastore.properties',
-                              owner = 'hive',
-                              group = 'hadoop',
-                              content = Template('hadoop-metrics2-hivemetastore.properties.j2')
-                              )
-    self.assertResourceCalled('File', '/tmp/start_metastore_script',
-                              content = StaticFile('startMetastore.sh'),
-                              mode = 0755,
-                              )
-    self.assertResourceCalled('Execute', 'export HIVE_CONF_DIR=/etc/hive/conf.server ; /usr/hdp/current/hive-server2/bin/schematool -initSchema -dbType mysql -userName hive -passWord \'!`"\'"\'"\' 1\' -verbose',
-        not_if = 'ambari-sudo.sh su hive -l -s /bin/bash -c \'[RMF_EXPORT_PLACEHOLDER]export HIVE_CONF_DIR=/etc/hive/conf.server ; /usr/hdp/current/hive-server2/bin/schematool -info -dbType mysql -userName hive -passWord \'"\'"\'!`"\'"\'"\'"\'"\'"\'"\'"\'"\' 1\'"\'"\' -verbose\'',
-        user = 'hive',
-    )
     self.assertResourceCalled('Directory', '/var/run/hive',
                               owner = 'hive',
                               group = 'hadoop',
@@ -373,6 +353,29 @@ class TestHiveMetastore(RMFTestCase):
                               create_parents = True,
                               cd_access = 'a',
                               )
+    self.assertResourceCalled('Execute', ('cp',
+                                          '--remove-destination',
+                                          '/usr/share/java/mysql-connector-java.jar',
+                                          '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar'),
+                              path = ['/bin', '/usr/bin/'],
+                              sudo = True,
+                              )
+    self.assertResourceCalled('File', '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar',
+        mode = 0644,
+    )
+    self.assertResourceCalled('File', '/etc/hive/conf.server/hadoop-metrics2-hivemetastore.properties',
+                              owner = 'hive',
+                              group = 'hadoop',
+                              content = Template('hadoop-metrics2-hivemetastore.properties.j2')
+                              )
+    self.assertResourceCalled('File', '/tmp/start_metastore_script',
+                              content = StaticFile('startMetastore.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('Execute', 'export HIVE_CONF_DIR=/etc/hive/conf.server ; /usr/hdp/current/hive-server2/bin/schematool -initSchema -dbType mysql -userName hive -passWord \'!`"\'"\'"\' 1\' -verbose',
+        not_if = 'ambari-sudo.sh su hive -l -s /bin/bash -c \'[RMF_EXPORT_PLACEHOLDER]export HIVE_CONF_DIR=/etc/hive/conf.server ; /usr/hdp/current/hive-server2/bin/schematool -info -dbType mysql -userName hive -passWord \'"\'"\'!`"\'"\'"\'"\'"\'"\'"\'"\'"\' 1\'"\'"\' -verbose\'',
+        user = 'hive',
+    )
 
   @patch("resource_management.core.shell.call")
   @patch("resource_management.libraries.functions.get_stack_version")
@@ -464,36 +467,11 @@ class TestHiveMetastore(RMFTestCase):
                               group = 'root',
                               mode = 0644)
 
-    self.assertResourceCalled('Execute', ('cp',
-                                          '--remove-destination',
-                                          '/usr/share/java/mysql-connector-java.jar',
-                                          '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar'),
-                              path = ['/bin', '/usr/bin/'],
-                              sudo = True)
-
-    self.assertResourceCalled('File', '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar',
-        mode = 0644)
-
     self.assertResourceCalled('File', '/usr/lib/ambari-agent/DBConnectionVerification.jar',
         content = DownloadSource('http://c6401.ambari.apache.org:8080/resources/DBConnectionVerification.jar'),
         mode = 0644,
     )
-
-    self.assertResourceCalled('File', '/usr/hdp/current/hive-server2/conf/conf.server/hadoop-metrics2-hivemetastore.properties',
-                              owner = 'hive',
-                              group = 'hadoop',
-                              content = Template('hadoop-metrics2-hivemetastore.properties.j2')
-                              )
-    self.assertResourceCalled('File', '/tmp/start_metastore_script',
-                              content = StaticFile('startMetastore.sh'),
-                              mode = 0755)
-
-    self.maxDiff = None
-
-    self.assertResourceCalled('Execute', 'export HIVE_CONF_DIR=/usr/hdp/current/hive-server2/conf/conf.server ; /usr/hdp/current/hive-server2/bin/schematool -initSchema -dbType mysql -userName hive -passWord aaa -verbose',
-        not_if = "ambari-sudo.sh su hive -l -s /bin/bash -c '[RMF_EXPORT_PLACEHOLDER]export HIVE_CONF_DIR=/usr/hdp/current/hive-server2/conf/conf.server ; /usr/hdp/current/hive-server2/bin/schematool -info -dbType mysql -userName hive -passWord aaa -verbose'",
-        user = 'hive')
-
+    
     self.assertResourceCalled('Directory', '/var/run/hive',
                               owner = 'hive',
                               group = 'hadoop',
@@ -514,6 +492,31 @@ class TestHiveMetastore(RMFTestCase):
                               mode = 0755,
                               create_parents = True,
                               cd_access = 'a')
+    
+    self.assertResourceCalled('Execute', ('cp',
+                                          '--remove-destination',
+                                          '/usr/share/java/mysql-connector-java.jar',
+                                          '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar'),
+                              path = ['/bin', '/usr/bin/'],
+                              sudo = True)
+
+    self.assertResourceCalled('File', '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar',
+        mode = 0644)
+
+    self.assertResourceCalled('File', '/usr/hdp/current/hive-server2/conf/conf.server/hadoop-metrics2-hivemetastore.properties',
+                              owner = 'hive',
+                              group = 'hadoop',
+                              content = Template('hadoop-metrics2-hivemetastore.properties.j2')
+                              )
+    self.assertResourceCalled('File', '/tmp/start_metastore_script',
+                              content = StaticFile('startMetastore.sh'),
+                              mode = 0755)
+
+    self.maxDiff = None
+
+    self.assertResourceCalled('Execute', 'export HIVE_CONF_DIR=/usr/hdp/current/hive-server2/conf/conf.server ; /usr/hdp/current/hive-server2/bin/schematool -initSchema -dbType mysql -userName hive -passWord aaa -verbose',
+        not_if = "ambari-sudo.sh su hive -l -s /bin/bash -c '[RMF_EXPORT_PLACEHOLDER]export HIVE_CONF_DIR=/usr/hdp/current/hive-server2/conf/conf.server ; /usr/hdp/current/hive-server2/bin/schematool -info -dbType mysql -userName hive -passWord aaa -verbose'",
+        user = 'hive')
 
     self.assertResourceCalled('Execute', '/tmp/start_metastore_script /var/log/hive/hive.out /var/log/hive/hive.err /var/run/hive/hive.pid /usr/hdp/current/hive-server2/conf/conf.server /var/log/hive',
         environment = {'HADOOP_HOME': '/usr/hdp/2.3.0.0-1234/hadoop', 'JAVA_HOME': u'/usr/jdk64/jdk1.7.0_45', 'HIVE_BIN': '/usr/hdp/current/hive-server2/bin/hive'},

http://git-wip-us.apache.org/repos/asf/ambari/blob/cfc16129/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_server.py b/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_server.py
index 35d2144..8b866d6 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_server.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_server.py
@@ -322,6 +322,128 @@ class TestHiveServer(RMFTestCase):
     self.assertNoMoreResources()
 
   def assert_configure_default(self, no_tmp = False, default_fs_default='hdfs://c6401.ambari.apache.org:8020'):
+
+    if self._testMethodName == "test_socket_timeout":
+      # This test will not call any more resources.
+      return
+    
+    self.assertResourceCalled('Directory', '/etc/hive',
+                              mode=0755,
+    )
+    self.assertResourceCalled('Directory', '/usr/hdp/current/hive-server2/conf',
+                              owner='hive',
+                              group='hadoop',
+                              create_parents = True,
+    )
+
+    self.assertResourceCalled('XmlConfig', 'mapred-site.xml',
+                              group='hadoop',
+                              conf_dir='/usr/hdp/current/hive-server2/conf',
+                              mode=0644,
+                              configuration_attributes={u'final': {u'mapred.healthChecker.script.path': u'true',
+                                                                   u'mapreduce.jobtracker.staging.root.dir': u'true'}},
+                              owner='hive',
+                              configurations=self.getConfig()['configurations']['mapred-site'],
+    )
+    self.assertResourceCalled('File', '/usr/hdp/current/hive-server2/conf/hive-default.xml.template',
+                              owner='hive',
+                              group='hadoop',
+    )
+    self.assertResourceCalled('File', '/usr/hdp/current/hive-server2/conf/hive-env.sh.template',
+                              owner='hive',
+                              group='hadoop',
+    )
+    self.assertResourceCalled('File', '/usr/hdp/current/hive-server2/conf/hive-exec-log4j.properties',
+                              content='log4jproperties\nline2',
+                              owner='hive',
+                              group='hadoop',
+                              mode=0644,
+    )
+    self.assertResourceCalled('File', '/usr/hdp/current/hive-server2/conf/hive-log4j.properties',
+                              content='log4jproperties\nline2',
+                              owner='hive',
+                              group='hadoop',
+                              mode=0644,
+    )
+    self.assertResourceCalled('XmlConfig', 'hive-site.xml',
+                              group='hadoop',
+                              conf_dir='/etc/hive/conf.server',
+                              mode=0644,
+                              configuration_attributes={u'final': {u'hive.optimize.bucketmapjoin.sortedmerge': u'true',
+                                                                   u'javax.jdo.option.ConnectionDriverName': u'true',
+                                                                   u'javax.jdo.option.ConnectionPassword': u'true'}},
+                              owner='hive',
+                              configurations=self.getConfig()['configurations']['hive-site'],
+    )
+    self.assertResourceCalled('File', '/etc/hive/conf.server/hive-env.sh',
+                              content=InlineTemplate(self.getConfig()['configurations']['hive-env']['content']),
+                              owner='hive',
+                              group='hadoop',
+    )
+    self.assertResourceCalled('Directory', '/etc/security/limits.d',
+                              owner='root',
+                              group='root',
+                              create_parents = True,
+    )
+    self.assertResourceCalled('File', '/etc/security/limits.d/hive.conf',
+                              content=Template('hive.conf.j2'),
+                              owner='root',
+                              group='root',
+                              mode=0644,
+    )
+    self.assertResourceCalled('File', '/usr/lib/ambari-agent/DBConnectionVerification.jar',
+                              content=DownloadSource('http://c6401.ambari.apache.org:8080/resources'
+                                                     '/DBConnectionVerification.jar'),
+                              mode=0644,
+    )
+    self.assertResourceCalled('Directory', '/var/run/hive',
+                              owner='hive',
+                              mode=0755,
+                              group='hadoop',
+                              create_parents = True,
+                              cd_access='a',
+    )
+    self.assertResourceCalled('Directory', '/var/log/hive',
+                              owner='hive',
+                              mode=0755,
+                              group='hadoop',
+                              create_parents = True,
+                              cd_access='a',
+    )
+    self.assertResourceCalled('Directory', '/var/lib/hive',
+                              owner='hive',
+                              mode=0755,
+                              group='hadoop',
+                              create_parents = True,
+                              cd_access='a',
+    )
+    self.assertResourceCalled('Execute', ('cp',
+                                          '--remove-destination',
+                                          '/usr/share/java/mysql-connector-java.jar',
+                                          '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar'),
+                              path=['/bin', '/usr/bin/'],
+                              sudo=True,
+    )
+    self.assertResourceCalled('File', '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar',
+                              mode=0644,
+    )
+    self.assertResourceCalled('File', '/tmp/start_hiveserver2_script',
+                              content=Template('startHiveserver2.sh.j2'),
+                              mode=0755,
+    )
+    self.assertResourceCalled('File', '/etc/hive/conf.server/hadoop-metrics2-hiveserver2.properties',
+                              owner = 'hive',
+                              group = 'hadoop',
+                              content = Template('hadoop-metrics2-hiveserver2.properties.j2')
+                              )
+    self.assertResourceCalled('XmlConfig', 'hiveserver2-site.xml',
+      group = 'hadoop',
+      conf_dir = '/etc/hive/conf.server',
+      mode = 0644,
+      owner = 'hive',
+      configuration_attributes = self.getConfig()['configuration_attributes']['hiveserver2-site'],
+      configurations = self.getConfig()['configurations']['hiveserver2-site'],
+    )
     # Verify creating of Hcat and Hive directories
     self.assertResourceCalled('HdfsResource', '/apps/webhcat',
         immutable_paths = self.DEFAULT_IMMUTABLE_PATHS,
@@ -352,10 +474,6 @@ class TestHiveServer(RMFTestCase):
         mode = 0755,
     )
 
-    if self._testMethodName == "test_socket_timeout":
-      # This test will not call any more resources.
-      return
-
     self.assertResourceCalled('HdfsResource', '/apps/hive/warehouse',
         immutable_paths = self.DEFAULT_IMMUTABLE_PATHS,
         security_enabled = False,
@@ -411,6 +529,8 @@ class TestHiveServer(RMFTestCase):
         action = ['execute'], hdfs_resource_ignore_file='/var/lib/ambari-agent/data/.hdfs_resource_ignore', hdfs_site=self.getConfig()['configurations']['hdfs-site'], principal_name='missing_principal', default_fs=default_fs_default,
         hadoop_conf_dir = '/etc/hadoop/conf',
     )
+
+  def assert_configure_secured(self):
     self.assertResourceCalled('Directory', '/etc/hive',
                               mode=0755,
     )
@@ -419,7 +539,6 @@ class TestHiveServer(RMFTestCase):
                               group='hadoop',
                               create_parents = True,
     )
-
     self.assertResourceCalled('XmlConfig', 'mapred-site.xml',
                               group='hadoop',
                               conf_dir='/usr/hdp/current/hive-server2/conf',
@@ -459,14 +578,6 @@ class TestHiveServer(RMFTestCase):
                               owner='hive',
                               configurations=self.getConfig()['configurations']['hive-site'],
     )
-    self.assertResourceCalled('XmlConfig', 'hiveserver2-site.xml',
-      group = 'hadoop',
-      conf_dir = '/etc/hive/conf.server',
-      mode = 0644,
-      owner = 'hive',
-      configuration_attributes = self.getConfig()['configuration_attributes']['hiveserver2-site'],
-      configurations = self.getConfig()['configurations']['hiveserver2-site'],
-    )
     self.assertResourceCalled('File', '/etc/hive/conf.server/hive-env.sh',
                               content=InlineTemplate(self.getConfig()['configurations']['hive-env']['content']),
                               owner='hive',
@@ -483,53 +594,59 @@ class TestHiveServer(RMFTestCase):
                               group='root',
                               mode=0644,
     )
-    self.assertResourceCalled('Execute', ('cp',
-                                          '--remove-destination',
-                                          '/usr/share/java/mysql-connector-java.jar',
-                                          '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar'),
-                              path=['/bin', '/usr/bin/'],
-                              sudo=True,
-    )
-    self.assertResourceCalled('File', '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar',
-                              mode=0644,
-    )
     self.assertResourceCalled('File', '/usr/lib/ambari-agent/DBConnectionVerification.jar',
-                              content=DownloadSource('http://c6401.ambari.apache.org:8080/resources'
-                                                     '/DBConnectionVerification.jar'),
+                              content=DownloadSource(
+                                'http://c6401.ambari.apache.org:8080/resources/DBConnectionVerification.jar'),
                               mode=0644,
     )
-    self.assertResourceCalled('File', '/tmp/start_hiveserver2_script',
-                              content=Template('startHiveserver2.sh.j2'),
-                              mode=0755,
-    )
-    self.assertResourceCalled('File', '/etc/hive/conf.server/hadoop-metrics2-hiveserver2.properties',
-                              owner = 'hive',
-                              group = 'hadoop',
-                              content = Template('hadoop-metrics2-hiveserver2.properties.j2')
-                              )
     self.assertResourceCalled('Directory', '/var/run/hive',
                               owner='hive',
-                              mode=0755,
                               group='hadoop',
+                              mode=0755,
                               create_parents = True,
                               cd_access='a',
     )
     self.assertResourceCalled('Directory', '/var/log/hive',
                               owner='hive',
-                              mode=0755,
                               group='hadoop',
+                              mode=0755,
                               create_parents = True,
                               cd_access='a',
     )
     self.assertResourceCalled('Directory', '/var/lib/hive',
                               owner='hive',
-                              mode=0755,
                               group='hadoop',
+                              mode=0755,
                               create_parents = True,
                               cd_access='a',
     )
-
-  def assert_configure_secured(self):
+    self.assertResourceCalled('Execute', ('cp',
+                                          '--remove-destination',
+                                          '/usr/share/java/mysql-connector-java.jar',
+                                          '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar'),
+                              path=['/bin', '/usr/bin/'],
+                              sudo=True,
+    )
+    self.assertResourceCalled('File', '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar',
+                              mode=0644,
+    )
+    self.assertResourceCalled('File', '/tmp/start_hiveserver2_script',
+                              content=Template('startHiveserver2.sh.j2'),
+                              mode=0755,
+    )
+    self.assertResourceCalled('File', '/etc/hive/conf.server/hadoop-metrics2-hiveserver2.properties',
+                              owner = 'hive',
+                              group = 'hadoop',
+                              content = Template('hadoop-metrics2-hiveserver2.properties.j2')
+    )
+    self.assertResourceCalled('XmlConfig', 'hiveserver2-site.xml',
+      group = 'hadoop',
+      conf_dir = '/etc/hive/conf.server',
+      mode = 0644,
+      owner = 'hive',
+      configuration_attributes = self.getConfig()['configuration_attributes']['hiveserver2-site'],
+      configurations = self.getConfig()['configurations']['hiveserver2-site'],
+    )
     self.assertResourceCalled('HdfsResource', '/apps/webhcat',
         immutable_paths = self.DEFAULT_IMMUTABLE_PATHS,
         security_enabled = True,
@@ -613,122 +730,6 @@ class TestHiveServer(RMFTestCase):
         action = ['execute'], hdfs_resource_ignore_file='/var/lib/ambari-agent/data/.hdfs_resource_ignore', hdfs_site=self.getConfig()['configurations']['hdfs-site'], principal_name='hdfs', default_fs='hdfs://c6401.ambari.apache.org:8020',
         hadoop_conf_dir = '/etc/hadoop/conf',
     )
-    self.assertResourceCalled('Directory', '/etc/hive',
-                              mode=0755,
-    )
-    self.assertResourceCalled('Directory', '/usr/hdp/current/hive-server2/conf',
-                              owner='hive',
-                              group='hadoop',
-                              create_parents = True,
-    )
-    self.assertResourceCalled('XmlConfig', 'mapred-site.xml',
-                              group='hadoop',
-                              conf_dir='/usr/hdp/current/hive-server2/conf',
-                              mode=0644,
-                              configuration_attributes={u'final': {u'mapred.healthChecker.script.path': u'true',
-                                                                   u'mapreduce.jobtracker.staging.root.dir': u'true'}},
-                              owner='hive',
-                              configurations=self.getConfig()['configurations']['mapred-site'],
-    )
-    self.assertResourceCalled('File', '/usr/hdp/current/hive-server2/conf/hive-default.xml.template',
-                              owner='hive',
-                              group='hadoop',
-    )
-    self.assertResourceCalled('File', '/usr/hdp/current/hive-server2/conf/hive-env.sh.template',
-                              owner='hive',
-                              group='hadoop',
-    )
-    self.assertResourceCalled('File', '/usr/hdp/current/hive-server2/conf/hive-exec-log4j.properties',
-                              content='log4jproperties\nline2',
-                              owner='hive',
-                              group='hadoop',
-                              mode=0644,
-    )
-    self.assertResourceCalled('File', '/usr/hdp/current/hive-server2/conf/hive-log4j.properties',
-                              content='log4jproperties\nline2',
-                              owner='hive',
-                              group='hadoop',
-                              mode=0644,
-    )
-    self.assertResourceCalled('XmlConfig', 'hive-site.xml',
-                              group='hadoop',
-                              conf_dir='/etc/hive/conf.server',
-                              mode=0644,
-                              configuration_attributes={u'final': {u'hive.optimize.bucketmapjoin.sortedmerge': u'true',
-                                                                   u'javax.jdo.option.ConnectionDriverName': u'true',
-                                                                   u'javax.jdo.option.ConnectionPassword': u'true'}},
-                              owner='hive',
-                              configurations=self.getConfig()['configurations']['hive-site'],
-    )
-    self.assertResourceCalled('XmlConfig', 'hiveserver2-site.xml',
-      group = 'hadoop',
-      conf_dir = '/etc/hive/conf.server',
-      mode = 0644,
-      owner = 'hive',
-      configuration_attributes = self.getConfig()['configuration_attributes']['hiveserver2-site'],
-      configurations = self.getConfig()['configurations']['hiveserver2-site'],
-    )
-    self.assertResourceCalled('File', '/etc/hive/conf.server/hive-env.sh',
-                              content=InlineTemplate(self.getConfig()['configurations']['hive-env']['content']),
-                              owner='hive',
-                              group='hadoop',
-    )
-    self.assertResourceCalled('Directory', '/etc/security/limits.d',
-                              owner='root',
-                              group='root',
-                              create_parents = True,
-    )
-    self.assertResourceCalled('File', '/etc/security/limits.d/hive.conf',
-                              content=Template('hive.conf.j2'),
-                              owner='root',
-                              group='root',
-                              mode=0644,
-    )
-    self.assertResourceCalled('Execute', ('cp',
-                                          '--remove-destination',
-                                          '/usr/share/java/mysql-connector-java.jar',
-                                          '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar'),
-                              path=['/bin', '/usr/bin/'],
-                              sudo=True,
-    )
-    self.assertResourceCalled('File', '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar',
-                              mode=0644,
-    )
-    self.assertResourceCalled('File', '/usr/lib/ambari-agent/DBConnectionVerification.jar',
-                              content=DownloadSource(
-                                'http://c6401.ambari.apache.org:8080/resources/DBConnectionVerification.jar'),
-                              mode=0644,
-    )
-    self.assertResourceCalled('File', '/tmp/start_hiveserver2_script',
-                              content=Template('startHiveserver2.sh.j2'),
-                              mode=0755,
-    )
-    self.assertResourceCalled('File', '/etc/hive/conf.server/hadoop-metrics2-hiveserver2.properties',
-                              owner = 'hive',
-                              group = 'hadoop',
-                              content = Template('hadoop-metrics2-hiveserver2.properties.j2')
-    )
-    self.assertResourceCalled('Directory', '/var/run/hive',
-                              owner='hive',
-                              group='hadoop',
-                              mode=0755,
-                              create_parents = True,
-                              cd_access='a',
-    )
-    self.assertResourceCalled('Directory', '/var/log/hive',
-                              owner='hive',
-                              group='hadoop',
-                              mode=0755,
-                              create_parents = True,
-                              cd_access='a',
-    )
-    self.assertResourceCalled('Directory', '/var/lib/hive',
-                              owner='hive',
-                              group='hadoop',
-                              mode=0755,
-                              create_parents = True,
-                              cd_access='a',
-    )
 
   @patch("time.time")
   @patch("socket.socket")

http://git-wip-us.apache.org/repos/asf/ambari/blob/cfc16129/ambari-server/src/test/python/stacks/2.1/HIVE/test_hive_metastore.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.1/HIVE/test_hive_metastore.py b/ambari-server/src/test/python/stacks/2.1/HIVE/test_hive_metastore.py
index b398ac8..5ee09f6 100644
--- a/ambari-server/src/test/python/stacks/2.1/HIVE/test_hive_metastore.py
+++ b/ambari-server/src/test/python/stacks/2.1/HIVE/test_hive_metastore.py
@@ -238,33 +238,10 @@ class TestHiveMetastore(RMFTestCase):
                               group = 'root',
                               mode = 0644,
                               )
-    self.assertResourceCalled('Execute', ('cp',
-                                          '--remove-destination',
-                                          '/usr/share/java/mysql-connector-java.jar',
-                                          '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar'),
-                              path = ['/bin', '/usr/bin/'],
-                              sudo = True,
-                              )
-    self.assertResourceCalled('File', '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar',
-        mode = 0644,
-    )
     self.assertResourceCalled('File', '/usr/lib/ambari-agent/DBConnectionVerification.jar',
         content = DownloadSource('http://c6401.ambari.apache.org:8080/resources/DBConnectionVerification.jar'),
         mode = 0644,
     )
-    self.assertResourceCalled('File', '/etc/hive/conf.server/hadoop-metrics2-hivemetastore.properties',
-                              owner = 'hive',
-                              group = 'hadoop',
-                              content = Template('hadoop-metrics2-hivemetastore.properties.j2')
-                              )
-    self.assertResourceCalled('File', '/tmp/start_metastore_script',
-                              content = StaticFile('startMetastore.sh'),
-                              mode = 0755,
-                              )
-    self.assertResourceCalled('Execute', 'export HIVE_CONF_DIR=/etc/hive/conf.server ; /usr/hdp/current/hive-server2/bin/schematool -initSchema -dbType mysql -userName hive -passWord aaa -verbose',
-        not_if = "ambari-sudo.sh su hive -l -s /bin/bash -c '[RMF_EXPORT_PLACEHOLDER]export HIVE_CONF_DIR=/etc/hive/conf.server ; /usr/hdp/current/hive-server2/bin/schematool -info -dbType mysql -userName hive -passWord aaa -verbose'",
-        user = 'hive',
-    )
     self.assertResourceCalled('Directory', '/var/run/hive',
                               owner = 'hive',
                               group = 'hadoop',
@@ -286,6 +263,29 @@ class TestHiveMetastore(RMFTestCase):
                               create_parents = True,
                               cd_access = 'a',
                               )
+    self.assertResourceCalled('Execute', ('cp',
+     '--remove-destination',
+     '/usr/share/java/mysql-connector-java.jar',
+     '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar'),
+        path = ['/bin', '/usr/bin/'],
+        sudo = True,
+    )
+    self.assertResourceCalled('File', '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar',
+        mode = 0644,
+    )
+    self.assertResourceCalled('File', '/etc/hive/conf.server/hadoop-metrics2-hivemetastore.properties',
+                              owner = 'hive',
+                              group = 'hadoop',
+                              content = Template('hadoop-metrics2-hivemetastore.properties.j2')
+                              )
+    self.assertResourceCalled('File', '/tmp/start_metastore_script',
+                              content = StaticFile('startMetastore.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('Execute', 'export HIVE_CONF_DIR=/etc/hive/conf.server ; /usr/hdp/current/hive-server2/bin/schematool -initSchema -dbType mysql -userName hive -passWord aaa -verbose',
+        not_if = "ambari-sudo.sh su hive -l -s /bin/bash -c '[RMF_EXPORT_PLACEHOLDER]export HIVE_CONF_DIR=/etc/hive/conf.server ; /usr/hdp/current/hive-server2/bin/schematool -info -dbType mysql -userName hive -passWord aaa -verbose'",
+        user = 'hive',
+    )
 
   def assert_configure_secured(self):
     self.assertResourceCalled('Directory', '/etc/hive',
@@ -339,35 +339,10 @@ class TestHiveMetastore(RMFTestCase):
                               group = 'root',
                               mode = 0644,
                               )
-    self.assertResourceCalled('Execute', ('cp',
-                                          '--remove-destination',
-                                          '/usr/share/java/mysql-connector-java.jar',
-                                          '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar'),
-                              path = ['/bin', '/usr/bin/'],
-                              sudo = True,
-                              )
-    self.assertResourceCalled('File', '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar',
-        mode = 0644,
-    )
     self.assertResourceCalled('File', '/usr/lib/ambari-agent/DBConnectionVerification.jar',
         content = DownloadSource('http://c6401.ambari.apache.org:8080/resources/DBConnectionVerification.jar'),
         mode = 0644,
     )
-
-    self.assertResourceCalled('File', '/etc/hive/conf.server/hadoop-metrics2-hivemetastore.properties',
-                              owner = 'hive',
-                              group = 'hadoop',
-                              content = Template('hadoop-metrics2-hivemetastore.properties.j2')
-                              )
-
-    self.assertResourceCalled('File', '/tmp/start_metastore_script',
-                              content = StaticFile('startMetastore.sh'),
-                              mode = 0755,
-                              )
-    self.assertResourceCalled('Execute', 'export HIVE_CONF_DIR=/etc/hive/conf.server ; /usr/hdp/current/hive-server2/bin/schematool -initSchema -dbType mysql -userName hive -passWord asd -verbose',
-        not_if = "ambari-sudo.sh su hive -l -s /bin/bash -c '[RMF_EXPORT_PLACEHOLDER]export HIVE_CONF_DIR=/etc/hive/conf.server ; /usr/hdp/current/hive-server2/bin/schematool -info -dbType mysql -userName hive -passWord asd -verbose'",
-        user = 'hive',
-    )
     self.assertResourceCalled('Directory', '/var/run/hive',
                               owner = 'hive',
                               group = 'hadoop',
@@ -389,6 +364,30 @@ class TestHiveMetastore(RMFTestCase):
                               create_parents = True,
                               cd_access = 'a',
                               )
+    self.assertResourceCalled('Execute', ('cp',
+     '--remove-destination',
+     '/usr/share/java/mysql-connector-java.jar',
+     '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar'),
+        path = ['/bin', '/usr/bin/'],
+        sudo = True,
+    )
+    self.assertResourceCalled('File', '/usr/hdp/current/hive-server2/lib/mysql-connector-java.jar',
+        mode = 0644,
+    )
+    self.assertResourceCalled('File', '/etc/hive/conf.server/hadoop-metrics2-hivemetastore.properties',
+                              owner = 'hive',
+                              group = 'hadoop',
+                              content = Template('hadoop-metrics2-hivemetastore.properties.j2')
+                              )
+
+    self.assertResourceCalled('File', '/tmp/start_metastore_script',
+                              content = StaticFile('startMetastore.sh'),
+                              mode = 0755,
+                              )
+    self.assertResourceCalled('Execute', 'export HIVE_CONF_DIR=/etc/hive/conf.server ; /usr/hdp/current/hive-server2/bin/schematool -initSchema -dbType mysql -userName hive -passWord asd -verbose',
+        not_if = "ambari-sudo.sh su hive -l -s /bin/bash -c '[RMF_EXPORT_PLACEHOLDER]export HIVE_CONF_DIR=/etc/hive/conf.server ; /usr/hdp/current/hive-server2/bin/schematool -info -dbType mysql -userName hive -passWord asd -verbose'",
+        user = 'hive',
+    )
 
   @patch("resource_management.libraries.functions.security_commons.build_expectations")
   @patch("resource_management.libraries.functions.security_commons.get_params_from_filesystem")
@@ -683,7 +682,32 @@ class TestHiveMetastore(RMFTestCase):
 
     self.assertResourceCalled('File', '/usr/hdp/2.3.0.0-1234/hive/lib/mysql-connector-java.jar',
         mode = 0644)
-
+    self.assertResourceCalled('File', '/usr/hdp/current/hive-server2/conf/conf.server/hadoop-metrics2-hivemetastore.properties',
+        content = Template('hadoop-metrics2-hivemetastore.properties.j2'),
+        owner = 'hive',
+        group = 'hadoop',
+    )
+    self.assertResourceCalled('File', '/tmp/start_metastore_script',
+        content = StaticFile('startMetastore.sh'),
+        mode = 0755,
+    )
+    self.assertResourceCalled('Execute', ('rm', '-f', '/usr/hdp/current/hive-server2/lib/ojdbc6.jar'),
+        path = ['/bin', '/usr/bin/'],
+        sudo = True,
+    )
+    self.assertResourceCalled('File', '/tmp/mysql-connector-java.jar',
+        content = DownloadSource('http://c6401.ambari.apache.org:8080/resources//mysql-connector-java.jar'),
+    )
+    self.assertResourceCalled('Execute', ('cp',
+     '--remove-destination',
+     u'/tmp/mysql-connector-java.jar',
+     u'/usr/hdp/2.3.0.0-1234/hive/lib/mysql-connector-java.jar'),
+        path = ['/bin', '/usr/bin/'],
+        sudo = True,
+    )
+    self.assertResourceCalled('File', '/usr/hdp/2.3.0.0-1234/hive/lib/mysql-connector-java.jar',
+        mode = 0644,
+    )
     self.assertResourceCalled('Execute', ('cp',
      '/usr/hdp/2.2.7.0-1234/hive/lib/mysql-connector-java.jar',
      '/usr/hdp/2.3.0.0-1234/hive/lib'),
@@ -749,6 +773,25 @@ class TestHiveMetastore(RMFTestCase):
     self.assertResourceCalled('File', '/usr/hdp/2.3.2.0-2950/hive/lib/mysql-connector-java.jar',
         mode = 0644,
     )
+    self.assertResourceCalled('File', '/usr/hdp/current/hive-metastore/conf/conf.server/hadoop-metrics2-hivemetastore.properties',
+        content = Template('hadoop-metrics2-hivemetastore.properties.j2'),
+        owner = 'hive',
+        group = 'hadoop',
+    )
+    self.assertResourceCalled('File', '/tmp/start_metastore_script',
+        content = StaticFile('startMetastore.sh'),
+        mode = 0755,
+    )
+    self.assertResourceCalled('Execute', ('cp',
+     '--remove-destination',
+     '/usr/share/java/mysql-connector-java.jar',
+     u'/usr/hdp/2.3.2.0-2950/hive/lib/mysql-connector-java.jar'),
+        path = ['/bin', '/usr/bin/'],
+        sudo = True,
+    )
+    self.assertResourceCalled('File', '/usr/hdp/2.3.2.0-2950/hive/lib/mysql-connector-java.jar',
+        mode = 0644,
+    )
     self.assertResourceCalled('Execute', ('cp',
      '/usr/hdp/2.3.0.0-2557/hive/lib/mysql-connector-java.jar',
      '/usr/hdp/2.3.2.0-2950/hive/lib'),
@@ -849,7 +892,34 @@ class TestHiveMetastore(RMFTestCase):
     self.assertResourceCalled('File', '/usr/hdp/2.3.0.0-1234/hive/lib/sqla-client-jdbc.tar.gz',
                               mode = 0644,
                               )
-
+    self.assertResourceCalled('File', '/usr/hdp/current/hive-server2/conf/conf.server/hadoop-metrics2-hivemetastore.properties',
+        content = Template('hadoop-metrics2-hivemetastore.properties.j2'),
+        owner = 'hive',
+        group = 'hadoop',
+    )
+    self.assertResourceCalled('File', '/tmp/start_metastore_script',
+        content = StaticFile('startMetastore.sh'),
+        mode = 0755,
+    )
+    self.assertResourceCalled('Execute', ('rm', '-f', '/usr/hdp/current/hive-server2/lib/ojdbc6.jar'),
+        path = ['/bin', '/usr/bin/'],
+        sudo = True,
+    )
+    self.assertResourceCalled('File', '/tmp/sqla-client-jdbc.tar.gz',
+        content = DownloadSource('http://c6401.ambari.apache.org:8080/resources//sqla-client-jdbc.tar.gz'),
+    )
+    self.assertResourceCalled('Execute', ('tar', '-xvf', u'/tmp/sqla-client-jdbc.tar.gz', '-C', '/tmp'),
+        sudo = True,
+    )
+    self.assertResourceCalled('Execute', 'yes | ambari-sudo.sh cp /tmp/sqla-client-jdbc/java/* /usr/hdp/current/hive-server2/lib',)
+    self.assertResourceCalled('Directory', '/usr/hdp/current/hive-server2/lib/native/lib64',
+        create_parents = True,
+    )
+    self.assertResourceCalled('Execute', 'yes | ambari-sudo.sh cp /tmp/sqla-client-jdbc/native/lib64/* /usr/hdp/current/hive-server2/lib/native/lib64',)
+    self.assertResourceCalled('Execute', 'ambari-sudo.sh chown -R hive:hadoop /usr/hdp/current/hive-server2/lib/*',)
+    self.assertResourceCalled('File', '/usr/hdp/2.3.0.0-1234/hive/lib/sqla-client-jdbc.tar.gz',
+        mode = 0644,
+    )
     self.assertResourceCalled('Execute',
                               ('yes | ambari-sudo.sh cp /usr/hdp/current/hive-server2/lib/*.jar /usr/hdp/2.3.0.0-1234/hive/lib'))
 


[05/47] ambari git commit: AMBARI-18857 : Add Service wizard: Storm site configs related to Ambari metrics service are not displayed on ui. (avijayan)

Posted by jo...@apache.org.
AMBARI-18857 : Add Service wizard: Storm site configs related to Ambari metrics service are not displayed on ui. (avijayan)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: ef91365b7c1e294ac42006da71c647012679dbe6
Parents: 6e314a6
Author: Aravindan Vijayan <av...@hortonworks.com>
Authored: Mon Nov 21 13:01:24 2016 -0800
Committer: Aravindan Vijayan <av...@hortonworks.com>
Committed: Mon Nov 21 13:01:24 2016 -0800

----------------------------------------------------------------------
 .../0.1.0/configuration/storm-site.xml          | 84 --------------------
 .../AMBARI_METRICS/0.1.0/metainfo.xml           |  4 -
 .../STORM/1.0.1/configuration/storm-site.xml    | 54 +++++++++++++
 .../stacks/HDP/2.5/services/stack_advisor.py    | 42 +++++++++-
 .../stacks/2.5/common/test_stack_advisor.py     | 76 ++++++++++++++++++
 5 files changed, 171 insertions(+), 89 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/ef91365b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/storm-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/storm-site.xml b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/storm-site.xml
deleted file mode 100644
index 7059b90..0000000
--- a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/configuration/storm-site.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
-<!--
-/**
- * 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.
- */
--->
-<configuration supports_final="true">
-  <property>
-    <name>metrics.reporter.register</name>
-    <value>org.apache.hadoop.metrics2.sink.storm.StormTimelineMetricsReporter</value>
-    <description>Topology metrics reporter.</description>
-    <on-ambari-upgrade add="true"/>
-  </property>
-  <property>
-    <name>storm.cluster.metrics.consumer.register</name>
-    <value>[{"class": "org.apache.hadoop.metrics2.sink.storm.StormTimelineMetricsReporter"}]</value>
-    <description></description>
-    <value-attributes>
-      <overridable>false</overridable>
-    </value-attributes>
-    <on-ambari-upgrade add="true"/>
-  </property>
-  <property>
-    <name>topology.metrics.consumer.register</name>
-    <value>[{"class": "org.apache.hadoop.metrics2.sink.storm.StormTimelineMetricsSink", "parallelism.hint": 1, "whitelist": ["kafkaOffset\\..+/", "__complete-latency", "__process-latency", "__receive\\.population$", "__sendqueue\\.population$", "__execute-count", "__emit-count", "__ack-count", "__fail-count", "memory/heap\\.usedBytes$", "memory/nonHeap\\.usedBytes$", "GC/.+\\.count$", "GC/.+\\.timeMs$"]}]</value>
-    <description></description>
-    <value-attributes>
-      <overridable>false</overridable>
-    </value-attributes>
-    <on-ambari-upgrade add="true"/>
-  </property>
-  <property>
-    <name>topology.metrics.aggregate.per.worker</name>
-    <value>true</value>
-    <description></description>
-    <value-attributes>
-      <overridable>false</overridable>
-    </value-attributes>
-    <on-ambari-upgrade add="true"/>
-  </property>
-  <property>
-    <name>topology.metrics.aggregate.metric.evict.secs</name>
-    <value>5</value>
-    <description></description>
-    <value-attributes>
-      <overridable>false</overridable>
-    </value-attributes>
-    <on-ambari-upgrade add="true"/>
-  </property>
-  <property>
-    <name>topology.metrics.expand.map.type</name>
-    <value>true</value>
-    <description></description>
-    <value-attributes>
-      <overridable>false</overridable>
-    </value-attributes>
-    <on-ambari-upgrade add="true"/>
-  </property>
-  <property>
-    <name>topology.metrics.metric.name.separator</name>
-    <value>.</value>
-    <description></description>
-    <value-attributes>
-      <overridable>false</overridable>
-    </value-attributes>
-    <on-ambari-upgrade add="true"/>
-  </property>
-
-</configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ef91365b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/metainfo.xml b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/metainfo.xml
index d2f5862..43a4320 100644
--- a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/metainfo.xml
+++ b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/metainfo.xml
@@ -209,10 +209,6 @@
         <config-type>ams-env</config-type>
       </configuration-dependencies>
 
-      <excluded-config-types>
-        <config-type>storm-site</config-type>
-      </excluded-config-types>
-
       <quickLinksConfigurations>
         <quickLinksConfiguration>
           <fileName>quicklinks.json</fileName>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ef91365b/ambari-server/src/main/resources/common-services/STORM/1.0.1/configuration/storm-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/STORM/1.0.1/configuration/storm-site.xml b/ambari-server/src/main/resources/common-services/STORM/1.0.1/configuration/storm-site.xml
index 077590a..558beaf 100644
--- a/ambari-server/src/main/resources/common-services/STORM/1.0.1/configuration/storm-site.xml
+++ b/ambari-server/src/main/resources/common-services/STORM/1.0.1/configuration/storm-site.xml
@@ -117,4 +117,58 @@
     <on-ambari-upgrade add="false"/>
     <deleted>true</deleted>
   </property>
+  <property>
+    <name>storm.cluster.metrics.consumer.register</name>
+    <value>[{"class": "org.apache.hadoop.metrics2.sink.storm.StormTimelineMetricsReporter"}]</value>
+    <description></description>
+    <value-attributes>
+      <overridable>false</overridable>
+    </value-attributes>
+    <on-ambari-upgrade add="true"/>
+  </property>
+  <property>
+    <name>topology.metrics.consumer.register</name>
+    <value>[{"class": "org.apache.hadoop.metrics2.sink.storm.StormTimelineMetricsSink", "parallelism.hint": 1, "whitelist": ["kafkaOffset\\..+/", "__complete-latency", "__process-latency", "__receive\\.population$", "__sendqueue\\.population$", "__execute-count", "__emit-count", "__ack-count", "__fail-count", "memory/heap\\.usedBytes$", "memory/nonHeap\\.usedBytes$", "GC/.+\\.count$", "GC/.+\\.timeMs$"]}]</value>
+    <description></description>
+    <value-attributes>
+      <overridable>false</overridable>
+    </value-attributes>
+    <on-ambari-upgrade add="true"/>
+  </property>
+  <property>
+    <name>topology.metrics.aggregate.per.worker</name>
+    <value>true</value>
+    <description></description>
+    <value-attributes>
+      <overridable>false</overridable>
+    </value-attributes>
+    <on-ambari-upgrade add="true"/>
+  </property>
+  <property>
+    <name>topology.metrics.aggregate.metric.evict.secs</name>
+    <value>5</value>
+    <description></description>
+    <value-attributes>
+      <overridable>false</overridable>
+    </value-attributes>
+    <on-ambari-upgrade add="true"/>
+  </property>
+  <property>
+    <name>topology.metrics.expand.map.type</name>
+    <value>true</value>
+    <description></description>
+    <value-attributes>
+      <overridable>false</overridable>
+    </value-attributes>
+    <on-ambari-upgrade add="true"/>
+  </property>
+  <property>
+    <name>topology.metrics.metric.name.separator</name>
+    <value>.</value>
+    <description></description>
+    <value-attributes>
+      <overridable>false</overridable>
+    </value-attributes>
+    <on-ambari-upgrade add="true"/>
+  </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/ef91365b/ambari-server/src/main/resources/stacks/HDP/2.5/services/stack_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/stack_advisor.py b/ambari-server/src/main/resources/stacks/HDP/2.5/services/stack_advisor.py
index dfb7b0c..519602b 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/services/stack_advisor.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/stack_advisor.py
@@ -117,11 +117,36 @@ class HDP25StackAdvisor(HDP24StackAdvisor):
       "YARN": {"yarn-site": self.validateYarnConfigurations},
       "RANGER": {"ranger-tagsync-site": self.validateRangerTagsyncConfigurations},
       "SPARK2": {"spark2-defaults": self.validateSpark2Defaults,
-                 "spark2-thrift-sparkconf": self.validateSpark2ThriftSparkConf}
+                 "spark2-thrift-sparkconf": self.validateSpark2ThriftSparkConf},
+      "STORM": {"storm-site": self.validateStormConfigurations},
     }
     self.mergeValidators(parentValidators, childValidators)
     return parentValidators
 
+  def validateStormConfigurations(self, properties, recommendedDefaults, configurations, services, hosts):
+    super(HDP25StackAdvisor, self).validateStormConfigurations(properties, recommendedDefaults, configurations, services, hosts)
+    validationItems = []
+
+    servicesList = [service["StackServices"]["service_name"] for service in services["services"]]
+    # Storm AMS integration
+    if 'AMBARI_METRICS' in servicesList:
+      if "storm.cluster.metrics.consumer.register" in properties and \
+          'null' in properties.get("storm.cluster.metrics.consumer.register"):
+
+        validationItems.append({"config-name": 'storm.cluster.metrics.consumer.register',
+                              "item": self.getWarnItem(
+                                "Should be set to recommended value to report metrics to Ambari Metrics service.")})
+
+      if "topology.metrics.consumer.register" in properties and \
+          'null' in properties.get("topology.metrics.consumer.register"):
+
+        validationItems.append({"config-name": 'topology.metrics.consumer.register',
+                                "item": self.getWarnItem(
+                                  "Should be set to recommended value to report metrics to Ambari Metrics service.")})
+
+
+    return self.toConfigurationValidationProblems(validationItems, "storm-site")
+
   def validateAtlasConfigurations(self, properties, recommendedDefaults, configurations, services, hosts):
     application_properties = getSiteProperties(configurations, "application-properties")
     validationItems = []
@@ -455,6 +480,21 @@ class HDP25StackAdvisor(HDP24StackAdvisor):
     else:
       putStormSiteAttributes('nimbus.authorizer', 'delete', 'true')
 
+    servicesList = [service["StackServices"]["service_name"] for service in services["services"]]
+    # Storm AMS integration
+    if 'AMBARI_METRICS' in servicesList:
+      putStormSiteProperty('storm.cluster.metrics.consumer.register', '[{"class": "org.apache.hadoop.metrics2.sink.storm.StormTimelineMetricsReporter"}]')
+      putStormSiteProperty('topology.metrics.consumer.register',
+                           '[{"class": "org.apache.hadoop.metrics2.sink.storm.StormTimelineMetricsSink", '
+                           '"parallelism.hint": 1, '
+                           '"whitelist": ["kafkaOffset\\\..+/", "__complete-latency", "__process-latency", '
+                           '"__receive\\\.population$", "__sendqueue\\\.population$", "__execute-count", "__emit-count", '
+                           '"__ack-count", "__fail-count", "memory/heap\\\.usedBytes$", "memory/nonHeap\\\.usedBytes$", '
+                           '"GC/.+\\\.count$", "GC/.+\\\.timeMs$"]}]')
+    else:
+      putStormSiteProperty('storm.cluster.metrics.consumer.register', 'null')
+      putStormSiteProperty('topology.metrics.consumer.register', 'null')
+
   def constructAtlasRestAddress(self, services, hosts):
     """
     :param services: Collection of services in the cluster with configs

http://git-wip-us.apache.org/repos/asf/ambari/blob/ef91365b/ambari-server/src/test/python/stacks/2.5/common/test_stack_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.5/common/test_stack_advisor.py b/ambari-server/src/test/python/stacks/2.5/common/test_stack_advisor.py
index 7124307..7759c09 100644
--- a/ambari-server/src/test/python/stacks/2.5/common/test_stack_advisor.py
+++ b/ambari-server/src/test/python/stacks/2.5/common/test_stack_advisor.py
@@ -7657,6 +7657,75 @@ class TestHDP25StackAdvisor(TestCase):
     # Test nimbus.authorizer with Ranger Storm plugin disabled in non-kerberos environment
     self.stackAdvisor.recommendStormConfigurations(configurations, clusterData, services, None)
     self.assertEquals(configurations['storm-site']['property_attributes']['nimbus.authorizer'], {'delete': 'true'}, "Test nimbus.authorizer with Ranger Storm plugin disabled in non-kerberos environment")
+    self.assertEquals(configurations['storm-site']['properties']['storm.cluster.metrics.consumer.register'], 'null')
+    self.assertEquals(configurations['storm-site']['properties']['topology.metrics.consumer.register'], 'null')
+
+    services = {
+      "services":
+        [
+          {
+            "StackServices": {
+              "service_name" : "STORM",
+              "service_version" : "1.0.1.0.0"
+            }
+          },
+          {
+            "StackServices": {
+              "service_name": "RANGER",
+              "service_version": "0.6.0"
+
+            },
+            "components": [
+              {
+                "StackServiceComponents": {
+                  "component_name": "RANGER_ADMIN",
+                  "hostnames": ["host1"]
+                }
+              }
+            ]
+          },
+          {
+            "StackServices": {
+              "service_name": "AMBARI_METRICS"
+            },
+            "components": [{
+              "StackServiceComponents": {
+                "component_name": "METRICS_COLLECTOR",
+                "hostnames": ["host1"]
+              }
+
+            }, {
+              "StackServiceComponents": {
+                "component_name": "METRICS_MONITOR",
+                "hostnames": ["host1"]
+              }
+
+            }]
+          }
+        ],
+      "Versions": {
+        "stack_version": "2.5"
+      },
+      "configurations": {
+        "storm-site": {
+          "properties": {
+            "nimbus.authorizer" : "org.apache.storm.security.auth.authorizer.SimpleACLAuthorizer",
+            "nimbus.impersonation.acl" :"{{{storm_bare_jaas_principal}} : {hosts: ['*'], groups: ['*']}}"
+          },
+          "property_attributes": {}
+        },
+        "storm-env": {
+          "properties":{
+            "storm_principal_name": "storm_user@ECAMPLE.COM"
+          },
+        },
+        "ranger-storm-plugin-properties": {
+          "properties": {
+            "ranger-storm-plugin-enabled": "No"
+          }
+        }
+      }
+    }
 
     # Test nimbus.authorizer with Ranger Storm plugin enabled in non-kerberos environment
     configurations['storm-site']['properties'] = {}
@@ -7664,6 +7733,13 @@ class TestHDP25StackAdvisor(TestCase):
     services['configurations']['ranger-storm-plugin-properties']['properties']['ranger-storm-plugin-enabled'] = 'Yes'
     self.stackAdvisor.recommendStormConfigurations(configurations, clusterData, services, None)
     self.assertEquals(configurations['storm-site']['property_attributes']['nimbus.authorizer'], {'delete': 'true'}, "Test nimbus.authorizer with Ranger Storm plugin enabled in non-kerberos environment")
+    self.assertEquals(configurations['storm-site']['properties']['storm.cluster.metrics.consumer.register'], '[{"class": "org.apache.hadoop.metrics2.sink.storm.StormTimelineMetricsReporter"}]')
+    self.assertEquals(configurations['storm-site']['properties']['topology.metrics.consumer.register'], '[{"class": "org.apache.hadoop.metrics2.sink.storm.StormTimelineMetricsSink", '
+                                                                                                      '"parallelism.hint": 1, '
+                                                                                                      '"whitelist": ["kafkaOffset\\\..+/", "__complete-latency", "__process-latency", '
+                                                                                                      '"__receive\\\.population$", "__sendqueue\\\.population$", "__execute-count", "__emit-count", '
+                                                                                                      '"__ack-count", "__fail-count", "memory/heap\\\.usedBytes$", "memory/nonHeap\\\.usedBytes$", '
+                                                                                                      '"GC/.+\\\.count$", "GC/.+\\\.timeMs$"]}]')
 
     # Test nimbus.authorizer with Ranger Storm plugin being enabled in kerberos environment
     configurations['storm-site']['properties'] = {}


[47/47] ambari git commit: Merge branch 'trunk' into branch-feature-AMBARI-18456

Posted by jo...@apache.org.
Merge branch 'trunk' into branch-feature-AMBARI-18456


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: 1f804d1392fc076542b9905766108d658258bcb4
Parents: 936626b ece1de3
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Mon Nov 28 08:37:22 2016 -0500
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Mon Nov 28 08:37:22 2016 -0500

----------------------------------------------------------------------
 ambari-agent/conf/unix/agent-multiplier.py      |   14 +-
 .../ambari_agent/CustomServiceOrchestrator.py   |   17 +-
 .../TestCustomServiceOrchestrator.py            |   25 +-
 .../ambari-metrics/datasource.js                |    6 +-
 ambari-server/pom.xml                           |    2 +
 ambari-server/sbin/ambari-server                |    6 +-
 .../server/actionmanager/ActionScheduler.java   |    2 +-
 .../checks/DatabaseConsistencyCheckHelper.java  |   10 +-
 .../server/configuration/Configuration.java     |   23 +-
 .../ambari/server/events/AmbariEvent.java       |    5 +
 .../events/ClusterConfigFinishedEvent.java      |   53 +
 .../AmbariLdapAuthenticationProvider.java       |   23 +-
 .../AmbariLdapBindAuthenticator.java            |  233 +-
 .../apache/ambari/server/stack/StackModule.java |  101 +-
 .../ambari/server/state/stack/UpgradePack.java  |   12 +-
 .../ambari/server/topology/TopologyManager.java |   16 +-
 .../ambari/server/view/ViewExtractor.java       |    2 +-
 .../apache/ambari/server/view/ViewRegistry.java |  381 +--
 ambari-server/src/main/python/ambari-server.py  |  137 +-
 .../python/ambari_server/serverConfiguration.py |    9 +-
 .../main/python/ambari_server/setupActions.py   |    1 +
 .../main/python/ambari_server/setupMpacks.py    |  167 +-
 .../0.1.0/configuration/storm-site.xml          |   84 -
 .../AMBARI_METRICS/0.1.0/metainfo.xml           |    4 -
 .../FLUME/1.4.0.2.0/metrics.json                |   62 -
 .../HIVE/0.12.0.2.0/package/scripts/hive.py     |  497 ++--
 .../package/scripts/hive_server_interactive.py  |    4 +-
 .../0.12.0.2.0/package/scripts/params_linux.py  |    1 +
 .../0.4.0/package/scripts/setup_ranger_xml.py   |   18 +
 .../0.4.0/package/templates/ranger_admin_pam.j2 |   22 +
 .../package/templates/ranger_remote_pam.j2      |   22 +
 .../0.5.0/configuration/ranger-admin-site.xml   |    2 +-
 .../STORM/1.0.1/configuration/storm-site.xml    |   54 +
 .../src/main/resources/scripts/stack_advisor.py |   11 +-
 .../HDP/2.0.6/configuration/cluster-env.xml     |   10 -
 .../stacks/HDP/2.0.6/services/stack_advisor.py  |   50 +-
 .../stacks/HDP/2.1/services/stack_advisor.py    |   20 +-
 .../stacks/HDP/2.2/services/stack_advisor.py    |    7 -
 .../stacks/HDP/2.2/upgrades/upgrade-2.3.xml     | 1042 -------
 .../stacks/HDP/2.2/upgrades/upgrade-2.4.xml     | 1050 -------
 .../stacks/HDP/2.3/upgrades/upgrade-2.5.xml     |    4 +-
 .../stacks/HDP/2.3/upgrades/upgrade-2.6.xml     |    4 +-
 .../stacks/HDP/2.4/upgrades/upgrade-2.5.xml     |    4 +-
 .../stacks/HDP/2.4/upgrades/upgrade-2.6.xml     |    4 +-
 .../HIVE/configuration/hive-interactive-env.xml |   10 +
 .../HIVE/configuration/hivemetastore-site.xml   |    8 +
 .../hiveserver2-interactive-site.xml            |    8 +
 .../HIVE/configuration/hiveserver2-site.xml     |    8 +
 .../stacks/HDP/2.5/services/stack_advisor.py    |   52 +-
 .../services/ATLAS/themes/theme_version_2.json  |   28 +-
 .../stacks/HDP/2.6/services/stack_advisor.py    |    2 +-
 .../PERF/1.0/configuration/cluster-env.xml      |    6 +-
 .../GRUMPY/configuration/grumpy-site.xml        |    2 +-
 .../services/HAPPY/configuration/happy-site.xml |    2 +-
 .../services/HBASE/configuration/hbase-env.xml  |   30 +-
 .../HBASE/configuration/hbase-log4j.xml         |    2 +-
 .../configuration/hbase-logsearch-conf.xml      |    6 +-
 .../HBASE/configuration/hbase-policy.xml        |    6 +-
 .../services/HBASE/configuration/hbase-site.xml |   74 +-
 .../services/HDFS/configuration/core-site.xml   |   32 +-
 .../services/HDFS/configuration/hadoop-env.xml  |   44 +-
 .../hadoop-metrics2.properties.xml              |    2 +-
 .../HDFS/configuration/hadoop-policy.xml        |   22 +-
 .../services/HDFS/configuration/hdfs-log4j.xml  |    2 +-
 .../HDFS/configuration/hdfs-logsearch-conf.xml  |    6 +-
 .../services/HDFS/configuration/hdfs-site.xml   |  108 +-
 .../services/HDFS/configuration/ssl-client.xml  |   14 +-
 .../services/HDFS/configuration/ssl-server.xml  |   16 +-
 .../SLEEPY/configuration/sleepy-site.xml        |    2 +-
 .../services/SNOW/configuration/snow-site.xml   |    2 +-
 .../YARN/configuration-mapred/mapred-env.xml    |    2 +-
 .../YARN/configuration-mapred/mapred-site.xml   |   28 +-
 .../services/YARN/configuration/yarn-env.xml    |    8 +-
 .../services/YARN/configuration/yarn-log4j.xml  |    2 +-
 .../services/YARN/configuration/yarn-site.xml   |  150 +-
 .../src/main/resources/stacks/stack_advisor.py  |  200 +-
 .../src/main/resources/upgrade-pack.xsd         |   10 +-
 .../StackDefinedPropertyProviderTest.java       |    2 +
 .../RestMetricsPropertyProviderTest.java        |    2 +
 .../AmbariLdapBindAuthenticatorTest.java        |  226 +-
 .../server/state/stack/UpgradePackTest.java     |   22 +
 .../ClusterDeployWithStartOnlyTest.java         |    2 +-
 ...InstallWithoutStartOnComponentLevelTest.java |    2 +-
 .../ClusterInstallWithoutStartTest.java         |    2 +-
 .../ambari/server/view/ViewRegistryTest.java    |    2 +
 ambari-server/src/test/python/TestMpacks.py     |  223 +-
 .../grafana-dashboards/grafana-hdfs-users.json  |  270 ++
 .../dashboards/service-metrics/STORM.txt        |    7 +
 .../stacks/2.0.6/HIVE/test_hive_metastore.py    |  147 +-
 .../stacks/2.0.6/HIVE/test_hive_server.py       |  311 +--
 .../stacks/2.0.6/common/test_stack_advisor.py   |   34 +-
 .../stacks/2.1/HIVE/test_hive_metastore.py      |  170 +-
 .../stacks/2.1/common/test_stack_advisor.py     |    5 -
 .../stacks/2.2/common/test_stack_advisor.py     |   20 +-
 .../stacks/2.5/common/test_stack_advisor.py     |   79 +-
 .../stacks/2.6/common/test_stack_advisor.py     |    4 +-
 .../test/python/stacks/test_stack_adviser.py    |  239 --
 .../python/uninstall/common-services/SERVICEA   |    1 +
 .../python/uninstall/common-services/SERVICEB   |    1 +
 .../test/python/uninstall/dashboards/SERVICEA   |    1 +
 .../test/python/uninstall/dashboards/SERVICEB   |    1 +
 .../uninstall/dashboards/files/README.txt       |   17 +
 .../python/uninstall/dashboards/files/STORM.txt |    1 +
 .../uninstall/dashboards/files/metainfo.xml     |    1 +
 .../test/python/uninstall/extensions/SERVICEA   |    1 +
 .../test/python/uninstall/extensions/SERVICEB   |    1 +
 .../test/python/uninstall/stacks/2.0/SERVICEA   |    1 +
 .../test/python/uninstall/stacks/2.0/SERVICEB   |    1 +
 .../uninstall/stacks/2.0/files/README.txt       |   17 +
 .../uninstall/stacks/2.0/files/metainfo1.xml    |    1 +
 .../uninstall/stacks/2.0/files/metainfo2.xml    |    1 +
 .../GANGLIA/upgrades/HDP/rolling-upgrade.xml    |   41 +
 ambari-web/app/assets/test/tests.js             |    9 +-
 .../hawq/activateStandby/step2_controller.js    |    2 +-
 .../hawq/addStandby/step3_controller.js         |    3 +-
 .../journalNode/step2_controller.js             |    3 +-
 .../nameNode/step3_controller.js                |    3 +-
 .../resourceManager/step3_controller.js         |    2 +-
 .../main/admin/service_auto_start.js            |  330 ++-
 .../add_alert_definition/step1_controller.js    |   41 +-
 .../alerts/definition_configs_controller.js     |   40 +-
 .../app/controllers/main/charts/heatmap.js      |    6 +-
 ambari-web/app/controllers/main/host/details.js |    2 +-
 .../app/controllers/wizard/step7_controller.js  |    2 +-
 .../app/controllers/wizard/step8_controller.js  |    2 +-
 ambari-web/app/data/HDP2.2/hive_properties.js   |  119 -
 ambari-web/app/data/HDP2.2/site_properties.js   |  275 --
 ambari-web/app/data/HDP2.2/tez_properties.js    |   43 -
 ambari-web/app/data/HDP2.2/yarn_properties.js   |   54 -
 .../HDP2.3/hawq_activate_standby_properties.js  |   43 -
 .../app/data/HDP2.3/hawq_ha_properties.js       |   43 -
 ambari-web/app/data/HDP2.3/site_properties.js   |  370 ---
 ambari-web/app/data/HDP2/alert_notification.js  |  145 -
 .../app/data/HDP2/gluster_fs_properties.js      |   94 -
 ambari-web/app/data/HDP2/ha_properties.js       |  538 ----
 .../data/HDP2/kerberos_descriptor_properties.js |   35 -
 ambari-web/app/data/HDP2/kerberos_identities.js |  129 -
 .../data/HDP2/move_journal_node_properties.js   |   42 -
 ambari-web/app/data/HDP2/rm_ha_properties.js    |  206 --
 ambari-web/app/data/HDP2/secure_mapping.js      | 1004 -------
 ambari-web/app/data/HDP2/site_properties.js     | 2579 ------------------
 ambari-web/app/data/HDP2/ui_properties.js       |   49 -
 .../app/data/configs/alert_notification.js      |  145 +
 .../configs/services/accumulo_properties.js     |  116 +
 .../configs/services/ambari_infra_properties.js |  167 ++
 .../services/ambari_metrics_properties.js       |  188 ++
 .../data/configs/services/falcon_properties.js  |  302 ++
 .../data/configs/services/flume_properties.js   |   38 +
 .../configs/services/glusterfs_properties.js    |   93 +
 .../data/configs/services/hawq_properties.js    |  110 +
 .../data/configs/services/hbase_properties.js   |  124 +
 .../data/configs/services/hdfs_properties.js    |  164 ++
 .../data/configs/services/hive_properties.js    |  590 ++++
 .../data/configs/services/kafka_properties.js   |   66 +
 .../configs/services/kerberos_properties.js     |  204 ++
 .../data/configs/services/knox_properties.js    |   32 +
 .../configs/services/logsearch_properties.js    |  447 +++
 .../configs/services/mapreduce2_properties.js   |   45 +
 .../data/configs/services/oozie_properties.js   |   93 +
 .../data/configs/services/ranger_properties.js  |  327 +++
 .../data/configs/services/storm_properties.js   |  296 ++
 .../app/data/configs/services/tez_properties.js |   92 +
 .../data/configs/services/yarn_properties.js    |  300 ++
 .../configs/services/zookeeper_properties.js    |   67 +
 ambari-web/app/data/configs/site_properties.js  |   55 +
 ambari-web/app/data/configs/ui_properties.js    |   49 +
 .../app/data/configs/wizards/ha_properties.js   |  538 ++++
 .../wizards/hawq_activate_standby_properties.js |   43 +
 .../data/configs/wizards/hawq_ha_properties.js  |   43 +
 .../wizards/kerberos_descriptor_properties.js   |   35 +
 .../data/configs/wizards/kerberos_identities.js |  129 +
 .../wizards/move_journal_node_properties.js     |   42 +
 .../data/configs/wizards/rm_ha_properties.js    |  206 ++
 .../app/data/configs/wizards/secure_mapping.js  | 1004 +++++++
 ambari-web/app/data/custom_stack_map.js         |    2 -
 .../configs/stack_config_properties_mapper.js   |    2 +-
 ambari-web/app/messages.js                      |   19 +-
 ambari-web/app/mixins.js                        |    1 +
 .../app/mixins/wizard/addSecurityConfigs.js     |    2 +-
 .../app/models/alerts/alert_definition.js       |   54 +
 ambari-web/app/models/service/flume.js          |    8 +
 ambari-web/app/models/stack_service.js          |   13 +-
 ambari-web/app/styles/alerts.less               |  135 +-
 ambari-web/app/styles/application.less          |  448 +--
 .../app/styles/enhanced_service_dashboard.less  |    2 +
 ambari-web/app/styles/modal_popups.less         |   67 +-
 ambari-web/app/styles/stack_versions.less       |    6 +-
 .../app/styles/theme/bootstrap-ambari.css       |   25 +-
 ambari-web/app/styles/wizard.less               |   23 +-
 .../common/assign_master_components.hbs         |   62 +-
 .../templates/common/configs/overrideWindow.hbs |    2 +-
 .../common/form/check_db_connection.hbs         |   26 +-
 .../templates/common/host_progress_popup.hbs    |  317 ++-
 .../common/modal_popups/alerts_popup.hbs        |   80 +-
 .../modal_popups/dependent_configs_list.hbs     |    2 +-
 ambari-web/app/templates/experimental.hbs       |    2 +-
 .../templates/main/admin/service_auto_start.hbs |   76 +-
 .../service_auto_start/component_auto_start.hbs |    2 +-
 .../admin/stack_upgrade/edit_repositories.hbs   |   52 +-
 .../stack_upgrade/stack_upgrade_wizard.hbs      |    4 +-
 .../stack_upgrade/upgrade_history_details.hbs   |    4 +-
 .../main/admin/stack_upgrade/upgrade_task.hbs   |    4 +-
 .../main/alerts/add_alert_definition/step1.hbs  |   30 +-
 .../alerts/add_definition_to_group_popup.hbs    |    2 +-
 .../main/charts/heatmap/heatmap_host_detail.hbs |   70 +-
 .../main/charts/heatmap/heatmap_rack.hbs        |   37 +-
 .../templates/main/charts/heatmap_dropdown.hbs  |    4 +-
 .../main/host/bulk_operation_confirm_popup.hbs  |    2 +-
 .../main/host/details/deleteComponentPopup.hbs  |   20 +-
 .../main/host/details/doDeleteHostPopup.hbs     |   35 +-
 .../details/raiseDeleteComponentErrorPopup.hbs  |   21 +-
 .../main/service/info/heatmap_dropdown.hbs      |    2 +-
 .../app/templates/main/service/info/summary.hbs |    2 +-
 .../templates/main/service/services/flume.hbs   |  196 +-
 ambari-web/app/templates/wizard/step1.hbs       |    2 +-
 ambari-web/app/templates/wizard/step3.hbs       |    2 +-
 .../wizard/step3/step3_host_warnings_popup.hbs  |   18 +-
 .../wizard/step9/step9HostTasksLogPopup.hbs     |   88 +-
 ambari-web/app/utils/config.js                  |   25 +-
 .../app/utils/configs/config_initializer.js     |   28 +-
 .../mount_points_based_initializer_mixin.js     |  340 +++
 ambari-web/app/utils/host_progress_popup.js     |    5 +-
 .../common/assign_master_components_view.js     |    6 +-
 ambari-web/app/views/common/controls_view.js    |    5 +-
 .../app/views/main/admin/service_auto_start.js  |   55 +-
 .../service_auto_start/component_auto_start.js  |    8 +-
 .../alerts/add_alert_definition/step1_view.js   |    3 +
 .../views/main/charts/heatmap/heatmap_rack.js   |   23 +-
 .../views/main/dashboard/widgets/hbase_links.js |    6 +-
 ambari-web/app/views/main/host.js               |    5 +-
 .../views/main/service/reassign/step5_view.js   |    3 +-
 .../app/views/main/service/services/flume.js    |   32 +-
 ambari-web/app/views/wizard/step3_view.js       |    2 +-
 .../views/wizard/step9/hostLogPopupBody_view.js |    2 +
 ambari-web/brunch-config.js                     |    1 +
 ambari-web/copy-pluggable-stack-resources.sh    |    2 +-
 .../main/admin/service_auto_start_test.js       |  326 +++
 .../step1_controller_test.js                    |   33 +-
 .../test/controllers/main/host/details_test.js  |   25 +-
 .../test/data/HDP2.2/site_properties_test.js    |   76 -
 .../test/data/HDP2.3/site_properties_test.js    |   77 -
 .../test/data/HDP2/secure_mapping_test.js       |   36 -
 .../test/data/HDP2/site_properties_test.js      |   76 -
 .../test/data/configs/site_properties_test.js   |   76 +
 .../data/configs/wizards/secure_mapping_test.js |   36 +
 ambari-web/test/models/service/flume_test.js    |    6 +
 ambari-web/test/utils/ajax/ajax_test.js         |    9 +-
 ambari-web/test/utils/config_test.js            |   46 +-
 .../utils/configs/config_initializer_test.js    |  458 ++++
 .../component_auto_start_test.js                |   64 +
 .../views/main/admin/service_auto_start_test.js |   83 +
 .../views/main/service/services/flume_test.js   |   17 +-
 ambari-web/vendor/scripts/jquery.typeahead.js   |  300 ++
 contrib/utils/perf/deploy-gce-perf-cluster.py   |  230 +-
 contrib/views/ambari-views-package/pom.xml      |  123 +
 .../src/main/package/deb/control/control        |   22 +
 contrib/views/capacity-scheduler/pom.xml        |   18 +
 contrib/views/files/pom.xml                     |   18 +
 contrib/views/hawq/pom.xml                      |   18 +
 contrib/views/hive-next/pom.xml                 |   18 +
 contrib/views/hive/pom.xml                      |   18 +
 contrib/views/hueambarimigration/pom.xml        |   18 +
 contrib/views/jobs/pom.xml                      |   23 +
 contrib/views/pig/pom.xml                       |   18 +
 contrib/views/pom.xml                           |    5 +
 contrib/views/slider/pom.xml                    |   18 +
 contrib/views/storm/pom.xml                     |   23 +
 contrib/views/tez/pom.xml                       |   18 +
 contrib/views/wfmanager/pom.xml                 |   18 +
 contrib/views/zeppelin/pom.xml                  |   18 +
 docs/pom.xml                                    |    2 +-
 docs/src/site/apt/index.apt                     |    2 +-
 docs/src/site/apt/whats-new.apt                 |    4 +-
 docs/src/site/site.xml                          |    2 +
 274 files changed, 12584 insertions(+), 11650 deletions(-)
----------------------------------------------------------------------



[41/47] ambari git commit: AMBARI-18986. Deployment failure when command does not have role (smohanty)

Posted by jo...@apache.org.
AMBARI-18986. Deployment failure when command does not have role (smohanty)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: fc46088d9a9943c8e6bd7ea9b29512064faf72c4
Parents: b7d55f0
Author: Sumit Mohanty <sm...@hortonworks.com>
Authored: Thu Nov 24 10:15:30 2016 -0800
Committer: Sumit Mohanty <sm...@hortonworks.com>
Committed: Thu Nov 24 10:16:11 2016 -0800

----------------------------------------------------------------------
 .../main/python/ambari_agent/CustomServiceOrchestrator.py    | 8 ++++++--
 .../python/ambari_agent/TestCustomServiceOrchestrator.py     | 4 ++--
 2 files changed, 8 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/fc46088d/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py b/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
index b814334..770484d 100644
--- a/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
+++ b/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
@@ -42,6 +42,7 @@ class CustomServiceOrchestrator():
   """
 
   SCRIPT_TYPE_PYTHON = "PYTHON"
+  COMMAND_TYPE = "commandType"
   COMMAND_NAME_STATUS = "STATUS"
   COMMAND_NAME_SECURITY_STATUS = "SECURITY_STATUS"
   CUSTOM_ACTION_COMMAND = 'ACTIONEXECUTE'
@@ -58,7 +59,6 @@ class CustomServiceOrchestrator():
   AMBARI_SERVER_HOST = "ambari_server_host"
   AMBARI_SERVER_PORT = "ambari_server_port"
   AMBARI_SERVER_USE_SSL = "ambari_server_use_ssl"
-  METRICS_GRAFANA = "METRICS_GRAFANA"
 
   FREQUENT_COMMANDS = [COMMAND_NAME_SECURITY_STATUS, COMMAND_NAME_STATUS]
   DONT_DEBUG_FAILURES_FOR_COMMANDS = FREQUENT_COMMANDS
@@ -154,7 +154,11 @@ class CustomServiceOrchestrator():
         self.file_cache.get_host_scripts_base_dir(server_url_prefix)          
         hook_dir = self.file_cache.get_hook_base_dir(command, server_url_prefix)
         base_dir = self.file_cache.get_service_base_dir(command, server_url_prefix)
-        if command['role'] == self.METRICS_GRAFANA:
+        from ActionQueue import ActionQueue  # To avoid cyclic dependency
+        if self.COMMAND_TYPE in command and command[self.COMMAND_TYPE] == ActionQueue.EXECUTION_COMMAND:
+          logger.info("Found it - " + str(command[self.COMMAND_TYPE]) + " yeah")
+          # limiting to only EXECUTION_COMMANDs for now
+          # TODO need a design for limiting to specific role/component such as METRICS_GRAFANA
           self.file_cache.get_dashboard_base_dir(server_url_prefix)
 
         script_path = self.resolve_script_path(base_dir, script)

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc46088d/ambari-agent/src/test/python/ambari_agent/TestCustomServiceOrchestrator.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestCustomServiceOrchestrator.py b/ambari-agent/src/test/python/ambari_agent/TestCustomServiceOrchestrator.py
index d0d6ac4..2be6e1a 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestCustomServiceOrchestrator.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestCustomServiceOrchestrator.py
@@ -239,6 +239,7 @@ class TestCustomServiceOrchestrator(TestCase):
     
     FileCache_mock.return_value = None
     command = {
+      'commandType' : 'EXECUTION_COMMAND',
       'role' : 'REGION_SERVER',
       'hostLevelParams' : {
         'stack_name' : 'HDP',
@@ -277,8 +278,7 @@ class TestCustomServiceOrchestrator(TestCase):
     self.assertEqual(ret['exitcode'], 0)
     self.assertTrue(run_file_mock.called)
     self.assertEqual(run_file_mock.call_count, 3)
-    # Should only be called for METRICS_GRAFANA
-    self.assertFalse(get_dashboard_base_dir_mock.called)
+    self.assertTrue(get_dashboard_base_dir_mock.called)
 
     run_file_mock.reset_mock()
 


[31/47] ambari git commit: AMBARI-18842: Provide support for removing an mpack on the command line (jluniya)

Posted by jo...@apache.org.
AMBARI-18842: Provide support for removing an mpack on the command line (jluniya)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: bd2cd4ab61798a44a670797a9348b6e818b7701b
Parents: a8d6f03
Author: Jayush Luniya <jl...@hortonworks.com>
Authored: Wed Nov 23 10:30:00 2016 -0800
Committer: Jayush Luniya <jl...@hortonworks.com>
Committed: Wed Nov 23 10:30:00 2016 -0800

----------------------------------------------------------------------
 ambari-server/sbin/ambari-server                |   6 +-
 ambari-server/src/main/python/ambari-server.py  | 137 ++++++++++++++++---
 .../main/python/ambari_server/setupActions.py   |   1 +
 .../main/python/ambari_server/setupMpacks.py    |  62 +++++++--
 ambari-server/src/test/python/TestMpacks.py     |  10 +-
 5 files changed, 177 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/bd2cd4ab/ambari-server/sbin/ambari-server
----------------------------------------------------------------------
diff --git a/ambari-server/sbin/ambari-server b/ambari-server/sbin/ambari-server
index f08db13..8afabb1 100755
--- a/ambari-server/sbin/ambari-server
+++ b/ambari-server/sbin/ambari-server
@@ -188,13 +188,17 @@ case "${1:-}" in
         echo -e "Installing management pack"
         $PYTHON "$AMBARI_PYTHON_EXECUTABLE" $@
         ;;
+  uninstall-mpack)
+        echo -e "Uninstalling management pack"
+        $PYTHON "$AMBARI_PYTHON_EXECUTABLE" $@
+        ;;
   upgrade-mpack)
         echo -e "Upgrading management pack"
         $PYTHON "$AMBARI_PYTHON_EXECUTABLE" $@
         ;;
   *)
         echo "Usage: $AMBARI_EXECUTABLE
-        {start|stop|reset|restart|upgrade|status|upgradestack|setup|setup-jce|setup-ldap|sync-ldap|set-current|setup-security|refresh-stack-hash|backup|restore|update-host-names|check-database|enable-stack|setup-sso|db-cleanup|install-mpack|upgrade-mpack} [options]
+        {start|stop|reset|restart|upgrade|status|upgradestack|setup|setup-jce|setup-ldap|sync-ldap|set-current|setup-security|refresh-stack-hash|backup|restore|update-host-names|check-database|enable-stack|setup-sso|db-cleanup|install-mpack|uninstall-mpack|upgrade-mpack} [options]
         Use $AMBARI_PYTHON_EXECUTABLE <action> --help to get details on options available.
         Or, simply invoke ambari-server.py --help to print the options."
         exit 1

http://git-wip-us.apache.org/repos/asf/ambari/blob/bd2cd4ab/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 d43e0f2..41b2234 100755
--- a/ambari-server/src/main/python/ambari-server.py
+++ b/ambari-server/src/main/python/ambari-server.py
@@ -39,7 +39,7 @@ from ambari_server.serverUtils import is_server_runing, refresh_stack_hash
 from ambari_server.serverSetup import reset, setup, setup_jce_policy
 from ambari_server.serverUpgrade import upgrade, upgrade_stack, set_current
 from ambari_server.setupHttps import setup_https, setup_truststore
-from ambari_server.setupMpacks import install_mpack, upgrade_mpack, STACK_DEFINITIONS_RESOURCE_NAME, \
+from ambari_server.setupMpacks import install_mpack, uninstall_mpack, upgrade_mpack, STACK_DEFINITIONS_RESOURCE_NAME, \
   SERVICE_DEFINITIONS_RESOURCE_NAME, MPACKS_RESOURCE_NAME
 from ambari_server.setupSso import setup_sso
 from ambari_server.dbCleanup import db_cleanup
@@ -52,7 +52,7 @@ from ambari_server.setupActions import BACKUP_ACTION, LDAP_SETUP_ACTION, LDAP_SY
   SETUP_ACTION, SETUP_SECURITY_ACTION,START_ACTION, STATUS_ACTION, STOP_ACTION, RESTART_ACTION, UPGRADE_ACTION, \
   UPGRADE_STACK_ACTION, SETUP_JCE_ACTION, SET_CURRENT_ACTION, START_ACTION, STATUS_ACTION, STOP_ACTION, UPGRADE_ACTION, \
   UPGRADE_STACK_ACTION, SETUP_JCE_ACTION, SET_CURRENT_ACTION, ENABLE_STACK_ACTION, SETUP_SSO_ACTION, \
-  DB_CLEANUP_ACTION, INSTALL_MPACK_ACTION, UPGRADE_MPACK_ACTION, PAM_SETUP_ACTION
+  DB_CLEANUP_ACTION, INSTALL_MPACK_ACTION, UNINSTALL_MPACK_ACTION, UPGRADE_MPACK_ACTION, PAM_SETUP_ACTION
 from ambari_server.setupSecurity import setup_ldap, sync_ldap, setup_master_key, setup_ambari_krb5_jaas, setup_pam
 from ambari_server.userInput import get_validated_string_input
 
@@ -316,6 +316,35 @@ def restore(args):
 
   BackupRestore_main(restore_command)
 
+_action_option_dependence_map = {
+}
+
+def add_parser_options(*args, **kwargs):
+  required_for_actions = kwargs.pop("required_for_actions", [])
+  optional_for_actions = kwargs.pop("optional_for_actions", [])
+  parser = kwargs.pop("parser")
+  for action in required_for_actions:
+    if not action in _action_option_dependence_map:
+      _action_option_dependence_map[action] = ([], [])
+    _action_option_dependence_map[action][0].append((args[0], kwargs["dest"]))
+  for action in optional_for_actions:
+    if not action in _action_option_dependence_map:
+      _action_option_dependence_map[action] = ([], [])
+    _action_option_dependence_map[action][1].append((args[0], kwargs["dest"]))
+  parser.add_option(*args, **kwargs)
+
+def print_action_arguments_help(action):
+    if action in _action_option_dependence_map:
+      required_options = _action_option_dependence_map[action][0]
+    optional_options = _action_option_dependence_map[action][1]
+    if required_options or optional_options:
+      print "Options used by action {0}:".format(action)
+    if required_options:
+      print "  required:{0}".format(
+          ";".join([print_opt for print_opt, _ in required_options]))
+    if optional_options:
+      print "  optional:{0}".format(
+            ";".join([print_opt for print_opt, _ in optional_options]))
 
 @OsFamilyFuncImpl(OSConst.WINSRV_FAMILY)
 def init_parser_options(parser):
@@ -361,18 +390,45 @@ def init_parser_options(parser):
                     help="Specifies the path to the JDBC driver JAR file")
   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('--mpack', default=None,
-                    help="Specified the path for management pack to be installed/upgraded",
-                    dest="mpack_path")
-  parser.add_option('--purge', action="store_true", default=False,
-                    help="Purge existing resources specified in purge-list",
-                    dest="purge")
+  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])
-  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")
+  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]
+  )
   # -b and -i the remaining available short options
   # -h reserved for help
 
@@ -441,18 +497,45 @@ def init_parser_options(parser):
   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")
-  parser.add_option('--mpack', default=None,
-                    help="Specified the path for management pack to be installed/upgraded",
-                    dest="mpack_path")
-  parser.add_option('--purge', action="store_true", default=False,
-                    help="Purge existing resources specified in purge-list",
-                    dest="purge")
+  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])
-  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")
+  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-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")
@@ -622,6 +705,7 @@ def create_user_action_map(args, options):
     REFRESH_STACK_HASH_ACTION: UserAction(refresh_stack_hash_action),
     SETUP_SSO_ACTION: UserActionRestart(setup_sso, options),
     INSTALL_MPACK_ACTION: UserAction(install_mpack, options),
+    UNINSTALL_MPACK_ACTION: UserAction(uninstall_mpack, options),
     UPGRADE_MPACK_ACTION: UserAction(upgrade_mpack, options)
   }
   return action_map
@@ -651,6 +735,7 @@ def create_user_action_map(args, options):
         SETUP_SSO_ACTION: UserActionRestart(setup_sso, options),
         DB_CLEANUP_ACTION: UserAction(db_cleanup, options),
         INSTALL_MPACK_ACTION: UserAction(install_mpack, options),
+        UNINSTALL_MPACK_ACTION: UserAction(uninstall_mpack, options),
         UPGRADE_MPACK_ACTION: UserAction(upgrade_mpack, options),
         PAM_SETUP_ACTION: UserAction(setup_pam)
       }
@@ -743,6 +828,14 @@ def main(options, args, parser):
   options.exit_code = None
 
   try:
+    if action in _action_option_dependence_map:
+      required, optional = _action_option_dependence_map[action]
+      for opt_str, opt_dest in required:
+        if hasattr(options, opt_dest) and getattr(options, opt_dest) is None:
+          print "Missing option {0} for action {1}".format(opt_str, action)
+          print_action_arguments_help(action)
+          print "Run ambari-server.py --help to see detailed description of each option"
+          raise FatalException(1, "Missing option")
     action_obj.execute()
 
     if action_obj.need_restart:

http://git-wip-us.apache.org/repos/asf/ambari/blob/bd2cd4ab/ambari-server/src/main/python/ambari_server/setupActions.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/python/ambari_server/setupActions.py b/ambari-server/src/main/python/ambari_server/setupActions.py
index c87e0b2..7ea0752 100644
--- a/ambari-server/src/main/python/ambari_server/setupActions.py
+++ b/ambari-server/src/main/python/ambari_server/setupActions.py
@@ -45,5 +45,6 @@ SETUP_JCE_ACTION = "setup-jce"
 ENABLE_STACK_ACTION = "enable-stack"
 DB_CLEANUP_ACTION = "db-cleanup"
 INSTALL_MPACK_ACTION = "install-mpack"
+UNINSTALL_MPACK_ACTION = "uninstall-mpack"
 UPGRADE_MPACK_ACTION = "upgrade-mpack"
 PAM_SETUP_ACTION = "setup-pam"

http://git-wip-us.apache.org/repos/asf/ambari/blob/bd2cd4ab/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 131e14d..04b96f5 100755
--- a/ambari-server/src/main/python/ambari_server/setupMpacks.py
+++ b/ambari-server/src/main/python/ambari_server/setupMpacks.py
@@ -34,7 +34,7 @@ from ambari_server.serverConfiguration import get_ambari_properties, get_ambari_
   get_common_services_location, get_mpacks_staging_location, get_server_temp_location, get_extension_location, \
   get_java_exe_path, read_ambari_user, parse_properties_file, JDBC_DATABASE_PROPERTY, get_dashboard_location
 from ambari_server.setupSecurity import ensure_can_start_under_current_user, generate_env
-from ambari_server.setupActions import INSTALL_MPACK_ACTION, UPGRADE_MPACK_ACTION
+from ambari_server.setupActions import INSTALL_MPACK_ACTION, UNINSTALL_MPACK_ACTION, UPGRADE_MPACK_ACTION
 from ambari_server.userInput import get_YN_input
 from ambari_server.dbConfiguration import ensure_jdbc_driver_is_installed, LINUX_DBMS_KEYS_LIST
 
@@ -582,7 +582,7 @@ def search_mpacks(mpack_name, max_mpack_version=None):
           results.append((staged_mpack_name, staged_mpack_version))
   return results
 
-def uninstall_mpacks(mpack_name, max_mpack_version=None):
+def _uninstall_mpacks(mpack_name, max_mpack_version=None):
   """
   Uninstall all "mpack_name" management packs.
   If "max_mpack_version" is specified uninstall only management packs < max_mpack_version
@@ -591,9 +591,9 @@ def uninstall_mpacks(mpack_name, max_mpack_version=None):
   """
   results = search_mpacks(mpack_name, max_mpack_version)
   for result in results:
-    uninstall_mpack(result[0], result[1])
+    _uninstall_mpack(result[0], result[1])
 
-def uninstall_mpack(mpack_name, mpack_version):
+def _uninstall_mpack(mpack_name, mpack_version):
   """
   Uninstall specific management pack
   :param mpack_name: Management pack name
@@ -818,27 +818,43 @@ def get_replay_log_file():
   replay_log_file = os.path.join(mpacks_staging_location, MPACKS_REPLAY_LOG_FILENAME)
   return replay_log_file
 
-def add_replay_log(mpack_command, mpack_archive_path, purge, force, verbose):
+def add_replay_log(mpack_command, mpack_archive_path, purge, purge_list, force, verbose):
   """
   Helper function to add mpack replay log entry
   :param mpack_command: mpack command
   :param mpack_archive_path: mpack archive path (/var/lib/ambari-server/resources/mpacks/mpack.tar.gz)
   :param purge: purge command line option
+  :param purge: purge list command line option
   :param force: force command line option
   :param verbose: verbose command line option
   """
   replay_log_file = get_replay_log_file()
-  log = { 'mpack_command' : mpack_command, 'mpack_path' : mpack_archive_path, 'purge' : purge, 'force' : force, 'verbose' : verbose }
+  log = { 'mpack_command' : mpack_command, 'mpack_path' : mpack_archive_path, 'purge' : purge, 'purge_list': purge_list, 'force' : force, 'verbose' : verbose }
   with open(replay_log_file, "a") as replay_log:
     replay_log.write("{0}\n".format(log))
 
+def remove_replay_logs(mpack_name):
+  replay_log_file = get_replay_log_file()
+  logs = []
+  if os.path.exists(replay_log_file):
+    with open(replay_log_file, "r") as f:
+      for log in f:
+        log = log.strip()
+        options = _named_dict(ast.literal_eval(log))
+        (name, version) = _get_mpack_name_version(options.mpack_path)
+        if mpack_name != name:
+          logs.append(log)
+    with open(replay_log_file, "w") as replay_log:
+      for log in logs:
+        replay_log.write("{0}\n".format(log))
+
 def install_mpack(options, replay_mode=False):
-  logger.info("Install mpack.")
   """
   Install management pack
   :param options: Command line options
   :param replay_mode: Flag to indicate if executing command in replay mode
   """
+  logger.info("Install mpack.")
   # Force install when replaying logs
   if replay_mode:
     options.force = True
@@ -848,15 +864,39 @@ def install_mpack(options, replay_mode=False):
   _execute_hook(mpack_metadata, AFTER_INSTALL_HOOK_NAME, mpack_staging_dir)
 
   if not replay_mode:
-    add_replay_log(INSTALL_MPACK_ACTION, mpack_archive_path, options.purge, options.force, options.verbose)
+    add_replay_log(INSTALL_MPACK_ACTION, mpack_archive_path, options.purge, options.purge_list, options.force, options.verbose)
+
+def uninstall_mpack(options, replay_mode=False):
+  """
+  Uninstall management pack
+  :param options: Command line options
+  :param replay_mode: Flag to indicate if executing command in replay mode
+  """
+  logger.info("Uninstall mpack.")
+  mpack_name = options.mpack_name
+
+  if not mpack_name:
+    print_error_msg("Management pack name not specified!")
+    raise FatalException(-1, 'Management pack name not specified!')
+
+  results = search_mpacks(mpack_name)
+  if not results:
+    print_error_msg("No management packs found that can be uninstalled!")
+    raise FatalException(-1, 'No management packs found that can be uninstalled!')
+
+  _uninstall_mpacks(mpack_name)
+
+  print_info_msg("Management pack {0} successfully uninstalled!".format(mpack_name))
+  if not replay_mode:
+    remove_replay_logs(mpack_name)
 
 def upgrade_mpack(options, replay_mode=False):
-  logger.info("Upgrade mpack.")
   """
   Upgrade management pack
   :param options: command line options
   :param replay_mode: Flag to indicate if executing command in replay mode
   """
+  logger.info("Upgrade mpack.")
   mpack_path = options.mpack_path
   if options.purge:
     print_error_msg("Purge is not supported with upgrade_mpack action!")
@@ -879,14 +919,14 @@ def upgrade_mpack(options, replay_mode=False):
   (mpack_metadata, mpack_name, mpack_version, mpack_staging_dir, mpack_archive_path) = _install_mpack(options, replay_mode, is_upgrade=True)
 
   # Uninstall old management packs
-  uninstall_mpacks(mpack_name, mpack_version)
+  _uninstall_mpacks(mpack_name, mpack_version)
 
   # Execute post upgrade hook
   _execute_hook(mpack_metadata, AFTER_UPGRADE_HOOK_NAME, mpack_staging_dir)
 
   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.force, options.verbose)
+    add_replay_log(UPGRADE_MPACK_ACTION, mpack_archive_path, options.purge, options.purge_list, options.force, options.verbose)
 
 def replay_mpack_logs():
   """

http://git-wip-us.apache.org/repos/asf/ambari/blob/bd2cd4ab/ambari-server/src/test/python/TestMpacks.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/TestMpacks.py b/ambari-server/src/test/python/TestMpacks.py
index 8329cf0..ba37856 100644
--- a/ambari-server/src/test/python/TestMpacks.py
+++ b/ambari-server/src/test/python/TestMpacks.py
@@ -48,7 +48,7 @@ with patch.object(platform, "linux_distribution", return_value = MagicMock(retur
                 serverConfiguration.search_file = _search_file
 
 from ambari_server.setupMpacks import install_mpack, upgrade_mpack, replay_mpack_logs, \
-  purge_stacks_and_mpacks, validate_purge, read_mpack_metadata, uninstall_mpack, \
+  purge_stacks_and_mpacks, validate_purge, read_mpack_metadata, _uninstall_mpack, \
   STACK_DEFINITIONS_RESOURCE_NAME, EXTENSION_DEFINITIONS_RESOURCE_NAME, \
   SERVICE_DEFINITIONS_RESOURCE_NAME, MPACKS_RESOURCE_NAME, GRAFANA_DASHBOARDS_DIRNAME, \
   DASHBOARDS_DIRNAME, SERVICE_METRICS_DIRNAME
@@ -546,13 +546,13 @@ class TestMpacks(TestCase):
   @patch("ambari_server.setupMpacks.get_ambari_version")
   @patch("ambari_server.setupMpacks.get_ambari_properties")
   @patch("ambari_server.setupMpacks.add_replay_log")
-  @patch("ambari_server.setupMpacks.uninstall_mpack")
+  @patch("ambari_server.setupMpacks._uninstall_mpack")
   @patch("ambari_server.setupMpacks.purge_stacks_and_mpacks")
   @patch("ambari_server.setupMpacks.expand_mpack")
   @patch("ambari_server.setupMpacks.download_mpack")
   @patch("ambari_server.setupMpacks.run_os_command")
   def test_upgrade_stack_mpack(self, run_os_command_mock, download_mpack_mock, expand_mpack_mock, purge_stacks_and_mpacks_mock,
-                               uninstall_mpack_mock, add_replay_log_mock, get_ambari_properties_mock,
+                               _uninstall_mpack_mock, add_replay_log_mock, get_ambari_properties_mock,
                                get_ambari_version_mock, create_symlink_mock, os_mkdir_mock, shutil_move_mock,
                                os_path_exists_mock, create_symlink_using_path_mock):
     options = self._create_empty_options_mock()
@@ -727,7 +727,7 @@ class TestMpacks(TestCase):
     self.assertEqual(18, create_symlink_mock.call_count) 
     create_symlink_using_path_mock.assert_has_calls(create_symlink_using_path_calls)
     self.assertEqual(1, create_symlink_using_path_mock.call_count)
-    uninstall_mpack_mock.assert_has_calls([call("mystack-ambari-mpack", "1.0.0.0")])
+    _uninstall_mpack_mock.assert_has_calls([call("mystack-ambari-mpack", "1.0.0.0")])
     self.assertTrue(add_replay_log_mock.called)
 
 
@@ -786,7 +786,7 @@ class TestMpacks(TestCase):
     common_services_directory = fake_configs[serverConfiguration.COMMON_SERVICES_PATH_PROPERTY]
     dashboard_directory = fake_configs[serverConfiguration.DASHBOARD_PATH_PROPERTY]
 
-    uninstall_mpack("mystack-ambari-mpack", "1.0.0.1")
+    _uninstall_mpack("mystack-ambari-mpack", "1.0.0.1")
 
     self.assertEqual(1, sudo_rmtree_mock.call_count)
     self.assertEqual(6, sudo_unlink_mock.call_count)


[09/47] ambari git commit: AMBARI-18942 - Auto-start services: Avoid full page reload after "Save" / "Discard" (rzang)

Posted by jo...@apache.org.
AMBARI-18942 - Auto-start services: Avoid full page reload after "Save" / "Discard" (rzang)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: 2152c6a2d6c8aba1ee145f4f9d85e1de157c3caf
Parents: 0bbdb93
Author: Richard Zang <rz...@apache.org>
Authored: Mon Nov 21 14:09:47 2016 -0800
Committer: Richard Zang <rz...@apache.org>
Committed: Mon Nov 21 14:29:15 2016 -0800

----------------------------------------------------------------------
 .../main/admin/service_auto_start.js            | 58 +++++++++++++++-----
 .../templates/main/admin/service_auto_start.hbs |  2 +-
 .../app/views/main/admin/service_auto_start.js  | 21 ++++++-
 .../service_auto_start/component_auto_start.js  |  9 +++
 4 files changed, 72 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/2152c6a2/ambari-web/app/controllers/main/admin/service_auto_start.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/service_auto_start.js b/ambari-web/app/controllers/main/admin/service_auto_start.js
index b425c78..3365cae 100644
--- a/ambari-web/app/controllers/main/admin/service_auto_start.js
+++ b/ambari-web/app/controllers/main/admin/service_auto_start.js
@@ -25,6 +25,8 @@ App.MainAdminServiceAutoStartController = Em.Controller.extend({
   componentsConfigs: [],
   isSaveDisabled: true,
   valueChanged: false,
+  syncTrigger: false, // trigger status reset in switch view after "save"
+  revertTrigger: false, // trigger status reset in switch view after "discard"
 
   loadClusterConfig: function () {
     return App.ajax.send({
@@ -60,7 +62,9 @@ App.MainAdminServiceAutoStartController = Em.Controller.extend({
             component_name: serviceComponentInfo.component_name,
             recovery_enabled: serviceComponentInfo.recovery_enabled === 'true',
             valueChanged: false,
-            service_name: serviceComponentInfo.service_name
+            service_name: serviceComponentInfo.service_name,
+            syncTrigger: false,
+            revertTrigger: false,
           });
           if (services[serviceComponentInfo.service_name]) {
             services[serviceComponentInfo.service_name].get('componentRecovery').push(componentRecovery);
@@ -121,6 +125,34 @@ App.MainAdminServiceAutoStartController = Em.Controller.extend({
     this.set('isSaveDisabled', !valuesChanged);
   }.observes('valueChanged'),
 
+  syncStatus: function () {
+    // component level switches
+    this.get('tabs').forEach(function (service) {
+      service.get('componentRecovery').forEach(function (component) {
+        component.set('valueChanged', false);
+        component.toggleProperty('syncTrigger');
+      });
+    });
+    // service level switch
+    this.toggleProperty('syncTrigger');
+    this.set('valueChanged', false);
+    this.set('isSaveDisabled', true);
+  },
+
+  revertStatus: function () {
+    // component level switches
+    this.get('tabs').forEach(function (service) {
+      service.get('componentRecovery').forEach(function (component) {
+        component.set('valueChanged', false);
+        component.toggleProperty('revertTrigger');
+      });
+    });
+    // service level switch
+    this.toggleProperty('revertTrigger');
+    this.set('valueChanged', false);
+    this.set('isSaveDisabled', true);
+  },
+
   enableAll: function (event) {
     event.context.get('componentRecovery').forEach(function (component) {
       component.set('recoveryEnabled', true);
@@ -133,10 +165,6 @@ App.MainAdminServiceAutoStartController = Em.Controller.extend({
     });
   },
 
-  doReload: function () {
-    window.location.reload();
-  },
-
   /**
    * If some configs are changed and user navigates away or select another config-group, show this popup with propose to save changes
    * @param {object} transitionCallback - callback with action to change configs view
@@ -184,7 +212,7 @@ App.MainAdminServiceAutoStartController = Em.Controller.extend({
           });
         });
         if (enabledComponents.length){
-          App.ajax.send({
+          var promise1 = App.ajax.send({
             name: 'components.update',
             sender: this,
             data: {
@@ -196,7 +224,7 @@ App.MainAdminServiceAutoStartController = Em.Controller.extend({
           });
         }
         if (disabledComponents.length){
-          App.ajax.send({
+          var promise2 = App.ajax.send({
             name: 'components.update',
             sender: this,
             data: {
@@ -207,19 +235,21 @@ App.MainAdminServiceAutoStartController = Em.Controller.extend({
             }
           });
         }
-        if (typeof transitionCallback === 'function') {
-          transitionCallback();
-        } else {
-          self.doReload();
-        }
+        $.when(promise1, promise2).done(
+          function () {
+            if (typeof transitionCallback === 'function') {
+              transitionCallback();
+            }
+            self.syncStatus();
+          }
+        );
         this.hide();
       },
       onDiscard: function () {
         if (typeof transitionCallback === 'function') {
           transitionCallback();
-        } else {
-          self.doReload();
         }
+        self.revertStatus();
         this.hide();
       },
       onCancel: function () {

http://git-wip-us.apache.org/repos/asf/ambari/blob/2152c6a2/ambari-web/app/templates/main/admin/service_auto_start.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/service_auto_start.hbs b/ambari-web/app/templates/main/admin/service_auto_start.hbs
index bd2be51..91d3706 100644
--- a/ambari-web/app/templates/main/admin/service_auto_start.hbs
+++ b/ambari-web/app/templates/main/admin/service_auto_start.hbs
@@ -28,7 +28,7 @@
     </div>
     <div class="col-md-6">
       <div class="pull-right operations-button">
-        <button class="btn btn-default" {{action doReload target="controller"}} {{bindAttr disabled="controller.isSaveDisabled"}}>{{t common.discard}}</button>
+        <button class="btn btn-default" {{action revertStatus target="controller"}} {{bindAttr disabled="controller.isSaveDisabled"}}>{{t common.discard}}</button>
         <button class="btn btn-success" {{action showSavePopup target="controller"}} {{bindAttr disabled="controller.isSaveDisabled"}}>{{t common.save}}</button>
       </div>
     </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/2152c6a2/ambari-web/app/views/main/admin/service_auto_start.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/service_auto_start.js b/ambari-web/app/views/main/admin/service_auto_start.js
index dcbbfc9..5b10d1b 100644
--- a/ambari-web/app/views/main/admin/service_auto_start.js
+++ b/ambari-web/app/views/main/admin/service_auto_start.js
@@ -72,7 +72,7 @@ App.MainAdminServiceAutoStartView = Em.View.extend({
   initSwitcher: function () {
     var self = this;
     if (this.$()) {
-      this.$("input:eq(0)").bootstrapSwitch({
+      this.set('switcher', this.$("input:eq(0)").bootstrapSwitch({
         onText: Em.I18n.t('common.enabled'),
         offText: Em.I18n.t('common.disabled'),
         offColor: 'default',
@@ -81,8 +81,23 @@ App.MainAdminServiceAutoStartView = Em.View.extend({
         onSwitchChange: function (event, state) {
           self.updateClusterConfigs(state);
         }
-      });
+      }));
+    }
+  },
+
+  syncComponentRecoveryStatus: function () {
+    this.set('savedRecoveryEnabled', this.get('switcherValue'));
+  }.observes('controller.syncTrigger'),
+
+  revertComponentRecoveryStatus: function () {
+    this.set('switcherValue', this.get('savedRecoveryEnabled'));
+    if (this.get('controller.clusterConfigs')) {
+      this.set('controller.clusterConfigs.recovery_enabled', '' +  this.get('savedRecoveryEnabled'));
+    }
+    var switcher = this.get('switcher');
+    if (switcher) {
+      switcher.bootstrapSwitch('state', this.get('savedRecoveryEnabled'));
     }
-  }
+  }.observes('controller.revertTrigger')
 });
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/2152c6a2/ambari-web/app/views/main/admin/service_auto_start/component_auto_start.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/service_auto_start/component_auto_start.js b/ambari-web/app/views/main/admin/service_auto_start/component_auto_start.js
index a25d835..ceafd21 100644
--- a/ambari-web/app/views/main/admin/service_auto_start/component_auto_start.js
+++ b/ambari-web/app/views/main/admin/service_auto_start/component_auto_start.js
@@ -31,6 +31,14 @@ App.MainAdminServiceAutoStartComponentView = Em.View.extend({
     this.initSwitcher();
   },
 
+  syncComponentRecoveryStatus: function () {
+    this.set('savedRecoveryEnabled', this.get('component.recoveryEnabled'))
+  }.observes('component.syncTrigger'),
+
+  revertComponentRecoveryStatus: function () {
+    this.set('component.recoveryEnabled', this.get('savedRecoveryEnabled'));
+  }.observes('component.revertTrigger'),
+
   onValueChange: function () {
     this.get('switcher').bootstrapSwitch('state', this.get('component.recoveryEnabled'));
   }.observes('component.recoveryEnabled'),
@@ -52,6 +60,7 @@ App.MainAdminServiceAutoStartComponentView = Em.View.extend({
         onSwitchChange: function (event, state) {
           self.set('tab.enabledComponents', self.get('tab.enabledComponents') + (state ? 1 : -1));
           self.set('recoveryEnabled', state);
+          self.set('component.recoveryEnabled', state);
           self.set('component.valueChanged', self.get('savedRecoveryEnabled') !== state);
           self.get('parentView.controller').checkValuesChange();
         }


[23/47] ambari git commit: AMBARI-18912. Implement Create Alerts: step 1 select alert type.(XIWANG)

Posted by jo...@apache.org.
AMBARI-18912. Implement Create Alerts: step 1 select alert type.(XIWANG)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: 31ce5f7d3d087af5d0f03f295fe5d680a6ee453d
Parents: e73e783
Author: Xi Wang <xi...@apache.org>
Authored: Wed Nov 16 18:31:35 2016 -0800
Committer: Xi Wang <xi...@apache.org>
Committed: Tue Nov 22 14:21:01 2016 -0800

----------------------------------------------------------------------
 .../add_alert_definition/step1_controller.js    | 41 ++++++-------
 .../alerts/definition_configs_controller.js     | 40 ++++++-------
 ambari-web/app/messages.js                      | 17 ++++--
 .../app/models/alerts/alert_definition.js       | 54 ++++++++++++++++++
 ambari-web/app/styles/alerts.less               | 60 ++++++++++++++++++++
 .../main/alerts/add_alert_definition/step1.hbs  | 30 +++++-----
 .../alerts/add_alert_definition/step1_view.js   |  3 +
 .../step1_controller_test.js                    | 24 +-------
 8 files changed, 186 insertions(+), 83 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/31ce5f7d/ambari-web/app/controllers/main/alerts/add_alert_definition/step1_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/alerts/add_alert_definition/step1_controller.js b/ambari-web/app/controllers/main/alerts/add_alert_definition/step1_controller.js
index 2d4f338..c758fc0 100644
--- a/ambari-web/app/controllers/main/alerts/add_alert_definition/step1_controller.js
+++ b/ambari-web/app/controllers/main/alerts/add_alert_definition/step1_controller.js
@@ -24,34 +24,25 @@ App.AddAlertDefinitionStep1Controller = Em.Controller.extend({
 
   /**
    * List of available alert definition types
-   * @type {{value: string, isActive: boolean}[]}
+   * @type {{name: string, isActive: boolean}[]}
    */
-  alertDefinitionsTypes: [
-    Em.Object.create({value: 'PORT', isActive: false, icon: 'glyphicon glyphicon-signal'}),
-    Em.Object.create({value: 'METRIC', isActive: false, icon: 'icon-bolt'}),
-    Em.Object.create({value: 'WEB', isActive: false, icon: 'glyphicon glyphicon-globe'}),
-    Em.Object.create({value: 'AGGREGATE', isActive: false, icon: 'glyphicon glyphicon-plus-sign-alt'}),
-    Em.Object.create({value: 'SCRIPT', isActive: false, icon: 'glyphicon glyphicon-code'}),
-    Em.Object.create({value: 'SERVER', isActive: false, icon: 'glyphicon glyphicon-desktop'}),
-    Em.Object.create({value: 'RECOVERY', isActive: false, icon: 'glyphicon glyphicon-desktop'})
-  ],
-
-  /**
-   * "Next"-button is disabled if user doesn't select any alert definition type
-   * @type {boolean}
-   */
-  isSubmitDisabled: Em.computed.everyBy('alertDefinitionsTypes', 'isActive', false),
+  alertDefinitionsTypes: function () {
+    return App.AlertType.find().map(function(option) {
+      return Em.Object.create({
+        name: option.get('name'),
+        displayName: option.get('displayName'),
+        icon: option.get('iconPath'),
+        description: option.get('description')
+      });
+    });
+  }.property(),
 
   /**
    * Set selectedType if it exists in the wizard controller
    * @method loadStep
    */
   loadStep: function() {
-    this.get('alertDefinitionsTypes').setEach('isActive', false);
-    var selectedType = this.get('content.selectedType');
-    if(selectedType) {
-      this.selectType({context: {value: selectedType}});
-    }
+    this.set('content.selectedType', '');
   },
 
   /**
@@ -61,10 +52,10 @@ App.AddAlertDefinitionStep1Controller = Em.Controller.extend({
    */
   selectType: function(e) {
     var type = e.context,
-      types = this.get('alertDefinitionsTypes');
-    types.setEach('isActive', false);
-    types.findProperty('value', type.value).set('isActive', true);
-    this.set('content.selectedType', type.value);
+        types = this.get('alertDefinitionsTypes');
+    this.set('content.selectedType', type.name);
+    $("[rel='selectable-tooltip']").trigger('mouseleave');
+    App.router.send('next');
   }
 
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/31ce5f7d/ambari-web/app/controllers/main/alerts/definition_configs_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/alerts/definition_configs_controller.js b/ambari-web/app/controllers/main/alerts/definition_configs_controller.js
index 4c82556..138aaa4 100644
--- a/ambari-web/app/controllers/main/alerts/definition_configs_controller.js
+++ b/ambari-web/app/controllers/main/alerts/definition_configs_controller.js
@@ -225,7 +225,7 @@ App.MainAlertDefinitionConfigsController = Em.Controller.extend({
     var result = [];
     var alertDefinition = this.get('content');
     var isWizard = this.get('isWizard');
-    var units = this.get('content.reporting').findProperty('type','units') ?
+    var units = this.get('content.reporting') && this.get('content.reporting').findProperty('type','units') ?
       this.get('content.reporting').findProperty('type','units').get('text'): null;
 
     if (this.get('isWizard')) {
@@ -256,7 +256,7 @@ App.MainAlertDefinitionConfigsController = Em.Controller.extend({
         value: isWizard ? '' : this.getThresholdsProperty('critical', 'value')
       }),
       App.AlertConfigProperties.Parameter.create({
-        value: alertDefinition.get('uri.connectionTimeout'),
+        value: isWizard ? '': alertDefinition.get('uri.connectionTimeout'),
         threshold: "CRITICAL",
         name: 'connection_timeout',
         label: 'Connection Timeout',
@@ -311,7 +311,7 @@ App.MainAlertDefinitionConfigsController = Em.Controller.extend({
         value: isWizard ? '' : this.getThresholdsProperty('critical', 'value')
       }),
       App.AlertConfigProperties.Parameter.create({
-        value: alertDefinition.get('uri.connectionTimeout'),
+        value: isWizard ? '': alertDefinition.get('uri.connectionTimeout'),
         threshold: "CRITICAL",
         name: 'connection_timeout',
         label: 'Connection Timeout',
@@ -404,7 +404,7 @@ App.MainAlertDefinitionConfigsController = Em.Controller.extend({
         valueMetric: units
       }),
       App.AlertConfigProperties.Parameter.create({
-        value: alertDefinition.get('uri.connectionTimeout'),
+        value: isWizard ? '': alertDefinition.get('uri.connectionTimeout'),
         name: 'connection_timeout',
         label: 'Connection Timeout',
         displayType: 'parameter',
@@ -447,20 +447,22 @@ App.MainAlertDefinitionConfigsController = Em.Controller.extend({
       NUMERIC: App.AlertConfigProperties.Parameters.NumericMixin,
       PERCENT: App.AlertConfigProperties.Parameters.PercentageMixin
     };
-    alertDefinition.get('parameters').forEach(function (parameter) {
-      var mixin = mixins[parameter.get('type')] || {}; // validation depends on parameter-type
-      result.push(App.AlertConfigProperties.Parameter.create(mixin, {
-        value: isWizard ? '' : parameter.get('value'),
-        apiProperty: parameter.get('name'),
-        description: parameter.get('description'),
-        label: isWizard ? '' : parameter.get('displayName'),
-        threshold: isWizard ? '' : parameter.get('threshold'),
-        units: isWizard ? '' : parameter.get('units'),
-        type: isWizard ? '' : parameter.get('type'),
-        hidden: parameter.get('visibility') === "HIDDEN",
-        readonly: parameter.get('visibility') === "READ_ONLY"
-      }));
-    });
+    if (alertDefinition) {
+      alertDefinition.get('parameters').forEach(function (parameter) {
+        var mixin = mixins[parameter.get('type')] || {}; // validation depends on parameter-type
+        result.push(App.AlertConfigProperties.Parameter.create(mixin, {
+          value: isWizard ? '' : parameter.get('value'),
+          apiProperty: parameter.get('name'),
+          description: parameter.get('description'),
+          label: isWizard ? '' : parameter.get('displayName'),
+          threshold: isWizard ? '' : parameter.get('threshold'),
+          units: isWizard ? '' : parameter.get('units'),
+          type: isWizard ? '' : parameter.get('type'),
+          hidden: parameter.get('visibility') === "HIDDEN",
+          readonly: parameter.get('visibility') === "READ_ONLY"
+        }));
+      });
+    }
 
     return result;
   },
@@ -473,7 +475,7 @@ App.MainAlertDefinitionConfigsController = Em.Controller.extend({
   renderAggregateConfigs: function () {
     var isWizard = this.get('isWizard');
     var alertDefinition = this.get('content');
-    var units = this.get('content.reporting').findProperty('type','units') ?
+    var units = this.get('content.reporting') && this.get('content.reporting').findProperty('type','units') ?
         this.get('content.reporting').findProperty('type','units').get('text'): null;
     return [
       App.AlertConfigProperties.Description.create({

http://git-wip-us.apache.org/repos/asf/ambari/blob/31ce5f7d/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 7ba19db..aa4e2aa 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -1073,12 +1073,21 @@ Em.I18n.translations = {
   'form.validator.alertNotificationName':'Invalid Alert Notification Name. Only alphanumerics, hyphens, spaces and underscores are allowed.',
   'form.validator.configKey.specific':'"{0}" is invalid Key. Only alphanumerics, hyphens, underscores, asterisks and periods are allowed.',
 
-  'alerts.add.header': 'Create Alert Definition',
-  'alerts.add.step1.header': 'Choose Type',
-  'alerts.add.step2.header': 'Configure',
-  'alerts.add.step3.header': 'Review',
+  'alerts.add.header': 'Create Alert',
+  'alerts.add.step1.header': 'Choose Alert Type',
+  'alerts.add.step1.header.description': 'Select the type of alert you want to create',
+  'alerts.add.step2.header': 'Define Alert',
+  'alerts.add.step3.header': 'Specify Threshold',
   'alerts.add.step3.selectedType': 'Selected Type',
 
+  'alerts.add.wizard.step1.body.choose.tooltip': 'Click to select',
+  'alerts.add.wizard.step1.body.port.description':'Check TCP connectivity to a remote endpoint',
+  'alerts.add.wizard.step1.body.web.description':'Check for TCP connectivity and verify that a proper HTTP response code was returned',
+  'alerts.add.wizard.step1.body.metric.description':'Define JMX/AMS endpoints that can be queried for values',
+  'alerts.add.wizard.step1.body.script.description':'Defer all functionality to a Python script accessible to the Ambari agents from a specified relative or absolute path',
+  'alerts.add.wizard.step1.body.aggregate.description':'Combine the results of another alert definition from different nodes',
+  'alerts.add.wizard.step1.body.raw.description':'User can upload alert parameter using a JSON script',
+
   'alerts.fastAccess.popup.header': '{0} Critical or Warning Alerts',
   'alerts.fastAccess.popup.body.name': 'Alert Definition Name',
   'alerts.fastAccess.popup.body.showmore': 'Go to Alerts Definitions',

http://git-wip-us.apache.org/repos/asf/ambari/blob/31ce5f7d/ambari-web/app/models/alerts/alert_definition.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/alerts/alert_definition.js b/ambari-web/app/models/alerts/alert_definition.js
index a3c8850..5d61112 100644
--- a/ambari-web/app/models/alerts/alert_definition.js
+++ b/ambari-web/app/models/alerts/alert_definition.js
@@ -325,3 +325,57 @@ App.AlertMetricsSourceDefinition.FIXTURES = [];
 App.AlertMetricsUriDefinition.FIXTURES = [];
 App.AlertMetricsAmsDefinition.FIXTURES = [];
 App.AlertDefinitionParameter.FIXTURES = [];
+
+
+App.AlertType = DS.Model.extend({
+  name: DS.attr('string'),
+  displayName: DS.attr('string'),
+  iconPath: DS.attr('string'),
+  description: DS.attr('string'),
+  properties: DS.attr('array')
+});
+
+App.AlertType.FIXTURES = [
+  {
+    id: 'PORT',
+    name: 'PORT',
+    icon_path: 'glyphicon glyphicon-log-in',
+    display_name: 'Port',
+    description: Em.I18n.t('alerts.add.wizard.step1.body.port.description')
+  },
+  {
+    id: 'WEB',
+    name: 'WEB',
+    icon_path: 'glyphicon glyphicon-globe',
+    display_name: 'Web',
+    description: Em.I18n.t('alerts.add.wizard.step1.body.web.description')
+  },
+  {
+    id: 'METRIC',
+    name: 'METRIC',
+    display_name: 'Metric',
+    icon_path: 'glyphicon glyphicon-flash',
+    description: Em.I18n.t('alerts.add.wizard.step1.body.metric.description')
+  },
+  {
+    id: 'SCRIPT',
+    name: 'SCRIPT',
+    icon_path: 'glyphicon glyphicon-file',
+    display_name: 'Script',
+    description: Em.I18n.t('alerts.add.wizard.step1.body.script.description')
+  },
+  {
+    id: 'AGGREGATE',
+    name: 'AGGREGATE',
+    icon_path: 'glyphicon glyphicon-plus',
+    display_name: 'Aggregate',
+    description: Em.I18n.t('alerts.add.wizard.step1.body.aggregate.description')
+  },
+  {
+    id: 'RAW',
+    name: 'RAW',
+    icon_path: 'glyphicon glyphicon-align-justify',
+    display_name: 'Raw',
+    description: Em.I18n.t('alerts.add.wizard.step1.body.raw.description')
+  }
+];

http://git-wip-us.apache.org/repos/asf/ambari/blob/31ce5f7d/ambari-web/app/styles/alerts.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/alerts.less b/ambari-web/app/styles/alerts.less
index f12393d..bf3eaf3 100644
--- a/ambari-web/app/styles/alerts.less
+++ b/ambari-web/app/styles/alerts.less
@@ -581,3 +581,63 @@
     margin: 7px;
   }
 }
+
+/***** Start styles for alert create wizard *****/
+#create-alert-wizard-step1 {
+  .alert-types-container {
+    padding: 10px 15px;
+    .alert-type {
+      height: 150px;
+      width: 32%;
+      margin: 5px;
+      padding: 10px;
+      background: white;
+    }
+    .alert-type:hover {
+      cursor: pointer;
+    }
+    .icon {
+      .glyphicon {
+        font-size: 35px;
+        line-height: 3.5;
+      }
+    }
+    .icon.PORT {
+      color: #F6D955;
+    }
+    .icon.WEB {
+      color: #9ADCD4;
+    }
+    .icon.METRIC {
+      color: #F69F79;
+    }
+    .icon.SCRIPT {
+      color: #F2C2AA;
+    }
+    .icon.AGGREGATE {
+      color: #8AD4C7;
+    }
+    .icon.RAW {
+      color: #C9A6B2;
+    }
+    .label-description {
+      padding-top: 10px;
+      .label-text {
+        font-size: 14px;
+        font-weight: bold;
+        margin-bottom: 5px;
+        white-space: nowrap;
+        overflow: hidden;
+        text-overflow: ellipsis;
+      }
+      .description-text {
+        font-size: 12px;
+        overflow: hidden;
+        text-overflow: ellipsis;
+      }
+    }
+  }
+}
+
+/***** End styles for alert create wizard *****/
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/31ce5f7d/ambari-web/app/templates/main/alerts/add_alert_definition/step1.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/alerts/add_alert_definition/step1.hbs b/ambari-web/app/templates/main/alerts/add_alert_definition/step1.hbs
index ee61648..6617164 100644
--- a/ambari-web/app/templates/main/alerts/add_alert_definition/step1.hbs
+++ b/ambari-web/app/templates/main/alerts/add_alert_definition/step1.hbs
@@ -16,20 +16,22 @@
 * limitations under the License.
 }}
 
-<div class="wizard-content col-md-9">
+<div id="create-alert-wizard-step1" class="wizard-content col-md-9">
   <h4 class="step-title">{{t alerts.add.step1.header}}</h4>
-  <div class="panel panel-default">
-    <div class="panel-body">
-    {{#each type in controller.alertDefinitionsTypes}}
-        <a href="#" {{bindAttr class=":btn type.isActive:active"}} {{action selectType type target="controller"}}>
-            <span {{bindAttr class="type.icon"}}></span> {{type.value}}
-        </a>
-    {{/each}}
+  <p class="step-description">{{t alerts.add.step1.header.description}}</p>
+    <div class="alert-types-container row">
+      {{#each type in controller.alertDefinitionsTypes}}
+        <div class="col-md-4 row alert-type" rel="selectable-tooltip"
+          {{translateAttr data-original-title="alerts.add.wizard.step1.body.choose.tooltip"}}
+          {{action "selectType" type target="controller"}}>
+          <div {{bindAttr class="type.name :icon :col-md-3"}}>
+            <span {{bindAttr class="type.icon"}}></span>
+          </div>
+          <div class="label-description col-md-9">
+            <p class="label-text">{{type.displayName}}</p>
+            <p class="description-text">{{type.description}}</p>
+          </div>
+        </div>
+      {{/each}}
     </div>
-  </div>
-</div>
-<div class="wizard-footer col-md-12">
-  <div class="btn-area">
-    <a class="btn btn-success pull-right" {{bindAttr disabled="isSubmitDisabled"}} {{action next}}>{{t common.next}} &rarr;</a>
-  </div>
 </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/31ce5f7d/ambari-web/app/views/main/alerts/add_alert_definition/step1_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/alerts/add_alert_definition/step1_view.js b/ambari-web/app/views/main/alerts/add_alert_definition/step1_view.js
index d55d20f..398d721 100644
--- a/ambari-web/app/views/main/alerts/add_alert_definition/step1_view.js
+++ b/ambari-web/app/views/main/alerts/add_alert_definition/step1_view.js
@@ -24,6 +24,9 @@ App.AddAlertDefinitionStep1View = Em.View.extend({
 
   didInsertElement: function() {
     this.get('controller').loadStep();
+    Em.run.later(this, function () {
+      App.tooltip($("[rel='selectable-tooltip']"));
+    }, 300);
   }
 
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/31ce5f7d/ambari-web/test/controllers/main/alerts/add_alert_definition/step1_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/alerts/add_alert_definition/step1_controller_test.js b/ambari-web/test/controllers/main/alerts/add_alert_definition/step1_controller_test.js
index 322c08a..7d19239 100644
--- a/ambari-web/test/controllers/main/alerts/add_alert_definition/step1_controller_test.js
+++ b/ambari-web/test/controllers/main/alerts/add_alert_definition/step1_controller_test.js
@@ -30,13 +30,13 @@ describe('App.AddAlertDefinitionStep1Controller', function () {
   describe('#selectType', function() {
 
     beforeEach(function () {
-      controller.get('alertDefinitionsTypes').setEach('isActive', false);
+      controller.get('content').set('selectedType', '');
     });
 
     it('should set isActive for selected type', function () {
       var e = {context: {value: 'PORT'}};
       controller.selectType(e);
-      expect(controller.get('alertDefinitionsTypes').findProperty('value', 'PORT').get('isActive')).to.be.true;
+      expect(controller.get('content.selectedType')).to.equal('PORT');
     });
 
   });
@@ -45,30 +45,12 @@ describe('App.AddAlertDefinitionStep1Controller', function () {
 
     beforeEach(function () {
       controller.set('content.selectedType', 'PORT');
-
     });
 
     it('should set predefined type', function () {
       controller.loadStep();
-      expect(controller.get('alertDefinitionsTypes').findProperty('value', 'PORT').get('isActive')).to.be.true;
-    });
-
-  });
-
-  describe('#isSubmitDisabled', function () {
-
-    beforeEach(function () {
-      controller.get('alertDefinitionsTypes').setEach('isActive', false);
-    });
-
-    it('should be based on isActive', function () {
-
-      expect(controller.get('isSubmitDisabled')).to.be.true;
-      controller.get('alertDefinitionsTypes').objectAt(0).set('isActive', true);
-      expect(controller.get('isSubmitDisabled')).to.be.false;
-
+      expect(controller.get('content.selectedType').to.equal(''));
     });
 
   });
-
 });
\ No newline at end of file


[46/47] ambari git commit: AMBARI-18982. Failures due to timeout don't report any reason (aonishuk)

Posted by jo...@apache.org.
AMBARI-18982. Failures due to timeout don't report any reason (aonishuk)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: ece1de33af2edb765d81dcdc66445619c9d4a6d9
Parents: 9579275
Author: Andrew Onishuk <ao...@hortonworks.com>
Authored: Mon Nov 28 12:37:39 2016 +0200
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Mon Nov 28 12:37:39 2016 +0200

----------------------------------------------------------------------
 .../main/python/ambari_agent/CustomServiceOrchestrator.py   | 9 +++++----
 .../python/ambari_agent/TestCustomServiceOrchestrator.py    | 4 ++--
 .../apache/ambari/server/actionmanager/ActionScheduler.java | 2 +-
 3 files changed, 8 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/ece1de33/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py b/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
index 770484d..ebd3506 100644
--- a/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
+++ b/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
@@ -223,7 +223,7 @@ class CustomServiceOrchestrator():
       # if canceled and not background command
       if handle is None:
         cancel_reason = self.command_canceled_reason(task_id)
-        if cancel_reason:
+        if cancel_reason is not None:
           ret['stdout'] += cancel_reason
           ret['stderr'] += cancel_reason
 
@@ -251,10 +251,11 @@ class CustomServiceOrchestrator():
         logger.debug('Pop with taskId %s' % task_id)
         pid = self.commands_in_progress.pop(task_id)
         if not isinstance(pid, int):
-          if pid:
-            return '\nCommand aborted. ' + pid
+          reason = pid
+          if reason:
+            return "\nCommand aborted. Reason: '{0}'".format(reason)
           else:
-            return ''
+            return "\nCommand aborted."
     return None
 
   def requestComponentStatus(self, command):

http://git-wip-us.apache.org/repos/asf/ambari/blob/ece1de33/ambari-agent/src/test/python/ambari_agent/TestCustomServiceOrchestrator.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestCustomServiceOrchestrator.py b/ambari-agent/src/test/python/ambari_agent/TestCustomServiceOrchestrator.py
index 2be6e1a..0304adc 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestCustomServiceOrchestrator.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestCustomServiceOrchestrator.py
@@ -400,8 +400,8 @@ class TestCustomServiceOrchestrator(TestCase):
     ret = async_result.get()
 
     self.assertEqual(ret['exitcode'], 1)
-    self.assertEquals(ret['stdout'], 'killed\nCommand aborted. reason')
-    self.assertEquals(ret['stderr'], 'killed\nCommand aborted. reason')
+    self.assertEquals(ret['stdout'], 'killed\nCommand aborted. Reason: \'reason\'')
+    self.assertEquals(ret['stderr'], 'killed\nCommand aborted. Reason: \'reason\'')
 
     self.assertTrue(kill_process_with_children_mock.called)
     self.assertFalse(command['taskId'] in orchestrator.commands_in_progress.keys())

http://git-wip-us.apache.org/repos/asf/ambari/blob/ece1de33/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionScheduler.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionScheduler.java b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionScheduler.java
index 7a84536..e80b020 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionScheduler.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ActionScheduler.java
@@ -1246,7 +1246,7 @@ class ActionScheduler implements Runnable {
               hostRoleCommand.getStatus() == HostRoleStatus.IN_PROGRESS) {
           CancelCommand cancelCommand = new CancelCommand();
           cancelCommand.setTargetTaskId(hostRoleCommand.getTaskId());
-          cancelCommand.setReason("");
+          cancelCommand.setReason("Stage timeout");
           actionQueue.enqueue(hostRoleCommand.getHostName(), cancelCommand);
         }
       }


[21/47] ambari git commit: AMBARI-18960 - Dashboards directory only needs to be sync'd for METRICS_GRAFANA

Posted by jo...@apache.org.
AMBARI-18960 - Dashboards directory only needs to be sync'd for METRICS_GRAFANA


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: 48715331207b73978803aa666209b84c26224fde
Parents: 4a7cbcb
Author: Tim Thorpe <tt...@apache.org>
Authored: Tue Nov 22 08:56:34 2016 -0800
Committer: Tim Thorpe <tt...@apache.org>
Committed: Tue Nov 22 08:56:34 2016 -0800

----------------------------------------------------------------------
 .../ambari_agent/CustomServiceOrchestrator.py   |  4 +++-
 .../TestCustomServiceOrchestrator.py            | 21 ++++++++++++++++++++
 2 files changed, 24 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/48715331/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py b/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
index fbc1509..b814334 100644
--- a/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
+++ b/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
@@ -58,6 +58,7 @@ class CustomServiceOrchestrator():
   AMBARI_SERVER_HOST = "ambari_server_host"
   AMBARI_SERVER_PORT = "ambari_server_port"
   AMBARI_SERVER_USE_SSL = "ambari_server_use_ssl"
+  METRICS_GRAFANA = "METRICS_GRAFANA"
 
   FREQUENT_COMMANDS = [COMMAND_NAME_SECURITY_STATUS, COMMAND_NAME_STATUS]
   DONT_DEBUG_FAILURES_FOR_COMMANDS = FREQUENT_COMMANDS
@@ -153,7 +154,8 @@ class CustomServiceOrchestrator():
         self.file_cache.get_host_scripts_base_dir(server_url_prefix)          
         hook_dir = self.file_cache.get_hook_base_dir(command, server_url_prefix)
         base_dir = self.file_cache.get_service_base_dir(command, server_url_prefix)
-        self.file_cache.get_dashboard_base_dir(server_url_prefix)
+        if command['role'] == self.METRICS_GRAFANA:
+          self.file_cache.get_dashboard_base_dir(server_url_prefix)
 
         script_path = self.resolve_script_path(base_dir, script)
         script_tuple = (script_path, base_dir)

http://git-wip-us.apache.org/repos/asf/ambari/blob/48715331/ambari-agent/src/test/python/ambari_agent/TestCustomServiceOrchestrator.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestCustomServiceOrchestrator.py b/ambari-agent/src/test/python/ambari_agent/TestCustomServiceOrchestrator.py
index 9f1241e..d0d6ac4 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestCustomServiceOrchestrator.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestCustomServiceOrchestrator.py
@@ -277,6 +277,8 @@ class TestCustomServiceOrchestrator(TestCase):
     self.assertEqual(ret['exitcode'], 0)
     self.assertTrue(run_file_mock.called)
     self.assertEqual(run_file_mock.call_count, 3)
+    # Should only be called for METRICS_GRAFANA
+    self.assertFalse(get_dashboard_base_dir_mock.called)
 
     run_file_mock.reset_mock()
 
@@ -299,6 +301,25 @@ class TestCustomServiceOrchestrator(TestCase):
 
     run_file_mock.reset_mock()
 
+    # For role=METRICS_GRAFANA, dashboards should be sync'd
+    command['role'] = 'METRICS_GRAFANA'
+    get_dashboard_base_dir_mock.reset_mock()
+    get_dashboard_base_dir_mock.return_value = "/dashboards/"
+
+    run_file_mock.return_value = {
+        'stdout' : 'sss',
+        'stderr' : 'eee',
+        'exitcode': 0,
+      }
+    ret = orchestrator.runCommand(command, "out.txt", "err.txt")
+    self.assertEqual(ret['exitcode'], 0)
+    self.assertTrue(run_file_mock.called)
+    self.assertEqual(run_file_mock.call_count, 3)
+    self.assertTrue(get_dashboard_base_dir_mock.called)
+
+    command['role'] = 'REGION_SERVER'
+    run_file_mock.reset_mock()
+
     # unknown script type case
     command['commandParams']['script_type'] = "SOME_TYPE"
     ret = orchestrator.runCommand(command, "out.txt", "err.txt")


[16/47] ambari git commit: AMBARI-18826. Stack property definitions made in ambari-web should be made stack agnostic (akovalenko)

Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/services/ambari_metrics_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/services/ambari_metrics_properties.js b/ambari-web/app/data/configs/services/ambari_metrics_properties.js
new file mode 100644
index 0000000..22f27e5
--- /dev/null
+++ b/ambari-web/app/data/configs/services/ambari_metrics_properties.js
@@ -0,0 +1,188 @@
+/**
+ * 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.
+ */
+
+module.exports = [
+  {
+    "category": "General",
+    "filename": "ams-site.xml",
+    "index": 1,
+    "name": "timeline.metrics.service.operation.mode",
+    "serviceName": "AMBARI_METRICS"
+  },
+  {
+    "category": "General",
+    "filename": "ams-env.xml",
+    "index": 2,
+    "name": "metrics_collector_log_dir",
+    "serviceName": "AMBARI_METRICS"
+  },
+  {
+    "category": "General",
+    "filename": "ams-env.xml",
+    "index": 3,
+    "name": "metrics_collector_pid_dir",
+    "serviceName": "AMBARI_METRICS"
+  },
+  {
+    "category": "General",
+    "filename": "ams-env.xml",
+    "index": 4,
+    "name": "metrics_monitor_log_dir",
+    "serviceName": "AMBARI_METRICS"
+  },
+  {
+    "category": "General",
+    "filename": "ams-env.xml",
+    "index": 5,
+    "name": "metrics_monitor_pid_dir",
+    "serviceName": "AMBARI_METRICS"
+  },
+  {
+    "category": "General",
+    "filename": "ams-grafana-env.xml",
+    "index": 6,
+    "name": "metrics_grafana_username",
+    "serviceName": "AMBARI_METRICS"
+  },
+  {
+    "category": "General",
+    "filename": "ams-grafana-env.xml",
+    "index": 7,
+    "name": "metrics_grafana_password",
+    "serviceName": "AMBARI_METRICS"
+  },
+  {
+    "category": "MetricCollector",
+    "filename": "ams-site.xml",
+    "index": 17,
+    "name": "timeline.metrics.aggregator.checkpoint.dir",
+    "serviceName": "AMBARI_METRICS"
+  },
+  {
+    "category": "MetricCollector",
+    "filename": "ams-site.xml",
+    "index": 16,
+    "name": "timeline.metrics.cluster.aggregator.hourly.checkpointCutOffMultiplier",
+    "serviceName": "AMBARI_METRICS"
+  },
+  {
+    "category": "MetricCollector",
+    "filename": "ams-site.xml",
+    "index": 14,
+    "name": "timeline.metrics.cluster.aggregator.hourly.disabled",
+    "serviceName": "AMBARI_METRICS"
+  },
+  {
+    "category": "MetricCollector",
+    "filename": "ams-site.xml",
+    "index": 15,
+    "name": "timeline.metrics.cluster.aggregator.hourly.interval",
+    "serviceName": "AMBARI_METRICS"
+  },
+  {
+    "category": "MetricCollector",
+    "filename": "ams-site.xml",
+    "index": 13,
+    "name": "timeline.metrics.cluster.aggregator.minute.checkpointCutOffMultiplier",
+    "serviceName": "AMBARI_METRICS"
+  },
+  {
+    "category": "MetricCollector",
+    "filename": "ams-site.xml",
+    "index": 10,
+    "name": "timeline.metrics.cluster.aggregator.minute.disabled",
+    "serviceName": "AMBARI_METRICS"
+  },
+  {
+    "category": "MetricCollector",
+    "filename": "ams-site.xml",
+    "index": 11,
+    "name": "timeline.metrics.cluster.aggregator.minute.interval",
+    "serviceName": "AMBARI_METRICS"
+  },
+  {
+    "category": "MetricCollector",
+    "filename": "ams-site.xml",
+    "index": 12,
+    "name": "timeline.metrics.cluster.aggregator.minute.timeslice.interval",
+    "serviceName": "AMBARI_METRICS"
+  },
+  {
+    "category": "MetricCollector",
+    "filename": "ams-site.xml",
+    "index": 9,
+    "name": "timeline.metrics.host.aggregator.hourly.checkpointCutOffMultiplier",
+    "serviceName": "AMBARI_METRICS"
+  },
+  {
+    "category": "MetricCollector",
+    "filename": "ams-site.xml",
+    "index": 7,
+    "name": "timeline.metrics.host.aggregator.hourly.disabled",
+    "serviceName": "AMBARI_METRICS"
+  },
+  {
+    "category": "MetricCollector",
+    "filename": "ams-site.xml",
+    "index": 8,
+    "name": "timeline.metrics.host.aggregator.hourly.interval",
+    "serviceName": "AMBARI_METRICS"
+  },
+  {
+    "category": "MetricCollector",
+    "filename": "ams-site.xml",
+    "index": 6,
+    "name": "timeline.metrics.host.aggregator.minute.checkpointCutOffMultiplier",
+    "serviceName": "AMBARI_METRICS"
+  },
+  {
+    "category": "MetricCollector",
+    "filename": "ams-site.xml",
+    "index": 4,
+    "name": "timeline.metrics.host.aggregator.minute.disabled",
+    "serviceName": "AMBARI_METRICS"
+  },
+  {
+    "category": "MetricCollector",
+    "filename": "ams-site.xml",
+    "index": 5,
+    "name": "timeline.metrics.host.aggregator.minute.interval",
+    "serviceName": "AMBARI_METRICS"
+  },
+  {
+    "category": "MetricCollector",
+    "filename": "ams-site.xml",
+    "index": 1,
+    "name": "timeline.metrics.service.checkpointDelay",
+    "serviceName": "AMBARI_METRICS"
+  },
+  {
+    "category": "MetricCollector",
+    "filename": "ams-site.xml",
+    "index": 2,
+    "name": "timeline.metrics.service.default.result.limit",
+    "serviceName": "AMBARI_METRICS"
+  },
+  {
+    "category": "MetricCollector",
+    "filename": "ams-site.xml",
+    "index": 3,
+    "name": "timeline.metrics.service.resultset.fetchSize",
+    "serviceName": "AMBARI_METRICS"
+  }
+];
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/services/falcon_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/services/falcon_properties.js b/ambari-web/app/data/configs/services/falcon_properties.js
new file mode 100644
index 0000000..bbb8acf
--- /dev/null
+++ b/ambari-web/app/data/configs/services/falcon_properties.js
@@ -0,0 +1,302 @@
+/**
+ * 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.
+ */
+
+module.exports = [
+  {
+    "category": "Falcon - Oozie integration",
+    "filename": "oozie-site.xml",
+    "name": "oozie.service.ELService.ext.functions.coord-job-submit-instances",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "Falcon - Oozie integration",
+    "filename": "oozie-site.xml",
+    "name": "oozie.service.ELService.ext.functions.coord-action-create-inst",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "Falcon - Oozie integration",
+    "filename": "oozie-site.xml",
+    "name": "oozie.service.ELService.ext.functions.coord-action-create",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "Falcon - Oozie integration",
+    "filename": "oozie-site.xml",
+    "name": "oozie.service.ELService.ext.functions.coord-job-submit-data",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "Falcon - Oozie integration",
+    "filename": "oozie-site.xml",
+    "name": "oozie.service.ELService.ext.functions.coord-action-start",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "Falcon - Oozie integration",
+    "filename": "oozie-site.xml",
+    "name": "oozie.service.ELService.ext.functions.coord-sla-submit",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "Falcon - Oozie integration",
+    "filename": "oozie-site.xml",
+    "name": "oozie.service.ELService.ext.functions.coord-sla-create",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconRuntimeSite",
+    "filename": "falcon-runtime.properties.xml",
+    "name": "*.domain",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconRuntimeSite",
+    "filename": "falcon-runtime.properties.xml",
+    "name": "*.log.cleanup.frequency.minutes.retention",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconRuntimeSite",
+    "filename": "falcon-runtime.properties.xml",
+    "name": "*.log.cleanup.frequency.hours.retention",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconRuntimeSite",
+    "filename": "falcon-runtime.properties.xml",
+    "name": "*.log.cleanup.frequency.days.retention",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconRuntimeSite",
+    "filename": "falcon-runtime.properties.xml",
+    "name": "*.log.cleanup.frequency.months.retention",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.domain",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.workflow.engine.impl",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.oozie.process.workflow.builder",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.oozie.feed.workflow.builder",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.SchedulableEntityManager.impl",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.ConfigSyncService.impl",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.ProcessInstanceManager.impl",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.catalog.service.impl",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.application.services",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.configstore.listeners",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.broker.impl.class",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.shared.libs",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.config.store.uri",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.system.lib.location",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.retry.recorder.path",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.falcon.cleanup.service.frequency",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.broker.url",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.broker.ttlInMins",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.entity.topic",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.max.retry.failure.count",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.internal.queue.size",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.falcon.authentication.type",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.falcon.http.authentication.type",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.falcon.http.authentication.token.validity",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.falcon.http.authentication.signature.secret",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.falcon.http.authentication.simple.anonymous.allowed",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.falcon.http.authentication.kerberos.name.rules",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.falcon.http.authentication.blacklisted.users",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.falcon.graph.storage.directory",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.falcon.graph.serialize.path",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.falcon.graph.preserve.history",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FALCON_SERVER",
+    "filename": "falcon-env.xml",
+    "name": "falcon_port",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FALCON_SERVER",
+    "filename": "falcon-env.xml",
+    "name": "falcon_local_dir",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.falcon.graph.blueprints.graph",
+    "serviceName": "FALCON"
+  },
+  {
+    "category": "FalconStartupSite",
+    "filename": "falcon-startup.properties.xml",
+    "name": "*.falcon.graph.storage.backend",
+    "serviceName": "FALCON"
+  }
+];
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/services/flume_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/services/flume_properties.js b/ambari-web/app/data/configs/services/flume_properties.js
new file mode 100644
index 0000000..6a264c7
--- /dev/null
+++ b/ambari-web/app/data/configs/services/flume_properties.js
@@ -0,0 +1,38 @@
+/**
+ * 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.
+ */
+
+module.exports = [
+  {
+    "category": "FLUME_HANDLER",
+    "filename": "flume-conf.xml",
+    "name": "content",
+    "serviceName": "FLUME"
+  },
+  {
+    "filename": "flume-env.xml",
+    "index": 0,
+    "name": "flume_conf_dir",
+    "serviceName": "FLUME"
+  },
+  {
+    "filename": "flume-env.xml",
+    "index": 1,
+    "name": "flume_log_dir",
+    "serviceName": "FLUME"
+  }
+];
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/services/glusterfs_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/services/glusterfs_properties.js b/ambari-web/app/data/configs/services/glusterfs_properties.js
new file mode 100644
index 0000000..3b48eb1
--- /dev/null
+++ b/ambari-web/app/data/configs/services/glusterfs_properties.js
@@ -0,0 +1,93 @@
+/**
+ * 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.
+ */
+
+module.exports = [
+  {
+    "category": "General",
+    "filename": "core-site.xml",
+    "name": "fs.glusterfs.impl",
+    "serviceName": "GLUSTERFS"
+  },
+  {
+    "category": "General",
+    "filename": "core-site.xml",
+    "name": "fs.AbstractFileSystem.glusterfs.impl",
+    "serviceName": "GLUSTERFS"
+  },
+  {
+    "category": "General Hadoop",
+    "filename": "hadoop-env.xml",
+    "index": 1,
+    "name": "hadoop_heapsize",
+    "serviceName": "GLUSTERFS"
+  },
+  {
+    "category": "General Hadoop",
+    "filename": "hadoop-env.xml",
+    "name": "hdfs_log_dir_prefix",
+    "serviceName": "GLUSTERFS"
+  },
+  {
+    "category": "General Hadoop",
+    "filename": "hadoop-env.xml",
+    "name": "hadoop_pid_dir_prefix",
+    "serviceName": "GLUSTERFS"
+  },
+  {
+    "category": "General Hadoop",
+    "filename": "hadoop-env.xml",
+    "name": "namenode_heapsize",
+    "serviceName": "GLUSTERFS"
+  },
+  {
+    "category": "General Hadoop",
+    "filename": "hadoop-env.xml",
+    "name": "namenode_opt_newsize",
+    "serviceName": "GLUSTERFS"
+  },
+  {
+    "category": "General Hadoop",
+    "filename": "hadoop-env.xml",
+    "name": "namenode_opt_maxnewsize",
+    "serviceName": "GLUSTERFS"
+  },
+  {
+    "category": "General Hadoop",
+    "filename": "hadoop-env.xml",
+    "name": "namenode_opt_permsize",
+    "serviceName": "GLUSTERFS"
+  },
+  {
+    "category": "General Hadoop",
+    "filename": "hadoop-env.xml",
+    "name": "namenode_opt_maxpermsize",
+    "serviceName": "GLUSTERFS"
+  },
+  {
+    "category": "General Hadoop",
+    "filename": "hadoop-env.xml",
+    "name": "dtnode_heapsize",
+    "serviceName": "GLUSTERFS"
+  },
+  {
+    "category": "General Hadoop",
+    "filename": "hadoop-env.xml",
+    "name": "glusterfs_user",
+    "serviceName": "GLUSTERFS"
+  }
+];
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/services/hawq_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/services/hawq_properties.js b/ambari-web/app/data/configs/services/hawq_properties.js
new file mode 100644
index 0000000..b048d35
--- /dev/null
+++ b/ambari-web/app/data/configs/services/hawq_properties.js
@@ -0,0 +1,110 @@
+/**
+ * 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.
+ */
+
+module.exports = [
+  {
+    "category": "General",
+    "filename": "hawq-site.xml",
+    "index": 0,
+    "name": "hawq_master_address_host",
+    "serviceName": "HAWQ"
+  },
+  {
+    "category": "General",
+    "filename": "hawq-site.xml",
+    "index": 1,
+    "name": "hawq_standby_address_host",
+    "serviceName": "HAWQ"
+  },
+  {
+    "category": "General",
+    "filename": "hawq-site.xml",
+    "index": 2,
+    "name": "hawq_master_address_port",
+    "serviceName": "HAWQ"
+  },
+  {
+    "category": "General",
+    "filename": "hawq-site.xml",
+    "index": 3,
+    "name": "hawq_segment_address_port",
+    "serviceName": "HAWQ"
+  },
+  {
+    "category": "General",
+    "filename": "hawq-site.xml",
+    "index": 4,
+    "name": "hawq_dfs_url",
+    "serviceName": "HAWQ"
+  },
+  {
+    "category": "General",
+    "filename": "hawq-site.xml",
+    "index": 5,
+    "name": "hawq_master_directory",
+    "serviceName": "HAWQ"
+  },
+  {
+    "category": "General",
+    "filename": "hawq-site.xml",
+    "index": 6,
+    "name": "hawq_master_temp_directory",
+    "serviceName": "HAWQ"
+  },
+  {
+    "category": "General",
+    "filename": "hawq-site.xml",
+    "index": 7,
+    "name": "hawq_segment_directory",
+    "serviceName": "HAWQ"
+  },
+  {
+    "category": "General",
+    "filename": "hawq-site.xml",
+    "index": 8,
+    "name": "hawq_segment_temp_directory",
+    "serviceName": "HAWQ"
+  },
+  {
+    "category": "General",
+    "filename": "hawq-site.xml",
+    "index": 9,
+    "name": "default_segment_num",
+    "serviceName": "HAWQ"
+  },
+  {
+    "category": "General",
+    "filename": "hawq-env.xml",
+    "index": 10,
+    "name": "hawq_ssh_exkeys",
+    "serviceName": "HAWQ"
+  },
+  {
+    "category": "General",
+    "filename": "hawq-env.xml",
+    "index": 11,
+    "name": "hawq_password",
+    "serviceName": "HAWQ"
+  },
+  {
+    "category": "AdvancedHawqCheck",
+    "filename": "hawq-check-env.xml",
+    "name": "content",
+    "serviceName": "HAWQ"
+  }
+];
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/services/hbase_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/services/hbase_properties.js b/ambari-web/app/data/configs/services/hbase_properties.js
new file mode 100644
index 0000000..2e144c6
--- /dev/null
+++ b/ambari-web/app/data/configs/services/hbase_properties.js
@@ -0,0 +1,124 @@
+/**
+ * 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.
+ */
+
+module.exports = [
+  {
+    "category": "General",
+    "filename": "hbase-site.xml",
+    "index": 0,
+    "name": "hbase.hstore.compactionThreshold",
+    "serviceName": "HBASE"
+  },
+  {
+    "category": "General",
+    "filename": "hbase-site.xml",
+    "index": 1,
+    "name": "hfile.block.cache.size",
+    "serviceName": "HBASE"
+  },
+  {
+    "category": "General",
+    "filename": "hbase-site.xml",
+    "index": 2,
+    "name": "hbase.hregion.max.filesize",
+    "serviceName": "HBASE"
+  },
+  {
+    "category": "HBASE_REGIONSERVER",
+    "filename": "hbase-site.xml",
+    "index": 2,
+    "name": "hbase.regionserver.handler.count",
+    "serviceName": "HBASE"
+  },
+  {
+    "category": "HBASE_REGIONSERVER",
+    "filename": "hbase-site.xml",
+    "index": 3,
+    "name": "hbase.hregion.majorcompaction",
+    "serviceName": "HBASE"
+  },
+  {
+    "category": "HBASE_REGIONSERVER",
+    "filename": "hbase-site.xml",
+    "index": 4,
+    "name": "hbase.hregion.memstore.block.multiplier",
+    "serviceName": "HBASE"
+  },
+  {
+    "category": "HBASE_REGIONSERVER",
+    "filename": "hbase-site.xml",
+    "index": 5,
+    "name": "hbase.hregion.memstore.flush.size",
+    "serviceName": "HBASE"
+  },
+  {
+    "category": "General",
+    "filename": "hbase-site.xml",
+    "index": 3,
+    "name": "hbase.client.scanner.caching",
+    "serviceName": "HBASE"
+  },
+  {
+    "category": "General",
+    "filename": "hbase-site.xml",
+    "index": 4,
+    "name": "zookeeper.session.timeout",
+    "serviceName": "HBASE"
+  },
+  {
+    "category": "General",
+    "filename": "hbase-site.xml",
+    "index": 5,
+    "name": "hbase.client.keyvalue.maxsize",
+    "serviceName": "HBASE"
+  },
+  {
+    "category": "HBASE_MASTER",
+    "filename": "hbase-env.xml",
+    "index": 1,
+    "name": "hbase_master_heapsize",
+    "serviceName": "HBASE"
+  },
+  {
+    "category": "HBASE_REGIONSERVER",
+    "filename": "hbase-env.xml",
+    "index": 1,
+    "name": "hbase_regionserver_heapsize",
+    "serviceName": "HBASE"
+  },
+  {
+    "category": "HBASE_REGIONSERVER",
+    "filename": "hbase-env.xml",
+    "index": 6,
+    "name": "hbase_regionserver_xmn_max",
+    "serviceName": "HBASE"
+  },
+  {
+    "category": "HBASE_REGIONSERVER",
+    "filename": "hbase-env.xml",
+    "index": 7,
+    "name": "hbase_regionserver_xmn_ratio",
+    "serviceName": "HBASE"
+  },
+  {
+    "filename": "ranger-hbase-plugin-properties.xml",
+    "index": 1,
+    "name": "ranger-hbase-plugin-enabled",
+    "serviceName": "HBASE"
+  }
+];
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/services/hdfs_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/services/hdfs_properties.js b/ambari-web/app/data/configs/services/hdfs_properties.js
new file mode 100644
index 0000000..4acc60d
--- /dev/null
+++ b/ambari-web/app/data/configs/services/hdfs_properties.js
@@ -0,0 +1,164 @@
+/**
+ * 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.
+ */
+
+module.exports = [
+  {
+    "category": "SECONDARY_NAMENODE",
+    "filename": "hdfs-site.xml",
+    "index": 1,
+    "name": "dfs.namenode.checkpoint.dir",
+    "serviceName": "HDFS"
+  },
+  {
+    "category": "General",
+    "filename": "hdfs-site.xml",
+    "index": 3,
+    "name": "dfs.namenode.checkpoint.period",
+    "serviceName": "HDFS"
+  },
+  {
+    "category": "NAMENODE",
+    "filename": "hdfs-site.xml",
+    "index": 1,
+    "name": "dfs.namenode.name.dir",
+    "serviceName": "HDFS"
+  },
+  {
+    "category": "General",
+    "filename": "hdfs-site.xml",
+    "index": 0,
+    "name": "dfs.webhdfs.enabled",
+    "serviceName": "HDFS"
+  },
+  {
+    "category": "DATANODE",
+    "filename": "hdfs-site.xml",
+    "index": 3,
+    "name": "dfs.datanode.failed.volumes.tolerated",
+    "serviceName": "HDFS"
+  },
+  {
+    "category": "DATANODE",
+    "filename": "hdfs-site.xml",
+    "index": 1,
+    "name": "dfs.datanode.data.dir",
+    "serviceName": "HDFS"
+  },
+  {
+    "category": "DATANODE",
+    "filename": "hdfs-site.xml",
+    "name": "dfs.datanode.data.dir.perm",
+    "serviceName": "HDFS"
+  },
+  {
+    "category": "NFS_GATEWAY",
+    "filename": "hdfs-site.xml",
+    "index": 1,
+    "name": "nfs.file.dump.dir",
+    "serviceName": "HDFS"
+  },
+  {
+    "category": "General",
+    "filename": "hdfs-site.xml",
+    "index": 2,
+    "name": "dfs.namenode.accesstime.precision",
+    "serviceName": "HDFS"
+  },
+  {
+    "category": "NFS_GATEWAY",
+    "filename": "hdfs-site.xml",
+    "index": 3,
+    "name": "nfs.exports.allowed.hosts",
+    "serviceName": "HDFS"
+  },
+  {
+    "category": "General",
+    "filename": "hdfs-site.xml",
+    "name": "dfs.replication",
+    "serviceName": "HDFS"
+  },
+  {
+    "category": "General",
+    "filename": "hdfs-site.xml",
+    "index": 2,
+    "name": "dfs.datanode.du.reserved",
+    "serviceName": "HDFS"
+  },
+  {
+    "category": "NAMENODE",
+    "filename": "hadoop-env.xml",
+    "index": 2,
+    "name": "namenode_heapsize",
+    "serviceName": "HDFS"
+  },
+  {
+    "category": "NAMENODE",
+    "filename": "hadoop-env.xml",
+    "index": 3,
+    "name": "namenode_opt_newsize",
+    "serviceName": "HDFS"
+  },
+  {
+    "category": "NAMENODE",
+    "filename": "hadoop-env.xml",
+    "index": 5,
+    "name": "namenode_opt_permsize",
+    "serviceName": "HDFS"
+  },
+  {
+    "category": "NAMENODE",
+    "filename": "hadoop-env.xml",
+    "index": 6,
+    "name": "namenode_opt_maxpermsize",
+    "serviceName": "HDFS"
+  },
+  {
+    "category": "NAMENODE",
+    "filename": "hadoop-env.xml",
+    "index": 4,
+    "name": "namenode_opt_maxnewsize",
+    "serviceName": "HDFS"
+  },
+  {
+    "category": "DATANODE",
+    "filename": "hadoop-env.xml",
+    "index": 2,
+    "name": "dtnode_heapsize",
+    "serviceName": "HDFS"
+  },
+  {
+    "category": "NFS_GATEWAY",
+    "filename": "hadoop-env.xml",
+    "index": 1,
+    "name": "nfsgateway_heapsize",
+    "serviceName": "HDFS"
+  },
+  {
+    "category": "General",
+    "filename": "hadoop-env.xml",
+    "index": 1,
+    "name": "hadoop_heapsize",
+    "serviceName": "HDFS"
+  },
+  {
+    "filename": "ranger-hdfs-plugin-properties.xml",
+    "index": 1,
+    "name": "ranger-hdfs-plugin-enabled",
+    "serviceName": "HDFS"
+  }
+];
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/services/hive_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/services/hive_properties.js b/ambari-web/app/data/configs/services/hive_properties.js
new file mode 100644
index 0000000..47ba788
--- /dev/null
+++ b/ambari-web/app/data/configs/services/hive_properties.js
@@ -0,0 +1,590 @@
+/**
+ * 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.
+ */
+
+module.exports = [
+  {
+    "category": "HIVE_METASTORE",
+    "filename": "hive-site.xml",
+    "index": 7,
+    "name": "javax.jdo.option.ConnectionDriverName",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "HIVE_METASTORE",
+    "filename": "hive-site.xml",
+    "index": 5,
+    "name": "javax.jdo.option.ConnectionUserName",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "HIVE_METASTORE",
+    "filename": "hive-site.xml",
+    "index": 6,
+    "name": "javax.jdo.option.ConnectionPassword",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "HIVE_METASTORE",
+    "filename": "hive-site.xml",
+    "index": 8,
+    "name": "javax.jdo.option.ConnectionURL",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "HIVE_METASTORE",
+    "filename": "hive-site.xml",
+    "index": 4,
+    "name": "ambari.hive.db.schema.name",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "HIVE_METASTORE",
+    "displayType": "radio button",
+    "filename": "hive-env.xml",
+    "index": 2,
+    "name": "hive_database",
+    "options": [
+      {
+        "displayName": "New MySQL Database",
+        "hidden": false
+      },
+      {
+        "displayName": "Existing MySQL / MariaDB Database",
+        "hidden": false
+      },
+      {
+        "displayName": "Existing PostgreSQL Database",
+        "hidden": false
+      },
+      {
+        "displayName": "Existing Oracle Database",
+        "hidden": false
+      },
+      {
+        "displayName": "Existing SQL Anywhere Database",
+        "hidden": App.get('currentStackName') !== 'SAPHD' && (App.get('currentStackName') !== 'HDP' || !App.get('isHadoop23Stack'))
+      }
+    ],
+    "radioName": "hive-database",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Advanced webhcat-env",
+    "filename": "hive-env.xml",
+    "name": "hcat_log_dir",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Advanced webhcat-env",
+    "filename": "hive-env.xml",
+    "name": "hcat_pid_dir",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "HIVE_METASTORE",
+    "filename": "hive-env.xml",
+    "name": "hive_database_type",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.cbo.enable",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.optimize.reducededuplication.min.reducer",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.optimize.reducededuplication",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.orc.splits.include.file.footer",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.merge.mapfiles",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.merge.mapredfiles",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.merge.tezfiles",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.merge.smallfiles.avgsize",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.merge.size.per.task",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.merge.orcfile.stripe.level",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.auto.convert.join",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.auto.convert.join.noconditionaltask",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.auto.convert.join.noconditionaltask.size",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.optimize.bucketmapjoin.sortedmerge",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.tez.smb.number.waves",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.map.aggr.hash.percentmemory",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.map.aggr",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.optimize.sort.dynamic.partition",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.stats.autogather",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.stats.fetch.column.stats",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.vectorized.execution.enabled",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.vectorized.execution.reduce.enabled",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.vectorized.groupby.checkinterval",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.vectorized.groupby.flush.percent",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.limit.pushdown.memory.usage",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.optimize.index.filter",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.exec.reducers.bytes.per.reducer",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.smbjoin.cache.rows",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.exec.orc.default.stripe.size",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.fetch.task.conversion",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.fetch.task.conversion.threshold",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.fetch.task.aggr",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.compute.query.using.stats",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.tez.auto.reducer.parallelism",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.tez.max.partition.factor",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.tez.min.partition.factor",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.tez.dynamic.partition.pruning",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.tez.dynamic.partition.pruning.max.event.size",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "Performance",
+    "filename": "hive-site.xml",
+    "name": "hive.tez.dynamic.partition.pruning.max.data.size",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.exec.pre.hooks",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.exec.post.hooks",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.exec.failure.hooks",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.execution.engine",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.exec.dynamic.partition",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.exec.dynamic.partition.mode",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.exec.max.dynamic.partitions",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.exec.max.dynamic.partitions.pernode",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.exec.max.created.files",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.enforce.bucketing",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "datanucleus.cache.level2.type",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.metastore.uris",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.metastore.warehouse.dir",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.exec.parallel.thread.number",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.security.authorization.enabled",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.security.authorization.manager",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.security.metastore.authenticator.manager",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.security.metastore.authorization.manager",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.server2.authentication",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.server2.enable.doAs",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.server2.tez.default.queues",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.server2.tez.initialize.default.sessions",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.server2.tez.sessions.per.default.queue",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.server2.thrift.http.path",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.server2.thrift.http.port",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.server2.thrift.max.worker.threads",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.server2.thrift.port",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.server2.thrift.sasl.qop",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.server2.transport.mode",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.server2.use.SSL",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.tez.container.size",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.tez.java.opts",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.tez.log.level",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.txn.manager",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.txn.timeout",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.txn.max.open.batch",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.compactor.initiator.on",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.compactor.worker.threads",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.compactor.worker.timeout",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.compactor.check.interval",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.compactor.delta.num.threshold",
+    "serviceName": "HIVE"
+  },
+  {
+    "category": "General",
+    "filename": "hive-site.xml",
+    "name": "hive.compactor.delta.pct.threshold",
+    "serviceName": "HIVE"
+  }
+];

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/services/kafka_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/services/kafka_properties.js b/ambari-web/app/data/configs/services/kafka_properties.js
new file mode 100644
index 0000000..0dc0445
--- /dev/null
+++ b/ambari-web/app/data/configs/services/kafka_properties.js
@@ -0,0 +1,66 @@
+/**
+ * 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.
+ */
+
+module.exports = [
+  {
+    "category": "KAFKA_BROKER",
+    "filename": "kafka-broker.xml",
+    "index": 1,
+    "name": "log.dirs",
+    "serviceName": "KAFKA"
+  },
+  {
+    "category": "KAFKA_BROKER",
+    "filename": "kafka-broker.xml",
+    "name": "listeners",
+    "serviceName": "KAFKA"
+  },
+  {
+    "category": "KAFKA_BROKER",
+    "filename": "kafka-broker.xml",
+    "index": 0,
+    "name": "log.roll.hours",
+    "serviceName": "KAFKA"
+  },
+  {
+    "category": "KAFKA_BROKER",
+    "filename": "kafka-broker.xml",
+    "index": 0,
+    "name": "log.retention.hours",
+    "serviceName": "KAFKA"
+  },
+  {
+    "category": "KAFKA_BROKER",
+    "filename": "kafka-broker.xml",
+    "index": 0,
+    "name": "zookeeper.connect",
+    "serviceName": "KAFKA"
+  },
+  {
+    "filename": "kafka-env.xml",
+    "index": 0,
+    "name": "kafka_pid_dir",
+    "serviceName": "KAFKA"
+  },
+  {
+    "filename": "ranger-kafka-plugin-properties.xml",
+    "index": 1,
+    "name": "ranger-kafka-plugin-enabled",
+    "serviceName": "KAFKA"
+  }
+];
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/services/kerberos_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/services/kerberos_properties.js b/ambari-web/app/data/configs/services/kerberos_properties.js
new file mode 100644
index 0000000..1efdbe7
--- /dev/null
+++ b/ambari-web/app/data/configs/services/kerberos_properties.js
@@ -0,0 +1,204 @@
+/**
+ * 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.
+ */
+
+module.exports = [
+  {
+    "category": "KDC",
+    "filename": "kerberos-env.xml",
+    "index": 0,
+    "name": "kdc_type",
+    "serviceName": "KERBEROS"
+  },
+  {
+    "category": "KDC",
+    "displayType": "supportTextConnection",
+    "filename": "kerberos-env.xml",
+    "index": 1,
+    "name": "kdc_hosts",
+    "serviceName": "KERBEROS"
+  },
+  {
+    "category": "KDC",
+    "filename": "kerberos-env.xml",
+    "index": 2,
+    "name": "realm",
+    "serviceName": "KERBEROS"
+  },
+  {
+    "category": "KDC",
+    "filename": "kerberos-env.xml",
+    "index": 3,
+    "name": "ldap_url",
+    "serviceName": "KERBEROS"
+  },
+  {
+    "category": "KDC",
+    "filename": "kerberos-env.xml",
+    "index": 4,
+    "name": "container_dn",
+    "serviceName": "KERBEROS"
+  },
+  {
+    "category": "KDC",
+    "filename": "krb5-conf.xml",
+    "index": 5,
+    "name": "domains",
+    "serviceName": "KERBEROS"
+  },
+  {
+    "category": "Advanced kerberos-env",
+    "filename": "kerberos-env.xml",
+    "index": 0,
+    "name": "manage_identities",
+    "serviceName": "KERBEROS"
+  },
+  {
+    "category": "Advanced kerberos-env",
+    "filename": "kerberos-env.xml",
+    "index": 1,
+    "name": "install_packages",
+    "serviceName": "KERBEROS"
+  },
+  {
+    "category": "Advanced kerberos-env",
+    "filename": "kerberos-env.xml",
+    "index": 2,
+    "name": "executable_search_paths",
+    "serviceName": "KERBEROS"
+  },
+  {
+    "category": "Advanced kerberos-env",
+    "filename": "kerberos-env.xml",
+    "index": 3,
+    "name": "encryption_types",
+    "serviceName": "KERBEROS"
+  },
+  {
+    "category": "Advanced kerberos-env",
+    "filename": "kerberos-env.xml",
+    "index": 4,
+    "name": "password_length",
+    "serviceName": "KERBEROS"
+  },
+  {
+    "category": "Advanced kerberos-env",
+    "filename": "kerberos-env.xml",
+    "index": 5,
+    "name": "password_min_lowercase_letters",
+    "serviceName": "KERBEROS"
+  },
+  {
+    "category": "Advanced kerberos-env",
+    "filename": "kerberos-env.xml",
+    "index": 6,
+    "name": "password_min_uppercase_letters",
+    "serviceName": "KERBEROS"
+  },
+  {
+    "category": "Advanced kerberos-env",
+    "filename": "kerberos-env.xml",
+    "index": 7,
+    "name": "password_min_digits",
+    "serviceName": "KERBEROS"
+  },
+  {
+    "category": "Advanced kerberos-env",
+    "filename": "kerberos-env.xml",
+    "index": 8,
+    "name": "password_min_punctuation",
+    "serviceName": "KERBEROS"
+  },
+  {
+    "category": "Advanced kerberos-env",
+    "filename": "kerberos-env.xml",
+    "index": 9,
+    "name": "password_min_whitespace",
+    "serviceName": "KERBEROS"
+  },
+  {
+    "category": "Advanced kerberos-env",
+    "filename": "kerberos-env.xml",
+    "index": 10,
+    "name": "service_check_principal_name",
+    "serviceName": "KERBEROS"
+  },
+  {
+    "category": "Advanced kerberos-env",
+    "filename": "kerberos-env.xml",
+    "index": 11,
+    "name": "ad_create_attributes_template",
+    "serviceName": "KERBEROS"
+  },
+  {
+    "category": "Advanced kerberos-env",
+    "filename": "kerberos-env.xml",
+    "index": 12,
+    "name": "kdc_create_attributes",
+    "serviceName": "KERBEROS"
+  },
+  {
+    "category": "Advanced kerberos-env",
+    "filename": "kerberos-env.xml",
+    "index": 13,
+    "name": "case_insensitive_username_rules",
+    "serviceName": "KERBEROS"
+  },
+  {
+    "category": "Advanced kerberos-env",
+    "filename": "kerberos-env.xml",
+    "index": 14,
+    "name": "manage_auth_to_local",
+    "serviceName": "KERBEROS"
+  },
+  {
+    "category": "Advanced kerberos-env",
+    "filename": "kerberos-env.xml",
+    "index": 15,
+    "name": "group",
+    "serviceName": "KERBEROS"
+  },
+  {
+    "category": "Kadmin",
+    "filename": "kerberos-env.xml",
+    "index": 0,
+    "name": "admin_server_host",
+    "serviceName": "KERBEROS"
+  },
+  {
+    "category": "Advanced krb5-conf",
+    "dependentConfigPattern": "CATEGORY",
+    "filename": "krb5-conf.xml",
+    "index": 0,
+    "name": "manage_krb5_conf",
+    "serviceName": "KERBEROS"
+  },
+  {
+    "category": "Advanced krb5-conf",
+    "filename": "krb5-conf.xml",
+    "index": 1,
+    "name": "conf_dir",
+    "serviceName": "KERBEROS"
+  },
+  {
+    "category": "Advanced krb5-conf",
+    "filename": "krb5-conf.xml",
+    "index": 2,
+    "name": "content",
+    "serviceName": "KERBEROS"
+  }
+];
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/services/knox_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/services/knox_properties.js b/ambari-web/app/data/configs/services/knox_properties.js
new file mode 100644
index 0000000..5168eb5
--- /dev/null
+++ b/ambari-web/app/data/configs/services/knox_properties.js
@@ -0,0 +1,32 @@
+/**
+ * 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.
+ */
+
+module.exports = [
+  {
+    "category": "KNOX_GATEWAY",
+    "filename": "knox-env.xml",
+    "name": "knox_master_secret",
+    "serviceName": "KNOX"
+  },
+  {
+    "filename": "ranger-knox-plugin-properties.xml",
+    "index": 1,
+    "name": "ranger-knox-plugin-enabled",
+    "serviceName": "KNOX"
+  }
+];
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/services/logsearch_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/services/logsearch_properties.js b/ambari-web/app/data/configs/services/logsearch_properties.js
new file mode 100644
index 0000000..6c7d86b
--- /dev/null
+++ b/ambari-web/app/data/configs/services/logsearch_properties.js
@@ -0,0 +1,447 @@
+/**
+ * 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.
+ */
+
+module.exports = [
+  {
+    "category": "Advanced logfeeder-properties",
+    "filename": "logfeeder-properties.xml",
+    "index": 1,
+    "name": "logfeeder.config.files",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logfeeder-properties",
+    "filename": "logfeeder-properties.xml",
+    "index": 2,
+    "name": "logfeeder.checkpoint.folder",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logfeeder-properties",
+    "filename": "logfeeder-properties.xml",
+    "index": 3,
+    "name": "logfeeder.metrics.collector.hosts",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logfeeder-properties",
+    "filename": "logfeeder-properties.xml",
+    "index": 4,
+    "name": "logfeeder.solr.config.interval",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logfeeder-properties",
+    "filename": "logfeeder-properties.xml",
+    "index": 5,
+    "name": "logfeeder.log.filter.enable",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logfeeder-env",
+    "filename": "logfeeder-env.xml",
+    "index": 1,
+    "name": "logfeeder_log_dir",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logfeeder-env",
+    "filename": "logfeeder-env.xml",
+    "index": 2,
+    "name": "logfeeder_pid_dir",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logfeeder-env",
+    "filename": "logfeeder-env.xml",
+    "index": 3,
+    "name": "logfeeder_max_mem",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logfeeder-env",
+    "filename": "logfeeder-env.xml",
+    "index": 4,
+    "name": "logfeeder_solr_service_logs_enable",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logfeeder-env",
+    "filename": "logfeeder-env.xml",
+    "index": 5,
+    "name": "logfeeder_solr_audit_logs_enable",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logfeeder-env",
+    "filename": "logfeeder-env.xml",
+    "index": 6,
+    "name": "logfeeder_truststore_location",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logfeeder-env",
+    "filename": "logfeeder-env.xml",
+    "index": 7,
+    "name": "logfeeder_truststore_type",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logfeeder-env",
+    "filename": "logfeeder-env.xml",
+    "index": 8,
+    "name": "logfeeder_truststore_password",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logfeeder-env",
+    "filename": "logfeeder-env.xml",
+    "index": 9,
+    "name": "logfeeder_keystore_location",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logfeeder-env",
+    "filename": "logfeeder-env.xml",
+    "index": 10,
+    "name": "logfeeder_keystore_type",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logfeeder-env",
+    "filename": "logfeeder-env.xml",
+    "index": 11,
+    "name": "logfeeder_keystore_password",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logfeeder-env",
+    "filename": "logfeeder-env.xml",
+    "index": 12,
+    "name": "logfeeder_kerberos_keytab",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logfeeder-env",
+    "filename": "logfeeder-env.xml",
+    "index": 13,
+    "name": "logfeeder_kerberos_principal",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logfeeder-env",
+    "filename": "logfeeder-env.xml",
+    "index": 14,
+    "name": "content",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logfeeder-grok",
+    "filename": "logfeeder-grok.xml",
+    "index": 1,
+    "name": "default_grok_patterns",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logfeeder-grok",
+    "filename": "logfeeder-grok.xml",
+    "index": 2,
+    "name": "custom_grok_patterns",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logfeeder-log4j",
+    "filename": "logfeeder-log4j.xml",
+    "index": 1,
+    "name": "content",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "LogsearchAdminJson",
+    "filename": "logsearch-admin-json.xml",
+    "index": 1,
+    "name": "logsearch_admin_username",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "LogsearchAdminJson",
+    "filename": "logsearch-admin-json.xml",
+    "index": 2,
+    "name": "logsearch_admin_password",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "LogsearchAdminJson",
+    "filename": "logsearch-admin-json.xml",
+    "index": 3,
+    "name": "content",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-audit_logs-solrconfig",
+    "filename": "logsearch-audit_logs-solrconfig.xml",
+    "index": 1,
+    "name": "logsearch_audit_logs_max_retention",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-audit_logs-solrconfig",
+    "filename": "logsearch-audit_logs-solrconfig.xml",
+    "index": 2,
+    "name": "logsearch_audit_logs_merge_factor",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-audit_logs-solrconfig",
+    "filename": "logsearch-audit_logs_logs-solrconfig.xml",
+    "index": 3,
+    "name": "content",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-env",
+    "filename": "logsearch-env.xml",
+    "index": 1,
+    "name": "logsearch_ui_protocol",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-env",
+    "filename": "logsearch-env.xml",
+    "index": 2,
+    "name": "logsearch_ui_port",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-env",
+    "filename": "logsearch-env.xml",
+    "index": 3,
+    "name": "logsearch_log_dir",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-env",
+    "filename": "logsearch-env.xml",
+    "index": 4,
+    "name": "logsearch_pid_dir",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-env",
+    "filename": "logsearch-env.xml",
+    "index": 5,
+    "name": "logsearch_app_max_memory",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-env",
+    "filename": "logsearch-env.xml",
+    "index": 6,
+    "name": "logsearch_solr_audit_logs_zk_node",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-env",
+    "filename": "logsearch-env.xml",
+    "index": 7,
+    "name": "logsearch_solr_audit_logs_zk_quorum",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-env",
+    "filename": "logsearch-env.xml",
+    "index": 8,
+    "name": "logsearch_debug_enabled",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-env",
+    "filename": "logsearch-env.xml",
+    "index": 9,
+    "name": "logsearch_debug_port",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-env",
+    "filename": "logsearch-env.xml",
+    "index": 10,
+    "name": "logsearch_truststore_location",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-env",
+    "filename": "logsearch-env.xml",
+    "index": 11,
+    "name": "logsearch_truststore_type",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-env",
+    "filename": "logsearch-env.xml",
+    "index": 12,
+    "name": "logsearch_truststore_password",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-env",
+    "filename": "logsearch-env.xml",
+    "index": 13,
+    "name": "logsearch_keystore_location",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-env",
+    "filename": "logsearch-env.xml",
+    "index": 14,
+    "name": "logsearch_keystore_type",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-env",
+    "filename": "logsearch-env.xml",
+    "index": 15,
+    "name": "logsearch_keystore_password",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-env",
+    "filename": "logsearch-env.xml",
+    "index": 16,
+    "name": "logsearch_kerberos_keytab",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-env",
+    "filename": "logsearch-env.xml",
+    "index": 17,
+    "name": "logsearch_kerberos_principal",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-env",
+    "filename": "logsearch-env.xml",
+    "index": 18,
+    "name": "content",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-log4j",
+    "filename": "logsearch-log4j.xml",
+    "index": 1,
+    "name": "content",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-service_logs-solrconfig",
+    "filename": "logsearch-service_logs-solrconfig.xml",
+    "index": 1,
+    "name": "logsearch_service_logs_max_retention",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-service_logs-solrconfig",
+    "filename": "logsearch-service_logs-solrconfig.xml",
+    "index": 2,
+    "name": "logsearch_service_logs_merge_factor",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-service_logs-solrconfig",
+    "filename": "logsearch-service_logs-solrconfig.xml",
+    "index": 3,
+    "name": "content",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-properties",
+    "filename": "logsearch-properties.xml",
+    "index": 1,
+    "name": "logsearch.solr.collection.service.logs",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-properties",
+    "filename": "logsearch-properties.xml",
+    "index": 2,
+    "name": "logsearch.service.logs.fields",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-properties",
+    "filename": "logsearch-properties.xml",
+    "index": 3,
+    "name": "logsearch.service.logs.split.interval.mins",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-properties",
+    "filename": "logsearch-properties.xml",
+    "index": 4,
+    "name": "logsearch.solr.collection.audit.logs",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-properties",
+    "filename": "logsearch-properties.xml",
+    "index": 5,
+    "name": "logsearch.audit.logs.split.interval.mins",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-properties",
+    "filename": "logsearch-properties.xml",
+    "index": 6,
+    "name": "logsearch.solr.audit.logs.use.ranger",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-properties",
+    "filename": "logsearch-properties.xml",
+    "index": 7,
+    "name": "logsearch.ranger.audit.logs.collection.name",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-properties",
+    "filename": "logsearch-properties.xml",
+    "index": 8,
+    "name": "logsearch.solr.metrics.collector.hosts",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-properties",
+    "filename": "logsearch-properties.xml",
+    "index": 9,
+    "name": "logsearch.auth.external_auth.enable",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-properties",
+    "filename": "logsearch-properties.xml",
+    "index": 10,
+    "name": "logsearch.auth.external_auth.host_url",
+    "serviceName": "LOGSEARCH"
+  },
+  {
+    "category": "Advanced logsearch-properties",
+    "filename": "logsearch-properties.xml",
+    "index": 11,
+    "name": "logsearch.auth.external_auth.login_url",
+    "serviceName": "LOGSEARCH"
+  }
+];
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/services/mapreduce2_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/services/mapreduce2_properties.js b/ambari-web/app/data/configs/services/mapreduce2_properties.js
new file mode 100644
index 0000000..7829f5a
--- /dev/null
+++ b/ambari-web/app/data/configs/services/mapreduce2_properties.js
@@ -0,0 +1,45 @@
+/**
+ * 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.
+ */
+
+module.exports = [
+  {
+    "category": "General",
+    "filename": "mapred-site.xml",
+    "name": "mapreduce.map.memory.mb",
+    "serviceName": "MAPREDUCE2"
+  },
+  {
+    "category": "General",
+    "filename": "mapred-site.xml",
+    "name": "mapreduce.reduce.memory.mb",
+    "serviceName": "MAPREDUCE2"
+  },
+  {
+    "category": "General",
+    "filename": "mapred-site.xml",
+    "name": "mapreduce.task.io.sort.mb",
+    "serviceName": "MAPREDUCE2"
+  },
+  {
+    "category": "HISTORYSERVER",
+    "filename": "mapred-env.xml",
+    "index": 1,
+    "name": "jobhistory_heapsize",
+    "serviceName": "MAPREDUCE2"
+  }
+];
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/services/oozie_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/services/oozie_properties.js b/ambari-web/app/data/configs/services/oozie_properties.js
new file mode 100644
index 0000000..0f71688
--- /dev/null
+++ b/ambari-web/app/data/configs/services/oozie_properties.js
@@ -0,0 +1,93 @@
+/**
+ * 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.
+ */
+
+module.exports = [
+  {
+    "category": "OOZIE_SERVER",
+    "filename": "oozie-site.xml",
+    "index": 4,
+    "name": "oozie.db.schema.name",
+    "serviceName": "OOZIE"
+  },
+  {
+    "category": "OOZIE_SERVER",
+    "filename": "oozie-site.xml",
+    "index": 5,
+    "name": "oozie.service.JPAService.jdbc.username",
+    "serviceName": "OOZIE"
+  },
+  {
+    "category": "OOZIE_SERVER",
+    "filename": "oozie-site.xml",
+    "index": 6,
+    "name": "oozie.service.JPAService.jdbc.password",
+    "serviceName": "OOZIE"
+  },
+  {
+    "category": "OOZIE_SERVER",
+    "filename": "oozie-site.xml",
+    "index": 7,
+    "name": "oozie.service.JPAService.jdbc.driver",
+    "serviceName": "OOZIE"
+  },
+  {
+    "category": "OOZIE_SERVER",
+    "filename": "oozie-site.xml",
+    "index": 8,
+    "name": "oozie.service.JPAService.jdbc.url",
+    "serviceName": "OOZIE"
+  },
+  {
+    "category": "OOZIE_SERVER",
+    "displayType": "radio button",
+    "filename": "oozie-env.xml",
+    "index": 2,
+    "name": "oozie_database",
+    "options": [
+      {
+        "displayName": "New Derby Database",
+        "hidden": false
+      },
+      {
+        "displayName": "Existing MySQL / MariaDB Database",
+        "hidden": false
+      },
+      {
+        "displayName": "Existing PostgreSQL Database",
+        "hidden": false
+      },
+      {
+        "displayName": "Existing Oracle Database",
+        "hidden": false
+      },
+      {
+        "displayName": "Existing SQL Anywhere Database",
+        "hidden": App.get('currentStackName') !== 'SAPHD' && (App.get('currentStackName') !== 'HDP' || !App.get('isHadoop23Stack'))
+      }
+    ],
+    "radioName": "oozie-database",
+    "serviceName": "OOZIE"
+  },
+  {
+    "category": "OOZIE_SERVER",
+    "filename": "oozie-env.xml",
+    "index": 9,
+    "name": "oozie_data_dir",
+    "serviceName": "OOZIE"
+  }
+];

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/services/ranger_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/services/ranger_properties.js b/ambari-web/app/data/configs/services/ranger_properties.js
new file mode 100644
index 0000000..b78a9df
--- /dev/null
+++ b/ambari-web/app/data/configs/services/ranger_properties.js
@@ -0,0 +1,309 @@
+/**
+ * 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.
+ */
+
+module.exports = [
+  {
+    "category": "SolrKerberosSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "xasecure.audit.jaas.Client.option.principal",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "SolrKerberosSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "xasecure.audit.jaas.Client.option.keyTab",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "SolrKerberosSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "xasecure.audit.jaas.Client.loginModuleName",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "SolrKerberosSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "xasecure.audit.jaas.Client.loginModuleControlFlag",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "SolrKerberosSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "xasecure.audit.jaas.Client.option.useKeyTab",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "SolrKerberosSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "xasecure.audit.jaas.Client.option.storeKey",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "SolrKerberosSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "xasecure.audit.jaas.Client.option.serviceName",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "RANGER_ADMIN",
+    "filename": "ranger-env.xml",
+    "index": 0,
+    "name": "ranger_admin_username",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "RANGER_ADMIN",
+    "filename": "ranger-env.xml",
+    "index": 1,
+    "name": "ranger_admin_password",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "RANGER_ADMIN",
+    "filename": "admin-properties.xml",
+    "index": 2,
+    "name": "SQL_CONNECTOR_JAR",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "RangerSettings",
+    "filename": "ranger-env.xml",
+    "name": "ranger_user",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "RangerSettings",
+    "filename": "ranger-env.xml",
+    "name": "ranger_group",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "RangerSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "ranger.externalurl",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "RangerSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "ranger.service.http.enabled",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "RangerSettings",
+    "displayType": "radio button",
+    "filename": "ranger-admin-site.xml",
+    "name": "ranger.authentication.method",
+    "options": [
+      {
+        "displayName": "LDAP",
+        "foreignKeys": [
+          "ranger.ldap.group.roleattribute",
+          "ranger.ldap.url",
+          "ranger.ldap.user.dnpattern",
+          "ranger.ldap.base.dn",
+          "ranger.ldap.bind.dn",
+          "ranger.ldap.bind.password",
+          "ranger.ldap.referral",
+          "ranger.ldap.user.searchfilter"
+        ]
+      },
+      {
+        "displayName": "ACTIVE_DIRECTORY",
+        "foreignKeys": [
+          "ranger.ldap.ad.domain",
+          "ranger.ldap.ad.url",
+          "ranger.ldap.ad.base.dn",
+          "ranger.ldap.ad.bind.dn",
+          "ranger.ldap.ad.bind.password",
+          "ranger.ldap.ad.referral",
+          "ranger.ldap.ad.user.searchfilter"
+        ]
+      },
+      {
+        "displayName": "UNIX",
+        "foreignKeys": [
+          "ranger.unixauth.service.port",
+          "ranger.unixauth.service.hostname",
+          "ranger.unixauth.remote.login.enabled"
+        ]
+      },
+      {
+        "displayName": "PAM"
+      },
+      {
+        "displayName": "NONE"
+      }
+    ],
+    "radioName": "authentication-method",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "RangerSettings",
+    "filename": "admin-properties.xml",
+    "name": "policymgr_external_url",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "UnixAuthenticationSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "ranger.unixauth.remote.login.enabled",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "UnixAuthenticationSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "ranger.unixauth.service.hostname",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "UnixAuthenticationSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "ranger.unixauth.service.port",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "LDAPSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "ranger.ldap.url",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "LDAPSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "ranger.ldap.user.dnpattern",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "LDAPSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "ranger.ldap.group.roleattribute",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "LDAPSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "ranger.ldap.base.dn",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "LDAPSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "ranger.ldap.bind.dn",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "LDAPSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "ranger.ldap.bind.password",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "LDAPSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "ranger.ldap.referral",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "LDAPSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "ranger.ldap.user.searchfilter",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "KnoxSSOSettings",
+    "filename": "ranger-admin-site.xml",
+    "index": 2,
+    "name": "ranger.sso.providerurl",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "KnoxSSOSettings",
+    "filename": "ranger-admin-site.xml",
+    "index": 3,
+    "name": "ranger.sso.publicKey",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "KnoxSSOSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "ranger.sso.cookiename",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "KnoxSSOSettings",
+    "filename": "ranger-admin-site.xml",
+    "index": 1,
+    "name": "ranger.sso.enabled",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "KnoxSSOSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "ranger.sso.query.param.originalurl",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "KnoxSSOSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "ranger.sso.browser.useragent",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "ADSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "ranger.ldap.ad.domain",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "ADSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "ranger.ldap.ad.url",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "ADSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "ranger.ldap.ad.base.dn",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "ADSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "ranger.ldap.ad.bind.dn",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "ADSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "ranger.ldap.ad.bind.password",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "ADSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "ranger.ldap.ad.referral",
+    "serviceName": "RANGER"
+  },
+  {
+    "category": "ADSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "ranger.ldap.ad.user.searchfilter",
+    "serviceName": "RANGER"
+  }
+];


[12/47] ambari git commit: AMBARI-18818 ADDENDUM Config changes for Atlas to Support KnoxSSO Authentication (mugdha)

Posted by jo...@apache.org.
AMBARI-18818 ADDENDUM Config changes for Atlas to Support KnoxSSO Authentication (mugdha)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: f13e0486ba22125c5b5338de26e353a21ce9f1a0
Parents: a10cc80
Author: Mugdha Varadkar <mu...@apache.org>
Authored: Tue Nov 22 17:06:29 2016 +0530
Committer: Mugdha Varadkar <mu...@apache.org>
Committed: Tue Nov 22 18:43:24 2016 +0530

----------------------------------------------------------------------
 .../stacks/HDP/2.5/services/stack_advisor.py    | 10 ++++---
 .../services/ATLAS/themes/theme_version_2.json  | 28 ++++++++++----------
 .../stacks/HDP/2.6/services/stack_advisor.py    |  2 +-
 .../stacks/2.5/common/test_stack_advisor.py     |  3 ++-
 .../stacks/2.6/common/test_stack_advisor.py     |  4 +--
 5 files changed, 25 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/f13e0486/ambari-server/src/main/resources/stacks/HDP/2.5/services/stack_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/stack_advisor.py b/ambari-server/src/main/resources/stacks/HDP/2.5/services/stack_advisor.py
index 519602b..923c1f7 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/services/stack_advisor.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/stack_advisor.py
@@ -153,6 +153,7 @@ class HDP25StackAdvisor(HDP24StackAdvisor):
 
     #<editor-fold desc="LDAP and AD">
     auth_type = application_properties['atlas.authentication.method.ldap.type']
+    auth_ldap_enable = application_properties['atlas.authentication.method.ldap'].lower() == 'true'
     Logger.info("Validating Atlas configs, authentication type: %s" % str(auth_type))
 
     # Required props
@@ -182,10 +183,11 @@ class HDP25StackAdvisor(HDP24StackAdvisor):
     elif auth_type.lower() == "none":
       pass
 
-    for prop in props_to_require:
-      if prop not in application_properties or application_properties[prop] is None or application_properties[prop].strip() == "":
-        validationItems.append({"config-name": prop,
-                                "item": self.getErrorItem("If authentication type is %s, this property is required." % auth_type)})
+    if auth_ldap_enable:
+      for prop in props_to_require:
+        if prop not in application_properties or application_properties[prop] is None or application_properties[prop].strip() == "":
+          validationItems.append({"config-name": prop,
+                                  "item": self.getErrorItem("If authentication type is %s, this property is required." % auth_type)})
     #</editor-fold>
 
     if application_properties['atlas.graph.index.search.backend'] == 'solr5' and \

http://git-wip-us.apache.org/repos/asf/ambari/blob/f13e0486/ambari-server/src/main/resources/stacks/HDP/2.6/services/ATLAS/themes/theme_version_2.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/ATLAS/themes/theme_version_2.json b/ambari-server/src/main/resources/stacks/HDP/2.6/services/ATLAS/themes/theme_version_2.json
index f72ea4b..a5435e9 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/services/ATLAS/themes/theme_version_2.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/ATLAS/themes/theme_version_2.json
@@ -606,18 +606,18 @@
           ]
         },
         {
-          "config": "application-properties/atlas.sso.enabled",
+          "config": "application-properties/atlas.sso.knox.enabled",
           "subsection-name": "subsection-authentication-type"
         },
         {
-          "config": "application-properties/atlas.sso.providerurl",
+          "config": "application-properties/atlas.sso.knox.providerurl",
           "subsection-name": "subsection-atlas-sso",
           "depends-on": [
             {
               "configs":[
-                "application-properties/atlas.sso.enabled"
+                "application-properties/atlas.sso.knox.enabled"
               ],
-              "if": "${application-properties/atlas.sso.enabled}",
+              "if": "${application-properties/atlas.sso.knox.enabled}",
               "then": {
                 "property_value_attributes": {
                   "visible": true
@@ -632,14 +632,14 @@
           ]
         },
         {
-          "config": "application-properties/atlas.sso.publicKey",
+          "config": "application-properties/atlas.sso.knox.publicKey",
           "subsection-name": "subsection-atlas-sso",
           "depends-on": [
             {
               "configs":[
-                "application-properties/atlas.sso.enabled"
+                "application-properties/atlas.sso.knox.enabled"
               ],
-              "if": "${application-properties/atlas.sso.enabled}",
+              "if": "${application-properties/atlas.sso.knox.enabled}",
               "then": {
                 "property_value_attributes": {
                   "visible": true
@@ -654,14 +654,14 @@
           ]
         },
         {
-          "config": "application-properties/atlas.sso.browser.useragent",
+          "config": "application-properties/atlas.sso.knox.browser.useragent",
           "subsection-name": "subsection-atlas-sso",
           "depends-on": [
             {
               "configs":[
-                "application-properties/atlas.sso.enabled"
+                "application-properties/atlas.sso.knox.enabled"
               ],
-              "if": "${application-properties/atlas.sso.enabled}",
+              "if": "${application-properties/atlas.sso.knox.enabled}",
               "then": {
                 "property_value_attributes": {
                   "visible": true
@@ -817,25 +817,25 @@
         }
       },
       {
-        "config": "application-properties/atlas.sso.enabled",
+        "config": "application-properties/atlas.sso.knox.enabled",
         "widget": {
           "type":"checkbox"
         }
       },
       {
-        "config": "application-properties/atlas.sso.providerurl",
+        "config": "application-properties/atlas.sso.knox.providerurl",
         "widget": {
           "type": "text-field"
         }
       },
       {
-        "config": "application-properties/atlas.sso.publicKey",
+        "config": "application-properties/atlas.sso.knox.publicKey",
         "widget": {
           "type": "text-field"
         }
       },
       {
-        "config": "application-properties/atlas.sso.browser.useragent",
+        "config": "application-properties/atlas.sso.knox.browser.useragent",
         "widget": {
           "type": "text-field"
         }

http://git-wip-us.apache.org/repos/asf/ambari/blob/f13e0486/ambari-server/src/main/resources/stacks/HDP/2.6/services/stack_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/stack_advisor.py b/ambari-server/src/main/resources/stacks/HDP/2.6/services/stack_advisor.py
index 718da2c..bebeaf8 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/services/stack_advisor.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/stack_advisor.py
@@ -49,7 +49,7 @@ class HDP26StackAdvisor(HDP25StackAdvisor):
         knox_host = knox_hosts[0]
       if 'gateway-site' in services['configurations'] and 'gateway.port' in services['configurations']["gateway-site"]["properties"]:
         knox_port = services['configurations']["gateway-site"]["properties"]['gateway.port']
-      putAtlasApplicationProperty('atlas.sso.providerurl', 'https://{0}:{1}/gateway/knoxsso/api/v1/websso'.format(knox_host, knox_port))
+      putAtlasApplicationProperty('atlas.sso.knox.providerurl', 'https://{0}:{1}/gateway/knoxsso/api/v1/websso'.format(knox_host, knox_port))
 
   def recommendDruidConfigurations(self, configurations, clusterData, services, hosts):
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/f13e0486/ambari-server/src/test/python/stacks/2.5/common/test_stack_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.5/common/test_stack_advisor.py b/ambari-server/src/test/python/stacks/2.5/common/test_stack_advisor.py
index 7759c09..f4538d7 100644
--- a/ambari-server/src/test/python/stacks/2.5/common/test_stack_advisor.py
+++ b/ambari-server/src/test/python/stacks/2.5/common/test_stack_advisor.py
@@ -6803,7 +6803,8 @@ class TestHDP25StackAdvisor(TestCase):
                                                                             "atlas.kafka.bootstrap.servers": "",
                                                                             "atlas.kafka.zookeeper.connect": "",
                                                                             "atlas.graph.storage.hostname": "",
-                                                                            "atlas.audit.hbase.zookeeper.quorum": ""
+                                                                            "atlas.audit.hbase.zookeeper.quorum": "",
+                                                                            "atlas.authentication.method.ldap": "false"
                                                                             }}}
     hosts = self.prepareHosts([])
     result = self.stackAdvisor.validateConfigurations(services, hosts)

http://git-wip-us.apache.org/repos/asf/ambari/blob/f13e0486/ambari-server/src/test/python/stacks/2.6/common/test_stack_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.6/common/test_stack_advisor.py b/ambari-server/src/test/python/stacks/2.6/common/test_stack_advisor.py
index a7a45f8..011a874 100644
--- a/ambari-server/src/test/python/stacks/2.6/common/test_stack_advisor.py
+++ b/ambari-server/src/test/python/stacks/2.6/common/test_stack_advisor.py
@@ -572,7 +572,7 @@ class TestHDP26StackAdvisor(TestCase):
     configurations = {
       "application-properties": {
         "properties": {
-          "atlas.sso.providerurl": "",
+          "atlas.sso.knox.providerurl": "",
           "atlas.graph.index.search.solr.zookeeper-url": "",
           "atlas.audit.hbase.zookeeper.quorum": "",
           "atlas.graph.storage.hostname": "",
@@ -604,7 +604,7 @@ class TestHDP26StackAdvisor(TestCase):
     expected = {
       "application-properties": {
         "properties": {
-          "atlas.sso.providerurl": "https://c6401.ambari.apache.org:8443/gateway/knoxsso/api/v1/websso",
+          "atlas.sso.knox.providerurl": "https://c6401.ambari.apache.org:8443/gateway/knoxsso/api/v1/websso",
           "atlas.graph.index.search.solr.zookeeper-url": "",
           "atlas.audit.hbase.zookeeper.quorum": "",
           "atlas.graph.storage.hostname": "",


[32/47] ambari git commit: AMBARI-18968. Ambari Server Unit Test failure: org.apache.ambari.server.state.ServicePropertiesTest.validatePropertySchemaOfServiceXMLs (alejandro)

Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/b59dc1dd/ambari-server/src/main/resources/stacks/PERF/1.0/services/YARN/configuration/yarn-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/YARN/configuration/yarn-site.xml b/ambari-server/src/main/resources/stacks/PERF/1.0/services/YARN/configuration/yarn-site.xml
index f395c29..2d56e38 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/YARN/configuration/yarn-site.xml
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/YARN/configuration/yarn-site.xml
@@ -27,7 +27,7 @@
     <value-attributes>
       <type>boolean</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.timeline-service.generic-application-history.store-class</name>
@@ -35,7 +35,7 @@
     <description>
       Store class name for history store, defaulting to file system store
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.timeline-service.webapp.address</name>
@@ -69,7 +69,7 @@
     <value-attributes>
       <type>int</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <description>Length of time to wait between deletion cycles of leveldb timeline store in milliseconds.</description>
@@ -78,7 +78,7 @@
     <value-attributes>
       <type>int</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 
   <!-- These properties exist in HDP 2.2 and higher. -->
@@ -86,7 +86,7 @@
     <name>yarn.application.classpath</name>
     <value>$HADOOP_CONF_DIR,/usr/hdp/current/hadoop-client/*,/usr/hdp/current/hadoop-client/lib/*,/usr/hdp/current/hadoop-hdfs-client/*,/usr/hdp/current/hadoop-hdfs-client/lib/*,/usr/hdp/current/hadoop-yarn-client/*,/usr/hdp/current/hadoop-yarn-client/lib/*</value>
     <description>Classpath for typical applications.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hadoop.registry.rm.enabled</name>
@@ -94,7 +94,7 @@
     <description>
       Is the registry enabled: does the RM start it up, create the user and system paths, and purge service records when containers, application attempts and applications complete
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hadoop.registry.zk.quorum</name>
@@ -108,7 +108,7 @@
     <name>yarn.nodemanager.recovery.enabled</name>
     <value>true</value>
     <description>Enable the node manager to recover after starting</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.nodemanager.recovery.dir</name>
@@ -117,19 +117,19 @@
       The local filesystem directory in which the node manager will store
       state when recovery is enabled.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.client.nodemanager-connect.retry-interval-ms</name>
     <value>10000</value>
     <description>Time interval between each attempt to connect to NM</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.client.nodemanager-connect.max-wait-ms</name>
     <value>60000</value>
     <description>Max time to wait to establish a connection to NM</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.resourcemanager.recovery.enabled</name>
@@ -138,7 +138,7 @@
       Enable RM to recover state after starting.
       If true, then yarn.resourcemanager.store.class must be specified.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.resourcemanager.work-preserving-recovery.enabled</name>
@@ -150,7 +150,7 @@
     <value-attributes>
       <type>boolean</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.resourcemanager.store.class</name>
@@ -161,7 +161,7 @@
       the store is implicitly fenced; meaning a single ResourceManager
       is able to use the store at any point in time.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.resourcemanager.zk-address</name>
@@ -175,31 +175,31 @@
     <name>yarn.resourcemanager.zk-state-store.parent-path</name>
     <value>/rmstore</value>
     <description>Full path of the ZooKeeper znode where RM state will be stored. This must be supplied when using org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore as the value for yarn.resourcemanager.store.class</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.resourcemanager.zk-acl</name>
     <value>world:anyone:rwcda</value>
     <description>ACL's to be used for ZooKeeper znodes.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.resourcemanager.work-preserving-recovery.scheduling-wait-ms</name>
     <value>10000</value>
     <description>Set the amount of time RM waits before allocating new containers on work-preserving-recovery. Such wait period gives RM a chance to settle down resyncing with NMs in the cluster on recovery, before assigning new containers to applications.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.resourcemanager.connect.retry-interval.ms</name>
     <value>30000</value>
     <description>How often to try connecting to the ResourceManager.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.resourcemanager.connect.max-wait.ms</name>
     <value>900000</value>
     <description>Maximum time to wait to establish connection to ResourceManager</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.resourcemanager.zk-retry-interval-ms</name>
@@ -209,43 +209,43 @@
       automatically from yarn.resourcemanager.zk-timeout-ms and
       yarn.resourcemanager.zk-num-retries."
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.resourcemanager.zk-num-retries</name>
     <value>1000</value>
     <description>Number of times RM tries to connect to ZooKeeper.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.resourcemanager.zk-timeout-ms</name>
     <value>10000</value>
     <description>ZooKeeper session timeout in milliseconds. Session expiration is managed by the ZooKeeper cluster itself, not by the client. This value is used by the cluster to determine when the client's session expires. Expirations happens when the cluster does not hear from the client within the specified session timeout period (i.e. no heartbeat).</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.resourcemanager.state-store.max-completed-applications</name>
     <value>${yarn.resourcemanager.max-completed-applications}</value>
     <description>The maximum number of completed applications RM state store keeps, less than or equals to ${yarn.resourcemanager.max-completed-applications}. By default, it equals to ${yarn.resourcemanager.max-completed-applications}. This ensures that the applications kept in the state store are consistent with the applications remembered in RM memory. Any values larger than ${yarn.resourcemanager.max-completed-applications} will be reset to ${yarn.resourcemanager.max-completed-applications}. Note that this value impacts the RM recovery performance.Typically,  a smaller value indicates better performance on RM recovery.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.resourcemanager.fs.state-store.retry-policy-spec</name>
     <value>2000, 500</value>
     <description>hdfs client retry policy specification. hdfs client retry is always enabled. Specified in pairs of sleep-time and number-of-retries and (t0, n0), (t1, n1), ..., the first n0 retries sleep t0 milliseconds on average, the following n1 retries sleep t1 milliseconds on average, and so on.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.resourcemanager.fs.state-store.uri</name>
     <value> </value>
     <description>RI pointing to the location of the FileSystem path where RM state will be stored. This must be supplied when using org.apache.hadoop.yarn.server.resourcemanager.recovery.FileSystemRMStateStore as the value for yarn.resourcemanager.store.class </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.resourcemanager.ha.enabled</name>
     <value>false</value>
     <description>enable RM HA or not</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.nodemanager.linux-container-executor.resources-handler.class</name>
@@ -257,7 +257,7 @@
         <name>yarn_cgroups_enabled</name>
       </property>
     </depends-on>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.nodemanager.linux-container-executor.cgroups.hierarchy</name>
@@ -269,7 +269,7 @@
         <name>yarn_cgroups_enabled</name>
       </property>
     </depends-on>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.nodemanager.linux-container-executor.cgroups.mount</name>
@@ -281,7 +281,7 @@
         <name>yarn_cgroups_enabled</name>
       </property>
     </depends-on>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.nodemanager.linux-container-executor.cgroups.mount-path</name>
@@ -293,13 +293,13 @@
         <name>yarn_cgroups_enabled</name>
       </property>
     </depends-on>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.nodemanager.linux-container-executor.cgroups.strict-resource-usage</name>
     <value>false</value>
     <description>Strictly limit CPU resource usage to allocated usage even if spare CPU is available</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.nodemanager.resource.cpu-vcores</name>
@@ -324,7 +324,7 @@
         <name>yarn.nodemanager.resource.percentage-physical-cpu-limit</name>
       </property>
     </depends-on>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.nodemanager.resource.percentage-physical-cpu-limit</name>
@@ -337,7 +337,7 @@
       <maximum>100</maximum>
       <increment-step>1</increment-step>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.node-labels.fs-store.retry-policy-spec</name>
@@ -347,19 +347,19 @@
       specified by N pairs of sleep-time in milliseconds and number-of-retries
       &quot;s1,n1,s2,n2,...&quot;.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.nodemanager.disk-health-checker.min-free-space-per-disk-mb</name>
     <value>1000</value>
     <description>This is related to disk size on the machines, admins should set one of yarn.nodemanager.disk-health-checker.min-free-space-per-disk-mb or yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage but not both. If both are set, the more conservative value will be used</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage</name>
     <value>90</value>
     <description>This is related to disk size on the machines, admins should set one of yarn.nodemanager.disk-health-checker.min-free-space-per-disk-mb or yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage but not both. If both are set, the more conservative value will be used</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.nodemanager.log-aggregation.debug-enabled</name>
@@ -368,37 +368,37 @@
       This configuration is for debug and test purpose.
       By setting this configuration as true.
       We can break the lower bound of yarn.nodemanager.log-aggregation.roll-monitoring-interval-seconds</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.nodemanager.log-aggregation.num-log-files-per-app</name>
     <value>30</value>
     <description>This is temporary solution. The configuration will be deleted once, we find a more scalable method to only write a single log file per LRS.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.resourcemanager.system-metrics-publisher.enabled</name>
     <value>true</value>
     <description/>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.resourcemanager.system-metrics-publisher.dispatcher.pool-size</name>
     <value>10</value>
     <description>Number of worker threads that send the yarn system metrics data.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.timeline-service.client.max-retries</name>
     <value>30</value>
     <description/>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.timeline-service.client.retry-interval-ms</name>
     <value>1000</value>
     <description/>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.timeline-service.ttl-enable</name>
@@ -409,13 +409,13 @@
     <value-attributes>
       <type>boolean</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.timeline-service.state-store-class</name>
     <value>org.apache.hadoop.yarn.server.timeline.recovery.LeveldbTimelineStateStore</value>
     <description>Store class name for timeline state store.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.timeline-service.leveldb-state-store.path</name>
@@ -424,7 +424,7 @@
     <value-attributes>
       <type>directory</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.timeline-service.leveldb-timeline-store.path</name>
@@ -433,7 +433,7 @@
     <value-attributes>
       <type>directory</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.timeline-service.leveldb-timeline-store.read-cache-size</name>
@@ -441,7 +441,7 @@
     <description>
       Size of read cache for uncompressed blocks for leveldb timeline store in bytes.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.timeline-service.leveldb-timeline-store.start-time-read-cache-size</name>
@@ -449,7 +449,7 @@
     <description>
       Size of cache for recently read entity start times for leveldb timeline store in number of entities.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.timeline-service.leveldb-timeline-store.start-time-write-cache-size</name>
@@ -457,7 +457,7 @@
     <description>
       Size of cache for recently written entity start times for leveldb timeline store in number of entities.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.timeline-service.http-authentication.type</name>
@@ -466,13 +466,13 @@
       Defines authentication used for the Timeline Server HTTP endpoint.
       Supported values are: simple | kerberos | $AUTHENTICATION_HANDLER_CLASSNAME
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.timeline-service.http-authentication.simple.anonymous.allowed</name>
     <value>true</value>
     <description/>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.resourcemanager.webapp.delegation-token-auth-filter.enabled</name>
@@ -483,25 +483,25 @@
       tokens(fallback to kerberos if the tokens are missing).
       Only applicable when the http authentication type is kerberos.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.resourcemanager.bind-host</name>
     <value>0.0.0.0</value>
     <description>Default value is 0.0.0.0, when this is set the service will bind on all interfaces.  I think these two options (blank, "0.0.0.0" sans quotes) should be the two available values, with blank as the default.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.nodemanager.bind-host</name>
     <value>0.0.0.0</value>
     <description>Default value is 0.0.0.0, when this is set the service will bind on all interfaces.  I think these two options (blank, "0.0.0.0" sans quotes) should be the two available values, with blank as the default.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.timeline-service.bind-host</name>
     <value>0.0.0.0</value>
     <description>Default value is 0.0.0.0, when this is set the service will bind on all interfaces.  I think these two options (blank, "0.0.0.0" sans quotes) should be the two available values, with blank as the default.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.node-labels.fs-store.root-dir</name>
@@ -509,7 +509,7 @@
     <description>
       URI for NodeLabelManager.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.scheduler.minimum-allocation-vcores</name>
@@ -528,7 +528,7 @@
         <name>yarn.nodemanager.resource.cpu-vcores</name>
       </property>
     </depends-on>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.scheduler.maximum-allocation-vcores</name>
@@ -547,7 +547,7 @@
         <name>yarn.nodemanager.resource.cpu-vcores</name>
       </property>
     </depends-on>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.node-labels.enabled</name>
@@ -570,7 +570,7 @@
       </entries>
       <selection-cardinality>1</selection-cardinality>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.nodemanager.container-executor.class</name>
@@ -586,7 +586,7 @@
         <name>hadoop.security.authentication</name>
       </property>
     </depends-on>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.nodemanager.linux-container-executor.group</name>
@@ -602,7 +602,7 @@
         <name>user_group</name>
       </property>
     </depends-on>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.resourcemanager.scheduler.monitor.enable</name>
@@ -627,7 +627,7 @@
       </entries>
       <selection-cardinality>1</selection-cardinality>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 
   <!-- This first section of properties exists in HDP 2.3 and higher. -->
@@ -638,7 +638,7 @@
       true, then yarn.timeline-service.state-store-class must be specified.
     </description>
     <value>true</value>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.acl.enable</name>
@@ -650,8 +650,8 @@
         <name>ranger-yarn-plugin-enabled</name>
       </property>
     </depends-on>
-    <on-ambari-upgrade add="true"/>
-  </property>arn.nodemanager.linux-container-executo
+    <on-ambari-upgrade add="false"/>
+  </property>
   <property>
     <name>yarn.authorization-provider</name>
     <description> Yarn authorization provider class. </description>
@@ -661,7 +661,7 @@
         <name>ranger-yarn-plugin-enabled</name>
       </property>
     </depends-on>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.admin.acl</name>
@@ -670,32 +670,32 @@
     <value-attributes>
       <empty-value-valid>true</empty-value-valid>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <!-- ATS v1.5 properties that exist in HDP 2.3 and higher. -->
   <property>
     <name>yarn.timeline-service.version</name>
     <value>1.5</value>
     <description>Timeline service version we&#x2019;re currently using.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.timeline-service.store-class</name>
     <value>org.apache.hadoop.yarn.server.timeline.EntityGroupFSTimelineStore</value>
     <description>Main storage class for YARN timeline server.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.timeline-service.entity-group-fs-store.active-dir</name>
     <value>/ats/active/</value>
     <description>DFS path to store active application&#x2019;s timeline data</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.timeline-service.entity-group-fs-store.done-dir</name>
     <value>/ats/done/</value>
     <description>DFS path to store done application&#x2019;s timeline data</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.timeline-service.entity-group-fs-store.group-id-plugin-classes</name>
@@ -704,7 +704,7 @@
     <value-attributes>
       <empty-value-valid>true</empty-value-valid>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <!-- advanced ats v1.5 properties-->
   <property>
@@ -712,7 +712,7 @@
     <description>Summary storage for ATS v1.5</description>
     <!-- Use rolling leveldb, advanced -->
     <value>org.apache.hadoop.yarn.server.timeline.RollingLevelDBTimelineStore</value>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.timeline-service.entity-group-fs-store.scan-interval-seconds</name>
@@ -723,7 +723,7 @@
     </description>
     <!-- Default is 60 seconds, advanced -->
     <value>60</value>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.timeline-service.entity-group-fs-store.cleaner-interval-seconds</name>
@@ -734,7 +734,7 @@
     </description>
     <!-- 3600 is default, advanced -->
     <value>3600</value>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.timeline-service.entity-group-fs-store.retain-seconds</name>
@@ -744,7 +744,7 @@
     </description>
     <!-- 7 days is default, advanced -->
     <value>604800</value>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 
 


[36/47] ambari git commit: AMBARI-18971 Populate Ranger LDAP group configs under LDAP category used for authentication (mugdha)

Posted by jo...@apache.org.
AMBARI-18971 Populate Ranger LDAP group configs under LDAP category used for authentication (mugdha)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: cb1bce2f5af7f4fa6c55b819b23c53ce342d9a45
Parents: 998baf6
Author: Mugdha Varadkar <mu...@apache.org>
Authored: Thu Nov 24 14:24:51 2016 +0530
Committer: Mugdha Varadkar <mu...@apache.org>
Committed: Thu Nov 24 14:28:42 2016 +0530

----------------------------------------------------------------------
 .../data/configs/services/ranger_properties.js  | 26 +++++++++++++++++---
 1 file changed, 22 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/cb1bce2f/ambari-web/app/data/configs/services/ranger_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/services/ranger_properties.js b/ambari-web/app/data/configs/services/ranger_properties.js
index b78a9df..754e4d4 100644
--- a/ambari-web/app/data/configs/services/ranger_properties.js
+++ b/ambari-web/app/data/configs/services/ranger_properties.js
@@ -181,7 +181,8 @@ module.exports = [
     "category": "LDAPSettings",
     "filename": "ranger-admin-site.xml",
     "name": "ranger.ldap.url",
-    "serviceName": "RANGER"
+    "serviceName": "RANGER",
+    "index": 1
   },
   {
     "category": "LDAPSettings",
@@ -205,13 +206,15 @@ module.exports = [
     "category": "LDAPSettings",
     "filename": "ranger-admin-site.xml",
     "name": "ranger.ldap.bind.dn",
-    "serviceName": "RANGER"
+    "serviceName": "RANGER",
+    "index": 2
   },
   {
     "category": "LDAPSettings",
     "filename": "ranger-admin-site.xml",
     "name": "ranger.ldap.bind.password",
-    "serviceName": "RANGER"
+    "serviceName": "RANGER",
+    "index": 3
   },
   {
     "category": "LDAPSettings",
@@ -223,7 +226,22 @@ module.exports = [
     "category": "LDAPSettings",
     "filename": "ranger-admin-site.xml",
     "name": "ranger.ldap.user.searchfilter",
-    "serviceName": "RANGER"
+    "serviceName": "RANGER",
+    "index": 4
+  },
+  {
+    "category": "LDAPSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "ranger.ldap.group.searchbase",
+    "serviceName": "RANGER",
+    "index": 5
+  },
+  {
+    "category": "LDAPSettings",
+    "filename": "ranger-admin-site.xml",
+    "name": "ranger.ldap.group.searchfilter",
+    "serviceName": "RANGER",
+    "index": 6
   },
   {
     "category": "KnoxSSOSettings",


[28/47] ambari git commit: AMBARI-18947 Infinite spinner displayed instead of some Flume Agent graphs (dsen)

Posted by jo...@apache.org.
AMBARI-18947 Infinite spinner displayed instead of some Flume Agent graphs (dsen)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: fbf636d3b2d06612ba5258f2587261cb7950e314
Parents: 4551c9f
Author: Dmytro Sen <ds...@apache.org>
Authored: Wed Nov 23 17:01:17 2016 +0200
Committer: Dmytro Sen <ds...@apache.org>
Committed: Wed Nov 23 17:01:17 2016 +0200

----------------------------------------------------------------------
 .../FLUME/1.4.0.2.0/metrics.json                | 62 --------------------
 1 file changed, 62 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/fbf636d3/ambari-server/src/main/resources/common-services/FLUME/1.4.0.2.0/metrics.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/FLUME/1.4.0.2.0/metrics.json b/ambari-server/src/main/resources/common-services/FLUME/1.4.0.2.0/metrics.json
index 611a1b7..455a22e 100644
--- a/ambari-server/src/main/resources/common-services/FLUME/1.4.0.2.0/metrics.json
+++ b/ambari-server/src/main/resources/common-services/FLUME/1.4.0.2.0/metrics.json
@@ -357,68 +357,6 @@
               "metric": "EventAcceptedCount",
               "pointInTime": true,
               "temporal": true
-            },
-
-            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/EventTakeSuccessCount/rate/avg": {
-              "metric": "EventTakeSuccessCount._rate._avg",
-              "pointInTime": false,
-              "temporal": true
-            },
-            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/EventTakeSuccessCount/rate/max": {
-              "metric": "EventTakeSuccessCount._rate._max",
-              "pointInTime": false,
-              "temporal": true
-            },
-            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/EventTakeSuccessCount/rate/min": {
-              "metric": "EventTakeSuccessCount._rate._min",
-              "pointInTime": false,
-              "temporal": true
-            },
-            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/EventTakeSuccessCount/rate/sum": {
-              "metric": "EventTakeSuccessCount._rate._sum",
-              "pointInTime": false,
-              "temporal": true
-            },
-            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/EventPutSuccessCount/rate/avg": {
-              "metric": "EventPutSuccessCount._rate._avg",
-              "pointInTime": false,
-              "temporal": true
-            },
-            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/EventPutSuccessCount/rate/max": {
-              "metric": "EventPutSuccessCount._rate._max",
-              "pointInTime": false,
-              "temporal": true
-            },
-            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/EventPutSuccessCount/rate/min": {
-              "metric": "EventPutSuccessCount._rate._min",
-              "pointInTime": false,
-              "temporal": true
-            },
-            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/EventPutSuccessCount/rate/sum": {
-              "metric": "EventPutSuccessCount._rate._sum",
-              "pointInTime": false,
-              "temporal": true
-            },
-
-            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/ChannelSize/rate/avg": {
-              "metric": "ChannelSize._rate._avg",
-              "pointInTime": false,
-              "temporal": true
-            },
-            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/ChannelSize/rate/max": {
-              "metric": "ChannelSize._rate._max",
-              "pointInTime": false,
-              "temporal": true
-            },
-            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/ChannelSize/rate/min": {
-              "metric": "ChannelSize._rate._min",
-              "pointInTime": false,
-              "temporal": true
-            },
-            "metrics/flume/flume/CHANNEL/$1.replaceAll(\"^CHANNEL\.\",\"\")/ChannelSize/rate/sum": {
-              "metric": "ChannelSize._rate._sum",
-              "pointInTime": false,
-              "temporal": true
             }
 
           }


[18/47] ambari git commit: AMBARI-18826. Stack property definitions made in ambari-web should be made stack agnostic (akovalenko)

Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/HDP2/rm_ha_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2/rm_ha_properties.js b/ambari-web/app/data/HDP2/rm_ha_properties.js
deleted file mode 100644
index fb1bd13..0000000
--- a/ambari-web/app/data/HDP2/rm_ha_properties.js
+++ /dev/null
@@ -1,206 +0,0 @@
-/**
- * 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.
- */
-
-module.exports =
-{
-  "haConfig": {
-    serviceName: 'MISC',
-    displayName: 'MISC',
-    configCategories: [
-      App.ServiceConfigCategory.create({ name: 'YARN', displayName: 'YARN'}),
-      App.ServiceConfigCategory.create({ name: 'HAWQ', displayName: 'HAWQ'}),
-      App.ServiceConfigCategory.create({ name: 'HDFS', displayName: 'HDFS'})
-    ],
-    sites: ['yarn-site', 'hawq-site', 'core-site'],
-    configs: [
-    /**********************************************HDFS***************************************/
-      {
-        "name": "yarn.resourcemanager.ha.enabled",
-        "displayName": "yarn.resourcemanager.ha.enabled",
-        "isReconfigurable": false,
-        "recommendedValue": true,
-        "isOverridable": false,
-        "value": true,
-        "displayType": "checkbox",
-        "category": "YARN",
-        "filename": "yarn-site",
-        serviceName: 'MISC'
-      },
-      {
-        "name": "yarn.resourcemanager.ha.rm-ids",
-        "displayName": "yarn.resourcemanager.ha.rm-ids",
-        "isReconfigurable": false,
-        "recommendedValue": "rm1,rm2",
-        "isOverridable": false,
-        "value": "rm1,rm2",
-        "category": "YARN",
-        "filename": "yarn-site",
-        serviceName: 'MISC'
-      },
-      {
-        "name": "yarn.resourcemanager.hostname.rm1",
-        "displayName": "yarn.resourcemanager.hostname.rm1",
-        "isReconfigurable": false,
-        "recommendedValue": "",
-        "isOverridable": false,
-        "value": "",
-        "category": "YARN",
-        "filename": "yarn-site",
-        serviceName: 'MISC'
-      },
-
-      {
-        "name": "yarn.resourcemanager.webapp.address.rm1",
-        "displayName": "yarn.resourcemanager.webapp.address.rm1",
-        "isReconfigurable": false,
-        "recommendedValue": "",
-        "isOverridable": false,
-        "value": "",
-        "category": "YARN",
-        "filename": "yarn-site",
-        serviceName: 'MISC'
-      },
-      {
-        "name": "yarn.resourcemanager.webapp.address.rm2",
-        "displayName": "yarn.resourcemanager.webapp.address.rm2",
-        "isReconfigurable": false,
-        "recommendedValue": "",
-        "isOverridable": false,
-        "value": "",
-        "category": "YARN",
-        "filename": "yarn-site",
-        serviceName: 'MISC'
-      },
-      {
-        "name": "yarn.resourcemanager.webapp.https.address.rm1",
-        "displayName": "yarn.resourcemanager.webapp.https.address.rm1",
-        "isReconfigurable": false,
-        "recommendedValue": "",
-        "isOverridable": false,
-        "value": "",
-        "category": "YARN",
-        "filename": "yarn-site",
-        serviceName: 'MISC'
-      },
-      {
-        "name": "yarn.resourcemanager.webapp.https.address.rm2",
-        "displayName": "yarn.resourcemanager.webapp.https.address.rm2",
-        "isReconfigurable": false,
-        "recommendedValue": "",
-        "isOverridable": false,
-        "value": "",
-        "category": "YARN",
-        "filename": "yarn-site",
-        serviceName: 'MISC'
-      },
-
-      {
-        "name": "yarn.resourcemanager.hostname.rm2",
-        "displayName": "yarn.resourcemanager.hostname.rm2",
-        "isReconfigurable": false,
-        "recommendedValue": "",
-        "isOverridable": false,
-        "value": "",
-        "category": "YARN",
-        "filename": "yarn-site",
-        serviceName: 'MISC'
-      },
-      {
-        "name": "yarn.resourcemanager.recovery.enabled",
-        "displayName": "yarn.resourcemanager.recovery.enabled",
-        "isReconfigurable": false,
-        "recommendedValue": true,
-        "isOverridable": false,
-        "value": true,
-        "displayType": "checkbox",
-        "category": "YARN",
-        "filename": "yarn-site",
-        serviceName: 'MISC'
-      },
-      {
-        "name": "yarn.resourcemanager.store.class",
-        "displayName": "yarn.resourcemanager.store.class",
-        "isReconfigurable": false,
-        "recommendedValue": "org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore",
-        "isOverridable": false,
-        "value": "org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore",
-        "category": "YARN",
-        "filename": "yarn-site",
-        serviceName: 'MISC'
-      },
-      {
-        "name": "yarn.resourcemanager.zk-address",
-        "displayName": "yarn.resourcemanager.zk-address",
-        "isReconfigurable": false,
-        "recommendedValue": "",
-        "isOverridable": false,
-        "value": "",
-        "category": "YARN",
-        "filename": "yarn-site",
-        serviceName: 'MISC'
-      },
-      {
-        "name": "yarn.resourcemanager.cluster-id",
-        "displayName": "yarn.resourcemanager.cluster-id",
-        "isReconfigurable": false,
-        "recommendedValue": "yarn-cluster",
-        "isOverridable": false,
-        "value": "yarn-cluster",
-        "category": "YARN",
-        "filename": "yarn-site",
-        serviceName: 'MISC'
-      },
-      {
-        "name": "yarn.resourcemanager.ha.automatic-failover.zk-base-path",
-        "displayName": "yarn.resourcemanager.ha.automatic-failover.zk-base-path",
-        "isReconfigurable": false,
-        "recommendedValue": "/yarn-leader-election",
-        "isOverridable": false,
-        "value": "/yarn-leader-election",
-        "category": "YARN",
-        "filename": "yarn-site",
-        serviceName: 'MISC'
-      },
-    /**********************************************HAWQ***************************************/
-      {
-        "name": "yarn.resourcemanager.ha",
-        "displayName": "yarn.resourcemanager.ha",
-        "description": "Comma separated yarn resourcemanager host addresses with port",
-        "isReconfigurable": false,
-        "recommendedValue": "",
-        "isOverridable": false,
-        "value": "",
-        "category": "HAWQ",
-        "filename": "yarn-client",
-        serviceName: 'MISC'
-      },
-      {
-        "name": "yarn.resourcemanager.scheduler.ha",
-        "displayName": "yarn.resourcemanager.scheduler.ha",
-        "description": "Comma separated yarn resourcemanager scheduler addresses with port",
-        "isReconfigurable": false,
-        "recommendedValue": "",
-        "isOverridable": false,
-        "value": "",
-        "category": "HAWQ",
-        "filename": "yarn-client",
-        serviceName: 'MISC'
-      }
-    ]
-  }
-};

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/HDP2/secure_mapping.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2/secure_mapping.js b/ambari-web/app/data/HDP2/secure_mapping.js
deleted file mode 100644
index 8d952e8..0000000
--- a/ambari-web/app/data/HDP2/secure_mapping.js
+++ /dev/null
@@ -1,1004 +0,0 @@
-/**
- * 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.
- */
-
-var App = require('app');
-// All of the "name" properties have to coincide with how they will appear in the *-site.xml file
-// The "template" properties can come from the config properties in site_properties.js or secure_properties.js .
-var props = [
-  {
-    "name": "hadoop.security.authentication",
-    "templateName": [],
-    "foreignKey": null,
-    "value": "kerberos",
-    "nonSecureValue": "simple",
-    "filename": "core-site.xml",
-    "serviceName": "HDFS"
-  },
-  {
-    "name": "hadoop.security.authorization",
-    "templateName": [],
-    "foreignKey": null,
-    "value": "true",
-    "nonSecureValue": "false",
-    "filename": "core-site.xml",
-    "serviceName": "HDFS"
-  },
-  {
-    "name": "hadoop.security.auth_to_local",
-    "templateName": ["resourcemanager_primary_name", "kerberos_domain", "yarn_user", "nodemanager_primary_name", "namenode_primary_name", "hdfs_user", "datanode_primary_name", "hbase_master_primary_name", "hbase_user","hbase_regionserver_primary_name","oozie_primary_name","oozie_user","jobhistory_primary_name","mapred_user","journalnode_principal_name","falcon_primary_name","falcon_user"],
-    "foreignKey": null,
-    "value": "RULE:[2:$1@$0](<templateName[0]>@.*<templateName[1]>)s/.*/<templateName[2]>/\nRULE:[2:$1@$0](<templateName[3]>@.*<templateName[1]>)s/.*/<templateName[2]>/\nRULE:[2:$1@$0](<templateName[4]>@.*<templateName[1]>)s/.*/<templateName[5]>/\nRULE:[2:$1@$0](<templateName[6]>@.*<templateName[1]>)s/.*/<templateName[5]>/\nRULE:[2:$1@$0](<templateName[7]>@.*<templateName[1]>)s/.*/<templateName[8]>/\nRULE:[2:$1@$0](<templateName[9]>@.*<templateName[1]>)s/.*/<templateName[8]>/\nRULE:[2:$1@$0](<templateName[10]>@.*<templateName[1]>)s/.*/<templateName[11]>/\nRULE:[2:$1@$0](<templateName[12]>@.*<templateName[1]>)s/.*/<templateName[13]>/\nRULE:[2:$1@$0](<templateName[14]>@.*<templateName[1]>)s/.*/<templateName[5]>/\nRULE:[2:$1@$0](<templateName[15]>@.*<templateName[1]>)s/.*/<templateName[16]>/\nDEFAULT",
-    "filename": "core-site.xml",
-    "serviceName": "HDFS",
-    "dependedServiceName": [{name: "HBASE", replace: "\nRULE:[2:$1@$0](<templateName[7]>@.*<templateName[1]>)s/.*/<templateName[8]>/\nRULE:[2:$1@$0](<templateName[9]>@.*<templateName[1]>)s/.*/<templateName[8]>/"},{name: "OOZIE",replace: "\nRULE:[2:$1@$0](<templateName[10]>@.*<templateName[1]>)s/.*/<templateName[11]>/"},{name: "MAPREDUCE2",replace: "\nRULE:[2:$1@$0](<templateName[12]>@.*<templateName[1]>)s/.*/<templateName[13]>/"}]
-  },
-  {
-    "name": "dfs.namenode.kerberos.principal",
-    "templateName": ["namenode_principal_name", "kerberos_domain"],
-    "foreignKey": null,
-    "value": "<templateName[0]>@<templateName[1]>",
-    "filename": "hdfs-site.xml",
-    "serviceName": "HDFS"
-  },
-  {
-    "name": "dfs.namenode.keytab.file",
-    "templateName": ["namenode_keytab"],
-    "foreignKey": null,
-    "value": "<templateName[0]>",
-    "filename": "hdfs-site.xml",
-    "serviceName": "HDFS"
-  },
-  {
-    "name": "dfs.secondary.namenode.kerberos.principal",
-    "templateName": ["snamenode_principal_name", "kerberos_domain"],
-    "foreignKey": null,
-    "value": "<templateName[0]>@<templateName[1]>",
-    "filename": "hdfs-site.xml",
-    "serviceName": "HDFS"
-  },
-  {
-    "name": "dfs.secondary.namenode.keytab.file",
-    "templateName": ["snamenode_keytab"],
-    "foreignKey": null,
-    "value": "<templateName[0]>",
-    "filename": "hdfs-site.xml",
-    "serviceName": "HDFS"
-  },
-  {
-    "name": "dfs.web.authentication.kerberos.principal",
-    "templateName": ["hadoop_http_principal_name", "kerberos_domain"],
-    "foreignKey": null,
-    "value": "<templateName[0]>@<templateName[1]>",
-    "filename": "hdfs-site.xml",
-    "serviceName": "HDFS"
-  },
-  {
-    "name": "dfs.web.authentication.kerberos.keytab",
-    "templateName": ["hadoop_http_keytab"],
-    "foreignKey": null,
-    "value": "<templateName[0]>",
-    "filename": "hdfs-site.xml",
-    "serviceName": "HDFS"
-  },
-  {
-    "name": "dfs.datanode.kerberos.principal",
-    "templateName": ["datanode_principal_name", "kerberos_domain"],
-    "foreignKey": null,
-    "value": "<templateName[0]>@<templateName[1]>",
-    "filename": "hdfs-site.xml",
-    "serviceName": "HDFS"
-  },
-  {
-    "name": "dfs.datanode.keytab.file",
-    "templateName": ["datanode_keytab"],
-    "foreignKey": null,
-    "value": "<templateName[0]>",
-    "filename": "hdfs-site.xml",
-    "serviceName": "HDFS"
-  },
-  {
-    "name": "dfs.namenode.kerberos.internal.spnego.principal",
-    "templateName": [],
-    "foreignKey": null,
-    "value": "${dfs.web.authentication.kerberos.principal}",
-    "filename": "hdfs-site.xml",
-    "serviceName": "HDFS"
-  },
-  {
-    "name": "dfs.secondary.namenode.kerberos.internal.spnego.principal",
-    "templateName": [],
-    "foreignKey": null,
-    "value": "${dfs.web.authentication.kerberos.principal}",
-    "filename": "hdfs-site.xml",
-    "serviceName": "HDFS"
-  },
-  {
-    "name": "dfs.journalnode.kerberos.principal",
-    "templateName": ["journalnode_principal_name", "kerberos_domain"],
-    "foreignKey": null,
-    "value": "<templateName[0]>@<templateName[1]>",
-    "filename": "hdfs-site.xml",
-    "serviceName": "HDFS"
-  },
-  {
-    "name": "dfs.journalnode.kerberos.internal.spnego.principal",
-    "templateName": ["hadoop_http_principal_name", "kerberos_domain"],
-    "foreignKey": null,
-    "value": "<templateName[0]>@<templateName[1]>",
-    "filename": "hdfs-site.xml",
-    "serviceName": "HDFS"
-  },
-  {
-    "name": "dfs.journalnode.keytab.file",
-    "templateName": ["journalnode_keytab"],
-    "foreignKey": null,
-    "value": "<templateName[0]>",
-    "filename": "hdfs-site.xml",
-    "serviceName": "HDFS"
-  },
-  {
-    "name": "dfs.datanode.address",
-    "templateName": ["dfs_datanode_address"],
-    "foreignKey": null,
-    "value": "0.0.0.0:<templateName[0]>",
-    "nonSecureValue": "0.0.0.0:50010",
-    "filename": "hdfs-site.xml",
-    "serviceName": "HDFS"
-  },
-  {
-    "name": "dfs.datanode.http.address",
-    "templateName": ["dfs_datanode_http_address"],
-    "foreignKey": null,
-    "value": "0.0.0.0:<templateName[0]>",
-    "nonSecureValue": "0.0.0.0:50075",
-    "filename": "hdfs-site.xml",
-    "serviceName": "HDFS"
-  },
-  {
-    "name": "mapreduce.jobhistory.principal",
-    "templateName": ["jobhistory_principal_name", "kerberos_domain"],
-    "foreignKey": null,
-    "value": "<templateName[0]>@<templateName[1]>",
-    "filename": "mapred-site.xml",
-    "serviceName": "MAPREDUCE2"
-  },
-  {
-    "name": "mapreduce.jobhistory.keytab",
-    "templateName": ["jobhistory_keytab"],
-    "foreignKey": null,
-    "value": "<templateName[0]>",
-    "filename": "mapred-site.xml",
-    "serviceName": "MAPREDUCE2"
-  },
-  {
-    "name": "mapreduce.jobhistory.webapp.spnego-principal",
-    "templateName": ["jobhistory_http_principal_name", "kerberos_domain"],
-    "foreignKey": null,
-    "value": "<templateName[0]>@<templateName[1]>",
-    "filename": "mapred-site.xml",
-    "serviceName": "MAPREDUCE2"
-  },
-  {
-    "name": "mapreduce.jobhistory.webapp.spnego-keytab-file",
-    "templateName": ["jobhistory_http_keytab"],
-    "foreignKey": null,
-    "value": "<templateName[0]>",
-    "filename": "mapred-site.xml",
-    "serviceName": "MAPREDUCE2"
-  },
-  {
-    "name": "yarn.timeline-service.enabled",
-    "templateName": [],
-    "foreignKey": null,
-    "value": "true",
-    "nonSecureValue": "false",
-    "filename": "yarn-site.xml",
-    "serviceName": "YARN"
-  },
-  {
-    "name": "yarn.acl.enable",
-    "templateName": [],
-    "foreignKey": null,
-    "value": "true",
-    "nonSecureValue": "false",
-    "filename": "yarn-site.xml",
-    "serviceName": "YARN"
-  },
-  // YARN Timeline Service
-  // These "http-authentication" properties are supported in HDP Champlain
-  {
-    "name": "yarn.timeline-service.principal",
-    "templateName": ["apptimelineserver_principal_name", "kerberos_domain"],
-    "foreignKey": null,
-    "value": "<templateName[0]>@<templateName[1]>",
-    "filename": "yarn-site.xml",
-    "serviceName": "YARN"
-  },
-  {
-    "name": "yarn.timeline-service.keytab",
-    "templateName": ["apptimelineserver_keytab"],
-    "foreignKey": null,
-    "value": "<templateName[0]>",
-    "filename": "yarn-site.xml",
-    "serviceName": "YARN"
-  },
-  {
-    "name": "yarn.timeline-service.http-authentication.type",
-    "templateName": [],
-    "foreignKey": null,
-    "value": "kerberos",
-    "filename": "yarn-site.xml",
-    "serviceName": "YARN"
-  },
-  {
-    "name": "yarn.timeline-service.http-authentication.kerberos.principal",
-    "templateName": ["apptimelineserver_http_principal_name", "kerberos_domain"],
-    "foreignKey": null,
-    "value": "<templateName[0]>@<templateName[1]>",
-    "filename": "yarn-site.xml",
-    "serviceName": "YARN"
-  },
-  {
-    "name": "yarn.timeline-service.http-authentication.kerberos.keytab",
-    "templateName": ["apptimelineserver_http_keytab"],
-    "foreignKey": null,
-    "value": "<templateName[0]>",
-    "filename": "yarn-site.xml",
-    "serviceName": "YARN"
-  },
-  // YARN Resource Manager
-  {
-    "name": "yarn.resourcemanager.principal",
-    "templateName": ["resourcemanager_principal_name", "kerberos_domain"],
-    "foreignKey": null,
-    "value": "<templateName[0]>@<templateName[1]>",
-    "filename": "yarn-site.xml",
-    "serviceName": "YARN"
-  },
-  {
-    "name": "yarn.resourcemanager.keytab",
-    "templateName": ["resourcemanager_keytab"],
-    "foreignKey": null,
-    "value": "<templateName[0]>",
-    "filename": "yarn-site.xml",
-    "serviceName": "YARN"
-  },
-  {
-    "name": "yarn.nodemanager.principal",
-    "templateName": ["nodemanager_principal_name", "kerberos_domain"],
-    "foreignKey": null,
-    "value": "<templateName[0]>@<templateName[1]>",
-    "filename": "yarn-site.xml",
-    "serviceName": "YARN"
-  },
-  {
-    "name": "yarn.nodemanager.keytab",
-    "templateName": ["nodemanager_keytab"],
-    "foreignKey": null,
-    "value": "<templateName[0]>",
-    "filename": "yarn-site.xml",
-    "serviceName": "YARN"
-  },
-  {
-    "name": "yarn.resourcemanager.webapp.spnego-principal",
-    "templateName": ["resourcemanager_http_principal_name", "kerberos_domain"],
-    "foreignKey": null,
-    "value": "<templateName[0]>@<templateName[1]>",
-    "filename": "yarn-site.xml",
-    "serviceName": "YARN"
-  },
-  {
-    "name": "yarn.resourcemanager.webapp.spnego-keytab-file",
-    "templateName": ["resourcemanager_http_keytab"],
-    "foreignKey": null,
-    "value": "<templateName[0]>",
-    "filename": "yarn-site.xml",
-    "serviceName": "YARN"
-  },
-  {
-    "name": "yarn.nodemanager.webapp.spnego-principal",
-    "templateName": ["nodemanager_http_principal_name", "kerberos_domain"],
-    "foreignKey": null,
-    "value": "<templateName[0]>@<templateName[1]>",
-    "filename": "yarn-site.xml",
-    "serviceName": "YARN"
-  },
-  {
-    "name": "yarn.nodemanager.webapp.spnego-keytab-file",
-    "templateName": ["nodemanager_http_keytab"],
-    "foreignKey": null,
-    "value": "<templateName[0]>",
-    "filename": "yarn-site.xml",
-    "serviceName": "YARN"
-  },
-  {
-    "name": "yarn.nodemanager.container-executor.class",
-    "templateName": ["yarn_nodemanager_container-executor_class"],
-    "foreignKey": null,
-    "value": "<templateName[0]>",
-    "nonSecureValue": "org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor",
-    "filename": "yarn-site.xml",
-    "serviceName": "YARN"
-  },
-  {
-    "name": "hbase.master.kerberos.principal",
-    "templateName": ["hbase_master_principal_name", "kerberos_domain"],
-    "foreignKey": null,
-    "value": "<templateName[0]>@<templateName[1]>",
-    "filename": "hbase-site.xml",
-    "serviceName": "HBASE"
-  },
-  {
-    "name": "hbase.master.keytab.file",
-    "templateName": ["hbase_master_keytab"],
-    "foreignKey": null,
-    "value": "<templateName[0]>",
-    "filename": "hbase-site.xml",
-    "serviceName": "HBASE"
-  },
-  {
-    "name": "hbase.regionserver.kerberos.principal",
-    "templateName": ["hbase_regionserver_principal_name", "kerberos_domain"],
-    "foreignKey": null,
-    "value": "<templateName[0]>@<templateName[1]>",
-    "filename": "hbase-site.xml",
-    "serviceName": "HBASE"
-  },
-  {
-    "name": "hbase.regionserver.keytab.file",
-    "templateName": ["hbase_regionserver_keytab"],
-    "foreignKey": null,
-    "value": "<templateName[0]>",
-    "filename": "hbase-site.xml",
-    "serviceName": "HBASE"
-  },
-  {
-    "name": "hive.metastore.sasl.enabled",
-    "templateName": [],
-    "foreignKey": null,
-    "value": "true",
-    "nonSecureValue": "false",
-    "filename": "hive-site.xml",
-    "serviceName": "HIVE"
-  },
-  {
-    "name": "hive.security.authorization.enabled",
-    "templateName": [],
-    "foreignKey": null,
-    "value": "true",
-    "nonSecureValue": "false",
-    "filename": "hive-site.xml",
-    "serviceName": "HIVE"
-  },
-  {
-    "name": "hive.server2.authentication",
-    "templateName": [],
-    "foreignKey": null,
-    "value": "KERBEROS",
-    "nonSecureValue": "NONE",
-    "filename": "hive-site.xml",
-    "serviceName": "HIVE"
-  },
-  {
-    "name": "hive.metastore.kerberos.principal",
-    "templateName": ["hive_metastore_principal_name", "kerberos_domain"],
-    "foreignKey": null,
-    "value": "<templateName[0]>@<templateName[1]>",
-    "filename": "hive-site.xml",
-    "serviceName": "HIVE"
-  },
-  {
-    "name": "hive.metastore.kerberos.keytab.file",
-    "templateName": ["hive_metastore_keytab"],
-    "foreignKey": null,
-    "value": "<templateName[0]>",
-    "filename": "hive-site.xml",
-    "serviceName": "HIVE"
-  },
-  {
-    "name": "hive.server2.authentication.kerberos.principal",
-    "templateName": ["hive_metastore_principal_name", "kerberos_domain"],
-    "foreignKey": null,
-    "value": "<templateName[0]>@<templateName[1]>",
-    "filename": "hive-site.xml",
-    "serviceName": "HIVE"
-  },
-  {
-    "name": "hive.server2.authentication.kerberos.keytab",
-    "templateName": ["hive_metastore_keytab"],
-    "foreignKey": null,
-    "value": "<templateName[0]>",
-    "filename": "hive-site.xml",
-    "serviceName": "HIVE"
-  },
-  {
-    "name": "hive.server2.authentication.spnego.principal",
-    "templateName": ["hive_metastore_http_principal_name", "kerberos_domain"],
-    "foreignKey": null,
-    "value": "<templateName[0]>@<templateName[1]>",
-    "filename": "hive-site.xml",
-    "serviceName": "HIVE"
-  },
-  {
-    "name": "hive.server2.authentication.spnego.keytab",
-    "templateName": ["hive_metastore_http_keytab"],
-    "foreignKey": null,
-    "value": "<templateName[0]>",
-    "filename": "hive-site.xml",
-    "serviceName": "HIVE"
-  },
-  {
-    "name": "oozie.service.AuthorizationService.authorization.enabled",
-    "templateName": [],
-    "foreignKey": null,
-    "value": "true",
-    "filename": "oozie-site.xml",
-    "serviceName": "OOZIE"
-  },
-  {
-    "name": "oozie.service.HadoopAccessorService.kerberos.enabled",
-    "templateName": [],
-    "foreignKey": null,
-    "value": "true",
-    "nonSecureValue": "false",
-    "filename": "oozie-site.xml",
-    "serviceName": "OOZIE"
-  },
-  {
-    "name": "local.realm",
-    "templateName": ["kerberos_domain"],
-    "foreignKey": null,
-    "value": "<templateName[0]>",
-    "filename": "oozie-site.xml",
-    "serviceName": "OOZIE"
-  },
-  {
-    "name": "oozie.service.HadoopAccessorService.keytab.file",
-    "templateName": ["oozie_keytab"],
-    "foreignKey": null,
-    "value": "<templateName[0]>",
-    "filename": "oozie-site.xml",
-    "serviceName": "OOZIE"
-  },
-  {
-    "name": "oozie.service.HadoopAccessorService.kerberos.principal",
-    "templateName": ["oozie_principal_name", "kerberos_domain"],
-    "foreignKey": null,
-    "value": "<templateName[0]>@<templateName[1]>",
-    "filename": "oozie-site.xml",
-    "serviceName": "OOZIE"
-  },
-  {
-    "name": "oozie.authentication.type",
-    "templateName": [],
-    "foreignKey": null,
-    "value": "kerberos",
-    "nonSecureValue": "simple",
-    "filename": "oozie-site.xml",
-    "serviceName": "OOZIE"
-  },
-  {
-    "name": "oozie.authentication.kerberos.principal",
-    "templateName": ["oozie_http_principal_name", "kerberos_domain"],
-    "foreignKey": null,
-    "value": "<templateName[0]>@<templateName[1]>",
-    "filename": "oozie-site.xml",
-    "serviceName": "OOZIE"
-  },
-  {
-    "name": "oozie.authentication.kerberos.keytab",
-    "templateName": ["oozie_http_keytab"],
-    "foreignKey": null,
-    "value": "<templateName[0]>",
-    "filename": "oozie-site.xml",
-    "serviceName": "OOZIE"
-  },
-  {
-    "name": "oozie.authentication.kerberos.name.rules",
-    "templateName": ["resourcemanager_primary_name", "kerberos_domain", "yarn_user", "nodemanager_primary_name", "namenode_primary_name", "hdfs_user", "datanode_primary_name", "hbase_master_primary_name", "hbase_user","hbase_regionserver_primary_name"],
-    "foreignKey": null,
-    "value": "RULE:[2:$1@$0](<templateName[0]>@.*<templateName[1]>)s/.*/<templateName[2]>/\nRULE:[2:$1@$0](<templateName[3]>@.*<templateName[1]>)s/.*/<templateName[2]>/\nRULE:[2:$1@$0](<templateName[4]>@.*<templateName[1]>)s/.*/<templateName[5]>/\nRULE:[2:$1@$0](<templateName[6]>@.*<templateName[1]>)s/.*/<templateName[5]>/\nRULE:[2:$1@$0](<templateName[7]>@.*<templateName[1]>)s/.*/<templateName[8]>/\nRULE:[2:$1@$0](<templateName[9]>@.*<templateName[1]>)s/.*/<templateName[8]>/\nDEFAULT",
-    "filename": "oozie-site.xml",
-    "serviceName": "OOZIE",
-    "dependedServiceName": [{name: "HBASE", replace: "\nRULE:[2:$1@$0](<templateName[7]>@.*<templateName[1]>)s/.*/<templateName[8]>/\nRULE:[2:$1@$0](<templateName[9]>@.*<templateName[1]>)s/.*/<templateName[8]>/"}]
-  },
-  {
-    "name": "templeton.kerberos.principal",
-    "templateName": ["webHCat_http_principal_name", "kerberos_domain"],
-    "foreignKey": null,
-    "value": "<templateName[0]>@<templateName[1]>",
-    "filename": "webhcat-site.xml",
-    "serviceName": "HIVE"
-  },
-  {
-    "name": "templeton.kerberos.keytab",
-    "templateName": ["webhcat_http_keytab"],
-    "foreignKey": null,
-    "value": "<templateName[0]>",
-    "filename": "webhcat-site.xml",
-    "serviceName": "HIVE"
-  },
-  {
-    "name": "templeton.kerberos.secret",
-    "templateName": [""],
-    "foreignKey": null,
-    "value": "secret",
-    "filename": "webhcat-site.xml",
-    "serviceName": "HIVE"
-  },
-  {
-    "name": "templeton.hive.properties",
-    "templateName": ["hive_metastore","hive_metastore_principal_name","kerberos_domain"],
-    "foreignKey": null,
-    "value": "hive.metastore.local=false,hive.metastore.uris=<templateName[0]>,hive." +
-      "metastore.sasl.enabled=true,hive.metastore.execute.setugi=true,hive.metastore.warehouse.dir=/apps/hive/warehouse,hive.exec.mode.local.auto=false,hive.metastore.kerberos.principal=<templateName[1]>@<templateName[2]>",
-    "filename": "webhcat-site.xml",
-    "serviceName": "HIVE"
-  },
-  {
-    "name": "hbase.security.authentication",
-    "templateName": [],
-    "foreignKey": null,
-    "value": "kerberos",
-    "nonSecureValue": "simple",
-    "filename": "hbase-site.xml",
-    "serviceName": "HBASE"
-  },
-  {
-    "name": "hbase.security.authorization",
-    "templateName": [],
-    "foreignKey": null,
-    "value": "true",
-    "nonSecureValue": "false",
-    "filename": "hbase-site.xml",
-    "serviceName": "HBASE"
-  },
-  {
-    "name": "hbase.bulkload.staging.dir",
-    "templateName": [],
-    "foreignKey": null,
-    "value": "/apps/hbase/staging",
-    "filename": "hbase-site.xml",
-    "serviceName": "HBASE"
-  },
-  {
-    "name": "zookeeper.znode.parent",
-    "templateName": [],
-    "foreignKey": null,
-    "value": "/hbase-secure",
-    "nonSecureValue": "/hbase-unsecure",
-    "filename": "hbase-site.xml",
-    "serviceName": "HBASE"
-  },
-
-  /***************************************FALCON***********************************************/
-  {
-    "name": "*.falcon.authentication.type",
-    "templateName": [],
-    "foreignKey": null,
-    "value": "kerberos",
-    "nonSecureValue": "simple",
-    "filename": "falcon-startup.properties.xml",
-    "serviceName": "FALCON"
-  },
-  {
-    "name": "*.falcon.http.authentication.type",
-    "templateName": [],
-    "foreignKey": null,
-    "value": "kerberos",
-    "nonSecureValue": "simple",
-    "filename": "falcon-startup.properties.xml",
-    "serviceName": "FALCON"
-  },
-  {
-    "name": "*.falcon.service.authentication.kerberos.principal",
-    "templateName": ["falcon_principal_name", "kerberos_domain"],
-    "foreignKey": null,
-    "value": "<templateName[0]>@<templateName[1]>",
-    "filename": "falcon-startup.properties.xml",
-    "serviceName": "FALCON"
-  },
-  {
-    "name": "*.falcon.service.authentication.kerberos.keytab",
-    "templateName": ["falcon_keytab"],
-    "foreignKey": null,
-    "value": "<templateName[0]>",
-    "filename": "falcon-startup.properties.xml",
-    "serviceName": "FALCON"
-  },
-  {
-    "name": "*.falcon.http.authentication.kerberos.principal",
-    "templateName": ["falcon_http_principal_name", "kerberos_domain"],
-    "foreignKey": null,
-    "value": "<templateName[0]>@<templateName[1]>",
-    "filename": "falcon-startup.properties.xml",
-    "serviceName": "FALCON"
-  },
-  {
-    "name": "*.falcon.http.authentication.kerberos.keytab",
-    "templateName": ["falcon_http_keytab"],
-    "foreignKey": null,
-    "value": "<templateName[0]>",
-    "filename": "falcon-startup.properties.xml",
-    "serviceName": "FALCON"
-  },
-  {
-    "name": "*.dfs.namenode.kerberos.principal",
-    "templateName": ["namenode_principal_name_falcon", "kerberos_domain"],
-    "foreignKey": null,
-    "value": "<templateName[0]>@<templateName[1]>",
-    "filename": "falcon-startup.properties.xml",
-    "serviceName": "FALCON"
-  },
-
-  /***************************************KNOX***********************************************/
-  {
-    "name": "gateway.hadoop.kerberos.secured",
-    "templateName": [],
-    "foreignKey": null,
-    "value": "true",
-    "nonSecureValue": "false",
-    "filename": "gateway-site.xml",
-    "serviceName": "KNOX"
-  },
-  {
-    "name": "java.security.krb5.conf",
-    "templateName": [],
-    "foreignKey": null,
-    "value": "/etc/krb5.conf",
-    "filename": "gateway-site.xml",
-    "serviceName": "KNOX"
-  },
-  {
-    "name": "hadoop.proxyuser.<foreignKey[0]>.groups",
-    "templateName": ["proxyuser_group"],
-    "foreignKey": ["knox_primary_name"],
-    "value": "<templateName[0]>",
-    "filename": "core-site.xml",
-    "serviceName": "KNOX"
-  },
-  {
-    "name": "hadoop.proxyuser.<foreignKey[0]>.hosts",
-    "templateName": ["knox_gateway_hosts"],
-    "foreignKey": ["knox_primary_name"],
-    "value": "<templateName[0]>",
-    "filename": "core-site.xml",
-    "serviceName": "KNOX"
-  },
-  {
-    "name": "webhcat.proxyuser.<foreignKey[0]>.groups",
-    "templateName": ["proxyuser_group"],
-    "foreignKey": ["knox_primary_name"],
-    "value": "<templateName[0]>",
-    "filename": "webhcat-site.xml",
-    "serviceName": "KNOX"
-  },
-  {
-    "name": "webhcat.proxyuser.<foreignKey[0]>.hosts",
-    "templateName": ["knox_gateway_hosts"],
-    "foreignKey": ["knox_primary_name"],
-    "value": "<templateName[0]>",
-    "filename": "webhcat-site.xml",
-    "serviceName": "KNOX"
-  },
-  {
-    "name": "oozie.service.ProxyUserService.proxyuser.<foreignKey[0]>.groups",
-    "templateName": ["proxyuser_group"],
-    "foreignKey": ["knox_primary_name"],
-    "value": "<templateName[0]>",
-    "filename": "oozie-site.xml",
-    "serviceName": "KNOX"
-  },
-  {
-    "name": "oozie.service.ProxyUserService.proxyuser.<foreignKey[0]>.hosts",
-    "templateName": ["knox_gateway_hosts"],
-    "foreignKey": ["knox_primary_name"],
-    "value": "<templateName[0]>",
-    "filename": "oozie-site.xml",
-    "serviceName": "KNOX"
-  },
-/***************************************core-site***************************************************/
-  {
-    "name": "hadoop.proxyuser.<foreignKey[0]>.groups",
-    "templateName": ["proxyuser_group"],
-    "foreignKey": ["hive_metastore_primary_name"],
-    "value": "<templateName[0]>",
-    "filename": "core-site.xml",
-    "serviceName": "HIVE"
-  },
-  {
-    "name": "hadoop.proxyuser.<foreignKey[0]>.hosts",
-    "templateName": ["hive_metastore"],
-    "foreignKey": ["hive_metastore_primary_name"],
-    "value": "<templateName[0]>",
-    "filename": "core-site.xml",
-    "serviceName": "HIVE"
-  },
-  {
-    "name": "hadoop.proxyuser.<foreignKey[0]>.groups",
-    "templateName": ["proxyuser_group"],
-    "foreignKey": ["oozie_primary_name"],
-    "value": "<templateName[0]>",
-    "filename": "core-site.xml",
-    "serviceName": "OOZIE"
-  },
-  {
-    "name": "hadoop.proxyuser.<foreignKey[0]>.hosts",
-    "templateName": ["oozieserver_host"],
-    "foreignKey": ["oozie_primary_name"],
-    "value": "<templateName[0]>",
-    "filename": "core-site.xml",
-    "serviceName": "OOZIE"
-  },
-  {
-    "name": "hadoop.proxyuser.<foreignKey[0]>.groups",
-    "templateName": ["proxyuser_group"],
-    "foreignKey": ["webHCat_http_primary_name"],
-    "value": "<templateName[0]>",
-    "filename": "core-site.xml",
-    "serviceName": "HIVE"
-  },
-  {
-    "name": "hadoop.proxyuser.<foreignKey[0]>.hosts",
-    "templateName": ["webhcat_server"],
-    "foreignKey": ["webHCat_http_primary_name"],
-    "value": "<templateName[0]>",
-    "filename": "core-site.xml",
-    "serviceName": "HIVE"
-  }
-];
-
-var yarn22Mapping = [
-  {
-    "name": 'hadoop.http.authentication.kerberos.principal',
-    "templateName": ["hadoop_http_principal_name", "kerberos_domain"],
-    "foreignKey": null,
-    "value": "<templateName[0]>@<templateName[1]>",
-    "serviceName": "HDFS",
-    "filename": "core-site.xml"
-  },
-  {
-    "name": 'hadoop.http.authentication.kerberos.keytab',
-    "foreignKey": null,
-    "templateName": ["hadoop_http_keytab"],
-    "value": "<templateName[0]>",
-    "serviceName": "HDFS",
-    "filename": "core-site.xml"
-  },
-  {
-    name: 'hadoop.http.authentication.kerberos.name.rules',
-    templateName: [],
-    foreignKey: null,
-    value: "",
-    "serviceName": "HDFS",
-    "filename": "core-site.xml"
-  },
-  {
-    "name": 'yarn.timeline-service.http-authentication.signature.secret',
-    "templateName": [],
-    "foreignKey": null,
-    "value": "",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  },
-  {
-    "name": 'yarn.timeline-service.http-authentication.signature.secret.file',
-    "value": "",
-    "templateName": [],
-    "foreignKey": null,
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  },
-  {
-    "name": 'yarn.timeline-service.http-authentication.signer.secret.provider',
-    "value": "",
-    "templateName": [],
-    "foreignKey": null,
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  },
-  {
-    "name": 'yarn.timeline-service.http-authentication.signer.secret.provider.object',
-    "value": "",
-    "templateName": [],
-    "foreignKey": null,
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  },
-  {
-
-    "name": 'yarn.timeline-service.http-authentication.token.validity',
-    "templateName": [],
-    "foreignKey": null,
-    "value": "",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  },
-  {
-    "name": 'yarn.timeline-service.http-authentication.cookie.domain',
-    "value": "",
-    "templateName": [],
-    "foreignKey": null,
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  },
-  {
-    "name": 'yarn.timeline-service.http-authentication.cookie.path',
-    "value": "",
-    "templateName": [],
-    "foreignKey": null,
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  },
-  {
-    "name": 'yarn.timeline-service.http-authentication.simple.anonymous.allowed',
-    "value": "true",
-    "templateName": [],
-    "foreignKey": null,
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  },
-  {
-    "name": 'yarn.timeline-service.http-authentication.proxyusers.*.hosts',
-    "value": "",
-    "templateName": [],
-    "foreignKey": null,
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  },
-  {
-    "name": 'yarn.timeline-service.http-authentication.proxyusers.*.users',
-    "value": "",
-    "serviceName": "YARN",
-    "templateName": [],
-    "foreignKey": null,
-    "filename": "yarn-site.xml"
-  },
-  {
-    "name": 'yarn.timeline-service.http-authentication.proxyusers.*.groups',
-    "value": "",
-    "templateName": [],
-    "foreignKey": null,
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  },
-  {
-    "name": 'hadoop.http.filter.initializers',
-    "value": "",
-    "templateName": [],
-    "foreignKey": null,
-    "serviceName": "HDFS",
-    "filename": "core-site.xml"
-  },
-  {
-    "name": 'hadoop.http.authentication.type',
-    "value": "simple",
-    "templateName": [],
-    "foreignKey": null,
-    "serviceName": "HDFS",
-    "filename": "core-site.xml"
-  },
-  {
-    "name": 'hadoop.http.authentication.signature.secret',
-    "value": "",
-    "templateName": [],
-    "foreignKey": null,
-    "serviceName": "HDFS",
-    "filename": "core-site.xml"
-  },
-  {
-    "name": 'hadoop.http.authentication.signature.secret.file',
-    "value": "",
-    "templateName": [],
-    "foreignKey": null,
-    "serviceName": "HDFS",
-    "filename": "core-site.xml"
-  },
-  {
-    "name": 'hadoop.http.authentication.signer.secret.provider',
-    "value": "",
-    "templateName": [],
-    "foreignKey": null,
-    "serviceName": "HDFS",
-    "filename": "core-site.xml"
-  },
-  {
-    "name": 'hadoop.http.authentication.signer.secret.provider.object',
-    "value": "",
-    "templateName": [],
-    "foreignKey": null,
-    "serviceName": "HDFS",
-    "filename": "core-site.xml"
-  },
-  {
-    "name": 'hadoop.http.authentication.token.validity',
-    "value": "",
-    "templateName": [],
-    "foreignKey": null,
-    "serviceName": "HDFS",
-    "filename": "core-site.xml"
-  },
-  {
-    "name": 'hadoop.http.authentication.cookie.domain',
-    "value": "",
-    "templateName": [],
-    "foreignKey": null,
-    "serviceName": "HDFS",
-    "filename": "core-site.xml"
-  },
-  {
-    "name": 'hadoop.http.authentication.cookie.path',
-    "value": "",
-    "templateName": [],
-    "foreignKey": null,
-    "serviceName": "HDFS",
-    "filename": "core-site.xml"
-  },
-  {
-    "name": 'yarn.timeline-service.http-authentication.kerberos.name.rules',
-    "value": "",
-    "templateName": [],
-    "foreignKey": null,
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  },
-  {
-    "name": 'yarn.resourcemanager.proxyusers.*.hosts',
-    "value": "",
-    "templateName": [],
-    "foreignKey": null,
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  },
-  {
-    "name": 'yarn.resourcemanager.proxyusers.*.users',
-    "value": "",
-    "templateName": [],
-    "foreignKey": null,
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  },
-  {
-    "name": 'yarn.resourcemanager.proxyusers.*.groups',
-    "value": "",
-    "templateName": [],
-    "foreignKey": null,
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  },
-  {
-    "name": 'yarn.resourcemanager.proxy-user-privileges.enabled',
-    "value": "true",
-    "templateName": [],
-    "foreignKey": null,
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  },
-  {
-    "name": 'yarn.nodemanager.linux-container-executor.cgroups.mount-path',
-    "value": "",
-    "templateName": [],
-    "foreignKey": null,
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  }
-];
-
-props.pushObjects(yarn22Mapping);
-
-module.exports = props;


[13/47] ambari git commit: AMBARI-18958 - License file issue with src/test/resources/stacks/HDP/2.2.0/services/GANGLIA/upgrades/HDP/rolling-upgrade.xml

Posted by jo...@apache.org.
AMBARI-18958 - License file issue with src/test/resources/stacks/HDP/2.2.0/services/GANGLIA/upgrades/HDP/rolling-upgrade.xml


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: 1ed941661bf6e4aa7e936034cdaf464a95ea7631
Parents: f13e048
Author: Tim Thorpe <tt...@apache.org>
Authored: Tue Nov 22 06:11:35 2016 -0800
Committer: Tim Thorpe <tt...@apache.org>
Committed: Tue Nov 22 06:11:35 2016 -0800

----------------------------------------------------------------------
 .../GANGLIA/upgrades/HDP/rolling-upgrade.xml        | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/1ed94166/ambari-server/src/test/resources/stacks/HDP/2.2.0/services/GANGLIA/upgrades/HDP/rolling-upgrade.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/stacks/HDP/2.2.0/services/GANGLIA/upgrades/HDP/rolling-upgrade.xml b/ambari-server/src/test/resources/stacks/HDP/2.2.0/services/GANGLIA/upgrades/HDP/rolling-upgrade.xml
index c2224dd..385e539 100644
--- a/ambari-server/src/test/resources/stacks/HDP/2.2.0/services/GANGLIA/upgrades/HDP/rolling-upgrade.xml
+++ b/ambari-server/src/test/resources/stacks/HDP/2.2.0/services/GANGLIA/upgrades/HDP/rolling-upgrade.xml
@@ -1,4 +1,18 @@
 <?xml version="1.0"?>
+<!--
+   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.
+-->
 
 <upgrade xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="upgrade-pack.xsd">
   <target>*</target>
@@ -24,4 +38,4 @@
       </component>
     </service>
   </processing>
-</upgrade>
\ No newline at end of file
+</upgrade>


[08/47] ambari git commit: Revert "AMBARI-18915 : Update AMS pom to use Apache hbase, hadoop, phoenix tarballs. (avijayan)"

Posted by jo...@apache.org.
Revert "AMBARI-18915 : Update AMS pom to use Apache hbase,hadoop,phoenix tarballs. (avijayan)"

This reverts commit eb87df065d4f0f838e7335bc2cf47d06c9e5dd68.


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: 0bbdb937ebed326bd667b985e48027bd1a23a110
Parents: eb87df0
Author: Aravindan Vijayan <av...@hortonworks.com>
Authored: Mon Nov 21 14:13:01 2016 -0800
Committer: Aravindan Vijayan <av...@hortonworks.com>
Committed: Mon Nov 21 14:13:01 2016 -0800

----------------------------------------------------------------------
 ambari-metrics/ambari-metrics-timelineservice/pom.xml   | 12 ++++++------
 .../applicationhistoryservice/webapp/TestAHSWebApp.java |  1 -
 ambari-metrics/pom.xml                                  | 12 ++++++------
 3 files changed, 12 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/0bbdb937/ambari-metrics/ambari-metrics-timelineservice/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-metrics/ambari-metrics-timelineservice/pom.xml b/ambari-metrics/ambari-metrics-timelineservice/pom.xml
index d4f3f1e..6896c6b 100644
--- a/ambari-metrics/ambari-metrics-timelineservice/pom.xml
+++ b/ambari-metrics/ambari-metrics-timelineservice/pom.xml
@@ -34,9 +34,9 @@
     <!-- Needed for generating FindBugs warnings using parent pom -->
     <!--<yarn.basedir>${project.parent.parent.basedir}</yarn.basedir>-->
     <protobuf.version>2.5.0</protobuf.version>
-    <hadoop.version>2.7.2</hadoop.version>
-    <phoenix.version>4.8.1-HBase-1.2</phoenix.version>
-    <hbase.version>1.2.4</hbase.version>
+    <hadoop.version>2.7.1.2.3.4.0-3347</hadoop.version>
+    <phoenix.version>4.4.0.2.3.4.0-3347</phoenix.version>
+    <hbase.version>1.1.2.2.3.4.0-3347</hbase.version>
   </properties>
 
   <build>
@@ -304,9 +304,9 @@
     </dependency>
 
     <dependency>
-      <groupId>org.apache.commons</groupId>
-      <artifactId>commons-lang3</artifactId>
-      <version>3.0</version>
+      <groupId>commons-lang</groupId>
+      <artifactId>commons-lang</artifactId>
+      <version>2.5</version>
     </dependency>
 
     <dependency>

http://git-wip-us.apache.org/repos/asf/ambari/blob/0bbdb937/ambari-metrics/ambari-metrics-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/TestAHSWebApp.java
----------------------------------------------------------------------
diff --git a/ambari-metrics/ambari-metrics-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/TestAHSWebApp.java b/ambari-metrics/ambari-metrics-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/TestAHSWebApp.java
index ec319e2..605358f 100644
--- a/ambari-metrics/ambari-metrics-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/TestAHSWebApp.java
+++ b/ambari-metrics/ambari-metrics-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/TestAHSWebApp.java
@@ -21,7 +21,6 @@ package org.apache.hadoop.yarn.server.applicationhistoryservice.webapp;
 import static org.apache.hadoop.yarn.webapp.Params.TITLE;
 import static org.mockito.Mockito.mock;
 
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.AboutPage;
 import org.junit.Assert;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.yarn.api.ApplicationBaseProtocol;

http://git-wip-us.apache.org/repos/asf/ambari/blob/0bbdb937/ambari-metrics/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-metrics/pom.xml b/ambari-metrics/pom.xml
index ac9e7bc..2d88912 100644
--- a/ambari-metrics/pom.xml
+++ b/ambari-metrics/pom.xml
@@ -39,18 +39,18 @@
     <python.ver>python &gt;= 2.6</python.ver>
     <deb.python.ver>python (&gt;= 2.6)</deb.python.ver>
     <!--TODO change to HDP URL-->
-    <hbase.tar>http://www-us.apache.org/dist/hbase/1.2.4/hbase-1.2.4-bin.tar.gz</hbase.tar>
-    <hbase.folder>hbase-1.2.4</hbase.folder>
-    <hadoop.tar>http://www-us.apache.org/dist/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz</hadoop.tar>
-    <hadoop.folder>hadoop-2.7.2</hadoop.folder>
+    <hbase.tar>http://private-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.3.4.0-3347/tars/hbase-1.1.2.2.3.4.0-3347.tar.gz</hbase.tar>
+    <hbase.folder>hbase-1.1.2.2.3.4.0-3347</hbase.folder>
+    <hadoop.tar>http://private-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.3.4.0-3347/tars/hadoop-2.7.1.2.3.4.0-3347.tar.gz</hadoop.tar>
+    <hadoop.folder>hadoop-2.7.1.2.3.4.0-3347</hadoop.folder>
     <hbase.winpkg.zip>https://msibuilds.blob.core.windows.net/hdp/2.x/2.2.4.2/2/hbase-0.98.4.2.2.4.2-0002-hadoop2.winpkg.zip</hbase.winpkg.zip>
     <hbase.winpkg.folder>hbase-0.98.4.2.2.4.2-0002-hadoop2</hbase.winpkg.folder>
     <hadoop.winpkg.zip>https://msibuilds.blob.core.windows.net/hdp/2.x/2.2.4.2/2/hadoop-2.6.0.2.2.4.2-0002.winpkg.zip</hadoop.winpkg.zip>
     <hadoop.winpkg.folder>hadoop-2.6.0.2.2.4.2-0002</hadoop.winpkg.folder>
     <grafana.folder>grafana-2.6.0</grafana.folder>
     <grafana.tar>https://grafanarel.s3.amazonaws.com/builds/grafana-2.6.0.linux-x64.tar.gz</grafana.tar>
-    <phoenix.tar>http://www-us.apache.org/dist/phoenix/apache-phoenix-4.8.1-HBase-1.2/bin/apache-phoenix-4.8.1-HBase-1.2-bin.tar.gz</phoenix.tar>
-    <phoenix.folder>apache-phoenix-4.8.1-HBase-1.2-bin</phoenix.folder>
+    <phoenix.tar>http://private-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.3.4.0-3347/tars/phoenix-4.4.0.2.3.4.0-3347.tar.gz</phoenix.tar>
+    <phoenix.folder>phoenix-4.4.0.2.3.4.0-3347</phoenix.folder>
     <resmonitor.install.dir>
       /usr/lib/python2.6/site-packages/resource_monitoring
     </resmonitor.install.dir>


[38/47] ambari git commit: AMBARI-18983. Service Summary fix add widget button size (akovalenko)

Posted by jo...@apache.org.
AMBARI-18983. Service Summary fix add widget button size (akovalenko)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: 3081aec39c0f6dfc13545667ec1a1b2ef87d3b06
Parents: c9f6944
Author: Aleksandr Kovalenko <ak...@hortonworks.com>
Authored: Thu Nov 24 10:59:37 2016 +0200
Committer: Aleksandr Kovalenko <ak...@hortonworks.com>
Committed: Thu Nov 24 13:07:34 2016 +0200

----------------------------------------------------------------------
 ambari-web/app/styles/enhanced_service_dashboard.less  | 2 ++
 ambari-web/app/templates/main/service/info/summary.hbs | 2 +-
 2 files changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/3081aec3/ambari-web/app/styles/enhanced_service_dashboard.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/enhanced_service_dashboard.less b/ambari-web/app/styles/enhanced_service_dashboard.less
index e783c52..870e9a8 100644
--- a/ambari-web/app/styles/enhanced_service_dashboard.less
+++ b/ambari-web/app/styles/enhanced_service_dashboard.less
@@ -20,10 +20,12 @@
 
 @border-color: #ddd;
 @invalid-color: red;
+@add-widget-btn-color: #f5f5f5;
 
 .service-metrics-block {
 
   #add-widget-action-box {
+    background-color: @add-widget-btn-color;
     width: 98%;
     padding: 43px;
     border: 1px solid @border-color;

http://git-wip-us.apache.org/repos/asf/ambari/blob/3081aec3/ambari-web/app/templates/main/service/info/summary.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/service/info/summary.hbs b/ambari-web/app/templates/main/service/info/summary.hbs
index 385465d..c142464 100644
--- a/ambari-web/app/templates/main/service/info/summary.hbs
+++ b/ambari-web/app/templates/main/service/info/summary.hbs
@@ -136,7 +136,7 @@
               {{#if isAmbariMetricsInstalled}}
                 <div class="span2p4">
                   <button id="add-widget-action-box"
-                          class="btn btn-default" {{action "goToWidgetsBrowser" controller.content target="controller"}}
+                          {{action "goToWidgetsBrowser" controller.content target="controller"}}
                           rel="add-widget-tooltip" {{translateAttr data-original-title="dashboard.widgets.addButton.tooltip"}}>
                     <i class="glyphicon glyphicon-plus"></i></button>
                 </div>


[04/47] ambari git commit: AMBARI-18940. Perf: Fix bugs in deploy-gce-perf-cluster.py to generate correct config file (alejandro)

Posted by jo...@apache.org.
AMBARI-18940. Perf: Fix bugs in deploy-gce-perf-cluster.py to generate correct config file (alejandro)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: 6e314a609791ff0f2adbe33b30f442bfcd23e530
Parents: be2628c
Author: Alejandro Fernandez <af...@hortonworks.com>
Authored: Fri Nov 18 12:26:39 2016 -0800
Committer: Alejandro Fernandez <af...@hortonworks.com>
Committed: Mon Nov 21 12:05:50 2016 -0800

----------------------------------------------------------------------
 contrib/utils/perf/deploy-gce-perf-cluster.py | 230 +++++++++++++--------
 1 file changed, 145 insertions(+), 85 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/6e314a60/contrib/utils/perf/deploy-gce-perf-cluster.py
----------------------------------------------------------------------
diff --git a/contrib/utils/perf/deploy-gce-perf-cluster.py b/contrib/utils/perf/deploy-gce-perf-cluster.py
index da45f8f..95ed98f 100644
--- a/contrib/utils/perf/deploy-gce-perf-cluster.py
+++ b/contrib/utils/perf/deploy-gce-perf-cluster.py
@@ -27,18 +27,20 @@ import traceback
 import re
 import socket
 
-cluster_name="perf-cluster"
-ambari_repo_file_url="http://s3.amazonaws.com/dev.hortonworks.com/ambari/centos6/2.x/latest/trunk/ambaribn.repo"
+cluster_prefix = "perf"
+ambari_repo_file_url = "http://s3.amazonaws.com/dev.hortonworks.com/ambari/centos6/2.x/latest/trunk/ambaribn.repo"
 
-public_hostname_script="foo"
-hostname_script="foo"
+public_hostname_script = "foo"
+hostname_script = "foo"
 
-start_number=1
-number_of_agents_on_host=50
+NUMBER_OF_AGENTS_ON_HOST = 50
 
 
 class SSH:
-  """ Ssh implementation of this """
+  """
+  Ssh implementation of this
+  """
+
   def __init__(self, user, sshkey_file, host, command, custom_option='', errorMessage = None):
     self.user = user
     self.sshkey_file = sshkey_file
@@ -46,8 +48,6 @@ class SSH:
     self.command = command
     self.errorMessage = errorMessage
     self.custom_option = custom_option
-    pass
-
 
   def run(self):
     sshcommand = ["ssh",
@@ -91,12 +91,15 @@ class SSH:
 
     print "SSH command execution finished"
 
-    return  {"exitstatus": sshstat.returncode, "log": log, "errormsg": errorMsg}
+    return {"exitstatus": sshstat.returncode, "log": log, "errormsg": errorMsg}
 
 
 class SCP:
-  """ SCP implementation that is thread based. The status can be returned using
-   status val """
+  """
+  SCP implementation that is thread based. The status can be returned using
+  status val
+  """
+
   def __init__(self, user, sshkey_file, host, inputFile, remote, errorMessage = None):
     self.user = user
     self.sshkey_file = sshkey_file
@@ -104,8 +107,6 @@ class SCP:
     self.inputFile = inputFile
     self.remote = remote
     self.errorMessage = errorMessage
-    pass
-
 
   def run(self):
     scpcommand = ["scp",
@@ -115,7 +116,6 @@ class SCP:
                   "-o", "StrictHostKeyChecking=no",
                   "-i", self.sshkey_file, self.inputFile, self.user + "@" +
                                                           self.host + ":" + self.remote]
-
     i = 1
     while True:
       try:
@@ -162,27 +162,33 @@ def main():
   parser.add_argument('--key', type=str,
                       action='store', help='Path to GCE ssh key.')
 
-  parser.add_argument('--cluster-prefix', type=str,
-                      action='store', help='Cluster name prefix.')
+  parser.add_argument('--cluster-suffix', type=str,
+                      action='store', help='Cluster name suffix.')
 
   parser.add_argument('--agent-prefix', type=str,
                       action='store', help='Agent name prefix.')
 
   parser.add_argument('--agents-count', type=int,
-                      action='store', help='Agents count for whole cluster(multiples of 50).')
+                      action='store', help='Agents count for whole cluster (multiples of 50).')
 
   if len(sys.argv) <= 1:
     parser.print_help()
-  else:
-    args = parser.parse_args()
-    do_work(args)
+    sys.exit(-1)
+
+  args = parser.parse_args()
+  do_work(args)
 
-# base method which process cluster deployment
 def deploy_cluster(args):
-  number_of_nodes=args.agents_count/number_of_agents_on_host
+  """
+  Process cluster deployment
+  :param args: Command line args.
+  """
+  # When dividing, need to get the ceil.
+  number_of_nodes = ((args.agents_count - 1) / NUMBER_OF_AGENTS_ON_HOST) + 1
+
   # trying to create cluster with needed params
-  print "Creating cluster {0}-{1} with {2} large nodes on centos6...".format(args.cluster_prefix, cluster_name, str(number_of_nodes))
-  execute_command(args, args.controller, "/usr/sbin/gce up {0}-{1} {2} --centos6 --large".format(args.cluster_prefix, cluster_name, str(number_of_nodes)),
+  print "Creating cluster {0}-{1} with {2} large nodes on centos6...".format(cluster_prefix, args.cluster_suffix, str(number_of_nodes))
+  execute_command(args, args.controller, "/usr/sbin/gce up {0}-{1} {2} --centos6 --large".format(cluster_prefix, args.cluster_suffix, str(number_of_nodes)),
                   "Failed to create cluster, probably not enough resources!", "-tt")
 
   # VMs are not accessible immediately
@@ -190,19 +196,20 @@ def deploy_cluster(args):
 
   # getting list of vms information like hostname and ip address
   print "Getting list of virtual machines from cluster..."
+  # Dictionary from host name to IP
   vms = get_vms_list(args)
 
   # check number of nodes in cluster to be the same as user asked
   print "Checking count of created nodes in cluster..."
   if not vms or len(vms) < number_of_nodes:
-    raise Exception("Can not bring up enough nodes. Requested {0}, but got: {1}. Probably not enough resources!".format(number_of_nodes, len(vms)))
+    raise Exception("Cannot bring up enough nodes. Requested {0}, but got {1}. Probably not enough resources!".format(number_of_nodes, len(vms)))
 
   print "GCE cluster was successfully created!"
   pretty_print_vms(vms)
 
   # installing/starting ambari-server and ambari-agents on each host
   server_host_name = sorted(vms.items())[0][0]
-  server_installed=False
+  server_installed = False
 
   print "Creating server.sh script (which will be executed on server to install/configure/start ambari-server and ambari-agent)..."
   create_server_script(args, server_host_name)
@@ -211,14 +218,33 @@ def deploy_cluster(args):
   create_agent_script(args, server_host_name)
 
   time.sleep(10)
+
+  # If the user asks for a number of agents that is not a multiple of 50, then only create how many are needed instead
+  # of 50 on every VM.
+  num_agents_left_to_create = args.agents_count
+
+  start_num = 1
   for (hostname, ip) in sorted(vms.items()):
+    num_agents_on_this_host = min(num_agents_left_to_create, NUMBER_OF_AGENTS_ON_HOST)
+
     print "=========================="
-    print "Working on {0}".format(hostname)
+    print "Working on VM {0} that will contain hosts %d - %d".format(hostname, start_num, start_num + num_agents_on_this_host - 1)
+
+    # The agent multiplier config will be different on each VM.
+
+    cmd_generate_multiplier_conf = "mkdir -p /etc/ambari-agent/conf/ ; printf \"start={0}\\nnum={1}\\nprefix={2}\" > /etc/ambari-agent/conf/agent-multiplier.conf".format(start_num, num_agents_on_this_host, args.agent_prefix)
+    start_num += num_agents_on_this_host
+    num_agents_left_to_create -= num_agents_on_this_host
+
     if not server_installed:
       remote_path = "/server.sh"
       local_path = "server.sh"
       print "Copying server.sh to {0}...".format(hostname)
       put_file(args, ip, local_path, remote_path, "Failed to copy file!")
+
+      print "Generating agent-multiplier.conf"
+      execute_command(args, ip, cmd_generate_multiplier_conf, "Failed to generate agent-multiplier.conf on host {0}".format(hostname))
+
       print "Executing remote ssh command (set correct permissions and start executing server.sh in separate process) on {0}...".format(hostname)
       execute_command(args, ip, "cd /; chmod 777 server.sh; nohup ./server.sh >/server.log 2>&1 &",
                     "Install/configure/start server script failed!")
@@ -228,6 +254,10 @@ def deploy_cluster(args):
       local_path = "agent.sh"
       print "Copying agent.sh to {0}...".format(hostname)
       put_file(args, ip, local_path, remote_path, "Failed to copy file!")
+
+      print "Generating agent-multiplier.conf"
+      execute_command(args, ip, cmd_generate_multiplier_conf, "Failed to generate agent-multiplier.conf on host {0}".format(hostname))
+
       print "Executing remote ssh command (set correct permissions and start executing agent.sh in separate process) on {0}...".format(hostname)
       execute_command(args, ip, "cd /; chmod 777 agent.sh; nohup ./agent.sh >/agent.log 2>&1 &",
                     "Install/configure start agent script failed!")
@@ -235,75 +265,90 @@ def deploy_cluster(args):
   print "All scripts where successfully copied and started on all hosts. " \
         "\nPay attention that server.sh script need 5 minutes to finish and agent.sh need 3 minutes!"
 
-# check if all required params were passed by user
-# if all needed params available then start cluster deploy
+
 def do_work(args):
+  """
+  Check that all required args are passed in. If so, deploy the cluster.
+  :param args: Command line args
+  """
   if not args.controller:
-    raise Failure("GCE controller ip address not defined!")
+    raise Exception("GCE controller ip address is not defined!")
 
   if not args.key:
-    raise Failure("Path to gce ssh key not defined!")
+    raise Exception("Path to gce ssh key is not defined!")
 
-  if not args.cluster_prefix:
-    raise Failure("Cluster name prefix not defined!")
+  if not args.cluster_suffix:
+    raise Exception("Cluster name suffix is not defined!")
 
   if not args.agent_prefix:
-    raise Failure("Agent name prefix not defined!")
+    raise Exception("Agent name prefix is not defined!")
 
   if not args.agents_count:
-    raise Failure("Agents count for whole cluster(multiples of 50) not defined!")
+    raise Exception("Agents count for whole cluster is not defined (will put 50 Agents per VM)!")
 
   deploy_cluster(args)
 
-# creating server.sh script in the same dir where current script is located
-# server.sh script will install, configure and start ambari-server and ambari-agent on host
-def create_server_script(args, server_host_name):
-  file = open("server.sh", "w")
-
-  file.write("#!/bin/bash\n")
-
-  file.write("wget -O /etc/yum.repos.d/ambari.repo {0}\n".format(ambari_repo_file_url))
-  file.write("yum clean all; yum install git ambari-server ambari-agent -y\n")
-  file.write("cd /home; git clone https://github.com/apache/ambari.git\n")
-
-  file.write("cp -r /home/ambari/ambari-server/src/main/resources/stacks/PERF /var/lib/ambari-server/resources/stacks/PERF\n")
-  file.write("cp -r /home/ambari/ambari-server/src/main/resources/stacks/PERF /var/lib/ambari-agent/cache/stacks/PERF\n")
-
-  file.write("ambari-server setup -s\n")
-  file.write("sed -i -e 's/false/true/g' /var/lib/ambari-server/resources/stacks/PERF/1.0/metainfo.xml\n")
-  file.write("ambari-server start --skip-database-check\n")
 
-  file.write("sed -i -e 's/hostname=localhost/hostname={0}/g' /etc/ambari-agent/conf/ambari-agent.ini\n".format(server_host_name))
-  file.write("sed -i -e 's/agent]/agent]\\nhostname_script={0}\\npublic_hostname_script={1}\\n/1' /etc/ambari-agent/conf/ambari-agent.ini\n".format(hostname_script, public_hostname_script))
-  file.write("printf \"start={0}\\nnum={1}\\nprefix={2}\" > /etc/ambari-agent/conf/agent-multiplier.conf\n".format(start_number, number_of_agents_on_host, args.agent_prefix))
-  file.write("python /home/ambari/ambari-agent/conf/unix/agent-multiplier.py start\n")
-
-  file.write("exit 0")
+def create_server_script(args, server_host_name):
+  """
+  Creating server.sh script in the same dir where current script is located
+  server.sh script will install, configure and start ambari-server and ambari-agent on host
+  :param args: Command line args
+  :param server_host_name: Server host name
+  """
+
+  contents = "#!/bin/bash\n" + \
+  "wget -O /etc/yum.repos.d/ambari.repo {0}\n".format(ambari_repo_file_url) + \
+  "yum clean all; yum install git ambari-server ambari-agent -y\n" + \
+  "cd /home; git clone https://github.com/apache/ambari.git\n" + \
+  "cp -r /home/ambari/ambari-server/src/main/resources/stacks/PERF /var/lib/ambari-server/resources/stacks/PERF\n" + \
+  "cp -r /home/ambari/ambari-server/src/main/resources/stacks/PERF /var/lib/ambari-agent/cache/stacks/PERF\n" + \
+  "ambari-server setup -s\n" + \
+  "sed -i -e 's/false/true/g' /var/lib/ambari-server/resources/stacks/PERF/1.0/metainfo.xml\n" + \
+  "ambari-server start --skip-database-check\n" + \
+  "sed -i -e 's/hostname=localhost/hostname={0}/g' /etc/ambari-agent/conf/ambari-agent.ini\n".format(server_host_name) + \
+  "sed -i -e 's/agent]/agent]\\nhostname_script={0}\\npublic_hostname_script={1}\\n/1' /etc/ambari-agent/conf/ambari-agent.ini\n".format(hostname_script, public_hostname_script) + \
+  "python /home/ambari/ambari-agent/conf/unix/agent-multiplier.py start\n" + \
+  "exit 0"
+
+  with open("server.sh", "w") as f:
+    f.write(contents)
 
-  file.close()
 
-# creating agent.sh script in the same dir where current script is located
-# agent.sh script will install, configure and start ambari-agent on host
 def create_agent_script(args, server_host_name):
-  file = open("agent.sh", "w")
-
-  file.write("#!/bin/bash\n")
-
-  file.write("wget -O /etc/yum.repos.d/ambari.repo {0}\n".format(ambari_repo_file_url))
-  file.write("yum clean all; yum install git ambari-agent -y\n")
-  file.write("cd /home; git clone https://github.com/apache/ambari.git\n")
-  file.write("cp -r /home/ambari/ambari-server/src/main/resources/stacks/PERF /var/lib/ambari-agent/cache/stacks/PERF\n")
+  """
+  Creating agent.sh script in the same dir where current script is located
+  agent.sh script will install, configure and start ambari-agent on host
+  :param args: Command line args
+  :param server_host_name: Server host name
+  """
+
+  # TODO, instead of cloning Ambari repo on each VM, do it on the server once and distribute to all of the agents.
+  contents = "#!/bin/bash\n" + \
+  "wget -O /etc/yum.repos.d/ambari.repo {0}\n".format(ambari_repo_file_url) + \
+  "yum clean all; yum install git ambari-agent -y\n" + \
+  "cd /home; git clone https://github.com/apache/ambari.git\n" + \
+  "cp -r /home/ambari/ambari-server/src/main/resources/stacks/PERF /var/lib/ambari-agent/cache/stacks/PERF\n" + \
+  "sed -i -e 's/hostname=localhost/hostname={0}/g' /etc/ambari-agent/conf/ambari-agent.ini\n".format(server_host_name) + \
+  "sed -i -e 's/agent]/agent]\\nhostname_script={0}\\npublic_hostname_script={1}\\n/1' /etc/ambari-agent/conf/ambari-agent.ini\n".format(hostname_script, public_hostname_script) + \
+  "python /home/ambari/ambari-agent/conf/unix/agent-multiplier.py start\n" + \
+  "exit 0"
+
+  with open("agent.sh", "w") as f:
+    f.write(contents)
 
-  file.write("sed -i -e 's/hostname=localhost/hostname={0}/g' /etc/ambari-agent/conf/ambari-agent.ini\n".format(server_host_name))
-  file.write("sed -i -e 's/agent]/agent]\\nhostname_script={0}\\npublic_hostname_script={1}\\n/1' /etc/ambari-agent/conf/ambari-agent.ini\n".format(hostname_script, public_hostname_script))
-  file.write("printf \"start={0}\\nnum={1}\\nprefix={2}\" > /etc/ambari-agent/conf/agent-multiplier.conf\n".format(start_number, number_of_agents_on_host, args.agent_prefix))
-  file.write("python /home/ambari/ambari-agent/conf/unix/agent-multiplier.py start\n")
-  file.write("exit 0")
 
-  file.close()
-
-# method to execute ssh commands via SSH class
 def execute_command(args, ip, cmd, fail_message, custom_option='', login='root'):
+  """
+  Method to execute ssh commands via SSH class
+  :param args: Command line args
+  :param ip: IP to ssh to
+  :param cmd: Command to execute
+  :param fail_message: In case of an error, what to report
+  :param custom_option: Custom flags
+  :param login: Login user
+  :return: Return execute log message
+  """
   ssh = SSH(login, args.key, ip, cmd, custom_option, fail_message)
   ssh_result = ssh.run()
   status_code = ssh_result["exitstatus"]
@@ -312,8 +357,18 @@ def execute_command(args, ip, cmd, fail_message, custom_option='', login='root')
 
   return ssh_result["log"][0]
 
-# method to copy file from local to remote host via SCP class
+
 def put_file(args, ip, local_file, remote_file, fail_message, login='root'):
+  """
+  Method to copy file from local to remote host via SCP class
+  :param args: Command line args
+  :param ip: IP to ssh to
+  :param local_file: Path to local file
+  :param remote_file: Path to remote file
+  :param fail_message: In case of an error, what to report
+  :param login: Login user.
+  :return: Return copy log message
+  """
   scp = SCP(login, args.key, ip, local_file,
             remote_file, fail_message)
   scp_result = scp.run()
@@ -323,10 +378,15 @@ def put_file(args, ip, local_file, remote_file, fail_message, login='root'):
 
   return scp_result["log"][0]
 
-# method to parse "gce fqdn {cluster-name}" command output and get hosts and ips pairs for every host in cluster
+
 def get_vms_list(args):
-  gce_fqdb_cmd = '/usr/sbin/gce fqdn {0}-{1}'.format(
-    args.cluster_prefix, cluster_name)
+  """
+  Method to parse "gce fqdn {cluster-name}" command output and get hosts and ips pairs for every host in cluster
+  :param args: Command line args
+  :return: Mapping of VM host name to ip.
+  """
+
+  gce_fqdb_cmd = '/usr/sbin/gce fqdn {0}-{1}'.format(cluster_prefix, args.cluster_suffix)
   out = execute_command(args, args.controller, gce_fqdb_cmd, "Failed to get VMs list!", "-tt")
   lines = out.split('\n')
   #print "LINES=" + str(lines)
@@ -339,15 +399,15 @@ def get_vms_list(args):
       if match:
         result[match.group(2)] = match.group(1)
       else:
-        raise Exception('Can not parse "{0}"'.format(s))
+        raise Exception('Cannot parse "{0}"'.format(s))
     return result
   else:
-    raise Exception('Can not parse "{0}"'.format(lines))
+    raise Exception('Cannot parse "{0}"'.format(lines))
 
 
 def pretty_print_vms(vms):
   print "----------------------------"
-  print "server ip: {0}".format(sorted(vms.items())[0][1])
+  print "Server IP: {0}".format(sorted(vms.items())[0][1])
   print "Hostnames of nodes in cluster:"
   for (hostname, ip) in sorted(vms.items()):
     print hostname


[15/47] ambari git commit: AMBARI-18826. Stack property definitions made in ambari-web should be made stack agnostic (akovalenko)

Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/services/storm_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/services/storm_properties.js b/ambari-web/app/data/configs/services/storm_properties.js
new file mode 100644
index 0000000..386bbe6
--- /dev/null
+++ b/ambari-web/app/data/configs/services/storm_properties.js
@@ -0,0 +1,296 @@
+/**
+ * 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.
+ */
+
+module.exports = [
+  {
+    "category": "General",
+    "filename": "storm-site.xml",
+    "name": "storm.zookeeper.root",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "General",
+    "filename": "storm-site.xml",
+    "name": "storm.local.dir",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "General",
+    "filename": "storm-site.xml",
+    "name": "storm.zookeeper.servers",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "General",
+    "filename": "storm-site.xml",
+    "name": "storm.zookeeper.port",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "General",
+    "filename": "storm-site.xml",
+    "name": "storm.zookeeper.session.timeout",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "General",
+    "filename": "storm-site.xml",
+    "name": "storm.zookeeper.connection.timeout",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "General",
+    "filename": "storm-site.xml",
+    "name": "storm.zookeeper.retry.times",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "General",
+    "filename": "storm-site.xml",
+    "name": "storm.zookeeper.retry.interval",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "General",
+    "filename": "storm-site.xml",
+    "name": "storm.zookeeper.retry.intervalceiling.millis",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "General",
+    "filename": "storm-site.xml",
+    "name": "storm.cluster.mode",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "General",
+    "filename": "storm-site.xml",
+    "name": "storm.local.mode.zmq",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "General",
+    "filename": "storm-site.xml",
+    "name": "storm.messaging.transport",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "General",
+    "filename": "storm-site.xml",
+    "name": "storm.messaging.netty.buffer_size",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "General",
+    "filename": "storm-site.xml",
+    "name": "storm.messaging.netty.max_retries",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "General",
+    "filename": "storm-site.xml",
+    "name": "storm.messaging.netty.max_wait_ms",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "General",
+    "filename": "storm-site.xml",
+    "name": "storm.messaging.netty.min_wait_ms",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "General",
+    "filename": "storm-site.xml",
+    "name": "storm.messaging.netty.server_worker_threads",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "General",
+    "filename": "storm-site.xml",
+    "name": "storm.messaging.netty.client_worker_threads",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "NIMBUS",
+    "filename": "storm-site.xml",
+    "name": "nimbus.thrift.port",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "NIMBUS",
+    "filename": "storm-site.xml",
+    "name": "nimbus.thrift.max_buffer_size",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "NIMBUS",
+    "filename": "storm-site.xml",
+    "name": "nimbus.childopts",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "NIMBUS",
+    "filename": "storm-site.xml",
+    "name": "nimbus.task.timeout.secs",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "NIMBUS",
+    "filename": "storm-site.xml",
+    "name": "nimbus.supervisor.timeout.secs",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "NIMBUS",
+    "filename": "storm-site.xml",
+    "name": "nimbus.monitor.freq.secs",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "NIMBUS",
+    "filename": "storm-site.xml",
+    "name": "nimbus.cleanup.inbox.freq.secs",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "NIMBUS",
+    "filename": "storm-site.xml",
+    "name": "nimbus.inbox.jar.expiration.secs",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "NIMBUS",
+    "filename": "storm-site.xml",
+    "name": "nimbus.task.launch.secs",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "NIMBUS",
+    "filename": "storm-site.xml",
+    "name": "nimbus.reassign",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "NIMBUS",
+    "filename": "storm-site.xml",
+    "name": "nimbus.file.copy.expiration.secs",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "NIMBUS",
+    "filename": "storm-site.xml",
+    "name": "nimbus.topology.validator",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "SUPERVISOR",
+    "filename": "storm-site.xml",
+    "name": "supervisor.slots.ports",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "SUPERVISOR",
+    "filename": "storm-site.xml",
+    "name": "supervisor.childopts",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "SUPERVISOR",
+    "filename": "storm-site.xml",
+    "name": "supervisor.worker.start.timeout.secs",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "SUPERVISOR",
+    "filename": "storm-site.xml",
+    "name": "supervisor.worker.timeout.secs",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "SUPERVISOR",
+    "filename": "storm-site.xml",
+    "name": "supervisor.monitor.frequency.secs",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "SUPERVISOR",
+    "filename": "storm-site.xml",
+    "name": "supervisor.heartbeat.frequency.secs",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "DRPC_SERVER",
+    "filename": "storm-site.xml",
+    "name": "drpc.port",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "DRPC_SERVER",
+    "filename": "storm-site.xml",
+    "name": "drpc.worker.threads",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "DRPC_SERVER",
+    "filename": "storm-site.xml",
+    "name": "drpc.queue.size",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "DRPC_SERVER",
+    "filename": "storm-site.xml",
+    "name": "drpc.invocations.port",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "DRPC_SERVER",
+    "filename": "storm-site.xml",
+    "name": "drpc.request.timeout.secs",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "DRPC_SERVER",
+    "filename": "storm-site.xml",
+    "name": "drpc.childopts",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "STORM_UI_SERVER",
+    "filename": "storm-site.xml",
+    "name": "ui.port",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "STORM_UI_SERVER",
+    "filename": "storm-site.xml",
+    "name": "ui.childopts",
+    "serviceName": "STORM"
+  },
+  {
+    "filename": "ranger-storm-plugin-properties.xml",
+    "index": 1,
+    "name": "ranger-storm-plugin-enabled",
+    "serviceName": "STORM"
+  },
+  {
+    "category": "NIMBUS",
+    "filename": "storm-site.xml",
+    "name": "nimbus.seeds",
+    "serviceName": "STORM"
+  }
+];
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/services/tez_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/services/tez_properties.js b/ambari-web/app/data/configs/services/tez_properties.js
new file mode 100644
index 0000000..f8bb60c
--- /dev/null
+++ b/ambari-web/app/data/configs/services/tez_properties.js
@@ -0,0 +1,92 @@
+/**
+ * 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.
+ */
+
+module.exports = [
+  {
+    "category": "General",
+    "filename": "tez-site.xml",
+    "name": "tez.am.resource.memory.mb",
+    "serviceName": "TEZ"
+  },
+  {
+    "category": "General",
+    "filename": "tez-site.xml",
+    "name": "tez.am.log.level",
+    "serviceName": "TEZ"
+  },
+  {
+    "category": "General",
+    "filename": "tez-site.xml",
+    "name": "tez.am.launch.cmd-opts",
+    "serviceName": "TEZ"
+  },
+  {
+    "category": "General",
+    "filename": "tez-site.xml",
+    "name": "tez.am.launch.env",
+    "serviceName": "TEZ"
+  },
+  {
+    "category": "General",
+    "filename": "tez-site.xml",
+    "name": "tez.task.resource.memory.mb",
+    "serviceName": "TEZ"
+  },
+  {
+    "category": "General",
+    "filename": "tez-site.xml",
+    "name": "tez.task.launch.cmd-opts",
+    "serviceName": "TEZ"
+  },
+  {
+    "category": "General",
+    "filename": "tez-site.xml",
+    "name": "tez.task.launch.env",
+    "serviceName": "TEZ"
+  },
+  {
+    "category": "General",
+    "filename": "tez-site.xml",
+    "name": "tez.grouping.split-waves",
+    "serviceName": "TEZ"
+  },
+  {
+    "category": "General",
+    "filename": "tez-site.xml",
+    "name": "tez.grouping.min-size",
+    "serviceName": "TEZ"
+  },
+  {
+    "category": "General",
+    "filename": "tez-site.xml",
+    "name": "tez.grouping.max-size",
+    "serviceName": "TEZ"
+  },
+  {
+    "category": "General",
+    "filename": "tez-site.xml",
+    "name": "tez.runtime.compress",
+    "serviceName": "TEZ"
+  },
+  {
+    "category": "General",
+    "filename": "tez-site.xml",
+    "name": "tez.runtime.compress.codec",
+    "serviceName": "TEZ"
+  }
+];
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/services/yarn_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/services/yarn_properties.js b/ambari-web/app/data/configs/services/yarn_properties.js
new file mode 100644
index 0000000..3d7ac6d
--- /dev/null
+++ b/ambari-web/app/data/configs/services/yarn_properties.js
@@ -0,0 +1,300 @@
+/**
+ * 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.
+ */
+
+module.exports = [
+  {
+    "category": "RESOURCEMANAGER",
+    "filename": "yarn-site.xml",
+    "name": "yarn.acl.enable",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "RESOURCEMANAGER",
+    "filename": "yarn-site.xml",
+    "name": "yarn.admin.acl",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "RESOURCEMANAGER",
+    "filename": "yarn-site.xml",
+    "name": "yarn.log-aggregation-enable",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "CapacityScheduler",
+    "filename": "yarn-site.xml",
+    "name": "yarn.resourcemanager.scheduler.class",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "CapacityScheduler",
+    "filename": "yarn-site.xml",
+    "name": "yarn.scheduler.minimum-allocation-mb",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "CapacityScheduler",
+    "filename": "yarn-site.xml",
+    "name": "yarn.scheduler.maximum-allocation-mb",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "NODEMANAGER",
+    "filename": "yarn-site.xml",
+    "name": "yarn.nodemanager.resource.memory-mb",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "NODEMANAGER",
+    "filename": "yarn-site.xml",
+    "name": "yarn.nodemanager.vmem-pmem-ratio",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "Isolation",
+    "filename": "yarn-site.xml",
+    "name": "yarn.nodemanager.linux-container-executor.group",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "NODEMANAGER",
+    "filename": "yarn-site.xml",
+    "name": "yarn.nodemanager.log-dirs",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "NODEMANAGER",
+    "filename": "yarn-site.xml",
+    "name": "yarn.nodemanager.local-dirs",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "NODEMANAGER",
+    "filename": "yarn-site.xml",
+    "name": "yarn.nodemanager.remote-app-log-dir",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "NODEMANAGER",
+    "filename": "yarn-site.xml",
+    "name": "yarn.nodemanager.remote-app-log-dir-suffix",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "NODEMANAGER",
+    "filename": "yarn-site.xml",
+    "name": "yarn.nodemanager.aux-services",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "NODEMANAGER",
+    "filename": "yarn-site.xml",
+    "name": "yarn.nodemanager.log.retain-second",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "General",
+    "filename": "yarn-env.xml",
+    "index": 0,
+    "name": "yarn_heapsize",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "RESOURCEMANAGER",
+    "filename": "yarn-env.xml",
+    "index": 1,
+    "name": "resourcemanager_heapsize",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "NODEMANAGER",
+    "filename": "yarn-env.xml",
+    "index": 1,
+    "name": "nodemanager_heapsize",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "APP_TIMELINE_SERVER",
+    "filename": "yarn-env.xml",
+    "index": 1,
+    "name": "apptimelineserver_heapsize",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "APP_TIMELINE_SERVER",
+    "filename": "yarn-site.xml",
+    "name": "yarn.timeline-service.enabled",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "APP_TIMELINE_SERVER",
+    "filename": "yarn-site.xml",
+    "name": "yarn.timeline-service.leveldb-timeline-store.path",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "APP_TIMELINE_SERVER",
+    "filename": "yarn-site.xml",
+    "name": "yarn.timeline-service.leveldb-timeline-store.ttl-interval-ms",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "APP_TIMELINE_SERVER",
+    "filename": "yarn-site.xml",
+    "name": "yarn.timeline-service.store-class",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "APP_TIMELINE_SERVER",
+    "filename": "yarn-site.xml",
+    "name": "yarn.timeline-service.ttl-enable",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "APP_TIMELINE_SERVER",
+    "filename": "yarn-site.xml",
+    "name": "yarn.timeline-service.ttl-ms",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "APP_TIMELINE_SERVER",
+    "filename": "yarn-site.xml",
+    "name": "yarn.timeline-service.generic-application-history.store-class",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "APP_TIMELINE_SERVER",
+    "filename": "yarn-site.xml",
+    "name": "yarn.timeline-service.webapp.address",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "APP_TIMELINE_SERVER",
+    "filename": "yarn-site.xml",
+    "name": "yarn.timeline-service.webapp.https.address",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "APP_TIMELINE_SERVER",
+    "filename": "yarn-site.xml",
+    "name": "yarn.timeline-service.address",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "APP_TIMELINE_SERVER",
+    "filename": "yarn-site.xml",
+    "name": "yarn.timeline-service.leveldb-state-store.path",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "APP_TIMELINE_SERVER",
+    "filename": "yarn-site.xml",
+    "name": "yarn.timeline-service.state-store-class",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "FaultTolerance",
+    "filename": "yarn-site.xml",
+    "name": "yarn.nodemanager.recovery.enabled",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "FaultTolerance",
+    "filename": "yarn-site.xml",
+    "name": "yarn.resourcemanager.recovery.enabled",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "FaultTolerance",
+    "filename": "yarn-site.xml",
+    "name": "yarn.resourcemanager.work-preserving-recovery.enabled",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "FaultTolerance",
+    "filename": "yarn-site.xml",
+    "name": "yarn.resourcemanager.zk-address",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "FaultTolerance",
+    "filename": "yarn-site.xml",
+    "name": "yarn.resourcemanager.connect.retry-interval.ms",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "FaultTolerance",
+    "filename": "yarn-site.xml",
+    "name": "yarn.resourcemanager.connect.max-wait.ms",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "FaultTolerance",
+    "filename": "yarn-site.xml",
+    "name": "yarn.resourcemanager.ha.enabled",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "Isolation",
+    "filename": "yarn-site.xml",
+    "name": "yarn.nodemanager.container-executor.class",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "Isolation",
+    "filename": "yarn-site.xml",
+    "name": "yarn.nodemanager.linux-container-executor.resources-handler.class",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "Isolation",
+    "filename": "yarn-site.xml",
+    "name": "yarn.nodemanager.linux-container-executor.cgroups.hierarchy",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "Isolation",
+    "filename": "yarn-site.xml",
+    "name": "yarn.nodemanager.linux-container-executor.cgroups.mount",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "Isolation",
+    "filename": "yarn-site.xml",
+    "name": "yarn.nodemanager.linux-container-executor.cgroups.strict-resource-usage",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "CapacityScheduler",
+    "filename": "yarn-site.xml",
+    "name": "yarn.nodemanager.resource.cpu-vcores",
+    "serviceName": "YARN"
+  },
+  {
+    "category": "CapacityScheduler",
+    "filename": "yarn-site.xml",
+    "name": "yarn.nodemanager.resource.percentage-physical-cpu-limit",
+    "serviceName": "YARN"
+  },
+  {
+    "filename": "ranger-yarn-plugin-properties.xml",
+    "index": 1,
+    "name": "ranger-yarn-plugin-enabled",
+    "serviceName": "YARN"
+  }
+];
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/services/zookeeper_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/services/zookeeper_properties.js b/ambari-web/app/data/configs/services/zookeeper_properties.js
new file mode 100644
index 0000000..812450e
--- /dev/null
+++ b/ambari-web/app/data/configs/services/zookeeper_properties.js
@@ -0,0 +1,67 @@
+/**
+ * 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.
+ */
+
+module.exports = [
+  {
+    "category": "ZOOKEEPER_SERVER",
+    "filename": "zoo.cfg.xml",
+    "index": 1,
+    "name": "dataDir",
+    "serviceName": "ZOOKEEPER"
+  },
+  {
+    "category": "ZOOKEEPER_SERVER",
+    "filename": "zoo.cfg.xml",
+    "index": 2,
+    "name": "tickTime",
+    "serviceName": "ZOOKEEPER"
+  },
+  {
+    "category": "ZOOKEEPER_SERVER",
+    "filename": "zoo.cfg.xml",
+    "index": 3,
+    "name": "initLimit",
+    "serviceName": "ZOOKEEPER"
+  },
+  {
+    "category": "ZOOKEEPER_SERVER",
+    "filename": "zoo.cfg.xml",
+    "index": 4,
+    "name": "syncLimit",
+    "serviceName": "ZOOKEEPER"
+  },
+  {
+    "category": "ZOOKEEPER_SERVER",
+    "filename": "zoo.cfg.xml",
+    "index": 5,
+    "name": "clientPort",
+    "serviceName": "ZOOKEEPER"
+  },
+  {
+    "filename": "zookeeper-env.xml",
+    "index": 0,
+    "name": "zk_log_dir",
+    "serviceName": "ZOOKEEPER"
+  },
+  {
+    "filename": "zookeeper-env.xml",
+    "index": 1,
+    "name": "zk_pid_dir",
+    "serviceName": "ZOOKEEPER"
+  }
+];
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/site_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/site_properties.js b/ambari-web/app/data/configs/site_properties.js
new file mode 100644
index 0000000..2fd4ac4
--- /dev/null
+++ b/ambari-web/app/data/configs/site_properties.js
@@ -0,0 +1,55 @@
+/**
+* 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.
+*/
+
+/**
+ * Returns list of config properties
+ * @param {string[]} serviceNames list of service names
+ * @return {object[]}
+ */
+var includeSiteProperties = function() {
+  var serviceNames = Array.prototype.slice.call(arguments);
+  return serviceNames.reduce(function(acc, serviceName) {
+    return acc.concat(require('data/configs/services/' + serviceName + '_properties'));
+  }, []);
+};
+
+module.exports = {
+  configProperties: includeSiteProperties(
+    'accumulo',
+    'ambari_infra',
+    'ambari_metrics',
+    'falcon',
+    'flume',
+    'glusterfs',
+    'hawq',
+    'hbase',
+    'hdfs',
+    'hive',
+    'kafka',
+    'kerberos',
+    'knox',
+    'logsearch',
+    'mapreduce2',
+    'oozie',
+    'ranger',
+    'storm',
+    'tez',
+    'yarn',
+    'zookeeper'
+  )
+};

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/ui_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/ui_properties.js b/ambari-web/app/data/configs/ui_properties.js
new file mode 100644
index 0000000..8d731d9
--- /dev/null
+++ b/ambari-web/app/data/configs/ui_properties.js
@@ -0,0 +1,49 @@
+/**
+ * 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.
+ */
+
+module.exports = [
+  {
+    "name": "admin_principal",
+    "displayName": "Admin principal",
+    "description": "Admin principal used to create principals and export key tabs (e.g. admin/admin@EXAMPLE.COM).",
+    "isRequiredByAgent": false,
+    "serviceName": "KERBEROS",
+    "filename": "krb5-conf.xml",
+    "category": "Kadmin",
+    "index": 1
+  },
+  {
+    "name": "admin_password",
+    "displayName": "Admin password",
+    "displayType": "password",
+    "isRequiredByAgent": false,
+    "serviceName": "KERBEROS",
+    "filename": "krb5-conf.xml",
+    "category": "Kadmin",
+    "index": 2
+  },
+  {
+    "name": "dfs.ha.fencing.methods",
+    "displayName": "dfs.ha.fencing.methods",
+    "serviceName": "HDFS",
+    "filename": "hdfs-site.xml",
+    "category": "Advanced hdfs-site",
+    "displayType": "multiLine",
+    "index": 1
+  }
+];

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/wizards/ha_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/wizards/ha_properties.js b/ambari-web/app/data/configs/wizards/ha_properties.js
new file mode 100644
index 0000000..0275371
--- /dev/null
+++ b/ambari-web/app/data/configs/wizards/ha_properties.js
@@ -0,0 +1,538 @@
+/**
+ * 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.
+ */
+
+module.exports =
+{
+  "haConfig": {
+    serviceName: 'MISC',
+    displayName: 'MISC',
+    configCategories: [
+      App.ServiceConfigCategory.create({ name: 'HDFS', displayName: 'HDFS'}),
+      App.ServiceConfigCategory.create({ name: 'HBASE', displayName: 'HBase'}),
+      App.ServiceConfigCategory.create({ name: 'ACCUMULO', displayName: 'Accumulo'}),
+      App.ServiceConfigCategory.create({ name: 'AMBARI_METRICS', displayName: 'Ambari Metrics'}),
+      App.ServiceConfigCategory.create({ name: 'HAWQ', displayName: 'HAWQ'}), 
+      App.ServiceConfigCategory.create({ name: 'RANGER', displayName: 'Ranger'})
+    ],
+    sites: ['core-site', 'hdfs-site', 'hbase-site', 'accumulo-site', 'ams-hbase-site', 'hawq-site', 'hdfs-client', 'ranger-env', 'ranger-knox-plugin-properties', 'ranger-kms-audit', 'ranger-storm-plugin-properties', 'ranger-hbase-plugin-properties', 'ranger-hdfs-plugin-properties', 'ranger-hive-plugin-properties', 'ranger-kafka-audit', 'ranger-knox-audit', 'ranger-hdfs-audit', 'ranger-hive-audit', 'ranger-atlas-audit', 'ranger-storm-audit', 'ranger-hbase-audit', 'ranger-yarn-audit'],
+    configs: [
+    /**********************************************HDFS***************************************/
+      {
+        "name": "dfs.journalnode.edits.dir",
+        "displayName": "dfs.journalnode.edits.dir",
+        "description": "The Directory where the JournalNode will store its local state.",
+        "isReconfigurable": true,
+        "recommendedValue": "/hadoop/hdfs/journal",
+        "value": "/hadoop/hdfs/journal",
+        "displayType": "directory",
+        "category": "HDFS",
+        "filename": "hdfs-site",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "fs.defaultFS",
+        "displayName": "fs.defaultFS",
+        "description": "The default path prefix used by the Hadoop FS client when none is given.",
+        "recommendedValue": "hdfs://haCluster",
+        "isReconfigurable": false,
+        "value": "hdfs://haCluster",
+        "category": "HDFS",
+        "filename": "core-site",
+        serviceName: 'MISC'
+      },
+      {
+        "name": "ha.zookeeper.quorum",
+        "displayName": "ha.zookeeper.quorum",
+        "isReconfigurable": false,
+        "description": "This lists the host-port pairs running the ZooKeeper service.",
+        "recommendedValue": "zk1.example.com:2181,zk2.example.com:2181,zk3.example.com:2181",
+        "value": "zk1.example.com:2181,zk2.example.com:2181,zk3.example.com:2181",
+        "category": "HDFS",
+        "filename": "core-site",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "dfs.nameservices",
+        "displayName": "dfs.nameservices",
+        "description": "Comma-separated list of nameservices.",
+        "isReconfigurable": false,
+        "recommendedValue": "haCluster",
+        "value": "haCluster",
+        "category": "HDFS",
+        "filename": "hdfs-site",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "dfs.internal.nameservices",
+        "displayName": "dfs.internal.nameservices",
+        "description": "Comma-separated list of nameservices.",
+        "isReconfigurable": false,
+        "recommendedValue": "haCluster",
+        "value": "haCluster",
+        "category": "HDFS",
+        "filename": "hdfs-site",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "dfs.ha.namenodes.${dfs.nameservices}",
+        "displayName": "dfs.ha.namenodes.${dfs.nameservices}",
+        "description": "The prefix for a given nameservice, contains a comma-separated list of namenodes for a given nameservice.",
+        "isReconfigurable": false,
+        "recommendedValue": "nn1,nn2",
+        "value": "nn1,nn2",
+        "category": "HDFS",
+        "filename": "hdfs-site",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "dfs.namenode.rpc-address.${dfs.nameservices}.nn1",
+        "displayName": "dfs.namenode.rpc-address.${dfs.nameservices}.nn1",
+        "description": "RPC address that handles all clients requests for nn1.",
+        "isReconfigurable": false,
+        "recommendedValue": "0.0.0.0:8020",
+        "value": "0.0.0.0:8020",
+        "category": "HDFS",
+        "filename": "hdfs-site",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "dfs.namenode.rpc-address.${dfs.nameservices}.nn2",
+        "displayName": "dfs.namenode.rpc-address.${dfs.nameservices}.nn2",
+        "description": "RPC address that handles all clients requests for nn2.",
+        "isReconfigurable": false,
+        "recommendedValue": "0.0.0.0:8020",
+        "value": "0.0.0.0:8020",
+        "category": "HDFS",
+        "filename": "hdfs-site",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "dfs.namenode.http-address.${dfs.nameservices}.nn1",
+        "displayName": "dfs.namenode.http-address.${dfs.nameservices}.nn1",
+        "description": "The fully-qualified HTTP address for nn1 NameNode.",
+        "isReconfigurable": false,
+        "recommendedValue": "0.0.0.0:50070",
+        "value": "0.0.0.0:50070",
+        "category": "HDFS",
+        "filename": "hdfs-site",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "dfs.namenode.http-address.${dfs.nameservices}.nn2",
+        "displayName": "dfs.namenode.http-address.${dfs.nameservices}.nn2",
+        "description": "The fully-qualified HTTP address for nn2 NameNode.",
+        "isReconfigurable": false,
+        "recommendedValue": "0.0.0.0:50070",
+        "value": "0.0.0.0:50070",
+        "category": "HDFS",
+        "filename": "hdfs-site",
+        serviceName: 'MISC'
+      },
+      {
+        "name": "dfs.namenode.https-address.${dfs.nameservices}.nn1",
+        "displayName": "dfs.namenode.https-address.${dfs.nameservices}.nn1",
+        "description": "The fully-qualified HTTP address for nn1 NameNode.",
+        "isReconfigurable": false,
+        "recommendedValue": "0.0.0.0:50470",
+        "value": "0.0.0.0:50470",
+        "category": "HDFS",
+        "filename": "hdfs-site",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "dfs.namenode.https-address.${dfs.nameservices}.nn2",
+        "displayName": "dfs.namenode.https-address.${dfs.nameservices}.nn2",
+        "description": "The fully-qualified HTTP address for nn2 NameNode.",
+        "isReconfigurable": false,
+        "recommendedValue": "0.0.0.0:50470",
+        "value": "0.0.0.0:50470",
+        "category": "HDFS",
+        "filename": "hdfs-site",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "dfs.client.failover.proxy.provider.${dfs.nameservices}",
+        "displayName": "dfs.client.failover.proxy.provider.${dfs.nameservices}",
+        "description": "The Java class that HDFS clients use to contact the Active NameNode.",
+        "recommendedValue": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider",
+        "isReconfigurable": false,
+        "value": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider",
+        "category": "HDFS",
+        "filename": "hdfs-site",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "dfs.namenode.shared.edits.dir",
+        "displayName": "dfs.namenode.shared.edits.dir",
+        "description": " The URI which identifies the group of JNs where the NameNodes will write/read edits.",
+        "isReconfigurable": false,
+        "recommendedValue": "qjournal://node1.example.com:8485;node2.example.com:8485;node3.example.com:8485/mycluster",
+        "value": "qjournal://node1.example.com:8485;node2.example.com:8485;node3.example.com:8485/mycluster",
+        "category": "HDFS",
+        "filename": "hdfs-site",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "dfs.ha.fencing.methods",
+        "displayName": "dfs.ha.fencing.methods",
+        "description": "A list of scripts or Java classes which will be used to fence the Active NameNode during a failover.",
+        "isReconfigurable": false,
+        "recommendedValue": "shell(/bin/true)",
+        "displayType": "multiLine",
+        "value": "shell(/bin/true)",
+        "category": "HDFS",
+        "filename": "hdfs-site",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "dfs.ha.automatic-failover.enabled",
+        "displayName": "dfs.ha.automatic-failover.enabled",
+        "description": "Enable Automatic failover.",
+        "isReconfigurable": false,
+        "recommendedValue": true,
+        "value": true,
+        "displayType": "checkbox",
+        "category": "HDFS",
+        "filename": "hdfs-site",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "dfs.namenode.safemode.threshold-pct",
+        "displayName": "dfs.namenode.safemode.threshold-pct",
+        "description": "Specifies the percentage of blocks that should satisfy\n        the minimal replication requirement defined by dfs.namenode.replication.min.\n        Values less than or equal to 0 mean not to start in safe mode.\n        Values greater than 1 will make safe mode permanent.\n ",
+        "isReconfigurable": false,
+        "recommendedValue": "0.99f",
+        "value": "0.99f",
+        "category": "HDFS",
+        "filename": "hdfs-site",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "hbase.rootdir",
+        "displayName": "hbase.rootdir",
+        "description": "The directory shared by region servers and into which HBase persists.",
+        "isReconfigurable": false,
+        "recommendedValue": "/hadoop/hdfs/journal",
+        "value": "/hadoop/hdfs/journal",
+        "category": "HBASE",
+        "filename": "hbase-site",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "instance.volumes",
+        "displayName": "instance.volumes",
+        "isReconfigurable": false,
+        "recommendedValue": "/hadoop/hdfs/journal",
+        "value": "/hadoop/hdfs/journal",
+        "category": "ACCUMULO",
+        "filename": "accumulo-site",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "instance.volumes.replacements",
+        "displayName": "instance.volumes.replacements",
+        "isReconfigurable": false,
+        "recommendedValue": "/hadoop/hdfs/journal",
+        "value": "/hadoop/hdfs/journal",
+        "category": "ACCUMULO",
+        "filename": "accumulo-site",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "hbase.rootdir",
+        "displayName": "hbase.rootdir",
+        "description": "Ambari Metrics service uses HBase as default storage backend. Set the rootdir for HBase to either local filesystem path if using Ambari Metrics in embedded mode or to a HDFS dir, example: hdfs://namenode.example.org:8020/amshbase.",
+        "isReconfigurable": false,
+        "recommendedValue": "file:///var/lib/ambari-metrics-collector/hbase",
+        "value": "file:///var/lib/ambari-metrics-collector/hbase",
+        "category": "AMBARI_METRICS",
+        "isVisible": false,
+        "filename": "ams-hbase-site",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "xasecure.audit.destination.hdfs.dir",
+        "displayName": "Destination HDFS Directory",
+        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
+        "isReconfigurable": false,
+        "recommendedValue": "hdfs://haCluster",
+        "value": "hdfs://haCluster",
+        "category": "RANGER",
+        "filename": "ranger-env",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "xasecure.audit.destination.hdfs.dir",
+        "displayName": "Destination HDFS Directory",
+        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
+        "isReconfigurable": false,
+        "recommendedValue": "hdfs://haCluster",
+        "value": "hdfs://haCluster",
+        "category": "HDFS",
+        "filename": "ranger-hdfs-audit",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "xasecure.audit.destination.hdfs.dir",
+        "displayName": "Destination HDFS Directory",
+        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
+        "isReconfigurable": false,
+        "recommendedValue": "hdfs://haCluster",
+        "value": "hdfs://haCluster",
+        "category": "HDFS",
+        "isVisible": false,
+        "filename": "ranger-hdfs-plugin-properties",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "xasecure.audit.destination.hdfs.dir",
+        "displayName": "Destination HDFS Directory",
+        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
+        "isReconfigurable": false,
+        "recommendedValue": "hdfs://haCluster",
+        "value": "hdfs://haCluster",
+        "category": "KAFKA",
+        "isVisible": false,
+        "filename": "ranger-kafka-audit",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "xasecure.audit.destination.hdfs.dir",
+        "displayName": "Destination HDFS Directory",
+        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
+        "isReconfigurable": false,
+        "recommendedValue": "hdfs://haCluster",
+        "value": "hdfs://haCluster",
+        "category": "KNOX",
+        "isVisible": false,
+        "filename": "ranger-knox-plugin-properties",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "xasecure.audit.destination.hdfs.dir",
+        "displayName": "Destination HDFS Directory",
+        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
+        "isReconfigurable": false,
+        "recommendedValue": "hdfs://haCluster",
+        "value": "hdfs://haCluster",
+        "category": "RANGER_KMS",
+        "isVisible": false,
+        "filename": "ranger-kms-audit",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "xasecure.audit.destination.hdfs.dir",
+        "displayName": "Destination HDFS Directory",
+        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
+        "isReconfigurable": false,
+        "recommendedValue": "hdfs://haCluster",
+        "value": "hdfs://haCluster",
+        "category": "STORM",
+        "isVisible": false,
+        "filename": "ranger-storm-audit",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "xasecure.audit.destination.hdfs.dir",
+        "displayName": "Destination HDFS Directory",
+        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
+        "isReconfigurable": false,
+        "recommendedValue": "hdfs://haCluster",
+        "value": "hdfs://haCluster",
+        "category": "STORM",
+        "isVisible": false,
+        "filename": "ranger-storm-plugin-properties",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "xasecure.audit.destination.hdfs.dir",
+        "displayName": "Destination HDFS Directory",
+        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
+        "isReconfigurable": false,
+        "recommendedValue": "hdfs://haCluster",
+        "value": "hdfs://haCluster",
+        "category": "HBASE",
+        "isVisible": false,
+        "filename": "ranger-hbase-plugin-properties",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "xasecure.audit.destination.hdfs.dir",
+        "displayName": "Destination HDFS Directory",
+        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
+        "isReconfigurable": false,
+        "recommendedValue": "hdfs://haCluster",
+        "value": "hdfs://haCluster",
+        "category": "HIVE",
+        "isVisible": false,
+        "filename": "ranger-hive-plugin-properties",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "xasecure.audit.destination.hdfs.dir",
+        "displayName": "Destination HDFS Directory",
+        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
+        "isReconfigurable": false,
+        "recommendedValue": "hdfs://haCluster",
+        "value": "hdfs://haCluster",
+        "category": "HBASE",
+        "isVisible": false,
+        "filename": "ranger-hbase-audit",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "xasecure.audit.destination.hdfs.dir",
+        "displayName": "Destination HDFS Directory",
+        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
+        "isReconfigurable": false,
+        "recommendedValue": "hdfs://haCluster",
+        "value": "hdfs://haCluster",
+        "category": "KNOX",
+        "isVisible": false,
+        "filename": "ranger-knox-audit",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "xasecure.audit.destination.hdfs.dir",
+        "displayName": "Destination HDFS Directory",
+        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
+        "isReconfigurable": false,
+        "recommendedValue": "hdfs://haCluster",
+        "value": "hdfs://haCluster",
+        "category": "HIVE",
+        "isVisible": false,
+        "filename": "ranger-hive-audit",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "xasecure.audit.destination.hdfs.dir",
+        "displayName": "Destination HDFS Directory",
+        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
+        "isReconfigurable": false,
+        "recommendedValue": "hdfs://haCluster",
+        "value": "hdfs://haCluster",
+        "category": "YARN",
+        "isVisible": false,
+        "filename": "ranger-yarn-audit",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "xasecure.audit.destination.hdfs.dir",
+        "displayName": "Destination HDFS Directory",
+        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
+        "isReconfigurable": false,
+        "recommendedValue": "hdfs://haCluster",
+        "value": "hdfs://haCluster",
+        "category": "ATLAS",
+        "isVisible": false,
+        "filename": "ranger-atlas-audit",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "xasecure.audit.destination.hdfs.dir",
+        "displayName": "Destination HDFS Directory",
+        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
+        "isReconfigurable": false,
+        "recommendedValue": "hdfs://haCluster",
+        "value": "hdfs://haCluster",
+        "category": "RANGER_KMS",
+        "isVisible": false,
+        "filename": "ranger-kms-audit",
+        "serviceName": 'MISC'
+      },
+    /**********************************************HAWQ***************************************/
+      {
+        "name": "hawq_dfs_url",
+        "displayName": "hawq_dfs_url",
+        "description": "URL for Accessing HDFS",
+        "isReconfigurable": false,
+        "recommendedValue": "haCluster/hawq_data",
+        "value": "haCluster/hawq_data",
+        "category": "HAWQ",
+        "filename": "hawq-site",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "dfs.nameservices",
+        "displayName": "dfs.nameservices",
+        "description": "Comma-separated list of nameservices.",
+        "isReconfigurable": false,
+        "recommendedValue": "haCluster",
+        "value": "haCluster",
+        "category": "HAWQ",
+        "filename": "hdfs-client",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "dfs.ha.namenodes.${dfs.nameservices}",
+        "displayName": "dfs.ha.namenodes.${dfs.nameservices}",
+        "description": "The prefix for a given nameservice, contains a comma-separated list of namenodes for a given nameservice.",
+        "isReconfigurable": false,
+        "recommendedValue": "nn1,nn2",
+        "value": "nn1,nn2",
+        "category": "HAWQ",
+        "filename": "hdfs-client",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "dfs.namenode.rpc-address.${dfs.nameservices}.nn1",
+        "displayName": "dfs.namenode.rpc-address.${dfs.nameservices}.nn1",
+        "description": "RPC address that handles all clients requests for nn1.",
+        "isReconfigurable": false,
+        "recommendedValue": "0.0.0.0:8020",
+        "value": "0.0.0.0:8020",
+        "category": "HAWQ",
+        "filename": "hdfs-client",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "dfs.namenode.rpc-address.${dfs.nameservices}.nn2",
+        "displayName": "dfs.namenode.rpc-address.${dfs.nameservices}.nn2",
+        "description": "RPC address that handles all clients requests for nn2.",
+        "isReconfigurable": false,
+        "recommendedValue": "0.0.0.0:8020",
+        "value": "0.0.0.0:8020",
+        "category": "HAWQ",
+        "filename": "hdfs-client",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "dfs.namenode.http-address.${dfs.nameservices}.nn1",
+        "displayName": "dfs.namenode.http-address.${dfs.nameservices}.nn1",
+        "description": "The fully-qualified HTTP address for nn1 NameNode.",
+        "isReconfigurable": false,
+        "recommendedValue": "0.0.0.0:50070",
+        "value": "0.0.0.0:50070",
+        "category": "HAWQ",
+        "filename": "hdfs-client",
+        "serviceName": 'MISC'
+      },
+      {
+        "name": "dfs.namenode.http-address.${dfs.nameservices}.nn2",
+        "displayName": "dfs.namenode.http-address.${dfs.nameservices}.nn2",
+        "description": "The fully-qualified HTTP address for nn2 NameNode.",
+        "isReconfigurable": false,
+        "recommendedValue": "0.0.0.0:50070",
+        "value": "0.0.0.0:50070",
+        "category": "HAWQ",
+        "filename": "hdfs-client",
+        "serviceName": 'MISC'
+      }
+    ]
+  }
+};

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/wizards/hawq_activate_standby_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/wizards/hawq_activate_standby_properties.js b/ambari-web/app/data/configs/wizards/hawq_activate_standby_properties.js
new file mode 100644
index 0000000..a06009f
--- /dev/null
+++ b/ambari-web/app/data/configs/wizards/hawq_activate_standby_properties.js
@@ -0,0 +1,43 @@
+/**
+ * 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.
+ */
+
+module.exports =
+{
+  "haConfig": {
+    serviceName: 'MISC',
+    displayName: 'MISC',
+    configCategories: [
+      App.ServiceConfigCategory.create({name: 'HAWQ', displayName: 'HAWQ'}),
+    ],
+    sites: ['hawq-site'],
+    configs: [
+    /**********************************************HAWQ***************************************/
+      {
+        "name": "hawq_master_address_host",
+        "displayName": "HAWQ Master Host",
+        "isReconfigurable": false,
+        "recommendedValue": "",
+        "isOverridable": false,
+        "value": "",
+        "category": "HAWQ",
+        "filename": "hawq-site",
+        serviceName: 'MISC'
+      }
+    ]
+  }
+};

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/wizards/hawq_ha_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/wizards/hawq_ha_properties.js b/ambari-web/app/data/configs/wizards/hawq_ha_properties.js
new file mode 100644
index 0000000..62deba3
--- /dev/null
+++ b/ambari-web/app/data/configs/wizards/hawq_ha_properties.js
@@ -0,0 +1,43 @@
+/**
+ * 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.
+ */
+
+module.exports =
+{
+  "haConfig": {
+    serviceName: 'MISC',
+    displayName: 'MISC',
+    configCategories: [
+      App.ServiceConfigCategory.create({name: 'HAWQ', displayName: 'HAWQ'}),
+    ],
+    sites: ['hawq-site'],
+    configs: [
+    /**********************************************HAWQ***************************************/
+      {
+        "name": "hawq_standby_address_host",
+        "displayName": "HAWQ Standby Master",
+        "isReconfigurable": false,
+        "recommendedValue": "",
+        "isOverridable": false,
+        "value": "",
+        "category": "HAWQ",
+        "filename": "hawq-site",
+        serviceName: 'MISC'
+      },
+    ]
+  }
+};

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/wizards/kerberos_descriptor_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/wizards/kerberos_descriptor_properties.js b/ambari-web/app/data/configs/wizards/kerberos_descriptor_properties.js
new file mode 100644
index 0000000..f6e4239
--- /dev/null
+++ b/ambari-web/app/data/configs/wizards/kerberos_descriptor_properties.js
@@ -0,0 +1,35 @@
+/**
+ * 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.
+ */
+
+var properties = [
+  {
+    "name": "keytab_dir",
+    "index": 3
+  },
+  {
+    "name": "realm",
+    "index": 4
+  },
+  {
+    "name": "additional_realms",
+    "index": 5,
+    "placeholderText": "(" + Em.I18n.t("common.optional") + ")"
+  }
+];
+
+module.exports = properties;

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/wizards/kerberos_identities.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/wizards/kerberos_identities.js b/ambari-web/app/data/configs/wizards/kerberos_identities.js
new file mode 100644
index 0000000..8af6702
--- /dev/null
+++ b/ambari-web/app/data/configs/wizards/kerberos_identities.js
@@ -0,0 +1,129 @@
+/**
+ * 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.
+ */
+
+var App = require('app');
+
+module.exports = {
+  configProperties: [
+    {
+      "name": "smokeuser_principal_name",
+      "displayName": "Smoke user principal",
+      "category": "Ambari Principals",
+      "filename": "cluster-env.xml",
+      "index": 1
+    },
+    {
+      "name": "smokeuser_keytab",
+      "displayName": "Smoke user keytab",
+      "category": "Ambari Principals",
+      "filename": "cluster-env.xml",
+      "index": 2
+    },
+    {
+      "name": "ambari-server_keytab",
+      "displayName": "Ambari Keytab",
+      "category": "Ambari Principals",
+      "filename": "cluster-env.xml",
+      "index": 3
+    },
+    {
+      "name": "hdfs_principal_name",
+      "displayName": "HDFS user principal",
+      "category": "Ambari Principals",
+      "filename": "hadoop-env.xml",
+      "index": 4
+    },
+    {
+      "name": "hdfs_user_keytab",
+      "displayName": "HDFS user keytab",
+      "category": "Ambari Principals",
+      "filename": "hadoop-env.xml",
+      "index": 5
+    },
+    {
+      "name": "hbase_principal_name",
+      "displayName": "HBase user principal",
+      "category": "Ambari Principals",
+      "filename": "hbase-env.xml",
+      "index": 6
+    },
+    {
+      "name": "hbase_user_keytab",
+      "displayName": "HBase user keytab",
+      "category": "Ambari Principals",
+      "filename": "hbase-env.xml",
+      "index": 7
+    },
+    {
+      "name": "accumulo_principal_name",
+      "displayName": "Accumulo user principal",
+      "category": "Ambari Principals",
+      "filename": "accumulo-env.xml",
+      "index": 8
+    },
+    {
+      "name": "accumulo_user_keytab",
+      "displayName": "Accumulo user keytab",
+      "category": "Ambari Principals",
+      "filename": "accumulo-env.xml",
+      "index": 9
+    },
+    {
+      "name": "spark.history.kerberos.principal",
+      "displayName": "Spark user principal",
+      "category": "Ambari Principals",
+      "filename": "spark-defaults.xml",
+      "index": 10
+    },
+    {
+      "name": "spark.history.kerberos.keytab",
+      "displayName": "Spark user keytab",
+      "category": "Ambari Principals",
+      "filename": "spark-defaults.xml",
+      "index": 11
+    },
+    {
+      "name": "spark.history.kerberos.principal",
+      "displayName": "Spark2 user principal",
+      "category": "Ambari Principals",
+      "filename": "spark2-defaults.xml",
+      "index": 12
+    },
+    {
+      "name": "spark.history.kerberos.keytab",
+      "displayName": "Spark2 user keytab",
+      "category": "Ambari Principals",
+      "filename": "spark2-defaults.xml",
+      "index": 13
+    },
+    {
+      "name": "storm_principal_name",
+      "displayName": "Storm user principal",
+      "category": "Ambari Principals",
+      "filename": "storm-env.xml",
+      "index": 14
+    },
+    {
+      "name": "storm_keytab",
+      "displayName": "Storm user keytab",
+      "category": "Ambari Principals",
+      "filename": "storm-env.xml",
+      "index": 15
+    }
+  ]
+};

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/wizards/move_journal_node_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/wizards/move_journal_node_properties.js b/ambari-web/app/data/configs/wizards/move_journal_node_properties.js
new file mode 100644
index 0000000..87a6cfd
--- /dev/null
+++ b/ambari-web/app/data/configs/wizards/move_journal_node_properties.js
@@ -0,0 +1,42 @@
+/**
+ * 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.
+ */
+
+module.exports =
+{
+  "moveJNConfig": {
+    serviceName: 'MISC',
+    displayName: 'MISC',
+    configCategories: [
+      App.ServiceConfigCategory.create({ name: 'HDFS', displayName: 'HDFS'})
+    ],
+    sites: ['hdfs-site'],
+    configs: [
+      {
+        "name": "dfs.namenode.shared.edits.dir",
+        "displayName": "dfs.namenode.shared.edits.dir",
+        "description": " The URI which identifies the group of JNs where the NameNodes will write/read edits.",
+        "isReconfigurable": false,
+        "recommendedValue": "qjournal://node1.example.com:8485;node2.example.com:8485;node3.example.com:8485/mycluster",
+        "value": "qjournal://node1.example.com:8485;node2.example.com:8485;node3.example.com:8485/mycluster",
+        "category": "HDFS",
+        "filename": "hdfs-site",
+        "serviceName": 'MISC'
+      }
+    ]
+  }
+};

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/wizards/rm_ha_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/wizards/rm_ha_properties.js b/ambari-web/app/data/configs/wizards/rm_ha_properties.js
new file mode 100644
index 0000000..fb1bd13
--- /dev/null
+++ b/ambari-web/app/data/configs/wizards/rm_ha_properties.js
@@ -0,0 +1,206 @@
+/**
+ * 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.
+ */
+
+module.exports =
+{
+  "haConfig": {
+    serviceName: 'MISC',
+    displayName: 'MISC',
+    configCategories: [
+      App.ServiceConfigCategory.create({ name: 'YARN', displayName: 'YARN'}),
+      App.ServiceConfigCategory.create({ name: 'HAWQ', displayName: 'HAWQ'}),
+      App.ServiceConfigCategory.create({ name: 'HDFS', displayName: 'HDFS'})
+    ],
+    sites: ['yarn-site', 'hawq-site', 'core-site'],
+    configs: [
+    /**********************************************HDFS***************************************/
+      {
+        "name": "yarn.resourcemanager.ha.enabled",
+        "displayName": "yarn.resourcemanager.ha.enabled",
+        "isReconfigurable": false,
+        "recommendedValue": true,
+        "isOverridable": false,
+        "value": true,
+        "displayType": "checkbox",
+        "category": "YARN",
+        "filename": "yarn-site",
+        serviceName: 'MISC'
+      },
+      {
+        "name": "yarn.resourcemanager.ha.rm-ids",
+        "displayName": "yarn.resourcemanager.ha.rm-ids",
+        "isReconfigurable": false,
+        "recommendedValue": "rm1,rm2",
+        "isOverridable": false,
+        "value": "rm1,rm2",
+        "category": "YARN",
+        "filename": "yarn-site",
+        serviceName: 'MISC'
+      },
+      {
+        "name": "yarn.resourcemanager.hostname.rm1",
+        "displayName": "yarn.resourcemanager.hostname.rm1",
+        "isReconfigurable": false,
+        "recommendedValue": "",
+        "isOverridable": false,
+        "value": "",
+        "category": "YARN",
+        "filename": "yarn-site",
+        serviceName: 'MISC'
+      },
+
+      {
+        "name": "yarn.resourcemanager.webapp.address.rm1",
+        "displayName": "yarn.resourcemanager.webapp.address.rm1",
+        "isReconfigurable": false,
+        "recommendedValue": "",
+        "isOverridable": false,
+        "value": "",
+        "category": "YARN",
+        "filename": "yarn-site",
+        serviceName: 'MISC'
+      },
+      {
+        "name": "yarn.resourcemanager.webapp.address.rm2",
+        "displayName": "yarn.resourcemanager.webapp.address.rm2",
+        "isReconfigurable": false,
+        "recommendedValue": "",
+        "isOverridable": false,
+        "value": "",
+        "category": "YARN",
+        "filename": "yarn-site",
+        serviceName: 'MISC'
+      },
+      {
+        "name": "yarn.resourcemanager.webapp.https.address.rm1",
+        "displayName": "yarn.resourcemanager.webapp.https.address.rm1",
+        "isReconfigurable": false,
+        "recommendedValue": "",
+        "isOverridable": false,
+        "value": "",
+        "category": "YARN",
+        "filename": "yarn-site",
+        serviceName: 'MISC'
+      },
+      {
+        "name": "yarn.resourcemanager.webapp.https.address.rm2",
+        "displayName": "yarn.resourcemanager.webapp.https.address.rm2",
+        "isReconfigurable": false,
+        "recommendedValue": "",
+        "isOverridable": false,
+        "value": "",
+        "category": "YARN",
+        "filename": "yarn-site",
+        serviceName: 'MISC'
+      },
+
+      {
+        "name": "yarn.resourcemanager.hostname.rm2",
+        "displayName": "yarn.resourcemanager.hostname.rm2",
+        "isReconfigurable": false,
+        "recommendedValue": "",
+        "isOverridable": false,
+        "value": "",
+        "category": "YARN",
+        "filename": "yarn-site",
+        serviceName: 'MISC'
+      },
+      {
+        "name": "yarn.resourcemanager.recovery.enabled",
+        "displayName": "yarn.resourcemanager.recovery.enabled",
+        "isReconfigurable": false,
+        "recommendedValue": true,
+        "isOverridable": false,
+        "value": true,
+        "displayType": "checkbox",
+        "category": "YARN",
+        "filename": "yarn-site",
+        serviceName: 'MISC'
+      },
+      {
+        "name": "yarn.resourcemanager.store.class",
+        "displayName": "yarn.resourcemanager.store.class",
+        "isReconfigurable": false,
+        "recommendedValue": "org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore",
+        "isOverridable": false,
+        "value": "org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore",
+        "category": "YARN",
+        "filename": "yarn-site",
+        serviceName: 'MISC'
+      },
+      {
+        "name": "yarn.resourcemanager.zk-address",
+        "displayName": "yarn.resourcemanager.zk-address",
+        "isReconfigurable": false,
+        "recommendedValue": "",
+        "isOverridable": false,
+        "value": "",
+        "category": "YARN",
+        "filename": "yarn-site",
+        serviceName: 'MISC'
+      },
+      {
+        "name": "yarn.resourcemanager.cluster-id",
+        "displayName": "yarn.resourcemanager.cluster-id",
+        "isReconfigurable": false,
+        "recommendedValue": "yarn-cluster",
+        "isOverridable": false,
+        "value": "yarn-cluster",
+        "category": "YARN",
+        "filename": "yarn-site",
+        serviceName: 'MISC'
+      },
+      {
+        "name": "yarn.resourcemanager.ha.automatic-failover.zk-base-path",
+        "displayName": "yarn.resourcemanager.ha.automatic-failover.zk-base-path",
+        "isReconfigurable": false,
+        "recommendedValue": "/yarn-leader-election",
+        "isOverridable": false,
+        "value": "/yarn-leader-election",
+        "category": "YARN",
+        "filename": "yarn-site",
+        serviceName: 'MISC'
+      },
+    /**********************************************HAWQ***************************************/
+      {
+        "name": "yarn.resourcemanager.ha",
+        "displayName": "yarn.resourcemanager.ha",
+        "description": "Comma separated yarn resourcemanager host addresses with port",
+        "isReconfigurable": false,
+        "recommendedValue": "",
+        "isOverridable": false,
+        "value": "",
+        "category": "HAWQ",
+        "filename": "yarn-client",
+        serviceName: 'MISC'
+      },
+      {
+        "name": "yarn.resourcemanager.scheduler.ha",
+        "displayName": "yarn.resourcemanager.scheduler.ha",
+        "description": "Comma separated yarn resourcemanager scheduler addresses with port",
+        "isReconfigurable": false,
+        "recommendedValue": "",
+        "isOverridable": false,
+        "value": "",
+        "category": "HAWQ",
+        "filename": "yarn-client",
+        serviceName: 'MISC'
+      }
+    ]
+  }
+};


[27/47] ambari git commit: Revert "AMBARI-18836. Remove group readable from hdfs headless keytab (Shi Wang via rlevas)"

Posted by jo...@apache.org.
Revert "AMBARI-18836. Remove group readable from hdfs headless keytab (Shi Wang via rlevas)"

This reverts commit 38076327525986b780942f33eff01d2de4a70ce2.


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: 4551c9f9cbc3e1723a331b038dfee954098f3b44
Parents: 29db227
Author: Robert Levas <rl...@hortonworks.com>
Authored: Wed Nov 23 09:32:37 2016 -0500
Committer: Robert Levas <rl...@hortonworks.com>
Committed: Wed Nov 23 09:32:37 2016 -0500

----------------------------------------------------------------------
 .../common-services/HDFS/2.1.0.2.0/kerberos.json          |  2 +-
 .../HIVE/0.12.0.2.0/package/scripts/webhcat.py            | 10 ++++++++++
 .../resources/stacks/HDP/2.5/services/HDFS/kerberos.json  |  2 +-
 3 files changed, 12 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/4551c9f9/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/kerberos.json b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/kerberos.json
index f30c9e4..e8c96cb 100644
--- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/kerberos.json
@@ -56,7 +56,7 @@
                 },
                 "group": {
                   "name": "${cluster-env/user_group}",
-                  "access": ""
+                  "access": "r"
                 },
                 "configuration": "hadoop-env/hdfs_user_keytab"
               }

http://git-wip-us.apache.org/repos/asf/ambari/blob/4551c9f9/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/webhcat.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/webhcat.py b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/webhcat.py
index 00b057c..a7feb60 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/webhcat.py
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/webhcat.py
@@ -70,6 +70,16 @@ def webhcat():
             group=params.user_group,
             cd_access="a")
 
+  if params.security_enabled:
+    kinit_if_needed = format("{kinit_path_local} -kt {hdfs_user_keytab} {hdfs_principal_name};")
+  else:
+    kinit_if_needed = ""
+
+  if kinit_if_needed:
+    Execute(kinit_if_needed,
+            user=params.webhcat_user,
+            path='/bin'
+    )
 
   # Replace _HOST with hostname in relevant principal-related properties
   webhcat_site = params.config['configurations']['webhcat-site'].copy()

http://git-wip-us.apache.org/repos/asf/ambari/blob/4551c9f9/ambari-server/src/main/resources/stacks/HDP/2.5/services/HDFS/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/HDFS/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.5/services/HDFS/kerberos.json
index 9000e95..974a69c 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/services/HDFS/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/HDFS/kerberos.json
@@ -66,7 +66,7 @@
                 },
                 "group": {
                   "name": "${cluster-env/user_group}",
-                  "access": ""
+                  "access": "r"
                 },
                 "configuration": "hadoop-env/hdfs_user_keytab"
               }


[17/47] ambari git commit: AMBARI-18826. Stack property definitions made in ambari-web should be made stack agnostic (akovalenko)

Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/HDP2/site_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2/site_properties.js b/ambari-web/app/data/HDP2/site_properties.js
deleted file mode 100644
index d61d4aa..0000000
--- a/ambari-web/app/data/HDP2/site_properties.js
+++ /dev/null
@@ -1,2579 +0,0 @@
-/**
- * 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.
- */
-
-var App = require('app');
-
-var hdp2properties = [
-  //***************************************** HDP stack **************************************
-  /**********************************************HDFS***************************************/
-  {
-    "name": "dfs.namenode.checkpoint.dir",
-    "serviceName": "HDFS",
-    "filename": "hdfs-site.xml",
-    "category": "SECONDARY_NAMENODE",
-    "index": 1
-  },
-  {
-    "name": "dfs.namenode.checkpoint.period",
-    "category": "General",
-    "serviceName": "HDFS",
-    "filename": "hdfs-site.xml",
-    "index": 3
-  },
-  {
-    "name": "dfs.namenode.name.dir",
-    "serviceName": "HDFS",
-    "filename": "hdfs-site.xml",
-    "category": "NAMENODE",
-    "index": 1
-  },
-  {
-    "name": "dfs.webhdfs.enabled",
-    "category": "General",
-    "serviceName": "HDFS",
-    "filename": "hdfs-site.xml",
-    "index": 0
-  },
-  {
-    "name": "dfs.datanode.failed.volumes.tolerated",
-    "category": "DATANODE",
-    "serviceName": "HDFS",
-    "filename": "hdfs-site.xml",
-    "index": 3
-  },
-  {
-    "name": "dfs.datanode.data.dir",
-    "category": "DATANODE",
-    "serviceName": "HDFS",
-    "filename": "hdfs-site.xml",
-    "index": 1
-  },
-  {
-    "name": "dfs.datanode.data.dir.perm",
-    "category": "DATANODE",
-    "serviceName": "HDFS",
-    "filename": "hdfs-site.xml"
-  },
-  {
-    "name": "nfs.file.dump.dir",
-    "category": "NFS_GATEWAY",
-    "serviceName": "HDFS",
-    "filename": "hdfs-site.xml",
-    "index": 1
-  },
-  {
-    "name": "dfs.namenode.accesstime.precision",
-    "category": "General",
-    "serviceName": "HDFS",
-    "filename": "hdfs-site.xml",
-    "index": 2
-  },
-  {
-    "name": "nfs.exports.allowed.hosts",
-    "category": "NFS_GATEWAY",
-    "serviceName": "HDFS",
-    "filename": "hdfs-site.xml",
-    "index": 3
-  },
-  {
-    "name": "dfs.replication",
-    "category": "General",
-    "serviceName": "HDFS",
-    "filename": "hdfs-site.xml"
-  },
-  {
-    "name": "dfs.datanode.du.reserved",
-    "category": "General",
-    "serviceName": "HDFS",
-    "filename": "hdfs-site.xml",
-    "index": 2
-  },
-  {
-    "name": "namenode_heapsize",
-    "serviceName": "HDFS",
-    "filename": "hadoop-env.xml",
-    "category": "NAMENODE",
-    "index": 2
-  },
-  {
-    "name": "namenode_opt_newsize",
-    "serviceName": "HDFS",
-    "filename": "hadoop-env.xml",
-    "category": "NAMENODE",
-    "index": 3
-  },
-  {
-    "name": "namenode_opt_permsize",
-    "serviceName": "HDFS",
-    "filename": "hadoop-env.xml",
-    "category": "NAMENODE",
-    "index": 5
-  },
-  {
-    "name": "namenode_opt_maxpermsize",
-    "serviceName": "HDFS",
-    "filename": "hadoop-env.xml",
-    "category": "NAMENODE",
-    "index": 6
-  },
-  {
-    "name": "namenode_opt_maxnewsize",
-    "serviceName": "HDFS",
-    "filename": "hadoop-env.xml",
-    "category": "NAMENODE",
-    "index": 4
-  },
-  {
-    "name": "dtnode_heapsize",
-    "serviceName": "HDFS",
-    "filename": "hadoop-env.xml",
-    "category": "DATANODE",
-    "index": 2
-  },
-  {
-    "name": "nfsgateway_heapsize",
-    "serviceName": "HDFS",
-    "filename": "hadoop-env.xml",
-    "category": "NFS_GATEWAY",
-    "index": 1
-  },
-  {
-    "name": "hadoop_heapsize",
-    "serviceName": "HDFS",
-    "filename": "hadoop-env.xml",
-    "category": "General",
-    "index": 1
-  },
-
-/**********************************************YARN***************************************/
-  {
-    "name": "yarn.acl.enable",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml",
-    "category": "RESOURCEMANAGER"
-  },
-  {
-    "name": "yarn.admin.acl",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml",
-    "category": "RESOURCEMANAGER"
-  },
-  {
-    "name": "yarn.log-aggregation-enable",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml",
-    "category": "RESOURCEMANAGER"
-  },
-  {
-    "name": "yarn.resourcemanager.scheduler.class",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml",
-    "category": "CapacityScheduler"
-  },
-  {
-    "name": "yarn.scheduler.minimum-allocation-mb",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml",
-    "category": "CapacityScheduler"
-  },
-  {
-    "name": "yarn.scheduler.maximum-allocation-mb",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml",
-    "category": "CapacityScheduler"
-  },
-  {
-    "name": "yarn.nodemanager.resource.memory-mb",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml",
-    "category": "NODEMANAGER"
-  },
-  {
-    "name": "yarn.nodemanager.vmem-pmem-ratio",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml",
-    "category": "NODEMANAGER"
-  },
-  {
-    "name": "yarn.nodemanager.linux-container-executor.group",
-    "serviceName": "YARN",
-    "category": "NODEMANAGER",
-    "filename": "yarn-site.xml"
-  },
-  {
-    "name": "yarn.nodemanager.log-dirs",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml",
-    "category": "NODEMANAGER"
-  },
-  {
-    "name": "yarn.nodemanager.local-dirs",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml",
-    "category": "NODEMANAGER"
-  },
-  {
-    "name": "yarn.nodemanager.remote-app-log-dir",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml",
-    "category": "NODEMANAGER"
-  },
-  {
-    "name": "yarn.nodemanager.remote-app-log-dir-suffix",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml",
-    "category": "NODEMANAGER"
-  },
-  {
-    "name": "yarn.nodemanager.aux-services",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml",
-    "category": "NODEMANAGER"
-  },
-  {
-    "name": "yarn.nodemanager.log.retain-second",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml",
-    "category": "NODEMANAGER"
-  },
-  {
-    "name": "yarn_heapsize",
-    "serviceName": "YARN",
-    "filename": "yarn-env.xml",
-    "category": "General",
-    "index": 0
-  },
-  {
-    "name": "resourcemanager_heapsize",
-    "serviceName": "YARN",
-    "filename": "yarn-env.xml",
-    "category": "RESOURCEMANAGER",
-    "index": 1
-  },
-  {
-    "name": "nodemanager_heapsize",
-    "serviceName": "YARN",
-    "filename": "yarn-env.xml",
-    "category": "NODEMANAGER",
-    "index": 1
-  },
-  {
-    "name": "apptimelineserver_heapsize",
-    "serviceName": "YARN",
-    "filename": "yarn-env.xml",
-    "category": "APP_TIMELINE_SERVER",
-    "index": 1
-  },
-/**********************************************MAPREDUCE2***************************************/
-  {
-    "name": "mapreduce.map.memory.mb",
-    "category": "General",
-    "serviceName": "MAPREDUCE2",
-    "filename": "mapred-site.xml"
-  },
-  {
-    "name": "mapreduce.reduce.memory.mb",
-    "category": "General",
-    "serviceName": "MAPREDUCE2",
-    "filename": "mapred-site.xml"
-  },
-  {
-    "name": "mapreduce.task.io.sort.mb",
-    "category": "General",
-    "serviceName": "MAPREDUCE2",
-    "filename": "mapred-site.xml"
-  },
-  {
-    "name": "jobhistory_heapsize",
-    "serviceName": "MAPREDUCE2",
-    "filename": "mapred-env.xml",
-    "category": "HISTORYSERVER",
-    "index": 1
-  },
-/**********************************************oozie-site***************************************/
-  {
-    "name": "oozie.db.schema.name",
-    "category": "OOZIE_SERVER",
-    "serviceName": "OOZIE",
-    "filename": "oozie-site.xml",
-    "index": 4
-  },
-  {
-    "name": "oozie.service.JPAService.jdbc.username",
-    "category": "OOZIE_SERVER",
-    "serviceName": "OOZIE",
-    "filename": "oozie-site.xml",
-    "index": 5
-  },
-  {
-    "name": "oozie.service.JPAService.jdbc.password",
-    "category": "OOZIE_SERVER",
-    "serviceName": "OOZIE",
-    "filename": "oozie-site.xml",
-    "index": 6
-  },
-  {
-    "name": "oozie.service.JPAService.jdbc.driver", // the default value of this property is overriden in code
-    "category": "OOZIE_SERVER",
-    "serviceName": "OOZIE",
-    "filename": "oozie-site.xml",
-    "index": 7
-  },
-  {
-    "name": "oozie.service.JPAService.jdbc.url",
-    "category": "OOZIE_SERVER",
-    "serviceName": "OOZIE",
-    "filename": "oozie-site.xml",
-    "index": 8
-  },
-  {
-    "name": "oozie_database",
-    "options": [
-      {
-        displayName: 'New Derby Database',
-        hidden: false
-      },
-      {
-        displayName: 'Existing MySQL / MariaDB Database',
-        hidden: false
-      },
-      {
-        displayName: 'Existing PostgreSQL Database',
-        hidden: false
-      },
-      {
-        displayName: 'Existing Oracle Database',
-        hidden: false
-      },
-      {
-        displayName: 'Existing SQL Anywhere Database',
-        hidden: App.get('currentStackName') !== 'SAPHD' && (App.get('currentStackName') !== 'HDP' || !App.get('isHadoop23Stack'))
-      }
-    ],
-    "displayType": "radio button",
-    "radioName": "oozie-database",
-    "serviceName": "OOZIE",
-    "filename": "oozie-env.xml",
-    "category": "OOZIE_SERVER",
-    "index": 2
-  },
-  {
-    "name": "oozie_data_dir",
-    "serviceName": "OOZIE",
-    "filename": "oozie-env.xml",
-    "category": "OOZIE_SERVER",
-    "index": 9
-  },
-
-/**********************************************HIVE***************************************/
-  {
-    "name": "javax.jdo.option.ConnectionDriverName",  // the default value is overwritten in code
-    "category": "HIVE_METASTORE",
-    "serviceName": "HIVE",
-    "filename": "hive-site.xml",
-    "index": 7
-  },
-  {
-    "name": "hive.metastore.heapsize",  // the default value is overwritten in code
-    "category": "HIVE_METASTORE",
-    "serviceName": "HIVE",
-    "filename": "hive-env.xml",
-    "index": 11
-  },
-  {
-    "name": "hive.heapsize",
-    "serviceName": "HIVE",
-    "filename": "hive-site.xml",
-    "category": "HIVE_SERVER2",
-    "index": 9
-  },
-  {
-    "name": "hive.client.heapsize",
-    "category": "HIVE_CLIENT",
-    "serviceName": "HIVE",
-    "filename": "hive-env.xml",
-    "index": 10
-  },
-  {
-    "name": "javax.jdo.option.ConnectionUserName",
-    "category": "HIVE_METASTORE",
-    "serviceName": "HIVE",
-    "filename": "hive-site.xml",
-    "index": 5
-  },
-  {
-    "name": "javax.jdo.option.ConnectionPassword",
-    "category": "HIVE_METASTORE",
-    "serviceName": "HIVE",
-    "filename": "hive-site.xml",
-    "index": 6
-  },
-  {
-    "name": "javax.jdo.option.ConnectionURL",
-    "category": "HIVE_METASTORE",
-    "serviceName": "HIVE",
-    "filename": "hive-site.xml",
-    "index": 8
-  },
-  {
-    "name": "ambari.hive.db.schema.name",
-    "serviceName": "HIVE",
-    "filename": "hive-site.xml",
-    "category": "HIVE_METASTORE",
-    "index": 4
-  },
-  {
-    "name": "hive_database",
-    "options": [
-      {
-        displayName: 'New MySQL Database',
-        hidden: false
-      },
-      {
-        displayName: 'Existing MySQL / MariaDB Database',
-        hidden: false
-      },
-      {
-        displayName: 'Existing PostgreSQL Database',
-        hidden: false
-      },
-      {
-        displayName: 'Existing Oracle Database',
-        hidden: false
-      },
-      {
-        displayName: 'Existing SQL Anywhere Database',
-        hidden: App.get('currentStackName') !== 'SAPHD' && (App.get('currentStackName') !== 'HDP' || !App.get('isHadoop23Stack'))
-      }
-    ],
-    "displayType": "radio button",
-    "radioName": "hive-database",
-    "serviceName": "HIVE",
-    "filename": "hive-env.xml",
-    "category": "HIVE_METASTORE",
-    "index": 2
-  },
-  {
-    "name": "hcat_log_dir",
-    "serviceName": "HIVE",
-    "filename": "hive-env.xml",
-    "category": "Advanced webhcat-env"
-  },
-  {
-    "name": "hcat_pid_dir",
-    "serviceName": "HIVE",
-    "filename": "hive-env.xml",
-    "category": "Advanced webhcat-env"
-  },
-  {
-    "name": "hive_database_type",
-    "serviceName": "HIVE",
-    "filename": "hive-env.xml",
-    "category": "HIVE_METASTORE"
-  },
-/**********************************************TEZ*****************************************/
-  {
-    "name": "tez.am.resource.memory.mb",
-    "category": "General",
-    "serviceName": "TEZ",
-    "filename": "tez-site.xml"
-  },
-  {
-    "name": "tez.am.java.opts",
-    "category": "General",
-    "serviceName": "TEZ",
-    "filename": "tez-site.xml"
-  },
-  {
-    "name": "tez.am.grouping.split-waves",
-    "category": "General",
-    "serviceName": "TEZ",
-    "filename": "tez-site.xml"
-  },
-  {
-    "name": "tez.am.grouping.min-size",
-    "category": "General",
-    "serviceName": "TEZ",
-    "filename": "tez-site.xml"
-  },
-  {
-    "name": "tez.am.grouping.max-size",
-    "category": "General",
-    "serviceName": "TEZ",
-    "filename": "tez-site.xml"
-  },
-  {
-    "name": "tez.am.log.level",
-    "category": "General",
-    "serviceName": "TEZ",
-    "filename": "tez-site.xml"
-  },
-  {
-    "name": "tez.runtime.intermediate-input.compress.codec",
-    "category": "General",
-    "serviceName": "TEZ",
-    "filename": "tez-site.xml"
-  },
-  {
-    "name": "tez.runtime.intermediate-input.is-compressed",
-    "category": "General",
-    "serviceName": "TEZ",
-    "filename": "tez-site.xml"
-  },
-  {
-    "name": "tez.runtime.intermediate-output.compress.codec",
-    "category": "General",
-    "serviceName": "TEZ",
-    "filename": "tez-site.xml"
-  },
-  {
-    "name": "tez.runtime.intermediate-output.should-compress",
-    "category": "General",
-    "serviceName": "TEZ",
-    "filename": "tez-site.xml"
-  },
-
-/**********************************************HBASE***************************************/
-  {
-    "name": "hbase.hstore.compactionThreshold",
-    "category": "General",
-    "serviceName": "HBASE",
-    "filename": "hbase-site.xml",
-    "index": 0
-  },
-  {
-    "name": "hfile.block.cache.size",
-    "category": "General",
-    "serviceName": "HBASE",
-    "filename": "hbase-site.xml",
-    "index": 1
-  },
-  {
-    "name": "hbase.hregion.max.filesize",
-    "category": "General",
-    "serviceName": "HBASE",
-    "filename": "hbase-site.xml",
-    "index": 2
-  },
-  {
-    "name": "hbase.regionserver.handler.count",
-    "category": "HBASE_REGIONSERVER",
-    "serviceName": "HBASE",
-    "filename": "hbase-site.xml",
-    "index": 2
-  },
-  {
-    "name": "hbase.hregion.majorcompaction",
-    "category": "HBASE_REGIONSERVER",
-    "serviceName": "HBASE",
-    "filename": "hbase-site.xml",
-    "index": 3
-  },
-  {
-    "name": "hbase.hregion.memstore.block.multiplier",
-    "category": "HBASE_REGIONSERVER",
-    "serviceName": "HBASE",
-    "filename": "hbase-site.xml",
-    "index": 4
-  },
-  {
-    "name": "hbase.hregion.memstore.flush.size",
-    "category": "HBASE_REGIONSERVER",
-    "serviceName": "HBASE",
-    "filename": "hbase-site.xml",
-    "index": 5
-  },
-  {
-    "name": "hbase.client.scanner.caching",
-    "category": "General",
-    "serviceName": "HBASE",
-    "filename": "hbase-site.xml",
-    "index": 3
-  },
-  {
-    "name": "zookeeper.session.timeout",
-    "category": "General",
-    "serviceName": "HBASE",
-    "filename": "hbase-site.xml",
-    "index": 4
-  },
-  {
-    "name": "hbase.client.keyvalue.maxsize",
-    "category": "General",
-    "serviceName": "HBASE",
-    "filename": "hbase-site.xml",
-    "index": 5
-  },
-  {
-    "name": "hbase_master_heapsize",
-    "serviceName": "HBASE",
-    "filename": "hbase-env.xml",
-    "category": "HBASE_MASTER",
-    "index": 1
-  },
-  {
-    "name": "hbase_regionserver_heapsize",
-    "serviceName": "HBASE",
-    "filename": "hbase-env.xml",
-    "category": "HBASE_REGIONSERVER",
-    "index": 1
-  },
-  {
-    "name": "hbase_regionserver_xmn_max",
-    "serviceName": "HBASE",
-    "filename": "hbase-env.xml",
-    "category": "HBASE_REGIONSERVER",
-    "index": 6
-  },
-  {
-    "name": "hbase_regionserver_xmn_ratio",
-    "serviceName": "HBASE",
-    "filename": "hbase-env.xml",
-    "category": "HBASE_REGIONSERVER",
-    "index": 7
-  },
-
-/**********************************************storm-site***************************************/
-  {
-    "name": "storm.zookeeper.root",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml",
-    "category": "General"
-  },
-  {
-    "name": "storm.local.dir",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml",
-    "category": "General"
-  },
-  {
-    "name": "storm.zookeeper.servers",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml",
-    "category": "General"
-  },
-  {
-    "name": "storm.zookeeper.port",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml",
-    "category": "General"
-  },
-  {
-    "name": "storm.zookeeper.session.timeout",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml",
-    "category": "General"
-  },
-  {
-    "name": "storm.zookeeper.connection.timeout",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml",
-    "category": "General"
-  },
-  {
-    "name": "storm.zookeeper.retry.times",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml",
-    "category": "General"
-  },
-  {
-    "name": "storm.zookeeper.retry.interval",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml",
-    "category": "General"
-  },
-  {
-    "name": "storm.zookeeper.retry.intervalceiling.millis",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml",
-    "category": "General"
-  },
-  {
-    "name": "storm.cluster.mode",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml",
-    "category": "General"
-  },
-  {
-    "name": "storm.local.mode.zmq",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml",
-    "category": "General"
-  },
-  {
-    "name": "storm.thrift.transport",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml",
-    "category": "General"
-  },
-  {
-    "name": "storm.messaging.transport",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml",
-    "category": "General"
-  },
-  {
-    "name": "storm.messaging.netty.buffer_size",
-    "category": "General",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml"
-  },
-  {
-    "serviceName": "STORM",
-    "category": "General",
-    "name": "storm.messaging.netty.max_retries",
-    "filename": "storm-site.xml"
-  },
-  {
-    "name": "storm.messaging.netty.max_wait_ms",
-    "category": "General",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml"
-  },
-  {
-    "name": "storm.messaging.netty.min_wait_ms",
-    "category": "General",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml"
-  },
-  {
-    "name": "storm.messaging.netty.server_worker_threads",
-    "category": "General",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml"
-  },
-  {
-    "name": "storm.messaging.netty.client_worker_threads",
-    "category": "General",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml"
-  },
-  {
-    "name": "nimbus.host",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml",
-    "category": "NIMBUS"
-  },
-  {
-    "name": "nimbus.thrift.port",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml",
-    "category": "NIMBUS"
-  },
-  {
-    "name": "nimbus.thrift.max_buffer_size",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml",
-    "category": "NIMBUS"
-  },
-  {
-    "name": "nimbus.childopts",
-    "serviceName": "STORM",
-    "category": "NIMBUS",
-    "filename": "storm-site.xml"
-  },
-  {
-    "name": "nimbus.task.timeout.secs",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml",
-    "category": "NIMBUS"
-  },
-  {
-    "name": "nimbus.supervisor.timeout.secs",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml",
-    "category": "NIMBUS"
-  },
-  {
-    "name": "nimbus.monitor.freq.secs",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml",
-    "category": "NIMBUS"
-  },
-  {
-    "name": "nimbus.cleanup.inbox.freq.secs",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml",
-    "category": "NIMBUS"
-  },
-  {
-    "name": "nimbus.inbox.jar.expiration.secs",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml",
-    "category": "NIMBUS"
-  },
-  {
-    "name": "nimbus.task.launch.secs",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml",
-    "category": "NIMBUS"
-  },
-  {
-    "name": "nimbus.reassign",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml",
-    "category": "NIMBUS"
-  },
-  {
-    "name": "nimbus.file.copy.expiration.secs",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml",
-    "category": "NIMBUS"
-  },
-  {
-    "name": "nimbus.topology.validator",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml",
-    "category": "NIMBUS"
-  },
-  {
-    "name": "supervisor.slots.ports",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml",
-    "category": "SUPERVISOR"
-  },
-  {
-    "name": "supervisor.childopts",
-    "category": "SUPERVISOR",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml"
-  },
-  {
-    "name": "supervisor.worker.start.timeout.secs",
-    "category": "SUPERVISOR",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml"
-  },
-  {
-    "name": "supervisor.worker.timeout.secs",
-    "category": "SUPERVISOR",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml"
-  },
-  {
-    "name": "supervisor.monitor.frequency.secs",
-    "category": "SUPERVISOR",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml"
-  },
-  {
-    "name": "supervisor.heartbeat.frequency.secs",
-    "category": "SUPERVISOR",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml"
-  },
-  {
-    "name": "drpc.port",
-    "category": "DRPC_SERVER",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml"
-  },
-  {
-    "name": "drpc.worker.threads",
-    "category": "DRPC_SERVER",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml"
-  },
-  {
-    "name": "drpc.queue.size",
-    "category": "DRPC_SERVER",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml"
-  },
-  {
-    "name": "drpc.invocations.port",
-    "category": "DRPC_SERVER",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml"
-  },
-  {
-    "name": "drpc.request.timeout.secs",
-    "category": "DRPC_SERVER",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml"
-  },
-  {
-    "name": "drpc.childopts",
-    "category": "DRPC_SERVER",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml"
-  },
-  {
-    "name": "ui.port",
-    "category": "STORM_UI_SERVER",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml"
-  },
-  {
-    "name": "ui.childopts",
-    "category": "STORM_UI_SERVER",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml"
-  },
-/*********************************************oozie-site for Falcon*****************************/
-  {
-    "name": "oozie.service.ELService.ext.functions.coord-job-submit-instances",
-    "category": "Falcon - Oozie integration",
-    "serviceName": "FALCON",
-    "filename": "oozie-site.xml"
-  },
-  {
-    "serviceName": "FALCON",
-    "category": "Falcon - Oozie integration",
-    "name": "oozie.service.ELService.ext.functions.coord-action-create-inst",
-    "filename": "oozie-site.xml"
-  },
-  {
-    "serviceName": "FALCON",
-    "category": "Falcon - Oozie integration",
-    "name": "oozie.service.ELService.ext.functions.coord-action-create",
-    "filename": "oozie-site.xml"
-  },
-  {
-    "serviceName": "FALCON",
-    "category": "Falcon - Oozie integration",
-    "name": "oozie.service.ELService.ext.functions.coord-job-submit-data",
-    "filename": "oozie-site.xml"
-  },
-  {
-    "serviceName": "FALCON",
-    "category": "Falcon - Oozie integration",
-    "name": "oozie.service.ELService.ext.functions.coord-action-start",
-    "filename": "oozie-site.xml"
-  },
-  {
-    "serviceName": "FALCON",
-    "category": "Falcon - Oozie integration",
-    "name": "oozie.service.ELService.ext.functions.coord-sla-submit",
-    "filename": "oozie-site.xml"
-  },
-  {
-    "serviceName": "FALCON",
-    "category": "Falcon - Oozie integration",
-    "name": "oozie.service.ELService.ext.functions.coord-sla-create",
-    "filename": "oozie-site.xml"
-  },
-
-  // Runtime properties
-  {
-    "name": "*.domain",
-    "category": "FalconRuntimeSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-runtime.properties.xml"
-
-  },
-  {
-    "name": "*.log.cleanup.frequency.minutes.retention",
-    "category": "FalconRuntimeSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-runtime.properties.xml"
-  },
-  {
-    "name": "*.log.cleanup.frequency.hours.retention",
-    "category": "FalconRuntimeSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-runtime.properties.xml"
-  },
-  {
-    "name": "*.log.cleanup.frequency.days.retention",
-    "category": "FalconRuntimeSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-runtime.properties.xml"
-  },
-  {
-    "name": "*.log.cleanup.frequency.months.retention",
-    "category": "FalconRuntimeSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-runtime.properties.xml"
-  },
-
-  //  Startup properties
-
-  {
-    "name": "*.domain",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.workflow.engine.impl",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.oozie.process.workflow.builder",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.oozie.feed.workflow.builder",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.SchedulableEntityManager.impl",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.ConfigSyncService.impl",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.ProcessInstanceManager.impl",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.catalog.service.impl",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.application.services",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.configstore.listeners",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.broker.impl.class",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.shared.libs",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.config.store.uri",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.system.lib.location",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.retry.recorder.path",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.falcon.cleanup.service.frequency",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.broker.url",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.broker.ttlInMins",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.entity.topic",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.max.retry.failure.count",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.internal.queue.size",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.falcon.authentication.type",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.falcon.http.authentication.type",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.falcon.http.authentication.token.validity",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.falcon.http.authentication.signature.secret",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.falcon.http.authentication.simple.anonymous.allowed",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.falcon.http.authentication.kerberos.name.rules",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.falcon.http.authentication.blacklisted.users",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-
-  // Falcon Graph and Storage
-  {
-    "name": "*.falcon.graph.storage.directory",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.falcon.graph.serialize.path",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.falcon.graph.preserve.history",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-
-/**********************************************KNOX*****************************************/
-  {
-    "name": "knox_master_secret",
-    "serviceName": "KNOX",
-    "filename": "knox-env.xml",
-    "category": "KNOX_GATEWAY"
-  },
-
-/********************************************* KAFKA *****************************/
-  {
-    "name": "log.dirs",
-    "serviceName": "KAFKA",
-    "filename": "kafka-broker.xml",
-    "category": "KAFKA_BROKER",
-    "index": 1
-  },
-  {
-    "name": "port",
-    "serviceName": "KAFKA",
-    "filename": "kafka-broker.xml",
-    "category": "KAFKA_BROKER",
-    "index": 2
-  },
-    {
-    "name": "listeners",
-    "serviceName": "KAFKA",
-    "filename": "kafka-broker.xml",
-    "category": "KAFKA_BROKER"
-  },
-  {
-    "name": "log.roll.hours",
-    "serviceName": "KAFKA",
-    "filename": "kafka-broker.xml",
-    "category": "KAFKA_BROKER",
-    "index": 0
-  },
-  {
-    "name": "log.retention.hours",
-    "serviceName": "KAFKA",
-    "filename": "kafka-broker.xml",
-    "category": "KAFKA_BROKER",
-    "index": 0
-  },
-  {
-    "name": "zookeeper.connect",
-    "serviceName": "KAFKA",
-    "filename": "kafka-broker.xml",
-    "category": "KAFKA_BROKER",
-    "index": 0
-  },
-  {
-    "name": "kafka_pid_dir",
-    "serviceName": "KAFKA",
-    "filename": "kafka-env.xml",
-    "index": 0
-  },
-
-/********************************************* ACCUMULO *****************************/
-  {
-    "name": "accumulo_instance_name",
-    "serviceName": "ACCUMULO",
-    "filename": "accumulo-env.xml",
-    "category": "General"
-  },
-  {
-    "name": "accumulo_root_password",
-    "serviceName": "ACCUMULO",
-    "filename": "accumulo-env.xml",
-    "category": "General"
-  },
-  {
-    "name": "trace.user",
-    "serviceName": "ACCUMULO",
-    "filename": "accumulo-site.xml",
-    "category": "General"
-  },
-  {
-    "name": "trace_password",
-    "serviceName": "ACCUMULO",
-    "filename": "accumulo-env.xml",
-    "category": "General"
-  },
-  {
-    "name": "instance_secret",
-    "serviceName": "ACCUMULO",
-    "filename": "accumulo-env.xml",
-    "category": "General"
-  },
-  {
-    "name": "instance.volumes",
-    "serviceName": "ACCUMULO",
-    "filename": "accumulo-site.xml",
-    "index": 0
-  },
-  {
-    "name": "instance.zookeeper.host",
-    "serviceName": "ACCUMULO",
-    "filename": "accumulo-site.xml",
-    "index": 1
-  },
-  {
-    "name": "instance.zookeeper.timeout",
-    "serviceName": "ACCUMULO",
-    "filename": "accumulo-site.xml",
-    "index": 2
-  },
-  {
-    "name": "master.port.client",
-    "serviceName": "ACCUMULO",
-    "filename": "accumulo-site.xml",
-    "index": 3
-  },
-  {
-    "name": "tserver.port.client",
-    "serviceName": "ACCUMULO",
-    "filename": "accumulo-site.xml",
-    "index": 4
-  },
-  {
-    "name": "monitor.port.client",
-    "serviceName": "ACCUMULO",
-    "filename": "accumulo-site.xml",
-    "index": 5
-  },
-  {
-    "name": "monitor.port.log4j",
-    "serviceName": "ACCUMULO",
-    "filename": "accumulo-site.xml",
-    "index": 6
-  },
-  {
-    "name": "gc.port.client",
-    "serviceName": "ACCUMULO",
-    "filename": "accumulo-site.xml",
-    "index": 7
-  },
-  {
-    "name": "trace.port.client",
-    "serviceName": "ACCUMULO",
-    "filename": "accumulo-site.xml",
-    "index": 8
-  },
-  {
-    "name": "tserver.memory.maps.native.enabled",
-    "serviceName": "ACCUMULO",
-    "filename": "accumulo-site.xml",
-    "index": 9
-  },
-  {
-    "name": "general.classpaths",
-    "serviceName": "ACCUMULO",
-    "filename": "accumulo-site.xml",
-    "index": 10
-  },
-
-/*******************************************kerberos***********************************/
-  {
-    "name": "kdc_type",
-    "serviceName": "KERBEROS",
-    "filename": "kerberos-env.xml",
-    "category": "KDC",
-    "index": 0
-  },
-  {
-    "name": "kdc_hosts",
-    "displayType": "supportTextConnection",
-    "serviceName": "KERBEROS",
-    "filename": "kerberos-env.xml",
-    "category": "KDC",
-    "index": 1
-  },
-  {
-    "name": "realm",
-    "serviceName": "KERBEROS",
-    "filename": "kerberos-env.xml",
-    "category": "KDC",
-    "index": 2
-  },
-  {
-    "name": "ldap_url",
-    "serviceName": "KERBEROS",
-    "filename": "kerberos-env.xml",
-    "category": "KDC",
-    "index": 3
-  },
-  {
-    "name": "container_dn",
-    "serviceName": "KERBEROS",
-    "filename": "kerberos-env.xml",
-    "category": "KDC",
-    "index": 4
-  },
-  {
-    "name": "domains",
-    "serviceName": "KERBEROS",
-    "filename": "krb5-conf.xml",
-    "category": "KDC",
-    "index": 5
-  },
-  {
-    "name": "manage_identities",
-    "serviceName": "KERBEROS",
-    "filename": "kerberos-env.xml",
-    "category": "Advanced kerberos-env",
-    "index" : 0
-  },
-  {
-    "name": "install_packages",
-    "serviceName": "KERBEROS",
-    "filename": "kerberos-env.xml",
-    "category": "Advanced kerberos-env",
-    "index" : 1
-  },
-  {
-    "name": "executable_search_paths",
-    "serviceName": "KERBEROS",
-    "filename": "kerberos-env.xml",
-    "category": "Advanced kerberos-env",
-    "index" : 2
-  },
-  {
-    "name": "encryption_types",
-    "serviceName": "KERBEROS",
-    "filename": "kerberos-env.xml",
-    "category": "Advanced kerberos-env",
-    "index" : 3
-  },
-  {
-    "name": "password_length",
-    "serviceName": "KERBEROS",
-    "filename": "kerberos-env.xml",
-    "category": "Advanced kerberos-env",
-    "index" : 4
-  },
-  {
-    "name": "password_min_lowercase_letters",
-    "serviceName": "KERBEROS",
-    "filename": "kerberos-env.xml",
-    "category": "Advanced kerberos-env",
-    "index" : 5
-  },
-  {
-    "name": "password_min_uppercase_letters",
-    "serviceName": "KERBEROS",
-    "filename": "kerberos-env.xml",
-    "category": "Advanced kerberos-env",
-    "index" : 6
-  },
-  {
-    "name": "password_min_digits",
-    "serviceName": "KERBEROS",
-    "filename": "kerberos-env.xml",
-    "category": "Advanced kerberos-env",
-    "index" : 7
-  },
-  {
-    "name": "password_min_punctuation",
-    "serviceName": "KERBEROS",
-    "filename": "kerberos-env.xml",
-    "category": "Advanced kerberos-env",
-    "index" : 8
-  },
-  {
-    "name": "password_min_whitespace",
-    "serviceName": "KERBEROS",
-    "filename": "kerberos-env.xml",
-    "category": "Advanced kerberos-env",
-    "index" : 9
-  },
-  {
-    "name": "service_check_principal_name",
-    "serviceName": "KERBEROS",
-    "filename": "kerberos-env.xml",
-    "category": "Advanced kerberos-env",
-    "index" : 10
-  },
-  {
-    "name": "ad_create_attributes_template",
-    "serviceName": "KERBEROS",
-    "filename": "kerberos-env.xml",
-    "category": "Advanced kerberos-env",
-    "index" : 11
-  },
-  {
-    "name": "kdc_create_attributes",
-    "serviceName": "KERBEROS",
-    "filename": "kerberos-env.xml",
-    "category": "Advanced kerberos-env",
-    "index" : 12
-  },
-  {
-    "name": "case_insensitive_username_rules",
-    "serviceName": "KERBEROS",
-    "filename": "kerberos-env.xml",
-    "category": "Advanced kerberos-env",
-    "index" : 13
-  },
-  {
-    "name": "manage_auth_to_local",
-    "serviceName": "KERBEROS",
-    "filename": "kerberos-env.xml",
-    "category": "Advanced kerberos-env",
-    "index" : 14
-  },
-  {
-    "name": "group",
-    "serviceName": "KERBEROS",
-    "filename": "kerberos-env.xml",
-    "category": "Advanced kerberos-env",
-    "index": 15
-  },
-  {
-    "name": "admin_server_host",
-    "serviceName": "KERBEROS",
-    "filename": "kerberos-env.xml",
-    "category": "Kadmin",
-    "index": 0
-  },
-  {
-    "name": "manage_krb5_conf",
-    "dependentConfigPattern": "CATEGORY",
-    "serviceName": "KERBEROS",
-    "filename": "krb5-conf.xml",
-    "category": "Advanced krb5-conf",
-    "index": 0
-  },
-  {
-    "name": "conf_dir",
-    "serviceName": "KERBEROS",
-    "filename": "krb5-conf.xml",
-    "category": "Advanced krb5-conf",
-    "index": 1
-  },
-  {
-    "name": "content",
-    "serviceName": "KERBEROS",
-    "filename": "krb5-conf.xml",
-    "category": "Advanced krb5-conf",
-    "index": 2
-  },
-/********************************************* flume-agent *****************************/
-  {
-    "name": "content",
-    "serviceName": "FLUME",
-    "category": "FLUME_HANDLER",
-    "filename": "flume-conf.xml"
-  },
-  {
-    "name": "flume_conf_dir",
-    "serviceName": "FLUME",
-    "filename": "flume-env.xml",
-    "index": 0
-  },
-  {
-    "name": "flume_log_dir",
-    "serviceName": "FLUME",
-    "filename": "flume-env.xml",
-    "index": 1
-  },
-
-/**********************************************ZOOKEEPER***************************************/
-  {
-    "name": "dataDir",
-    "serviceName": "ZOOKEEPER",
-    "filename": "zoo.cfg.xml",
-    "category": "ZOOKEEPER_SERVER",
-    "index": 1
-  },
-  {
-    "name": "tickTime",
-    "serviceName": "ZOOKEEPER",
-    "filename": "zoo.cfg.xml",
-    "category": "ZOOKEEPER_SERVER",
-    "index": 2
-  },
-  {
-    "name": "initLimit",
-    "serviceName": "ZOOKEEPER",
-    "filename": "zoo.cfg.xml",
-    "category": "ZOOKEEPER_SERVER",
-    "index": 3
-  },
-  {
-    "name": "syncLimit",
-    "serviceName": "ZOOKEEPER",
-    "filename": "zoo.cfg.xml",
-    "category": "ZOOKEEPER_SERVER",
-    "index": 4
-  },
-  {
-    "name": "clientPort",
-    "serviceName": "ZOOKEEPER",
-    "filename": "zoo.cfg.xml",
-    "category": "ZOOKEEPER_SERVER",
-    "index": 5
-  },
-  {
-    "name": "zk_log_dir",
-    "serviceName": "ZOOKEEPER",
-    "filename": "zookeeper-env.xml",
-    "index": 0
-  },
-  {
-    "name": "zk_pid_dir",
-    "serviceName": "ZOOKEEPER",
-    "filename": "zookeeper-env.xml",
-    "index": 1
-  },
-/**********************************************FALCON***************************************/
-  {
-    "name": "falcon_port",
-    "serviceName": "FALCON",
-    "filename": "falcon-env.xml",
-    "category": "FALCON_SERVER"
-  },
-  {
-    "name": "falcon_local_dir",
-    "serviceName": "FALCON",
-    "filename": "falcon-env.xml",
-    "category": "FALCON_SERVER"
-  },
-/************************************************AMBARI_METRICS******************************************/
-  {
-    "name": "timeline.metrics.service.operation.mode",
-    "serviceName": "AMBARI_METRICS",
-    "filename": "ams-site.xml",
-    "category": "General",
-    "index": 1
-  },
-  {
-    "name": "metrics_collector_log_dir",
-    "serviceName": "AMBARI_METRICS",
-    "filename": "ams-env.xml",
-    "category": "General",
-    "index": 2
-  },
-  {
-    "name": "metrics_collector_pid_dir",
-    "serviceName": "AMBARI_METRICS",
-    "filename": "ams-env.xml",
-    "category": "General",
-    "index": 3
-  },
-  {
-    "name": "metrics_monitor_log_dir",
-    "serviceName": "AMBARI_METRICS",
-    "filename": "ams-env.xml",
-    "category": "General",
-    "index": 4
-  },
-  {
-    "name": "metrics_monitor_pid_dir",
-    "serviceName": "AMBARI_METRICS",
-    "filename": "ams-env.xml",
-    "category": "General",
-    "index": 5
-  },
-  {
-    "name": "metrics_grafana_username",
-    "serviceName": "AMBARI_METRICS",
-    "filename": "ams-grafana-env.xml",
-    "category": "General",
-    "index": 6
-  },
-  {
-    "name": "metrics_grafana_password",
-    "serviceName": "AMBARI_METRICS",
-    "filename": "ams-grafana-env.xml",
-    "category": "General",
-    "index": 7
-  },
-  {
-    "name": "timeline.metrics.aggregator.checkpoint.dir",
-    "serviceName": "AMBARI_METRICS",
-    "filename": "ams-site.xml",
-    "category": "MetricCollector",
-    "index": 17
-  },
-  {
-    "name": "timeline.metrics.cluster.aggregator.hourly.checkpointCutOffMultiplier",
-    "serviceName": "AMBARI_METRICS",
-    "filename": "ams-site.xml",
-    "category": "MetricCollector",
-    "index": 16
-  },
-  {
-    "name": "timeline.metrics.cluster.aggregator.hourly.disabled",
-    "serviceName": "AMBARI_METRICS",
-    "filename": "ams-site.xml",
-    "category": "MetricCollector",
-    "index": 14
-  },
-  {
-    "name": "timeline.metrics.cluster.aggregator.hourly.interval",
-    "serviceName": "AMBARI_METRICS",
-    "filename": "ams-site.xml",
-    "category": "MetricCollector",
-    "index": 15
-  },
-  {
-    "name": "timeline.metrics.cluster.aggregator.minute.checkpointCutOffMultiplier",
-    "serviceName": "AMBARI_METRICS",
-    "filename": "ams-site.xml",
-    "category": "MetricCollector",
-    "index": 13
-  },
-  {
-    "name": "timeline.metrics.cluster.aggregator.minute.disabled",
-    "serviceName": "AMBARI_METRICS",
-    "filename": "ams-site.xml",
-    "category": "MetricCollector",
-    "index": 10
-  },
-  {
-    "name": "timeline.metrics.cluster.aggregator.minute.interval",
-    "serviceName": "AMBARI_METRICS",
-    "filename": "ams-site.xml",
-    "category": "MetricCollector",
-    "index": 11
-  },
-  {
-    "name": "timeline.metrics.cluster.aggregator.minute.timeslice.interval",
-    "serviceName": "AMBARI_METRICS",
-    "filename": "ams-site.xml",
-    "category": "MetricCollector",
-    "index": 12
-  },
-  {
-    "name": "timeline.metrics.host.aggregator.hourly.checkpointCutOffMultiplier",
-    "serviceName": "AMBARI_METRICS",
-    "filename": "ams-site.xml",
-    "category": "MetricCollector",
-    "index": 9
-  },
-  {
-    "name": "timeline.metrics.host.aggregator.hourly.disabled",
-    "serviceName": "AMBARI_METRICS",
-    "filename": "ams-site.xml",
-    "category": "MetricCollector",
-    "index": 7
-  },
-  {
-    "name": "timeline.metrics.host.aggregator.hourly.interval",
-    "serviceName": "AMBARI_METRICS",
-    "filename": "ams-site.xml",
-    "category": "MetricCollector",
-    "index": 8
-  },
-  {
-    "name": "timeline.metrics.host.aggregator.minute.checkpointCutOffMultiplier",
-    "serviceName": "AMBARI_METRICS",
-    "filename": "ams-site.xml",
-    "category": "MetricCollector",
-    "index": 6
-  },
-  {
-    "name": "timeline.metrics.host.aggregator.minute.disabled",
-    "serviceName": "AMBARI_METRICS",
-    "filename": "ams-site.xml",
-    "category": "MetricCollector",
-    "index": 4
-  },
-  {
-    "name": "timeline.metrics.host.aggregator.minute.interval",
-    "serviceName": "AMBARI_METRICS",
-    "filename": "ams-site.xml",
-    "category": "MetricCollector",
-    "index": 5
-  },
-  {
-    "name": "timeline.metrics.service.checkpointDelay",
-    "serviceName": "AMBARI_METRICS",
-    "filename": "ams-site.xml",
-    "category": "MetricCollector",
-    "index": 1
-  },
-  {
-    "name": "timeline.metrics.service.default.result.limit",
-    "serviceName": "AMBARI_METRICS",
-    "filename": "ams-site.xml",
-    "category": "MetricCollector",
-    "index": 2
-  },
-  {
-    "name": "timeline.metrics.service.resultset.fetchSize",
-    "serviceName": "AMBARI_METRICS",
-    "filename": "ams-site.xml",
-    "category": "MetricCollector",
-    "index": 3
-  },
-  /*ranger-admin-site*/
-  {
-    "name": "xasecure.audit.jaas.Client.option.principal",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "SolrKerberosSettings"
-  },
-  {
-    "name": "xasecure.audit.jaas.Client.option.keyTab",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "SolrKerberosSettings"
-  },
-  {
-    "name": "xasecure.audit.jaas.Client.loginModuleName",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "SolrKerberosSettings"
-  },
-  {
-    "name": "xasecure.audit.jaas.Client.loginModuleControlFlag",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "SolrKerberosSettings"
-  },
-  {
-    "name": "xasecure.audit.jaas.Client.option.useKeyTab",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "SolrKerberosSettings"
-  },
-  {
-    "name": "xasecure.audit.jaas.Client.option.storeKey",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "SolrKerberosSettings"
-  },
-  {
-    "name": "xasecure.audit.jaas.Client.option.serviceName",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "SolrKerberosSettings"
-  },
-/************************************************LOGSEARCH******************************************/
-  /*logfeeder-properties*/
-  {
-    "name": "logfeeder.config.files",
-    "serviceName": "LOGSEARCH",
-    "filename": "logfeeder-properties.xml",
-    "category": "Advanced logfeeder-properties",
-    "index": 1
-  },
-  {
-    "name": "logfeeder.checkpoint.folder",
-    "serviceName": "LOGSEARCH",
-    "filename": "logfeeder-properties.xml",
-    "category": "Advanced logfeeder-properties",
-    "index": 2
-  },
-  {
-    "name": "logfeeder.metrics.collector.hosts",
-    "serviceName": "LOGSEARCH",
-    "filename": "logfeeder-properties.xml",
-    "category": "Advanced logfeeder-properties",
-    "index": 3
-  },
-  {
-    "name": "logfeeder.solr.config.interval",
-    "serviceName": "LOGSEARCH",
-    "filename": "logfeeder-properties.xml",
-    "category": "Advanced logfeeder-properties",
-    "index": 4
-  },
-  {
-    "name": "logfeeder.log.filter.enable",
-    "serviceName": "LOGSEARCH",
-    "filename": "logfeeder-properties.xml",
-    "category": "Advanced logfeeder-properties",
-    "index": 5
-  },
-  /*logfeeder-env*/
-  {
-    "name": "logfeeder_log_dir",
-    "serviceName": "LOGSEARCH",
-    "filename": "logfeeder-env.xml",
-    "category": "Advanced logfeeder-env",
-    "index": 1
-  },
-  {
-    "name": "logfeeder_pid_dir",
-    "serviceName": "LOGSEARCH",
-    "filename": "logfeeder-env.xml",
-    "category": "Advanced logfeeder-env",
-    "index": 2
-  },
-  {
-    "name": "logfeeder_max_mem",
-    "serviceName": "LOGSEARCH",
-    "filename": "logfeeder-env.xml",
-    "category": "Advanced logfeeder-env",
-    "index": 3
-  },
-  {
-    "name": "logfeeder_solr_service_logs_enable",
-    "serviceName": "LOGSEARCH",
-    "filename": "logfeeder-env.xml",
-    "category": "Advanced logfeeder-env",
-    "index": 4
-  },
-  {
-    "name": "logfeeder_solr_audit_logs_enable",
-    "serviceName": "LOGSEARCH",
-    "filename": "logfeeder-env.xml",
-    "category": "Advanced logfeeder-env",
-    "index": 5
-  },
-  {
-    "name": "logfeeder_truststore_location",
-    "serviceName": "LOGSEARCH",
-    "filename": "logfeeder-env.xml",
-    "category": "Advanced logfeeder-env",
-    "index": 6
-  },
-  {
-    "name": "logfeeder_truststore_type",
-    "serviceName": "LOGSEARCH",
-    "filename": "logfeeder-env.xml",
-    "category": "Advanced logfeeder-env",
-    "index": 7
-  },
-  {
-    "name": "logfeeder_truststore_password",
-    "serviceName": "LOGSEARCH",
-    "filename": "logfeeder-env.xml",
-    "category": "Advanced logfeeder-env",
-    "index": 8
-  },
-  {
-    "name": "logfeeder_keystore_location",
-    "serviceName": "LOGSEARCH",
-    "filename": "logfeeder-env.xml",
-    "category": "Advanced logfeeder-env",
-    "index": 9
-  },
-  {
-    "name": "logfeeder_keystore_type",
-    "serviceName": "LOGSEARCH",
-    "filename": "logfeeder-env.xml",
-    "category": "Advanced logfeeder-env",
-    "index": 10
-  },
-  {
-    "name": "logfeeder_keystore_password",
-    "serviceName": "LOGSEARCH",
-    "filename": "logfeeder-env.xml",
-    "category": "Advanced logfeeder-env",
-    "index": 11
-  },
-  {
-    "name": "logfeeder_kerberos_keytab",
-    "serviceName": "LOGSEARCH",
-    "filename": "logfeeder-env.xml",
-    "category": "Advanced logfeeder-env",
-    "index": 12
-  },
-  {
-    "name": "logfeeder_kerberos_principal",
-    "serviceName": "LOGSEARCH",
-    "filename": "logfeeder-env.xml",
-    "category": "Advanced logfeeder-env",
-    "index": 13
-  },
-  {
-    "name": "content",
-    "serviceName": "LOGSEARCH",
-    "filename": "logfeeder-env.xml",
-    "category": "Advanced logfeeder-env",
-    "index": 14
-  },
-  /*logfeeder-grok*/
-  {
-    "name": "default_grok_patterns",
-    "serviceName": "LOGSEARCH",
-    "filename": "logfeeder-grok.xml",
-    "category": "Advanced logfeeder-grok",
-    "index": 1
-  },
-  {
-    "name": "custom_grok_patterns",
-    "serviceName": "LOGSEARCH",
-    "filename": "logfeeder-grok.xml",
-    "category": "Advanced logfeeder-grok",
-    "index": 2
-  },
-  /*logfeeder-log4j*/
-  {
-    "name": "content",
-    "serviceName": "LOGSEARCH",
-    "filename": "logfeeder-log4j.xml",
-    "category": "Advanced logfeeder-log4j",
-    "index": 1
-  },
-  /*logsearch-admin-json*/
-  {
-    "name": "logsearch_admin_username",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-admin-json.xml",
-    "category": "LogsearchAdminJson",
-    "index": 1
-  },
-  {
-    "name": "logsearch_admin_password",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-admin-json.xml",
-    "category": "LogsearchAdminJson",
-    "index": 2
-  },
-  {
-    "name": "content",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-admin-json.xml",
-    "category": "LogsearchAdminJson",
-    "index": 3
-  },
-  /*logsearch-audit_logs-solrconfig*/
-  {
-    "name": "logsearch_audit_logs_max_retention",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-audit_logs-solrconfig.xml",
-    "category": "Advanced logsearch-audit_logs-solrconfig",
-    "index": 1
-  },
-  {
-    "name": "logsearch_audit_logs_merge_factor",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-audit_logs-solrconfig.xml",
-    "category": "Advanced logsearch-audit_logs-solrconfig",
-    "index": 2
-  },
-  {
-    "name": "content",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-audit_logs_logs-solrconfig.xml",
-    "category": "Advanced logsearch-audit_logs-solrconfig",
-    "index": 3
-  },
-  /*logsearch-env*/
-  {
-    "name": "logsearch_ui_protocol",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-env.xml",
-    "category": "Advanced logsearch-env",
-    "index": 1
-  },
-  {
-    "name": "logsearch_ui_port",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-env.xml",
-    "category": "Advanced logsearch-env",
-    "index": 2
-  },
-  {
-    "name": "logsearch_log_dir",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-env.xml",
-    "category": "Advanced logsearch-env",
-    "index": 3
-  },
-  {
-    "name": "logsearch_pid_dir",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-env.xml",
-    "category": "Advanced logsearch-env",
-    "index": 4
-  },
-  {
-    "name": "logsearch_app_max_memory",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-env.xml",
-    "category": "Advanced logsearch-env",
-    "index": 5
-  },
-  {
-    "name": "logsearch_solr_audit_logs_zk_node",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-env.xml",
-    "category": "Advanced logsearch-env",
-    "index": 6
-  },
-  {
-    "name": "logsearch_solr_audit_logs_zk_quorum",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-env.xml",
-    "category": "Advanced logsearch-env",
-    "index": 7
-  },
-  {
-    "name": "logsearch_debug_enabled",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-env.xml",
-    "category": "Advanced logsearch-env",
-    "index": 8
-  },
-  {
-    "name": "logsearch_debug_port",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-env.xml",
-    "category": "Advanced logsearch-env",
-    "index": 9
-  },
-  {
-    "name": "logsearch_truststore_location",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-env.xml",
-    "category": "Advanced logsearch-env",
-    "index": 10
-  },
-  {
-    "name": "logsearch_truststore_type",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-env.xml",
-    "category": "Advanced logsearch-env",
-    "index": 11
-  },
-  {
-    "name": "logsearch_truststore_password",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-env.xml",
-    "category": "Advanced logsearch-env",
-    "index": 12
-  },
-  {
-    "name": "logsearch_keystore_location",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-env.xml",
-    "category": "Advanced logsearch-env",
-    "index": 13
-  },
-  {
-    "name": "logsearch_keystore_type",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-env.xml",
-    "category": "Advanced logsearch-env",
-    "index": 14
-  },
-  {
-    "name": "logsearch_keystore_password",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-env.xml",
-    "category": "Advanced logsearch-env",
-    "index": 15
-  },
-  {
-    "name": "logsearch_kerberos_keytab",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-env.xml",
-    "category": "Advanced logsearch-env",
-    "index": 16
-  },
-  {
-    "name": "logsearch_kerberos_principal",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-env.xml",
-    "category": "Advanced logsearch-env",
-    "index": 17
-  },
-  {
-    "name": "content",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-env.xml",
-    "category": "Advanced logsearch-env",
-    "index": 18
-  },
-  /*logsearch-log4j*/
-  {
-    "name": "content",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-log4j.xml",
-    "category": "Advanced logsearch-log4j",
-    "index": 1
-  },
-  /*logsearch-service_logs-solrconfig*/
-  {
-    "name": "logsearch_service_logs_max_retention",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-service_logs-solrconfig.xml",
-    "category": "Advanced logsearch-service_logs-solrconfig",
-    "index": 1
-  },
-  {
-    "name": "logsearch_service_logs_merge_factor",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-service_logs-solrconfig.xml",
-    "category": "Advanced logsearch-service_logs-solrconfig",
-    "index": 2
-  },
-  {
-    "name": "content",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-service_logs-solrconfig.xml",
-    "category": "Advanced logsearch-service_logs-solrconfig",
-    "index": 3
-  },
-  /*logsearch-properties*/
-  {
-    "name": "logsearch.solr.collection.service.logs",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-properties.xml",
-    "category": "Advanced logsearch-properties",
-    "index": 1
-  },
-  {
-    "name": "logsearch.service.logs.fields",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-properties.xml",
-    "category": "Advanced logsearch-properties",
-    "index": 2
-  },
-  {
-    "name": "logsearch.service.logs.split.interval.mins",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-properties.xml",
-    "category": "Advanced logsearch-properties",
-    "index": 3
-  },
-  {
-    "name": "logsearch.solr.collection.audit.logs",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-properties.xml",
-    "category": "Advanced logsearch-properties",
-    "index": 4
-  },
-  {
-    "name": "logsearch.audit.logs.split.interval.mins",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-properties.xml",
-    "category": "Advanced logsearch-properties",
-    "index": 5
-  },
-  {
-    "name": "logsearch.solr.audit.logs.use.ranger",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-properties.xml",
-    "category": "Advanced logsearch-properties",
-    "index": 6
-  },
-  {
-    "name": "logsearch.ranger.audit.logs.collection.name",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-properties.xml",
-    "category": "Advanced logsearch-properties",
-    "index": 7
-  },
-  {
-    "name": "logsearch.solr.metrics.collector.hosts",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-properties.xml",
-    "category": "Advanced logsearch-properties",
-    "index": 8
-  },
-  {
-    "name": "logsearch.auth.external_auth.enable",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-properties.xml",
-    "category": "Advanced logsearch-properties",
-    "index": 9
-  },
-  {
-    "name": "logsearch.auth.external_auth.host_url",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-properties.xml",
-    "category": "Advanced logsearch-properties",
-    "index": 10
-  },
-  {
-    "name": "logsearch.auth.external_auth.login_url",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-properties.xml",
-    "category": "Advanced logsearch-properties",
-    "index": 11
-  },
-  {
-    "name": "logsearch.auth.jwt.audiances",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-properties.xml",
-    "category": "Advanced logsearch-properties",
-    "index": 12
-  },
-  {
-    "name": "logsearch.auth.jwt.cookie.name",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-properties.xml",
-    "category": "Advanced logsearch-properties",
-    "index": 13
-  },
-  {
-    "name": "logsearch.auth.jwt.query.param.original_url",
-    "serviceName": "LOGSEARCH",
-    "filename": "logsearch-properties.xml",
-    "category": "Advanced logsearch-properties",
-    "index": 14
-  },
-  /*infra-solr-client-log4j*/
-  {
-    "name": "infra_solr_client_log_dir",
-    "serviceName": "AMBARI_INFRA",
-    "filename": "infra-solr-client-log4j.xml",
-    "category": "Advanced infra-solr-client-log4j",
-    "index": 1
-  },
-  {
-    "name": "content",
-    "serviceName": "AMBARI_INFRA",
-    "filename": "infra-solr-client-log4j.xml",
-    "category": "Advanced infra-solr-client-log4j",
-    "index": 2
-  },
-  /*infra-solr-env*/
-  {
-    "name": "infra_solr_log_dir",
-    "serviceName": "AMBARI_INFRA",
-    "filename": "infra-solr-env.xml",
-    "category": "Advanced infra-solr-env",
-    "index": 1
-  },
-  {
-    "name": "infra_solr_pid_dir",
-    "serviceName": "AMBARI_INFRA",
-    "filename": "infra-solr-env.xml",
-    "category": "Advanced infra-solr-env",
-    "index": 2
-  },
-  {
-    "name": "infra_solr_port",
-    "serviceName": "AMBARI_INFRA",
-    "filename": "infra-solr-env.xml",
-    "category": "Advanced infra-solr-env",
-    "index": 3
-  },
-  {
-    "name": "infra_solr_jmx_port",
-    "serviceName": "AMBARI_INFRA",
-    "filename": "infra-solr-env.xml",
-    "category": "Advanced infra-solr-env",
-    "index": 4
-  },
-  {
-    "name": "infra_solr_ssl_enabled",
-    "serviceName": "AMBARI_INFRA",
-    "filename": "infra-solr-env.xml",
-    "category": "Advanced infra-solr-env",
-    "index": 5
-  },
-  {
-    "name": "infra_solr_truststore_location",
-    "serviceName": "AMBARI_INFRA",
-    "filename": "infra-solr-env.xml",
-    "category": "Advanced infra-solr-env",
-    "index": 6
-  },
-  {
-    "name": "infra_solr_truststore_type",
-    "serviceName": "AMBARI_INFRA",
-    "filename": "infra-solr-env.xml",
-    "category": "Advanced infra-solr-env",
-    "index": 7
-  },
-  {
-    "name": "infra_solr_truststore_password",
-    "serviceName": "AMBARI_INFRA",
-    "filename": "infra-solr-env.xml",
-    "category": "Advanced infra-solr-env",
-    "index": 8
-  },
-  {
-    "name": "infra_solr_keystore_location",
-    "serviceName": "AMBARI_INFRA",
-    "filename": "infra-solr-env.xml",
-    "category": "Advanced infra-solr-env",
-    "index": 9
-  },
-  {
-    "name": "infra_solr_keystore_type",
-    "serviceName": "AMBARI_INFRA",
-    "filename": "infra-solr-env.xml",
-    "category": "Advanced infra-solr-env",
-    "index": 10
-  },
-  {
-    "name": "infra_solr_keystore_password",
-    "serviceName": "AMBARI_INFRA",
-    "filename": "infra-solr-env.xml",
-    "category": "Advanced infra-solr-env",
-    "index": 11
-  },
-  {
-    "name": "infra_solr_kerberos_keytab",
-    "serviceName": "AMBARI_INFRA",
-    "filename": "infra-solr-env.xml",
-    "category": "Advanced infra-solr-env",
-    "index": 12
-  },
-  {
-    "name": "infra_solr_kerberos_principal",
-    "serviceName": "AMBARI_INFRA",
-    "filename": "infra-solr-env.xml",
-    "category": "Advanced infra-solr-env",
-    "index": 13
-  },
-  {
-    "name": "infra_solr_web_kerberos_keytab",
-    "serviceName": "AMBARI_INFRA",
-    "filename": "infra-solr-env.xml",
-    "category": "Advanced infra-solr-env",
-    "index": 14
-  },
-  {
-    "name": "infra_solr_web_kerberos_principal",
-    "serviceName": "AMBARI_INFRA",
-    "filename": "infra-solr-env.xml",
-    "category": "Advanced infra-solr-env",
-    "index": 15
-  },
-  {
-    "name": "infra_solr_kerberos_name_rules",
-    "serviceName": "AMBARI_INFRA",
-    "filename": "infra-solr-env.xml",
-    "category": "Advanced infra-solr-env",
-    "index": 16
-  },
-  {
-    "name": "content",
-    "serviceName": "AMBARI_INFRA",
-    "filename": "infra-solr-env.xml",
-    "category": "Advanced infra-solr-env",
-    "index": 17
-  },
-  /*infra-solr-log4j*/
-  {
-    "name": "content",
-    "serviceName": "AMBARI_INFRA",
-    "filename": "infra-solr-log4j.xml",
-    "category": "Advanced infra-solr-log4j",
-    "index": 1
-  },
-  /*infra-solr-xml*/
-  {
-    "name": "content",
-    "serviceName": "AMBARI_INFRA",
-    "filename": "infra-solr-xml.xml",
-    "category": "Advanced infra-solr-xml",
-    "index": 1
-  },
-
-].concat(require('data/HDP2/gluster_fs_properties'));
-
-if (App.get('isHadoopWindowsStack')) {
-  var excludedWindowsConfigs = [
-    'hive_database',
-    'oozie_database'
-  ];
-
-  hdp2properties = hdp2properties.filter(function (item) {
-    return !excludedWindowsConfigs.contains(item.name);
-  });
-
-  hdp2properties.push(
-    {
-      "name": "hadoop.user.name",
-      "serviceName": "MISC",
-      "filename": "cluster-env.xml",
-      "category": "Users and Groups",
-      "belongsToService": ["HDFS"],
-      "index": 0
-    },
-    {
-      "name": "hadoop.user.password",
-      "serviceName": "MISC",
-      "filename": "cluster-env.xml",
-      "category": "Users and Groups",
-      "belongsToService": ["HDFS"],
-      "index": 1
-    },
-    {
-      "name": "hive_database",
-      "options": [
-        {
-          displayName: 'Existing MSSQL Server database with SQL authentication',
-          hidden: false
-        },
-        {
-          displayName: 'Existing MSSQL Server database with integrated authentication',
-          hidden: false
-        }
-      ],
-      "displayType": "radio button",
-      "radioName": "hive-database",
-      "serviceName": "HIVE",
-      "filename": "hive-env.xml",
-      "category": "HIVE_METASTORE",
-      "index": 2
-    },
-    {
-      "name": "oozie_database",
-      "recommendedValue": "Existing MSSQL Server database with SQL authentication",
-      "options": [
-        {
-          displayName: 'Existing MSSQL Server database with SQL authentication',
-          hidden: false
-        },
-        {
-          displayName: 'Existing MSSQL Server database with integrated authentication',
-          hidden: false
-        }
-      ],
-      "displayType": "radio button",
-      "radioName": "oozie-database",
-      "serviceName": "OOZIE",
-      "filename": "oozie-env.xml",
-      "category": "OOZIE_SERVER",
-      "index": 2
-    }
-  );
-}
-
-var atsProperties = [
-  {
-    "name": "yarn.timeline-service.enabled",
-    "category": "APP_TIMELINE_SERVER",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  },
-  {
-    "name": "yarn.timeline-service.leveldb-timeline-store.path",
-    "category": "APP_TIMELINE_SERVER",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  },
-  {
-    "name": "yarn.timeline-service.leveldb-timeline-store.ttl-interval-ms",
-    "category": "APP_TIMELINE_SERVER",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  },
-  {
-    "name": "yarn.timeline-service.store-class",
-    "category": "APP_TIMELINE_SERVER",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  },
-  {
-    "name": "yarn.timeline-service.ttl-enable",
-    "category": "APP_TIMELINE_SERVER",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  },
-  {
-    "name": "yarn.timeline-service.ttl-ms",
-    "category": "APP_TIMELINE_SERVER",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  },
-  {
-    "name": "yarn.timeline-service.generic-application-history.store-class",
-    "category": "APP_TIMELINE_SERVER",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  },
-  {
-    "name": "yarn.timeline-service.webapp.address",
-    "category": "APP_TIMELINE_SERVER",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  },
-  {
-    "name": "yarn.timeline-service.webapp.https.address",
-    "category": "APP_TIMELINE_SERVER",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  },
-  {
-    "name": "yarn.timeline-service.address",
-    "category": "APP_TIMELINE_SERVER",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  }
-];
-
-hdp2properties.pushObjects(atsProperties);
-
-module.exports =
-{
-  "configProperties": hdp2properties
-};

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/HDP2/ui_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2/ui_properties.js b/ambari-web/app/data/HDP2/ui_properties.js
deleted file mode 100644
index 8d731d9..0000000
--- a/ambari-web/app/data/HDP2/ui_properties.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * 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.
- */
-
-module.exports = [
-  {
-    "name": "admin_principal",
-    "displayName": "Admin principal",
-    "description": "Admin principal used to create principals and export key tabs (e.g. admin/admin@EXAMPLE.COM).",
-    "isRequiredByAgent": false,
-    "serviceName": "KERBEROS",
-    "filename": "krb5-conf.xml",
-    "category": "Kadmin",
-    "index": 1
-  },
-  {
-    "name": "admin_password",
-    "displayName": "Admin password",
-    "displayType": "password",
-    "isRequiredByAgent": false,
-    "serviceName": "KERBEROS",
-    "filename": "krb5-conf.xml",
-    "category": "Kadmin",
-    "index": 2
-  },
-  {
-    "name": "dfs.ha.fencing.methods",
-    "displayName": "dfs.ha.fencing.methods",
-    "serviceName": "HDFS",
-    "filename": "hdfs-site.xml",
-    "category": "Advanced hdfs-site",
-    "displayType": "multiLine",
-    "index": 1
-  }
-];

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/alert_notification.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/alert_notification.js b/ambari-web/app/data/configs/alert_notification.js
new file mode 100644
index 0000000..aba7436
--- /dev/null
+++ b/ambari-web/app/data/configs/alert_notification.js
@@ -0,0 +1,145 @@
+/**
+ * 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.
+ */
+
+/**
+ * Alert Notification Properties
+ */
+module.exports = [
+  {
+    "name": "create_notification",
+    "displayName": "Create Notification",
+    "isOverridable": false,
+    "isVisible": false,
+    "serviceName": "MISC",
+    "category": "Notifications",
+    "recommendedValue": "no",
+    "filename": "alert_notification"
+  },
+  {
+    "name": "mail.smtp.host",
+    "displayName": "SMTP Host",
+    "displayType": "host",
+    "isRequired": false,
+    "isReconfigurable": true,
+    "isOverridable": false,
+    "isVisible": true,
+    "serviceName": "MISC",
+    "category": "Notifications",
+    "rowStyleClass": "indent-1",
+    "filename": "alert_notification"
+  },
+  {
+    "name": "mail.smtp.port",
+    "displayName": "SMTP Port",
+    "displayType": "int",
+    "isRequired": false,
+    "isReconfigurable": true,
+    "isOverridable": false,
+    "isVisible": true,
+    "serviceName": "MISC",
+    "category": "Notifications",
+    "rowStyleClass": "indent-1",
+    "filename": "alert_notification"
+  },
+  {
+    "name": "mail.smtp.from",
+    "displayName": "FROM Email Address",
+    "displayType": "email",
+    "isRequired": false,
+    "isReconfigurable": true,
+    "isOverridable": false,
+    "isVisible": true,
+    "serviceName": "MISC",
+    "category": "Notifications",
+    "rowStyleClass": "indent-1",
+    "filename": "alert_notification"
+  },
+  {
+    "name": "ambari.dispatch.recipients",
+    "displayName": " TO Email Address",
+    "displayType": "email",
+    "isRequired": false,
+    "isReconfigurable": true,
+    "isOverridable": false,
+    "isVisible": true,
+    "serviceName": "MISC",
+    "category": "Notifications",
+    "rowStyleClass": "indent-1",
+    "filename": "alert_notification"
+  },
+  {
+    "name": "smtp_use_auth",
+    "displayName": "SMTP server requires authentication",
+    "displayType": "checkbox",
+    "isRequired": false,
+    "isReconfigurable": true,
+    "isOverridable": false,
+    "recommendedValue": true,
+    "isVisible": true,
+    "serviceName": "MISC",
+    "category": "Notifications",
+    "rowStyleClass": "indent-1",
+    "filename": "alert_notification"
+  },
+  {
+    "name": "ambari.dispatch.credential.username",
+    "displayName": "SMTP Username",
+    "isRequired": false,
+    "isReconfigurable": true,
+    "isOverridable": false,
+    "isVisible": true,
+    "serviceName": "MISC",
+    "category": "Notifications",
+    "rowStyleClass": "indent-2",
+    "filename": "alert_notification"
+  },
+  {
+    "name": "ambari.dispatch.credential.password",
+    "displayName": "SMTP Password",
+    "isRequired": false,
+    "isReconfigurable": true,
+    "isOverridable": false,
+    "isVisible": true,
+    "serviceName": "MISC",
+    "category": "Notifications",
+    "rowStyleClass": "indent-2",
+    "filename": "alert_notification"
+  },
+  {
+    "name": "mail.smtp.starttls.enable",
+    "isRequired": false,
+    "isReconfigurable": true,
+    "isOverridable": false,
+    "isVisible": false,
+    "serviceName": "MISC",
+    "category": "Notifications",
+    "rowStyleClass": "indent-1",
+    "filename": "alert_notification"
+  },
+  {
+    "name": "mail.smtp.startssl.enable",
+    "isRequired": false,
+    "isReconfigurable": true,
+    "isOverridable": false,
+    "isVisible": false,
+    "serviceName": "MISC",
+    "category": "Notifications",
+    "rowStyleClass": "indent-1",
+    "filename": "alert_notification"
+  }
+];

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/services/accumulo_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/services/accumulo_properties.js b/ambari-web/app/data/configs/services/accumulo_properties.js
new file mode 100644
index 0000000..372b6b4
--- /dev/null
+++ b/ambari-web/app/data/configs/services/accumulo_properties.js
@@ -0,0 +1,116 @@
+/**
+ * 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.
+ */
+
+module.exports = [
+  {
+    "category": "General",
+    "filename": "accumulo-env.xml",
+    "name": "accumulo_instance_name",
+    "serviceName": "ACCUMULO"
+  },
+  {
+    "category": "General",
+    "filename": "accumulo-env.xml",
+    "name": "accumulo_root_password",
+    "serviceName": "ACCUMULO"
+  },
+  {
+    "category": "General",
+    "filename": "accumulo-site.xml",
+    "name": "trace.user",
+    "serviceName": "ACCUMULO"
+  },
+  {
+    "category": "General",
+    "filename": "accumulo-env.xml",
+    "name": "trace_password",
+    "serviceName": "ACCUMULO"
+  },
+  {
+    "category": "General",
+    "filename": "accumulo-env.xml",
+    "name": "instance_secret",
+    "serviceName": "ACCUMULO"
+  },
+  {
+    "filename": "accumulo-site.xml",
+    "index": 0,
+    "name": "instance.volumes",
+    "serviceName": "ACCUMULO"
+  },
+  {
+    "filename": "accumulo-site.xml",
+    "index": 1,
+    "name": "instance.zookeeper.host",
+    "serviceName": "ACCUMULO"
+  },
+  {
+    "filename": "accumulo-site.xml",
+    "index": 2,
+    "name": "instance.zookeeper.timeout",
+    "serviceName": "ACCUMULO"
+  },
+  {
+    "filename": "accumulo-site.xml",
+    "index": 3,
+    "name": "master.port.client",
+    "serviceName": "ACCUMULO"
+  },
+  {
+    "filename": "accumulo-site.xml",
+    "index": 4,
+    "name": "tserver.port.client",
+    "serviceName": "ACCUMULO"
+  },
+  {
+    "filename": "accumulo-site.xml",
+    "index": 5,
+    "name": "monitor.port.client",
+    "serviceName": "ACCUMULO"
+  },
+  {
+    "filename": "accumulo-site.xml",
+    "index": 6,
+    "name": "monitor.port.log4j",
+    "serviceName": "ACCUMULO"
+  },
+  {
+    "filename": "accumulo-site.xml",
+    "index": 7,
+    "name": "gc.port.client",
+    "serviceName": "ACCUMULO"
+  },
+  {
+    "filename": "accumulo-site.xml",
+    "index": 8,
+    "name": "trace.port.client",
+    "serviceName": "ACCUMULO"
+  },
+  {
+    "filename": "accumulo-site.xml",
+    "index": 9,
+    "name": "tserver.memory.maps.native.enabled",
+    "serviceName": "ACCUMULO"
+  },
+  {
+    "filename": "accumulo-site.xml",
+    "index": 10,
+    "name": "general.classpaths",
+    "serviceName": "ACCUMULO"
+  }
+];
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/services/ambari_infra_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/services/ambari_infra_properties.js b/ambari-web/app/data/configs/services/ambari_infra_properties.js
new file mode 100644
index 0000000..0f69a62
--- /dev/null
+++ b/ambari-web/app/data/configs/services/ambari_infra_properties.js
@@ -0,0 +1,167 @@
+/**
+ * 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.
+ */
+
+module.exports = [
+  {
+    "category": "Advanced infra-solr-client-log4j",
+    "filename": "infra-solr-client-log4j.xml",
+    "index": 1,
+    "name": "infra_solr_client_log_dir",
+    "serviceName": "AMBARI_INFRA"
+  },
+  {
+    "category": "Advanced infra-solr-client-log4j",
+    "filename": "infra-solr-client-log4j.xml",
+    "index": 2,
+    "name": "content",
+    "serviceName": "AMBARI_INFRA"
+  },
+  {
+    "category": "Advanced infra-solr-env",
+    "filename": "infra-solr-env.xml",
+    "index": 1,
+    "name": "infra_solr_log_dir",
+    "serviceName": "AMBARI_INFRA"
+  },
+  {
+    "category": "Advanced infra-solr-env",
+    "filename": "infra-solr-env.xml",
+    "index": 2,
+    "name": "infra_solr_pid_dir",
+    "serviceName": "AMBARI_INFRA"
+  },
+  {
+    "category": "Advanced infra-solr-env",
+    "filename": "infra-solr-env.xml",
+    "index": 3,
+    "name": "infra_solr_port",
+    "serviceName": "AMBARI_INFRA"
+  },
+  {
+    "category": "Advanced infra-solr-env",
+    "filename": "infra-solr-env.xml",
+    "index": 4,
+    "name": "infra_solr_jmx_port",
+    "serviceName": "AMBARI_INFRA"
+  },
+  {
+    "category": "Advanced infra-solr-env",
+    "filename": "infra-solr-env.xml",
+    "index": 5,
+    "name": "infra_solr_ssl_enabled",
+    "serviceName": "AMBARI_INFRA"
+  },
+  {
+    "category": "Advanced infra-solr-env",
+    "filename": "infra-solr-env.xml",
+    "index": 6,
+    "name": "infra_solr_truststore_location",
+    "serviceName": "AMBARI_INFRA"
+  },
+  {
+    "category": "Advanced infra-solr-env",
+    "filename": "infra-solr-env.xml",
+    "index": 7,
+    "name": "infra_solr_truststore_type",
+    "serviceName": "AMBARI_INFRA"
+  },
+  {
+    "category": "Advanced infra-solr-env",
+    "filename": "infra-solr-env.xml",
+    "index": 8,
+    "name": "infra_solr_truststore_password",
+    "serviceName": "AMBARI_INFRA"
+  },
+  {
+    "category": "Advanced infra-solr-env",
+    "filename": "infra-solr-env.xml",
+    "index": 9,
+    "name": "infra_solr_keystore_location",
+    "serviceName": "AMBARI_INFRA"
+  },
+  {
+    "category": "Advanced infra-solr-env",
+    "filename": "infra-solr-env.xml",
+    "index": 10,
+    "name": "infra_solr_keystore_type",
+    "serviceName": "AMBARI_INFRA"
+  },
+  {
+    "category": "Advanced infra-solr-env",
+    "filename": "infra-solr-env.xml",
+    "index": 11,
+    "name": "infra_solr_keystore_password",
+    "serviceName": "AMBARI_INFRA"
+  },
+  {
+    "category": "Advanced infra-solr-env",
+    "filename": "infra-solr-env.xml",
+    "index": 12,
+    "name": "infra_solr_kerberos_keytab",
+    "serviceName": "AMBARI_INFRA"
+  },
+  {
+    "category": "Advanced infra-solr-env",
+    "filename": "infra-solr-env.xml",
+    "index": 13,
+    "name": "infra_solr_kerberos_principal",
+    "serviceName": "AMBARI_INFRA"
+  },
+  {
+    "category": "Advanced infra-solr-env",
+    "filename": "infra-solr-env.xml",
+    "index": 14,
+    "name": "infra_solr_web_kerberos_keytab",
+    "serviceName": "AMBARI_INFRA"
+  },
+  {
+    "category": "Advanced infra-solr-env",
+    "filename": "infra-solr-env.xml",
+    "index": 15,
+    "name": "infra_solr_web_kerberos_principal",
+    "serviceName": "AMBARI_INFRA"
+  },
+  {
+    "category": "Advanced infra-solr-env",
+    "filename": "infra-solr-env.xml",
+    "index": 16,
+    "name": "infra_solr_kerberos_name_rules",
+    "serviceName": "AMBARI_INFRA"
+  },
+  {
+    "category": "Advanced infra-solr-env",
+    "filename": "infra-solr-env.xml",
+    "index": 17,
+    "name": "content",
+    "serviceName": "AMBARI_INFRA"
+  },
+  {
+    "category": "Advanced infra-solr-log4j",
+    "filename": "infra-solr-log4j.xml",
+    "index": 1,
+    "name": "content",
+    "serviceName": "AMBARI_INFRA"
+  },
+  {
+    "category": "Advanced infra-solr-xml",
+    "filename": "infra-solr-xml.xml",
+    "index": 1,
+    "name": "content",
+    "serviceName": "AMBARI_INFRA"
+  }
+];
\ No newline at end of file


[33/47] ambari git commit: AMBARI-18968. Ambari Server Unit Test failure: org.apache.ambari.server.state.ServicePropertiesTest.validatePropertySchemaOfServiceXMLs (alejandro)

Posted by jo...@apache.org.
AMBARI-18968. Ambari Server Unit Test failure: org.apache.ambari.server.state.ServicePropertiesTest.validatePropertySchemaOfServiceXMLs (alejandro)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: b59dc1dd0daff5da65622c8237cd9ecfba605734
Parents: bd2cd4a
Author: Alejandro Fernandez <af...@hortonworks.com>
Authored: Tue Nov 22 15:57:58 2016 -0800
Committer: Alejandro Fernandez <af...@hortonworks.com>
Committed: Wed Nov 23 10:42:28 2016 -0800

----------------------------------------------------------------------
 .../PERF/1.0/configuration/cluster-env.xml      |   6 +-
 .../GRUMPY/configuration/grumpy-site.xml        |   2 +-
 .../services/HAPPY/configuration/happy-site.xml |   2 +-
 .../services/HBASE/configuration/hbase-env.xml  |  30 ++--
 .../HBASE/configuration/hbase-log4j.xml         |   2 +-
 .../configuration/hbase-logsearch-conf.xml      |   6 +-
 .../HBASE/configuration/hbase-policy.xml        |   6 +-
 .../services/HBASE/configuration/hbase-site.xml |  74 ++++-----
 .../services/HDFS/configuration/core-site.xml   |  32 ++--
 .../services/HDFS/configuration/hadoop-env.xml  |  44 +++---
 .../hadoop-metrics2.properties.xml              |   2 +-
 .../HDFS/configuration/hadoop-policy.xml        |  22 +--
 .../services/HDFS/configuration/hdfs-log4j.xml  |   2 +-
 .../HDFS/configuration/hdfs-logsearch-conf.xml  |   6 +-
 .../services/HDFS/configuration/hdfs-site.xml   | 108 ++++++-------
 .../services/HDFS/configuration/ssl-client.xml  |  14 +-
 .../services/HDFS/configuration/ssl-server.xml  |  16 +-
 .../SLEEPY/configuration/sleepy-site.xml        |   2 +-
 .../services/SNOW/configuration/snow-site.xml   |   2 +-
 .../YARN/configuration-mapred/mapred-env.xml    |   2 +-
 .../YARN/configuration-mapred/mapred-site.xml   |  28 ++--
 .../services/YARN/configuration/yarn-env.xml    |   8 +-
 .../services/YARN/configuration/yarn-log4j.xml  |   2 +-
 .../services/YARN/configuration/yarn-site.xml   | 150 +++++++++----------
 24 files changed, 284 insertions(+), 284 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/b59dc1dd/ambari-server/src/main/resources/stacks/PERF/1.0/configuration/cluster-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/configuration/cluster-env.xml b/ambari-server/src/main/resources/stacks/PERF/1.0/configuration/cluster-env.xml
index a87d37e..7d6dac4 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/configuration/cluster-env.xml
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/configuration/cluster-env.xml
@@ -34,7 +34,7 @@
       <overridable>false</overridable>
       <visible>false</visible>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 
   <!-- Define stack_features property in the base stack. DO NOT override this property for each stack version -->
@@ -50,7 +50,7 @@
       <overridable>false</overridable>
       <visible>false</visible>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 
   <property>
@@ -69,7 +69,7 @@
     <name>security_enabled</name>
     <value>false</value>
     <description>Security</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/b59dc1dd/ambari-server/src/main/resources/stacks/PERF/1.0/services/GRUMPY/configuration/grumpy-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/GRUMPY/configuration/grumpy-site.xml b/ambari-server/src/main/resources/stacks/PERF/1.0/services/GRUMPY/configuration/grumpy-site.xml
index 2d4c442..7952789 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/GRUMPY/configuration/grumpy-site.xml
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/GRUMPY/configuration/grumpy-site.xml
@@ -31,6 +31,6 @@
       <maximum>100</maximum>
       <increment-step>10</increment-step>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/b59dc1dd/ambari-server/src/main/resources/stacks/PERF/1.0/services/HAPPY/configuration/happy-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HAPPY/configuration/happy-site.xml b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HAPPY/configuration/happy-site.xml
index 7d521b8..67762a5 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HAPPY/configuration/happy-site.xml
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HAPPY/configuration/happy-site.xml
@@ -31,6 +31,6 @@
       <maximum>100</maximum>
       <increment-step>10</increment-step>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/b59dc1dd/ambari-server/src/main/resources/stacks/PERF/1.0/services/HBASE/configuration/hbase-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HBASE/configuration/hbase-env.xml b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HBASE/configuration/hbase-env.xml
index cb14a86..d3dda94 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HBASE/configuration/hbase-env.xml
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HBASE/configuration/hbase-env.xml
@@ -30,7 +30,7 @@
       <type>directory</type>
       <overridable>false</overridable>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase_regionserver_heapsize</name>
@@ -44,7 +44,7 @@
       <unit>MB</unit>
       <increment-step>256</increment-step>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase_master_heapsize</name>
@@ -58,19 +58,19 @@
       <unit>MB</unit>
       <increment-step>256</increment-step>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase_user_nofile_limit</name>
     <value>32000</value>
     <description>Max open files limit setting for HBASE user.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase_user_nproc_limit</name>
     <value>16000</value>
     <description>Max number of processes limit setting for HBASE user.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase_java_io_tmpdir</name>
@@ -79,17 +79,17 @@
     <value-attributes>
       <type>directory</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase_principal_name</name>
     <description>HBase principal name</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase_user_keytab</name>
     <description>HBase keytab path</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase_regionserver_shutdown_timeout</name>
@@ -117,7 +117,7 @@
       <type>directory</type>
       <overridable>false</overridable>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase_pid_dir</name>
@@ -129,7 +129,7 @@
       <overridable>false</overridable>
       <editable-only-at-install>true</editable-only-at-install>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase_regionserver_xmn_max</name>
@@ -144,7 +144,7 @@
       <type>int</type>
       <unit>MB</unit>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase_regionserver_xmn_ratio</name>
@@ -154,7 +154,7 @@
     <value-attributes>
       <type>float</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase_user</name>
@@ -166,7 +166,7 @@
       <type>user</type>
       <overridable>false</overridable>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase_max_direct_memory_size</name>
@@ -197,7 +197,7 @@
       </entries>
       <selection-cardinality>1</selection-cardinality>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 
   <!-- These properties exist in HDP 2.3 and higher. -->
@@ -287,6 +287,6 @@ export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS {% if hbase_max_direct_memory_size
     <value-attributes>
       <type>content</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/b59dc1dd/ambari-server/src/main/resources/stacks/PERF/1.0/services/HBASE/configuration/hbase-log4j.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HBASE/configuration/hbase-log4j.xml b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HBASE/configuration/hbase-log4j.xml
index 8495de1..880e883 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HBASE/configuration/hbase-log4j.xml
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HBASE/configuration/hbase-log4j.xml
@@ -141,6 +141,6 @@ log4j.logger.org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher=INFO
       <type>content</type>
       <show-property-name>false</show-property-name>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/b59dc1dd/ambari-server/src/main/resources/stacks/PERF/1.0/services/HBASE/configuration/hbase-logsearch-conf.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HBASE/configuration/hbase-logsearch-conf.xml b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HBASE/configuration/hbase-logsearch-conf.xml
index 321ea4e..7c481f2 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HBASE/configuration/hbase-logsearch-conf.xml
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HBASE/configuration/hbase-logsearch-conf.xml
@@ -25,14 +25,14 @@
     <display-name>Service name</display-name>
     <description>Service name for Logsearch Portal (label)</description>
     <value>HBase</value>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>component_mappings</name>
     <display-name>Component mapping</display-name>
     <description>Logsearch component logid mapping list (e.g.: COMPONENT1:logid1,logid2;COMPONENT2:logid3)</description>
     <value>HBASE_MASTER:hbase_master;HBASE_REGIONSERVER:hbase_regionserver;PHOENIX_QUERY_SERVER:hbase_phoenix_server</value>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>content</name>
@@ -106,6 +106,6 @@
       <type>content</type>
       <show-property-name>false</show-property-name>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/b59dc1dd/ambari-server/src/main/resources/stacks/PERF/1.0/services/HBASE/configuration/hbase-policy.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HBASE/configuration/hbase-policy.xml b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HBASE/configuration/hbase-policy.xml
index c1112bc..8500ee0 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HBASE/configuration/hbase-policy.xml
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HBASE/configuration/hbase-policy.xml
@@ -28,7 +28,7 @@
     The ACL is a comma-separated list of user and group names. The user and 
     group list is separated by a blank. For e.g. "alice,bob users,wheel". 
     A special value of "*" means all users are allowed.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>security.admin.protocol.acl</name>
@@ -38,7 +38,7 @@
     The ACL is a comma-separated list of user and group names. The user and 
     group list is separated by a blank. For e.g. "alice,bob users,wheel". 
     A special value of "*" means all users are allowed.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>security.masterregion.protocol.acl</name>
@@ -48,6 +48,6 @@
     The ACL is a comma-separated list of user and group names. The user and 
     group list is separated by a blank. For e.g. "alice,bob users,wheel". 
     A special value of "*" means all users are allowed.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/b59dc1dd/ambari-server/src/main/resources/stacks/PERF/1.0/services/HBASE/configuration/hbase-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HBASE/configuration/hbase-site.xml b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HBASE/configuration/hbase-site.xml
index 99abdde..058facd 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HBASE/configuration/hbase-site.xml
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HBASE/configuration/hbase-site.xml
@@ -42,7 +42,7 @@
       false, startup will run all HBase and ZooKeeper daemons together
       in the one JVM.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase.tmp.dir</name>
@@ -56,21 +56,21 @@
     <value-attributes>
       <type>directory</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase.local.dir</name>
     <value>${hbase.tmp.dir}/local</value>
     <description>Directory on the local filesystem to be used as a local storage
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase.master.info.bindAddress</name>
     <value>0.0.0.0</value>
     <description>The bind address for the HBase Master web UI
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase.regionserver.handler.count</name>
@@ -86,7 +86,7 @@
       <maximum>240</maximum>
       <increment-step>1</increment-step>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase.hregion.majorcompaction</name>
@@ -101,7 +101,7 @@
       <maximum>2592000000</maximum>
       <unit>milliseconds</unit>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 
   <property>
@@ -127,7 +127,7 @@
       </entries>
       <selection-cardinality>1</selection-cardinality>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase.hregion.memstore.flush.size</name>
@@ -143,7 +143,7 @@
       <increment-step>1048576</increment-step>
       <unit>B</unit>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase.hregion.memstore.mslab.enabled</name>
@@ -157,7 +157,7 @@
     <value-attributes>
       <type>boolean</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase.hregion.max.filesize</name>
@@ -174,7 +174,7 @@
       <unit>B</unit>
       <increment-step>1073741824</increment-step>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase.client.scanner.caching</name>
@@ -194,7 +194,7 @@
       <increment-step>100</increment-step>
       <unit>rows</unit>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>zookeeper.session.timeout</name>
@@ -218,7 +218,7 @@
       <unit>milliseconds</unit>
       <increment-step>10000</increment-step>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase.client.keyvalue.maxsize</name>
@@ -239,7 +239,7 @@
       <unit>B</unit>
       <increment-step>262144</increment-step>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase.hstore.compactionThreshold</name>
@@ -266,7 +266,7 @@
         </entry>
       </entries>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase.hstore.flush.retries.number</name>
@@ -274,7 +274,7 @@
     <description>
       The number of times the region flush operation will be retried.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase.hstore.blockingStoreFiles</name>
@@ -289,7 +289,7 @@
     <value-attributes>
       <type>int</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hfile.block.cache.size</name>
@@ -302,7 +302,7 @@
       <maximum>0.8</maximum>
       <increment-step>0.01</increment-step>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <!-- Additional configuration specific to HBase security -->
   <property>
@@ -318,7 +318,7 @@
         <name>hbase_user</name>
       </property>
     </depends-on>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase.security.authentication</name>
@@ -341,7 +341,7 @@
       </entries>
       <selection-cardinality>1</selection-cardinality>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase.security.authorization</name>
@@ -362,7 +362,7 @@
       </entries>
       <selection-cardinality>1</selection-cardinality>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase.coprocessor.region.classes</name>
@@ -386,7 +386,7 @@
         <name>hbase.security.authentication</name>
       </property>
     </depends-on>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase.coprocessor.master.classes</name>
@@ -407,7 +407,7 @@
         <name>hbase.security.authorization</name>
       </property>
     </depends-on>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase.zookeeper.property.clientPort</name>
@@ -415,7 +415,7 @@
     <description>Property from ZooKeeper's config zoo.cfg.
       The port at which the clients will connect.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <!--
   The following three properties are used together to create the list of
@@ -434,7 +434,7 @@
     <value-attributes>
       <type>multiLine</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <!-- End of properties used to generate ZooKeeper host:port quorum list. -->
   <property>
@@ -447,7 +447,7 @@
       and will not be downgraded.  ZooKeeper versions before 3.4 do not support multi-update and will
       not fail gracefully if multi-update is invoked (see ZOOKEEPER-1495).
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>zookeeper.znode.parent</name>
@@ -457,7 +457,7 @@
       By default, all of HBase's ZooKeeper file path are configured with a
       relative path, so they will all go under this directory unless changed.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase.client.retries.number</name>
@@ -475,7 +475,7 @@
       <maximum>50</maximum>
       <increment-step>1</increment-step>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase.rpc.timeout</name>
@@ -493,13 +493,13 @@
       <unit>milliseconds</unit>
       <increment-step>10000</increment-step>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase.defaults.for.version.skip</name>
     <value>true</value>
     <description>Disables version verification.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>phoenix.query.timeoutMs</name>
@@ -513,18 +513,18 @@
       <unit>milliseconds</unit>
       <increment-step>10000</increment-step>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.domain.socket.path</name>
     <value>/var/lib/hadoop-hdfs/dn_socket</value>
     <description>Path to domain socket.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase.rpc.protection</name>
     <value>authentication</value>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   
   <!-- These properties exist in HDP 2.3 and higher. -->
@@ -537,25 +537,25 @@
       <overridable>false</overridable>
       <type>int</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase.master.info.port</name>
     <value>16010</value>
     <description>The port for the HBase Master web UI.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase.regionserver.port</name>
     <value>16020</value>
     <description>The port the HBase RegionServer binds to.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hbase.regionserver.info.port</name>
     <value>16030</value>
     <description>The port for the HBase RegionServer web UI.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 
 
@@ -563,7 +563,7 @@
   <property>
     <name>hbase.master.ui.readonly</name>
     <value>false</value>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>zookeeper.recovery.retry</name>

http://git-wip-us.apache.org/repos/asf/ambari/blob/b59dc1dd/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/core-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/core-site.xml b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/core-site.xml
index 6c12e07..8375be1 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/core-site.xml
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/core-site.xml
@@ -23,7 +23,7 @@
     <name>ha.failover-controller.active-standby-elector.zk.op.retries</name>
     <value>120</value>
     <description>ZooKeeper Failover Controller retries setting for your environment</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <!-- i/o properties -->
   <property>
@@ -33,21 +33,21 @@
       The size of this buffer should probably be a multiple of hardware
       page size (4096 on Intel x86), and it determines how much data is
       buffered during read and write operations.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>io.serializations</name>
     <value>org.apache.hadoop.io.serializer.WritableSerialization</value>
     <description> A list of comma-delimited serialization classes that can be used for obtaining serializers and deserializers.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>io.compression.codecs</name>
     <value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.SnappyCodec</value>
     <description>A list of the compression codec classes that can be used
       for compression/decompression.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <!-- file system properties -->
   <property>
@@ -68,7 +68,7 @@
       If trash is disabled server side then the client side configuration is checked.
       If trash is enabled on the server side then the value configured on the server is used and the client configuration value is ignored.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <!-- ipc properties: copied from kryptonite configuration -->
   <property>
@@ -77,7 +77,7 @@
     <description>Defines the threshold number of connections after which
       connections will be inspected for idleness.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>ipc.client.connection.maxidletime</name>
@@ -85,13 +85,13 @@
     <description>The maximum time after which a client will bring down the
       connection to the server.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>ipc.client.connect.max.retries</name>
     <value>50</value>
     <description>Defines the maximum number of retries for IPC connections.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>ipc.server.tcpnodelay</name>
@@ -102,7 +102,7 @@
       decrease latency
       with a cost of more/smaller packets.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <!-- Web Interface Configuration -->
   <property>
@@ -113,7 +113,7 @@
       not be exposed to public. Enable this option if the interfaces
       are only reachable by those who have the right authorization.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hadoop.security.authentication</name>
@@ -122,7 +122,7 @@
       Set the authentication for the cluster. Valid values are: simple or
       kerberos.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hadoop.security.authorization</name>
@@ -130,7 +130,7 @@
     <description>
       Enable authorization for different protocols.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hadoop.security.auth_to_local</name>
@@ -176,7 +176,7 @@
     <value-attributes>
       <type>multiLine</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>net.topology.script.file.name</name>
@@ -184,7 +184,7 @@
     <description>
       Location of topology script used by Hadoop to determine the rack location of nodes.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 
   <!-- Properties from HDP 2.2 and higher -->
@@ -194,7 +194,7 @@
     <description>
       Indicates if anonymous requests are allowed when using &apos;simple&apos; authentication.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hadoop.security.key.provider.path</name>
@@ -220,6 +220,6 @@
         <name>ranger.service.https.attrib.ssl.enabled</name>
       </property>
     </depends-on>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/b59dc1dd/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hadoop-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hadoop-env.xml b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hadoop-env.xml
index 51cbf4a..3be63be 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hadoop-env.xml
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hadoop-env.xml
@@ -30,7 +30,7 @@
       <type>directory</type>
       <overridable>false</overridable>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hadoop_pid_dir_prefix</name>
@@ -42,7 +42,7 @@
       <overridable>false</overridable>
       <editable-only-at-install>true</editable-only-at-install>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hadoop_root_logger</name>
@@ -52,7 +52,7 @@
     <value-attributes>
       <overridable>false</overridable>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hadoop_heapsize</name>
@@ -64,7 +64,7 @@
       <unit>MB</unit>
       <overridable>false</overridable>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>namenode_heapsize</name>
@@ -85,7 +85,7 @@
         <name>dfs.datanode.data.dir</name>
       </property>
     </depends-on>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>namenode_opt_newsize</name>
@@ -106,7 +106,7 @@
       <increment-step>256</increment-step>
       <overridable>false</overridable>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>namenode_opt_maxnewsize</name>
@@ -127,7 +127,7 @@
       <increment-step>256</increment-step>
       <overridable>false</overridable>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>namenode_opt_permsize</name>
@@ -142,7 +142,7 @@
       <increment-step>128</increment-step>
       <overridable>false</overridable>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>namenode_opt_maxpermsize</name>
@@ -157,7 +157,7 @@
       <increment-step>128</increment-step>
       <overridable>false</overridable>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dtnode_heapsize</name>
@@ -171,7 +171,7 @@
       <unit>MB</unit>
       <increment-step>128</increment-step>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>proxyuser_group</name>
@@ -183,7 +183,7 @@
       <type>user</type>
       <overridable>false</overridable>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hdfs_user</name>
@@ -195,7 +195,7 @@
       <type>user</type>
       <overridable>false</overridable>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hdfs_tmp_dir</name>
@@ -208,35 +208,35 @@
       <overridable>false</overridable>
       <visible>false</visible>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hdfs_user_nofile_limit</name>
     <value>128000</value>
     <description>Max open files limit setting for HDFS user.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hdfs_user_nproc_limit</name>
     <value>65536</value>
     <description>Max number of processes limit setting for HDFS user.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>namenode_backup_dir</name>
     <description>Local directory for storing backup copy of NameNode images during upgrade</description>
     <value>/tmp/upgrades</value>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hdfs_user_keytab</name>
     <description>HDFS keytab path</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>hdfs_principal_name</name>
     <description>HDFS principal name</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 
   <!-- These properties exist in HDP 2.2 and higher. -->
@@ -248,7 +248,7 @@
     <value-attributes>
       <type>string</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>keyserver_port</name>
@@ -259,7 +259,7 @@
       <type>int</type>
       <empty-value-valid>true</empty-value-valid>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 
   <!-- These properties exist in HDP 2.3 and higher. -->
@@ -403,7 +403,7 @@ fi
     <value-attributes>
       <type>content</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>nfsgateway_heapsize</name>
@@ -414,6 +414,6 @@ fi
       <type>int</type>
       <unit>MB</unit>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/b59dc1dd/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hadoop-metrics2.properties.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hadoop-metrics2.properties.xml b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hadoop-metrics2.properties.xml
index 6b45e84..4aadb83 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hadoop-metrics2.properties.xml
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hadoop-metrics2.properties.xml
@@ -120,6 +120,6 @@ namenode.sink.timeline.metric.rpc.healthcheck.port={{nn_rpc_healthcheck_port}}
     <value-attributes>
       <type>content</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/b59dc1dd/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hadoop-policy.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hadoop-policy.xml b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hadoop-policy.xml
index 8e9486d..9193bad 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hadoop-policy.xml
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hadoop-policy.xml
@@ -26,7 +26,7 @@
     The ACL is a comma-separated list of user and group names. The user and
     group list is separated by a blank. For e.g. "alice,bob users,wheel".
     A special value of "*" means all users are allowed.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>security.client.datanode.protocol.acl</name>
@@ -36,7 +36,7 @@
     The ACL is a comma-separated list of user and group names. The user and
     group list is separated by a blank. For e.g. "alice,bob users,wheel".
     A special value of "*" means all users are allowed.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>security.datanode.protocol.acl</name>
@@ -46,7 +46,7 @@
     The ACL is a comma-separated list of user and group names. The user and
     group list is separated by a blank. For e.g. "alice,bob users,wheel".
     A special value of "*" means all users are allowed.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>security.inter.datanode.protocol.acl</name>
@@ -56,7 +56,7 @@
     The ACL is a comma-separated list of user and group names. The user and
     group list is separated by a blank. For e.g. "alice,bob users,wheel".
     A special value of "*" means all users are allowed.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>security.namenode.protocol.acl</name>
@@ -66,7 +66,7 @@
     The ACL is a comma-separated list of user and group names. The user and
     group list is separated by a blank. For e.g. "alice,bob users,wheel".
     A special value of "*" means all users are allowed.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>security.inter.tracker.protocol.acl</name>
@@ -76,7 +76,7 @@
     The ACL is a comma-separated list of user and group names. The user and
     group list is separated by a blank. For e.g. "alice,bob users,wheel".
     A special value of "*" means all users are allowed.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>security.job.client.protocol.acl</name>
@@ -86,7 +86,7 @@
     The ACL is a comma-separated list of user and group names. The user and
     group list is separated by a blank. For e.g. "alice,bob users,wheel".
     A special value of "*" means all users are allowed.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>security.job.task.protocol.acl</name>
@@ -96,7 +96,7 @@
     The ACL is a comma-separated list of user and group names. The user and
     group list is separated by a blank. For e.g. "alice,bob users,wheel".
     A special value of "*" means all users are allowed.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>security.admin.operations.protocol.acl</name>
@@ -105,7 +105,7 @@
     The ACL is a comma-separated list of user and group names. The user and
     group list is separated by a blank. For e.g. "alice,bob users,wheel".
     A special value of "*" means all users are allowed.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>security.refresh.usertogroups.mappings.protocol.acl</name>
@@ -115,7 +115,7 @@
     group names. The user and group list is separated by a blank. For
     e.g. "alice,bob users,wheel".  A special value of "*" means all
     users are allowed.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>security.refresh.policy.protocol.acl</name>
@@ -125,6 +125,6 @@
     The ACL is a comma-separated list of user and group names. The user and
     group list is separated by a blank. For e.g. "alice,bob users,wheel".
     A special value of "*" means all users are allowed.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/b59dc1dd/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hdfs-log4j.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hdfs-log4j.xml b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hdfs-log4j.xml
index 4bf4cfe..a4eacc2 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hdfs-log4j.xml
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hdfs-log4j.xml
@@ -220,6 +220,6 @@ log4j.logger.org.apache.hadoop.conf.Configuration.deprecation=WARN
       <type>content</type>
       <show-property-name>false</show-property-name>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/b59dc1dd/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hdfs-logsearch-conf.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hdfs-logsearch-conf.xml b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hdfs-logsearch-conf.xml
index d85a028..6540c86 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hdfs-logsearch-conf.xml
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hdfs-logsearch-conf.xml
@@ -25,14 +25,14 @@
     <display-name>Service name</display-name>
     <description>Service name for Logsearch Portal (label)</description>
     <value>HDFS</value>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>component_mappings</name>
     <display-name>Component mapping</display-name>
     <description>Logsearch component logid mapping list (e.g.: COMPONENT1:logid1,logid2;COMPONENT2:logid3)</description>
     <value>NAMENODE:hdfs_namenode;DATANODE:hdfs_datanode;SECONDARY_NAMENODE:hdfs_secondarynamenode;JOURNALNODE:hdfs_journalnode;ZKFC:hdfs_zkfc;NFS_GATEWAY:hdfs_nfs3</value>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>content</name>
@@ -243,6 +243,6 @@
       <type>content</type>
       <show-property-name>false</show-property-name>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/b59dc1dd/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hdfs-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hdfs-site.xml b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hdfs-site.xml
index 8912682..995632f 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hdfs-site.xml
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/hdfs-site.xml
@@ -34,14 +34,14 @@
       <type>directories</type>
       <overridable>false</overridable>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.support.append</name>
     <value>true</value>
     <description>to enable dfs append</description>
     <final>true</final>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.webhdfs.enabled</name>
@@ -53,7 +53,7 @@
       <type>boolean</type>
       <overridable>false</overridable>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.datanode.failed.volumes.tolerated</name>
@@ -73,7 +73,7 @@
         <name>dfs.datanode.data.dir</name>
       </property>
     </depends-on>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.datanode.data.dir</name>
@@ -89,7 +89,7 @@
     <value-attributes>
       <type>directories</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.hosts.exclude</name>
@@ -98,7 +98,7 @@
       not permitted to connect to the namenode.  The full pathname of the
       file must be specified.  If the value is empty, no hosts are
       excluded.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <!--
     <property>
@@ -123,7 +123,7 @@
       <type>directories</type>
       <overridable>false</overridable>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.namenode.checkpoint.edits.dir</name>
@@ -134,7 +134,7 @@
       replicated in all of the directories for redundancy.
       Default value is same as dfs.namenode.checkpoint.dir
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.namenode.checkpoint.period</name>
@@ -145,7 +145,7 @@
       <type>int</type>
       <unit>seconds</unit>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.namenode.checkpoint.txns</name>
@@ -154,14 +154,14 @@
       of the namespace every 'dfs.namenode.checkpoint.txns' transactions,
       regardless of whether 'dfs.namenode.checkpoint.period' has expired.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.replication.max</name>
     <value>50</value>
     <description>Maximal block replication.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.replication</name>
@@ -172,13 +172,13 @@
     <value-attributes>
       <type>int</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.heartbeat.interval</name>
     <value>3</value>
     <description>Determines datanode heartbeat interval in seconds.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.namenode.safemode.threshold-pct</name>
@@ -196,7 +196,7 @@
       <maximum>1.000</maximum>
       <increment-step>0.001</increment-step>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.datanode.balance.bandwidthPerSec</name>
@@ -206,7 +206,7 @@
       can utilize for the balancing purpose in term of
       the number of bytes per second.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.https.port</name>
@@ -214,7 +214,7 @@
     <description>
       This property is used by HftpFileSystem.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.datanode.address</name>
@@ -222,7 +222,7 @@
     <description>
       The datanode server address and port for data transfer.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.datanode.http.address</name>
@@ -230,7 +230,7 @@
     <description>
       The datanode http server address and port.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.datanode.https.address</name>
@@ -238,13 +238,13 @@
     <description>
       The datanode https server address and port.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.blocksize</name>
     <value>134217728</value>
     <description>The default block size for new files.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.namenode.http-address</name>
@@ -277,7 +277,7 @@
         <name>dfs.datanode.data.dir</name>
       </property>
     </depends-on>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.datanode.ipc.address</name>
@@ -286,13 +286,13 @@
       The datanode ipc server address and port.
       If the port is 0 then the server will start on a free port.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.blockreport.initialDelay</name>
     <value>120</value>
     <description>Delay for first block report in seconds.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.datanode.max.transfer.threads</name>
@@ -304,7 +304,7 @@
       <minimum>0</minimum>
       <maximum>48000</maximum>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <!-- Permissions configuration -->
   <property>
@@ -313,7 +313,7 @@
     <description>
       The octal umask used when creating files and directories.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.permissions.enabled</name>
@@ -325,13 +325,13 @@
       Switching from one parameter value to the other does not change the mode,
       owner or group of files or directories.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.permissions.superusergroup</name>
     <value>hdfs</value>
     <description>The name of the group of super-users.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.namenode.handler.count</name>
@@ -343,7 +343,7 @@
       <minimum>1</minimum>
       <maximum>200</maximum>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.block.access.token.enable</name>
@@ -352,7 +352,7 @@
       If "true", access tokens are used as capabilities for accessing datanodes.
       If "false", no access tokens are checked on accessing datanodes.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <!-- cluster variant -->
@@ -378,7 +378,7 @@
     <value-attributes>
       <type>int</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.namenode.accesstime.precision</name>
@@ -391,13 +391,13 @@
     <value-attributes>
       <type>int</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.cluster.administrators</name>
     <value> hdfs</value>
     <description>ACL for who all can view the default servlets in the HDFS</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.namenode.avoid.read.stale.datanode</name>
@@ -407,7 +407,7 @@
       heartbeat messages have not been received by the namenode for more than a
       specified time interval.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.namenode.avoid.write.stale.datanode</name>
@@ -417,7 +417,7 @@
       heartbeat messages have not been received by the namenode for more than a
       specified time interval.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.namenode.write.stale.datanode.ratio</name>
@@ -425,27 +425,27 @@
     <description>When the ratio of number stale datanodes to total datanodes marked is greater
       than this ratio, stop avoiding writing to stale nodes so as to prevent causing hotspots.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.namenode.stale.datanode.interval</name>
     <value>30000</value>
     <description>Datanode is stale after not getting a heartbeat in this interval in ms</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.journalnode.http-address</name>
     <value>0.0.0.0:8480</value>
     <description>The address and port the JournalNode web UI listens on.
       If the port is 0 then the server will start on a free port. </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.journalnode.https-address</name>
     <value>0.0.0.0:8481</value>
     <description>The address and port the JournalNode HTTPS server listens on.
       If the port is 0 then the server will start on a free port. </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <!-- HDFS Short-Circuit Local Reads -->
   <property>
@@ -458,7 +458,7 @@
     <value-attributes>
       <type>boolean</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.domain.socket.path</name>
@@ -467,7 +467,7 @@
       This is a path to a UNIX domain socket that will be used for communication between the DataNode and local HDFS clients.
       If the string "_PORT" is present in this path, it will be replaced by the TCP port of the DataNode.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.client.read.shortcircuit.streams.cache.size</name>
@@ -478,14 +478,14 @@
       more file descriptors, but potentially provide better performance on
       workloads involving lots of seeks.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.namenode.name.dir.restore</name>
     <value>true</value>
     <description>Set to true to enable NameNode to attempt recovering a previously failed dfs.namenode.name.dir.
       When enabled, a recovery of any failed directory is attempted during checkpoint.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.http.policy</name>
@@ -495,7 +495,7 @@
       The following values are supported: - HTTP_ONLY : Service is provided only on http - HTTPS_ONLY :
       Service is provided only on https - HTTP_AND_HTTPS : Service is provided both on http and https
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 
   <!-- These properties exist in HDP 2.1 and higher. -->
@@ -503,13 +503,13 @@
     <name>dfs.namenode.audit.log.async</name>
     <value>true</value>
     <description>Whether to enable async auditlog</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.namenode.fslock.fair</name>
     <value>false</value>
     <description>Whether fsLock is fair</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 
   <!-- These properties exist in HDP 2.2 and higher. -->
@@ -524,25 +524,25 @@
       to notice large number of pending deletion blocks and take corrective
       action.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.journalnode.edits.dir</name>
     <value>/hadoop/hdfs/journalnode</value>
     <description>The path where the JournalNode daemon will store its local state. </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.client.retry.policy.enabled</name>
     <value>false</value>
     <description>Enables HDFS client retry in the event of a NameNode failure.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.content-summary.limit</name>
     <value>5000</value>
     <description>Dfs content summary limit.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.encryption.key.provider.uri</name>
@@ -572,7 +572,7 @@
         <name>ranger.service.https.attrib.ssl.enabled</name>
       </property>
     </depends-on>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 
   <!-- These properties exist in HDP 2.3 and higher. -->
@@ -589,7 +589,7 @@
     <value-attributes>
       <type>directory</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>nfs.exports.allowed.hosts</name>
@@ -603,7 +603,7 @@
       by &quot;;&quot;. For example: &quot;192.168.0.0/22 rw ; host*.example.com ; host1.test.org ro;&quot;.
     </description>
     <display-name>Allowed hosts</display-name>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.encrypt.data.transfer.cipher.suites</name>
@@ -614,7 +614,7 @@
       If not defined, then only the algorithm specified in dfs.encrypt.data.transfer.algorithm 
       is used. By default, the property is not defined.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>dfs.namenode.inode.attributes.provider.class</name>
@@ -628,6 +628,6 @@
     <value-attributes>
       <overridable>false</overridable>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/b59dc1dd/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/ssl-client.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/ssl-client.xml b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/ssl-client.xml
index 6ec064a..7e0f265 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/ssl-client.xml
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/ssl-client.xml
@@ -21,13 +21,13 @@
     <name>ssl.client.truststore.location</name>
     <value>/etc/security/clientKeys/all.jks</value>
     <description>Location of the trust store file.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>ssl.client.truststore.type</name>
     <value>jks</value>
     <description>Optional. Default value is "jks".</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>ssl.client.truststore.password</name>
@@ -37,25 +37,25 @@
     <value-attributes>
       <type>password</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>ssl.client.truststore.reload.interval</name>
     <value>10000</value>
     <description>Truststore reload interval, in milliseconds.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>ssl.client.keystore.type</name>
     <value>jks</value>
     <description>Optional. Default value is "jks".</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>ssl.client.keystore.location</name>
     <value>/etc/security/clientKeys/keystore.jks</value>
     <description>Location of the keystore file.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>ssl.client.keystore.password</name>
@@ -65,6 +65,6 @@
     <value-attributes>
       <type>password</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/b59dc1dd/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/ssl-server.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/ssl-server.xml b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/ssl-server.xml
index 5d2745f..2177cef 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/ssl-server.xml
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/HDFS/configuration/ssl-server.xml
@@ -21,13 +21,13 @@
     <name>ssl.server.truststore.location</name>
     <value>/etc/security/serverKeys/all.jks</value>
     <description>Location of the trust store file.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>ssl.server.truststore.type</name>
     <value>jks</value>
     <description>Optional. Default value is "jks".</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>ssl.server.truststore.password</name>
@@ -37,25 +37,25 @@
     <value-attributes>
       <type>password</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>ssl.server.truststore.reload.interval</name>
     <value>10000</value>
     <description>Truststore reload interval, in milliseconds.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>ssl.server.keystore.type</name>
     <value>jks</value>
     <description>Optional. Default value is "jks".</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>ssl.server.keystore.location</name>
     <value>/etc/security/serverKeys/keystore.jks</value>
     <description>Location of the keystore file.</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>ssl.server.keystore.password</name>
@@ -65,7 +65,7 @@
     <value-attributes>
       <type>password</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>ssl.server.keystore.keypassword</name>
@@ -75,6 +75,6 @@
     <value-attributes>
       <type>password</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/b59dc1dd/ambari-server/src/main/resources/stacks/PERF/1.0/services/SLEEPY/configuration/sleepy-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/SLEEPY/configuration/sleepy-site.xml b/ambari-server/src/main/resources/stacks/PERF/1.0/services/SLEEPY/configuration/sleepy-site.xml
index 7d521b8..67762a5 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/SLEEPY/configuration/sleepy-site.xml
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/SLEEPY/configuration/sleepy-site.xml
@@ -31,6 +31,6 @@
       <maximum>100</maximum>
       <increment-step>10</increment-step>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/b59dc1dd/ambari-server/src/main/resources/stacks/PERF/1.0/services/SNOW/configuration/snow-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/SNOW/configuration/snow-site.xml b/ambari-server/src/main/resources/stacks/PERF/1.0/services/SNOW/configuration/snow-site.xml
index 7d521b8..67762a5 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/SNOW/configuration/snow-site.xml
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/SNOW/configuration/snow-site.xml
@@ -31,6 +31,6 @@
       <maximum>100</maximum>
       <increment-step>10</increment-step>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/b59dc1dd/ambari-server/src/main/resources/stacks/PERF/1.0/services/YARN/configuration-mapred/mapred-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/YARN/configuration-mapred/mapred-env.xml b/ambari-server/src/main/resources/stacks/PERF/1.0/services/YARN/configuration-mapred/mapred-env.xml
index 869f44a..fbd056d 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/YARN/configuration-mapred/mapred-env.xml
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/YARN/configuration-mapred/mapred-env.xml
@@ -45,6 +45,6 @@ export JAVA_LIBRARY_PATH="${JAVA_LIBRARY_PATH}:{{hadoop_java_io_tmpdir}}"
     <value-attributes>
       <type>content</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/b59dc1dd/ambari-server/src/main/resources/stacks/PERF/1.0/services/YARN/configuration-mapred/mapred-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/YARN/configuration-mapred/mapred-site.xml b/ambari-server/src/main/resources/stacks/PERF/1.0/services/YARN/configuration-mapred/mapred-site.xml
index 99205f8..fd03b4f 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/YARN/configuration-mapred/mapred-site.xml
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/YARN/configuration-mapred/mapred-site.xml
@@ -27,7 +27,7 @@
       This is not an additive property. You must preserve the original value if
       you want your map and reduce tasks to have access to native libraries (compression, etc)
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>mapreduce.application.classpath</name>
@@ -36,13 +36,13 @@
       CLASSPATH for MR applications. A comma-separated list of CLASSPATH
       entries.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>mapreduce.application.framework.path</name>
     <value>/hdp/apps/${hdp.version}/mapreduce/mapreduce.tar.gz#mr-framework</value>
     <description/>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>yarn.app.mapreduce.am.admin-command-opts</name>
@@ -60,49 +60,49 @@
       of LD_LIBRARY_PATH in the map / reduce JVM env using the mapreduce.map.env and
       mapreduce.reduce.env config settings.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>mapreduce.admin.map.child.java.opts</name>
     <value>-server -XX:NewRatio=8 -Djava.net.preferIPv4Stack=true -Dhdp.version=${hdp.version}</value>
     <description/>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>mapreduce.admin.reduce.child.java.opts</name>
     <value>-server -XX:NewRatio=8 -Djava.net.preferIPv4Stack=true -Dhdp.version=${hdp.version}</value>
     <description/>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>mapreduce.reduce.shuffle.fetch.retry.enabled</name>
     <value>1</value>
     <description/>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>mapreduce.reduce.shuffle.fetch.retry.interval-ms</name>
     <value>1000</value>
     <description/>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>mapreduce.reduce.shuffle.fetch.retry.timeout-ms</name>
     <value>30000</value>
     <description/>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>mapreduce.job.emit-timeline-data</name>
     <value>false</value>
     <description/>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>mapreduce.jobhistory.bind-host</name>
     <value>0.0.0.0</value>
     <description/>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 
   <!-- These properties exist in HDP 2.3 and higher. -->
@@ -113,7 +113,7 @@
       server state upon startup.  If enabled then
       mapreduce.jobhistory.recovery.store.class must be specified.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>mapreduce.jobhistory.recovery.store.class</name>
@@ -121,7 +121,7 @@
     <description>The HistoryServerStateStoreService class to store history server
       state for recovery.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
   <property>
     <name>mapreduce.jobhistory.recovery.store.leveldb.path</name>
@@ -129,6 +129,6 @@
     <description>The URI where history server state will be stored if HistoryServerLeveldbSystemStateStoreService
       is configured as the recovery storage class.
     </description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/b59dc1dd/ambari-server/src/main/resources/stacks/PERF/1.0/services/YARN/configuration/yarn-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/YARN/configuration/yarn-env.xml b/ambari-server/src/main/resources/stacks/PERF/1.0/services/YARN/configuration/yarn-env.xml
index bba8cc4..f81080e 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/YARN/configuration/yarn-env.xml
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/YARN/configuration/yarn-env.xml
@@ -30,7 +30,7 @@
       <unit>MB</unit>
       <type>int</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 
   <!-- These properties exist in HDP 2.2 and higher. -->
@@ -53,7 +53,7 @@
       </entries>
       <selection-cardinality>1</selection-cardinality>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 
   <!-- These properties exist in HDP 2.3 and higher. -->
@@ -61,7 +61,7 @@
     <name>is_supported_yarn_ranger</name>
     <value>true</value>
     <description>Set to false by default,  needs to be set to true in stacks that use Ranger Yarn Plugin</description>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 
   <!-- yarn-env.sh -->
@@ -196,6 +196,6 @@
     <value-attributes>
       <type>content</type>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/b59dc1dd/ambari-server/src/main/resources/stacks/PERF/1.0/services/YARN/configuration/yarn-log4j.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/PERF/1.0/services/YARN/configuration/yarn-log4j.xml b/ambari-server/src/main/resources/stacks/PERF/1.0/services/YARN/configuration/yarn-log4j.xml
index 9ac34f3..5e9ac98 100644
--- a/ambari-server/src/main/resources/stacks/PERF/1.0/services/YARN/configuration/yarn-log4j.xml
+++ b/ambari-server/src/main/resources/stacks/PERF/1.0/services/YARN/configuration/yarn-log4j.xml
@@ -98,6 +98,6 @@ log4j.appender.NMAUDIT.DatePattern=.yyyy-MM-dd
       <type>content</type>
       <show-property-name>false</show-property-name>
     </value-attributes>
-    <on-ambari-upgrade add="true"/>
+    <on-ambari-upgrade add="false"/>
   </property>
 </configuration>


[44/47] ambari git commit: AMBARI-18991 Fix Flume agents table. (ababiichuk)

Posted by jo...@apache.org.
AMBARI-18991 Fix Flume agents table. (ababiichuk)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: 5c002c6408d74b9d7c1a7693f3d01761ed64265a
Parents: 549d7cc
Author: ababiichuk <ab...@hortonworks.com>
Authored: Fri Nov 25 18:34:52 2016 +0200
Committer: ababiichuk <ab...@hortonworks.com>
Committed: Fri Nov 25 19:00:10 2016 +0200

----------------------------------------------------------------------
 ambari-web/app/models/service/flume.js          |   8 +
 ambari-web/app/styles/application.less          | 112 ++++-------
 .../app/styles/theme/bootstrap-ambari.css       |  25 ++-
 .../templates/main/service/services/flume.hbs   | 196 ++++++++-----------
 .../app/views/main/service/services/flume.js    |  32 +--
 ambari-web/test/models/service/flume_test.js    |   6 +
 .../views/main/service/services/flume_test.js   |  17 +-
 7 files changed, 178 insertions(+), 218 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/5c002c64/ambari-web/app/models/service/flume.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/service/flume.js b/ambari-web/app/models/service/flume.js
index d482ab6..37cfbb5 100644
--- a/ambari-web/app/models/service/flume.js
+++ b/ambari-web/app/models/service/flume.js
@@ -49,6 +49,14 @@ App.FlumeAgent = DS.Model.extend({
     UNKNOWN: App.healthIconClassYellow
   },
 
+  healthIconClass: Em.computed.getByKey('healthIconClassMap', 'status', ''),
+
+  healthIconClassMap: {
+    RUNNING: 'health-status-LIVE',
+    NOT_RUNNING: 'health-status-DEAD-RED',
+    UNKNOWN: 'health-status-DEAD-YELLOW'
+  },
+
   displayStatus: Em.computed.getByKey('displayStatusMap', 'status', Em.I18n.t('common.unknown')),
 
   displayStatusMap: {

http://git-wip-us.apache.org/repos/asf/ambari/blob/5c002c64/ambari-web/app/styles/application.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/application.less b/ambari-web/app/styles/application.less
index 7d93778..d449ccb 100644
--- a/ambari-web/app/styles/application.less
+++ b/ambari-web/app/styles/application.less
@@ -2180,86 +2180,60 @@ input[type="radio"].align-checkbox, input[type="checkbox"].align-checkbox {
 }
 
 #flume-summary {
-  text-align:left !important;
   max-height: 490px;
-  #flume-agents-table {
+  .table {
     margin: 0;
-    width: 100%;
-    .highlight {
-      td, th {
-        background-color: #BDC3C7 !important;
-        color: #666;
+    table-layout: fixed;
+  }
+  #flume-agents-table {
+    border-collapse: separate;
+    > tbody > tr > td {
+      &:last-of-type {
+        padding: 0;
+        &.empty-label {
+          padding: 8px;
+          text-align: center;
+        }
       }
     }
     th:first-child {
       width: 40%;
+      + th {
+        width: 30%;
+        ~ th {
+          width: 10%;
+        }
+      }
     }
-    th:first-child + th {
-      width: 30%;
-    }
-    th:first-child + th + th {
-      width: 10%;
-    }
-    th:first-child + th + th + th {
-      width: 10%;
-    }
-    th:first-child + th + th + th + th {
-      width: 10%;
-    }
-    td.agent-status {
-      width: 125px;
-    }
-    td.agent-name {
-      width: 20%;
-      overflow: hidden;
-    }
-    td.agent-host-name {
-      width: 20%;
-      overflow: hidden;
-      max-width: 90px;
-    }
-    .glyphicon-warning-sign {
-      color: @restart-indicator-color;
-    }
-    #flume-host-agent-row {
-      cursor: pointer;
-      text-align: left;
-      background-color: #fff;
-    }
-    .empty-label {
-      border-top: 1px solid #ddd;
-      text-align: center;
-    }
-  }
-  .wrapp-flume-status{
-    text-align: left;
-  }
-  .btn-wrapper {
-    margin: 0 5px 5px 0;
-    float: right;
-    width:60px;
-    position: static;
-  }
-  .flume-agents-actions {
-    .btn-group {
-      position: static;
-    }
-    a {
-      text-decoration: none;
-    }
-    a.dropdown-toggle {
-      padding: 2px 6px;
-      font-size: 11px;
-      line-height: 17px;
-    }
-    .dropdown-menu {
-      position: absolute;
+    td {
+      &.agent-host-name {
+        overflow: hidden;
+        border-bottom: 1px solid #eee;
+        cursor: pointer;
+      }
+      &.agent-status {
+        width: 50%;
+      }
+      &.flume-agent-sources-count, &.flume-agent-channels-count {
+        width: 16.667%;
+      }
+      &.flume-agent-sink-count {
+        width: 16.666%;
+      }
+      .flume-agents-actions {
+        .btn-group {
+          position: static;
+        }
+        a {
+          text-decoration: none;
+        }
+      }
     }
   }
   .scrollable-container {
+    position: static;
     max-height: 450px;
-    width: 100%;
-    overflow-y: scroll;
+    overflow-y: auto;
   }
 }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/5c002c64/ambari-web/app/styles/theme/bootstrap-ambari.css
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/theme/bootstrap-ambari.css b/ambari-web/app/styles/theme/bootstrap-ambari.css
index fd341a5..f427c0a 100644
--- a/ambari-web/app/styles/theme/bootstrap-ambari.css
+++ b/ambari-web/app/styles/theme/bootstrap-ambari.css
@@ -35,7 +35,6 @@
   outline: none;
   font-family: 'Roboto', sans-serif;
   text-transform: uppercase;
-  height: 34px;
   font-size: 14px;
   padding: 10px 20px;
   line-height: 14px;
@@ -213,6 +212,10 @@
   background-color: #429929;
   border: 1px solid #3FAE2A;
 }
+.navbar-btn {
+  margin-top: 7px;
+  margin-bottom: 7px;
+}
 .btn-regular-default-state {
   background-color: #FFF;
   color: #666;
@@ -374,8 +377,21 @@ h2.table-title {
   top: 4px;
   margin-bottom: 0;
 }
+.table thead > tr > th {
+  border-bottom-color: #EEE;
+}
 .table tfoot > tr:first-of-type > td {
   border-top-width: 2px;
+  border-top-color: #EEE;
+}
+.table > tbody > tr > td {
+  border-top-color: #EEE;
+}
+.table > tbody > tr.active {
+  background-color: #EEE;
+}
+.table > tbody > tr.active > td {
+  background-color: #EEE;
 }
 .table.table-hover .action {
   visibility: hidden;
@@ -393,13 +409,6 @@ h2.table-title {
 .table.table-hover > tbody > tr > td {
   border-width: 0;
 }
-.table.table-hover > tbody > tr.active {
-  border-color: #EEE;
-  background-color: #EEE;
-}
-.table.table-hover > tbody > tr.active > td {
-  background-color: #EEE;
-}
 .table.table-hover > tbody > tr:hover {
   border-color: #A7DFF2;
   background-color: #E7F6FC;

http://git-wip-us.apache.org/repos/asf/ambari/blob/5c002c64/ambari-web/app/templates/main/service/services/flume.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/service/services/flume.hbs b/ambari-web/app/templates/main/service/services/flume.hbs
index 1e57cd5..5b3a8e2 100644
--- a/ambari-web/app/templates/main/service/services/flume.hbs
+++ b/ambari-web/app/templates/main/service/services/flume.hbs
@@ -21,121 +21,89 @@
   <div class="col-md-12">
     <a href="#" {{action filterHosts view.flumeHandlerComponent}}>{{view.summaryHeader}}</a>
     <a href="#" class="pull-right" {{action gotoConfigs target="controller"}}>{{t dashboard.services.flume.summary.configure}}</a>
-    <div id="flume-agent-table-wrap" class="scrollable-container">
-      <table class="table table-hover advanced-header-table table-bordered table-striped" id="flume-agents-table">
-        <thead>
-          {{#view view.sortView contentBinding="view.filteredContent" class="label-row"}}
-            {{view view.parentView.hostSort}}
-            <th>{{t dashboard.services.flume.agent}}</th>
-            <th>
-              <i class="glyphicon glyphicon-signin" {{translateAttr title="dashboard.services.flume.sources"}}></i> {{t dashboard.services.flume.sources}}
-            </th>
-            <th>
-              <i class="glyphicon glyphicon-random" {{translateAttr title="dashboard.services.flume.channels"}}></i> {{t dashboard.services.flume.channels}}
-            </th>
-            <th>
-              <i class="glyphicon glyphicon-signout" {{translateAttr title="dashboard.services.flume.sinks"}}></i> {{t dashboard.services.flume.sinks}}
-            </th>
-          {{/view}}
-        </thead>
-        {{#if view.pageContent}}
-          {{#each host in view.pageContent}}
-            <tbody class="flume-agent-table-tbody">
-            {{#view view.agentView contentBinding="host"}}
-              <td {{bindAttr rowspan="host.rowspan"}} id="flume-host-agent-row" class="agent-host-name">
-                <a class="agent-host-link" href="javascript:void(null)" {{action click host target="view"}}>
-                  {{host.hostName}}
-                </a>
-              </td>
-              <td class="agent-status">
-                <div class="wrapp-flume-status">
-                  <div class="pull-left flume-agents-status">
-                    <span {{bindAttr class="host.firtstAgent.healthClass"}}></span> {{host.firtstAgent.name}}</div>
-                  <div class="btn-wrapper flume-agents-actions">
-                    <div class="btn-group display-inline-block">
-                      <a class="btn btn-default dropdown-toggle" data-toggle="dropdown"
-                         href="javascript:void(null)">{{host.firtstAgent.displayStatus}}
-                        <span class="caret"></span>
-                      </a>
-                      <ul class="pull-left dropdown-menu">
-                        <li {{bindAttr class="host.firtstAgent.isStartAgentDisabled:disabled"}}>
-                          <a href="javascript:void(null)"
-                            {{bindAttr class="host.firtstAgent.isStartAgentDisabled:disabled :start-agent"}}
-                            {{action startFlumeAgent host.firtstAgent target="controller"}}>
-                            {{t services.service.summary.flume.startAgent}}</a>
-                        </li>
-                        <li {{bindAttr class="host.firtstAgent.isStopAgentDisabled:disabled"}}>
-                          <a href="javascript:void(null)"
-                            {{bindAttr class="host.firtstAgent.isStopAgentDisabled:disabled :stop-agent"}}
-                            {{action stopFlumeAgent host.firtstAgent target="controller"}}>
-                            {{t services.service.summary.flume.stopAgent}}</a>
-                        </li>
-                      </ul>
-                    </div>
-                  </div>
-                </div>
-              </td>
-              <td class="flume-sources-count">
-                {{host.firtstAgent.sourcesCount}}
-              </td>
-              <td class="flume-channels-count">
-                {{host.firtstAgent.channelsCount}}
-              </td>
-              <td class="flume-sinks-count">
-                {{host.firtstAgent.sinksCount}}
-              </td>
-            {{/view}}
-            {{#each agent in host.otherAgents}}
-              {{#view view.agentView contentBinding="host"}}
-                <td class="agent-status">
-                  <div class="wrapp-flume-status">
-                    <div class="pull-left flume-agents-status">
-                      <span {{bindAttr class="agent.healthClass"}}></span> {{agent.name}}</div>
-                    <div class="btn-wrapper flume-agents-actions">
-                      <div class="btn-group display-inline-block">
-                        <a class="btn btn-default dropdown-toggle" data-toggle="dropdown"
-                           href="javascript:void(null)">{{agent.displayStatus}}
-                          <span class="caret"></span>
-                        </a>
-                        <ul class="pull-left dropdown-menu">
-                          <li {{bindAttr class="agent.isStartAgentDisabled:disabled :start-agent"}}>
-                            <a href="javascript:void(null)"
-                              {{bindAttr class="agent.isStartAgentDisabled:disabled"}}
-                              {{action startFlumeAgent agent target="controller"}}>
-                              {{t services.service.summary.flume.startAgent}}</a>
-                          </li>
-                          <li {{bindAttr class="agent.isStopAgentDisabled:disabled"}}>
-                            <a href="javascript:void(null)"
-                              {{bindAttr class="agent.isStopAgentDisabled:disabled :stop-agent"}}
-                              {{action stopFlumeAgent agent target="controller"}}>
-                              {{t services.service.summary.flume.stopAgent}}</a>
-                          </li>
-                        </ul>
-                      </div>
-                    </div>
-                  </div>
-                </td>
-                <td class="flume-agent-sources-count">
-                  {{agent.sourcesCount}}
-                </td>
-                <td class="flume-agent-channels-count">
-                  {{agent.channelsCount}}
-                </td>
-                <td class="flume-agent-sink-count">
-                  {{agent.sinksCount}}
-                </td>
-              {{/view}}
-            {{/each}}
-            </tbody>
-          {{/each}}
-        {{else}}
-          <tr>
-            <td colspan="5" id="flume-agents-empty-label" class="empty-label">
-              {{t services.service.summary.flume.noAgents}}
+  </div>
+  <div id="flume-agent-table-wrap" class="scrollable-container col-md-12">
+    <table class="table advanced-header-table" id="flume-agents-table">
+      <thead>
+      {{#view view.sortView contentBinding="view.filteredContent" class="label-row"}}
+        {{view view.parentView.hostSort}}
+        <th>{{t dashboard.services.flume.agent}}</th>
+        <th>
+          <i class="icon icon-signin" {{translateAttr title="dashboard.services.flume.sources"}}></i> {{t dashboard.services.flume.sources}}
+        </th>
+        <th>
+          <i class="icon icon-random" {{translateAttr title="dashboard.services.flume.channels"}}></i> {{t dashboard.services.flume.channels}}
+        </th>
+        <th>
+          <i class="icon icon-signout" {{translateAttr title="dashboard.services.flume.sinks"}}></i> {{t dashboard.services.flume.sinks}}
+        </th>
+      {{/view}}
+      </thead>
+      <tbody>
+      {{#if view.pageContent}}
+        {{#each host in view.pageContent}}
+          <tr {{bindAttr class="host.isActive:active"}}>
+            <td class="agent-host-name" {{action selectHost host target="view"}}>
+              <a href="javascript:void(null)">
+                {{host.hostName}}
+              </a>
+            </td>
+            <td colspan="4">
+              <table class="table table-hover table-striped">
+                <tbody>
+                  {{#each agent in host.agents}}
+                    <tr {{bindAttr class="host.isActive:active"}}>
+                      <td class="agent-status">
+                        <div class="pull-left">
+                          <span {{bindAttr class="agent.healthClass agent.healthIconClass"}}></span> {{agent.name}}
+                        </div>
+                        <div class="flume-agents-actions pull-right">
+                          <div class="btn-group display-inline-block">
+                            <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
+                              {{agent.displayStatus}}
+                              <span class="caret"></span>
+                            </button>
+                            <ul class="pull-left dropdown-menu">
+                              <li {{bindAttr class="agent.isStartAgentDisabled:disabled :start-agent"}}>
+                                <a href="javascript:void(null)"
+                                  {{bindAttr class="agent.isStartAgentDisabled:disabled"}}
+                                  {{action startFlumeAgent agent target="controller"}}>
+                                  {{t services.service.summary.flume.startAgent}}</a>
+                              </li>
+                              <li {{bindAttr class="agent.isStopAgentDisabled:disabled"}}>
+                                <a href="javascript:void(null)"
+                                  {{bindAttr class="agent.isStopAgentDisabled:disabled :stop-agent"}}
+                                  {{action stopFlumeAgent agent target="controller"}}>
+                                  {{t services.service.summary.flume.stopAgent}}</a>
+                              </li>
+                            </ul>
+                          </div>
+                        </div>
+                      </td>
+                      <td class="flume-agent-sources-count">
+                        {{agent.sourcesCount}}
+                      </td>
+                      <td class="flume-agent-channels-count">
+                        {{agent.channelsCount}}
+                      </td>
+                      <td class="flume-agent-sink-count">
+                        {{agent.sinksCount}}
+                      </td>
+                    </tr>
+                  {{/each}}
+                </tbody>
+              </table>
             </td>
           </tr>
-        {{/if}}
-      </table>
-    </div>
+        {{/each}}
+      {{else}}
+        <tr>
+          <td colspan="5" class="empty-label">
+            {{t services.service.summary.flume.noAgents}}
+          </td>
+        </tr>
+      {{/if}}
+      </tbody>
+    </table>
   </div>
 </div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/5c002c64/ambari-web/app/views/main/service/services/flume.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/service/services/flume.js b/ambari-web/app/views/main/service/services/flume.js
index 2db4583..15c61d6 100644
--- a/ambari-web/app/views/main/service/services/flume.js
+++ b/ambari-web/app/views/main/service/services/flume.js
@@ -37,10 +37,7 @@ App.MainDashboardServiceFlumeView = App.TableView.extend(App.MainDashboardServic
       content.push(
         Em.Object.create({
           hostName: hostName,
-          agents: agents,
-          rowspan: agents.length,
-          firtstAgent: agents[0],
-          otherAgents: agents.without(agents[0])
+          agents: agents
         })
       );
     });
@@ -58,24 +55,6 @@ App.MainDashboardServiceFlumeView = App.TableView.extend(App.MainDashboardServic
     componentName: 'FLUME_HANDLER'
   }),
 
-  agentView: Em.View.extend({
-    content: null,
-    tagName: 'tr',
-
-    click: function (e) {
-      var numberOfAgents = this.get('content.agents').length;
-      if ($(e.target).attr('class') === "agent-host-name" || $(e.target).attr('class') === "agent-host-link") {
-        var currentTargetRow = $(e.currentTarget);
-        if ($(e.target).attr('class') === "agent-host-link") {
-          currentTargetRow = currentTargetRow.parent(".agent-host-name").parent();
-        }
-        currentTargetRow.parents("table:first").find('tr').removeClass('highlight');
-        currentTargetRow.addClass('highlight').nextAll("tr").slice(0, numberOfAgents - 1).addClass('highlight');
-        this.get('parentView').showAgentInfo(this.get('content'));
-      }
-    }
-  }),
-
   sortView: sort.wrapperView,
 
   hostSort: sort.fieldView.extend({
@@ -92,6 +71,14 @@ App.MainDashboardServiceFlumeView = App.TableView.extend(App.MainDashboardServic
     });
   },
 
+  selectHost: function (e) {
+    var host = e && e.context;
+    this.get('pageContent').setEach('isActive', false);
+    if (host) {
+      this.showAgentInfo(host);
+    }
+  },
+
   /**
    * Locate dropdown menu absolutely outside of scrollable block
    * @param element
@@ -131,6 +118,7 @@ App.MainDashboardServiceFlumeView = App.TableView.extend(App.MainDashboardServic
    * @param {object} host
    */
   showAgentInfo: function (host) {
+    Em.set(host, 'isActive', true);
     this.set('selectedHost', host);
     this.setAgentMetrics(host);
   },

http://git-wip-us.apache.org/repos/asf/ambari/blob/5c002c64/ambari-web/test/models/service/flume_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/models/service/flume_test.js b/ambari-web/test/models/service/flume_test.js
index 55fd135..d88f375 100644
--- a/ambari-web/test/models/service/flume_test.js
+++ b/ambari-web/test/models/service/flume_test.js
@@ -47,6 +47,12 @@ describe('App.FlumeAgent', function () {
     UNKNOWN: App.healthIconClassYellow
   }});
 
+  App.TestAliases.testAsComputedGetByKey(getModel(), 'healthIconClass', 'healthIconClassMap', 'status', {defaultValue: '', map: {
+    RUNNING: 'health-status-LIVE',
+    NOT_RUNNING: 'health-status-DEAD-RED',
+    UNKNOWN: 'health-status-DEAD-YELLOW'
+  }});
+
   App.TestAliases.testAsComputedGetByKey(getModel(), 'displayStatus', 'displayStatusMap', 'status', {defaultValue: Em.I18n.t('common.unknown'), map: {
     RUNNING: Em.I18n.t('common.running'),
     NOT_RUNNING: Em.I18n.t('common.stopped'),

http://git-wip-us.apache.org/repos/asf/ambari/blob/5c002c64/ambari-web/test/views/main/service/services/flume_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/service/services/flume_test.js b/ambari-web/test/views/main/service/services/flume_test.js
index a19b5c9..dc2f99a 100644
--- a/ambari-web/test/views/main/service/services/flume_test.js
+++ b/ambari-web/test/views/main/service/services/flume_test.js
@@ -40,8 +40,6 @@ describe('App.MainDashboardServiceFlumeView', function () {
       ]);
       view.propertyDidChange('content');
       expect(view.get('content').mapProperty('hostName')).to.be.eql(['host1', 'host2']);
-      expect(view.get('content').mapProperty('rowspan')).to.be.eql([1, 2]);
-      expect(view.get('content').mapProperty('firtstAgent')).to.be.eql([{hostName: 'host1'}, {hostName: 'host2'}]);
     });
   });
 
@@ -162,18 +160,27 @@ describe('App.MainDashboardServiceFlumeView', function () {
 
   describe("#showAgentInfo()", function() {
 
+    var host;
+
     beforeEach(function() {
+      host = {hostName: 'host1'};
       sinon.stub(view, 'setAgentMetrics');
+      view.showAgentInfo(host);
     });
     afterEach(function() {
       view.setAgentMetrics.restore();
     });
 
-    it("setAgentMetrics should be called", function() {
-      var host = {hostName: 'host1'};
-      view.showAgentInfo(host);
+    it('setAgentMetrics should be called', function() {
       expect(view.setAgentMetrics.calledWith(host)).to.be.true;
+    });
+
+    it('proper host should be selected', function() {
       expect(view.get('selectedHost')).to.be.eql(host);
     });
+
+    it('proper row should be highlighted', function() {
+      expect(Em.get(host, 'isActive')).to.be.true;
+    });
   });
 });
\ No newline at end of file


[29/47] ambari git commit: Revert "AMBARI-18713 use exclude list of mount device types on docker containers (dsen)"

Posted by jo...@apache.org.
Revert "AMBARI-18713 use exclude list of mount device types on docker containers (dsen)"


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: 90967bcd0df7a5ab089611ee5502bb90d0084a0a
Parents: fbf636d
Author: Dmytro Sen <ds...@apache.org>
Authored: Wed Nov 23 18:47:20 2016 +0200
Committer: Dmytro Sen <ds...@apache.org>
Committed: Wed Nov 23 18:47:20 2016 +0200

----------------------------------------------------------------------
 .../src/main/resources/scripts/stack_advisor.py |  11 +-
 .../HDP/2.0.6/configuration/cluster-env.xml     |  10 -
 .../stacks/HDP/2.0.6/services/stack_advisor.py  |  50 +-
 .../stacks/HDP/2.1/services/stack_advisor.py    |  20 +-
 .../stacks/HDP/2.2/services/stack_advisor.py    |   7 -
 .../src/main/resources/stacks/stack_advisor.py  | 200 +-------
 .../stacks/2.0.6/common/test_stack_advisor.py   |  34 +-
 .../stacks/2.1/common/test_stack_advisor.py     |   5 -
 .../stacks/2.2/common/test_stack_advisor.py     |  20 +-
 .../test/python/stacks/test_stack_adviser.py    | 239 ----------
 ambari-web/app/mixins.js                        |   1 +
 .../app/utils/configs/config_initializer.js     |  28 +-
 .../mount_points_based_initializer_mixin.js     | 340 ++++++++++++++
 ambari-web/test/utils/ajax/ajax_test.js         |   9 +-
 .../utils/configs/config_initializer_test.js    | 458 +++++++++++++++++++
 15 files changed, 855 insertions(+), 577 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/90967bcd/ambari-server/src/main/resources/scripts/stack_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/scripts/stack_advisor.py b/ambari-server/src/main/resources/scripts/stack_advisor.py
index abfab87..5926c39 100755
--- a/ambari-server/src/main/resources/scripts/stack_advisor.py
+++ b/ambari-server/src/main/resources/scripts/stack_advisor.py
@@ -70,11 +70,13 @@ def main(argv=None):
   if len(args) < 3:
     sys.stderr.write(USAGE)
     sys.exit(2)
+    pass
 
   action = args[0]
   if action not in ALL_ACTIONS:
     sys.stderr.write(USAGE)
     sys.exit(2)
+    pass
 
   hostsFile = args[1]
   servicesFile = args[2]
@@ -87,7 +89,6 @@ def main(argv=None):
   stackName = services["Versions"]["stack_name"]
   stackVersion = services["Versions"]["stack_version"]
   parentVersions = []
-
   if "stack_hierarchy" in services["Versions"]:
     parentVersions = services["Versions"]["stack_hierarchy"]["stack_versions"]
 
@@ -95,9 +96,8 @@ def main(argv=None):
 
   # Perform action
   actionDir = os.path.realpath(os.path.dirname(args[1]))
-
-  # filter
-  hosts = stackAdvisor.filterHostMounts(hosts, services)
+  result = {}
+  result_file = "non_valid_result_file.json"
 
   if action == RECOMMEND_COMPONENT_LAYOUT_ACTION:
     result = stackAdvisor.recommendComponentLayout(services, hosts)
@@ -111,11 +111,12 @@ def main(argv=None):
   elif action == RECOMMEND_CONFIGURATION_DEPENDENCIES:
     result = stackAdvisor.recommendConfigurationDependencies(services, hosts)
     result_file = os.path.join(actionDir, "configurations.json")
-  else:  # action == VALIDATE_CONFIGURATIONS
+  else: # action == VALIDATE_CONFIGURATIONS
     result = stackAdvisor.validateConfigurations(services, hosts)
     result_file = os.path.join(actionDir, "configurations-validation.json")
 
   dumpJson(result, result_file)
+  pass
 
 
 def instantiateStackAdvisor(stackName, stackVersion, parentVersions):

http://git-wip-us.apache.org/repos/asf/ambari/blob/90967bcd/ambari-server/src/main/resources/stacks/HDP/2.0.6/configuration/cluster-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/configuration/cluster-env.xml b/ambari-server/src/main/resources/stacks/HDP/2.0.6/configuration/cluster-env.xml
index bf257a3..0d313cc 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/configuration/cluster-env.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/configuration/cluster-env.xml
@@ -274,14 +274,4 @@ gpgcheck=0</value>
     <description>For properties handled by handle_mounted_dirs this will make Ambari </description>
     <on-ambari-upgrade add="true"/>
   </property>
-  <property>
-    <name>agent_mounts_ignore_list</name>
-    <value/>
-    <description>Comma separated list of the mounts which would be ignored by Ambari during property values suggestion by Stack Adviser</description>
-    <on-ambari-upgrade add="true"/>
-    <value-attributes>
-      <visible>true</visible>
-      <empty-value-valid>true</empty-value-valid>
-    </value-attributes>
-  </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/90967bcd/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/stack_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/stack_advisor.py b/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/stack_advisor.py
index 9b5ff68..83014b7 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/stack_advisor.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/stack_advisor.py
@@ -101,23 +101,9 @@ class HDP206StackAdvisor(DefaultStackAdvisor):
       "HBASE": self.recommendHbaseConfigurations,
       "STORM": self.recommendStormConfigurations,
       "AMBARI_METRICS": self.recommendAmsConfigurations,
-      "RANGER": self.recommendRangerConfigurations,
-      "ZOOKEEPER": self.recommendZookeeperConfigurations,
-      "OOZIE": self.recommendOozieConfigurations
+      "RANGER": self.recommendRangerConfigurations
     }
 
-  def recommendOozieConfigurations(self, configurations, clusterData, services, hosts):
-    oozie_mount_properties = [
-      ("oozie_data_dir", "OOZIE_SERVER", "/hadoop/oozie/data", "single"),
-    ]
-    self.updateMountProperties("oozie-env", oozie_mount_properties, configurations, services, hosts)
-
-  def recommendZookeeperConfigurations(self, configurations, clusterData, services, hosts):
-    zk_mount_properties = [
-      ("dataDir", "ZOOKEEPER_SERVER", "/hadoop/zookeeper", "single"),
-    ]
-    self.updateMountProperties("zoo.cfg", zk_mount_properties, configurations, services, hosts)
-
   def recommendYARNConfigurations(self, configurations, clusterData, services, hosts):
     putYarnProperty = self.putProperty(configurations, "yarn-site", services)
     putYarnPropertyAttribute = self.putPropertyAttribute(configurations, "yarn-site")
@@ -130,15 +116,6 @@ class HDP206StackAdvisor(DefaultStackAdvisor):
     putYarnProperty('yarn.scheduler.maximum-allocation-mb', int(configurations["yarn-site"]["properties"]["yarn.nodemanager.resource.memory-mb"]))
     putYarnEnvProperty('min_user_id', self.get_system_min_uid())
 
-    yarn_mount_properties = [
-      ("yarn.nodemanager.local-dirs", "NODEMANAGER", "/hadoop/yarn/local", "multi"),
-      ("yarn.nodemanager.log-dirs", "NODEMANAGER", "/hadoop/yarn/log", "multi"),
-      ("yarn.timeline-service.leveldb-timeline-store.path", "APP_TIMELINE_SERVER", "/hadoop/yarn/timeline", "single"),
-      ("yarn.timeline-service.leveldb-state-store.path", "APP_TIMELINE_SERVER", "/hadoop/yarn/timeline", "single")
-    ]
-
-    self.updateMountProperties("yarn-site", yarn_mount_properties, configurations, services, hosts)
-
     sc_queue_name = self.recommendYarnQueue(services, "yarn-env", "service_check.queue.name")
     if sc_queue_name is not None:
       putYarnEnvProperty("service_check.queue.name", sc_queue_name)
@@ -169,13 +146,6 @@ class HDP206StackAdvisor(DefaultStackAdvisor):
     putMapredProperty('mapreduce.map.java.opts', "-Xmx" + str(int(round(0.8 * clusterData['mapMemory']))) + "m")
     putMapredProperty('mapreduce.reduce.java.opts', "-Xmx" + str(int(round(0.8 * clusterData['reduceMemory']))) + "m")
     putMapredProperty('mapreduce.task.io.sort.mb', min(int(round(0.4 * clusterData['mapMemory'])), 1024))
-
-    mapred_mounts = [
-      ("mapred.local.dir", ["TASKTRACKER", "NODEMANAGER"], "/hadoop/mapred", "multi")
-    ]
-
-    self.updateMountProperties("mapred-site", mapred_mounts, configurations, services, hosts)
-
     mr_queue = self.recommendYarnQueue(services, "mapred-site", "mapreduce.job.queuename")
     if mr_queue is not None:
       putMapredProperty("mapreduce.job.queuename", mr_queue)
@@ -423,18 +393,12 @@ class HDP206StackAdvisor(DefaultStackAdvisor):
       if len(namenodes.split(',')) > 1:
         putHDFSSitePropertyAttributes("dfs.namenode.rpc-address", "delete", "true")
 
-    hdfs_mount_properties = [
-      ("dfs.datanode.data.dir", "DATANODE", "/hadoop/hdfs/data", "multi"),
-      ("dfs.name.dir", "NAMENODE", "/hadoop/hdfs/namenode", "multi"),
-      ("dfs.namenode.name.dir", "DATANODE", "/hadoop/hdfs/namenode", "multi"),
-      ("dfs.data.dir", "DATANODE", "/hadoop/hdfs/data", "multi"),
-      ("fs.checkpoint.dir", "SECONDARY_NAMENODE", "/hadoop/hdfs/namesecondary", "single"),
-      ("dfs.namenode.checkpoint.dir", "SECONDARY_NAMENODE", "/hadoop/hdfs/namesecondary", "single")
-    ]
-
-    self.updateMountProperties("hdfs-site", hdfs_mount_properties, configurations, services, hosts)
-
-    dataDirs = hdfsSiteProperties['dfs.datanode.data.dir'].split(",")
+    #Initialize default 'dfs.datanode.data.dir' if needed
+    if (not hdfsSiteProperties) or ('dfs.datanode.data.dir' not in hdfsSiteProperties):
+      dataDirs = '/hadoop/hdfs/data'
+      putHDFSSiteProperty('dfs.datanode.data.dir', dataDirs)
+    else:
+      dataDirs = hdfsSiteProperties['dfs.datanode.data.dir'].split(",")
 
     # dfs.datanode.du.reserved should be set to 10-15% of volume size
     # For each host selects maximum size of the volume. Then gets minimum for all hosts.

http://git-wip-us.apache.org/repos/asf/ambari/blob/90967bcd/ambari-server/src/main/resources/stacks/HDP/2.1/services/stack_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.1/services/stack_advisor.py b/ambari-server/src/main/resources/stacks/HDP/2.1/services/stack_advisor.py
index 17225d0..9678dc1 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.1/services/stack_advisor.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.1/services/stack_advisor.py
@@ -24,30 +24,12 @@ class HDP21StackAdvisor(HDP206StackAdvisor):
     childRecommendConfDict = {
       "OOZIE": self.recommendOozieConfigurations,
       "HIVE": self.recommendHiveConfigurations,
-      "TEZ": self.recommendTezConfigurations,
-      "STORM": self.recommendStormConfigurations,
-      "FALCON": self.recommendFalconConfigurations
+      "TEZ": self.recommendTezConfigurations
     }
     parentRecommendConfDict.update(childRecommendConfDict)
     return parentRecommendConfDict
 
-  def recommendStormConfigurations(self, configurations, clusterData, services, hosts):
-    storm_mounts = [
-      ("storm.local.dir", ["NODEMANAGER", "NIMBUS"], "/hadoop/storm", "single")
-    ]
-
-    self.updateMountProperties("storm-site", storm_mounts, configurations, services, hosts)
-
-  def recommendFalconConfigurations(self, configurations, clusterData, services, hosts):
-    falcon_mounts = [
-      ("*.falcon.graph.storage.directory", "FALCON_SERVER", "/hadoop/falcon/data/lineage/graphdb", "single")
-    ]
-
-    self.updateMountProperties("falcon-startup.properties", falcon_mounts, configurations, services, hosts)
-
   def recommendOozieConfigurations(self, configurations, clusterData, services, hosts):
-    super(HDP21StackAdvisor, self).recommendOozieConfigurations(configurations, clusterData, services, hosts)
-
     oozieSiteProperties = getSiteProperties(services['configurations'], 'oozie-site')
     oozieEnvProperties = getSiteProperties(services['configurations'], 'oozie-env')
     putOozieProperty = self.putProperty(configurations, "oozie-site", services)

http://git-wip-us.apache.org/repos/asf/ambari/blob/90967bcd/ambari-server/src/main/resources/stacks/HDP/2.2/services/stack_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/services/stack_advisor.py b/ambari-server/src/main/resources/stacks/HDP/2.2/services/stack_advisor.py
index feafc04..a8a75e5 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/services/stack_advisor.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/services/stack_advisor.py
@@ -44,17 +44,10 @@ class HDP22StackAdvisor(HDP21StackAdvisor):
       "RANGER": self.recommendRangerConfigurations,
       "LOGSEARCH" : self.recommendLogsearchConfigurations,
       "SPARK": self.recommendSparkConfigurations,
-      "KAFKA": self.recommendKafkaConfigurations,
     }
     parentRecommendConfDict.update(childRecommendConfDict)
     return parentRecommendConfDict
 
-  def recommendKafkaConfigurations(self, configurations, clusterData, services, hosts):
-    kafka_mounts = [
-      ("log.dirs", "KAFKA_BROKER", "/kafka-logs", "multi")
-    ]
-
-    self.updateMountProperties("kafka-broker", kafka_mounts, configurations, services, hosts)
 
   def recommendSparkConfigurations(self, configurations, clusterData, services, hosts):
     """

http://git-wip-us.apache.org/repos/asf/ambari/blob/90967bcd/ambari-server/src/main/resources/stacks/stack_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/stack_advisor.py b/ambari-server/src/main/resources/stacks/stack_advisor.py
index 66d1387..f6191f8 100644
--- a/ambari-server/src/main/resources/stacks/stack_advisor.py
+++ b/ambari-server/src/main/resources/stacks/stack_advisor.py
@@ -972,18 +972,6 @@ class DefaultStackAdvisor(StackAdvisor):
       return None
     return siteConfig.get("properties")
 
-  def getServicesSiteProperties(self, services, siteName):
-    if not services:
-      return None
-
-    configurations = services.get("configurations")
-    if not configurations:
-      return None
-    siteConfig = configurations.get(siteName)
-    if siteConfig is None:
-      return None
-    return siteConfig.get("properties")
-
   def putProperty(self, config, configType, services=None):
     userConfigs = {}
     changedConfigs = []
@@ -1052,27 +1040,14 @@ class DefaultStackAdvisor(StackAdvisor):
       config[configType]["property_attributes"][key][attribute] = attributeValue if isinstance(attributeValue, list) else str(attributeValue)
     return appendPropertyAttribute
 
+
+  """
+  Returns the hosts which are running the given component.
+  """
   def getHosts(self, componentsList, componentName):
-    """
-    Returns the hosts which are running the given component.
-    """
     hostNamesList = [component["hostnames"] for component in componentsList if component["component_name"] == componentName]
     return hostNamesList[0] if len(hostNamesList) > 0 else []
 
-  def getMountPoints(self, hosts):
-    """
-    Return list of mounts available on the hosts
-
-    :type hosts dict
-    """
-    mount_points = []
-
-    for item in hosts["items"]:
-      if "disk_info" in item["Hosts"]:
-        mount_points.append(item["Hosts"]["disk_info"])
-
-    return mount_points
-
   def isSecurityEnabled(self, services):
     """
     Determines if security is enabled by testing the value of cluster-env/security enabled.
@@ -1109,170 +1084,3 @@ class DefaultStackAdvisor(StackAdvisor):
 
   def getServiceNames(self, services):
     return [service["StackServices"]["service_name"] for service in services["services"]]
-
-  def filterHostMounts(self, hosts, services):
-    """
-    Filter mounts on the host using agent_mounts_ignore_list, by excluding and record with mount-point
-     mentioned in agent_mounts_ignore_list.
-
-    This function updates hosts dictionary
-
-    Example:
-
-      agent_mounts_ignore_list : "/run/secrets"
-
-      Hosts record :
-
-       "disk_info" : [
-          {
-              ...
-            "mountpoint" : "/"
-          },
-          {
-              ...
-            "mountpoint" : "/run/secrets"
-          }
-        ]
-
-      Result would be :
-
-        "disk_info" : [
-          {
-              ...
-            "mountpoint" : "/"
-          }
-        ]
-
-    :type hosts dict
-    :type services dict
-    """
-    if not services:
-      return hosts
-
-    cluster_env = self.getServicesSiteProperties(services, "cluster-env")
-    ignore_list = []
-
-    if not cluster_env or "items" not in hosts:
-      return hosts
-
-    if "agent_mounts_ignore_list" in cluster_env and cluster_env["agent_mounts_ignore_list"].strip():
-      ignore_list = [x.strip() for x in cluster_env["agent_mounts_ignore_list"].strip().split(",")]
-
-    for host in hosts["items"]:
-      if "Hosts" not in host and "disk_info" not in host["Hosts"]:
-        continue
-
-      host = host["Hosts"]
-      host["disk_info"] = [disk for disk in host["disk_info"] if disk["mountpoint"] not in ignore_list]
-
-    return hosts
-
-  def __getSameHostMounts(self, hosts):
-    """
-    Return list of the mounts which are same and present on all hosts
-
-    :type hosts dict
-    :rtype list
-    """
-    if not hosts:
-      return None
-
-    hostMounts = self.getMountPoints(hosts)
-    mounts = []
-    for m in hostMounts:
-      host_mounts = set([item["mountpoint"] for item in m])
-      mounts = host_mounts if not mounts else mounts & host_mounts
-
-    return sorted(mounts)
-
-  def getMountPathVariations(self, initial_value, component_name, services, hosts):
-    """
-    Recommends best fitted mount by prefixing path with it.
-
-    :return return list of paths with properly selected paths. If no recommendation possible,
-     would be returned empty list
-
-    :type initial_value str
-    :type component_name str
-    :type services dict
-    :type hosts dict
-    :rtype list
-    """
-    available_mounts = []
-
-    if not initial_value:
-      return available_mounts
-
-    mounts = self.__getSameHostMounts(hosts)
-    sep = "/"
-
-    if not mounts:
-      return available_mounts
-
-    for mount in mounts:
-      new_mount = initial_value if mount == "/" else os.path.join(mount + sep, initial_value.lstrip(sep))
-      if new_mount not in available_mounts:
-        available_mounts.append(new_mount)
-
-    # no list transformations after filling the list, because this will cause item order change
-    return available_mounts
-
-  def getMountPathVariation(self, initial_value, component_name, services, hosts):
-    """
-    Recommends best fitted mount by prefixing path with it.
-
-    :return return list of paths with properly selected paths. If no recommendation possible,
-     would be returned empty list
-
-    :type initial_value str
-        :type component_name str
-    :type services dict
-    :type hosts dict
-    :rtype str
-    """
-    try:
-      return [self.getMountPathVariations(initial_value, component_name, services, hosts)[0]]
-    except IndexError:
-      return []
-
-  def updateMountProperties(self, siteConfig, propertyDefinitions, configurations,  services, hosts):
-    """
-    Update properties according to recommendations for available mount-points
-
-    propertyDefinitions is an array of set : property name, component name, initial value, recommendation type
-
-     Where,
-
-       property name - name of the property
-       component name, name of the component to which belongs this property
-       initial value - initial path
-       recommendation type - could be "multi" or "single". This describes recommendation strategy, to use only one disk
-        or use all available space on the host
-
-    :type propertyDefinitions list
-    :type siteConfig str
-    :type configurations dict
-    :type services dict
-    :type hosts dict
-    """
-
-    props = self.getServicesSiteProperties(services, siteConfig)
-    put_f = self.putProperty(configurations, siteConfig, services)
-
-    for prop_item in propertyDefinitions:
-      name, component, default_value, rc_type = prop_item
-      recommendation = None
-
-      if props is None or name not in props:
-        if rc_type == "multi":
-          recommendation = self.getMountPathVariations(default_value, component, services, hosts)
-        else:
-          recommendation = self.getMountPathVariation(default_value, component, services, hosts)
-      elif props and name in props and props[name] == default_value:
-        if rc_type == "multi":
-          recommendation = self.getMountPathVariations(default_value, component, services, hosts)
-        else:
-          recommendation = self.getMountPathVariation(default_value, component, services, hosts)
-
-      if recommendation:
-        put_f(name, ",".join(recommendation))

http://git-wip-us.apache.org/repos/asf/ambari/blob/90967bcd/ambari-server/src/test/python/stacks/2.0.6/common/test_stack_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/common/test_stack_advisor.py b/ambari-server/src/test/python/stacks/2.0.6/common/test_stack_advisor.py
index 00ee563..9595b9e 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/common/test_stack_advisor.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/common/test_stack_advisor.py
@@ -1195,13 +1195,8 @@ class TestHDP206StackAdvisor(TestCase):
                   {'properties':
                      {'falcon_user': 'falcon'}},
                 'hdfs-site':
-                  {'properties':
-                     {'dfs.data.dir': '/hadoop/hdfs/data',
-                      'dfs.datanode.data.dir': '/hadoop/hdfs/data',
-                      'fs.checkpoint.dir': '/hadoop/hdfs/namesecondary',
-                      'dfs.namenode.name.dir': '/hadoop/hdfs/namenode',
-                      'dfs.name.dir': '/hadoop/hdfs/namenode',
-                      'dfs.namenode.checkpoint.dir': '/hadoop/hdfs/namesecondary',
+                  {'properties': 
+                     {'dfs.datanode.data.dir': '/hadoop/hdfs/data',
                       'dfs.datanode.du.reserved': '10240000000'}},
                 'hive-env':
                   {'properties':
@@ -1334,12 +1329,7 @@ class TestHDP206StackAdvisor(TestCase):
                      {'falcon_user': 'falcon'}},
                 'hdfs-site':
                   {'properties':
-                     {'dfs.data.dir': '/hadoop/hdfs/data',
-                      'dfs.datanode.data.dir': '/hadoop/hdfs/data',
-                      'fs.checkpoint.dir': '/hadoop/hdfs/namesecondary',
-                      'dfs.namenode.name.dir': '/hadoop/hdfs/namenode',
-                      'dfs.name.dir': '/hadoop/hdfs/namenode',
-                      'dfs.namenode.checkpoint.dir': '/hadoop/hdfs/namesecondary',
+                     {'dfs.datanode.data.dir': '/hadoop/hdfs/data',
                       'dfs.datanode.du.reserved': '10240000000'}},
                 'hive-env':
                   {'properties':
@@ -1473,13 +1463,8 @@ class TestHDP206StackAdvisor(TestCase):
                      {'hive_user': 'hive',
                       'webhcat_user': 'webhcat'}},
                 'hdfs-site':
-                  {'properties':
-                     {'dfs.data.dir': '/hadoop/hdfs/data',
-                      'dfs.datanode.data.dir': '/hadoop/hdfs/data',
-                      'fs.checkpoint.dir': '/hadoop/hdfs/namesecondary',
-                      'dfs.namenode.name.dir': '/hadoop/hdfs/namenode',
-                      'dfs.name.dir': '/hadoop/hdfs/namenode',
-                      'dfs.namenode.checkpoint.dir': '/hadoop/hdfs/namesecondary',
+                  {'properties': 
+                     {'dfs.datanode.data.dir': '/hadoop/hdfs/data',
                       'dfs.datanode.du.reserved': '10240000000'}},
                 'hadoop-env':
                   {'properties':
@@ -1499,15 +1484,10 @@ class TestHDP206StackAdvisor(TestCase):
 
     expected["hdfs-site"] = {
       'properties': {
+        'dfs.datanode.data.dir': '/hadoop/hdfs/data',
         'dfs.datanode.du.reserved': '10240000000',
         'dfs.internal.nameservices': 'mycluster',
-        'dfs.ha.namenodes.mycluster': 'nn1,nn2',
-        'dfs.data.dir': '/hadoop/hdfs/data',
-        'dfs.datanode.data.dir': '/hadoop/hdfs/data',
-        'fs.checkpoint.dir': '/hadoop/hdfs/namesecondary',
-        'dfs.namenode.name.dir': '/hadoop/hdfs/namenode',
-        'dfs.name.dir': '/hadoop/hdfs/namenode',
-        'dfs.namenode.checkpoint.dir': '/hadoop/hdfs/namesecondary',
+        'dfs.ha.namenodes.mycluster': 'nn1,nn2'
       },
       'property_attributes': {
         'dfs.namenode.rpc-address': {

http://git-wip-us.apache.org/repos/asf/ambari/blob/90967bcd/ambari-server/src/test/python/stacks/2.1/common/test_stack_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.1/common/test_stack_advisor.py b/ambari-server/src/test/python/stacks/2.1/common/test_stack_advisor.py
index a9b36b1..7835262 100644
--- a/ambari-server/src/test/python/stacks/2.1/common/test_stack_advisor.py
+++ b/ambari-server/src/test/python/stacks/2.1/common/test_stack_advisor.py
@@ -486,12 +486,7 @@ class TestHDP21StackAdvisor(TestCase):
       },
       "hdfs-site": {
         "properties": {
-          'dfs.data.dir': '/hadoop/hdfs/data',
           'dfs.datanode.data.dir': '/hadoop/hdfs/data',
-          'fs.checkpoint.dir': '/hadoop/hdfs/namesecondary',
-          'dfs.namenode.name.dir': '/hadoop/hdfs/namenode',
-          'dfs.name.dir': '/hadoop/hdfs/namenode',
-          'dfs.namenode.checkpoint.dir': '/hadoop/hdfs/namesecondary',
           'dfs.datanode.du.reserved': '10240000000'
         }
       }

http://git-wip-us.apache.org/repos/asf/ambari/blob/90967bcd/ambari-server/src/test/python/stacks/2.2/common/test_stack_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.2/common/test_stack_advisor.py b/ambari-server/src/test/python/stacks/2.2/common/test_stack_advisor.py
index 53c92ae..3cd05d3 100644
--- a/ambari-server/src/test/python/stacks/2.2/common/test_stack_advisor.py
+++ b/ambari-server/src/test/python/stacks/2.2/common/test_stack_advisor.py
@@ -3068,12 +3068,7 @@ class TestHDP22StackAdvisor(TestCase):
           'dfs.namenode.safemode.threshold-pct': '1.000',
           'dfs.datanode.failed.volumes.tolerated': '1',
           'dfs.namenode.handler.count': '25',
-          'dfs.datanode.data.dir': '/path/1,/path/2,/path/3,/path/4',
-          'dfs.data.dir': '/hadoop/hdfs/data',
-          'fs.checkpoint.dir': '/hadoop/hdfs/namesecondary',
-          'dfs.namenode.name.dir': '/hadoop/hdfs/namenode',
-          'dfs.name.dir': '/hadoop/hdfs/namenode',
-          'dfs.namenode.checkpoint.dir': '/hadoop/hdfs/namesecondary'
+          'dfs.datanode.data.dir': '/path/1,/path/2,/path/3,/path/4'
         },
         'property_attributes': {
           'dfs.datanode.failed.volumes.tolerated': {'maximum': '4'},
@@ -3748,11 +3743,7 @@ class TestHDP22StackAdvisor(TestCase):
           "yarn.nodemanager.linux-container-executor.cgroups.hierarchy": "/yarn",
           "yarn.scheduler.maximum-allocation-mb": "39424",
           "yarn.nodemanager.linux-container-executor.resources-handler.class": "org.apache.hadoop.yarn.server.nodemanager.util.CgroupsLCEResourcesHandler",
-          "hadoop.registry.rm.enabled": "false",
-          "yarn.timeline-service.leveldb-state-store.path": "/hadoop/yarn/timeline",
-          "yarn.timeline-service.leveldb-timeline-store.path": "/hadoop/yarn/timeline",
-          "yarn.nodemanager.local-dirs": "/hadoop/yarn/local,/dev/shm/hadoop/yarn/local,/vagrant/hadoop/yarn/local",
-          "yarn.nodemanager.log-dirs": "/hadoop/yarn/log,/dev/shm/hadoop/yarn/log,/vagrant/hadoop/yarn/log"
+          "hadoop.registry.rm.enabled": "false"
         },
         "property_attributes": {
           "yarn.scheduler.minimum-allocation-vcores": {
@@ -3798,6 +3789,7 @@ class TestHDP22StackAdvisor(TestCase):
           "yarn.nodemanager.linux-container-executor.group": "hadoop",
           "yarn.nodemanager.container-executor.class": "org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor",
           "yarn.nodemanager.linux-container-executor.cgroups.mount-path": "/cgroup",
+          "yarn.nodemanager.linux-container-executor.group": "hadoop",
           "yarn.nodemanager.linux-container-executor.cgroups.mount": "true",
           "yarn.nodemanager.resource.memory-mb": "39424",
           "yarn.scheduler.minimum-allocation-mb": "3584",
@@ -3807,11 +3799,7 @@ class TestHDP22StackAdvisor(TestCase):
           "yarn.nodemanager.linux-container-executor.cgroups.hierarchy": "/yarn",
           "yarn.scheduler.maximum-allocation-mb": "39424",
           "yarn.nodemanager.linux-container-executor.resources-handler.class": "org.apache.hadoop.yarn.server.nodemanager.util.CgroupsLCEResourcesHandler",
-          "hadoop.registry.rm.enabled": "false",
-          "yarn.timeline-service.leveldb-state-store.path": "/hadoop/yarn/timeline",
-          "yarn.timeline-service.leveldb-timeline-store.path": "/hadoop/yarn/timeline",
-          "yarn.nodemanager.local-dirs": "/hadoop/yarn/local,/dev/shm/hadoop/yarn/local,/vagrant/hadoop/yarn/local",
-          "yarn.nodemanager.log-dirs": "/hadoop/yarn/log,/dev/shm/hadoop/yarn/log,/vagrant/hadoop/yarn/log"
+          "hadoop.registry.rm.enabled": "false"
         },
         "property_attributes": {
           "yarn.nodemanager.linux-container-executor.cgroups.mount": {

http://git-wip-us.apache.org/repos/asf/ambari/blob/90967bcd/ambari-server/src/test/python/stacks/test_stack_adviser.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/test_stack_adviser.py b/ambari-server/src/test/python/stacks/test_stack_adviser.py
deleted file mode 100644
index 2c171f1..0000000
--- a/ambari-server/src/test/python/stacks/test_stack_adviser.py
+++ /dev/null
@@ -1,239 +0,0 @@
-"""
-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 os
-from unittest import TestCase
-
-
-class TestBasicAdvisor(TestCase):
-  def setUp(self):
-    import imp
-    self.maxDiff = None
-    self.testDirectory = os.path.dirname(os.path.abspath(__file__))
-    stackAdvisorPath = os.path.abspath(os.path.join(self.testDirectory, '../../../main/resources/stacks/stack_advisor.py'))
-
-    default_sa_classname = 'DefaultStackAdvisor'
-
-    with open(stackAdvisorPath, 'rb') as fp:
-      stack_advisor_impl = imp.load_module('stack_advisor', fp, stackAdvisorPath, ('.py', 'rb', imp.PY_SOURCE))
-
-    clazz = getattr(stack_advisor_impl, default_sa_classname)
-    self.stackAdvisor = clazz()
-
-  def test_filterHostMounts(self):
-
-    filtered_mount = "/data"
-
-    hosts = {
-      "items": [
-        {
-          "Hosts": {
-            "cpu_count": 4,
-            "total_mem": 50331648,
-            "disk_info": [
-              {"mountpoint": "/"},
-              {"mountpoint": "/dev/shm"},
-              {"mountpoint": "/vagrant"},
-              {"mountpoint": "/dev/shm"},
-              {"mountpoint": "/vagrant"},
-              {"mountpoint": filtered_mount},
-            ],
-            "public_host_name": "c6401.ambari.apache.org",
-            "host_name": "c6401.ambari.apache.org"
-          },
-        },
-        {
-          "Hosts": {
-            "cpu_count": 4,
-            "total_mem": 50331648,
-            "disk_info": [
-              {"mountpoint": "/"},
-              {"mountpoint": "/dev/shm1"},
-              {"mountpoint": "/vagrant1"},
-              {"mountpoint": filtered_mount}
-            ],
-            "public_host_name": "c6402.ambari.apache.org",
-            "host_name": "c6402.ambari.apache.org"
-          },
-        }
-      ]
-    }
-
-    services = {
-      "Versions": {
-        "parent_stack_version": "2.5",
-        "stack_name": "HDP",
-        "stack_version": "2.6",
-        "stack_hierarchy": {
-          "stack_name": "HDP",
-          "stack_versions": ["2.5", "2.4", "2.3", "2.2", "2.1", "2.0.6"]
-        }
-      },
-      "services": [
-      ],
-      "configurations": {
-        "cluster-env": {
-          "properties": {
-            "agent_mounts_ignore_list": filtered_mount
-          }
-        }
-      }
-    }
-
-    filtered_hosts = self.stackAdvisor.filterHostMounts(hosts, services)
-
-    for host in filtered_hosts["items"]:
-      self.assertEquals(False, filtered_mount in host["Hosts"]["disk_info"])
-
-  def test_getMountPathVariations(self):
-
-    filtered_mount = "/data"
-
-    hosts = {
-      "items": [
-        {
-          "Hosts": {
-            "cpu_count": 4,
-            "total_mem": 50331648,
-            "disk_info": [
-              {"mountpoint": "/"},
-              {"mountpoint": "/dev/shm"},
-              {"mountpoint": "/vagrant"},
-              {"mountpoint": "/dev/shm"},
-              {"mountpoint": "/vagrant"},
-              {"mountpoint": filtered_mount},
-            ],
-            "public_host_name": "c6401.ambari.apache.org",
-            "host_name": "c6401.ambari.apache.org"
-          },
-        },
-        {
-          "Hosts": {
-            "cpu_count": 4,
-            "total_mem": 50331648,
-            "disk_info": [
-              {"mountpoint": "/"},
-              {"mountpoint": "/dev/shm1"},
-              {"mountpoint": "/vagrant1"},
-              {"mountpoint": filtered_mount}
-            ],
-            "public_host_name": "c6402.ambari.apache.org",
-            "host_name": "c6402.ambari.apache.org"
-          },
-        }
-      ]
-    }
-
-    services = {
-      "Versions": {
-        "parent_stack_version": "2.5",
-        "stack_name": "HDP",
-        "stack_version": "2.6",
-        "stack_hierarchy": {
-          "stack_name": "HDP",
-          "stack_versions": ["2.5", "2.4", "2.3", "2.2", "2.1", "2.0.6"]
-        }
-      },
-      "services": [
-      ],
-      "configurations": {
-        "cluster-env": {
-          "properties": {
-            "agent_mounts_ignore_list": filtered_mount
-          }
-        }
-      }
-    }
-
-    hosts = self.stackAdvisor.filterHostMounts(hosts, services)
-    avail_mounts = self.stackAdvisor.getMountPathVariations("/test/folder", "DATANODE", services, hosts)
-
-    self.assertEquals(True, avail_mounts is not None)
-    self.assertEquals(1, len(avail_mounts))
-    self.assertEquals("/test/folder", avail_mounts[0])
-
-  def test_updateMountProperties(self):
-    hosts = {
-      "items": [
-        {
-          "Hosts": {
-            "cpu_count": 4,
-            "total_mem": 50331648,
-            "disk_info": [
-              {"mountpoint": "/"},
-              {"mountpoint": "/dev/shm"},
-              {"mountpoint": "/vagrant"},
-              {"mountpoint": "/dev/shm"},
-              {"mountpoint": "/vagrant"},
-              {"mountpoint": "/data"},
-            ],
-            "public_host_name": "c6401.ambari.apache.org",
-            "host_name": "c6401.ambari.apache.org"
-          },
-        },
-        {
-          "Hosts": {
-            "cpu_count": 4,
-            "total_mem": 50331648,
-            "disk_info": [
-              {"mountpoint": "/"},
-              {"mountpoint": "/me"},
-              {"mountpoint": "/dev/shm1"},
-              {"mountpoint": "/vagrant1"},
-              {"mountpoint": "/data"}
-            ],
-            "public_host_name": "c6402.ambari.apache.org",
-            "host_name": "c6402.ambari.apache.org"
-          },
-        }
-      ]
-    }
-
-    services = {
-      "Versions": {
-        "parent_stack_version": "2.5",
-        "stack_name": "HDP",
-        "stack_version": "2.6",
-        "stack_hierarchy": {
-          "stack_name": "HDP",
-          "stack_versions": ["2.5", "2.4", "2.3", "2.2", "2.1", "2.0.6"]
-        }
-      },
-      "services": [
-      ],
-      "configurations": {
-        "cluster-env": {
-          "properties": {
-            "agent_mounts_ignore_list": ""
-          }
-        },
-        "some-site": {
-          "path_prop": "/test"
-        }
-      }
-    }
-
-    pathProperties = [
-      ("path_prop", "DATANODE", "/test", "multi"),
-    ]
-
-    configurations = {}
-
-    self.stackAdvisor.updateMountProperties("some-site", pathProperties, configurations, services, hosts)
-
-    self.assertEquals("/test,/data/test", configurations["some-site"]["properties"]["path_prop"])

http://git-wip-us.apache.org/repos/asf/ambari/blob/90967bcd/ambari-web/app/mixins.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins.js b/ambari-web/app/mixins.js
index 7b4d6b4..594ed74 100644
--- a/ambari-web/app/mixins.js
+++ b/ambari-web/app/mixins.js
@@ -69,3 +69,4 @@ require('mixins/common/widgets/widget_mixin');
 require('mixins/common/widgets/widget_section');
 require('mixins/unit_convert/base_unit_convert_mixin');
 require('mixins/unit_convert/convert_unit_widget_view_mixin');
+require('utils/configs/mount_points_based_initializer_mixin');

http://git-wip-us.apache.org/repos/asf/ambari/blob/90967bcd/ambari-web/app/utils/configs/config_initializer.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/configs/config_initializer.js b/ambari-web/app/utils/configs/config_initializer.js
index de9ca7e..cb5b41f 100644
--- a/ambari-web/app/utils/configs/config_initializer.js
+++ b/ambari-web/app/utils/configs/config_initializer.js
@@ -20,6 +20,7 @@ var App = require('app');
 var stringUtils = require('utils/string_utils');
 
 require('utils/configs/config_initializer_class');
+require('utils/configs/mount_points_based_initializer_mixin');
 require('utils/configs/hosts_based_initializer_mixin');
 
 /**
@@ -52,7 +53,7 @@ function getZKBasedConfig() {
  *
  * @instance ConfigInitializer
  */
-App.ConfigInitializer = App.ConfigInitializerClass.create(App.HostsBasedInitializerMixin, {
+App.ConfigInitializer = App.ConfigInitializerClass.create(App.MountPointsBasedInitializerMixin, App.HostsBasedInitializerMixin, {
 
   initializers: function() {
     return {
@@ -110,7 +111,26 @@ App.ConfigInitializer = App.ConfigInitializerClass.create(App.HostsBasedInitiali
       'templeton.zookeeper.hosts': getZKBasedConfig(),
       'hadoop.registry.zk.quorum': getZKBasedConfig(),
       'hive.cluster.delegation.token.store.zookeeper.connectString': getZKBasedConfig(),
-      'instance.zookeeper.host': getZKBasedConfig()
+      'instance.zookeeper.host': getZKBasedConfig(),
+
+      'dfs.name.dir': this.getMultipleMountPointsConfig('NAMENODE', 'file'),
+      'dfs.namenode.name.dir': this.getMultipleMountPointsConfig('NAMENODE', 'file'),
+      'dfs.data.dir': this.getMultipleMountPointsConfig('DATANODE', 'file'),
+      'dfs.datanode.data.dir': this.getMultipleMountPointsConfig('DATANODE', 'file'),
+      'yarn.nodemanager.local-dirs': this.getMultipleMountPointsConfig('NODEMANAGER'),
+      'yarn.nodemanager.log-dirs': this.getMultipleMountPointsConfig('NODEMANAGER'),
+      'mapred.local.dir': this.getMultipleMountPointsConfig(['TASKTRACKER', 'NODEMANAGER']),
+      'log.dirs': this.getMultipleMountPointsConfig('KAFKA_BROKER'),
+
+      'fs.checkpoint.dir': this.getSingleMountPointConfig('SECONDARY_NAMENODE', 'file'),
+      'dfs.namenode.checkpoint.dir': this.getSingleMountPointConfig('SECONDARY_NAMENODE', 'file'),
+      'yarn.timeline-service.leveldb-timeline-store.path': this.getSingleMountPointConfig('APP_TIMELINE_SERVER'),
+      'yarn.timeline-service.leveldb-state-store.path': this.getSingleMountPointConfig('APP_TIMELINE_SERVER'),
+      'dataDir': this.getSingleMountPointConfig('ZOOKEEPER_SERVER'),
+      'oozie_data_dir': this.getSingleMountPointConfig('OOZIE_SERVER'),
+      'storm.local.dir': this.getSingleMountPointConfig(['NODEMANAGER', 'NIMBUS']),
+      '*.falcon.graph.storage.directory': this.getSingleMountPointConfig('FALCON_SERVER'),
+      '*.falcon.graph.serialize.path': this.getSingleMountPointConfig('FALCON_SERVER')
     }
   }.property(''),
 
@@ -126,7 +146,9 @@ App.ConfigInitializer = App.ConfigInitializerClass.create(App.HostsBasedInitiali
   },
 
   initializerTypes: [
-    {name: 'zookeeper_based', method: '_initAsZookeeperServersList'}
+    {name: 'zookeeper_based', method: '_initAsZookeeperServersList'},
+    {name: 'single_mountpoint', method: '_initAsSingleMountPoint'},
+    {name: 'multiple_mountpoints', method: '_initAsMultipleMountPoints'}
   ],
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/90967bcd/ambari-web/app/utils/configs/mount_points_based_initializer_mixin.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/configs/mount_points_based_initializer_mixin.js b/ambari-web/app/utils/configs/mount_points_based_initializer_mixin.js
new file mode 100644
index 0000000..59a3985
--- /dev/null
+++ b/ambari-web/app/utils/configs/mount_points_based_initializer_mixin.js
@@ -0,0 +1,340 @@
+/**
+ * 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.
+ */
+
+var App = require('app');
+
+/**
+ * Regexp used to determine if mount point is windows-like
+ *
+ * @type {RegExp}
+ */
+var winRegex = /^([a-z]):\\?$/;
+
+App.MountPointsBasedInitializerMixin = Em.Mixin.create({
+
+  /**
+   * Map for methods used as value-modifiers for configProperties with values as mount point(s)
+   * Used if mount point is win-like (@see winRegex)
+   * Key: id
+   * Value: method-name
+   *
+   * @type {{default: string, file: string, slashes: string}}
+   */
+  winReplacersMap: {
+    default: '_defaultWinReplace',
+    file: '_winReplaceWithFile',
+    slashes: '_defaultWinReplaceWithAdditionalSlashes'
+  },
+
+  /**
+   * Initializer for configs with value as one of the possible mount points
+   * Only hosts that contains on the components from <code>initializer.components</code> are processed
+   * Hosts with Windows needs additional processing (@see winReplacersMap)
+   * Value example: '/', '/some/cool/dir'
+   *
+   * @param {configProperty} configProperty
+   * @param {topologyLocalDB} localDB
+   * @param {object} dependencies
+   * @param {object} initializer
+   * @return {Object}
+   */
+  _initAsSingleMountPoint: function (configProperty, localDB, dependencies, initializer) {
+    var hostsInfo = this._updateHostInfo(localDB.hosts);
+    var setOfHostNames = this._getSetOfHostNames(localDB, initializer);
+    var winReplacersMap = this.get('winReplacersMap');
+    // In Add Host Wizard, if we did not select this slave component for any host, then we don't process any further.
+    if (!setOfHostNames.length) {
+      return configProperty;
+    }
+    var allMountPoints = this._getAllMountPoints(setOfHostNames, hostsInfo, localDB);
+
+    var mPoint = allMountPoints[0].mountpoint;
+    if (mPoint === "/") {
+      mPoint = Em.get(configProperty, 'recommendedValue');
+    }
+    else {
+      var mp = mPoint.toLowerCase();
+      if (winRegex.test(mp)) {
+        var methodName = winReplacersMap[initializer.winReplacer];
+        mPoint = this[methodName].call(this, configProperty, mp);
+      }
+      else {
+        mPoint = mPoint + Em.get(configProperty, 'recommendedValue');
+      }
+    }
+    Em.setProperties(configProperty, {
+      value: mPoint,
+      recommendedValue: mPoint
+    });
+
+    return configProperty;
+  },
+
+  /**
+   * Initializer for configs with value as all of the possible mount points
+   * Only hosts that contains on the components from <code>initializer.components</code> are processed
+   * Hosts with Windows needs additional processing (@see winReplacersMap)
+   * Value example: '/\n/some/cool/dir' (`\n` - is divider)
+   *
+   * @param {Object} configProperty
+   * @param {topologyLocalDB} localDB
+   * @param {object} dependencies
+   * @param {object} initializer
+   * @return {Object}
+   */
+  _initAsMultipleMountPoints: function (configProperty, localDB, dependencies, initializer) {
+    var hostsInfo = this._updateHostInfo(localDB.hosts);
+    var self = this;
+    var setOfHostNames = this._getSetOfHostNames(localDB, initializer);
+    var winReplacersMap = this.get('winReplacersMap');
+    // In Add Host Wizard, if we did not select this slave component for any host, then we don't process any further.
+    if (!setOfHostNames.length) {
+      return configProperty;
+    }
+
+    var allMountPoints = this._getAllMountPoints(setOfHostNames, hostsInfo, localDB);
+    var mPoint = '';
+
+    allMountPoints.forEach(function (eachDrive) {
+      if (eachDrive.mountpoint === '/') {
+        mPoint += Em.get(configProperty, 'recommendedValue') + "\n";
+      }
+      else {
+        var mp = eachDrive.mountpoint.toLowerCase();
+        if (winRegex.test(mp)) {
+          var methodName = winReplacersMap[initializer.winReplacer];
+          mPoint += self[methodName].call(this, configProperty, mp);
+        }
+        else {
+          mPoint += eachDrive.mountpoint + Em.get(configProperty, 'recommendedValue') + "\n";
+        }
+      }
+    }, this);
+
+    Em.setProperties(configProperty, {
+      value: mPoint,
+      recommendedValue: mPoint
+    });
+
+    return configProperty;
+  },
+
+  /**
+   * Replace drive-based windows-path with 'file:///'
+   *
+   * @param {configProperty} configProperty
+   * @param {string} mountPoint
+   * @returns {string}
+   * @private
+   */
+  _winReplaceWithFile: function (configProperty, mountPoint) {
+    var winDriveUrl = mountPoint.toLowerCase().replace(winRegex, 'file:///$1:');
+    return winDriveUrl + Em.get(configProperty, 'recommendedValue') + '\n';
+  },
+
+  /**
+   * Replace drive-based windows-path
+   *
+   * @param {configProperty} configProperty
+   * @param {string} mountPoint
+   * @returns {string}
+   * @private
+   */
+  _defaultWinReplace: function (configProperty, mountPoint) {
+    var winDrive = mountPoint.toLowerCase().replace(winRegex, '$1:');
+    var winDir = Em.get(configProperty, 'recommendedValue').replace(/\//g, '\\');
+    return winDrive + winDir + '\n';
+  },
+
+  /**
+   * Same to <code>_defaultWinReplace</code>, but with extra-slash in the end
+   *
+   * @param {configProperty} configProperty
+   * @param {string} mountPoint
+   * @returns {string}
+   * @private
+   */
+  _defaultWinReplaceWithAdditionalSlashes: function (configProperty, mountPoint) {
+    var winDrive = mountPoint.toLowerCase().replace(winRegex, '$1:');
+    var winDir = Em.get(configProperty, 'recommendedValue').replace(/\//g, '\\\\');
+    return winDrive + winDir + '\n';
+  },
+
+  /**
+   * Update information from localDB using <code>App.Host</code>-model
+   *
+   * @param {object} hostsInfo
+   * @returns {object}
+   * @private
+   */
+  _updateHostInfo: function (hostsInfo) {
+    App.Host.find().forEach(function (item) {
+      if (!hostsInfo[item.get('id')]) {
+        hostsInfo[item.get('id')] = {
+          name: item.get('id'),
+          cpu: item.get('cpu'),
+          memory: item.get('memory'),
+          disk_info: item.get('diskInfo'),
+          bootStatus: "REGISTERED",
+          isInstalled: true
+        };
+      }
+    });
+    return hostsInfo;
+  },
+
+  /**
+   * Determines if mount point is valid
+   * Criterias:
+   * <ul>
+   *   <li>Should has available space</li>
+   *   <li>Should not be home-dir</li>
+   *   <li>Should not be docker-dir</li>
+   *   <li>Should not be boot-dir</li>
+   *   <li>Should not be dev-dir</li>
+   *   <li>Valid mount point started from /usr/hdp/ should be /usr/hdp/current
+   *       or /usr/hdp/<STACK_VERSION_NUMBER> e.g. /usr/hdp/2.5.0.0
+   *   </li>
+   * </ul>
+   *
+   * @param {{mountpoint: string, available: number}} mPoint
+   * @returns {function} true - valid, false - invalid
+   * @private
+   */
+  _filterMountPoint: function (localDB) {
+    var stackVersionNumber = [Em.getWithDefault(localDB.selectedStack || {}, 'repository_version', null)].compact();
+    return function(mPoint) {
+      var isAvailable = mPoint.available !== 0;
+      if (!isAvailable) {
+        return false;
+      }
+
+      var stackRoot = '/usr/hdp';
+      var notHome = !['/', '/home'].contains(mPoint.mountpoint);
+      var notDocker = !['/etc/resolv.conf', '/etc/hostname', '/etc/hosts'].contains(mPoint.mountpoint);
+      var notBoot = mPoint.mountpoint && !(mPoint.mountpoint.startsWith('/boot')
+                                           || mPoint.mountpoint.startsWith('/mnt')
+                                           || mPoint.mountpoint.startsWith('/tmp'));
+      var notDev = !(['devtmpfs', 'tmpfs', 'vboxsf', 'CDFS'].contains(mPoint.type));
+      var validStackRootMount = !(mPoint.mountpoint.startsWith(stackRoot) && !['current'].concat(stackVersionNumber).filter(function(i) {
+        return mPoint.mountpoint === stackRoot + '/' + i;
+      }).length);
+
+      return notHome && notDocker && notBoot && notDev && validStackRootMount;
+    };
+  },
+
+  /**
+   * Get list of hostNames from localDB which contains needed components
+   *
+   * @param {topologyLocalDB} localDB
+   * @param {object} initializer
+   * @returns {string[]}
+   * @private
+   */
+  _getSetOfHostNames: function (localDB, initializer) {
+    var masterComponentHostsInDB = Em.getWithDefault(localDB, 'masterComponentHosts', []);
+    var slaveComponentHostsInDB = Em.getWithDefault(localDB, 'slaveComponentHosts', []);
+    var hosts = masterComponentHostsInDB.filter(function (master) {
+      return initializer.components.contains(master.component);
+    }).mapProperty('hostName');
+
+    var sHosts = slaveComponentHostsInDB.find(function (slave) {
+      return initializer.components.contains(slave.componentName);
+    });
+    if (sHosts) {
+      hosts = hosts.concat(sHosts.hosts.mapProperty('hostName'));
+    }
+    return hosts;
+  },
+
+  /**
+   * Get list of all unique valid mount points for hosts
+   *
+   * @param {string[]} setOfHostNames
+   * @param {object} hostsInfo
+   * @param {topologyLocalDB} localDB
+   * @returns {string[]}
+   * @private
+   */
+  _getAllMountPoints: function (setOfHostNames, hostsInfo, localDB) {
+    var allMountPoints = [],
+        mountPointFilter = this._filterMountPoint(localDB);
+    for (var i = 0; i < setOfHostNames.length; i++) {
+      var hostname = setOfHostNames[i];
+      var mountPointsPerHost = hostsInfo[hostname].disk_info;
+      var mountPointAsRoot = mountPointsPerHost.findProperty('mountpoint', '/');
+
+      // If Server does not send any host details information then atleast one mountpoint should be presumed as root
+      // This happens in a single container Linux Docker environment.
+      if (!mountPointAsRoot) {
+        mountPointAsRoot = {
+          mountpoint: '/'
+        };
+      }
+
+      mountPointsPerHost.filter(mountPointFilter).forEach(function (mPoint) {
+        if( !allMountPoints.findProperty("mountpoint", mPoint.mountpoint)) {
+          allMountPoints.push(mPoint);
+        }
+      }, this);
+    }
+
+    if (!allMountPoints.length) {
+      allMountPoints.push(mountPointAsRoot);
+    }
+    return allMountPoints;
+  },
+
+  /**
+   * Settings for <code>single_mountpoint</code>-initializer
+   * Used for configs with value as one of the possible mount points
+   *
+   * @see _initAsSingleMountPoint
+   * @param {string|string[]} components
+   * @param {string} winReplacer
+   * @returns {{components: string[], winReplacer: string, type: string}}
+   */
+  getSingleMountPointConfig: function (components, winReplacer) {
+    winReplacer = winReplacer || 'default';
+    return {
+      components: Em.makeArray(components),
+      winReplacer: winReplacer,
+      type: 'single_mountpoint'
+    };
+  },
+
+  /**
+   * Settings for <code>multiple_mountpoints</code>-initializer
+   * Used for configs with value as all of the possible mount points
+   *
+   * @see _initAsMultipleMountPoints
+   * @param {string|string[]} components
+   * @param {string} winReplacer
+   * @returns {{components: string[], winReplacer: string, type: string}}
+   */
+  getMultipleMountPointsConfig: function (components, winReplacer) {
+    winReplacer = winReplacer || 'default';
+    return {
+      components: Em.makeArray(components),
+      winReplacer: winReplacer,
+      type: 'multiple_mountpoints'
+    };
+  }
+
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/90967bcd/ambari-web/test/utils/ajax/ajax_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/utils/ajax/ajax_test.js b/ambari-web/test/utils/ajax/ajax_test.js
index 3556e1e..d252c3d 100644
--- a/ambari-web/test/utils/ajax/ajax_test.js
+++ b/ambari-web/test/utils/ajax/ajax_test.js
@@ -29,16 +29,11 @@ describe('App.ajax', function() {
 
   beforeEach(function() {
     App.ajax.send.restore();
-    sinon.stub(App.logger, 'setTimer');
     sinon.spy(App.ajax, 'send'); // no sense to test stubbed function, so going to spy on it
     App.set('apiPrefix', '/api/v1');
     App.set('clusterName', 'tdk');
   });
 
-  afterEach(function() {
-    App.logger.setTimer.restore();
-  });
-
   describe('#send', function() {
     it('Without sender', function() {
       expect(App.ajax.send({})).to.equal(null);
@@ -173,7 +168,7 @@ describe('App.ajax', function() {
       });
     });
   });
-
+  
   describe('#abortRequests', function () {
 
     var xhr = {
@@ -203,6 +198,6 @@ describe('App.ajax', function() {
     it('should clear requests array', function () {
       expect(requests).to.have.length(0);
     });
-
+    
   });
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/90967bcd/ambari-web/test/utils/configs/config_initializer_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/utils/configs/config_initializer_test.js b/ambari-web/test/utils/configs/config_initializer_test.js
index ceed065..19ba03d 100644
--- a/ambari-web/test/utils/configs/config_initializer_test.js
+++ b/ambari-web/test/utils/configs/config_initializer_test.js
@@ -905,6 +905,312 @@ describe('App.ConfigInitializer', function () {
 
   });
 
+  describe('config with mount points', function () {
+
+    var localDB = {
+        masterComponentHosts: [
+          {
+            component: 'NAMENODE',
+            hostName: 'h0'
+          },
+          {
+            component: 'SECONDARY_NAMENODE',
+            hostName: 'h4'
+          },
+          {
+            component: 'APP_TIMELINE_SERVER',
+            hostName: 'h0'
+          },
+          {
+            component: 'ZOOKEEPER_SERVER',
+            hostName: 'h0'
+          },
+          {
+            component: 'ZOOKEEPER_SERVER',
+            hostName: 'h1'
+          },
+          {
+            component: 'OOZIE_SERVER',
+            hostName: 'h0'
+          },
+          {
+            component: 'OOZIE_SERVER',
+            hostName: 'h1'
+          },
+          {
+            component: 'NIMBUS',
+            hostName: 'h2'
+          },
+          {
+            component: 'FALCON_SERVER',
+            hostName: 'h3'
+          },
+          {
+            component: 'KAFKA_BROKER',
+            hostName: 'h0'
+          },
+          {
+            component: 'KAFKA_BROKER',
+            hostName: 'h1'
+          }
+        ],
+        slaveComponentHosts: [
+          {
+            componentName: 'DATANODE',
+            hosts: [
+              {
+                hostName: 'h0'
+              },
+              {
+                hostName: 'h1'
+              }
+            ]
+          },
+          {
+            componentName: 'TASKTRACKER',
+            hosts: [
+              {
+                hostName: 'h0'
+              },
+              {
+                hostName: 'h1'
+              }
+            ]
+          },
+          {
+            componentName: 'NODEMANAGER',
+            hosts: [
+              {
+                hostName: 'h0'
+              },
+              {
+                hostName: 'h1'
+              },
+              {
+                hostName: 'h4'
+              }
+            ]
+          },
+          {
+            componentName: 'HBASE_REGIONSERVER',
+            hosts: [
+              {
+                hostName: 'h0'
+              },
+              {
+                hostName: 'h1'
+              }
+            ]
+          },
+          {
+            componentName: 'SUPERVISOR',
+            hosts: [
+              {
+                hostName: 'h0'
+              },
+              {
+                hostName: 'h1'
+              }
+            ]
+          }
+        ],
+        hosts: {
+          h0: {
+            disk_info: [
+              {
+                mountpoint: '/'
+              },
+              {
+                mountpoint: '/home'
+              },
+              {
+                mountpoint: '/boot'
+              },
+              {
+                mountpoint: '/boot/efi'
+              },
+              {
+                mountpoint: '/mnt'
+              },
+              {
+                mountpoint: '/mnt/efi'
+              },
+              {
+                mountpoint: '/media/disk0',
+                available: '100000000'
+              },
+              {
+                mountpoint: '/mount0',
+                available: '100000000'
+              }
+            ]
+          },
+          h4: {
+            disk_info: [
+              {
+                mountpoint: 'c:',
+                available: '100000000'
+              }
+            ]
+          }
+        }
+      },
+      cases = [
+        {
+          name: 'dfs.namenode.name.dir',
+          isOnlyFirstOneNeeded: false,
+          value: '/media/disk0/default\n/mount0/default\n'
+        },
+        {
+          name: 'dfs.name.dir',
+          isOnlyFirstOneNeeded: false,
+          value: '/media/disk0/default\n/mount0/default\n'
+        },
+        {
+          name: 'fs.checkpoint.dir',
+          isOnlyFirstOneNeeded: true,
+          value: 'file:///c:/default\n'
+        },
+        {
+          name: 'dfs.namenode.checkpoint.dir',
+          isOnlyFirstOneNeeded: true,
+          value: 'file:///c:/default\n'
+        },
+        {
+          name: 'dfs.data.dir',
+          isOnlyFirstOneNeeded: false,
+          value: '/media/disk0/default\n/mount0/default\n/media/disk1/default\n/mount1/default\n'
+        },
+        {
+          name: 'dfs.datanode.data.dir',
+          isOnlyFirstOneNeeded: false,
+          value: '/media/disk0/default\n/mount0/default\n/media/disk1/default\n/mount1/default\n'
+        },
+        {
+          name: 'mapred.local.dir',
+          isOnlyFirstOneNeeded: false,
+          value: '/media/disk0/default\n/mount0/default\n/media/disk1/default\n/mount1/default\n'
+        },
+        {
+          name: 'yarn.nodemanager.log-dirs',
+          isOnlyFirstOneNeeded: false,
+          value: '/media/disk0/default\n/mount0/default\n/media/disk1/default\n/mount1/default\nc:\\default\n'
+        },
+        {
+          name: 'yarn.nodemanager.local-dirs',
+          isOnlyFirstOneNeeded: false,
+          value: '/media/disk0/default\n/mount0/default\n/media/disk1/default\n/mount1/default\nc:\\default\n'
+        },
+        {
+          name: 'yarn.timeline-service.leveldb-timeline-store.path',
+          isOnlyFirstOneNeeded: true,
+          value: '/media/disk0/default'
+        },
+        {
+          name: 'yarn.timeline-service.leveldb-state-store.path',
+          isOnlyFirstOneNeeded: true,
+          value: '/media/disk0/default'
+        },
+        {
+          name: 'dataDir',
+          isOnlyFirstOneNeeded: true,
+          value: '/media/disk0/default'
+        },
+        {
+          name: 'oozie_data_dir',
+          isOnlyFirstOneNeeded: true,
+          value: '/media/disk0/default'
+        },
+        {
+          name: 'storm.local.dir',
+          isOnlyFirstOneNeeded: true,
+          value: '/media/disk0/default'
+        },
+        {
+          name: '*.falcon.graph.storage.directory',
+          isOnlyFirstOneNeeded: true,
+          value: '/default'
+        },
+        {
+          name: '*.falcon.graph.serialize.path',
+          isOnlyFirstOneNeeded: true,
+          value: '/default'
+        },
+        {
+          name: 'log.dirs',
+          isOnlyFirstOneNeeded: false,
+          value: '/media/disk0/default\n/mount0/default\n/media/disk1/default\n/mount1/default\n'
+        }
+      ];
+
+    beforeEach(function () {
+      sinon.stub(App.Host, 'find').returns([
+        Em.Object.create({
+          id: 'h1',
+          diskInfo: [
+            {
+              mountpoint: '/media/disk1',
+              type: 'devtmpfs'
+            },
+            {
+              mountpoint: '/media/disk1',
+              type: 'tmpfs'
+            },
+            {
+              mountpoint: '/media/disk1',
+              type: 'vboxsf'
+            },
+            {
+              mountpoint: '/media/disk1',
+              type: 'CDFS'
+            },
+            {
+              mountpoint: '/media/disk1',
+              available: '0'
+            },
+            {
+              mountpoint: '/media/disk1',
+              available: '100000000'
+            },
+            {
+              mountpoint: '/mount1',
+              available: '100000000'
+            }
+          ]
+        }),
+        Em.Object.create({
+          id: 'h2',
+          diskInfo: [
+            {
+              mountpoint: '/'
+            }
+          ]
+        }),
+        Em.Object.create({
+          id: 'h3',
+          diskInfo: []
+        })
+      ]);
+    });
+
+    afterEach(function () {
+      App.Host.find.restore();
+    });
+
+    cases.forEach(function (item) {
+      it(item.name, function () {
+        serviceConfigProperty.setProperties({
+          name: item.name,
+          recommendedValue: '/default'
+        });
+        App.ConfigInitializer.initialValue(serviceConfigProperty, localDB, {});
+        expect(serviceConfigProperty.get('value')).to.equal(item.value);
+        expect(serviceConfigProperty.get('recommendedValue')).to.equal(item.value);
+      });
+    });
+
+  });
+
   describe('initializerTypes', function () {
     var types = App.ConfigInitializer.get('initializerTypes');
     Em.keys(types).forEach(function(type) {
@@ -950,4 +1256,156 @@ describe('App.ConfigInitializer', function () {
     });
 
   });
+
+  describe('#_filterMountPoint', function() {
+    [
+      {
+        mPoint: {
+          mountpoint: '/'
+        },
+        localDB: {},
+        e: false
+      },
+      {
+        mPoint: {
+          mountpoint: '/home'
+        },
+        localDB: {},
+        e: false
+      },
+      {
+        mPoint: {
+          mountpoint: '/etc/resolv.conf'
+        },
+        localDB: {},
+        e: false
+      },
+      {
+        mPoint: {
+          mountpoint: '/etc/hostname'
+        },
+        localDB: {},
+        e: false
+      },
+      {
+        mPoint: {
+          mountpoint: '/etc/hosts'
+        },
+        localDB: {},
+        e: false
+      },
+      {
+        mPoint: {
+          mountpoint: '/boot'
+        },
+        localDB: {},
+        e: false
+      },
+      {
+        mPoint: {
+          mountpoint: '/mnt'
+        },
+        localDB: {},
+        e: false
+      },
+      {
+        mPoint: {
+          mountpoint: '/tmp'
+        },
+        localDB: {},
+        e: false
+      },
+      {
+        mPoint: {
+          mountpoint: '/some-dir',
+          type: 'devtmpfs'
+        },
+        localDB: {},
+        e: false
+      },
+      {
+        mPoint: {
+          mountpoint: '/some-dir',
+          type: 'tmpfs'
+        },
+        localDB: {},
+        e: false
+      },
+      {
+        mPoint: {
+          mountpoint: '/some-dir',
+          type: 'vboxsf'
+        },
+        localDB: {},
+        e: false
+      },
+      {
+        mPoint: {
+          mountpoint: '/some-dir',
+          type: 'CDFS'
+        },
+        localDB: {},
+        e: false
+      },
+      {
+        mPoint: {
+          mountpoint: '/usr/hdp'
+        },
+        localDB: {},
+        e: false
+      },
+      {
+        mPoint: {
+          mountpoint: '/usr/hdp/1'
+        },
+        localDB: {},
+        e: false
+      },
+      {
+        mPoint: {
+          mountpoint: '/usr/hdp/current'
+        },
+        localDB: {},
+        e: true
+      },
+      {
+        mPoint: {
+          mountpoint: '/usr/hdp/2.5'
+        },
+        localDB: {
+          selectedStack: {
+            repository_version: '2.5'
+          }
+        },
+        e: true
+      },
+      {
+        mPoint: {
+          mountpoint: '/usr/hdp/2.5.0'
+        },
+        localDB: {
+          selectedStack: {
+            repository_version: '2.5'
+          }
+        },
+        e: false
+      },
+      {
+        mPoint: {
+          mountpoint: '/normal/directory'
+        },
+        localDB: {
+          selectedStack: {
+            repository_version: '2.5'
+          }
+        },
+        e: true
+      }
+    ].forEach(function(test) {
+      it('mount point "{0}" should be {1}'.format(test.mPoint.mountpoint, test.e ? 'valid' : 'invalid'), function() {
+        var fFn = App.ConfigInitializer._filterMountPoint(test.localDB);
+        expect(fFn(test.mPoint)).to.be.equal(test.e);
+      });
+    });
+  });
 });


[20/47] ambari git commit: AMBARI-18934 - Management packs should be able to link grafana dashboards and service metrics for custom services

Posted by jo...@apache.org.
AMBARI-18934 - Management packs should be able to link grafana dashboards and service metrics for custom services


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: 4a7cbcb1b49d070f57c9d5ba9771ad72765693a4
Parents: 2ce9e3b
Author: Tim Thorpe <tt...@apache.org>
Authored: Tue Nov 22 07:52:49 2016 -0800
Committer: Tim Thorpe <tt...@apache.org>
Committed: Tue Nov 22 07:52:49 2016 -0800

----------------------------------------------------------------------
 ambari-server/pom.xml                           |   2 +
 .../python/ambari_server/serverConfiguration.py |   9 +-
 .../main/python/ambari_server/setupMpacks.py    | 105 ++++++--
 ambari-server/src/test/python/TestMpacks.py     | 217 +++++++++++----
 .../grafana-dashboards/grafana-hdfs-users.json  | 270 +++++++++++++++++++
 .../dashboards/service-metrics/STORM.txt        |   7 +
 .../python/uninstall/common-services/SERVICEA   |   1 +
 .../python/uninstall/common-services/SERVICEB   |   1 +
 .../test/python/uninstall/dashboards/SERVICEA   |   1 +
 .../test/python/uninstall/dashboards/SERVICEB   |   1 +
 .../uninstall/dashboards/files/README.txt       |  17 ++
 .../python/uninstall/dashboards/files/STORM.txt |   1 +
 .../uninstall/dashboards/files/metainfo.xml     |   1 +
 .../test/python/uninstall/extensions/SERVICEA   |   1 +
 .../test/python/uninstall/extensions/SERVICEB   |   1 +
 .../test/python/uninstall/stacks/2.0/SERVICEA   |   1 +
 .../test/python/uninstall/stacks/2.0/SERVICEB   |   1 +
 .../uninstall/stacks/2.0/files/README.txt       |  17 ++
 .../uninstall/stacks/2.0/files/metainfo1.xml    |   1 +
 .../uninstall/stacks/2.0/files/metainfo2.xml    |   1 +
 20 files changed, 586 insertions(+), 70 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/4a7cbcb1/ambari-server/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-server/pom.xml b/ambari-server/pom.xml
index 36c57de..69ab9d0 100644
--- a/ambari-server/pom.xml
+++ b/ambari-server/pom.xml
@@ -274,6 +274,8 @@
             <exclude>src/test/resources/users.ldif</exclude>
             <exclude>src/test/resources/mpacks_replay.log</exclude>
             <exclude>src/test/python/stacks/2.5/HIVE/*.txt</exclude>
+            <exclude>src/test/python/mpacks/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/3.0/services/SERVICEC/dashboards/service-metrics/STORM.txt</exclude>
+            <exclude>src/test/python/uninstall/dashboards/files/STORM.txt</exclude>
             <exclude>src/main/resources/hive-schema-0.10.0.oracle.sql</exclude>
             <exclude>src/main/resources/hive-schema-0.12.0.oracle.sql</exclude>
             <exclude>src/main/resources/db/serial</exclude>

http://git-wip-us.apache.org/repos/asf/ambari/blob/4a7cbcb1/ambari-server/src/main/python/ambari_server/serverConfiguration.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/python/ambari_server/serverConfiguration.py b/ambari-server/src/main/python/ambari_server/serverConfiguration.py
index 3086003..9596e0d 100644
--- a/ambari-server/src/main/python/ambari_server/serverConfiguration.py
+++ b/ambari-server/src/main/python/ambari_server/serverConfiguration.py
@@ -186,6 +186,7 @@ SETUP_OR_UPGRADE_MSG = "- If this is a new setup, then run the \"ambari-server s
 DEFAULT_DB_NAME = "ambari"
 
 SECURITY_KEYS_DIR = "security.server.keys_dir"
+DASHBOARD_PATH_PROPERTY = 'dashboards.path'
 EXTENSION_PATH_PROPERTY = 'extensions.path'
 COMMON_SERVICES_PATH_PROPERTY = 'common.services.path'
 MPACKS_STAGING_PATH_PROPERTY = 'mpacks.staging.path'
@@ -1447,7 +1448,13 @@ def get_mpacks_staging_location(properties):
 # Dashboard location
 #
 def get_dashboard_location(properties):
-  dashboard_location = configDefaults.DASHBOARD_LOCATION_DEFAULT
+  try:
+    dashboard_location = properties[DASHBOARD_PATH_PROPERTY]
+  except KeyError:
+    dashboard_location = configDefaults.DASHBOARD_LOCATION_DEFAULT
+
+  if not dashboard_location:
+    dashboard_location = configDefaults.DASHBOARD_LOCATION_DEFAULT
   return dashboard_location
 
 #

http://git-wip-us.apache.org/repos/asf/ambari/blob/4a7cbcb1/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 773d946..131e14d 100755
--- a/ambari-server/src/main/python/ambari_server/setupMpacks.py
+++ b/ambari-server/src/main/python/ambari_server/setupMpacks.py
@@ -32,7 +32,7 @@ from ambari_commons.logging_utils import print_info_msg, print_error_msg, print_
 from ambari_commons.os_utils import copy_file, run_os_command
 from ambari_server.serverConfiguration import get_ambari_properties, get_ambari_version, get_stack_location, \
   get_common_services_location, get_mpacks_staging_location, get_server_temp_location, get_extension_location, \
-  get_java_exe_path, read_ambari_user, parse_properties_file, JDBC_DATABASE_PROPERTY
+  get_java_exe_path, read_ambari_user, parse_properties_file, JDBC_DATABASE_PROPERTY, get_dashboard_location
 from ambari_server.setupSecurity import ensure_can_start_under_current_user, generate_env
 from ambari_server.setupActions import INSTALL_MPACK_ACTION, UPGRADE_MPACK_ACTION
 from ambari_server.userInput import get_YN_input
@@ -50,6 +50,12 @@ logger = logging.getLogger(__name__)
 
 MPACKS_REPLAY_LOG_FILENAME = "mpacks_replay.log"
 MPACKS_CACHE_DIRNAME = "cache"
+SERVICES_DIRNAME = "services"
+DASHBOARDS_DIRNAME = "dashboards"
+GRAFANA_DASHBOARDS_DIRNAME = "grafana-dashboards"
+SERVICE_METRICS_DIRNAME = "service-metrics"
+METRICS_EXTENSION = ".txt"
+
 STACK_DEFINITIONS_RESOURCE_NAME = "stack-definitions"
 EXTENSION_DEFINITIONS_RESOURCE_NAME = "extension-definitions"
 SERVICE_DEFINITIONS_RESOURCE_NAME = "service-definitions"
@@ -187,8 +193,9 @@ def get_mpack_properties():
   extension_location = get_extension_location(properties)
   service_definitions_location = get_common_services_location(properties)
   mpacks_staging_location = get_mpacks_staging_location(properties)
+  dashboard_location = get_dashboard_location(properties)
   ambari_version = get_ambari_version(properties)
-  return stack_location, extension_location, service_definitions_location, mpacks_staging_location
+  return stack_location, extension_location, service_definitions_location, mpacks_staging_location, dashboard_location
 
 def _get_mpack_name_version(mpack_path):
   """
@@ -225,22 +232,35 @@ def create_symlink(src_dir, dest_dir, file_name, force=False):
   """
   src_path = os.path.join(src_dir, file_name)
   dest_link = os.path.join(dest_dir, file_name)
+  create_symlink_using_path(src_path, dest_link, force)
+
+def create_symlink_using_path(src_path, dest_link, force=False):
+  """
+  Helper function to create symbolic link (dest_link -> src_path)
+  :param src_path: Source path
+  :param dest_link: Destination link
+  :param force: Remove existing symlink
+  """
   if force and os.path.islink(dest_link):
     sudo.unlink(dest_link)
   sudo.symlink(src_path, dest_link)
   print_info_msg("Symlink: " + dest_link)
 
-def remove_symlinks(stack_location, service_definitions_location, staged_mpack_dir):
+def remove_symlinks(stack_location, extension_location, service_definitions_location, dashboard_location, staged_mpack_dir):
   """
   Helper function to remove all symbolic links pointed to a management pack
   :param stack_location: Path to stacks folder
                          (/var/lib/ambari-server/resources/stacks)
+  :param extension_location: Path to extensions folder
+                             (/var/lib/ambari-server/resources/extension)
   :param service_definitions_location: Path to service_definitions folder
                                       (/var/lib/ambari-server/resources/common-services)
+  :param dashboard_location: Path to the custom service dashboard folder
+                             (/var/lib/ambari-server/resources/dashboards)
   :param staged_mpack_dir: Path to management pack staging location
                            (/var/lib/ambari-server/resources/mpacks/mpack_name-mpack_version)
   """
-  for location in [stack_location, service_definitions_location]:
+  for location in [stack_location, extension_location, service_definitions_location, dashboard_location]:
     for root, dirs, files in os.walk(location):
       for name in files:
         file = os.path.join(root, name)
@@ -292,7 +312,7 @@ def validate_purge(options, purge_list, mpack_dir, mpack_metadata, replay_mode=F
   :param replay_mode: Flag to indicate if purging in replay mode
   """
   # Get ambari mpacks config properties
-  stack_location, extension_location, service_definitions_location, mpacks_staging_location = get_mpack_properties()
+  stack_location, extension_location, service_definitions_location, mpacks_staging_location, dashboard_location = get_mpack_properties()
 
   if not purge_list:
     return
@@ -338,7 +358,7 @@ def purge_stacks_and_mpacks(purge_list, replay_mode=False):
   :param replay_mode: Flag to indicate if purging in replay mode
   """
   # Get ambari mpacks config properties
-  stack_location, extension_location, service_definitions_location, mpacks_staging_location = get_mpack_properties()
+  stack_location, extension_location, service_definitions_location, mpacks_staging_location, dashboard_location = get_mpack_properties()
 
   print_info_msg("Purging existing stack definitions and management packs")
 
@@ -376,7 +396,7 @@ def process_stack_definitions_artifact(artifact, artifact_source_dir, options):
   :param options: Command line options
   """
   # Get ambari mpack properties
-  stack_location, extension_location, service_definitions_location, mpacks_staging_location = get_mpack_properties()
+  stack_location, extension_location, service_definitions_location, mpacks_staging_location, dashboard_location = get_mpack_properties()
   for file in sorted(os.listdir(artifact_source_dir)):
     if os.path.isfile(os.path.join(artifact_source_dir, file)):
       # Example: /var/lib/ambari-server/resources/stacks/stack_advisor.py
@@ -395,16 +415,53 @@ def process_stack_definitions_artifact(artifact, artifact_source_dir, options):
           if not os.path.exists(dest_stack_version_dir):
             sudo.makedir(dest_stack_version_dir, 0755)
           for file in sorted(os.listdir(src_stack_version_dir)):
-            if file == "services":
+            if file == SERVICES_DIRNAME:
               src_stack_services_dir = os.path.join(src_stack_version_dir, file)
               dest_stack_services_dir = os.path.join(dest_stack_version_dir, file)
               if not os.path.exists(dest_stack_services_dir):
                 sudo.makedir(dest_stack_services_dir, 0755)
               for file in sorted(os.listdir(src_stack_services_dir)):
                 create_symlink(src_stack_services_dir, dest_stack_services_dir, file, options.force)
+                src_service_dir = os.path.join(src_stack_services_dir, file)
+                create_dashboard_symlinks(src_service_dir, file, dashboard_location, options)
             else:
               create_symlink(src_stack_version_dir, dest_stack_version_dir, file, options.force)
 
+def create_dashboard_symlinks(src_service_dir, service_name, dashboard_location, options):
+  """
+  If there is a dashboards directory under the src_service_dir, 
+  create symlinks under the dashboard_location for the grafana_dashboards
+  and the service-metrics
+  :param src_service_dir: Location of the service directory in the management pack
+  :param service_name: Name of the service directory
+  :param dashboard_location: Location of the dashboards directory in ambari-server/resources
+  :param options: Command line options
+  """
+  src_dashboards_dir = os.path.join(src_service_dir, DASHBOARDS_DIRNAME)
+  if not os.path.exists(src_dashboards_dir):
+    return
+
+  src_grafana_dashboards_dir = os.path.join(src_dashboards_dir, GRAFANA_DASHBOARDS_DIRNAME)
+  src_metrics_dir = os.path.join(src_dashboards_dir, SERVICE_METRICS_DIRNAME)
+  if os.path.exists(src_grafana_dashboards_dir):
+    dest_grafana_dashboards_dir = os.path.join(dashboard_location, GRAFANA_DASHBOARDS_DIRNAME)
+    dest_service_dashboards_link = os.path.join(dest_grafana_dashboards_dir, service_name)
+    if os.path.exists(dest_service_dashboards_link):
+      message = "Grafana dashboards already exist for service {0}.".format(service_name)
+      print_warning_msg(message)
+    else:
+      create_symlink_using_path(src_grafana_dashboards_dir, dest_service_dashboards_link, options.force)
+
+  service_metrics_filename = service_name + METRICS_EXTENSION
+  src_metrics_file = os.path.join(src_metrics_dir, service_metrics_filename)
+  if os.path.exists(src_metrics_file):
+    dest_metrics_dir = os.path.join(dashboard_location, SERVICE_METRICS_DIRNAME)
+    if os.path.exists(os.path.join(dest_metrics_dir, service_metrics_filename)):
+      message = "Service metrics already exist for service {0}.".format(service_name)
+      print_warning_msg(message)
+    else:
+      create_symlink(src_metrics_dir, dest_metrics_dir, service_metrics_filename, options.force)
+
 def process_extension_definitions_artifact(artifact, artifact_source_dir, options):
   """
   Process extension-definitions artifacts
@@ -417,7 +474,7 @@ def process_extension_definitions_artifact(artifact, artifact_source_dir, option
   :param options: Command line options
   """
   # Get ambari mpack properties
-  stack_location, extension_location, service_definitions_location, mpacks_staging_location = get_mpack_properties()
+  stack_location, extension_location, service_definitions_location, mpacks_staging_location, dashboard_location = get_mpack_properties()
   if not os.path.exists(extension_location):
     sudo.makedir(extension_location, 0755)
   for file in sorted(os.listdir(artifact_source_dir)):
@@ -431,6 +488,12 @@ def process_extension_definitions_artifact(artifact, artifact_source_dir, option
         sudo.makedir(dest_extension_dir, 0755)
       for file in sorted(os.listdir(src_extension_dir)):
         create_symlink(src_extension_dir, dest_extension_dir, file, options.force)
+        src_extension_version_dir = os.path.join(src_extension_dir, file)
+        src_services_dir = os.path.join(src_extension_version_dir, SERVICES_DIRNAME)
+        if os.path.exists(src_services_dir):
+          for file in sorted(os.listdir(src_services_dir)):
+            src_service_dir = os.path.join(src_services_dir, file)
+            create_dashboard_symlinks(src_service_dir, file, dashboard_location, options) 
 
 def process_service_definitions_artifact(artifact, artifact_source_dir, options):
   """
@@ -440,14 +503,17 @@ def process_service_definitions_artifact(artifact, artifact_source_dir, options)
   :param options: Command line options
   """
   # Get ambari mpack properties
-  stack_location, extension_location, service_definitions_location, mpacks_staging_location = get_mpack_properties()
+  stack_location, extension_location, service_definitions_location, mpacks_staging_location, dashboard_location = get_mpack_properties()
   for file in sorted(os.listdir(artifact_source_dir)):
+    service_name = file
     src_service_definitions_dir = os.path.join(artifact_source_dir, file)
     dest_service_definitions_dir = os.path.join(service_definitions_location, file)
     if not os.path.exists(dest_service_definitions_dir):
       sudo.makedir(dest_service_definitions_dir, 0755)
     for file in sorted(os.listdir(src_service_definitions_dir)):
       create_symlink(src_service_definitions_dir, dest_service_definitions_dir, file, options.force)
+      src_service_version_dir = os.path.join(src_service_definitions_dir, file)
+      create_dashboard_symlinks(src_service_version_dir, service_name, dashboard_location, options)
 
 def process_stack_addon_service_definitions_artifact(artifact, artifact_source_dir, options):
   """
@@ -457,7 +523,7 @@ def process_stack_addon_service_definitions_artifact(artifact, artifact_source_d
   :param options: Command line options
   """
   # Get ambari mpack properties
-  stack_location, extension_location, service_definitions_location, mpacks_staging_location = get_mpack_properties()
+  stack_location, extension_location, service_definitions_location, mpacks_staging_location, dashboard_location = get_mpack_properties()
   service_versions_map = None
   if "service_versions_map" in artifact:
     service_versions_map = artifact.service_versions_map
@@ -477,7 +543,7 @@ def process_stack_addon_service_definitions_artifact(artifact, artifact_source_d
             stack_version = applicable_stack.stack_version
             dest_stack_path = os.path.join(stack_location, stack_name)
             dest_stack_version_path = os.path.join(dest_stack_path, stack_version)
-            dest_stack_services_path = os.path.join(dest_stack_version_path, "services")
+            dest_stack_services_path = os.path.join(dest_stack_version_path, SERVICES_DIRNAME)
             dest_link = os.path.join(dest_stack_services_path, service_name)
             if os.path.exists(dest_stack_path) and os.path.exists(dest_stack_version_path):
               if not os.path.exists(dest_stack_services_path):
@@ -485,6 +551,7 @@ def process_stack_addon_service_definitions_artifact(artifact, artifact_source_d
               if options.force and os.path.islink(dest_link):
                 sudo.unlink(dest_link)
               sudo.symlink(source_service_version_path, dest_link)
+              create_dashboard_symlinks(source_service_version_path, service_name, dashboard_location, options)
 
 def search_mpacks(mpack_name, max_mpack_version=None):
   """
@@ -495,7 +562,7 @@ def search_mpacks(mpack_name, max_mpack_version=None):
   :return: List of management pack
   """
   # Get ambari mpack properties
-  stack_location, extension_location, service_definitions_location, mpacks_staging_location = get_mpack_properties()
+  stack_location, extension_location, service_definitions_location, mpacks_staging_location, dashboard_location = get_mpack_properties()
   results = []
   if os.path.exists(mpacks_staging_location) and os.path.isdir(mpacks_staging_location):
     staged_mpack_dirs = sorted(os.listdir(mpacks_staging_location))
@@ -534,7 +601,7 @@ def uninstall_mpack(mpack_name, mpack_version):
   """
   print_info_msg("Uninstalling management pack {0}-{1}".format(mpack_name, mpack_version))
   # Get ambari mpack properties
-  stack_location, extension_location, service_definitions_location, mpacks_staging_location = get_mpack_properties()
+  stack_location, extension_location, service_definitions_location, mpacks_staging_location, dashboard_location = get_mpack_properties()
   found = False
   if os.path.exists(mpacks_staging_location) and os.path.isdir(mpacks_staging_location):
     staged_mpack_dirs = sorted(os.listdir(mpacks_staging_location))
@@ -553,7 +620,7 @@ def uninstall_mpack(mpack_name, mpack_version):
         if mpack_name == staged_mpack_name and compare_versions(staged_mpack_version, mpack_version, format=True) == 0:
           print_info_msg("Removing management pack staging location {0}".format(staged_mpack_dir))
           sudo.rmtree(staged_mpack_dir)
-          remove_symlinks(stack_location, service_definitions_location, staged_mpack_dir)
+          remove_symlinks(stack_location, extension_location, service_definitions_location, dashboard_location, staged_mpack_dir)
           found = True
           break
   if not found:
@@ -652,7 +719,7 @@ def _install_mpack(options, replay_mode=False, is_upgrade=False):
     purge_stacks_and_mpacks(purge_resources, replay_mode)
 
   # Get ambari mpack properties
-  stack_location, extension_location, service_definitions_location, mpacks_staging_location = get_mpack_properties()
+  stack_location, extension_location, service_definitions_location, mpacks_staging_location, dashboard_location = get_mpack_properties()
   mpacks_cache_location = os.path.join(mpacks_staging_location, MPACKS_CACHE_DIRNAME)
   # Create directories
   if not os.path.exists(stack_location):
@@ -665,6 +732,10 @@ def _install_mpack(options, replay_mode=False, is_upgrade=False):
     sudo.makedir(mpacks_staging_location, 0755)
   if not os.path.exists(mpacks_cache_location):
     sudo.makedir(mpacks_cache_location, 0755)
+  if not os.path.exists(dashboard_location):
+    sudo.makedir(dashboard_location, 0755)
+    sudo.makedir(os.path.join(dashboard_location, GRAFANA_DASHBOARDS_DIRNAME), 0755)
+    sudo.makedir(os.path.join(dashboard_location, SERVICE_METRICS_DIRNAME), 0755)
 
   # Stage management pack (Stage at /var/lib/ambari-server/resources/mpacks/mpack_name-mpack_version)
   mpack_name = mpack_metadata.name
@@ -743,7 +814,7 @@ def get_replay_log_file():
   Helper function to get mpack replay log file path
   :return: mpack replay log file path
   """
-  stack_location, extension_location, service_definitions_location, mpacks_staging_location = get_mpack_properties()
+  stack_location, extension_location, service_definitions_location, mpacks_staging_location, dashboard_location = get_mpack_properties()
   replay_log_file = os.path.join(mpacks_staging_location, MPACKS_REPLAY_LOG_FILENAME)
   return replay_log_file
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/4a7cbcb1/ambari-server/src/test/python/TestMpacks.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/TestMpacks.py b/ambari-server/src/test/python/TestMpacks.py
index 7fb21ae..8329cf0 100644
--- a/ambari-server/src/test/python/TestMpacks.py
+++ b/ambari-server/src/test/python/TestMpacks.py
@@ -48,9 +48,10 @@ with patch.object(platform, "linux_distribution", return_value = MagicMock(retur
                 serverConfiguration.search_file = _search_file
 
 from ambari_server.setupMpacks import install_mpack, upgrade_mpack, replay_mpack_logs, \
-  purge_stacks_and_mpacks, validate_purge, read_mpack_metadata, \
+  purge_stacks_and_mpacks, validate_purge, read_mpack_metadata, uninstall_mpack, \
   STACK_DEFINITIONS_RESOURCE_NAME, EXTENSION_DEFINITIONS_RESOURCE_NAME, \
-  SERVICE_DEFINITIONS_RESOURCE_NAME, MPACKS_RESOURCE_NAME
+  SERVICE_DEFINITIONS_RESOURCE_NAME, MPACKS_RESOURCE_NAME, GRAFANA_DASHBOARDS_DIRNAME, \
+  DASHBOARDS_DIRNAME, SERVICE_METRICS_DIRNAME
 
 with patch.object(os, "geteuid", new=MagicMock(return_value=0)):
   from resource_management.core import sudo
@@ -63,6 +64,7 @@ def get_configs():
     serverConfiguration.STACK_LOCATION_KEY : "/var/lib/ambari-server/resources/stacks",
     serverConfiguration.COMMON_SERVICES_PATH_PROPERTY : "/var/lib/ambari-server/resources/common-services",
     serverConfiguration.EXTENSION_PATH_PROPERTY : "/var/lib/ambari-server/resources/extensions",
+    serverConfiguration.DASHBOARD_PATH_PROPERTY : "/var/lib/ambari-server/resources/dashboards",
     serverConfiguration.MPACKS_STAGING_PATH_PROPERTY : mpacks_directory,
     serverConfiguration.SERVER_TMP_DIR_PROPERTY : "/tmp",
     serverConfiguration.JDBC_DATABASE_PROPERTY: "postgres"
@@ -71,6 +73,7 @@ def get_configs():
 
 configs = get_configs()
 
+
 class TestMpacks(TestCase):
 
   def test_install_mpack_with_no_mpack_path(self):
@@ -272,20 +275,30 @@ class TestMpacks(TestCase):
                             call('/var/lib/ambari-server/resources/common-services'),
                             call(mpacks_directory),
                             call(mpacks_directory + '/cache'),
+                            call('/var/lib/ambari-server/resources/dashboards'),
                             call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.0'),
                             call('/var/lib/ambari-server/resources/common-services/SERVICEA'),
+                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.0/common-services/SERVICEA/1.0/dashboards'),
+                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.0/common-services/SERVICEA/2.0/dashboards'),
                             call('/var/lib/ambari-server/resources/common-services/SERVICEB'),
+                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.0/common-services/SERVICEB/1.0.0/dashboards'),
+                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.0/common-services/SERVICEB/2.0.0/dashboards'),
                             call('/var/lib/ambari-server/resources/stacks/MYSTACK'),
                             call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.0'),
                             call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.0/services'),
+                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.0/stacks/MYSTACK/1.0/services/SERVICEA/dashboards'),
                             call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.1'),
                             call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.1/services'),
+                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.0/stacks/MYSTACK/1.1/services/SERVICEA/dashboards'),
                             call('/var/lib/ambari-server/resources/stacks/MYSTACK/2.0'),
                             call('/var/lib/ambari-server/resources/stacks/MYSTACK/2.0/services'),
+                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.0/stacks/MYSTACK/2.0/services/SERVICEA/dashboards'),
+                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.0/stacks/MYSTACK/2.0/services/SERVICEB/dashboards'),
                             call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.0/hooks/after_install.py')]
     """
-    os_path_exists_mock.side_effect = [True, True, True, False, True, False, False, False,
+    os_path_exists_mock.side_effect = [True, True, True, False, True, False, False, False, False,
                                        False, False, False, False, False, False,
+                                       False, False, False, False, False, False, False, False,
                                        False, False, False, False, True]
     get_ambari_properties_mock.return_value = configs
     shutil_move_mock.return_value = True
@@ -296,6 +309,7 @@ class TestMpacks(TestCase):
     common_services_directory = configs[serverConfiguration.COMMON_SERVICES_PATH_PROPERTY]
     extensions_directory = configs[serverConfiguration.EXTENSION_PATH_PROPERTY]
     mpacks_directory = configs[serverConfiguration.MPACKS_STAGING_PATH_PROPERTY]
+    dashboards_directory = serverConfiguration.get_dashboard_location(configs)
     mpacks_staging_directory = os.path.join(mpacks_directory, "mystack-ambari-mpack-1.0.0.0")
 
     run_os_command_calls = [
@@ -314,6 +328,9 @@ class TestMpacks(TestCase):
       call(common_services_directory),
       call(mpacks_directory),
       call(mpacks_directory + '/cache'),
+      call(dashboards_directory),
+      call(os.path.join(dashboards_directory, GRAFANA_DASHBOARDS_DIRNAME)),
+      call(os.path.join(dashboards_directory, SERVICE_METRICS_DIRNAME)),
       call(os.path.join(common_services_directory, "SERVICEA")),
       call(os.path.join(common_services_directory, "SERVICEB")),
       call(os.path.join(stacks_directory, "MYSTACK")),
@@ -385,7 +402,19 @@ class TestMpacks(TestCase):
     download_mpack_mock.return_value = "/tmp/myextension.tar.gz"
     expand_mpack_mock.return_value = "mpacks/myextension-ambari-mpack-1.0.0.0"
     get_ambari_version_mock.return_value = "2.4.0.0"
-    """
+    
+    os_path_exists_mock.side_effect = [True, True, True, False, True, False, False, False,
+                                       False, True, False, False, False]
+    get_ambari_properties_mock.return_value = configs
+    shutil_move_mock.return_value = True
+
+    install_mpack(options)
+
+    extensions_directory = configs[serverConfiguration.EXTENSION_PATH_PROPERTY]
+    mpacks_directory = configs[serverConfiguration.MPACKS_STAGING_PATH_PROPERTY]
+    mpacks_staging_directory = os.path.join(mpacks_directory, "myextension-ambari-mpack-1.0.0.0")
+    dashboards_directory = serverConfiguration.get_dashboard_location(configs)
+
     os_path_exists_calls = [call('/tmp/myextension.tar.gz'),
                             call('mpacks/myextension-ambari-mpack-1.0.0.0/mpack.json'),
                             call('/var/lib/ambari-server/resources/stacks'),
@@ -393,24 +422,20 @@ class TestMpacks(TestCase):
                             call('/var/lib/ambari-server/resources/common-services'),
                             call(mpacks_directory),
                             call(mpacks_directory + '/cache'),
+                            call('/var/lib/ambari-server/resources/dashboards'),
                             call(mpacks_directory + '/myextension-ambari-mpack-1.0.0.0'),
                             call('/var/lib/ambari-server/resources/extensions'),
-                            call('/var/lib/ambari-server/resources/extensions/MYEXTENSION')]
-    """
-    os_path_exists_mock.side_effect = [True, True, True, False, True, False, False,
-                                       False, True, False]
-    get_ambari_properties_mock.return_value = configs
-    shutil_move_mock.return_value = True
+                            call('/var/lib/ambari-server/resources/extensions/MYEXTENSION'),
+                            call(mpacks_directory + '/myextension-ambari-mpack-1.0.0.0/extensions/MYEXTENSION/1.0/services'),
+                            call(mpacks_directory + '/myextension-ambari-mpack-1.0.0.0/extensions/MYEXTENSION/1.1/services')]
 
-    install_mpack(options)
-
-    extensions_directory = configs[serverConfiguration.EXTENSION_PATH_PROPERTY]
-    mpacks_directory = configs[serverConfiguration.MPACKS_STAGING_PATH_PROPERTY]
-    mpacks_staging_directory = os.path.join(mpacks_directory, "myextension-ambari-mpack-1.0.0.0")
     os_mkdir_calls = [
       call(extensions_directory),
       call(mpacks_directory),
       call(mpacks_directory + '/cache'),
+      call(dashboards_directory),
+      call(os.path.join(dashboards_directory, GRAFANA_DASHBOARDS_DIRNAME)),
+      call(os.path.join(dashboards_directory, SERVICE_METRICS_DIRNAME)),
       call(os.path.join(extensions_directory, "MYEXTENSION"))
     ]
     create_symlink_calls = [
@@ -422,6 +447,7 @@ class TestMpacks(TestCase):
            "1.1", None)
     ]
 
+    os_path_exists_mock.assert_has_calls(os_path_exists_calls)
     self.assertFalse(purge_stacks_and_mpacks_mock.called)
     os_mkdir_mock.assert_has_calls(os_mkdir_calls)
     create_symlink_mock.assert_has_calls(create_symlink_calls)
@@ -449,7 +475,24 @@ class TestMpacks(TestCase):
     download_mpack_mock.return_value = "/tmp/myservice.tar.gz"
     expand_mpack_mock.return_value = "mpacks/myservice-ambari-mpack-1.0.0.0"
     get_ambari_version_mock.return_value = "2.4.0.0"
-    """
+
+    os_path_exists_mock.side_effect = [True, True, True, True, True, True,
+                                       True, True, False, False, False, False,
+                                       True, True, True, False, True, True,
+                                       True, False]
+
+    get_ambari_properties_mock.return_value = configs
+    shutil_move_mock.return_value = True
+    os_path_isdir_mock.return_value = True
+
+    install_mpack(options)
+
+    stacks_directory = configs[serverConfiguration.STACK_LOCATION_KEY]
+    common_services_directory = configs[serverConfiguration.COMMON_SERVICES_PATH_PROPERTY]
+    mpacks_directory = configs[serverConfiguration.MPACKS_STAGING_PATH_PROPERTY]
+    mpacks_staging_directory = os.path.join(mpacks_directory, "myservice-ambari-mpack-1.0.0.0")
+    dashboards_directory = serverConfiguration.get_dashboard_location(configs)
+
     os_path_exists_calls = [call('/tmp/myservice.tar.gz'),
                             call('mpacks/myservice-ambari-mpack-1.0.0.0/mpack.json'),
                             call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.0'),
@@ -458,31 +501,23 @@ class TestMpacks(TestCase):
                             call('/var/lib/ambari-server/resources/common-services'),
                             call(mpacks_directory),
                             call(mpacks_directory + '/cache'),
+                            call('/var/lib/ambari-server/resources/dashboards'),
                             call(mpacks_directory + '/myservice-ambari-mpack-1.0.0.0'),
                             call('/var/lib/ambari-server/resources/common-services/MYSERVICE'),
+                            call(mpacks_directory + '/myservice-ambari-mpack-1.0.0.0/common-services/MYSERVICE/1.0.0/dashboards'),
                             call('/var/lib/ambari-server/resources/stacks/MYSTACK'),
                             call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.0'),
                             call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.0/services'),
+                            call(mpacks_directory + '/myservice-ambari-mpack-1.0.0.0/custom-services/MYSERVICE/1.0.0/dashboards'),
                             call('/var/lib/ambari-server/resources/stacks/MYSTACK'),
                             call('/var/lib/ambari-server/resources/stacks/MYSTACK/2.0'),
-                            call('/var/lib/ambari-server/resources/stacks/MYSTACK/2.0/services')]
-    """
-    os_path_exists_mock.side_effect = [True, True, True, True, True, True,
-                                       True, True, False, False, True,
-                                       True, True, True, True, True]
-
-    get_ambari_properties_mock.return_value = configs
-    shutil_move_mock.return_value = True
-    os_path_isdir_mock.return_value = True
-
-    install_mpack(options)
-
-    stacks_directory = configs[serverConfiguration.STACK_LOCATION_KEY]
-    common_services_directory = configs[serverConfiguration.COMMON_SERVICES_PATH_PROPERTY]
-    mpacks_directory = configs[serverConfiguration.MPACKS_STAGING_PATH_PROPERTY]
-    mpacks_staging_directory = os.path.join(mpacks_directory, "myservice-ambari-mpack-1.0.0.0")
+                            call('/var/lib/ambari-server/resources/stacks/MYSTACK/2.0/services'),
+                            call(mpacks_directory + '/myservice-ambari-mpack-1.0.0.0/custom-services/MYSERVICE/2.0.0/dashboards')]
 
     os_mkdir_calls = [
+      call(dashboards_directory),
+      call(os.path.join(dashboards_directory, GRAFANA_DASHBOARDS_DIRNAME)),
+      call(os.path.join(dashboards_directory, SERVICE_METRICS_DIRNAME)),
       call(os.path.join(common_services_directory, "MYSERVICE"))
     ]
     create_symlink_calls = [
@@ -496,12 +531,14 @@ class TestMpacks(TestCase):
            os.path.join(stacks_directory, "MYSTACK/2.0/services/MYSERVICE"))
     ]
 
+    os_path_exists_mock.assert_has_calls(os_path_exists_calls)
     self.assertFalse(purge_stacks_and_mpacks_mock.called)
     os_mkdir_mock.assert_has_calls(os_mkdir_calls)
     create_symlink_mock.assert_has_calls(create_symlink_calls)
     os_symlink_mock.assert_has_calls(os_symlink_calls)
     self.assertTrue(add_replay_log_mock.called)
 
+  @patch("ambari_server.setupMpacks.create_symlink_using_path")
   @patch("os.path.exists")
   @patch("shutil.move")
   @patch("os.mkdir")
@@ -517,7 +554,7 @@ class TestMpacks(TestCase):
   def test_upgrade_stack_mpack(self, run_os_command_mock, download_mpack_mock, expand_mpack_mock, purge_stacks_and_mpacks_mock,
                                uninstall_mpack_mock, add_replay_log_mock, get_ambari_properties_mock,
                                get_ambari_version_mock, create_symlink_mock, os_mkdir_mock, shutil_move_mock,
-                               os_path_exists_mock):
+                               os_path_exists_mock, create_symlink_using_path_mock):
     options = self._create_empty_options_mock()
     options.mpack_path = "/path/to/mystack-1.0.0.1.tar.gz"
     download_mpack_mock.side_effect = ["/tmp/mystack-1.0.0.1.tar.gz", "/tmp/mystack-1.0.0.1.tar.gz"]
@@ -525,10 +562,27 @@ class TestMpacks(TestCase):
     get_ambari_version_mock.return_value = "2.4.0.0"
     run_os_command_mock.return_value = (0, "", "")
     mpacks_directory = configs[serverConfiguration.MPACKS_STAGING_PATH_PROPERTY]
-    """
+    os_path_exists_mock.side_effect = [True, True, True, True, True, True, True, True,
+                                       True, True, True, True, True, True, True, False,
+                                       False, True, False, False, True, False, False, 
+                                       False, False, False, True, True, True, False,
+                                       True, True, False, True, True, False, False,
+                                       False, False, False, True, True, True, True,
+                                       True, True, True, False, True, False, True, True, 
+                                       True, True, True, True]
+    get_ambari_properties_mock.return_value = configs
+    shutil_move_mock.return_value = True
+
+    upgrade_mpack(options)
+
+    stacks_directory = configs[serverConfiguration.STACK_LOCATION_KEY]
+    common_services_directory = configs[serverConfiguration.COMMON_SERVICES_PATH_PROPERTY]
+    mpacks_directory = configs[serverConfiguration.MPACKS_STAGING_PATH_PROPERTY]
+    mpacks_staging_directory = os.path.join(mpacks_directory, "mystack-ambari-mpack-1.0.0.1")
+    dashboards_directory = serverConfiguration.get_dashboard_location(configs)
+
     os_path_exists_calls = [call('/tmp/mystack-1.0.0.1.tar.gz'),
                             call('mpacks/mystack-ambari-mpack-1.0.0.1/mpack.json'),
-                            call('mpacks/mystack-ambari-mpack-1.0.0.1/hook/before_upgrade.py'),
                             call(mpacks_directory),
                             call(mpacks_directory + '/myextension-ambari-mpack-1.0.0.0/mpack.json'),
                             call(mpacks_directory + '/myservice-ambari-mpack-1.0.0.0/mpack.json'),
@@ -536,44 +590,53 @@ class TestMpacks(TestCase):
                             call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/mpack.json'),
                             call('/tmp/mystack-1.0.0.1.tar.gz'),
                             call('mpacks/mystack-ambari-mpack-1.0.0.1/mpack.json'),
+                            call('mpacks/mystack-ambari-mpack-1.0.0.1/hooks/before_upgrade.py'),
                             call('/var/lib/ambari-server/resources/stacks'),
                             call('/var/lib/ambari-server/resources/extensions'),
                             call('/var/lib/ambari-server/resources/common-services'),
                             call(mpacks_directory),
                             call(mpacks_directory + '/cache'),
+                            call('/var/lib/ambari-server/resources/dashboards'),
                             call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1'),
                             call('/var/lib/ambari-server/resources/common-services/SERVICEA'),
+                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/common-services/SERVICEA/1.0/dashboards'),
+                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/common-services/SERVICEA/2.0/dashboards'),
                             call('/var/lib/ambari-server/resources/common-services/SERVICEB'),
+                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/common-services/SERVICEB/1.0.0/dashboards'),
+                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/common-services/SERVICEB/2.0.0/dashboards'),
                             call('/var/lib/ambari-server/resources/common-services/SERVICEC'),
+                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/common-services/SERVICEC/1.0.0/dashboards'),
+                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/common-services/SERVICEC/2.0.0/dashboards'),
                             call('/var/lib/ambari-server/resources/stacks/MYSTACK'),
                             call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.0'),
                             call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.0/services'),
+                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/1.0/services/SERVICEA/dashboards'),
                             call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.1'),
                             call('/var/lib/ambari-server/resources/stacks/MYSTACK/1.1/services'),
+                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/1.1/services/SERVICEA/dashboards'),
                             call('/var/lib/ambari-server/resources/stacks/MYSTACK/2.0'),
-                            call('/var/lib/ambari-server/resources/stacks/MYSTACK/2.0/services')]
+                            call('/var/lib/ambari-server/resources/stacks/MYSTACK/2.0/services'),
+                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/2.0/services/SERVICEA/dashboards'),
+                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/2.0/services/SERVICEB/dashboards'),
                             call('/var/lib/ambari-server/resources/stacks/MYSTACK/3.0'),
                             call('/var/lib/ambari-server/resources/stacks/MYSTACK/3.0/services'),
+                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/3.0/services/SERVICEA/dashboards'),
+                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/3.0/services/SERVICEB/dashboards'),
+                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/3.0/services/SERVICEB/dashboards/grafana-dashboards'),
+                            call('/var/lib/ambari-server/resources/dashboards/grafana-dashboards/SERVICEB'),
+                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/3.0/services/SERVICEB/dashboards/service-metrics/SERVICEB.txt'),
+                            call('/var/lib/ambari-server/resources/dashboards/service-metrics/SERVICEB.txt'),
+                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/3.0/services/SERVICEC/dashboards'),
+                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/3.0/services/SERVICEC/dashboards/grafana-dashboards'),
+                            call('/var/lib/ambari-server/resources/dashboards/grafana-dashboards/SERVICEC'),
+                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/3.0/services/SERVICEC/dashboards/service-metrics/SERVICEC.txt'),
+                            call('/var/lib/ambari-server/resources/dashboards/service-metrics/SERVICEC.txt'),
                             call(mpacks_directory),
                             call(mpacks_directory + '/myextension-ambari-mpack-1.0.0.0/mpack.json'),
                             call(mpacks_directory + '/myservice-ambari-mpack-1.0.0.0/mpack.json'),
                             call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.0/mpack.json'),
+                            call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/mpack.json'),
                             call(mpacks_directory + '/mystack-ambari-mpack-1.0.0.1/hooks/after_upgrade.py')]
-    """
-    os_path_exists_mock.side_effect = [True, True, True, True, True, True, True, True,
-                                       True, True, True, True, True, True, True,
-                                       False, True, True, False, True, True, True,
-                                       True, True, True, True, False, False,
-                                       True, True, True, True, True, True]
-    get_ambari_properties_mock.return_value = configs
-    shutil_move_mock.return_value = True
-
-    upgrade_mpack(options)
-
-    stacks_directory = configs[serverConfiguration.STACK_LOCATION_KEY]
-    common_services_directory = configs[serverConfiguration.COMMON_SERVICES_PATH_PROPERTY]
-    mpacks_directory = configs[serverConfiguration.MPACKS_STAGING_PATH_PROPERTY]
-    mpacks_staging_directory = os.path.join(mpacks_directory, "mystack-ambari-mpack-1.0.0.1")
 
     run_os_command_calls = [
       call([
@@ -587,6 +650,9 @@ class TestMpacks(TestCase):
     ]
 
     os_mkdir_calls = [
+      call(dashboards_directory),
+      call(os.path.join(dashboards_directory, GRAFANA_DASHBOARDS_DIRNAME)),
+      call(os.path.join(dashboards_directory, SERVICE_METRICS_DIRNAME)),
       call(os.path.join(common_services_directory, "SERVICEC")),
       call(os.path.join(stacks_directory, "MYSTACK/3.0")),
       call(os.path.join(stacks_directory, "MYSTACK/3.0/services"))
@@ -642,13 +708,25 @@ class TestMpacks(TestCase):
            "SERVICEB", True),
       call(os.path.join(mpacks_staging_directory, "stacks/MYSTACK/3.0/services"),
            os.path.join(stacks_directory, "MYSTACK/3.0/services"),
-           "SERVICEC", True)
+           "SERVICEC", True),
+      call(os.path.join(mpacks_staging_directory, "stacks/MYSTACK/3.0/services/SERVICEC/dashboards/service-metrics"),
+           os.path.join(dashboards_directory, "service-metrics"),
+           "SERVICEC.txt", True)
     ]
 
+    create_symlink_using_path_calls = [
+      call(os.path.join(mpacks_staging_directory, "stacks/MYSTACK/3.0/services/SERVICEC/dashboards/grafana-dashboards"),
+           os.path.join(dashboards_directory, "grafana-dashboards/SERVICEC"), True)
+    ]
+
+    os_path_exists_mock.assert_has_calls(os_path_exists_calls)
     self.assertFalse(purge_stacks_and_mpacks_mock.called)
     run_os_command_mock.assert_has_calls(run_os_command_calls)
     os_mkdir_mock.assert_has_calls(os_mkdir_calls)
     create_symlink_mock.assert_has_calls(create_symlink_calls)
+    self.assertEqual(18, create_symlink_mock.call_count) 
+    create_symlink_using_path_mock.assert_has_calls(create_symlink_using_path_calls)
+    self.assertEqual(1, create_symlink_using_path_mock.call_count)
     uninstall_mpack_mock.assert_has_calls([call("mystack-ambari-mpack", "1.0.0.0")])
     self.assertTrue(add_replay_log_mock.called)
 
@@ -684,6 +762,41 @@ class TestMpacks(TestCase):
     install_mpack_mock.assert_has_calls([call(install_replay_options, replay_mode=True)])
     upgrade_mpack_mock.assert_has_calls([call(upgrade_replay_options, replay_mode=True)])
 
+  @patch("resource_management.core.sudo.unlink")
+  @patch("resource_management.core.sudo.rmtree")
+  @patch("ambari_server.setupMpacks.get_ambari_version")
+  @patch("ambari_server.setupMpacks.get_ambari_properties")
+  def test_uninstall_mpack(self, get_ambari_properties_mock, get_ambari_version_mock, sudo_rmtree_mock, sudo_unlink_mock):
+    test_directory = os.path.dirname(os.path.abspath(__file__))
+    mpacks_directory = os.path.join(test_directory, "mpacks")
+    uninstall_directory = os.path.join(test_directory, "uninstall")
+    fake_configs = {
+      serverConfiguration.STACK_LOCATION_KEY : os.path.join(uninstall_directory, "stacks"),
+      serverConfiguration.COMMON_SERVICES_PATH_PROPERTY : os.path.join(uninstall_directory, "common-services"),
+      serverConfiguration.EXTENSION_PATH_PROPERTY : os.path.join(uninstall_directory, "extensions"),
+      serverConfiguration.MPACKS_STAGING_PATH_PROPERTY : mpacks_directory,
+      serverConfiguration.DASHBOARD_PATH_PROPERTY : os.path.join(uninstall_directory, "dashboards"),
+      serverConfiguration.SERVER_TMP_DIR_PROPERTY : "/tmp"
+    }
+
+    get_ambari_version_mock.return_value = "2.4.0.0"
+    get_ambari_properties_mock.return_value = fake_configs
+    stacks_directory = fake_configs[serverConfiguration.STACK_LOCATION_KEY]
+    extension_directory = fake_configs[serverConfiguration.EXTENSION_PATH_PROPERTY]
+    common_services_directory = fake_configs[serverConfiguration.COMMON_SERVICES_PATH_PROPERTY]
+    dashboard_directory = fake_configs[serverConfiguration.DASHBOARD_PATH_PROPERTY]
+
+    uninstall_mpack("mystack-ambari-mpack", "1.0.0.1")
+
+    self.assertEqual(1, sudo_rmtree_mock.call_count)
+    self.assertEqual(6, sudo_unlink_mock.call_count)
+    sudo_unlink_mock_calls = [call(os.path.join(stacks_directory, "2.0/SERVICEB")),
+                              call(os.path.join(stacks_directory, "2.0/files/metainfo2.xml")),
+                              call(os.path.join(extension_directory, "SERVICEB")),
+                              call(os.path.join(common_services_directory, "SERVICEB")),
+                              call(os.path.join(dashboard_directory, "SERVICEB")),
+                              call(os.path.join(dashboard_directory, "files/STORM.txt"))] 
+
   def _create_empty_options_mock(self):
     options = MagicMock()
     options.mpack_path = None

http://git-wip-us.apache.org/repos/asf/ambari/blob/4a7cbcb1/ambari-server/src/test/python/mpacks/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/3.0/services/SERVICEC/dashboards/grafana-dashboards/grafana-hdfs-users.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/mpacks/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/3.0/services/SERVICEC/dashboards/grafana-dashboards/grafana-hdfs-users.json b/ambari-server/src/test/python/mpacks/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/3.0/services/SERVICEC/dashboards/grafana-dashboards/grafana-hdfs-users.json
new file mode 100644
index 0000000..4aad145
--- /dev/null
+++ b/ambari-server/src/test/python/mpacks/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/3.0/services/SERVICEC/dashboards/grafana-dashboards/grafana-hdfs-users.json
@@ -0,0 +1,270 @@
+{
+  "id": null,
+  "title": "HDFS - Users",
+  "originalTitle": "HDFS - Users",
+  "tags": [
+    "hdfs"
+  ],
+  "style": "dark",
+  "timezone": "browser",
+  "editable": true,
+  "hideControls": false,
+  "sharedCrosshair": false,
+  "rows": [
+    {
+      "collapse": false,
+      "editable": true,
+      "height": "25px",
+      "panels": [
+        {
+          "content": "<h4 align=\"center\">Metrics for HDFS Namenode RPC Call Queue status in terms of call volumes for top users and their priority assignment. Click on each row title to expand on demand to look at various metrics. </h4>\n<h5 align=\"center\">HDFS User metrics aren't emitted by default. You can use this <a style=\"color: green;\" href=\"https://cwiki.apache.org/confluence/display/AMBARI/Enabling+HDFS+per-user+Metrics\">document</a> as a reference to enable them.</h5>\n<h6 style=\"color:red;\" align=\"center\">This dashboard is managed by Ambari.  You may lose any changes made to this dashboard.  If you want to customize, make your own copy.</h6>",
+          "editable": true,
+          "error": false,
+          "id": 3,
+          "isNew": true,
+          "links": [],
+          "mode": "html",
+          "span": 12,
+          "style": {},
+          "title": "",
+          "type": "text"
+        }
+      ],
+      "title": "New row"
+    },
+    {
+      "collapse": false,
+      "editable": true,
+      "height": "250px",
+      "panels": [
+        {
+          "aliasColors": {},
+          "bars": false,
+          "datasource": null,
+          "editable": true,
+          "error": false,
+          "fill": 1,
+          "grid": {
+            "leftLogBase": 1,
+            "leftMax": null,
+            "leftMin": 0,
+            "rightLogBase": 1,
+            "rightMax": null,
+            "rightMin": null,
+            "threshold1": null,
+            "threshold1Color": "rgba(216, 200, 27, 0.27)",
+            "threshold2": null,
+            "threshold2Color": "rgba(234, 112, 112, 0.22)"
+          },
+          "id": 1,
+          "isNew": true,
+          "legend": {
+            "avg": false,
+            "current": false,
+            "hideEmpty": true,
+            "max": false,
+            "min": false,
+            "show": true,
+            "total": false,
+            "values": false
+          },
+          "lines": true,
+          "linewidth": 2,
+          "links": [],
+          "nullPointMode": "connected",
+          "percentage": false,
+          "pointradius": 5,
+          "points": false,
+          "renderer": "flot",
+          "seriesOverrides": [],
+          "span": 12,
+          "stack": false,
+          "steppedLine": false,
+          "targets": [
+            {
+              "aggregator": "avg",
+              "alias": "Volume",
+              "app": "namenode",
+              "downsampleAggregator": "avg",
+              "errors": {},
+              "hosts": "",
+              "metric": "ipc.client.org.apache.hadoop.ipc.DecayRpcScheduler.Caller(*).Volume",
+              "precision": "default",
+              "refId": "A",
+              "transform": "diff"
+            }
+          ],
+          "timeFrom": null,
+          "timeShift": null,
+          "title": "Namenode Rpc Caller Volume",
+          "tooltip": {
+            "shared": false,
+            "value_type": "cumulative"
+          },
+          "type": "graph",
+          "x-axis": true,
+          "y-axis": true,
+          "y_formats": [
+            "short",
+            "short"
+          ]
+        }
+      ],
+      "title": "Row"
+    },
+    {
+      "collapse": false,
+      "editable": true,
+      "height": "250px",
+      "panels": [
+        {
+          "aliasColors": {},
+          "bars": false,
+          "datasource": null,
+          "editable": true,
+          "error": false,
+          "fill": 1,
+          "grid": {
+            "leftLogBase": 1,
+            "leftMax": null,
+            "leftMin": null,
+            "rightLogBase": 1,
+            "rightMax": null,
+            "rightMin": null,
+            "threshold1": null,
+            "threshold1Color": "rgba(216, 200, 27, 0.27)",
+            "threshold2": null,
+            "threshold2Color": "rgba(234, 112, 112, 0.22)"
+          },
+          "id": 2,
+          "isNew": true,
+          "legend": {
+            "avg": false,
+            "current": false,
+            "hideEmpty": true,
+            "hideZero": false,
+            "max": false,
+            "min": false,
+            "show": true,
+            "total": false,
+            "values": false
+          },
+          "lines": false,
+          "linewidth": 2,
+          "links": [],
+          "nullPointMode": "connected",
+          "percentage": false,
+          "pointradius": 3,
+          "points": true,
+          "renderer": "flot",
+          "seriesOverrides": [],
+          "span": 12,
+          "stack": false,
+          "steppedLine": false,
+          "targets": [
+            {
+              "aggregator": "avg",
+              "app": "namenode",
+              "downsampleAggregator": "avg",
+              "errors": {},
+              "metric": "ipc.client.org.apache.hadoop.ipc.DecayRpcScheduler.Caller(*).Priority",
+              "precision": "default",
+              "refId": "A",
+              "transform": "none"
+            }
+          ],
+          "timeFrom": null,
+          "timeShift": null,
+          "title": "Namenode Rpc Caller Priority",
+          "tooltip": {
+            "shared": false,
+            "value_type": "cumulative"
+          },
+          "type": "graph",
+          "x-axis": true,
+          "y-axis": true,
+          "y_formats": [
+            "short",
+            "short"
+          ]
+        }
+      ],
+      "title": "New row"
+    }
+  ],
+  "time": {
+    "from": "now-6h",
+    "to": "now"
+  },
+  "timepicker": {
+    "now": true,
+    "refresh_intervals": [
+      "5s",
+      "10s",
+      "30s",
+      "1m",
+      "5m",
+      "15m",
+      "30m",
+      "1h",
+      "2h",
+      "1d"
+    ],
+    "time_options": [
+      "5m",
+      "15m",
+      "1h",
+      "6h",
+      "12h",
+      "24h",
+      "2d",
+      "7d",
+      "30d"
+    ]
+  },
+  "templating": {
+    "list": [
+      {
+        "allFormat": "glob",
+        "current": {
+          "text": "All",
+          "value": ""
+        },
+        "datasource": null,
+        "hideLabel": false,
+        "includeAll": true,
+        "multi": true,
+        "multiFormat": "glob",
+        "name": "Callers",
+        "options": [
+          {
+            "text": "All",
+            "value": "",
+            "selected": true
+          }
+        ],
+        "query": "callers",
+        "refresh": true,
+        "regex": "",
+        "type": "query"
+      }
+    ]
+  },
+  "annotations": {
+    "list": []
+  },
+  "refresh": false,
+  "schemaVersion": 8,
+  "version": 27,
+  "links": [
+    {
+      "asDropdown": true,
+      "icon": "external link",
+      "tags": [
+        "hdfs"
+      ],
+      "title": "HDFS Dashboards",
+      "type": "dashboards"
+    }
+  ]
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/4a7cbcb1/ambari-server/src/test/python/mpacks/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/3.0/services/SERVICEC/dashboards/service-metrics/STORM.txt
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/mpacks/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/3.0/services/SERVICEC/dashboards/service-metrics/STORM.txt b/ambari-server/src/test/python/mpacks/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/3.0/services/SERVICEC/dashboards/service-metrics/STORM.txt
new file mode 100644
index 0000000..04bca00
--- /dev/null
+++ b/ambari-server/src/test/python/mpacks/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/3.0/services/SERVICEC/dashboards/service-metrics/STORM.txt
@@ -0,0 +1,7 @@
+Supervisors
+Total Tasks
+Total Slots
+Used Slots
+Topologies
+Total Executors
+Free Slots

http://git-wip-us.apache.org/repos/asf/ambari/blob/4a7cbcb1/ambari-server/src/test/python/uninstall/common-services/SERVICEA
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/uninstall/common-services/SERVICEA b/ambari-server/src/test/python/uninstall/common-services/SERVICEA
new file mode 120000
index 0000000..b959028
--- /dev/null
+++ b/ambari-server/src/test/python/uninstall/common-services/SERVICEA
@@ -0,0 +1 @@
+../../mpacks/mystack-ambari-mpack-1.0.0.0/stacks/MYSTACK/1.0/services/SERVICEA
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/4a7cbcb1/ambari-server/src/test/python/uninstall/common-services/SERVICEB
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/uninstall/common-services/SERVICEB b/ambari-server/src/test/python/uninstall/common-services/SERVICEB
new file mode 120000
index 0000000..99609ca
--- /dev/null
+++ b/ambari-server/src/test/python/uninstall/common-services/SERVICEB
@@ -0,0 +1 @@
+../../mpacks/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/2.0/services/SERVICEB
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/4a7cbcb1/ambari-server/src/test/python/uninstall/dashboards/SERVICEA
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/uninstall/dashboards/SERVICEA b/ambari-server/src/test/python/uninstall/dashboards/SERVICEA
new file mode 120000
index 0000000..b959028
--- /dev/null
+++ b/ambari-server/src/test/python/uninstall/dashboards/SERVICEA
@@ -0,0 +1 @@
+../../mpacks/mystack-ambari-mpack-1.0.0.0/stacks/MYSTACK/1.0/services/SERVICEA
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/4a7cbcb1/ambari-server/src/test/python/uninstall/dashboards/SERVICEB
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/uninstall/dashboards/SERVICEB b/ambari-server/src/test/python/uninstall/dashboards/SERVICEB
new file mode 120000
index 0000000..99609ca
--- /dev/null
+++ b/ambari-server/src/test/python/uninstall/dashboards/SERVICEB
@@ -0,0 +1 @@
+../../mpacks/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/2.0/services/SERVICEB
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/4a7cbcb1/ambari-server/src/test/python/uninstall/dashboards/files/README.txt
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/uninstall/dashboards/files/README.txt b/ambari-server/src/test/python/uninstall/dashboards/files/README.txt
new file mode 100644
index 0000000..f1775e0
--- /dev/null
+++ b/ambari-server/src/test/python/uninstall/dashboards/files/README.txt
@@ -0,0 +1,17 @@
+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.
+
+Real file

http://git-wip-us.apache.org/repos/asf/ambari/blob/4a7cbcb1/ambari-server/src/test/python/uninstall/dashboards/files/STORM.txt
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/uninstall/dashboards/files/STORM.txt b/ambari-server/src/test/python/uninstall/dashboards/files/STORM.txt
new file mode 120000
index 0000000..a235e5b
--- /dev/null
+++ b/ambari-server/src/test/python/uninstall/dashboards/files/STORM.txt
@@ -0,0 +1 @@
+../../../mpacks/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/3.0/services/SERVICEC/dashboards/service-metrics/STORM.txt
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/4a7cbcb1/ambari-server/src/test/python/uninstall/dashboards/files/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/uninstall/dashboards/files/metainfo.xml b/ambari-server/src/test/python/uninstall/dashboards/files/metainfo.xml
new file mode 120000
index 0000000..dd1cc28
--- /dev/null
+++ b/ambari-server/src/test/python/uninstall/dashboards/files/metainfo.xml
@@ -0,0 +1 @@
+../../../mpacks/mystack-ambari-mpack-1.0.0.0/stacks/MYSTACK/2.0/metainfo.xml
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/4a7cbcb1/ambari-server/src/test/python/uninstall/extensions/SERVICEA
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/uninstall/extensions/SERVICEA b/ambari-server/src/test/python/uninstall/extensions/SERVICEA
new file mode 120000
index 0000000..b959028
--- /dev/null
+++ b/ambari-server/src/test/python/uninstall/extensions/SERVICEA
@@ -0,0 +1 @@
+../../mpacks/mystack-ambari-mpack-1.0.0.0/stacks/MYSTACK/1.0/services/SERVICEA
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/4a7cbcb1/ambari-server/src/test/python/uninstall/extensions/SERVICEB
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/uninstall/extensions/SERVICEB b/ambari-server/src/test/python/uninstall/extensions/SERVICEB
new file mode 120000
index 0000000..99609ca
--- /dev/null
+++ b/ambari-server/src/test/python/uninstall/extensions/SERVICEB
@@ -0,0 +1 @@
+../../mpacks/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/2.0/services/SERVICEB
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/4a7cbcb1/ambari-server/src/test/python/uninstall/stacks/2.0/SERVICEA
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/uninstall/stacks/2.0/SERVICEA b/ambari-server/src/test/python/uninstall/stacks/2.0/SERVICEA
new file mode 120000
index 0000000..39f34f6
--- /dev/null
+++ b/ambari-server/src/test/python/uninstall/stacks/2.0/SERVICEA
@@ -0,0 +1 @@
+../../../mpacks/mystack-ambari-mpack-1.0.0.0/stacks/MYSTACK/1.0/services/SERVICEA
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/4a7cbcb1/ambari-server/src/test/python/uninstall/stacks/2.0/SERVICEB
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/uninstall/stacks/2.0/SERVICEB b/ambari-server/src/test/python/uninstall/stacks/2.0/SERVICEB
new file mode 120000
index 0000000..83677ca
--- /dev/null
+++ b/ambari-server/src/test/python/uninstall/stacks/2.0/SERVICEB
@@ -0,0 +1 @@
+../../../mpacks/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/2.0/services/SERVICEB
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/4a7cbcb1/ambari-server/src/test/python/uninstall/stacks/2.0/files/README.txt
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/uninstall/stacks/2.0/files/README.txt b/ambari-server/src/test/python/uninstall/stacks/2.0/files/README.txt
new file mode 100644
index 0000000..f1775e0
--- /dev/null
+++ b/ambari-server/src/test/python/uninstall/stacks/2.0/files/README.txt
@@ -0,0 +1,17 @@
+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.
+
+Real file

http://git-wip-us.apache.org/repos/asf/ambari/blob/4a7cbcb1/ambari-server/src/test/python/uninstall/stacks/2.0/files/metainfo1.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/uninstall/stacks/2.0/files/metainfo1.xml b/ambari-server/src/test/python/uninstall/stacks/2.0/files/metainfo1.xml
new file mode 120000
index 0000000..da62332
--- /dev/null
+++ b/ambari-server/src/test/python/uninstall/stacks/2.0/files/metainfo1.xml
@@ -0,0 +1 @@
+../../../../mpacks/mystack-ambari-mpack-1.0.0.0/stacks/MYSTACK/1.0/metainfo.xml
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/4a7cbcb1/ambari-server/src/test/python/uninstall/stacks/2.0/files/metainfo2.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/uninstall/stacks/2.0/files/metainfo2.xml b/ambari-server/src/test/python/uninstall/stacks/2.0/files/metainfo2.xml
new file mode 120000
index 0000000..2316e88
--- /dev/null
+++ b/ambari-server/src/test/python/uninstall/stacks/2.0/files/metainfo2.xml
@@ -0,0 +1 @@
+../../../../mpacks/mystack-ambari-mpack-1.0.0.1/stacks/MYSTACK/1.0/metainfo.xml
\ No newline at end of file


[22/47] ambari git commit: AMBARI-18938. NPE when authenticating via a Centrify LDAP proxy (rlevas)

Posted by jo...@apache.org.
AMBARI-18938.  NPE when authenticating via a Centrify LDAP proxy (rlevas)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: e73e783a8b5377b809a829c362900d3cad15d69f
Parents: 4871533
Author: Robert Levas <rl...@hortonworks.com>
Authored: Tue Nov 22 15:28:12 2016 -0500
Committer: Robert Levas <rl...@hortonworks.com>
Committed: Tue Nov 22 15:28:12 2016 -0500

----------------------------------------------------------------------
 .../AmbariLdapAuthenticationProvider.java       |  23 +-
 .../AmbariLdapBindAuthenticator.java            | 233 ++++++++++++++++---
 .../AmbariLdapBindAuthenticatorTest.java        | 226 +++++++++++-------
 3 files changed, 354 insertions(+), 128 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/e73e783a/ambari-server/src/main/java/org/apache/ambari/server/security/authorization/AmbariLdapAuthenticationProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/security/authorization/AmbariLdapAuthenticationProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/security/authorization/AmbariLdapAuthenticationProvider.java
index 6905757..b5776a3 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/security/authorization/AmbariLdapAuthenticationProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/security/authorization/AmbariLdapAuthenticationProvider.java
@@ -1,4 +1,4 @@
-/**
+/*
  * 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
@@ -24,7 +24,6 @@ import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.orm.dao.UserDAO;
 import org.apache.ambari.server.orm.entities.UserEntity;
 import org.apache.ambari.server.security.ClientSecurityType;
-import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.dao.IncorrectResultSizeDataAccessException;
@@ -72,17 +71,21 @@ public class AmbariLdapAuthenticationProvider implements AuthenticationProvider
 
         return new AmbariAuthentication(auth, userId);
       } catch (AuthenticationException e) {
-        LOG.debug("Got exception during LDAP authentification attempt", e);
+        LOG.debug("Got exception during LDAP authentication attempt", e);
         // Try to help in troubleshooting
         Throwable cause = e.getCause();
-        if (cause != null) {
-          // Below we check the cause of an AuthenticationException . If it is
-          // caused by another AuthenticationException, than probably
-          // the problem is with LDAP ManagerDN/password
-          if ((cause != e) && (cause instanceof
-                  org.springframework.ldap.AuthenticationException)) {
+        if ((cause != null) && (cause != e)) {
+          // Below we check the cause of an AuthenticationException to see what the actual cause is
+          // and then send an appropriate message to the caller.
+          if (cause instanceof org.springframework.ldap.CommunicationException) {
+            if (LOG.isDebugEnabled()) {
+              LOG.warn("Failed to communicate with the LDAP server: " + cause.getMessage(), e);
+            } else {
+              LOG.warn("Failed to communicate with the LDAP server: " + cause.getMessage());
+            }
+          } else if (cause instanceof org.springframework.ldap.AuthenticationException) {
             LOG.warn("Looks like LDAP manager credentials (that are used for " +
-                    "connecting to LDAP server) are invalid.", e);
+                "connecting to LDAP server) are invalid.", e);
           }
         }
         throw new InvalidUsernamePasswordCombinationException(e);

http://git-wip-us.apache.org/repos/asf/ambari/blob/e73e783a/ambari-server/src/main/java/org/apache/ambari/server/security/authorization/AmbariLdapBindAuthenticator.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/security/authorization/AmbariLdapBindAuthenticator.java b/ambari-server/src/main/java/org/apache/ambari/server/security/authorization/AmbariLdapBindAuthenticator.java
index b34ef6a..b4ef889 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/security/authorization/AmbariLdapBindAuthenticator.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/security/authorization/AmbariLdapBindAuthenticator.java
@@ -1,4 +1,4 @@
-/**
+/*
  * 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
@@ -20,26 +20,36 @@ package org.apache.ambari.server.security.authorization;
 
 import java.util.List;
 
+import javax.naming.NamingEnumeration;
 import javax.naming.NamingException;
 import javax.naming.directory.Attributes;
+import javax.naming.directory.DirContext;
 
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.ldap.core.AttributesMapper;
+import org.springframework.ldap.core.ContextSource;
+import org.springframework.ldap.core.DirContextAdapter;
 import org.springframework.ldap.core.DirContextOperations;
+import org.springframework.ldap.core.DistinguishedName;
 import org.springframework.ldap.core.LdapTemplate;
 import org.springframework.ldap.core.support.BaseLdapPathContextSource;
+import org.springframework.ldap.support.LdapUtils;
+import org.springframework.security.authentication.BadCredentialsException;
+import org.springframework.security.authentication.InternalAuthenticationServiceException;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.Authentication;
-import org.springframework.security.ldap.authentication.BindAuthenticator;
+import org.springframework.security.ldap.authentication.AbstractLdapAuthenticator;
+import org.springframework.security.ldap.search.LdapUserSearch;
 
 
 /**
  * An authenticator which binds as a user and checks if user should get ambari
  * admin authorities according to LDAP group membership
  */
-public class AmbariLdapBindAuthenticator extends BindAuthenticator {
+public class AmbariLdapBindAuthenticator extends AbstractLdapAuthenticator {
   private static final Logger LOG = LoggerFactory.getLogger(AmbariLdapBindAuthenticator.class);
 
   private Configuration configuration;
@@ -55,9 +65,14 @@ public class AmbariLdapBindAuthenticator extends BindAuthenticator {
   @Override
   public DirContextOperations authenticate(Authentication authentication) {
 
-    DirContextOperations user = super.authenticate(authentication);
-    LdapServerProperties ldapServerProperties =
-      configuration.getLdapServerProperties();
+    if (!(authentication instanceof UsernamePasswordAuthenticationToken)) {
+      LOG.info("Unexpected authentication token type encountered ({}) - failing authentication.", authentication.getClass().getName());
+      throw new BadCredentialsException("Unexpected authentication token type encountered.");
+    }
+
+    DirContextOperations user = authenticate((UsernamePasswordAuthenticationToken) authentication);
+
+    LdapServerProperties ldapServerProperties = configuration.getLdapServerProperties();
     if (StringUtils.isNotEmpty(ldapServerProperties.getAdminGroupMappingRules())) {
       setAmbariAdminAttr(user, ldapServerProperties);
     }
@@ -65,9 +80,13 @@ public class AmbariLdapBindAuthenticator extends BindAuthenticator {
     // Users stored locally in ambari are matched against LDAP users by the ldap attribute configured to be used as user name.
     // (e.g. uid, sAMAccount -> ambari user name )
     String ldapUserName = user.getStringAttribute(ldapServerProperties.getUsernameAttribute());
-    String loginName  = authentication.getName(); // user login name the user has logged in
+    String loginName = authentication.getName(); // user login name the user has logged in
 
-    if (!ldapUserName.equals(loginName)) {
+    if (ldapUserName == null) {
+      LOG.warn("The user data does not contain a value for {}.", ldapServerProperties.getUsernameAttribute());
+    } else if (ldapUserName.isEmpty()) {
+      LOG.warn("The user data contains an empty value for {}.", ldapServerProperties.getUsernameAttribute());
+    } else if (!ldapUserName.equals(loginName)) {
       // if authenticated user name is different from ldap user name than user has logged in
       // with a login name that is different (e.g. user principal name) from the ambari user name stored in
       // ambari db. In this case add the user login name  as login alias for ambari user name.
@@ -76,11 +95,10 @@ public class AmbariLdapBindAuthenticator extends BindAuthenticator {
       // If the ldap username needs to be processed (like converted to all lowercase characters),
       // process it before setting it in the session via AuthorizationHelper#addLoginNameAlias
       String processedLdapUserName;
-      if(ldapServerProperties.isForceUsernameToLowercase()) {
+      if (ldapServerProperties.isForceUsernameToLowercase()) {
         processedLdapUserName = ldapUserName.toLowerCase();
         LOG.info("Forcing ldap username to be lowercase characters: {} ==> {}", ldapUserName, processedLdapUserName);
-      }
-      else {
+      } else {
         processedLdapUserName = ldapUserName;
       }
 
@@ -91,10 +109,169 @@ public class AmbariLdapBindAuthenticator extends BindAuthenticator {
   }
 
   /**
-   *  Checks weather user is a member of ambari administrators group in LDAP. If
-   *  yes, sets user's ambari_admin attribute to true
-   * @param user
-   * @return
+   * Authenticates a user with a configured LDAP server using the user's username and password.
+   * <p>
+   * To authenticate a user:
+   * <ol>
+   * <li>
+   * The LDAP server is queried for the relevant user object where the
+   * supplied username matches the configured LDAP attribute that represents the user's username
+   * <ul><li>Example: (&(uid=user1)(objectClass=posixAccount))</li></ul>
+   * </li>
+   * <li>
+   * If found, the distinguished name (DN) of the user object is obtained from returned data and then
+   * used, along with the supplied password to perform an LDAP bind (see {@link #bind(DirContextOperations, String)})
+   * </li>
+   * </ol>
+   * <p>
+   * Failure to authenticate will result in a {@link BadCredentialsException} to be thrown.
+   *
+   * @param authentication the credentials to use for authentication
+   * @return the authenticated user details
+   * @see #bind(DirContextOperations, String)
+   */
+  private DirContextOperations authenticate(UsernamePasswordAuthenticationToken authentication) {
+    DirContextOperations user = null;
+
+    String username = authentication.getName();
+    Object credentials = authentication.getCredentials();
+    String password = (credentials instanceof String) ? (String) credentials : null;
+
+    if (StringUtils.isEmpty(username)) {
+      LOG.debug("Empty username encountered - failing authentication.");
+      throw new BadCredentialsException("Empty username encountered.");
+    }
+
+    LOG.debug("Authenticating {}", username);
+
+    if (StringUtils.isEmpty(password)) {
+      LOG.debug("Empty password encountered - failing authentication.");
+      throw new BadCredentialsException("Empty password encountered.");
+    }
+
+    LdapUserSearch userSearch = getUserSearch();
+    if (userSearch == null) {
+      LOG.debug("The user search facility has not been set - failing authentication.");
+      throw new BadCredentialsException("The user search facility has not been set.");
+    } else {
+      if (LOG.isTraceEnabled()) {
+        LOG.trace("Searching for user with username {}: {}", username, userSearch.toString());
+      }
+
+      // Find the user data where the supplied username matches the value of the configured LDAP
+      // attribute for the user's username. If a user is found, use the DN fro the returned data
+      // and the supplied password to attempt authentication.
+      DirContextOperations userFromSearch = userSearch.searchForUser(username);
+
+      if (userFromSearch == null) {
+        LOG.debug("LDAP user object not found for {}", username);
+      } else {
+        LOG.debug("Found LDAP user for {}: {}", username, userFromSearch.getDn());
+        user = bind(userFromSearch, password);
+
+        // If trace enabled, log the user's LDAP attributes.
+        if (LOG.isTraceEnabled()) {
+          Attributes attributes = user.getAttributes();
+          if (attributes != null) {
+            StringBuilder builder = new StringBuilder();
+            NamingEnumeration<String> ids = attributes.getIDs();
+            try {
+              while (ids.hasMore()) {
+                String id = ids.next();
+                builder.append("\n\t");
+                builder.append(attributes.get(id));
+              }
+            } catch (NamingException e) {
+              // Ignore this...
+            }
+            LOG.trace("User Attributes: {}", builder);
+          } else {
+            LOG.trace("User Attributes: not available");
+          }
+        }
+      }
+    }
+
+    // If a user was not authenticated, thrown a BadCredentialsException, else return the user data
+    if (user == null) {
+      LOG.debug("Invalid credentials for {} - failing authentication.", username);
+      throw new BadCredentialsException("Invalid credentials.");
+    } else {
+      LOG.debug("Successfully authenticated {}", username);
+    }
+
+    return user;
+  }
+
+  /**
+   * Attempt to authenticate a user with the configured LDAP server by performing an LDAP bind.
+   * <p>
+   * Using the distinguished name provided in the supplied user data and the supplied password,
+   * attempt to authenticate with the configured LDAP server. If authentication is successful, use the
+   * attributes from the supplied user data rather than the attributes associated with the bound context
+   * because some scenarios result in missing data within the bound context due to LDAP server implementations.
+   * <p>
+   * If authentication is not successful, throw a {@link BadCredentialsException}.
+   *
+   * @param user     the user data containing the relevant DN and associated attributes
+   * @param password the password
+   * @return the authenticated user details
+   * @throws BadCredentialsException if authentication fails
+   */
+  private DirContextOperations bind(DirContextOperations user, String password) {
+    ContextSource contextSource = getContextSource();
+
+    if (contextSource == null) {
+      String message = "Missing ContextSource - failing authentication.";
+      LOG.debug(message);
+      throw new InternalAuthenticationServiceException(message);
+    }
+
+    if (!(contextSource instanceof BaseLdapPathContextSource)) {
+      String message = String.format("Unexpected ContextSource type (%s) - failing authentication.", contextSource.getClass().getName());
+      LOG.debug(message);
+      throw new InternalAuthenticationServiceException(message);
+    }
+
+    BaseLdapPathContextSource baseLdapPathContextSource = (BaseLdapPathContextSource) contextSource;
+    DistinguishedName userDistinguishedName = new DistinguishedName(user.getDn());
+    DistinguishedName fullDn = new DistinguishedName(userDistinguishedName);
+    fullDn.prepend(baseLdapPathContextSource.getBaseLdapPath());
+
+    LOG.debug("Attempting to bind as {}", fullDn);
+
+    DirContext dirContext = null;
+
+    try {
+      // Perform the authentication.  The result is not used because it is expected that the supplied
+      // user data has all of the attributes for the authenticated user. If authentication fails, it
+      // expected that the supplied user data will be destroyed or orphaned.
+      dirContext = baseLdapPathContextSource.getContext(fullDn.toString(), password);
+
+      // Build a new DirContextAdapter using the attributes from the passed in user details since it
+      // is expected these details will be more complete of querying for them from the bound context.
+      // Some LDAP server implementations will no return all attributes to the bound context due to
+      // the filter being used in the query.
+      return new DirContextAdapter(user.getAttributes(), userDistinguishedName, baseLdapPathContextSource.getBaseLdapPath());
+    } catch (org.springframework.ldap.AuthenticationException e) {
+      String message = String.format("Failed to bind as %s - %s", user.getDn().toString(), e.getMessage());
+      if (LOG.isTraceEnabled()) {
+        LOG.trace(message, e);
+      } else if (LOG.isDebugEnabled()) {
+        LOG.debug(message);
+      }
+      throw new BadCredentialsException("The username or password is incorrect.");
+    } finally {
+      LdapUtils.closeContext(dirContext);
+    }
+  }
+
+  /**
+   * Checks weather user is a member of ambari administrators group in LDAP. If
+   * yes, sets user's ambari_admin attribute to true
+   *
+   * @param user the user details
+   * @return the updated user details
    */
   private DirContextOperations setAmbariAdminAttr(DirContextOperations user, LdapServerProperties ldapServerProperties) {
     String baseDn = ldapServerProperties.getBaseDN().toLowerCase();
@@ -105,10 +282,10 @@ public class AmbariLdapBindAuthenticator extends BindAuthenticator {
 
     //If groupBase is set incorrectly or isn't set - search in BaseDn
     int indexOfBaseDn = groupBase.indexOf(baseDn);
-    groupBase = indexOfBaseDn <= 0 ? "" : groupBase.substring(0,indexOfBaseDn - 1);
+    groupBase = indexOfBaseDn <= 0 ? "" : groupBase.substring(0, indexOfBaseDn - 1);
 
     String memberValue = StringUtils.isNotEmpty(adminGroupMappingMemberAttr)
-      ? user.getStringAttribute(adminGroupMappingMemberAttr) : user.getNameInNamespace();
+        ? user.getStringAttribute(adminGroupMappingMemberAttr) : user.getNameInNamespace();
     LOG.debug("LDAP login - set '{}' as member attribute for adminGroupMappingRules", memberValue);
 
     String setAmbariAdminAttrFilter = resolveAmbariAdminAttrFilter(ldapServerProperties, memberValue);
@@ -125,8 +302,8 @@ public class AmbariLdapBindAuthenticator extends BindAuthenticator {
     ldapTemplate.setIgnorePartialResultException(true);
     ldapTemplate.setIgnoreNameNotFoundException(true);
 
-    List<String> ambariAdminGroups = ldapTemplate.search(
-        groupBase, setAmbariAdminAttrFilter, attributesMapper);
+    @SuppressWarnings("unchecked")
+    List<String> ambariAdminGroups = ldapTemplate.search(groupBase, setAmbariAdminAttrFilter, attributesMapper);
 
     //user has admin role granted, if user is a member of at least 1 group,
     // which matches the rules in configuration
@@ -141,24 +318,24 @@ public class AmbariLdapBindAuthenticator extends BindAuthenticator {
     String groupMembershipAttr = ldapServerProperties.getGroupMembershipAttr();
     String groupObjectClass = ldapServerProperties.getGroupObjectClass();
     String adminGroupMappingRules =
-      ldapServerProperties.getAdminGroupMappingRules();
+        ldapServerProperties.getAdminGroupMappingRules();
     final String groupNamingAttribute =
-      ldapServerProperties.getGroupNamingAttr();
+        ldapServerProperties.getGroupNamingAttr();
     String groupSearchFilter = ldapServerProperties.getGroupSearchFilter();
 
     String setAmbariAdminAttrFilter;
     if (StringUtils.isEmpty(groupSearchFilter)) {
       String adminGroupMappingRegex = createAdminGroupMappingRegex(adminGroupMappingRules, groupNamingAttribute);
       setAmbariAdminAttrFilter = String.format("(&(%s=%s)(objectclass=%s)(|%s))",
-        groupMembershipAttr,
-        memberValue,
-        groupObjectClass,
-        adminGroupMappingRegex);
+          groupMembershipAttr,
+          memberValue,
+          groupObjectClass,
+          adminGroupMappingRegex);
     } else {
       setAmbariAdminAttrFilter = String.format("(&(%s=%s)%s)",
-        groupMembershipAttr,
-        memberValue,
-        groupSearchFilter);
+          groupMembershipAttr,
+          memberValue,
+          groupSearchFilter);
     }
     return setAmbariAdminAttrFilter;
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/e73e783a/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariLdapBindAuthenticatorTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariLdapBindAuthenticatorTest.java b/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariLdapBindAuthenticatorTest.java
index cea4b66..aed6b57 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariLdapBindAuthenticatorTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/security/authorization/AmbariLdapBindAuthenticatorTest.java
@@ -1,5 +1,4 @@
-
-/**
+/*
  * 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
@@ -18,132 +17,179 @@
  */
 package org.apache.ambari.server.security.authorization;
 
-import static org.easymock.EasyMock.eq;
-import static org.easymock.EasyMock.expectLastCall;
-import static org.junit.Assert.assertEquals;
-
+import javax.naming.NamingEnumeration;
+import javax.naming.directory.Attribute;
+import javax.naming.directory.Attributes;
+import javax.naming.directory.SearchControls;
+import javax.naming.directory.SearchResult;
+import javax.naming.ldap.LdapName;
 import java.util.Properties;
-
 import org.apache.ambari.server.configuration.Configuration;
-import org.apache.directory.server.annotations.CreateLdapServer;
-import org.apache.directory.server.annotations.CreateTransport;
-import org.apache.directory.server.core.annotations.ApplyLdifFiles;
-import org.apache.directory.server.core.annotations.ContextEntry;
-import org.apache.directory.server.core.annotations.CreateDS;
-import org.apache.directory.server.core.annotations.CreatePartition;
-import org.apache.directory.server.core.integ.FrameworkRunner;
-import org.easymock.EasyMockRule;
-import org.easymock.Mock;
-import org.easymock.MockType;
-import org.junit.Before;
-import org.junit.Rule;
+import org.apache.commons.lang.StringUtils;
+import org.easymock.EasyMockSupport;
 import org.junit.Test;
-import org.junit.runner.RunWith;
 import org.springframework.ldap.core.DirContextOperations;
+import org.springframework.ldap.core.DistinguishedName;
 import org.springframework.ldap.core.support.LdapContextSource;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
-import org.springframework.security.core.Authentication;
 import org.springframework.security.ldap.search.FilterBasedLdapUserSearch;
-import org.springframework.security.ldap.search.LdapUserSearch;
 import org.springframework.web.context.request.RequestAttributes;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
+import static org.easymock.EasyMock.anyObject;
+import static org.easymock.EasyMock.anyString;
+import static org.easymock.EasyMock.eq;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.expectLastCall;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+public class AmbariLdapBindAuthenticatorTest extends EasyMockSupport {
 
-@RunWith(FrameworkRunner.class)
-@CreateDS(allowAnonAccess = true,
-  name = "AmbariLdapBindAuthenticatorTest",
-  partitions = {
-    @CreatePartition(name = "Root",
-      suffix = "dc=apache,dc=org",
-      contextEntry = @ContextEntry(
-        entryLdif =
-          "dn: dc=apache,dc=org\n" +
-            "dc: apache\n" +
-            "objectClass: top\n" +
-            "objectClass: domain\n\n" +
-            "dn: dc=ambari,dc=apache,dc=org\n" +
-            "dc: ambari\n" +
-            "objectClass: top\n" +
-            "objectClass: domain\n\n"))
-  })
-@CreateLdapServer(allowAnonymousAccess = true,
-  transports = {@CreateTransport(protocol = "LDAP")})
-@ApplyLdifFiles("users.ldif")
-public class AmbariLdapBindAuthenticatorTest extends AmbariLdapAuthenticationProviderBaseTest {
-
-  @Rule
-  public EasyMockRule mocks = new EasyMockRule(this);
-
-  @Mock(type = MockType.NICE)
-  private ServletRequestAttributes servletRequestAttributes;
-
-  @Before
-  public void setUp() {
-    resetAll();
+  @Test
+  public void testAuthenticateWithoutLogin() throws Exception {
+    testAuthenticate("username", "username", false);
+  }
+
+  @Test
+  public void testAuthenticateWithNullLDAPUsername() throws Exception {
+    testAuthenticate("username", null, false);
   }
 
   @Test
   public void testAuthenticateWithLoginAliasDefault() throws Exception {
-    testAuthenticateWithLoginAlias(false);
+    testAuthenticate("username", "ldapUsername", false);
   }
 
   @Test
   public void testAuthenticateWithLoginAliasForceToLower() throws Exception {
-    testAuthenticateWithLoginAlias(true);
+    testAuthenticate("username", "ldapUsername", true);
   }
 
-  private void testAuthenticateWithLoginAlias(boolean forceUsernameToLower) throws Exception {
-    // Given
-
-    LdapContextSource ldapCtxSource = new LdapContextSource();
-    ldapCtxSource.setUrls(new String[] {"ldap://localhost:" + getLdapServer().getPort()});
-    ldapCtxSource.setBase("dc=ambari,dc=apache,dc=org");
-    ldapCtxSource.afterPropertiesSet();
+  @Test
+  public void testAuthenticateBadPassword() throws Exception {
+    String basePathString = "dc=apache,dc=org";
+    String ldapUserRelativeDNString = String.format("uid=%s,ou=people,ou=dev", "ldapUsername");
+    LdapName ldapUserRelativeDN = new LdapName(ldapUserRelativeDNString);
+    String ldapUserDNString = String.format("%s,%s", ldapUserRelativeDNString, basePathString);
+    DistinguishedName basePath = new DistinguishedName(basePathString);
+
+    LdapContextSource ldapCtxSource = createMock(LdapContextSource.class);
+    expect(ldapCtxSource.getBaseLdapPath())
+        .andReturn(basePath)
+        .atLeastOnce();
+    expect(ldapCtxSource.getContext(ldapUserDNString, "password"))
+        .andThrow(new org.springframework.ldap.AuthenticationException(null))
+        .once();
+
+    DirContextOperations searchedUserContext = createMock(DirContextOperations.class);
+    expect(searchedUserContext.getDn())
+        .andReturn(ldapUserRelativeDN)
+        .atLeastOnce();
+
+    FilterBasedLdapUserSearch userSearch = createMock(FilterBasedLdapUserSearch.class);
+    expect(userSearch.searchForUser(anyString())).andReturn(searchedUserContext).once();
 
-    Properties properties = new Properties();
-    properties.setProperty(Configuration.CLIENT_SECURITY.getKey(), "ldap");
-    properties.setProperty(Configuration.SERVER_PERSISTENCE_TYPE.getKey(), "in-memory");
-    properties.setProperty(Configuration.METADATA_DIR_PATH.getKey(),"src/test/resources/stacks");
-    properties.setProperty(Configuration.SERVER_VERSION_FILE.getKey(),"src/test/resources/version");
-    properties.setProperty(Configuration.OS_VERSION.getKey(),"centos5");
-    properties.setProperty(Configuration.SHARED_RESOURCES_DIR.getKey(), "src/test/resources/");
-    properties.setProperty(Configuration.LDAP_BASE_DN.getKey(), "dc=ambari,dc=apache,dc=org");
-
-    if(forceUsernameToLower) {
-      properties.setProperty(Configuration.LDAP_USERNAME_FORCE_LOWERCASE.getKey(), "true");
-    }
+    replayAll();
 
-    Configuration configuration = new Configuration(properties);
+    Configuration configuration = new Configuration();
 
     AmbariLdapBindAuthenticator bindAuthenticator = new AmbariLdapBindAuthenticator(ldapCtxSource, configuration);
-
-    LdapUserSearch userSearch = new FilterBasedLdapUserSearch("", "(&(cn={0})(objectClass=person))", ldapCtxSource);
     bindAuthenticator.setUserSearch(userSearch);
 
-    // JohnSmith is a login alias for deniedUser username
-    String loginAlias = "JohnSmith";
-    String userName = "deniedUser";
-
-    Authentication authentication = new UsernamePasswordAuthenticationToken(loginAlias, "password");
+    try {
+      bindAuthenticator.authenticate(new UsernamePasswordAuthenticationToken("username", "password"));
+      fail("Expected thrown exception: org.springframework.security.authentication.BadCredentialsException");
+    } catch (org.springframework.security.authentication.BadCredentialsException e) {
+      // expected
+    } catch (Throwable t) {
+      fail("Expected thrown exception: org.springframework.security.authentication.BadCredentialsException\nEncountered thrown exception " + t.getClass().getName());
+    }
 
-    RequestContextHolder.setRequestAttributes(servletRequestAttributes);
+    verifyAll();
+  }
 
-    servletRequestAttributes.setAttribute(eq(loginAlias), eq(forceUsernameToLower ? userName.toLowerCase(): userName), eq(RequestAttributes.SCOPE_SESSION));
-    expectLastCall().once();
+  private void testAuthenticate(String ambariUsername, String ldapUsername, boolean forceUsernameToLower) throws Exception {
+    String basePathString = "dc=apache,dc=org";
+    String ldapUserRelativeDNString = String.format("uid=%s,ou=people,ou=dev", ldapUsername);
+    LdapName ldapUserRelativeDN = new LdapName(ldapUserRelativeDNString);
+    String ldapUserDNString = String.format("%s,%s", ldapUserRelativeDNString, basePathString);
+    DistinguishedName basePath = new DistinguishedName(basePathString);
+
+    @SuppressWarnings("unchecked")
+    NamingEnumeration<SearchResult> adminGroups = createMock(NamingEnumeration.class);
+    expect(adminGroups.hasMore())
+        .andReturn(false)
+        .atLeastOnce();
+    adminGroups.close();
+    expectLastCall().atLeastOnce();
+
+    DirContextOperations boundUserContext = createMock(DirContextOperations.class);
+    expect(boundUserContext.search(eq("ou=groups"), eq("(&(member=" + ldapUserDNString + ")(objectclass=group)(|(cn=Ambari Administrators)))"), anyObject(SearchControls.class)))
+        .andReturn(adminGroups)
+        .atLeastOnce();
+    boundUserContext.close();
+    expectLastCall().atLeastOnce();
+
+
+    LdapContextSource ldapCtxSource = createMock(LdapContextSource.class);
+    expect(ldapCtxSource.getBaseLdapPath())
+        .andReturn(basePath)
+        .atLeastOnce();
+    expect(ldapCtxSource.getContext(ldapUserDNString, "password"))
+        .andReturn(boundUserContext)
+        .once();
+    expect(ldapCtxSource.getReadOnlyContext())
+        .andReturn(boundUserContext)
+        .once();
+
+    Attribute uidAttribute = createMock(Attribute.class);
+    expect(uidAttribute.size())
+        .andReturn(1)
+        .atLeastOnce();
+    expect(uidAttribute.get()).andReturn(ldapUsername).atLeastOnce();
+
+    Attributes searchedAttributes = createMock(Attributes.class);
+    expect(searchedAttributes.get("uid"))
+        .andReturn(uidAttribute)
+        .atLeastOnce();
+
+    DirContextOperations searchedUserContext = createMock(DirContextOperations.class);
+    expect(searchedUserContext.getDn())
+        .andReturn(ldapUserRelativeDN)
+        .atLeastOnce();
+    expect(searchedUserContext.getAttributes())
+        .andReturn(searchedAttributes)
+        .atLeastOnce();
+
+    FilterBasedLdapUserSearch userSearch = createMock(FilterBasedLdapUserSearch.class);
+    expect(userSearch.searchForUser(ambariUsername)).andReturn(searchedUserContext).once();
+
+    ServletRequestAttributes servletRequestAttributes = createMock(ServletRequestAttributes.class);
+
+    if (!StringUtils.isEmpty(ldapUsername) && !ambariUsername.equals(ldapUsername)) {
+      servletRequestAttributes.setAttribute(eq(ambariUsername), eq(forceUsernameToLower ? ldapUsername.toLowerCase() : ldapUsername), eq(RequestAttributes.SCOPE_SESSION));
+      expectLastCall().once();
+    }
 
     replayAll();
 
-    // When
+    RequestContextHolder.setRequestAttributes(servletRequestAttributes);
 
-    DirContextOperations user = bindAuthenticator.authenticate(authentication);
+    Properties properties = new Properties();
+    if (forceUsernameToLower) {
+      properties.setProperty(Configuration.LDAP_USERNAME_FORCE_LOWERCASE.getKey(), "true");
+    }
+    Configuration configuration = new Configuration(properties);
 
-    // Then
+    AmbariLdapBindAuthenticator bindAuthenticator = new AmbariLdapBindAuthenticator(ldapCtxSource, configuration);
+    bindAuthenticator.setUserSearch(userSearch);
+    DirContextOperations user = bindAuthenticator.authenticate(new UsernamePasswordAuthenticationToken(ambariUsername, "password"));
 
     verifyAll();
 
     String ldapUserNameAttribute = configuration.getLdapServerProperties().getUsernameAttribute();
-
-    assertEquals(userName, user.getStringAttribute(ldapUserNameAttribute));
+    assertEquals(ldapUsername, user.getStringAttribute(ldapUserNameAttribute));
   }
 }


[07/47] ambari git commit: AMBARI-18915 : Update AMS pom to use Apache hbase, hadoop, phoenix tarballs. (avijayan)

Posted by jo...@apache.org.
AMBARI-18915 : Update AMS pom to use Apache hbase,hadoop,phoenix tarballs. (avijayan)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: eb87df065d4f0f838e7335bc2cf47d06c9e5dd68
Parents: 7d07b71
Author: Aravindan Vijayan <av...@hortonworks.com>
Authored: Mon Nov 21 13:20:47 2016 -0800
Committer: Aravindan Vijayan <av...@hortonworks.com>
Committed: Mon Nov 21 13:20:59 2016 -0800

----------------------------------------------------------------------
 ambari-metrics/ambari-metrics-timelineservice/pom.xml   | 12 ++++++------
 .../applicationhistoryservice/webapp/TestAHSWebApp.java |  1 +
 ambari-metrics/pom.xml                                  | 12 ++++++------
 3 files changed, 13 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/eb87df06/ambari-metrics/ambari-metrics-timelineservice/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-metrics/ambari-metrics-timelineservice/pom.xml b/ambari-metrics/ambari-metrics-timelineservice/pom.xml
index 6896c6b..d4f3f1e 100644
--- a/ambari-metrics/ambari-metrics-timelineservice/pom.xml
+++ b/ambari-metrics/ambari-metrics-timelineservice/pom.xml
@@ -34,9 +34,9 @@
     <!-- Needed for generating FindBugs warnings using parent pom -->
     <!--<yarn.basedir>${project.parent.parent.basedir}</yarn.basedir>-->
     <protobuf.version>2.5.0</protobuf.version>
-    <hadoop.version>2.7.1.2.3.4.0-3347</hadoop.version>
-    <phoenix.version>4.4.0.2.3.4.0-3347</phoenix.version>
-    <hbase.version>1.1.2.2.3.4.0-3347</hbase.version>
+    <hadoop.version>2.7.2</hadoop.version>
+    <phoenix.version>4.8.1-HBase-1.2</phoenix.version>
+    <hbase.version>1.2.4</hbase.version>
   </properties>
 
   <build>
@@ -304,9 +304,9 @@
     </dependency>
 
     <dependency>
-      <groupId>commons-lang</groupId>
-      <artifactId>commons-lang</artifactId>
-      <version>2.5</version>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-lang3</artifactId>
+      <version>3.0</version>
     </dependency>
 
     <dependency>

http://git-wip-us.apache.org/repos/asf/ambari/blob/eb87df06/ambari-metrics/ambari-metrics-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/TestAHSWebApp.java
----------------------------------------------------------------------
diff --git a/ambari-metrics/ambari-metrics-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/TestAHSWebApp.java b/ambari-metrics/ambari-metrics-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/TestAHSWebApp.java
index 605358f..ec319e2 100644
--- a/ambari-metrics/ambari-metrics-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/TestAHSWebApp.java
+++ b/ambari-metrics/ambari-metrics-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/TestAHSWebApp.java
@@ -21,6 +21,7 @@ package org.apache.hadoop.yarn.server.applicationhistoryservice.webapp;
 import static org.apache.hadoop.yarn.webapp.Params.TITLE;
 import static org.mockito.Mockito.mock;
 
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.AboutPage;
 import org.junit.Assert;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.yarn.api.ApplicationBaseProtocol;

http://git-wip-us.apache.org/repos/asf/ambari/blob/eb87df06/ambari-metrics/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-metrics/pom.xml b/ambari-metrics/pom.xml
index 2d88912..ac9e7bc 100644
--- a/ambari-metrics/pom.xml
+++ b/ambari-metrics/pom.xml
@@ -39,18 +39,18 @@
     <python.ver>python &gt;= 2.6</python.ver>
     <deb.python.ver>python (&gt;= 2.6)</deb.python.ver>
     <!--TODO change to HDP URL-->
-    <hbase.tar>http://private-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.3.4.0-3347/tars/hbase-1.1.2.2.3.4.0-3347.tar.gz</hbase.tar>
-    <hbase.folder>hbase-1.1.2.2.3.4.0-3347</hbase.folder>
-    <hadoop.tar>http://private-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.3.4.0-3347/tars/hadoop-2.7.1.2.3.4.0-3347.tar.gz</hadoop.tar>
-    <hadoop.folder>hadoop-2.7.1.2.3.4.0-3347</hadoop.folder>
+    <hbase.tar>http://www-us.apache.org/dist/hbase/1.2.4/hbase-1.2.4-bin.tar.gz</hbase.tar>
+    <hbase.folder>hbase-1.2.4</hbase.folder>
+    <hadoop.tar>http://www-us.apache.org/dist/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz</hadoop.tar>
+    <hadoop.folder>hadoop-2.7.2</hadoop.folder>
     <hbase.winpkg.zip>https://msibuilds.blob.core.windows.net/hdp/2.x/2.2.4.2/2/hbase-0.98.4.2.2.4.2-0002-hadoop2.winpkg.zip</hbase.winpkg.zip>
     <hbase.winpkg.folder>hbase-0.98.4.2.2.4.2-0002-hadoop2</hbase.winpkg.folder>
     <hadoop.winpkg.zip>https://msibuilds.blob.core.windows.net/hdp/2.x/2.2.4.2/2/hadoop-2.6.0.2.2.4.2-0002.winpkg.zip</hadoop.winpkg.zip>
     <hadoop.winpkg.folder>hadoop-2.6.0.2.2.4.2-0002</hadoop.winpkg.folder>
     <grafana.folder>grafana-2.6.0</grafana.folder>
     <grafana.tar>https://grafanarel.s3.amazonaws.com/builds/grafana-2.6.0.linux-x64.tar.gz</grafana.tar>
-    <phoenix.tar>http://private-repo-1.hortonworks.com/HDP/centos6/2.x/updates/2.3.4.0-3347/tars/phoenix-4.4.0.2.3.4.0-3347.tar.gz</phoenix.tar>
-    <phoenix.folder>phoenix-4.4.0.2.3.4.0-3347</phoenix.folder>
+    <phoenix.tar>http://www-us.apache.org/dist/phoenix/apache-phoenix-4.8.1-HBase-1.2/bin/apache-phoenix-4.8.1-HBase-1.2-bin.tar.gz</phoenix.tar>
+    <phoenix.folder>apache-phoenix-4.8.1-HBase-1.2-bin</phoenix.folder>
     <resmonitor.install.dir>
       /usr/lib/python2.6/site-packages/resource_monitoring
     </resmonitor.install.dir>


[19/47] ambari git commit: AMBARI-18826. Stack property definitions made in ambari-web should be made stack agnostic (akovalenko)

Posted by jo...@apache.org.
AMBARI-18826. Stack property definitions made in ambari-web should be made stack agnostic (akovalenko)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: 2ce9e3b671ad1687581113dd96fa38be7a0c51a3
Parents: 1ed9416
Author: Aleksandr Kovalenko <ak...@hortonworks.com>
Authored: Tue Nov 22 17:48:27 2016 +0200
Committer: Aleksandr Kovalenko <ak...@hortonworks.com>
Committed: Tue Nov 22 17:48:27 2016 +0200

----------------------------------------------------------------------
 ambari-web/app/assets/test/tests.js             |    5 +-
 .../hawq/activateStandby/step2_controller.js    |    2 +-
 .../hawq/addStandby/step3_controller.js         |    3 +-
 .../journalNode/step2_controller.js             |    3 +-
 .../nameNode/step3_controller.js                |    3 +-
 .../resourceManager/step3_controller.js         |    2 +-
 ambari-web/app/controllers/main/host/details.js |    2 +-
 .../app/controllers/wizard/step7_controller.js  |    2 +-
 .../app/controllers/wizard/step8_controller.js  |    2 +-
 ambari-web/app/data/HDP2.2/hive_properties.js   |  119 -
 ambari-web/app/data/HDP2.2/site_properties.js   |  275 --
 ambari-web/app/data/HDP2.2/tez_properties.js    |   43 -
 ambari-web/app/data/HDP2.2/yarn_properties.js   |   54 -
 .../HDP2.3/hawq_activate_standby_properties.js  |   43 -
 .../app/data/HDP2.3/hawq_ha_properties.js       |   43 -
 ambari-web/app/data/HDP2.3/site_properties.js   |  373 ---
 ambari-web/app/data/HDP2/alert_notification.js  |  145 -
 .../app/data/HDP2/gluster_fs_properties.js      |   94 -
 ambari-web/app/data/HDP2/ha_properties.js       |  538 ----
 .../data/HDP2/kerberos_descriptor_properties.js |   35 -
 ambari-web/app/data/HDP2/kerberos_identities.js |  129 -
 .../data/HDP2/move_journal_node_properties.js   |   42 -
 ambari-web/app/data/HDP2/rm_ha_properties.js    |  206 --
 ambari-web/app/data/HDP2/secure_mapping.js      | 1004 -------
 ambari-web/app/data/HDP2/site_properties.js     | 2579 ------------------
 ambari-web/app/data/HDP2/ui_properties.js       |   49 -
 .../app/data/configs/alert_notification.js      |  145 +
 .../configs/services/accumulo_properties.js     |  116 +
 .../configs/services/ambari_infra_properties.js |  167 ++
 .../services/ambari_metrics_properties.js       |  188 ++
 .../data/configs/services/falcon_properties.js  |  302 ++
 .../data/configs/services/flume_properties.js   |   38 +
 .../configs/services/glusterfs_properties.js    |   93 +
 .../data/configs/services/hawq_properties.js    |  110 +
 .../data/configs/services/hbase_properties.js   |  124 +
 .../data/configs/services/hdfs_properties.js    |  164 ++
 .../data/configs/services/hive_properties.js    |  590 ++++
 .../data/configs/services/kafka_properties.js   |   66 +
 .../configs/services/kerberos_properties.js     |  204 ++
 .../data/configs/services/knox_properties.js    |   32 +
 .../configs/services/logsearch_properties.js    |  447 +++
 .../configs/services/mapreduce2_properties.js   |   45 +
 .../data/configs/services/oozie_properties.js   |   93 +
 .../data/configs/services/ranger_properties.js  |  309 +++
 .../data/configs/services/storm_properties.js   |  296 ++
 .../app/data/configs/services/tez_properties.js |   92 +
 .../data/configs/services/yarn_properties.js    |  300 ++
 .../configs/services/zookeeper_properties.js    |   67 +
 ambari-web/app/data/configs/site_properties.js  |   55 +
 ambari-web/app/data/configs/ui_properties.js    |   49 +
 .../app/data/configs/wizards/ha_properties.js   |  538 ++++
 .../wizards/hawq_activate_standby_properties.js |   43 +
 .../data/configs/wizards/hawq_ha_properties.js  |   43 +
 .../wizards/kerberos_descriptor_properties.js   |   35 +
 .../data/configs/wizards/kerberos_identities.js |  129 +
 .../wizards/move_journal_node_properties.js     |   42 +
 .../data/configs/wizards/rm_ha_properties.js    |  206 ++
 .../app/data/configs/wizards/secure_mapping.js  | 1004 +++++++
 ambari-web/app/data/custom_stack_map.js         |    2 -
 .../configs/stack_config_properties_mapper.js   |    2 +-
 .../app/mixins/wizard/addSecurityConfigs.js     |    2 +-
 ambari-web/app/models/stack_service.js          |   13 +-
 ambari-web/app/utils/config.js                  |   25 +-
 ambari-web/app/views/common/controls_view.js    |    5 +-
 .../views/main/dashboard/widgets/hbase_links.js |    6 +-
 .../views/main/service/reassign/step5_view.js   |    3 +-
 ambari-web/copy-pluggable-stack-resources.sh    |    2 +-
 .../test/controllers/main/host/details_test.js  |   25 +-
 .../test/data/HDP2.2/site_properties_test.js    |   76 -
 .../test/data/HDP2.3/site_properties_test.js    |   77 -
 .../test/data/HDP2/secure_mapping_test.js       |   36 -
 .../test/data/HDP2/site_properties_test.js      |   76 -
 .../test/data/configs/site_properties_test.js   |   76 +
 .../data/configs/wizards/secure_mapping_test.js |   36 +
 ambari-web/test/utils/config_test.js            |   46 +-
 75 files changed, 6305 insertions(+), 6130 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/assets/test/tests.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/assets/test/tests.js b/ambari-web/app/assets/test/tests.js
index 6a71db6..959d1c6 100644
--- a/ambari-web/app/assets/test/tests.js
+++ b/ambari-web/app/assets/test/tests.js
@@ -38,10 +38,7 @@ var files = [
   'test/init_computed_aliases',
   'test/init_model_test',
   'test/app_test',
-  'test/data/HDP2/site_properties_test',
-  'test/data/HDP2/secure_mapping_test',
-  'test/data/HDP2.2/site_properties_test',
-  'test/data/HDP2.3/site_properties_test',
+  'test/data/configs/site_properties_test',
   'test/controllers/global/background_operations_test',
   'test/controllers/global/cluster_controller_test',
   'test/controllers/global/update_controller_test',

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/controllers/main/admin/highAvailability/hawq/activateStandby/step2_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/highAvailability/hawq/activateStandby/step2_controller.js b/ambari-web/app/controllers/main/admin/highAvailability/hawq/activateStandby/step2_controller.js
index ff338de..c8f0e15 100644
--- a/ambari-web/app/controllers/main/admin/highAvailability/hawq/activateStandby/step2_controller.js
+++ b/ambari-web/app/controllers/main/admin/highAvailability/hawq/activateStandby/step2_controller.js
@@ -46,7 +46,7 @@ App.ActivateHawqStandbyWizardStep2Controller = Em.Controller.extend({
   renderConfigs: function () {
     newHawqMaster = App.HostComponent.find().findProperty('componentName','HAWQSTANDBY').get('hostName');
 
-    var configs = require('data/HDP2.3/hawq_activate_standby_properties').haConfig;
+    var configs = require('data/configs/wizards/hawq_activate_standby_properties').haConfig;
 
     var serviceConfig = App.ServiceConfig.create({
       serviceName: configs.serviceName,

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/controllers/main/admin/highAvailability/hawq/addStandby/step3_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/highAvailability/hawq/addStandby/step3_controller.js b/ambari-web/app/controllers/main/admin/highAvailability/hawq/addStandby/step3_controller.js
index 3378cd5..81ece37 100644
--- a/ambari-web/app/controllers/main/admin/highAvailability/hawq/addStandby/step3_controller.js
+++ b/ambari-web/app/controllers/main/admin/highAvailability/hawq/addStandby/step3_controller.js
@@ -60,7 +60,7 @@ App.AddHawqStandbyWizardStep3Controller = Em.Controller.extend({
    */
   renderConfigs: function () {
 
-    var configs = require('data/HDP2.3/hawq_ha_properties').haConfig;
+    var configs = require('data/configs/wizards/hawq_ha_properties').haConfig;
 
     var serviceConfig = App.ServiceConfig.create({
       serviceName: configs.serviceName,
@@ -157,4 +157,3 @@ App.AddHawqStandbyWizardStep3Controller = Em.Controller.extend({
   },
 
 });
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/controllers/main/admin/highAvailability/journalNode/step2_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/highAvailability/journalNode/step2_controller.js b/ambari-web/app/controllers/main/admin/highAvailability/journalNode/step2_controller.js
index 9804428..d1cb198 100644
--- a/ambari-web/app/controllers/main/admin/highAvailability/journalNode/step2_controller.js
+++ b/ambari-web/app/controllers/main/admin/highAvailability/journalNode/step2_controller.js
@@ -35,7 +35,7 @@ App.ManageJournalNodeWizardStep2Controller = Em.Controller.extend({
   selectedService: null,
   stepConfigs: [],
   serverConfigData: {},
-  moveJNConfig: $.extend(true, {}, require('data/HDP2/move_journal_node_properties').moveJNConfig),
+  moveJNConfig: $.extend(true, {}, require('data/configs/wizards/move_journal_node_properties').moveJNConfig),
   once: false,
   isLoaded: false,
   versionLoaded: true,
@@ -161,4 +161,3 @@ App.ManageJournalNodeWizardStep2Controller = Em.Controller.extend({
   isNextDisabled: Em.computed.not('isLoaded')
 
 });
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/controllers/main/admin/highAvailability/nameNode/step3_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/highAvailability/nameNode/step3_controller.js b/ambari-web/app/controllers/main/admin/highAvailability/nameNode/step3_controller.js
index 1e80e72..0a46af7 100644
--- a/ambari-web/app/controllers/main/admin/highAvailability/nameNode/step3_controller.js
+++ b/ambari-web/app/controllers/main/admin/highAvailability/nameNode/step3_controller.js
@@ -35,7 +35,7 @@ App.HighAvailabilityWizardStep3Controller = Em.Controller.extend({
   selectedService: null,
   stepConfigs: [],
   serverConfigData: {},
-  haConfig: $.extend(true, {}, require('data/HDP2/ha_properties').haConfig),
+  haConfig: $.extend(true, {}, require('data/configs/wizards/ha_properties').haConfig),
   once: false,
   isLoaded: false,
   versionLoaded: true,
@@ -339,4 +339,3 @@ App.HighAvailabilityWizardStep3Controller = Em.Controller.extend({
   isNextDisabled: Em.computed.not('isLoaded')
 
 });
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/controllers/main/admin/highAvailability/resourceManager/step3_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/highAvailability/resourceManager/step3_controller.js b/ambari-web/app/controllers/main/admin/highAvailability/resourceManager/step3_controller.js
index 08e0b73..179193f 100644
--- a/ambari-web/app/controllers/main/admin/highAvailability/resourceManager/step3_controller.js
+++ b/ambari-web/app/controllers/main/admin/highAvailability/resourceManager/step3_controller.js
@@ -49,7 +49,7 @@ App.RMHighAvailabilityWizardStep3Controller = Em.Controller.extend(App.Blueprint
    */
   renderConfigs: function () {
 
-    var configs = $.extend(true, {}, require('data/HDP2/rm_ha_properties').haConfig);
+    var configs = $.extend(true, {}, require('data/configs/wizards/rm_ha_properties').haConfig);
 
     var serviceConfig = App.ServiceConfig.create({
       serviceName: configs.serviceName,

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/controllers/main/host/details.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/host/details.js b/ambari-web/app/controllers/main/host/details.js
index ec9a73f..ecb3219 100644
--- a/ambari-web/app/controllers/main/host/details.js
+++ b/ambari-web/app/controllers/main/host/details.js
@@ -1257,7 +1257,7 @@ App.MainHostDetailsController = Em.Controller.extend(App.SupportClientConfigsDow
    * @method updateStormConfigs
    */
   updateStormConfigs: function () {
-    if (App.Service.find('STORM').get('isLoaded') && App.get('isHadoop23Stack')) {
+    if (App.Service.find('STORM').get('isLoaded') && App.StackService.find('STORM').compareCurrentVersion('0.10') > -1) {
       this.loadConfigs("loadStormConfigs");
     }
   },

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/controllers/wizard/step7_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/wizard/step7_controller.js b/ambari-web/app/controllers/wizard/step7_controller.js
index 3d22fe9..d43b69b 100644
--- a/ambari-web/app/controllers/wizard/step7_controller.js
+++ b/ambari-web/app/controllers/wizard/step7_controller.js
@@ -68,7 +68,7 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
   /**
    * used in services_config.js view to mark a config with security icon
    */
-  secureConfigs: require('data/HDP2/secure_mapping'),
+  secureConfigs: require('data/configs/wizards/secure_mapping'),
 
   /**
    * If configChangeObserver Modal is shown

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/controllers/wizard/step8_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/wizard/step8_controller.js b/ambari-web/app/controllers/wizard/step8_controller.js
index 24d8ec7..6475d49 100644
--- a/ambari-web/app/controllers/wizard/step8_controller.js
+++ b/ambari-web/app/controllers/wizard/step8_controller.js
@@ -1655,7 +1655,7 @@ App.WizardStep8Controller = Em.Controller.extend(App.AddSecurityConfigs, App.wiz
     var miscConfigs = this.get('configs').filterProperty('serviceName', 'MISC'),
       createNotification = miscConfigs.findProperty('name', 'create_notification').value;
     if (createNotification !== 'yes') return;
-      var predefinedNotificationConfigNames = require('data/HDP2/alert_notification').mapProperty('name'),
+      var predefinedNotificationConfigNames = require('data/configs/alert_notification').mapProperty('name'),
       configsForNotification = this.get('configs').filterProperty('filename', 'alert_notification');
     var properties = {},
       names = [

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/HDP2.2/hive_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2.2/hive_properties.js b/ambari-web/app/data/HDP2.2/hive_properties.js
deleted file mode 100644
index 1cdd5a2..0000000
--- a/ambari-web/app/data/HDP2.2/hive_properties.js
+++ /dev/null
@@ -1,119 +0,0 @@
-/**
- * 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.
- */
-
-var App = require('app');
-
-var hivePropsByCategory = {
-
-  'Performance': [
-    'hive.cbo.enable',
-    'hive.optimize.reducededuplication.min.reducer',
-    'hive.optimize.reducededuplication',
-    'hive.orc.splits.include.file.footer',
-    'hive.merge.mapfiles',
-    'hive.merge.mapredfiles',
-    'hive.merge.tezfiles',
-    'hive.merge.smallfiles.avgsize',
-    'hive.merge.size.per.task',
-    'hive.merge.orcfile.stripe.level',
-    'hive.auto.convert.join',
-    'hive.auto.convert.join.noconditionaltask',
-    'hive.auto.convert.join.noconditionaltask.size',
-    'hive.optimize.bucketmapjoin.sortedmerge',
-    'hive.tez.smb.number.waves',
-    'hive.map.aggr.hash.percentmemory',
-    'hive.map.aggr',
-    'hive.optimize.sort.dynamic.partition',
-    'hive.stats.autogather',
-    'hive.stats.fetch.column.stats',
-    'hive.vectorized.execution.enabled',
-    'hive.vectorized.execution.reduce.enabled',
-    'hive.vectorized.groupby.checkinterval',
-    'hive.vectorized.groupby.flush.percent',
-    'hive.limit.pushdown.memory.usage',
-    'hive.optimize.index.filter',
-    'hive.exec.reducers.bytes.per.reducer',
-    'hive.smbjoin.cache.rows',
-    'hive.exec.orc.default.stripe.size',
-    'hive.fetch.task.conversion',
-    'hive.fetch.task.conversion.threshold',
-    'hive.fetch.task.aggr',
-    'hive.compute.query.using.stats',
-    'hive.tez.auto.reducer.parallelism',
-    'hive.tez.max.partition.factor',
-    'hive.tez.min.partition.factor',
-    'hive.tez.dynamic.partition.pruning',
-    'hive.tez.dynamic.partition.pruning.max.event.size',
-    'hive.tez.dynamic.partition.pruning.max.data.size'
-  ],
-
-  'General': [
-    'hive.exec.pre.hooks',
-    'hive.exec.post.hooks',
-    'hive.exec.failure.hooks',
-    'hive.execution.engine',
-    'hive.exec.dynamic.partition',
-    'hive.exec.dynamic.partition.mode',
-    'hive.exec.max.dynamic.partitions',
-    'hive.exec.max.dynamic.partitions.pernode',
-    'hive.exec.max.created.files',
-    'hive.enforce.bucketing',
-    'datanucleus.cache.level2.type',
-    'hive.metastore.uris',
-    'hive.metastore.warehouse.dir',
-    'hive.exec.parallel.thread.number',
-    'hive.security.authorization.enabled',
-    'hive.security.authorization.manager',
-    'hive.security.metastore.authenticator.manager',
-    'hive.security.metastore.authorization.manager',
-    'hive.server2.authentication',
-    'hive.server2.enable.doAs',
-    'hive.server2.tez.default.queues',
-    'hive.server2.tez.initialize.default.sessions',
-    'hive.server2.tez.sessions.per.default.queue',
-    'hive.server2.thrift.http.path',
-    'hive.server2.thrift.http.port',
-    'hive.server2.thrift.max.worker.threads',
-    'hive.server2.thrift.port',
-    'hive.server2.thrift.sasl.qop',
-    'hive.server2.transport.mode',
-    'hive.server2.use.SSL',
-    'hive.tez.container.size',
-    'hive.tez.java.opts',
-    'hive.tez.log.level',
-    'hive.txn.manager',
-    'hive.txn.timeout',
-    'hive.txn.max.open.batch',
-    'hive.compactor.initiator.on',
-    'hive.compactor.worker.threads',
-    'hive.compactor.worker.timeout',
-    'hive.compactor.check.interval',
-    'hive.compactor.delta.num.threshold',
-    'hive.compactor.delta.pct.threshold'
-  ]
-};
-
-var hiveProps = [];
-
-for (var category in hivePropsByCategory) {
-  hiveProps = hiveProps.concat(App.config.generateConfigPropertiesByName(hivePropsByCategory[category], 
-    { category: category, serviceName: 'HIVE', filename: 'hive-site.xml'}));
-}
-
-module.exports = hiveProps;
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/HDP2.2/site_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2.2/site_properties.js b/ambari-web/app/data/HDP2.2/site_properties.js
deleted file mode 100644
index 03e0615..0000000
--- a/ambari-web/app/data/HDP2.2/site_properties.js
+++ /dev/null
@@ -1,275 +0,0 @@
-/**
- * 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.
- */
-
-var App = require('app');
-
-var hdp22SepcificProperties = [
-  require('data/HDP2.2/yarn_properties'),
-  require('data/HDP2.2/tez_properties'),
-  require('data/HDP2.2/hive_properties')
-].reduce(function(p, c) { return c.concat(p); });
-
-var hdp2properties = require('data/HDP2/site_properties').configProperties;
-var excludedConfigs = [
-  'storm.thrift.transport', //In HDP2.2 storm.thrift.transport property is computed on server
-  'tez.am.container.session.delay-allocation-millis',
-  'tez.am.grouping.max-size',
-  'tez.am.grouping.min-size',
-  'tez.am.grouping.split-waves',
-  'tez.am.java.opts',
-  'tez.runtime.intermediate-input.compress.codec',
-  'tez.runtime.intermediate-input.is-compressed',
-  'tez.runtime.intermediate-output.compress.codec',
-  'tez.runtime.intermediate-output.should-compress',
-  'hive.heapsize'
-];
-var hdp22properties = hdp2properties.filter(function (item) {
-  return !excludedConfigs.contains(item.name);
-});
-
-hdp22properties.push(
-  {
-    "name": "yarn.timeline-service.leveldb-state-store.path",
-    "category": "APP_TIMELINE_SERVER",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  },
-  {
-    "name": "yarn.timeline-service.state-store-class",
-    "category": "APP_TIMELINE_SERVER",
-    "serviceName": "YARN",
-    "filename": "yarn-site.xml"
-  },
-  {
-    "name": "*.falcon.graph.blueprints.graph",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  {
-    "name": "*.falcon.graph.storage.backend",
-    "category": "FalconStartupSite",
-    "serviceName": "FALCON",
-    "filename": "falcon-startup.properties.xml"
-  },
-  /*********RANGER FOR HDFS************/
-  {
-    "name": "XAAUDIT.HDFS.IS_ENABLED",
-    "dependentConfigPattern": "^XAAUDIT.HDFS",
-    "filename": "ranger-hdfs-plugin-properties.xml",
-    "serviceName": "HDFS"
-  },
-  {
-    "name": "ranger-hdfs-plugin-enabled",
-    "filename": "ranger-hdfs-plugin-properties.xml",
-    "serviceName": "HDFS",
-    "index": 1
-  },
-  /*********RANGER FOR HIVE************/
-  {
-    "name": "XAAUDIT.HDFS.IS_ENABLED",
-    "dependentConfigPattern": "^XAAUDIT.HDFS",
-    "filename": "ranger-hive-plugin-properties.xml",
-    "serviceName": "HIVE"
-  },
-  /*********RANGER FOR HBASE************/
-  {
-    "name": "XAAUDIT.HDFS.IS_ENABLED",
-    "dependentConfigPattern": "^XAAUDIT.HDFS",
-    "filename": "ranger-hbase-plugin-properties.xml",
-    "serviceName": "HBASE"
-  },
-  {
-    "name": "ranger-hbase-plugin-enabled",
-    "filename": "ranger-hbase-plugin-properties.xml",
-    "serviceName": "HBASE",
-    "index": 1
-  },
-  /*********RANGER FOR STORM************/
-  {
-    "name": "XAAUDIT.HDFS.IS_ENABLED",
-    "dependentConfigPattern": "^XAAUDIT.HDFS",
-    "filename": "ranger-storm-plugin-properties.xml",
-    "serviceName": "STORM"
-  },
-  {
-    "name": "ranger-storm-plugin-enabled",
-    "filename": "ranger-storm-plugin-properties.xml",
-    "serviceName": "STORM",
-    "index": 1
-  },
-  /*********RANGER FOR KNOX************/
-  {
-    "name": "XAAUDIT.HDFS.IS_ENABLED",
-    "dependentConfigPattern": "^XAAUDIT.HDFS",
-    "filename": "ranger-knox-plugin-properties.xml",
-    "serviceName": "KNOX"
-  },
-  {
-    "name": "ranger-knox-plugin-enabled",
-    "filename": "ranger-knox-plugin-properties.xml",
-    "serviceName": "KNOX",
-    "index": 1
-  },
-  /**********************************************RANGER***************************************/
-  {
-    "name": "ranger_admin_username",
-    "serviceName": "RANGER",
-    "filename": "ranger-env.xml",
-    "category": "RANGER_ADMIN",
-    "index": 0
-  },
-  {
-    "name": "ranger_admin_username",
-    "serviceName": "RANGER",
-    "filename": "ranger-env.xml",
-    "category": "RANGER_ADMIN",
-    "index": 0
-  },
-  {
-    "name": "ranger_admin_password",
-    "serviceName": "RANGER",
-    "filename": "ranger-env.xml",
-    "category": "RANGER_ADMIN",
-    "index": 1
-  },
-  {
-    "name": "SQL_CONNECTOR_JAR",
-    "serviceName": "RANGER",
-    "filename": "admin-properties.xml",
-    "category": "RANGER_ADMIN",
-    "index": 2
-  },
-  {
-    "name": "SQL_COMMAND_INVOKER",
-    "serviceName": "RANGER",
-    "filename": "admin-properties.xml",
-    "category": "DBSettings"
-  },
-  {
-    "name": "policymgr_external_url",
-    "serviceName": "RANGER",
-    "filename": "admin-properties.xml",
-    "category": "RangerSettings"
-  },
-  {
-    "name": "policymgr_http_enabled",
-    "serviceName": "RANGER",
-    "filename": "admin-properties.xml",
-    "category": "RangerSettings"
-  },
-  {
-    "name": "ranger_user",
-    "serviceName": "RANGER",
-    "filename": "ranger-env.xml",
-    "category": "RangerSettings"
-  },
-  {
-    "name": "ranger_group",
-    "serviceName": "RANGER",
-    "filename": "ranger-env.xml",
-    "category": "RangerSettings"
-  },
-  {
-    "name": "authentication_method",
-    "options": [
-      {
-        displayName: 'LDAP',
-        foreignKeys: ['xa_ldap_userDNpattern', 'xa_ldap_groupRoleAttribute', 'xa_ldap_url', 'xa_ldap_groupSearchBase', 'xa_ldap_groupSearchFilter']
-      },
-      {
-        displayName: 'ACTIVE_DIRECTORY',
-        foreignKeys: ['xa_ldap_ad_domain', 'xa_ldap_ad_url']
-      },
-      {
-        displayName: 'UNIX',
-        foreignKeys: ['remoteLoginEnabled', 'authServiceHostName', 'authServicePort']
-      },
-      {
-        displayName: 'NONE'
-      }
-    ],
-    "displayType": "radio button",
-    "radioName": "authentication-method",
-    "serviceName": "RANGER",
-    "filename": "admin-properties.xml",
-    "category": "RangerSettings"
-  },
-  {
-    "name": "remoteLoginEnabled",
-    "serviceName": "RANGER",
-    "filename": "admin-properties.xml",
-    "category": "UnixAuthenticationSettings"
-  },
-  {
-    "name": "authServiceHostName",
-    "serviceName": "RANGER",
-    "filename": "admin-properties.xml",
-    "category": "UnixAuthenticationSettings"
-  },
-  {
-    "name": "authServicePort",
-    "serviceName": "RANGER",
-    "filename": "admin-properties.xml",
-    "category": "UnixAuthenticationSettings"
-  },
-  {
-    "name": "xa_ldap_url",
-    "serviceName": "RANGER",
-    "filename": "admin-properties.xml",
-    "category": "LDAPSettings"
-  },
-  {
-    "name": "xa_ldap_userDNpattern",
-    "serviceName": "RANGER",
-    "filename": "admin-properties.xml",
-    "category": "LDAPSettings"
-  },
-  {
-    "name": "xa_ldap_groupRoleAttribute",
-    "serviceName": "RANGER",
-    "filename": "admin-properties.xml",
-    "category": "LDAPSettings"
-  },
-  {
-    "name": "xa_ldap_ad_domain",
-    "serviceName": "RANGER",
-    "filename": "admin-properties.xml",
-    "category": "ADSettings"
-  },
-  {
-    "name": "xa_ldap_ad_url",
-    "serviceName": "RANGER",
-    "filename": "admin-properties.xml",
-    "category": "ADSettings"
-  }
-);
-
-var additionalProperties = [];
-
-hdp22SepcificProperties.forEach(function (config) {
-  if (!hdp22properties.findProperty('name', config.name)) additionalProperties.push(config);
-  else {
-    hdp22properties.findProperty('name', config.name).category = config.category;
-  }
-});
-
-module.exports =
-{
-  "configProperties": hdp22properties.concat(additionalProperties)
-};

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/HDP2.2/tez_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2.2/tez_properties.js b/ambari-web/app/data/HDP2.2/tez_properties.js
deleted file mode 100644
index 46f18ba..0000000
--- a/ambari-web/app/data/HDP2.2/tez_properties.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * 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.
- */
-var App = require('app');
-
-var tezPropsToCategory = {
-  'General': [
-    'tez.am.launch.cmd-opts',
-    'tez.am.launch.env',
-    'tez.task.resource.memory.mb',
-    'tez.task.launch.cmd-opts',
-    'tez.task.launch.env',
-    'tez.grouping.split-waves',
-    'tez.grouping.min-size',
-    'tez.grouping.max-size',
-    'tez.runtime.compress',
-    'tez.runtime.compress.codec'
-  ]
-};
-
-var tezProps = [];
-
-for (var category in tezPropsToCategory) {
-  tezProps = tezProps.concat(App.config.generateConfigPropertiesByName(tezPropsToCategory[category], 
-    { category: category, serviceName: 'TEZ', filename: 'tez-site.xml'}));
-}
-
-module.exports = tezProps;
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/HDP2.2/yarn_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2.2/yarn_properties.js b/ambari-web/app/data/HDP2.2/yarn_properties.js
deleted file mode 100644
index 6233401..0000000
--- a/ambari-web/app/data/HDP2.2/yarn_properties.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * 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.
- */
-var App = require('app');
-
-var yarnPropsToCategory = {
-
-  'FaultTolerance': [
-    'yarn.nodemanager.recovery.enabled',
-    'yarn.resourcemanager.recovery.enabled',
-    'yarn.resourcemanager.work-preserving-recovery.enabled',
-    'yarn.resourcemanager.zk-address',
-    'yarn.resourcemanager.connect.retry-interval.ms',
-    'yarn.resourcemanager.connect.max-wait.ms',
-    'yarn.resourcemanager.ha.enabled'
-  ],
-
-  'Isolation': [
-    'yarn.nodemanager.linux-container-executor.group',
-    'yarn.nodemanager.container-executor.class',
-    'yarn.nodemanager.linux-container-executor.resources-handler.class',
-    'yarn.nodemanager.linux-container-executor.cgroups.hierarchy',
-    'yarn.nodemanager.linux-container-executor.cgroups.mount',
-    'yarn.nodemanager.linux-container-executor.cgroups.strict-resource-usage'
-  ],
-
-  'CapacityScheduler': [
-    'yarn.nodemanager.resource.cpu-vcores',
-    'yarn.nodemanager.resource.percentage-physical-cpu-limit'
-  ]
-};
-
-var yarnProps = [];
-
-for (var category in yarnPropsToCategory) {
-  yarnProps = yarnProps.concat(App.config.generateConfigPropertiesByName(yarnPropsToCategory[category],
-    { category: category, serviceName: 'YARN', filename: 'yarn-site.xml'}));
-}
-
-module.exports = yarnProps;

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/HDP2.3/hawq_activate_standby_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2.3/hawq_activate_standby_properties.js b/ambari-web/app/data/HDP2.3/hawq_activate_standby_properties.js
deleted file mode 100644
index a06009f..0000000
--- a/ambari-web/app/data/HDP2.3/hawq_activate_standby_properties.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * 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.
- */
-
-module.exports =
-{
-  "haConfig": {
-    serviceName: 'MISC',
-    displayName: 'MISC',
-    configCategories: [
-      App.ServiceConfigCategory.create({name: 'HAWQ', displayName: 'HAWQ'}),
-    ],
-    sites: ['hawq-site'],
-    configs: [
-    /**********************************************HAWQ***************************************/
-      {
-        "name": "hawq_master_address_host",
-        "displayName": "HAWQ Master Host",
-        "isReconfigurable": false,
-        "recommendedValue": "",
-        "isOverridable": false,
-        "value": "",
-        "category": "HAWQ",
-        "filename": "hawq-site",
-        serviceName: 'MISC'
-      }
-    ]
-  }
-};

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/HDP2.3/hawq_ha_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2.3/hawq_ha_properties.js b/ambari-web/app/data/HDP2.3/hawq_ha_properties.js
deleted file mode 100644
index 62deba3..0000000
--- a/ambari-web/app/data/HDP2.3/hawq_ha_properties.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * 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.
- */
-
-module.exports =
-{
-  "haConfig": {
-    serviceName: 'MISC',
-    displayName: 'MISC',
-    configCategories: [
-      App.ServiceConfigCategory.create({name: 'HAWQ', displayName: 'HAWQ'}),
-    ],
-    sites: ['hawq-site'],
-    configs: [
-    /**********************************************HAWQ***************************************/
-      {
-        "name": "hawq_standby_address_host",
-        "displayName": "HAWQ Standby Master",
-        "isReconfigurable": false,
-        "recommendedValue": "",
-        "isOverridable": false,
-        "value": "",
-        "category": "HAWQ",
-        "filename": "hawq-site",
-        serviceName: 'MISC'
-      },
-    ]
-  }
-};

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/HDP2.3/site_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2.3/site_properties.js b/ambari-web/app/data/HDP2.3/site_properties.js
deleted file mode 100644
index 2dadd1b..0000000
--- a/ambari-web/app/data/HDP2.3/site_properties.js
+++ /dev/null
@@ -1,373 +0,0 @@
-/**
- * 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.
- */
-
-var App = require('app');
-
-var hdp22properties = require('data/HDP2.2/site_properties').configProperties;
-
-var excludedConfigs = [
-  'nimbus.host',
-  'XAAUDIT.DB.IS_ENABLED',
-  'XAAUDIT.HDFS.IS_ENABLED',
-  'UPDATE_XAPOLICIES_ON_GRANT_REVOKE',
-  'authServiceHostName',
-  'authServicePort',
-  'authentication_method',
-  'remoteLoginEnabled',
-  'xa_ldap_url',
-  'xa_ldap_userDNpattern',
-  'xa_ldap_groupSearchBase',
-  'xa_ldap_groupSearchFilter',
-  'xa_ldap_groupRoleAttribute',
-  'ranger.ldap.base.dn',
-  'ranger.ldap.bind.dn',
-  'ranger.ldap.bind.password',
-  'ranger.ldap.referral',
-  'xa_ldap_userSearchFilter',
-  'xa_ldap_ad_domain',
-  'xa_ldap_ad_url',
-  'ranger.ldap.ad.base.dn',
-  'ranger.ldap.ad.bind.dn',
-  'ranger.ldap.ad.bind.password',
-  'ranger.ldap.ad.referral',
-  'xa_ldap_ad_userSearchFilter',
-  'policymgr_http_enabled',
-  'policymgr_external_url',
-  'hbase.regionserver.global.memstore.lowerLimit',
-  'hbase.regionserver.global.memstore.upperLimit',
-  "port",
-  "hive.metastore.heapsize",
-  "hive.client.heapsize",
-  "SQL_COMMAND_INVOKER",
-  "SYNC_LDAP_USER_SEARCH_FILTER"
-];
-
-var hdp23properties = hdp22properties.filter(function (item) {
-  return !excludedConfigs.contains(item.name);
-});
-
-hdp23properties.push({
-  /**************************************** RANGER - HDFS Plugin ***************************************/
-
-    "name": "ranger-yarn-plugin-enabled",
-    "filename": "ranger-yarn-plugin-properties.xml",
-    "serviceName": "YARN",
-    "index": 1
-  },
-  {
-    "name": "ranger-kafka-plugin-enabled",
-    "filename": "ranger-kafka-plugin-properties.xml",
-    "serviceName": "KAFKA",
-    "index": 1
-  },
-  {
-    "name": "nimbus.seeds",
-    "serviceName": "STORM",
-    "filename": "storm-site.xml",
-    "category": "NIMBUS"
-  },
-  {
-    "name": "ranger.externalurl",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "RangerSettings"
-  },
-  {
-    "name": "ranger.service.http.enabled",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "RangerSettings"
-  },
-  {
-    "name": "ranger.authentication.method",
-    "options": [
-      {
-        displayName: 'LDAP',
-        foreignKeys: ['ranger.ldap.group.roleattribute', 'ranger.ldap.url', 'ranger.ldap.user.dnpattern','ranger.ldap.base.dn','ranger.ldap.bind.dn','ranger.ldap.bind.password','ranger.ldap.referral','ranger.ldap.user.searchfilter']
-      },
-      {
-        displayName: 'ACTIVE_DIRECTORY',
-        foreignKeys: ['ranger.ldap.ad.domain','ranger.ldap.ad.url','ranger.ldap.ad.base.dn','ranger.ldap.ad.bind.dn','ranger.ldap.ad.bind.password','ranger.ldap.ad.referral','ranger.ldap.ad.user.searchfilter']
-      },
-      {
-         displayName: 'PAM'
-      },
-      {
-        displayName: 'UNIX',
-        foreignKeys: ['ranger.unixauth.service.port', 'ranger.unixauth.service.hostname', 'ranger.unixauth.remote.login.enabled']
-      },
-      {
-        displayName: 'NONE'
-      }
-    ],
-    "displayType": "radio button",
-    "radioName": "authentication-method",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "RangerSettings"
-  },
-  {
-    "name": "policymgr_external_url",
-    "serviceName": "RANGER",
-    "filename": "admin-properties.xml",
-    "category": "RangerSettings"
-  },
-  {
-    "name": "ranger.unixauth.remote.login.enabled",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "UnixAuthenticationSettings"
-  },
-  {
-    "name": "ranger.unixauth.service.hostname",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "UnixAuthenticationSettings"
-  },
-  {
-    "name": "ranger.unixauth.service.port",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "UnixAuthenticationSettings"
-  },
-  {
-    "name": "ranger.ldap.url",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "LDAPSettings"
-  },
-  {
-    "name": "ranger.ldap.user.dnpattern",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "LDAPSettings"
-  },
-  {
-    "name": "ranger.ldap.group.roleattribute",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "LDAPSettings"
-  },
-  {
-    "name": "ranger.ldap.base.dn",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "LDAPSettings"
-  },
-  {
-    "name": "ranger.ldap.bind.dn",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "LDAPSettings"
-  },
-  {
-    "name": "ranger.ldap.bind.password",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "LDAPSettings"
-  },
-  {
-    "name": "ranger.ldap.referral",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "LDAPSettings"
-  },
-  {
-    "name": "ranger.ldap.user.searchfilter",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "LDAPSettings"
-  },
-  {
-    "name": "ranger.sso.providerurl",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "KnoxSSOSettings",
-    "index": 2
-  },
-  {
-    "name": "ranger.sso.publicKey",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "KnoxSSOSettings",
-    "index": 3
-  },
-  {
-    "name": "ranger.sso.cookiename",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "KnoxSSOSettings"
-  },
-  {
-    "name": "ranger.sso.enabled",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "KnoxSSOSettings",
-    "index": 1
-  },
-  {
-    "name": "ranger.sso.query.param.originalurl",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "KnoxSSOSettings"
-  },
-  {
-    "name": "ranger.sso.browser.useragent",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "KnoxSSOSettings"
-  },
-  {
-    "name": "ranger.ldap.ad.domain",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "ADSettings"
-  },
-  {
-    "name": "ranger.ldap.ad.url",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "ADSettings"
-  },
-  {
-    "name": "ranger.ldap.ad.base.dn",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "ADSettings"
-  },
-  {
-    "name": "ranger.ldap.ad.bind.dn",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "ADSettings"
-  },
-  {
-    "name": "ranger.ldap.ad.bind.password",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "ADSettings"
-  },
-  {
-    "name": "ranger.ldap.ad.referral",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "ADSettings"
-  },
-  {
-    "name": "ranger.ldap.ad.user.searchfilter",
-    "serviceName": "RANGER",
-    "filename": "ranger-admin-site.xml",
-    "category": "ADSettings"
-  },
-  /*********************************************** HAWQ **********************************************/
-  {
-    "name": "hawq_master_address_host",
-    "filename": "hawq-site.xml",
-    "category": "General",
-    "serviceName": "HAWQ",
-    "index": 0
-  },
-  {
-    "name": "hawq_standby_address_host",
-    "filename": "hawq-site.xml",
-    "category": "General",
-    "serviceName": "HAWQ",
-    "index": 1
-  },
-  {
-    "name": "hawq_master_address_port",
-    "filename": "hawq-site.xml",
-    "category": "General",
-    "serviceName": "HAWQ",
-    "index": 2
-  },
-  {
-    "name": "hawq_segment_address_port",
-    "filename": "hawq-site.xml",
-    "category": "General",
-    "serviceName": "HAWQ",
-    "index": 3
-  },
-  {
-    "name": "hawq_dfs_url",
-    "filename": "hawq-site.xml",
-    "category": "General",
-    "serviceName": "HAWQ",
-    "index": 4
-  },
-  {
-    "name": "hawq_master_directory",
-    "filename": "hawq-site.xml",
-    "category": "General",
-    "serviceName": "HAWQ",
-    "index": 5
-  },
-  {
-    "name": "hawq_master_temp_directory",
-    "filename": "hawq-site.xml",
-    "category": "General",
-    "serviceName": "HAWQ",
-    "index": 6
-  },
-  {
-    "name": "hawq_segment_directory",
-    "filename": "hawq-site.xml",
-    "category": "General",
-    "serviceName": "HAWQ",
-    "index": 7
-  },
-  {
-    "name": "hawq_segment_temp_directory",
-    "filename": "hawq-site.xml",
-    "category": "General",
-    "serviceName": "HAWQ",
-    "index": 8
-  },
-  {
-    "name": "default_segment_num",
-    "filename": "hawq-site.xml",
-    "category": "General",
-    "serviceName": "HAWQ",
-    "index": 9
-  },
-  {
-    "name": "hawq_ssh_exkeys",
-    "filename": "hawq-env.xml",
-    "category": "General",
-    "serviceName": "HAWQ",
-    "index": 10
-  },
-  {
-    "name": "hawq_password",
-    "filename": "hawq-env.xml",
-    "category": "General",
-    "serviceName": "HAWQ",
-    "index": 11
-  },
-  {
-    "name": "content",
-    "serviceName": "HAWQ",
-    "filename": "hawq-check-env.xml",
-    "category": "AdvancedHawqCheck"
-  }
-);
-
-module.exports =
-{
-  "configProperties": hdp23properties
-};

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/HDP2/alert_notification.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2/alert_notification.js b/ambari-web/app/data/HDP2/alert_notification.js
deleted file mode 100644
index aba7436..0000000
--- a/ambari-web/app/data/HDP2/alert_notification.js
+++ /dev/null
@@ -1,145 +0,0 @@
-/**
- * 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.
- */
-
-/**
- * Alert Notification Properties
- */
-module.exports = [
-  {
-    "name": "create_notification",
-    "displayName": "Create Notification",
-    "isOverridable": false,
-    "isVisible": false,
-    "serviceName": "MISC",
-    "category": "Notifications",
-    "recommendedValue": "no",
-    "filename": "alert_notification"
-  },
-  {
-    "name": "mail.smtp.host",
-    "displayName": "SMTP Host",
-    "displayType": "host",
-    "isRequired": false,
-    "isReconfigurable": true,
-    "isOverridable": false,
-    "isVisible": true,
-    "serviceName": "MISC",
-    "category": "Notifications",
-    "rowStyleClass": "indent-1",
-    "filename": "alert_notification"
-  },
-  {
-    "name": "mail.smtp.port",
-    "displayName": "SMTP Port",
-    "displayType": "int",
-    "isRequired": false,
-    "isReconfigurable": true,
-    "isOverridable": false,
-    "isVisible": true,
-    "serviceName": "MISC",
-    "category": "Notifications",
-    "rowStyleClass": "indent-1",
-    "filename": "alert_notification"
-  },
-  {
-    "name": "mail.smtp.from",
-    "displayName": "FROM Email Address",
-    "displayType": "email",
-    "isRequired": false,
-    "isReconfigurable": true,
-    "isOverridable": false,
-    "isVisible": true,
-    "serviceName": "MISC",
-    "category": "Notifications",
-    "rowStyleClass": "indent-1",
-    "filename": "alert_notification"
-  },
-  {
-    "name": "ambari.dispatch.recipients",
-    "displayName": " TO Email Address",
-    "displayType": "email",
-    "isRequired": false,
-    "isReconfigurable": true,
-    "isOverridable": false,
-    "isVisible": true,
-    "serviceName": "MISC",
-    "category": "Notifications",
-    "rowStyleClass": "indent-1",
-    "filename": "alert_notification"
-  },
-  {
-    "name": "smtp_use_auth",
-    "displayName": "SMTP server requires authentication",
-    "displayType": "checkbox",
-    "isRequired": false,
-    "isReconfigurable": true,
-    "isOverridable": false,
-    "recommendedValue": true,
-    "isVisible": true,
-    "serviceName": "MISC",
-    "category": "Notifications",
-    "rowStyleClass": "indent-1",
-    "filename": "alert_notification"
-  },
-  {
-    "name": "ambari.dispatch.credential.username",
-    "displayName": "SMTP Username",
-    "isRequired": false,
-    "isReconfigurable": true,
-    "isOverridable": false,
-    "isVisible": true,
-    "serviceName": "MISC",
-    "category": "Notifications",
-    "rowStyleClass": "indent-2",
-    "filename": "alert_notification"
-  },
-  {
-    "name": "ambari.dispatch.credential.password",
-    "displayName": "SMTP Password",
-    "isRequired": false,
-    "isReconfigurable": true,
-    "isOverridable": false,
-    "isVisible": true,
-    "serviceName": "MISC",
-    "category": "Notifications",
-    "rowStyleClass": "indent-2",
-    "filename": "alert_notification"
-  },
-  {
-    "name": "mail.smtp.starttls.enable",
-    "isRequired": false,
-    "isReconfigurable": true,
-    "isOverridable": false,
-    "isVisible": false,
-    "serviceName": "MISC",
-    "category": "Notifications",
-    "rowStyleClass": "indent-1",
-    "filename": "alert_notification"
-  },
-  {
-    "name": "mail.smtp.startssl.enable",
-    "isRequired": false,
-    "isReconfigurable": true,
-    "isOverridable": false,
-    "isVisible": false,
-    "serviceName": "MISC",
-    "category": "Notifications",
-    "rowStyleClass": "indent-1",
-    "filename": "alert_notification"
-  }
-];

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/HDP2/gluster_fs_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2/gluster_fs_properties.js b/ambari-web/app/data/HDP2/gluster_fs_properties.js
deleted file mode 100644
index 5cec5f1..0000000
--- a/ambari-web/app/data/HDP2/gluster_fs_properties.js
+++ /dev/null
@@ -1,94 +0,0 @@
-/**
- * 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.
- */
-
-module.exports = [
-/**********************************************GLUSTERFS***************************************/
-  {
-    "name": "fs.glusterfs.impl",
-    "filename": "core-site.xml",
-    "serviceName": "GLUSTERFS",
-    "category": "General"
-  },
-  {
-    "name": "fs.AbstractFileSystem.glusterfs.impl",
-    "filename": "core-site.xml",
-    "serviceName": "GLUSTERFS",
-    "category": "General"
-  },
-  {
-    "name": "hadoop_heapsize",
-    "serviceName": "GLUSTERFS",
-    "filename": "hadoop-env.xml",
-    "category": "General Hadoop",
-    "index": 1
-  },
-  {
-    "name": "hdfs_log_dir_prefix",
-    "serviceName": "GLUSTERFS",
-    "filename": "hadoop-env.xml",
-    "category": "General Hadoop"
-  },
-  {
-    "name": "hadoop_pid_dir_prefix",
-    "serviceName": "GLUSTERFS",
-    "filename": "hadoop-env.xml",
-    "category": "General Hadoop"
-  },
-  {
-    "name": "namenode_heapsize",
-    "serviceName": "GLUSTERFS",
-    "filename": "hadoop-env.xml",
-    "category": "General Hadoop"
-  },
-  {
-    "name": "namenode_opt_newsize",
-    "serviceName": "GLUSTERFS",
-    "filename": "hadoop-env.xml",
-    "category": "General Hadoop"
-  },
-  {
-    "name": "namenode_opt_maxnewsize",
-    "serviceName": "GLUSTERFS",
-    "filename": "hadoop-env.xml",
-    "category": "General Hadoop"
-  },
-  {
-    "name": "namenode_opt_permsize",
-    "serviceName": "GLUSTERFS",
-    "filename": "hadoop-env.xml",
-    "category": "General Hadoop"
-  },
-  {
-    "name": "namenode_opt_maxpermsize",
-    "serviceName": "GLUSTERFS",
-    "filename": "hadoop-env.xml",
-    "category": "General Hadoop"
-  },
-  {
-    "name": "dtnode_heapsize",
-    "serviceName": "GLUSTERFS",
-    "filename": "hadoop-env.xml",
-    "category": "General Hadoop"
-  },
-  {
-    "name": "glusterfs_user",
-    "serviceName": "GLUSTERFS",
-    "filename": "hadoop-env.xml",
-    "category": "General Hadoop"
-  }
-];
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/HDP2/ha_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2/ha_properties.js b/ambari-web/app/data/HDP2/ha_properties.js
deleted file mode 100644
index 0275371..0000000
--- a/ambari-web/app/data/HDP2/ha_properties.js
+++ /dev/null
@@ -1,538 +0,0 @@
-/**
- * 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.
- */
-
-module.exports =
-{
-  "haConfig": {
-    serviceName: 'MISC',
-    displayName: 'MISC',
-    configCategories: [
-      App.ServiceConfigCategory.create({ name: 'HDFS', displayName: 'HDFS'}),
-      App.ServiceConfigCategory.create({ name: 'HBASE', displayName: 'HBase'}),
-      App.ServiceConfigCategory.create({ name: 'ACCUMULO', displayName: 'Accumulo'}),
-      App.ServiceConfigCategory.create({ name: 'AMBARI_METRICS', displayName: 'Ambari Metrics'}),
-      App.ServiceConfigCategory.create({ name: 'HAWQ', displayName: 'HAWQ'}), 
-      App.ServiceConfigCategory.create({ name: 'RANGER', displayName: 'Ranger'})
-    ],
-    sites: ['core-site', 'hdfs-site', 'hbase-site', 'accumulo-site', 'ams-hbase-site', 'hawq-site', 'hdfs-client', 'ranger-env', 'ranger-knox-plugin-properties', 'ranger-kms-audit', 'ranger-storm-plugin-properties', 'ranger-hbase-plugin-properties', 'ranger-hdfs-plugin-properties', 'ranger-hive-plugin-properties', 'ranger-kafka-audit', 'ranger-knox-audit', 'ranger-hdfs-audit', 'ranger-hive-audit', 'ranger-atlas-audit', 'ranger-storm-audit', 'ranger-hbase-audit', 'ranger-yarn-audit'],
-    configs: [
-    /**********************************************HDFS***************************************/
-      {
-        "name": "dfs.journalnode.edits.dir",
-        "displayName": "dfs.journalnode.edits.dir",
-        "description": "The Directory where the JournalNode will store its local state.",
-        "isReconfigurable": true,
-        "recommendedValue": "/hadoop/hdfs/journal",
-        "value": "/hadoop/hdfs/journal",
-        "displayType": "directory",
-        "category": "HDFS",
-        "filename": "hdfs-site",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "fs.defaultFS",
-        "displayName": "fs.defaultFS",
-        "description": "The default path prefix used by the Hadoop FS client when none is given.",
-        "recommendedValue": "hdfs://haCluster",
-        "isReconfigurable": false,
-        "value": "hdfs://haCluster",
-        "category": "HDFS",
-        "filename": "core-site",
-        serviceName: 'MISC'
-      },
-      {
-        "name": "ha.zookeeper.quorum",
-        "displayName": "ha.zookeeper.quorum",
-        "isReconfigurable": false,
-        "description": "This lists the host-port pairs running the ZooKeeper service.",
-        "recommendedValue": "zk1.example.com:2181,zk2.example.com:2181,zk3.example.com:2181",
-        "value": "zk1.example.com:2181,zk2.example.com:2181,zk3.example.com:2181",
-        "category": "HDFS",
-        "filename": "core-site",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "dfs.nameservices",
-        "displayName": "dfs.nameservices",
-        "description": "Comma-separated list of nameservices.",
-        "isReconfigurable": false,
-        "recommendedValue": "haCluster",
-        "value": "haCluster",
-        "category": "HDFS",
-        "filename": "hdfs-site",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "dfs.internal.nameservices",
-        "displayName": "dfs.internal.nameservices",
-        "description": "Comma-separated list of nameservices.",
-        "isReconfigurable": false,
-        "recommendedValue": "haCluster",
-        "value": "haCluster",
-        "category": "HDFS",
-        "filename": "hdfs-site",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "dfs.ha.namenodes.${dfs.nameservices}",
-        "displayName": "dfs.ha.namenodes.${dfs.nameservices}",
-        "description": "The prefix for a given nameservice, contains a comma-separated list of namenodes for a given nameservice.",
-        "isReconfigurable": false,
-        "recommendedValue": "nn1,nn2",
-        "value": "nn1,nn2",
-        "category": "HDFS",
-        "filename": "hdfs-site",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "dfs.namenode.rpc-address.${dfs.nameservices}.nn1",
-        "displayName": "dfs.namenode.rpc-address.${dfs.nameservices}.nn1",
-        "description": "RPC address that handles all clients requests for nn1.",
-        "isReconfigurable": false,
-        "recommendedValue": "0.0.0.0:8020",
-        "value": "0.0.0.0:8020",
-        "category": "HDFS",
-        "filename": "hdfs-site",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "dfs.namenode.rpc-address.${dfs.nameservices}.nn2",
-        "displayName": "dfs.namenode.rpc-address.${dfs.nameservices}.nn2",
-        "description": "RPC address that handles all clients requests for nn2.",
-        "isReconfigurable": false,
-        "recommendedValue": "0.0.0.0:8020",
-        "value": "0.0.0.0:8020",
-        "category": "HDFS",
-        "filename": "hdfs-site",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "dfs.namenode.http-address.${dfs.nameservices}.nn1",
-        "displayName": "dfs.namenode.http-address.${dfs.nameservices}.nn1",
-        "description": "The fully-qualified HTTP address for nn1 NameNode.",
-        "isReconfigurable": false,
-        "recommendedValue": "0.0.0.0:50070",
-        "value": "0.0.0.0:50070",
-        "category": "HDFS",
-        "filename": "hdfs-site",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "dfs.namenode.http-address.${dfs.nameservices}.nn2",
-        "displayName": "dfs.namenode.http-address.${dfs.nameservices}.nn2",
-        "description": "The fully-qualified HTTP address for nn2 NameNode.",
-        "isReconfigurable": false,
-        "recommendedValue": "0.0.0.0:50070",
-        "value": "0.0.0.0:50070",
-        "category": "HDFS",
-        "filename": "hdfs-site",
-        serviceName: 'MISC'
-      },
-      {
-        "name": "dfs.namenode.https-address.${dfs.nameservices}.nn1",
-        "displayName": "dfs.namenode.https-address.${dfs.nameservices}.nn1",
-        "description": "The fully-qualified HTTP address for nn1 NameNode.",
-        "isReconfigurable": false,
-        "recommendedValue": "0.0.0.0:50470",
-        "value": "0.0.0.0:50470",
-        "category": "HDFS",
-        "filename": "hdfs-site",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "dfs.namenode.https-address.${dfs.nameservices}.nn2",
-        "displayName": "dfs.namenode.https-address.${dfs.nameservices}.nn2",
-        "description": "The fully-qualified HTTP address for nn2 NameNode.",
-        "isReconfigurable": false,
-        "recommendedValue": "0.0.0.0:50470",
-        "value": "0.0.0.0:50470",
-        "category": "HDFS",
-        "filename": "hdfs-site",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "dfs.client.failover.proxy.provider.${dfs.nameservices}",
-        "displayName": "dfs.client.failover.proxy.provider.${dfs.nameservices}",
-        "description": "The Java class that HDFS clients use to contact the Active NameNode.",
-        "recommendedValue": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider",
-        "isReconfigurable": false,
-        "value": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider",
-        "category": "HDFS",
-        "filename": "hdfs-site",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "dfs.namenode.shared.edits.dir",
-        "displayName": "dfs.namenode.shared.edits.dir",
-        "description": " The URI which identifies the group of JNs where the NameNodes will write/read edits.",
-        "isReconfigurable": false,
-        "recommendedValue": "qjournal://node1.example.com:8485;node2.example.com:8485;node3.example.com:8485/mycluster",
-        "value": "qjournal://node1.example.com:8485;node2.example.com:8485;node3.example.com:8485/mycluster",
-        "category": "HDFS",
-        "filename": "hdfs-site",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "dfs.ha.fencing.methods",
-        "displayName": "dfs.ha.fencing.methods",
-        "description": "A list of scripts or Java classes which will be used to fence the Active NameNode during a failover.",
-        "isReconfigurable": false,
-        "recommendedValue": "shell(/bin/true)",
-        "displayType": "multiLine",
-        "value": "shell(/bin/true)",
-        "category": "HDFS",
-        "filename": "hdfs-site",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "dfs.ha.automatic-failover.enabled",
-        "displayName": "dfs.ha.automatic-failover.enabled",
-        "description": "Enable Automatic failover.",
-        "isReconfigurable": false,
-        "recommendedValue": true,
-        "value": true,
-        "displayType": "checkbox",
-        "category": "HDFS",
-        "filename": "hdfs-site",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "dfs.namenode.safemode.threshold-pct",
-        "displayName": "dfs.namenode.safemode.threshold-pct",
-        "description": "Specifies the percentage of blocks that should satisfy\n        the minimal replication requirement defined by dfs.namenode.replication.min.\n        Values less than or equal to 0 mean not to start in safe mode.\n        Values greater than 1 will make safe mode permanent.\n ",
-        "isReconfigurable": false,
-        "recommendedValue": "0.99f",
-        "value": "0.99f",
-        "category": "HDFS",
-        "filename": "hdfs-site",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "hbase.rootdir",
-        "displayName": "hbase.rootdir",
-        "description": "The directory shared by region servers and into which HBase persists.",
-        "isReconfigurable": false,
-        "recommendedValue": "/hadoop/hdfs/journal",
-        "value": "/hadoop/hdfs/journal",
-        "category": "HBASE",
-        "filename": "hbase-site",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "instance.volumes",
-        "displayName": "instance.volumes",
-        "isReconfigurable": false,
-        "recommendedValue": "/hadoop/hdfs/journal",
-        "value": "/hadoop/hdfs/journal",
-        "category": "ACCUMULO",
-        "filename": "accumulo-site",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "instance.volumes.replacements",
-        "displayName": "instance.volumes.replacements",
-        "isReconfigurable": false,
-        "recommendedValue": "/hadoop/hdfs/journal",
-        "value": "/hadoop/hdfs/journal",
-        "category": "ACCUMULO",
-        "filename": "accumulo-site",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "hbase.rootdir",
-        "displayName": "hbase.rootdir",
-        "description": "Ambari Metrics service uses HBase as default storage backend. Set the rootdir for HBase to either local filesystem path if using Ambari Metrics in embedded mode or to a HDFS dir, example: hdfs://namenode.example.org:8020/amshbase.",
-        "isReconfigurable": false,
-        "recommendedValue": "file:///var/lib/ambari-metrics-collector/hbase",
-        "value": "file:///var/lib/ambari-metrics-collector/hbase",
-        "category": "AMBARI_METRICS",
-        "isVisible": false,
-        "filename": "ams-hbase-site",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "xasecure.audit.destination.hdfs.dir",
-        "displayName": "Destination HDFS Directory",
-        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
-        "isReconfigurable": false,
-        "recommendedValue": "hdfs://haCluster",
-        "value": "hdfs://haCluster",
-        "category": "RANGER",
-        "filename": "ranger-env",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "xasecure.audit.destination.hdfs.dir",
-        "displayName": "Destination HDFS Directory",
-        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
-        "isReconfigurable": false,
-        "recommendedValue": "hdfs://haCluster",
-        "value": "hdfs://haCluster",
-        "category": "HDFS",
-        "filename": "ranger-hdfs-audit",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "xasecure.audit.destination.hdfs.dir",
-        "displayName": "Destination HDFS Directory",
-        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
-        "isReconfigurable": false,
-        "recommendedValue": "hdfs://haCluster",
-        "value": "hdfs://haCluster",
-        "category": "HDFS",
-        "isVisible": false,
-        "filename": "ranger-hdfs-plugin-properties",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "xasecure.audit.destination.hdfs.dir",
-        "displayName": "Destination HDFS Directory",
-        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
-        "isReconfigurable": false,
-        "recommendedValue": "hdfs://haCluster",
-        "value": "hdfs://haCluster",
-        "category": "KAFKA",
-        "isVisible": false,
-        "filename": "ranger-kafka-audit",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "xasecure.audit.destination.hdfs.dir",
-        "displayName": "Destination HDFS Directory",
-        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
-        "isReconfigurable": false,
-        "recommendedValue": "hdfs://haCluster",
-        "value": "hdfs://haCluster",
-        "category": "KNOX",
-        "isVisible": false,
-        "filename": "ranger-knox-plugin-properties",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "xasecure.audit.destination.hdfs.dir",
-        "displayName": "Destination HDFS Directory",
-        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
-        "isReconfigurable": false,
-        "recommendedValue": "hdfs://haCluster",
-        "value": "hdfs://haCluster",
-        "category": "RANGER_KMS",
-        "isVisible": false,
-        "filename": "ranger-kms-audit",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "xasecure.audit.destination.hdfs.dir",
-        "displayName": "Destination HDFS Directory",
-        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
-        "isReconfigurable": false,
-        "recommendedValue": "hdfs://haCluster",
-        "value": "hdfs://haCluster",
-        "category": "STORM",
-        "isVisible": false,
-        "filename": "ranger-storm-audit",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "xasecure.audit.destination.hdfs.dir",
-        "displayName": "Destination HDFS Directory",
-        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
-        "isReconfigurable": false,
-        "recommendedValue": "hdfs://haCluster",
-        "value": "hdfs://haCluster",
-        "category": "STORM",
-        "isVisible": false,
-        "filename": "ranger-storm-plugin-properties",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "xasecure.audit.destination.hdfs.dir",
-        "displayName": "Destination HDFS Directory",
-        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
-        "isReconfigurable": false,
-        "recommendedValue": "hdfs://haCluster",
-        "value": "hdfs://haCluster",
-        "category": "HBASE",
-        "isVisible": false,
-        "filename": "ranger-hbase-plugin-properties",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "xasecure.audit.destination.hdfs.dir",
-        "displayName": "Destination HDFS Directory",
-        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
-        "isReconfigurable": false,
-        "recommendedValue": "hdfs://haCluster",
-        "value": "hdfs://haCluster",
-        "category": "HIVE",
-        "isVisible": false,
-        "filename": "ranger-hive-plugin-properties",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "xasecure.audit.destination.hdfs.dir",
-        "displayName": "Destination HDFS Directory",
-        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
-        "isReconfigurable": false,
-        "recommendedValue": "hdfs://haCluster",
-        "value": "hdfs://haCluster",
-        "category": "HBASE",
-        "isVisible": false,
-        "filename": "ranger-hbase-audit",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "xasecure.audit.destination.hdfs.dir",
-        "displayName": "Destination HDFS Directory",
-        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
-        "isReconfigurable": false,
-        "recommendedValue": "hdfs://haCluster",
-        "value": "hdfs://haCluster",
-        "category": "KNOX",
-        "isVisible": false,
-        "filename": "ranger-knox-audit",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "xasecure.audit.destination.hdfs.dir",
-        "displayName": "Destination HDFS Directory",
-        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
-        "isReconfigurable": false,
-        "recommendedValue": "hdfs://haCluster",
-        "value": "hdfs://haCluster",
-        "category": "HIVE",
-        "isVisible": false,
-        "filename": "ranger-hive-audit",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "xasecure.audit.destination.hdfs.dir",
-        "displayName": "Destination HDFS Directory",
-        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
-        "isReconfigurable": false,
-        "recommendedValue": "hdfs://haCluster",
-        "value": "hdfs://haCluster",
-        "category": "YARN",
-        "isVisible": false,
-        "filename": "ranger-yarn-audit",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "xasecure.audit.destination.hdfs.dir",
-        "displayName": "Destination HDFS Directory",
-        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
-        "isReconfigurable": false,
-        "recommendedValue": "hdfs://haCluster",
-        "value": "hdfs://haCluster",
-        "category": "ATLAS",
-        "isVisible": false,
-        "filename": "ranger-atlas-audit",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "xasecure.audit.destination.hdfs.dir",
-        "displayName": "Destination HDFS Directory",
-        "description": "HDFS folder to write audit to, make sure all service user has required permissions. This property is overridable at service level.",
-        "isReconfigurable": false,
-        "recommendedValue": "hdfs://haCluster",
-        "value": "hdfs://haCluster",
-        "category": "RANGER_KMS",
-        "isVisible": false,
-        "filename": "ranger-kms-audit",
-        "serviceName": 'MISC'
-      },
-    /**********************************************HAWQ***************************************/
-      {
-        "name": "hawq_dfs_url",
-        "displayName": "hawq_dfs_url",
-        "description": "URL for Accessing HDFS",
-        "isReconfigurable": false,
-        "recommendedValue": "haCluster/hawq_data",
-        "value": "haCluster/hawq_data",
-        "category": "HAWQ",
-        "filename": "hawq-site",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "dfs.nameservices",
-        "displayName": "dfs.nameservices",
-        "description": "Comma-separated list of nameservices.",
-        "isReconfigurable": false,
-        "recommendedValue": "haCluster",
-        "value": "haCluster",
-        "category": "HAWQ",
-        "filename": "hdfs-client",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "dfs.ha.namenodes.${dfs.nameservices}",
-        "displayName": "dfs.ha.namenodes.${dfs.nameservices}",
-        "description": "The prefix for a given nameservice, contains a comma-separated list of namenodes for a given nameservice.",
-        "isReconfigurable": false,
-        "recommendedValue": "nn1,nn2",
-        "value": "nn1,nn2",
-        "category": "HAWQ",
-        "filename": "hdfs-client",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "dfs.namenode.rpc-address.${dfs.nameservices}.nn1",
-        "displayName": "dfs.namenode.rpc-address.${dfs.nameservices}.nn1",
-        "description": "RPC address that handles all clients requests for nn1.",
-        "isReconfigurable": false,
-        "recommendedValue": "0.0.0.0:8020",
-        "value": "0.0.0.0:8020",
-        "category": "HAWQ",
-        "filename": "hdfs-client",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "dfs.namenode.rpc-address.${dfs.nameservices}.nn2",
-        "displayName": "dfs.namenode.rpc-address.${dfs.nameservices}.nn2",
-        "description": "RPC address that handles all clients requests for nn2.",
-        "isReconfigurable": false,
-        "recommendedValue": "0.0.0.0:8020",
-        "value": "0.0.0.0:8020",
-        "category": "HAWQ",
-        "filename": "hdfs-client",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "dfs.namenode.http-address.${dfs.nameservices}.nn1",
-        "displayName": "dfs.namenode.http-address.${dfs.nameservices}.nn1",
-        "description": "The fully-qualified HTTP address for nn1 NameNode.",
-        "isReconfigurable": false,
-        "recommendedValue": "0.0.0.0:50070",
-        "value": "0.0.0.0:50070",
-        "category": "HAWQ",
-        "filename": "hdfs-client",
-        "serviceName": 'MISC'
-      },
-      {
-        "name": "dfs.namenode.http-address.${dfs.nameservices}.nn2",
-        "displayName": "dfs.namenode.http-address.${dfs.nameservices}.nn2",
-        "description": "The fully-qualified HTTP address for nn2 NameNode.",
-        "isReconfigurable": false,
-        "recommendedValue": "0.0.0.0:50070",
-        "value": "0.0.0.0:50070",
-        "category": "HAWQ",
-        "filename": "hdfs-client",
-        "serviceName": 'MISC'
-      }
-    ]
-  }
-};

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/HDP2/kerberos_descriptor_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2/kerberos_descriptor_properties.js b/ambari-web/app/data/HDP2/kerberos_descriptor_properties.js
deleted file mode 100644
index f6e4239..0000000
--- a/ambari-web/app/data/HDP2/kerberos_descriptor_properties.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * 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.
- */
-
-var properties = [
-  {
-    "name": "keytab_dir",
-    "index": 3
-  },
-  {
-    "name": "realm",
-    "index": 4
-  },
-  {
-    "name": "additional_realms",
-    "index": 5,
-    "placeholderText": "(" + Em.I18n.t("common.optional") + ")"
-  }
-];
-
-module.exports = properties;

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/HDP2/kerberos_identities.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2/kerberos_identities.js b/ambari-web/app/data/HDP2/kerberos_identities.js
deleted file mode 100644
index 8af6702..0000000
--- a/ambari-web/app/data/HDP2/kerberos_identities.js
+++ /dev/null
@@ -1,129 +0,0 @@
-/**
- * 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.
- */
-
-var App = require('app');
-
-module.exports = {
-  configProperties: [
-    {
-      "name": "smokeuser_principal_name",
-      "displayName": "Smoke user principal",
-      "category": "Ambari Principals",
-      "filename": "cluster-env.xml",
-      "index": 1
-    },
-    {
-      "name": "smokeuser_keytab",
-      "displayName": "Smoke user keytab",
-      "category": "Ambari Principals",
-      "filename": "cluster-env.xml",
-      "index": 2
-    },
-    {
-      "name": "ambari-server_keytab",
-      "displayName": "Ambari Keytab",
-      "category": "Ambari Principals",
-      "filename": "cluster-env.xml",
-      "index": 3
-    },
-    {
-      "name": "hdfs_principal_name",
-      "displayName": "HDFS user principal",
-      "category": "Ambari Principals",
-      "filename": "hadoop-env.xml",
-      "index": 4
-    },
-    {
-      "name": "hdfs_user_keytab",
-      "displayName": "HDFS user keytab",
-      "category": "Ambari Principals",
-      "filename": "hadoop-env.xml",
-      "index": 5
-    },
-    {
-      "name": "hbase_principal_name",
-      "displayName": "HBase user principal",
-      "category": "Ambari Principals",
-      "filename": "hbase-env.xml",
-      "index": 6
-    },
-    {
-      "name": "hbase_user_keytab",
-      "displayName": "HBase user keytab",
-      "category": "Ambari Principals",
-      "filename": "hbase-env.xml",
-      "index": 7
-    },
-    {
-      "name": "accumulo_principal_name",
-      "displayName": "Accumulo user principal",
-      "category": "Ambari Principals",
-      "filename": "accumulo-env.xml",
-      "index": 8
-    },
-    {
-      "name": "accumulo_user_keytab",
-      "displayName": "Accumulo user keytab",
-      "category": "Ambari Principals",
-      "filename": "accumulo-env.xml",
-      "index": 9
-    },
-    {
-      "name": "spark.history.kerberos.principal",
-      "displayName": "Spark user principal",
-      "category": "Ambari Principals",
-      "filename": "spark-defaults.xml",
-      "index": 10
-    },
-    {
-      "name": "spark.history.kerberos.keytab",
-      "displayName": "Spark user keytab",
-      "category": "Ambari Principals",
-      "filename": "spark-defaults.xml",
-      "index": 11
-    },
-    {
-      "name": "spark.history.kerberos.principal",
-      "displayName": "Spark2 user principal",
-      "category": "Ambari Principals",
-      "filename": "spark2-defaults.xml",
-      "index": 12
-    },
-    {
-      "name": "spark.history.kerberos.keytab",
-      "displayName": "Spark2 user keytab",
-      "category": "Ambari Principals",
-      "filename": "spark2-defaults.xml",
-      "index": 13
-    },
-    {
-      "name": "storm_principal_name",
-      "displayName": "Storm user principal",
-      "category": "Ambari Principals",
-      "filename": "storm-env.xml",
-      "index": 14
-    },
-    {
-      "name": "storm_keytab",
-      "displayName": "Storm user keytab",
-      "category": "Ambari Principals",
-      "filename": "storm-env.xml",
-      "index": 15
-    }
-  ]
-};

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/HDP2/move_journal_node_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2/move_journal_node_properties.js b/ambari-web/app/data/HDP2/move_journal_node_properties.js
deleted file mode 100644
index 87a6cfd..0000000
--- a/ambari-web/app/data/HDP2/move_journal_node_properties.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * 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.
- */
-
-module.exports =
-{
-  "moveJNConfig": {
-    serviceName: 'MISC',
-    displayName: 'MISC',
-    configCategories: [
-      App.ServiceConfigCategory.create({ name: 'HDFS', displayName: 'HDFS'})
-    ],
-    sites: ['hdfs-site'],
-    configs: [
-      {
-        "name": "dfs.namenode.shared.edits.dir",
-        "displayName": "dfs.namenode.shared.edits.dir",
-        "description": " The URI which identifies the group of JNs where the NameNodes will write/read edits.",
-        "isReconfigurable": false,
-        "recommendedValue": "qjournal://node1.example.com:8485;node2.example.com:8485;node3.example.com:8485/mycluster",
-        "value": "qjournal://node1.example.com:8485;node2.example.com:8485;node3.example.com:8485/mycluster",
-        "category": "HDFS",
-        "filename": "hdfs-site",
-        "serviceName": 'MISC'
-      }
-    ]
-  }
-};


[24/47] ambari git commit: AMBARI-18948. hive metrics : support hs2 with remote metastore (aonishuk)

Posted by jo...@apache.org.
AMBARI-18948. hive metrics : support hs2 with remote metastore (aonishuk)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: 292d27987f7c0fa0265ba9d2f6c47f69cb9827c9
Parents: 31ce5f7
Author: Andrew Onishuk <ao...@hortonworks.com>
Authored: Wed Nov 23 11:08:31 2016 +0200
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Wed Nov 23 11:08:31 2016 +0200

----------------------------------------------------------------------
 .../2.5/services/HIVE/configuration/hivemetastore-site.xml   | 8 ++++++++
 .../HIVE/configuration/hiveserver2-interactive-site.xml      | 8 ++++++++
 .../HDP/2.5/services/HIVE/configuration/hiveserver2-site.xml | 8 ++++++++
 3 files changed, 24 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/292d2798/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/configuration/hivemetastore-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/configuration/hivemetastore-site.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/configuration/hivemetastore-site.xml
index b73b1ae..bb248b3 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/configuration/hivemetastore-site.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/configuration/hivemetastore-site.xml
@@ -26,6 +26,14 @@ limitations under the License.
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
+    <name>hive.server2.metrics.enabled</name>
+    <value>true</value>
+    <value-attributes>
+      <type>boolean</type>
+    </value-attributes>
+    <on-ambari-upgrade add="false"/>
+  </property>
+  <property>
     <name>hive.service.metrics.reporter</name>
     <value>JSON_FILE, JMX, HADOOP2</value>
     <on-ambari-upgrade add="true"/>

http://git-wip-us.apache.org/repos/asf/ambari/blob/292d2798/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/configuration/hiveserver2-interactive-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/configuration/hiveserver2-interactive-site.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/configuration/hiveserver2-interactive-site.xml
index 89bf43c..e8b6bc8 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/configuration/hiveserver2-interactive-site.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/configuration/hiveserver2-interactive-site.xml
@@ -26,6 +26,14 @@ limitations under the License.
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
+    <name>hive.server2.metrics.enabled</name>
+    <value>true</value>
+    <value-attributes>
+      <type>boolean</type>
+    </value-attributes>
+    <on-ambari-upgrade add="false"/>
+  </property>
+  <property>
     <name>hive.service.metrics.reporter</name>
     <value>JSON_FILE, JMX, HADOOP2</value>
     <on-ambari-upgrade add="true"/>

http://git-wip-us.apache.org/repos/asf/ambari/blob/292d2798/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/configuration/hiveserver2-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/configuration/hiveserver2-site.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/configuration/hiveserver2-site.xml
index e120ac2..bd1821d 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/configuration/hiveserver2-site.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/configuration/hiveserver2-site.xml
@@ -26,6 +26,14 @@ limitations under the License.
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
+    <name>hive.server2.metrics.enabled</name>
+    <value>true</value>
+    <value-attributes>
+      <type>boolean</type>
+    </value-attributes>
+    <on-ambari-upgrade add="false"/>
+  </property>
+  <property>
     <name>hive.service.metrics.reporter</name>
     <value>JSON_FILE, JMX, HADOOP2</value>
     <on-ambari-upgrade add="true"/>


[14/47] ambari git commit: AMBARI-18826. Stack property definitions made in ambari-web should be made stack agnostic (akovalenko)

Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/configs/wizards/secure_mapping.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/configs/wizards/secure_mapping.js b/ambari-web/app/data/configs/wizards/secure_mapping.js
new file mode 100644
index 0000000..8d952e8
--- /dev/null
+++ b/ambari-web/app/data/configs/wizards/secure_mapping.js
@@ -0,0 +1,1004 @@
+/**
+ * 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.
+ */
+
+var App = require('app');
+// All of the "name" properties have to coincide with how they will appear in the *-site.xml file
+// The "template" properties can come from the config properties in site_properties.js or secure_properties.js .
+var props = [
+  {
+    "name": "hadoop.security.authentication",
+    "templateName": [],
+    "foreignKey": null,
+    "value": "kerberos",
+    "nonSecureValue": "simple",
+    "filename": "core-site.xml",
+    "serviceName": "HDFS"
+  },
+  {
+    "name": "hadoop.security.authorization",
+    "templateName": [],
+    "foreignKey": null,
+    "value": "true",
+    "nonSecureValue": "false",
+    "filename": "core-site.xml",
+    "serviceName": "HDFS"
+  },
+  {
+    "name": "hadoop.security.auth_to_local",
+    "templateName": ["resourcemanager_primary_name", "kerberos_domain", "yarn_user", "nodemanager_primary_name", "namenode_primary_name", "hdfs_user", "datanode_primary_name", "hbase_master_primary_name", "hbase_user","hbase_regionserver_primary_name","oozie_primary_name","oozie_user","jobhistory_primary_name","mapred_user","journalnode_principal_name","falcon_primary_name","falcon_user"],
+    "foreignKey": null,
+    "value": "RULE:[2:$1@$0](<templateName[0]>@.*<templateName[1]>)s/.*/<templateName[2]>/\nRULE:[2:$1@$0](<templateName[3]>@.*<templateName[1]>)s/.*/<templateName[2]>/\nRULE:[2:$1@$0](<templateName[4]>@.*<templateName[1]>)s/.*/<templateName[5]>/\nRULE:[2:$1@$0](<templateName[6]>@.*<templateName[1]>)s/.*/<templateName[5]>/\nRULE:[2:$1@$0](<templateName[7]>@.*<templateName[1]>)s/.*/<templateName[8]>/\nRULE:[2:$1@$0](<templateName[9]>@.*<templateName[1]>)s/.*/<templateName[8]>/\nRULE:[2:$1@$0](<templateName[10]>@.*<templateName[1]>)s/.*/<templateName[11]>/\nRULE:[2:$1@$0](<templateName[12]>@.*<templateName[1]>)s/.*/<templateName[13]>/\nRULE:[2:$1@$0](<templateName[14]>@.*<templateName[1]>)s/.*/<templateName[5]>/\nRULE:[2:$1@$0](<templateName[15]>@.*<templateName[1]>)s/.*/<templateName[16]>/\nDEFAULT",
+    "filename": "core-site.xml",
+    "serviceName": "HDFS",
+    "dependedServiceName": [{name: "HBASE", replace: "\nRULE:[2:$1@$0](<templateName[7]>@.*<templateName[1]>)s/.*/<templateName[8]>/\nRULE:[2:$1@$0](<templateName[9]>@.*<templateName[1]>)s/.*/<templateName[8]>/"},{name: "OOZIE",replace: "\nRULE:[2:$1@$0](<templateName[10]>@.*<templateName[1]>)s/.*/<templateName[11]>/"},{name: "MAPREDUCE2",replace: "\nRULE:[2:$1@$0](<templateName[12]>@.*<templateName[1]>)s/.*/<templateName[13]>/"}]
+  },
+  {
+    "name": "dfs.namenode.kerberos.principal",
+    "templateName": ["namenode_principal_name", "kerberos_domain"],
+    "foreignKey": null,
+    "value": "<templateName[0]>@<templateName[1]>",
+    "filename": "hdfs-site.xml",
+    "serviceName": "HDFS"
+  },
+  {
+    "name": "dfs.namenode.keytab.file",
+    "templateName": ["namenode_keytab"],
+    "foreignKey": null,
+    "value": "<templateName[0]>",
+    "filename": "hdfs-site.xml",
+    "serviceName": "HDFS"
+  },
+  {
+    "name": "dfs.secondary.namenode.kerberos.principal",
+    "templateName": ["snamenode_principal_name", "kerberos_domain"],
+    "foreignKey": null,
+    "value": "<templateName[0]>@<templateName[1]>",
+    "filename": "hdfs-site.xml",
+    "serviceName": "HDFS"
+  },
+  {
+    "name": "dfs.secondary.namenode.keytab.file",
+    "templateName": ["snamenode_keytab"],
+    "foreignKey": null,
+    "value": "<templateName[0]>",
+    "filename": "hdfs-site.xml",
+    "serviceName": "HDFS"
+  },
+  {
+    "name": "dfs.web.authentication.kerberos.principal",
+    "templateName": ["hadoop_http_principal_name", "kerberos_domain"],
+    "foreignKey": null,
+    "value": "<templateName[0]>@<templateName[1]>",
+    "filename": "hdfs-site.xml",
+    "serviceName": "HDFS"
+  },
+  {
+    "name": "dfs.web.authentication.kerberos.keytab",
+    "templateName": ["hadoop_http_keytab"],
+    "foreignKey": null,
+    "value": "<templateName[0]>",
+    "filename": "hdfs-site.xml",
+    "serviceName": "HDFS"
+  },
+  {
+    "name": "dfs.datanode.kerberos.principal",
+    "templateName": ["datanode_principal_name", "kerberos_domain"],
+    "foreignKey": null,
+    "value": "<templateName[0]>@<templateName[1]>",
+    "filename": "hdfs-site.xml",
+    "serviceName": "HDFS"
+  },
+  {
+    "name": "dfs.datanode.keytab.file",
+    "templateName": ["datanode_keytab"],
+    "foreignKey": null,
+    "value": "<templateName[0]>",
+    "filename": "hdfs-site.xml",
+    "serviceName": "HDFS"
+  },
+  {
+    "name": "dfs.namenode.kerberos.internal.spnego.principal",
+    "templateName": [],
+    "foreignKey": null,
+    "value": "${dfs.web.authentication.kerberos.principal}",
+    "filename": "hdfs-site.xml",
+    "serviceName": "HDFS"
+  },
+  {
+    "name": "dfs.secondary.namenode.kerberos.internal.spnego.principal",
+    "templateName": [],
+    "foreignKey": null,
+    "value": "${dfs.web.authentication.kerberos.principal}",
+    "filename": "hdfs-site.xml",
+    "serviceName": "HDFS"
+  },
+  {
+    "name": "dfs.journalnode.kerberos.principal",
+    "templateName": ["journalnode_principal_name", "kerberos_domain"],
+    "foreignKey": null,
+    "value": "<templateName[0]>@<templateName[1]>",
+    "filename": "hdfs-site.xml",
+    "serviceName": "HDFS"
+  },
+  {
+    "name": "dfs.journalnode.kerberos.internal.spnego.principal",
+    "templateName": ["hadoop_http_principal_name", "kerberos_domain"],
+    "foreignKey": null,
+    "value": "<templateName[0]>@<templateName[1]>",
+    "filename": "hdfs-site.xml",
+    "serviceName": "HDFS"
+  },
+  {
+    "name": "dfs.journalnode.keytab.file",
+    "templateName": ["journalnode_keytab"],
+    "foreignKey": null,
+    "value": "<templateName[0]>",
+    "filename": "hdfs-site.xml",
+    "serviceName": "HDFS"
+  },
+  {
+    "name": "dfs.datanode.address",
+    "templateName": ["dfs_datanode_address"],
+    "foreignKey": null,
+    "value": "0.0.0.0:<templateName[0]>",
+    "nonSecureValue": "0.0.0.0:50010",
+    "filename": "hdfs-site.xml",
+    "serviceName": "HDFS"
+  },
+  {
+    "name": "dfs.datanode.http.address",
+    "templateName": ["dfs_datanode_http_address"],
+    "foreignKey": null,
+    "value": "0.0.0.0:<templateName[0]>",
+    "nonSecureValue": "0.0.0.0:50075",
+    "filename": "hdfs-site.xml",
+    "serviceName": "HDFS"
+  },
+  {
+    "name": "mapreduce.jobhistory.principal",
+    "templateName": ["jobhistory_principal_name", "kerberos_domain"],
+    "foreignKey": null,
+    "value": "<templateName[0]>@<templateName[1]>",
+    "filename": "mapred-site.xml",
+    "serviceName": "MAPREDUCE2"
+  },
+  {
+    "name": "mapreduce.jobhistory.keytab",
+    "templateName": ["jobhistory_keytab"],
+    "foreignKey": null,
+    "value": "<templateName[0]>",
+    "filename": "mapred-site.xml",
+    "serviceName": "MAPREDUCE2"
+  },
+  {
+    "name": "mapreduce.jobhistory.webapp.spnego-principal",
+    "templateName": ["jobhistory_http_principal_name", "kerberos_domain"],
+    "foreignKey": null,
+    "value": "<templateName[0]>@<templateName[1]>",
+    "filename": "mapred-site.xml",
+    "serviceName": "MAPREDUCE2"
+  },
+  {
+    "name": "mapreduce.jobhistory.webapp.spnego-keytab-file",
+    "templateName": ["jobhistory_http_keytab"],
+    "foreignKey": null,
+    "value": "<templateName[0]>",
+    "filename": "mapred-site.xml",
+    "serviceName": "MAPREDUCE2"
+  },
+  {
+    "name": "yarn.timeline-service.enabled",
+    "templateName": [],
+    "foreignKey": null,
+    "value": "true",
+    "nonSecureValue": "false",
+    "filename": "yarn-site.xml",
+    "serviceName": "YARN"
+  },
+  {
+    "name": "yarn.acl.enable",
+    "templateName": [],
+    "foreignKey": null,
+    "value": "true",
+    "nonSecureValue": "false",
+    "filename": "yarn-site.xml",
+    "serviceName": "YARN"
+  },
+  // YARN Timeline Service
+  // These "http-authentication" properties are supported in HDP Champlain
+  {
+    "name": "yarn.timeline-service.principal",
+    "templateName": ["apptimelineserver_principal_name", "kerberos_domain"],
+    "foreignKey": null,
+    "value": "<templateName[0]>@<templateName[1]>",
+    "filename": "yarn-site.xml",
+    "serviceName": "YARN"
+  },
+  {
+    "name": "yarn.timeline-service.keytab",
+    "templateName": ["apptimelineserver_keytab"],
+    "foreignKey": null,
+    "value": "<templateName[0]>",
+    "filename": "yarn-site.xml",
+    "serviceName": "YARN"
+  },
+  {
+    "name": "yarn.timeline-service.http-authentication.type",
+    "templateName": [],
+    "foreignKey": null,
+    "value": "kerberos",
+    "filename": "yarn-site.xml",
+    "serviceName": "YARN"
+  },
+  {
+    "name": "yarn.timeline-service.http-authentication.kerberos.principal",
+    "templateName": ["apptimelineserver_http_principal_name", "kerberos_domain"],
+    "foreignKey": null,
+    "value": "<templateName[0]>@<templateName[1]>",
+    "filename": "yarn-site.xml",
+    "serviceName": "YARN"
+  },
+  {
+    "name": "yarn.timeline-service.http-authentication.kerberos.keytab",
+    "templateName": ["apptimelineserver_http_keytab"],
+    "foreignKey": null,
+    "value": "<templateName[0]>",
+    "filename": "yarn-site.xml",
+    "serviceName": "YARN"
+  },
+  // YARN Resource Manager
+  {
+    "name": "yarn.resourcemanager.principal",
+    "templateName": ["resourcemanager_principal_name", "kerberos_domain"],
+    "foreignKey": null,
+    "value": "<templateName[0]>@<templateName[1]>",
+    "filename": "yarn-site.xml",
+    "serviceName": "YARN"
+  },
+  {
+    "name": "yarn.resourcemanager.keytab",
+    "templateName": ["resourcemanager_keytab"],
+    "foreignKey": null,
+    "value": "<templateName[0]>",
+    "filename": "yarn-site.xml",
+    "serviceName": "YARN"
+  },
+  {
+    "name": "yarn.nodemanager.principal",
+    "templateName": ["nodemanager_principal_name", "kerberos_domain"],
+    "foreignKey": null,
+    "value": "<templateName[0]>@<templateName[1]>",
+    "filename": "yarn-site.xml",
+    "serviceName": "YARN"
+  },
+  {
+    "name": "yarn.nodemanager.keytab",
+    "templateName": ["nodemanager_keytab"],
+    "foreignKey": null,
+    "value": "<templateName[0]>",
+    "filename": "yarn-site.xml",
+    "serviceName": "YARN"
+  },
+  {
+    "name": "yarn.resourcemanager.webapp.spnego-principal",
+    "templateName": ["resourcemanager_http_principal_name", "kerberos_domain"],
+    "foreignKey": null,
+    "value": "<templateName[0]>@<templateName[1]>",
+    "filename": "yarn-site.xml",
+    "serviceName": "YARN"
+  },
+  {
+    "name": "yarn.resourcemanager.webapp.spnego-keytab-file",
+    "templateName": ["resourcemanager_http_keytab"],
+    "foreignKey": null,
+    "value": "<templateName[0]>",
+    "filename": "yarn-site.xml",
+    "serviceName": "YARN"
+  },
+  {
+    "name": "yarn.nodemanager.webapp.spnego-principal",
+    "templateName": ["nodemanager_http_principal_name", "kerberos_domain"],
+    "foreignKey": null,
+    "value": "<templateName[0]>@<templateName[1]>",
+    "filename": "yarn-site.xml",
+    "serviceName": "YARN"
+  },
+  {
+    "name": "yarn.nodemanager.webapp.spnego-keytab-file",
+    "templateName": ["nodemanager_http_keytab"],
+    "foreignKey": null,
+    "value": "<templateName[0]>",
+    "filename": "yarn-site.xml",
+    "serviceName": "YARN"
+  },
+  {
+    "name": "yarn.nodemanager.container-executor.class",
+    "templateName": ["yarn_nodemanager_container-executor_class"],
+    "foreignKey": null,
+    "value": "<templateName[0]>",
+    "nonSecureValue": "org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor",
+    "filename": "yarn-site.xml",
+    "serviceName": "YARN"
+  },
+  {
+    "name": "hbase.master.kerberos.principal",
+    "templateName": ["hbase_master_principal_name", "kerberos_domain"],
+    "foreignKey": null,
+    "value": "<templateName[0]>@<templateName[1]>",
+    "filename": "hbase-site.xml",
+    "serviceName": "HBASE"
+  },
+  {
+    "name": "hbase.master.keytab.file",
+    "templateName": ["hbase_master_keytab"],
+    "foreignKey": null,
+    "value": "<templateName[0]>",
+    "filename": "hbase-site.xml",
+    "serviceName": "HBASE"
+  },
+  {
+    "name": "hbase.regionserver.kerberos.principal",
+    "templateName": ["hbase_regionserver_principal_name", "kerberos_domain"],
+    "foreignKey": null,
+    "value": "<templateName[0]>@<templateName[1]>",
+    "filename": "hbase-site.xml",
+    "serviceName": "HBASE"
+  },
+  {
+    "name": "hbase.regionserver.keytab.file",
+    "templateName": ["hbase_regionserver_keytab"],
+    "foreignKey": null,
+    "value": "<templateName[0]>",
+    "filename": "hbase-site.xml",
+    "serviceName": "HBASE"
+  },
+  {
+    "name": "hive.metastore.sasl.enabled",
+    "templateName": [],
+    "foreignKey": null,
+    "value": "true",
+    "nonSecureValue": "false",
+    "filename": "hive-site.xml",
+    "serviceName": "HIVE"
+  },
+  {
+    "name": "hive.security.authorization.enabled",
+    "templateName": [],
+    "foreignKey": null,
+    "value": "true",
+    "nonSecureValue": "false",
+    "filename": "hive-site.xml",
+    "serviceName": "HIVE"
+  },
+  {
+    "name": "hive.server2.authentication",
+    "templateName": [],
+    "foreignKey": null,
+    "value": "KERBEROS",
+    "nonSecureValue": "NONE",
+    "filename": "hive-site.xml",
+    "serviceName": "HIVE"
+  },
+  {
+    "name": "hive.metastore.kerberos.principal",
+    "templateName": ["hive_metastore_principal_name", "kerberos_domain"],
+    "foreignKey": null,
+    "value": "<templateName[0]>@<templateName[1]>",
+    "filename": "hive-site.xml",
+    "serviceName": "HIVE"
+  },
+  {
+    "name": "hive.metastore.kerberos.keytab.file",
+    "templateName": ["hive_metastore_keytab"],
+    "foreignKey": null,
+    "value": "<templateName[0]>",
+    "filename": "hive-site.xml",
+    "serviceName": "HIVE"
+  },
+  {
+    "name": "hive.server2.authentication.kerberos.principal",
+    "templateName": ["hive_metastore_principal_name", "kerberos_domain"],
+    "foreignKey": null,
+    "value": "<templateName[0]>@<templateName[1]>",
+    "filename": "hive-site.xml",
+    "serviceName": "HIVE"
+  },
+  {
+    "name": "hive.server2.authentication.kerberos.keytab",
+    "templateName": ["hive_metastore_keytab"],
+    "foreignKey": null,
+    "value": "<templateName[0]>",
+    "filename": "hive-site.xml",
+    "serviceName": "HIVE"
+  },
+  {
+    "name": "hive.server2.authentication.spnego.principal",
+    "templateName": ["hive_metastore_http_principal_name", "kerberos_domain"],
+    "foreignKey": null,
+    "value": "<templateName[0]>@<templateName[1]>",
+    "filename": "hive-site.xml",
+    "serviceName": "HIVE"
+  },
+  {
+    "name": "hive.server2.authentication.spnego.keytab",
+    "templateName": ["hive_metastore_http_keytab"],
+    "foreignKey": null,
+    "value": "<templateName[0]>",
+    "filename": "hive-site.xml",
+    "serviceName": "HIVE"
+  },
+  {
+    "name": "oozie.service.AuthorizationService.authorization.enabled",
+    "templateName": [],
+    "foreignKey": null,
+    "value": "true",
+    "filename": "oozie-site.xml",
+    "serviceName": "OOZIE"
+  },
+  {
+    "name": "oozie.service.HadoopAccessorService.kerberos.enabled",
+    "templateName": [],
+    "foreignKey": null,
+    "value": "true",
+    "nonSecureValue": "false",
+    "filename": "oozie-site.xml",
+    "serviceName": "OOZIE"
+  },
+  {
+    "name": "local.realm",
+    "templateName": ["kerberos_domain"],
+    "foreignKey": null,
+    "value": "<templateName[0]>",
+    "filename": "oozie-site.xml",
+    "serviceName": "OOZIE"
+  },
+  {
+    "name": "oozie.service.HadoopAccessorService.keytab.file",
+    "templateName": ["oozie_keytab"],
+    "foreignKey": null,
+    "value": "<templateName[0]>",
+    "filename": "oozie-site.xml",
+    "serviceName": "OOZIE"
+  },
+  {
+    "name": "oozie.service.HadoopAccessorService.kerberos.principal",
+    "templateName": ["oozie_principal_name", "kerberos_domain"],
+    "foreignKey": null,
+    "value": "<templateName[0]>@<templateName[1]>",
+    "filename": "oozie-site.xml",
+    "serviceName": "OOZIE"
+  },
+  {
+    "name": "oozie.authentication.type",
+    "templateName": [],
+    "foreignKey": null,
+    "value": "kerberos",
+    "nonSecureValue": "simple",
+    "filename": "oozie-site.xml",
+    "serviceName": "OOZIE"
+  },
+  {
+    "name": "oozie.authentication.kerberos.principal",
+    "templateName": ["oozie_http_principal_name", "kerberos_domain"],
+    "foreignKey": null,
+    "value": "<templateName[0]>@<templateName[1]>",
+    "filename": "oozie-site.xml",
+    "serviceName": "OOZIE"
+  },
+  {
+    "name": "oozie.authentication.kerberos.keytab",
+    "templateName": ["oozie_http_keytab"],
+    "foreignKey": null,
+    "value": "<templateName[0]>",
+    "filename": "oozie-site.xml",
+    "serviceName": "OOZIE"
+  },
+  {
+    "name": "oozie.authentication.kerberos.name.rules",
+    "templateName": ["resourcemanager_primary_name", "kerberos_domain", "yarn_user", "nodemanager_primary_name", "namenode_primary_name", "hdfs_user", "datanode_primary_name", "hbase_master_primary_name", "hbase_user","hbase_regionserver_primary_name"],
+    "foreignKey": null,
+    "value": "RULE:[2:$1@$0](<templateName[0]>@.*<templateName[1]>)s/.*/<templateName[2]>/\nRULE:[2:$1@$0](<templateName[3]>@.*<templateName[1]>)s/.*/<templateName[2]>/\nRULE:[2:$1@$0](<templateName[4]>@.*<templateName[1]>)s/.*/<templateName[5]>/\nRULE:[2:$1@$0](<templateName[6]>@.*<templateName[1]>)s/.*/<templateName[5]>/\nRULE:[2:$1@$0](<templateName[7]>@.*<templateName[1]>)s/.*/<templateName[8]>/\nRULE:[2:$1@$0](<templateName[9]>@.*<templateName[1]>)s/.*/<templateName[8]>/\nDEFAULT",
+    "filename": "oozie-site.xml",
+    "serviceName": "OOZIE",
+    "dependedServiceName": [{name: "HBASE", replace: "\nRULE:[2:$1@$0](<templateName[7]>@.*<templateName[1]>)s/.*/<templateName[8]>/\nRULE:[2:$1@$0](<templateName[9]>@.*<templateName[1]>)s/.*/<templateName[8]>/"}]
+  },
+  {
+    "name": "templeton.kerberos.principal",
+    "templateName": ["webHCat_http_principal_name", "kerberos_domain"],
+    "foreignKey": null,
+    "value": "<templateName[0]>@<templateName[1]>",
+    "filename": "webhcat-site.xml",
+    "serviceName": "HIVE"
+  },
+  {
+    "name": "templeton.kerberos.keytab",
+    "templateName": ["webhcat_http_keytab"],
+    "foreignKey": null,
+    "value": "<templateName[0]>",
+    "filename": "webhcat-site.xml",
+    "serviceName": "HIVE"
+  },
+  {
+    "name": "templeton.kerberos.secret",
+    "templateName": [""],
+    "foreignKey": null,
+    "value": "secret",
+    "filename": "webhcat-site.xml",
+    "serviceName": "HIVE"
+  },
+  {
+    "name": "templeton.hive.properties",
+    "templateName": ["hive_metastore","hive_metastore_principal_name","kerberos_domain"],
+    "foreignKey": null,
+    "value": "hive.metastore.local=false,hive.metastore.uris=<templateName[0]>,hive." +
+      "metastore.sasl.enabled=true,hive.metastore.execute.setugi=true,hive.metastore.warehouse.dir=/apps/hive/warehouse,hive.exec.mode.local.auto=false,hive.metastore.kerberos.principal=<templateName[1]>@<templateName[2]>",
+    "filename": "webhcat-site.xml",
+    "serviceName": "HIVE"
+  },
+  {
+    "name": "hbase.security.authentication",
+    "templateName": [],
+    "foreignKey": null,
+    "value": "kerberos",
+    "nonSecureValue": "simple",
+    "filename": "hbase-site.xml",
+    "serviceName": "HBASE"
+  },
+  {
+    "name": "hbase.security.authorization",
+    "templateName": [],
+    "foreignKey": null,
+    "value": "true",
+    "nonSecureValue": "false",
+    "filename": "hbase-site.xml",
+    "serviceName": "HBASE"
+  },
+  {
+    "name": "hbase.bulkload.staging.dir",
+    "templateName": [],
+    "foreignKey": null,
+    "value": "/apps/hbase/staging",
+    "filename": "hbase-site.xml",
+    "serviceName": "HBASE"
+  },
+  {
+    "name": "zookeeper.znode.parent",
+    "templateName": [],
+    "foreignKey": null,
+    "value": "/hbase-secure",
+    "nonSecureValue": "/hbase-unsecure",
+    "filename": "hbase-site.xml",
+    "serviceName": "HBASE"
+  },
+
+  /***************************************FALCON***********************************************/
+  {
+    "name": "*.falcon.authentication.type",
+    "templateName": [],
+    "foreignKey": null,
+    "value": "kerberos",
+    "nonSecureValue": "simple",
+    "filename": "falcon-startup.properties.xml",
+    "serviceName": "FALCON"
+  },
+  {
+    "name": "*.falcon.http.authentication.type",
+    "templateName": [],
+    "foreignKey": null,
+    "value": "kerberos",
+    "nonSecureValue": "simple",
+    "filename": "falcon-startup.properties.xml",
+    "serviceName": "FALCON"
+  },
+  {
+    "name": "*.falcon.service.authentication.kerberos.principal",
+    "templateName": ["falcon_principal_name", "kerberos_domain"],
+    "foreignKey": null,
+    "value": "<templateName[0]>@<templateName[1]>",
+    "filename": "falcon-startup.properties.xml",
+    "serviceName": "FALCON"
+  },
+  {
+    "name": "*.falcon.service.authentication.kerberos.keytab",
+    "templateName": ["falcon_keytab"],
+    "foreignKey": null,
+    "value": "<templateName[0]>",
+    "filename": "falcon-startup.properties.xml",
+    "serviceName": "FALCON"
+  },
+  {
+    "name": "*.falcon.http.authentication.kerberos.principal",
+    "templateName": ["falcon_http_principal_name", "kerberos_domain"],
+    "foreignKey": null,
+    "value": "<templateName[0]>@<templateName[1]>",
+    "filename": "falcon-startup.properties.xml",
+    "serviceName": "FALCON"
+  },
+  {
+    "name": "*.falcon.http.authentication.kerberos.keytab",
+    "templateName": ["falcon_http_keytab"],
+    "foreignKey": null,
+    "value": "<templateName[0]>",
+    "filename": "falcon-startup.properties.xml",
+    "serviceName": "FALCON"
+  },
+  {
+    "name": "*.dfs.namenode.kerberos.principal",
+    "templateName": ["namenode_principal_name_falcon", "kerberos_domain"],
+    "foreignKey": null,
+    "value": "<templateName[0]>@<templateName[1]>",
+    "filename": "falcon-startup.properties.xml",
+    "serviceName": "FALCON"
+  },
+
+  /***************************************KNOX***********************************************/
+  {
+    "name": "gateway.hadoop.kerberos.secured",
+    "templateName": [],
+    "foreignKey": null,
+    "value": "true",
+    "nonSecureValue": "false",
+    "filename": "gateway-site.xml",
+    "serviceName": "KNOX"
+  },
+  {
+    "name": "java.security.krb5.conf",
+    "templateName": [],
+    "foreignKey": null,
+    "value": "/etc/krb5.conf",
+    "filename": "gateway-site.xml",
+    "serviceName": "KNOX"
+  },
+  {
+    "name": "hadoop.proxyuser.<foreignKey[0]>.groups",
+    "templateName": ["proxyuser_group"],
+    "foreignKey": ["knox_primary_name"],
+    "value": "<templateName[0]>",
+    "filename": "core-site.xml",
+    "serviceName": "KNOX"
+  },
+  {
+    "name": "hadoop.proxyuser.<foreignKey[0]>.hosts",
+    "templateName": ["knox_gateway_hosts"],
+    "foreignKey": ["knox_primary_name"],
+    "value": "<templateName[0]>",
+    "filename": "core-site.xml",
+    "serviceName": "KNOX"
+  },
+  {
+    "name": "webhcat.proxyuser.<foreignKey[0]>.groups",
+    "templateName": ["proxyuser_group"],
+    "foreignKey": ["knox_primary_name"],
+    "value": "<templateName[0]>",
+    "filename": "webhcat-site.xml",
+    "serviceName": "KNOX"
+  },
+  {
+    "name": "webhcat.proxyuser.<foreignKey[0]>.hosts",
+    "templateName": ["knox_gateway_hosts"],
+    "foreignKey": ["knox_primary_name"],
+    "value": "<templateName[0]>",
+    "filename": "webhcat-site.xml",
+    "serviceName": "KNOX"
+  },
+  {
+    "name": "oozie.service.ProxyUserService.proxyuser.<foreignKey[0]>.groups",
+    "templateName": ["proxyuser_group"],
+    "foreignKey": ["knox_primary_name"],
+    "value": "<templateName[0]>",
+    "filename": "oozie-site.xml",
+    "serviceName": "KNOX"
+  },
+  {
+    "name": "oozie.service.ProxyUserService.proxyuser.<foreignKey[0]>.hosts",
+    "templateName": ["knox_gateway_hosts"],
+    "foreignKey": ["knox_primary_name"],
+    "value": "<templateName[0]>",
+    "filename": "oozie-site.xml",
+    "serviceName": "KNOX"
+  },
+/***************************************core-site***************************************************/
+  {
+    "name": "hadoop.proxyuser.<foreignKey[0]>.groups",
+    "templateName": ["proxyuser_group"],
+    "foreignKey": ["hive_metastore_primary_name"],
+    "value": "<templateName[0]>",
+    "filename": "core-site.xml",
+    "serviceName": "HIVE"
+  },
+  {
+    "name": "hadoop.proxyuser.<foreignKey[0]>.hosts",
+    "templateName": ["hive_metastore"],
+    "foreignKey": ["hive_metastore_primary_name"],
+    "value": "<templateName[0]>",
+    "filename": "core-site.xml",
+    "serviceName": "HIVE"
+  },
+  {
+    "name": "hadoop.proxyuser.<foreignKey[0]>.groups",
+    "templateName": ["proxyuser_group"],
+    "foreignKey": ["oozie_primary_name"],
+    "value": "<templateName[0]>",
+    "filename": "core-site.xml",
+    "serviceName": "OOZIE"
+  },
+  {
+    "name": "hadoop.proxyuser.<foreignKey[0]>.hosts",
+    "templateName": ["oozieserver_host"],
+    "foreignKey": ["oozie_primary_name"],
+    "value": "<templateName[0]>",
+    "filename": "core-site.xml",
+    "serviceName": "OOZIE"
+  },
+  {
+    "name": "hadoop.proxyuser.<foreignKey[0]>.groups",
+    "templateName": ["proxyuser_group"],
+    "foreignKey": ["webHCat_http_primary_name"],
+    "value": "<templateName[0]>",
+    "filename": "core-site.xml",
+    "serviceName": "HIVE"
+  },
+  {
+    "name": "hadoop.proxyuser.<foreignKey[0]>.hosts",
+    "templateName": ["webhcat_server"],
+    "foreignKey": ["webHCat_http_primary_name"],
+    "value": "<templateName[0]>",
+    "filename": "core-site.xml",
+    "serviceName": "HIVE"
+  }
+];
+
+var yarn22Mapping = [
+  {
+    "name": 'hadoop.http.authentication.kerberos.principal',
+    "templateName": ["hadoop_http_principal_name", "kerberos_domain"],
+    "foreignKey": null,
+    "value": "<templateName[0]>@<templateName[1]>",
+    "serviceName": "HDFS",
+    "filename": "core-site.xml"
+  },
+  {
+    "name": 'hadoop.http.authentication.kerberos.keytab',
+    "foreignKey": null,
+    "templateName": ["hadoop_http_keytab"],
+    "value": "<templateName[0]>",
+    "serviceName": "HDFS",
+    "filename": "core-site.xml"
+  },
+  {
+    name: 'hadoop.http.authentication.kerberos.name.rules',
+    templateName: [],
+    foreignKey: null,
+    value: "",
+    "serviceName": "HDFS",
+    "filename": "core-site.xml"
+  },
+  {
+    "name": 'yarn.timeline-service.http-authentication.signature.secret',
+    "templateName": [],
+    "foreignKey": null,
+    "value": "",
+    "serviceName": "YARN",
+    "filename": "yarn-site.xml"
+  },
+  {
+    "name": 'yarn.timeline-service.http-authentication.signature.secret.file',
+    "value": "",
+    "templateName": [],
+    "foreignKey": null,
+    "serviceName": "YARN",
+    "filename": "yarn-site.xml"
+  },
+  {
+    "name": 'yarn.timeline-service.http-authentication.signer.secret.provider',
+    "value": "",
+    "templateName": [],
+    "foreignKey": null,
+    "serviceName": "YARN",
+    "filename": "yarn-site.xml"
+  },
+  {
+    "name": 'yarn.timeline-service.http-authentication.signer.secret.provider.object',
+    "value": "",
+    "templateName": [],
+    "foreignKey": null,
+    "serviceName": "YARN",
+    "filename": "yarn-site.xml"
+  },
+  {
+
+    "name": 'yarn.timeline-service.http-authentication.token.validity',
+    "templateName": [],
+    "foreignKey": null,
+    "value": "",
+    "serviceName": "YARN",
+    "filename": "yarn-site.xml"
+  },
+  {
+    "name": 'yarn.timeline-service.http-authentication.cookie.domain',
+    "value": "",
+    "templateName": [],
+    "foreignKey": null,
+    "serviceName": "YARN",
+    "filename": "yarn-site.xml"
+  },
+  {
+    "name": 'yarn.timeline-service.http-authentication.cookie.path',
+    "value": "",
+    "templateName": [],
+    "foreignKey": null,
+    "serviceName": "YARN",
+    "filename": "yarn-site.xml"
+  },
+  {
+    "name": 'yarn.timeline-service.http-authentication.simple.anonymous.allowed',
+    "value": "true",
+    "templateName": [],
+    "foreignKey": null,
+    "serviceName": "YARN",
+    "filename": "yarn-site.xml"
+  },
+  {
+    "name": 'yarn.timeline-service.http-authentication.proxyusers.*.hosts',
+    "value": "",
+    "templateName": [],
+    "foreignKey": null,
+    "serviceName": "YARN",
+    "filename": "yarn-site.xml"
+  },
+  {
+    "name": 'yarn.timeline-service.http-authentication.proxyusers.*.users',
+    "value": "",
+    "serviceName": "YARN",
+    "templateName": [],
+    "foreignKey": null,
+    "filename": "yarn-site.xml"
+  },
+  {
+    "name": 'yarn.timeline-service.http-authentication.proxyusers.*.groups',
+    "value": "",
+    "templateName": [],
+    "foreignKey": null,
+    "serviceName": "YARN",
+    "filename": "yarn-site.xml"
+  },
+  {
+    "name": 'hadoop.http.filter.initializers',
+    "value": "",
+    "templateName": [],
+    "foreignKey": null,
+    "serviceName": "HDFS",
+    "filename": "core-site.xml"
+  },
+  {
+    "name": 'hadoop.http.authentication.type',
+    "value": "simple",
+    "templateName": [],
+    "foreignKey": null,
+    "serviceName": "HDFS",
+    "filename": "core-site.xml"
+  },
+  {
+    "name": 'hadoop.http.authentication.signature.secret',
+    "value": "",
+    "templateName": [],
+    "foreignKey": null,
+    "serviceName": "HDFS",
+    "filename": "core-site.xml"
+  },
+  {
+    "name": 'hadoop.http.authentication.signature.secret.file',
+    "value": "",
+    "templateName": [],
+    "foreignKey": null,
+    "serviceName": "HDFS",
+    "filename": "core-site.xml"
+  },
+  {
+    "name": 'hadoop.http.authentication.signer.secret.provider',
+    "value": "",
+    "templateName": [],
+    "foreignKey": null,
+    "serviceName": "HDFS",
+    "filename": "core-site.xml"
+  },
+  {
+    "name": 'hadoop.http.authentication.signer.secret.provider.object',
+    "value": "",
+    "templateName": [],
+    "foreignKey": null,
+    "serviceName": "HDFS",
+    "filename": "core-site.xml"
+  },
+  {
+    "name": 'hadoop.http.authentication.token.validity',
+    "value": "",
+    "templateName": [],
+    "foreignKey": null,
+    "serviceName": "HDFS",
+    "filename": "core-site.xml"
+  },
+  {
+    "name": 'hadoop.http.authentication.cookie.domain',
+    "value": "",
+    "templateName": [],
+    "foreignKey": null,
+    "serviceName": "HDFS",
+    "filename": "core-site.xml"
+  },
+  {
+    "name": 'hadoop.http.authentication.cookie.path',
+    "value": "",
+    "templateName": [],
+    "foreignKey": null,
+    "serviceName": "HDFS",
+    "filename": "core-site.xml"
+  },
+  {
+    "name": 'yarn.timeline-service.http-authentication.kerberos.name.rules',
+    "value": "",
+    "templateName": [],
+    "foreignKey": null,
+    "serviceName": "YARN",
+    "filename": "yarn-site.xml"
+  },
+  {
+    "name": 'yarn.resourcemanager.proxyusers.*.hosts',
+    "value": "",
+    "templateName": [],
+    "foreignKey": null,
+    "serviceName": "YARN",
+    "filename": "yarn-site.xml"
+  },
+  {
+    "name": 'yarn.resourcemanager.proxyusers.*.users',
+    "value": "",
+    "templateName": [],
+    "foreignKey": null,
+    "serviceName": "YARN",
+    "filename": "yarn-site.xml"
+  },
+  {
+    "name": 'yarn.resourcemanager.proxyusers.*.groups',
+    "value": "",
+    "templateName": [],
+    "foreignKey": null,
+    "serviceName": "YARN",
+    "filename": "yarn-site.xml"
+  },
+  {
+    "name": 'yarn.resourcemanager.proxy-user-privileges.enabled',
+    "value": "true",
+    "templateName": [],
+    "foreignKey": null,
+    "serviceName": "YARN",
+    "filename": "yarn-site.xml"
+  },
+  {
+    "name": 'yarn.nodemanager.linux-container-executor.cgroups.mount-path',
+    "value": "",
+    "templateName": [],
+    "foreignKey": null,
+    "serviceName": "YARN",
+    "filename": "yarn-site.xml"
+  }
+];
+
+props.pushObjects(yarn22Mapping);
+
+module.exports = props;

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/data/custom_stack_map.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/custom_stack_map.js b/ambari-web/app/data/custom_stack_map.js
index e52c570..55b3a10 100644
--- a/ambari-web/app/data/custom_stack_map.js
+++ b/ambari-web/app/data/custom_stack_map.js
@@ -16,8 +16,6 @@
  * limitations under the License.
  */
 
-var App = require('app');
-
 /*
 sign will be compared like: <clusterSelectedStackVersion> sign <stackVersionNumber> if true use this baseStackFolder
 Example:

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/mappers/configs/stack_config_properties_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/configs/stack_config_properties_mapper.js b/ambari-web/app/mappers/configs/stack_config_properties_mapper.js
index 2c8959d..9b4b920 100644
--- a/ambari-web/app/mappers/configs/stack_config_properties_mapper.js
+++ b/ambari-web/app/mappers/configs/stack_config_properties_mapper.js
@@ -218,7 +218,7 @@ App.stackConfigPropertiesMapper = App.QuickDataMapper.create({
    * @param configs
    */
   addUIOnlyProperties: function(configs) {
-    require('data/HDP2/ui_properties').concat(require('data/HDP2/alert_notification')).forEach(function(p) {
+    require('data/configs/ui_properties').concat(require('data/configs/alert_notification')).forEach(function(p) {
       if(p.name == "dfs.ha.fencing.methods" && !App.get('isHaEnabled')) return;
 
       configs.push({

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/mixins/wizard/addSecurityConfigs.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/wizard/addSecurityConfigs.js b/ambari-web/app/mixins/wizard/addSecurityConfigs.js
index 7e495ea..b5f3e6a 100644
--- a/ambari-web/app/mixins/wizard/addSecurityConfigs.js
+++ b/ambari-web/app/mixins/wizard/addSecurityConfigs.js
@@ -27,7 +27,7 @@ App.AddSecurityConfigs = Em.Mixin.create({
 
   kerberosDescriptor: {},
 
-  kerberosDescriptorProperties: require('data/HDP2/kerberos_descriptor_properties'),
+  kerberosDescriptorProperties: require('data/configs/wizards/kerberos_descriptor_properties'),
 
   /**
    * security configs, which values should be modified after APPLY CONFIGURATIONS stage

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/models/stack_service.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/stack_service.js b/ambari-web/app/models/stack_service.js
index 0136ec3..64f3b36 100644
--- a/ambari-web/app/models/stack_service.js
+++ b/ambari-web/app/models/stack_service.js
@@ -17,6 +17,7 @@
  */
 
 var App = require('app');
+var stringUtils = require('utils/string_utils');
 require('utils/helper');
 require('models/configs/objects/service_config_category');
 
@@ -179,7 +180,17 @@ App.StackService = DS.Model.extend({
       });
     }
     return configCategories;
-  }.property('serviceName', 'configTypes', 'serviceComponents')
+  }.property('serviceName', 'configTypes', 'serviceComponents'),
+
+  /**
+   * Compare specified version with current service version
+   * @param  {string} version [description]
+   * @return {number} 0 - equal, -1 - less, +1 - more @see stringUtils#compareVersions
+   */
+  compareCurrentVersion: function(version) {
+    var toMinor = this.get('serviceVersion').split('.').slice(0, 2).join('.');
+    return stringUtils.compareVersions(toMinor, version);
+  }
 });
 
 App.StackService.FIXTURES = [];

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/utils/config.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/config.js b/ambari-web/app/utils/config.js
index 665497b..cd09e14 100644
--- a/ambari-web/app/utils/config.js
+++ b/ambari-web/app/utils/config.js
@@ -131,7 +131,7 @@ App.config = Em.Object.create({
     this.set('preDefinedServiceConfigs', allTabs);
   },
 
-  secureConfigs: require('data/HDP2/secure_mapping'),
+  secureConfigs: require('data/configs/wizards/secure_mapping'),
 
   secureConfigsMap: function () {
     var ret = {};
@@ -141,7 +141,7 @@ App.config = Em.Object.create({
     return ret;
   }.property('secureConfigs.[]'),
 
-  kerberosIdentities: require('data/HDP2/kerberos_identities').configProperties,
+  kerberosIdentities: require('data/configs/wizards/kerberos_identities').configProperties,
 
   kerberosIdentitiesMap: function() {
     var map = {};
@@ -177,23 +177,14 @@ App.config = Em.Object.create({
     return baseStackFolder;
   },
 
-  allPreDefinedSiteProperties: function() {
-    var sitePropertiesForCurrentStack = this.preDefinedConfigFile(this.mapCustomStack(), 'site_properties');
-    if (sitePropertiesForCurrentStack) {
-      return sitePropertiesForCurrentStack.configProperties;
-    } else if (App.get('isHadoop23Stack')) {
-      return require('data/HDP2.3/site_properties').configProperties;
-    } else {
-      return require('data/HDP2.2/site_properties').configProperties;
-    }
-  }.property('App.isHadoop23Stack'),
+  allPreDefinedSiteProperties: require('data/configs/site_properties').configProperties,
 
   preDefinedSiteProperties: function () {
     var serviceNames = App.StackService.find().mapProperty('serviceName').concat('MISC');
     return this.get('allPreDefinedSiteProperties').filter(function(p) {
       return serviceNames.contains(p.serviceName);
     });
-  }.property('allPreDefinedSiteProperties'),
+  }.property().volatile(),
 
   /**
    * map of <code>preDefinedSiteProperties</code> provide search by index
@@ -208,14 +199,6 @@ App.config = Em.Object.create({
     return map;
   }.property('preDefinedSiteProperties'),
 
-  preDefinedConfigFile: function(folder, file) {
-    try {
-      return require('data/{0}/{1}'.format(folder, file));
-    } catch (err) {
-      // the file doesn't exist, which might be expected.
-    }
-  },
-
   serviceByConfigTypeMap: function () {
     var ret = {};
     App.StackService.find().forEach(function(s) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/views/common/controls_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/controls_view.js b/ambari-web/app/views/common/controls_view.js
index 1fd5fde..37d7165 100644
--- a/ambari-web/app/views/common/controls_view.js
+++ b/ambari-web/app/views/common/controls_view.js
@@ -1052,11 +1052,12 @@ App.CheckDBConnectionView = Ember.View.extend({
       OOZIE: ['oozie.db.schema.name', 'oozie.service.JPAService.jdbc.username', 'oozie.service.JPAService.jdbc.password', 'oozie.service.JPAService.jdbc.driver', 'oozie.service.JPAService.jdbc.url'],
       HIVE: ['ambari.hive.db.schema.name', 'javax.jdo.option.ConnectionUserName', 'javax.jdo.option.ConnectionPassword', 'javax.jdo.option.ConnectionDriverName', 'javax.jdo.option.ConnectionURL'],
       KERBEROS: ['kdc_hosts'],
-      RANGER: App.get('isHadoop23Stack') ? ['db_user', 'db_password', 'db_name', 'ranger.jpa.jdbc.url', 'ranger.jpa.jdbc.driver'] :
+      RANGER: App.StackService.find('RANGER').compareCurrentVersion('0.5') > -1 ?
+          ['db_user', 'db_password', 'db_name', 'ranger.jpa.jdbc.url', 'ranger.jpa.jdbc.driver'] :
           ['db_user', 'db_password', 'db_name', 'ranger_jdbc_connection_url', 'ranger_jdbc_driver']
     };
     return propertiesMap[this.get('parentView.service.serviceName')];
-  }.property('App.isHadoop23Stack'),
+  }.property(),
   /** @property {Object} propertiesPattern - check pattern according to type of connection properties **/
   propertiesPattern: function() {
     var patterns = {

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/views/main/dashboard/widgets/hbase_links.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/dashboard/widgets/hbase_links.js b/ambari-web/app/views/main/dashboard/widgets/hbase_links.js
index 235f73c..4f2053a 100644
--- a/ambari-web/app/views/main/dashboard/widgets/hbase_links.js
+++ b/ambari-web/app/views/main/dashboard/widgets/hbase_links.js
@@ -26,7 +26,9 @@ App.HBaseLinksView = App.LinkDashboardWidgetView.extend({
 
   model_type: 'hbase',
 
-  port: App.get('isHadoop23Stack') ? '16010' : '60010',
+  port: function() {
+    return App.StackService.find('HBASE').compareCurrentVersion('1.1') > -1 ? '16010' : '60010';
+  }.property(),
 
   componentName: 'HBASE_REGIONSERVER',
 
@@ -54,4 +56,4 @@ App.HBaseLinksView = App.LinkDashboardWidgetView.extend({
     return '';
   }
 
-});
\ No newline at end of file
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/app/views/main/service/reassign/step5_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/service/reassign/step5_view.js b/ambari-web/app/views/main/service/reassign/step5_view.js
index c5fc3c8..3a063b5 100644
--- a/ambari-web/app/views/main/service/reassign/step5_view.js
+++ b/ambari-web/app/views/main/service/reassign/step5_view.js
@@ -18,6 +18,7 @@
 
 
 var App = require('app');
+var stringUtils = require('utils/string_utils');
 
 App.ReassignMasterWizardStep5View = Em.View.extend({
 
@@ -28,7 +29,7 @@ App.ReassignMasterWizardStep5View = Em.View.extend({
       return '';
     }
     var
-      atsDir = App.get('isHadoop23Stack') ? "timeline-state-store.ldb" : "leveldb-timeline-store.ldb",
+      atsDir = App.StackService.find('YARN').compareCurrentVersion('2.7') > -1 ? "timeline-state-store.ldb" : "leveldb-timeline-store.ldb",
       componentDir = this.get('controller.content.componentDir') || '',
       componentDirCmd = componentDir.replace(/,/g, ' '),
       sourceHost = this.get('controller.content.reassignHosts.source'),

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/copy-pluggable-stack-resources.sh
----------------------------------------------------------------------
diff --git a/ambari-web/copy-pluggable-stack-resources.sh b/ambari-web/copy-pluggable-stack-resources.sh
index 4dc9205..9109583 100644
--- a/ambari-web/copy-pluggable-stack-resources.sh
+++ b/ambari-web/copy-pluggable-stack-resources.sh
@@ -45,4 +45,4 @@ if [ -f "$resources_dir/messages.js" ]
 then
   echo cp $resources_dir/messages.js app/messages.js
   cp $resources_dir/messages.js app/messages.js
-fi
\ No newline at end of file
+fi

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/test/controllers/main/host/details_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/host/details_test.js b/ambari-web/test/controllers/main/host/details_test.js
index 154d0b2..9a56ab2 100644
--- a/ambari-web/test/controllers/main/host/details_test.js
+++ b/ambari-web/test/controllers/main/host/details_test.js
@@ -2557,12 +2557,16 @@ describe('App.MainHostDetailsController', function () {
         callback();
       });
       sinon.stub(controller, 'loadConfigs', Em.K);
+      sinon.stub(App.StackService, 'find').returns({
+        compareCurrentVersion: function() {}
+      });
     });
 
     afterEach(function () {
       controller.removeHostComponentModel.restore();
       controller.isServiceMetricsLoaded.restore();
       controller.loadConfigs.restore();
+      App.StackService.find.restore();
     });
 
     it('ZOOKEEPER_SERVER component', function () {
@@ -2658,12 +2662,16 @@ describe('App.MainHostDetailsController', function () {
       sinon.stub(controller, 'loadConfigs');
       sinon.stub(controller, 'isServiceMetricsLoaded', Em.clb);
       this.stub = sinon.stub(App.router, 'get');
+      sinon.stub(App.StackService, 'find').returns({
+        compareCurrentVersion: function() {}
+      })
     });
     afterEach(function () {
       controller.loadConfigs.restore();
       controller.removeObserver.restore();
       controller.isServiceMetricsLoaded.restore();
       this.stub.restore();
+      App.StackService.find.restore();
     });
 
     it('No operations of ZOOKEEPER_SERVER', function () {
@@ -3484,32 +3492,43 @@ describe('App.MainHostDetailsController', function () {
       this.serviceMock = sinon.stub(App.Service, 'find');
       sinon.stub(controller, 'loadConfigs');
       this.mock = sinon.stub(App, 'get')
+      this.stackServiceMock = sinon.stub(App.StackService, 'find');
     });
     afterEach(function () {
       this.serviceMock.restore();
       this.mock.restore();
       controller.loadConfigs.restore();
+      this.stackServiceMock.restore();
     });
-    it("storm not installed, hadoop stack is 2.2", function () {
+    it("should not update configs when storm not installed, storm version >= 0.10", function () {
       this.serviceMock.returns(Em.Object.create({
         isLoaded: false
       }));
       this.mock.returns(false);
+      this.stackServiceMock.returns(App.StackService.createRecord({
+        serviceVersion: '0.10.1.1'
+      }));
       controller.updateStormConfigs();
       expect(controller.loadConfigs.called).to.be.false;
     });
-    it("storm installed, hadoop stack is 2.2", function () {
+    it("should not update configs when storm installed, storm version is less 0.10", function () {
       this.serviceMock.returns(Em.Object.create({
         isLoaded: true
       }));
+      this.stackServiceMock.returns(App.StackService.createRecord({
+        serviceVersion: '0.9.1.1'
+      }));
       this.mock.returns(false);
       controller.updateStormConfigs();
       expect(controller.loadConfigs.called).to.be.false;
     });
-    it("storm installed, hadoop stack is 2.3", function () {
+    it("should update configs when storm installed, storm version >= 0.10", function () {
       this.serviceMock.returns(Em.Object.create({
         isLoaded: true
       }));
+      this.stackServiceMock.returns(App.StackService.createRecord({
+        serviceVersion: '0.10.1.1'
+      }));
       this.mock.returns(true);
       controller.updateStormConfigs();
       expect(controller.loadConfigs.calledWith('loadStormConfigs')).to.be.true;

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/test/data/HDP2.2/site_properties_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/data/HDP2.2/site_properties_test.js b/ambari-web/test/data/HDP2.2/site_properties_test.js
deleted file mode 100644
index 14599b3..0000000
--- a/ambari-web/test/data/HDP2.2/site_properties_test.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * 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.
- */
-
-require('utils/helper');
-require('data/HDP2/gluster_fs_properties');
-var siteProperties = require('data/HDP2.2/site_properties').configProperties;
-
-describe('hdp2SiteProperties', function () {
-  /**
-   * @stackProperties: All the properties that are derived from stack definition
-   */
-  var stackProperties = siteProperties.filter(function(item){
-    return !(item.isRequiredByAgent === false || item.category === 'Ambari Principals')
-  });
-
-  stackProperties.forEach(function(siteProperty){
-    /**
-     * Following config attributes are stack driven and should be defined in the stack metainfo instead of ambari-web site-properties file
-     * isVisible
-     * isOverridable
-     * value
-     * recommendedValue
-     * isReconfigurable
-     * isRequired
-     * displayName
-     * description
-     * showLabel
-     * unit
-     */
-    describe('Check attributes of "{0}/{1}". Stack driven attributes should be undefined '.format(siteProperty.filename, siteProperty.name), function () {
-      ['isVisible', 'value', 'recommendedValue', 'description', 'isReconfigurable', 'isRequired', 'displayName', 'showLabel', 'unit'].forEach(function (p) {
-        it(p, function () {
-          expect(siteProperty[p]).to.not.exist;
-        });
-      });
-    });
-
-    /**
-     * displayTypes <code>supportTextConnection<code> and <code>radio button<code>
-     * can be used as exception. Other displayTypes values should be used in stack definition
-     */
-    it('Check attributes of "{0}/{1}". Display type value {2} should be described in stack '.format(siteProperty.filename, siteProperty.name, siteProperty.displayType), function () {
-      expect(siteProperty.displayType).to.match(/undefined|supportTextConnection|radio button/);
-    });
-
-    /**
-     * Following config attributes uniquely represent a config property
-     * name
-     * filename
-     */
-    describe('Check primary attributes of "{0}/{1}". Attributes that uniquely represent a property should be defined '.format(siteProperty.filename, siteProperty.name), function () {
-      it('name', function () {
-        expect(siteProperty.name).to.not.equal(undefined);
-      });
-      it('filename', function () {
-        expect(siteProperty.filename).to.not.equal(undefined);
-      });
-    });
-  });
-
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/test/data/HDP2.3/site_properties_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/data/HDP2.3/site_properties_test.js b/ambari-web/test/data/HDP2.3/site_properties_test.js
deleted file mode 100644
index 6ce9c17..0000000
--- a/ambari-web/test/data/HDP2.3/site_properties_test.js
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * 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.
- */
-
-require('utils/helper');
-require('data/HDP2/gluster_fs_properties');
-var siteProperties = require('data/HDP2.3/site_properties').configProperties;
-
-describe('hdp2SiteProperties', function () {
-  /**
-   * @stackProperties: All the properties that are derived from stack definition
-   */
-  var stackProperties = siteProperties.filter(function(item){
-    return !(item.isRequiredByAgent === false || item.category === 'Ambari Principals')
-  });
-
-  stackProperties.forEach(function(siteProperty){
-    /**
-     * Following config attributes are stack driven and should be defined in the stack metainfo instead of ambari-web site-properties file
-     * isVisible
-     * isOverridable
-     * value
-     * recommendedValue
-     * isReconfigurable
-     * isRequired
-     * displayName
-     * description
-     * showLabel
-     * unit
-     */
-    describe('Check attributes of "{0}/{1}". Stack driven attributes should be undefined '.format(siteProperty.filename, siteProperty.name), function () {
-      ['isVisible', 'value', 'recommendedValue', 'description', 'isReconfigurable', 'isRequired', 'displayName', 'showLabel', 'unit'].forEach(function (p) {
-        it(p, function () {
-          expect(siteProperty[p]).to.not.exist;
-        });
-      });
-    });
-
-
-    /**
-     * displayTypes <code>supportTextConnection<code> and <code>radio button<code>
-     * can be used as exception. Other displayTypes values should be used in stack definition
-     */
-    it('Check attributes of "{0}/{1}". Display type value {2} should be described in stack '.format(siteProperty.filename, siteProperty.name, siteProperty.displayType), function () {
-      expect(siteProperty.displayType).to.match(/undefined|supportTextConnection|radio button/);
-    });
-
-    /**
-     * Following config attributes uniquely represent a config property
-     * name
-     * filename
-     */
-    describe('Check primary attributes of "{0}/{1}". Attributes that uniquely represent a property should be defined '.format(siteProperty.filename, siteProperty.name), function () {
-      it('name', function () {
-        expect(siteProperty.name).to.not.equal(undefined);
-      });
-      it('filename', function () {
-        expect(siteProperty.filename).to.not.equal(undefined);
-      });
-    });
-  });
-
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/test/data/HDP2/secure_mapping_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/data/HDP2/secure_mapping_test.js b/ambari-web/test/data/HDP2/secure_mapping_test.js
deleted file mode 100644
index 766243f..0000000
--- a/ambari-web/test/data/HDP2/secure_mapping_test.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * 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.
- */
-
-require('utils/helper');
-var mappedHdp2Properties = require('data/HDP2/secure_mapping');
-
-describe('hdp2SiteMapping', function () {
-
-  // All mapped properties should have value of string type
-  mappedHdp2Properties.forEach(function(mappedProperty){
-    it('Value of "{0}" should be string'.format(mappedProperty.name), function () {
-      expect(mappedProperty.value).to.be.a('string');
-    });
-  });
-  mappedHdp2Properties.forEach(function(mappedProperty){
-    it('Value of "{0}" should have serviceName and filename attribute'.format(mappedProperty.name), function () {
-      expect(mappedProperty).to.have.property('serviceName');
-      expect(mappedProperty).to.have.property('filename');
-    });
-  });
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/test/data/HDP2/site_properties_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/data/HDP2/site_properties_test.js b/ambari-web/test/data/HDP2/site_properties_test.js
deleted file mode 100644
index c8b7bbc..0000000
--- a/ambari-web/test/data/HDP2/site_properties_test.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * 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.
- */
-
-require('utils/helper');
-require('data/HDP2/gluster_fs_properties');
-var siteProperties = require('data/HDP2/site_properties').configProperties;
-
-describe('hdp2SiteProperties', function () {
-  /**
-   * @stackProperties: All the properties that are derived from stack definition
-   */
-  var stackProperties = siteProperties.filter(function(item){
-    return !(item.isRequiredByAgent === false || item.category === 'Ambari Principals')
-  });
-
-  stackProperties.forEach(function(siteProperty){
-    /**
-     * Following config attributes are stack driven and should be defined in the stack metainfo instead of ambari-web site-properties file
-     * isVisible
-     * isOverridable
-     * value
-     * recommendedValue
-     * isReconfigurable
-     * isRequired
-     * displayName
-     * description
-     * showLabel
-     * unit
-     */
-    describe('Check attributes of "{0}/{1}". Stack driven attributes should be undefined '.format(siteProperty.filename, siteProperty.name), function () {
-      ['isVisible', 'value', 'recommendedValue', 'description', 'isReconfigurable', 'isRequired', 'displayName', 'showLabel', 'unit'].forEach(function (p) {
-        it(p, function () {
-          expect(siteProperty[p]).to.not.exist;
-        });
-      });
-    });
-
-    /**
-     * displayTypes <code>supportTextConnection<code> and <code>radio button<code>
-     * can be used as exception. Other displayTypes values should be used in stack definition
-     */
-    it('Check attributes of "{0}/{1}". Display type value {2} should be described in stack '.format(siteProperty.filename, siteProperty.name, siteProperty.displayType), function () {
-      expect(siteProperty.displayType).to.match(/undefined|supportTextConnection|radio button/);
-    });
-
-    /**
-     * Following config attributes uniquely represent a config property
-     * name
-     * filename
-     */
-    describe('Check primary attributes of "{0}/{1}". Attributes that uniquely represent a property should be defined '.format(siteProperty.filename, siteProperty.name), function () {
-      it('name', function () {
-        expect(siteProperty.name).to.not.equal(undefined);
-      });
-      it('filename', function () {
-        expect(siteProperty.filename).to.not.equal(undefined);
-      });
-    });
-  });
-
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/test/data/configs/site_properties_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/data/configs/site_properties_test.js b/ambari-web/test/data/configs/site_properties_test.js
new file mode 100644
index 0000000..dcd70b1
--- /dev/null
+++ b/ambari-web/test/data/configs/site_properties_test.js
@@ -0,0 +1,76 @@
+/**
+ * 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.
+ */
+
+require('utils/helper');
+var siteProperties = require('data/configs/site_properties').configProperties;
+
+describe('data configs site_properties', function () {
+  /**
+   * @stackProperties: All the properties that are derived from stack definition
+   */
+  var stackProperties = siteProperties.filter(function(item){
+    return !(item.isRequiredByAgent === false || item.category === 'Ambari Principals')
+  });
+
+  stackProperties.forEach(function(siteProperty){
+    /**
+     * Following config attributes are stack driven and should be defined in the stack metainfo instead of ambari-web site-properties file
+     * isVisible
+     * isOverridable
+     * value
+     * recommendedValue
+     * isReconfigurable
+     * isRequired
+     * displayName
+     * description
+     * showLabel
+     * unit
+     */
+    describe('Check attributes of "{0}/{1}". Stack driven attributes should be undefined '.format(siteProperty.filename, siteProperty.name), function () {
+      ['isVisible', 'value', 'recommendedValue', 'description', 'isReconfigurable', 'isRequired', 'displayName', 'showLabel', 'unit'].forEach(function (p) {
+        it(p, function () {
+          expect(siteProperty[p]).to.not.exist;
+        });
+      });
+    });
+
+
+    /**
+     * displayTypes <code>supportTextConnection<code> and <code>radio button<code>
+     * can be used as exception. Other displayTypes values should be used in stack definition
+     */
+    it('Check attributes of "{0}/{1}". Display type value {2} should be described in stack '.format(siteProperty.filename, siteProperty.name, siteProperty.displayType), function () {
+      expect(siteProperty.displayType).to.match(/undefined|supportTextConnection|radio button/);
+    });
+
+    /**
+     * Following config attributes uniquely represent a config property
+     * name
+     * filename
+     */
+    describe('Check primary attributes of "{0}/{1}". Attributes that uniquely represent a property should be defined '.format(siteProperty.filename, siteProperty.name), function () {
+      it('name', function () {
+        expect(siteProperty.name).to.not.equal(undefined);
+      });
+      it('filename', function () {
+        expect(siteProperty.filename).to.not.equal(undefined);
+      });
+    });
+  });
+
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/test/data/configs/wizards/secure_mapping_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/data/configs/wizards/secure_mapping_test.js b/ambari-web/test/data/configs/wizards/secure_mapping_test.js
new file mode 100644
index 0000000..dacad35
--- /dev/null
+++ b/ambari-web/test/data/configs/wizards/secure_mapping_test.js
@@ -0,0 +1,36 @@
+/**
+ * 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.
+ */
+
+require('utils/helper');
+var mappedProperties = require('data/configs/wizards/secure_mapping');
+
+describe('secure mapping properties', function () {
+
+  // All mapped properties should have value of string type
+  mappedProperties.forEach(function(mappedProperty){
+    it('Value of "{0}" should be string'.format(mappedProperty.name), function () {
+      expect(mappedProperty.value).to.be.a('string');
+    });
+  });
+  mappedProperties.forEach(function(mappedProperty){
+    it('Value of "{0}" should have serviceName and filename attribute'.format(mappedProperty.name), function () {
+      expect(mappedProperty).to.have.property('serviceName');
+      expect(mappedProperty).to.have.property('filename');
+    });
+  });
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ce9e3b6/ambari-web/test/utils/config_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/utils/config_test.js b/ambari-web/test/utils/config_test.js
index 5012caa..8c450ed 100644
--- a/ambari-web/test/utils/config_test.js
+++ b/ambari-web/test/utils/config_test.js
@@ -199,49 +199,7 @@ describe('App.config', function() {
     });
   });
 
-  describe('#mapCustomStack', function() {
-    before(function() {
-      setups.setupStackVersion(this, 'HDF-2.2');
-    });
-
-    it('versions of HDF > 2.0 should map with HDP 2.3 stack based property definitions', function() {
-      var baseStackFolder = App.config.mapCustomStack();
-      expect(baseStackFolder).to.equal("HDP2.3");
-    });
-
-    it('versions of HDF = 2.0 should map with HDP 2.3 stack based property definitions', function() {
-      App.set('currentStackVersion', 'HDF-2.0');
-      var baseStackFolder = App.config.mapCustomStack();
-      expect(baseStackFolder).to.equal("HDP2.3");
-    });
-
-
-    after(function() {
-      setups.restoreStackVersion(this);
-    });
-  });
-
-  describe('#preDefinedConfigFile', function() {
-    before(function() {
-      setups.setupStackVersion(this, 'BIGTOP-0.8');
-    });
-
-    it('bigtop site properties should be ok.', function() {
-      var bigtopSiteProperties = App.config.preDefinedConfigFile('BIGTOP', 'site_properties');
-      expect(bigtopSiteProperties).to.be.ok;
-    });
-
-    it('a non-existing file should not be ok.', function () {
-      var notExistingSiteProperty = App.config.preDefinedConfigFile('notExisting');
-      expect(notExistingSiteProperty).to.not.be.ok;
-    });
-
-    after(function() {
-      setups.restoreStackVersion(this);
-    });
-  });
-
-  describe('#preDefinedSiteProperties-bigtop', function () {
+  describe.skip('#preDefinedSiteProperties-bigtop', function () {
     before(function() {
       setups.setupStackVersion(this, 'BIGTOP-0.8');
     });
@@ -326,7 +284,7 @@ describe('App.config', function() {
       expect(Em.keys(miscCategory.get('configTypes'))).to.eql(['cluster-env', 'hadoop-env', 'oozie-env']);
     });
   });
-  
+
   describe('#isManagedMySQLForHiveAllowed', function () {
 
     var cases = [


[02/47] ambari git commit: AMBARI-18836. Remove group readable from hdfs headless keytab (Shi Wang via rlevas)

Posted by jo...@apache.org.
AMBARI-18836. Remove group readable from hdfs headless keytab (Shi Wang via rlevas)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: 38076327525986b780942f33eff01d2de4a70ce2
Parents: cfc1612
Author: Shi Wang <cn...@gmail.com>
Authored: Mon Nov 21 14:03:32 2016 -0500
Committer: Robert Levas <rl...@hortonworks.com>
Committed: Mon Nov 21 14:03:48 2016 -0500

----------------------------------------------------------------------
 .../common-services/HDFS/2.1.0.2.0/kerberos.json          |  2 +-
 .../HIVE/0.12.0.2.0/package/scripts/webhcat.py            | 10 ----------
 .../resources/stacks/HDP/2.5/services/HDFS/kerberos.json  |  2 +-
 3 files changed, 2 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/38076327/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/kerberos.json b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/kerberos.json
index e8c96cb..f30c9e4 100644
--- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/kerberos.json
@@ -56,7 +56,7 @@
                 },
                 "group": {
                   "name": "${cluster-env/user_group}",
-                  "access": "r"
+                  "access": ""
                 },
                 "configuration": "hadoop-env/hdfs_user_keytab"
               }

http://git-wip-us.apache.org/repos/asf/ambari/blob/38076327/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/webhcat.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/webhcat.py b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/webhcat.py
index a7feb60..00b057c 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/webhcat.py
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/webhcat.py
@@ -70,16 +70,6 @@ def webhcat():
             group=params.user_group,
             cd_access="a")
 
-  if params.security_enabled:
-    kinit_if_needed = format("{kinit_path_local} -kt {hdfs_user_keytab} {hdfs_principal_name};")
-  else:
-    kinit_if_needed = ""
-
-  if kinit_if_needed:
-    Execute(kinit_if_needed,
-            user=params.webhcat_user,
-            path='/bin'
-    )
 
   # Replace _HOST with hostname in relevant principal-related properties
   webhcat_site = params.config['configurations']['webhcat-site'].copy()

http://git-wip-us.apache.org/repos/asf/ambari/blob/38076327/ambari-server/src/main/resources/stacks/HDP/2.5/services/HDFS/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/HDFS/kerberos.json b/ambari-server/src/main/resources/stacks/HDP/2.5/services/HDFS/kerberos.json
index 974a69c..9000e95 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/services/HDFS/kerberos.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/HDFS/kerberos.json
@@ -66,7 +66,7 @@
                 },
                 "group": {
                   "name": "${cluster-env/user_group}",
-                  "access": "r"
+                  "access": ""
                 },
                 "configuration": "hadoop-env/hdfs_user_keytab"
               }


[06/47] ambari git commit: AMBARI-18937. Allow generic Service Upgrade Packs for all targets (ncole)

Posted by jo...@apache.org.
AMBARI-18937. Allow generic Service Upgrade Packs for all targets (ncole)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: 7d07b71de7019efaaa04fe8c09548cdc604cea60
Parents: ef91365
Author: Nate Cole <nc...@hortonworks.com>
Authored: Mon Nov 21 15:24:59 2016 -0500
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Mon Nov 21 16:11:21 2016 -0500

----------------------------------------------------------------------
 .../apache/ambari/server/stack/StackModule.java | 101 +++++++++++++++++--
 .../ambari/server/state/stack/UpgradePack.java  |  12 ++-
 .../stacks/HDP/2.3/upgrades/upgrade-2.5.xml     |   4 +-
 .../stacks/HDP/2.3/upgrades/upgrade-2.6.xml     |   4 +-
 .../stacks/HDP/2.4/upgrades/upgrade-2.5.xml     |   4 +-
 .../stacks/HDP/2.4/upgrades/upgrade-2.6.xml     |   4 +-
 .../src/main/resources/upgrade-pack.xsd         |  10 +-
 .../server/state/stack/UpgradePackTest.java     |  22 ++++
 .../GANGLIA/upgrades/HDP/rolling-upgrade.xml    |  27 +++++
 9 files changed, 168 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/7d07b71d/ambari-server/src/main/java/org/apache/ambari/server/stack/StackModule.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/stack/StackModule.java b/ambari-server/src/main/java/org/apache/ambari/server/stack/StackModule.java
index d9eaf27..ce606de 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/stack/StackModule.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/stack/StackModule.java
@@ -46,16 +46,19 @@ import org.apache.ambari.server.state.stack.ServiceMetainfoXml;
 import org.apache.ambari.server.state.stack.StackMetainfoXml;
 import org.apache.ambari.server.state.stack.UpgradePack;
 import org.apache.ambari.server.state.stack.upgrade.Grouping;
+import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
+import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Function;
-import com.google.common.collect.ListMultimap;
 import com.google.common.collect.ImmutableListMultimap;
 import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.ListMultimap;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Multimaps;
 
+
 /**
  * Stack module which provides all functionality related to parsing and fully
  * resolving stacks from the stack definition.
@@ -834,6 +837,7 @@ public class StackModule extends BaseModule<StackModule, StackInfo> implements V
     if (configPack == null) {
       return;
     }
+
     for (ServiceModule module : serviceModules.values()) {
       File upgradesFolder = module.getModuleInfo().getServiceUpgradesFolder();
       if (upgradesFolder != null) {
@@ -869,12 +873,17 @@ public class StackModule extends BaseModule<StackModule, StackInfo> implements V
   private UpgradePack getServiceUpgradePack(UpgradePack pack, File upgradesFolder) throws AmbariException {
     File stackFolder = new File(upgradesFolder, stackInfo.getName());
     File versionFolder = new File(stackFolder, stackInfo.getVersion());
+    // !!! relies on the service upgrade pack filename being named the exact same
     File servicePackFile = new File(versionFolder, pack.getName() + ".xml");
+
     LOG.info("Service folder: " + servicePackFile.getAbsolutePath());
-    if (!servicePackFile.exists()) {
-      return null;
+    if (servicePackFile.exists()) {
+      return parseServiceUpgradePack(pack, servicePackFile);
+    } else {
+      UpgradePack child = findServiceUpgradePack(pack, stackFolder);
+
+      return null == child ? null : parseServiceUpgradePack(pack, child);
     }
-    return parseServiceUpgradePack(pack, servicePackFile);
   }
 
   /**
@@ -882,6 +891,7 @@ public class StackModule extends BaseModule<StackModule, StackInfo> implements V
    * for any service which specifies its own upgrade.
    */
   private void mergeUpgradePack(UpgradePack pack, List<UpgradePack> servicePacks) throws AmbariException {
+
     List<Grouping> originalGroups = pack.getAllGroups();
     Map<String, List<Grouping>> allGroupMap = new HashMap<>();
     for (Grouping group : originalGroups) {
@@ -889,8 +899,21 @@ public class StackModule extends BaseModule<StackModule, StackInfo> implements V
       list.add(group);
       allGroupMap.put(group.name, list);
     }
+
     for (UpgradePack servicePack : servicePacks) {
       for (Grouping group : servicePack.getAllGroups()) {
+
+        /*
+         !!! special case where the service pack is targeted for any version.  When
+         a service UP targets to run after another group, check to make sure that the
+         base UP contains the group.
+         */
+        if (servicePack.isAllTarget() && !allGroupMap.keySet().contains(group.addAfterGroup)) {
+          LOG.warn("Service Upgrade Pack specified after-group of {}, but that is not found in {}",
+              group.addAfterGroup, StringUtils.join(allGroupMap.keySet(), ','));
+          continue;
+        }
+
         if (allGroupMap.containsKey(group.name)) {
           List<Grouping> list = allGroupMap.get(group.name);
           Grouping first = list.get(0);
@@ -906,8 +929,7 @@ public class StackModule extends BaseModule<StackModule, StackInfo> implements V
           else {
             list.add(group);
           }
-        }
-        else {
+        } else {
           List<Grouping> list = new ArrayList<>();
           list.add(group);
           allGroupMap.put(group.name, list);
@@ -934,15 +956,17 @@ public class StackModule extends BaseModule<StackModule, StackInfo> implements V
    */
   private void orderGroups(List<Grouping> groups, Map<String, Grouping> mergedGroupMap) throws AmbariException {
     Map<String, List<Grouping>> skippedGroups = new HashMap<>();
+
     for (Map.Entry<String, Grouping> entry : mergedGroupMap.entrySet()) {
-      String key = entry.getKey();
       Grouping group = entry.getValue();
+
       if (!groups.contains(group)) {
         boolean added = addGrouping(groups, group);
         if (added) {
           addSkippedGroup(groups, skippedGroups, group);
         } else {
           List<Grouping> tmp = null;
+
           // store the group until later
           if (skippedGroups.containsKey(group.addAfterGroup)) {
             tmp = skippedGroups.get(group.addAfterGroup);
@@ -954,6 +978,7 @@ public class StackModule extends BaseModule<StackModule, StackInfo> implements V
         }
       }
     }
+
     if (!skippedGroups.isEmpty()) {
       throw new AmbariException("Missing groups: " + skippedGroups.keySet());
     }
@@ -999,6 +1024,50 @@ public class StackModule extends BaseModule<StackModule, StackInfo> implements V
   }
 
   /**
+   * Finds an upgrade pack that:
+   * <ul>
+   *   <li>Is found in the $SERVICENAME/upgrades/$STACKNAME folder</li>
+   *   <li>Matches the same {@link UpgradeType#getType()}as the {@code base} upgrade pack</li>
+   *   <li>Has the {@link UpgradePack#getTarget()} value equals to "*"</li>
+   *   <li>Has the {@link UpgradePack#getTargetStack()} value equals to "*"</li>
+   * </ul>
+   * This method will not attempt to resolve the "most correct" upgrade pack.  For this
+   * feature to work, there should be only one upgrade pack per type.  If more specificity
+   * is required, then follow the convention of $SERVICENAME/upgrades/$STACKNAME/$STACKVERSION/$BASE_FILE_NAME.xml
+   *
+   * @param base the base upgrade pack for a stack
+   * @param upgradeStackDirectory service directory that contains stack upgrade files.
+   * @return an upgrade pack that matches {@code base}
+   */
+  private UpgradePack findServiceUpgradePack(UpgradePack base, File upgradeStackDirectory) {
+    if (!upgradeStackDirectory.exists() || !upgradeStackDirectory.isDirectory()) {
+      return null;
+    }
+
+    File[] upgradeFiles = upgradeStackDirectory.listFiles(StackDirectory.XML_FILENAME_FILTER);
+    if (0 == upgradeFiles.length) {
+      return null;
+    }
+
+    for (File f : upgradeFiles) {
+      try {
+        UpgradePack upgradePack = unmarshaller.unmarshal(UpgradePack.class, f);
+
+        // !!! if the type is the same and the target is "*", then it's good to merge
+        if (upgradePack.isAllTarget() && upgradePack.getType() == base.getType()) {
+          return upgradePack;
+        }
+
+      } catch (Exception e) {
+        LOG.warn("File {} does not appear to be an upgrade pack and will be skipped ({})",
+            f.getAbsolutePath(), e.getMessage());
+      }
+    }
+
+    return null;
+  }
+
+  /**
    * Parses the service specific upgrade file and merges the none order elements
    * (prerequisite check and processing sections).
    */
@@ -1011,12 +1080,24 @@ public class StackModule extends BaseModule<StackModule, StackInfo> implements V
       throw new AmbariException("Unable to parse service upgrade file at location: " + serviceFile.getAbsolutePath(), e);
     }
 
-    parent.mergePrerequisiteChecks(pack);
-    parent.mergeProcessing(pack);
+    return parseServiceUpgradePack(parent, pack);
+  }
 
-    return pack;
+  /**
+   * Places prerequisite checks and processing objects onto the parent upgrade pack.
+   *
+   * @param parent  the parent upgrade pack
+   * @param child   the parsed child upgrade pack
+   * @return the child upgrade pack
+   */
+  private UpgradePack parseServiceUpgradePack(UpgradePack parent, UpgradePack child) {
+    parent.mergePrerequisiteChecks(child);
+    parent.mergeProcessing(child);
+
+    return child;
   }
 
+
   /**
    * Process repositories associated with the stack.
    * @throws AmbariException if unable to fully process the stack repositories

http://git-wip-us.apache.org/repos/asf/ambari/blob/7d07b71d/ambari-server/src/main/java/org/apache/ambari/server/state/stack/UpgradePack.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/UpgradePack.java b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/UpgradePack.java
index edf5c89..aa97fa3 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/stack/UpgradePack.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/stack/UpgradePack.java
@@ -52,6 +52,8 @@ import org.slf4j.LoggerFactory;
 @XmlAccessorType(XmlAccessType.FIELD)
 public class UpgradePack {
 
+  private static final String ALL_VERSIONS = "*";
+
   private static Logger LOG = LoggerFactory.getLogger(UpgradePack.class);
 
   /**
@@ -315,7 +317,6 @@ public class UpgradePack {
   public boolean canBeApplied(String targetVersion){
     // check that upgrade pack can be applied to selected stack
     // converting 2.2.*.* -> 2\.2(\.\d+)?(\.\d+)?(-\d+)?
-
     String regexPattern = getTarget().replaceAll("\\.", "\\\\."); // . -> \.
     regexPattern = regexPattern.replaceAll("\\\\\\.\\*", "(\\\\\\.\\\\d+)?"); // \.* -> (\.\d+)?
     regexPattern = regexPattern.concat("(-\\d+)?");
@@ -453,6 +454,15 @@ public class UpgradePack {
   }
 
   /**
+   * @return {@code true} if the upgrade targets any version or stack.  Both
+   * {@link #target} and {@link #targetStack} must equal "*"
+   */
+  public boolean isAllTarget() {
+    return ALL_VERSIONS.equals(target) && ALL_VERSIONS.equals(targetStack);
+  }
+
+
+  /**
    * A service definition that holds a list of components in the 'order' element.
    */
   public static class OrderService {

http://git-wip-us.apache.org/repos/asf/ambari/blob/7d07b71d/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.5.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.5.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.5.xml
index a838fc7..e675633 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.5.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.5.xml
@@ -421,7 +421,7 @@
       </execute-stage>
     </group>
 
-    <group xsi:type="stop" name="STOP_STORM" title="Stop Storm Services">
+    <group xsi:type="stop" name="STOP_STORM_UPGRADE" title="Stop Storm Services">
       <direction>UPGRADE</direction>
       <service-check>false</service-check>
       <skippable>true</skippable>
@@ -443,7 +443,7 @@
       </service>
     </group>
 
-    <group xsi:type="stop" name="STOP_STORM" title="Stop Storm Services">
+    <group xsi:type="stop" name="STOP_STORM_DOWNGRADE" title="Stop Storm Services">
       <direction>DOWNGRADE</direction>
       <service-check>false</service-check>
       <skippable>true</skippable>

http://git-wip-us.apache.org/repos/asf/ambari/blob/7d07b71d/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.6.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.6.xml b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.6.xml
index a01996a..7d4cfc9 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.6.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.6.xml
@@ -422,7 +422,7 @@
       </execute-stage>
     </group>
 
-    <group xsi:type="stop" name="STOP_STORM" title="Stop Storm Services">
+    <group xsi:type="stop" name="STOP_STORM_UPGRADE" title="Stop Storm Services">
       <direction>UPGRADE</direction>
       <service-check>false</service-check>
       <skippable>true</skippable>
@@ -444,7 +444,7 @@
       </service>
     </group>
 
-    <group xsi:type="stop" name="STOP_STORM" title="Stop Storm Services">
+    <group xsi:type="stop" name="STOP_STORM_DOWNGRADE" title="Stop Storm Services">
       <direction>DOWNGRADE</direction>
       <service-check>false</service-check>
       <skippable>true</skippable>

http://git-wip-us.apache.org/repos/asf/ambari/blob/7d07b71d/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.5.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.5.xml b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.5.xml
index 17be4a8..effdda2 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.5.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.5.xml
@@ -406,7 +406,7 @@
       </execute-stage>
     </group>
 
-    <group xsi:type="stop" name="STOP_STORM" title="Stop Storm Services">
+    <group xsi:type="stop" name="STOP_STORM_UPGRADE" title="Stop Storm Services">
       <direction>UPGRADE</direction>
       <service-check>false</service-check>
       <skippable>true</skippable>
@@ -428,7 +428,7 @@
       </service>
     </group>
 
-    <group xsi:type="stop" name="STOP_STORM" title="Stop Storm Services">
+    <group xsi:type="stop" name="STOP_STORM_DOWNGRADE" title="Stop Storm Services">
       <direction>DOWNGRADE</direction>
       <service-check>false</service-check>
       <skippable>true</skippable>

http://git-wip-us.apache.org/repos/asf/ambari/blob/7d07b71d/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.6.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.6.xml b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.6.xml
index f520faf..31e72a1 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.6.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.6.xml
@@ -411,7 +411,7 @@
       </execute-stage>
     </group>
 
-    <group xsi:type="stop" name="STOP_STORM" title="Stop Storm Services">
+    <group xsi:type="stop" name="STOP_STORM_UPGRADE" title="Stop Storm Services">
       <direction>UPGRADE</direction>
       <service-check>false</service-check>
       <skippable>true</skippable>
@@ -433,7 +433,7 @@
       </service>
     </group>
 
-    <group xsi:type="stop" name="STOP_STORM" title="Stop Storm Services">
+    <group xsi:type="stop" name="STOP_STORM_DOWNGRADE" title="Stop Storm Services">
       <direction>DOWNGRADE</direction>
       <service-check>false</service-check>
       <skippable>true</skippable>

http://git-wip-us.apache.org/repos/asf/ambari/blob/7d07b71d/ambari-server/src/main/resources/upgrade-pack.xsd
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/upgrade-pack.xsd b/ambari-server/src/main/resources/upgrade-pack.xsd
index 2871f05..45cf5fa 100644
--- a/ambari-server/src/main/resources/upgrade-pack.xsd
+++ b/ambari-server/src/main/resources/upgrade-pack.xsd
@@ -392,7 +392,15 @@
         <xs:element name="type" type="upgrade-kind-type" />
         <xs:element name="prerequisite-checks" type="prerequisite-check-type" minOccurs="0" />
         <xs:element name="upgrade-path" type="upgrade-path-type" minOccurs="0" /> 
-        <xs:element name="order" type="order-type" />
+        <xs:element name="order" type="order-type">
+          <xs:unique name="unique-by-group">
+            <xs:annotation>
+              <xs:documentation>Ensures that the element "processing" does not have duplicate services</xs:documentation>
+            </xs:annotation>
+            <xs:selector xpath="group" />
+            <xs:field xpath="@name" />
+          </xs:unique>
+        </xs:element>
         <xs:element name="processing" type="processing-type">
           <xs:unique name="unique-by-service">
             <xs:annotation>

http://git-wip-us.apache.org/repos/asf/ambari/blob/7d07b71d/ambari-server/src/test/java/org/apache/ambari/server/state/stack/UpgradePackTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/UpgradePackTest.java b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/UpgradePackTest.java
index dde7ffa..8f9f791 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/state/stack/UpgradePackTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/state/stack/UpgradePackTest.java
@@ -18,6 +18,7 @@
 package org.apache.ambari.server.state.stack;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
@@ -570,6 +571,27 @@ public class UpgradePackTest {
 
     Map<String, Map<String, ProcessingComponent>> tasks = upgradePack.getTasks();
     assertTrue(tasks.containsKey("HBASE"));
+
+    // !!! generalized upgrade pack shouldn't be in this
+    boolean found = false;
+    for (Grouping grouping : upgradePack.getAllGroups()) {
+      if (grouping.name.equals("GANGLIA_UPGRADE")) {
+        found = true;
+        break;
+      }
+    }
+    assertFalse(found);
+
+    // !!! test merge of a generalized upgrade pack
+    upgradePack = upgrades.get("upgrade_test_conditions");
+    assertNotNull(upgradePack);
+    for (Grouping grouping : upgradePack.getAllGroups()) {
+      if (grouping.name.equals("GANGLIA_UPGRADE")) {
+        found = true;
+        break;
+      }
+    }
+    assertTrue(found);
   }
 
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/7d07b71d/ambari-server/src/test/resources/stacks/HDP/2.2.0/services/GANGLIA/upgrades/HDP/rolling-upgrade.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/stacks/HDP/2.2.0/services/GANGLIA/upgrades/HDP/rolling-upgrade.xml b/ambari-server/src/test/resources/stacks/HDP/2.2.0/services/GANGLIA/upgrades/HDP/rolling-upgrade.xml
new file mode 100644
index 0000000..c2224dd
--- /dev/null
+++ b/ambari-server/src/test/resources/stacks/HDP/2.2.0/services/GANGLIA/upgrades/HDP/rolling-upgrade.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+
+<upgrade xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="upgrade-pack.xsd">
+  <target>*</target>
+  <target-stack>*</target-stack>
+  <type>ROLLING</type>
+  <order>
+    <group name="GANGLIA_UPGRADE" title="Ganglia">
+      <add-after-group>ZOOKEEPER_CONFIG_CONDITION_TEST</add-after-group>
+      <skippable>true</skippable>
+      <allow-retry>true</allow-retry>
+      <service name="GANGLIA">
+        <component>HST_SERVER</component>
+      </service>
+    </group>
+  </order>
+
+  <processing>
+    <service name="GANGLIA">
+      <component name="GANGLIA_SERVER">
+        <upgrade>
+          <task xsi:type="restart-task" />
+        </upgrade>
+      </component>
+    </service>
+  </processing>
+</upgrade>
\ No newline at end of file


[37/47] ambari git commit: AMBARI-18974. A number of Ambari Server Unit Test failures on branch-2.5 (dlysnichenko)

Posted by jo...@apache.org.
AMBARI-18974. A number of Ambari Server Unit Test failures on branch-2.5 (dlysnichenko)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: c9f6944b038b73ce41aaa5fc9adb0aa2745e01e8
Parents: cb1bce2
Author: Lisnichenko Dmitro <dl...@hortonworks.com>
Authored: Thu Nov 24 11:51:54 2016 +0200
Committer: Lisnichenko Dmitro <dl...@hortonworks.com>
Committed: Thu Nov 24 11:51:54 2016 +0200

----------------------------------------------------------------------
 .../controller/internal/StackDefinedPropertyProviderTest.java      | 2 ++
 .../server/controller/metrics/RestMetricsPropertyProviderTest.java | 2 ++
 2 files changed, 4 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/c9f6944b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProviderTest.java
index 958957b..75d5bd8 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProviderTest.java
@@ -52,6 +52,7 @@ import org.apache.ambari.server.controller.spi.Resource;
 import org.apache.ambari.server.controller.spi.SystemException;
 import org.apache.ambari.server.controller.spi.TemporalInfo;
 import org.apache.ambari.server.controller.utilities.PropertyHelper;
+import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.orm.OrmTestHelper;
@@ -157,6 +158,7 @@ public class StackDefinedPropertyProviderTest {
     field.set(null, amc);
     Clusters clustersMock = createNiceMock(Clusters.class);
     Cluster clusterMock = createNiceMock(Cluster.class);
+    expect(amc.getAmbariEventPublisher()).andReturn(createNiceMock(AmbariEventPublisher.class)).anyTimes();
     expect(amc.getClusters()).andReturn(clustersMock).anyTimes();
     expect(clustersMock.getCluster(CLUSTER_NAME_PROPERTY_ID)).andReturn(clusterMock).anyTimes();
     expect(clusterMock.getResourceId()).andReturn(2L).anyTimes();

http://git-wip-us.apache.org/repos/asf/ambari/blob/c9f6944b/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/RestMetricsPropertyProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/RestMetricsPropertyProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/RestMetricsPropertyProviderTest.java
index a9934a2..410e2f1 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/RestMetricsPropertyProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/RestMetricsPropertyProviderTest.java
@@ -46,6 +46,7 @@ import org.apache.ambari.server.controller.spi.SystemException;
 import org.apache.ambari.server.controller.spi.TemporalInfo;
 import org.apache.ambari.server.controller.utilities.PropertyHelper;
 import org.apache.ambari.server.controller.utilities.StreamProvider;
+import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.security.TestAuthenticationFactory;
@@ -135,6 +136,7 @@ public class RestMetricsPropertyProviderTest {
 
     ConfigHelper configHelperMock = createNiceMock(ConfigHelper.class);
     expect(amc.getClusters()).andReturn(clusters).anyTimes();
+    expect(amc.getAmbariEventPublisher()).andReturn(createNiceMock(AmbariEventPublisher.class)).anyTimes();
     expect(amc.findConfigurationTagsWithOverrides(eq(c1), anyString())).andReturn(Collections.singletonMap("storm-site",
         Collections.singletonMap("tag", "version1"))).anyTimes();
     expect(amc.getConfigHelper()).andReturn(configHelperMock).anyTimes();


[42/47] ambari git commit: AMBARI-18988. [Intermittent]Ambari-server check-database command took longer (~3) minutes to complete.(vbrodetskyi)

Posted by jo...@apache.org.
AMBARI-18988. [Intermittent]Ambari-server check-database command took longer (~3) minutes to complete.(vbrodetskyi)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: c2555596e62a5ce592f7b02a9b2885bdef80af8d
Parents: fc46088
Author: Vitaly Brodetskyi <vb...@hortonworks.com>
Authored: Fri Nov 25 14:13:46 2016 +0200
Committer: Vitaly Brodetskyi <vb...@hortonworks.com>
Committed: Fri Nov 25 14:13:46 2016 +0200

----------------------------------------------------------------------
 .../server/checks/DatabaseConsistencyCheckHelper.java     | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/c2555596/ambari-server/src/main/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelper.java
index 6248a92..89ed987 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/checks/DatabaseConsistencyCheckHelper.java
@@ -460,11 +460,13 @@ public class DatabaseConsistencyCheckHelper {
       connection = dbAccessor.getConnection();
     }
 
+    LOG.info("Getting ambari metainfo instance");
     if (ambariMetaInfo == null) {
       ambariMetaInfo = injector.getInstance(AmbariMetaInfo.class);
     }
 
     try {
+      LOG.info("Executing query 'GET_SERVICES_WITHOUT_CONFIGS'");
       statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
 
       rs = statement.executeQuery(GET_SERVICES_WITHOUT_CONFIGS_QUERY);
@@ -479,7 +481,7 @@ public class DatabaseConsistencyCheckHelper {
         }
 
       }
-
+      LOG.info("Executing query 'GET_SERVICE_CONFIG_WITHOUT_MAPPING'");
       rs = statement.executeQuery(GET_SERVICE_CONFIG_WITHOUT_MAPPING_QUERY);
       if (rs != null) {
         String serviceName = null, version = null, clusterName = null;
@@ -509,6 +511,7 @@ public class DatabaseConsistencyCheckHelper {
       }
 
       //get stack info from db
+      LOG.info("Getting stack info from database");
       rs = statement.executeQuery(GET_STACK_NAME_VERSION_QUERY);
       if (rs != null) {
         while (rs.next()) {
@@ -523,6 +526,7 @@ public class DatabaseConsistencyCheckHelper {
       Map<String, Map<Integer, Multimap<String, String>>> dbClusterServiceVersionConfigs = new HashMap<>();
       Multimap<String, String> stackServiceConfigs = HashMultimap.create();
 
+      LOG.info("Executing query 'GET_SERVICES_WITH_CONFIGS'");
       rs = statement.executeQuery(GET_SERVICES_WITH_CONFIGS_QUERY);
       if (rs != null) {
         String serviceName = null, configType = null, clusterName = null;
@@ -557,12 +561,14 @@ public class DatabaseConsistencyCheckHelper {
       }
 
       //compare service configs from stack with configs that we got from db
+      LOG.info("Comparing service configs from stack with configs that we got from db");
       for (Map.Entry<String, Map<String, String>> clusterStackInfoEntry : clusterStackInfo.entrySet()) {
         //collect required configs for all services from stack
         String clusterName = clusterStackInfoEntry.getKey();
         Map<String, String> stackInfo = clusterStackInfoEntry.getValue();
         String stackName = stackInfo.keySet().iterator().next();
         String stackVersion = stackInfo.get(stackName);
+        LOG.info("Getting services from metainfo");
         Map<String, ServiceInfo> serviceInfoMap = ambariMetaInfo.getServices(stackName, stackVersion);
         for (String serviceName : serviceNames) {
           LOG.info("Processing {}-{} / {}", stackName, stackVersion, serviceName);
@@ -580,6 +586,7 @@ public class DatabaseConsistencyCheckHelper {
         }
 
         //compare required service configs from stack with mapped service configs from db
+        LOG.info("Comparing required service configs from stack with mapped service configs from db");
         Map<Integer, Multimap<String, String>> dbServiceVersionConfigs = dbClusterServiceVersionConfigs.get(clusterName);
         if (dbServiceVersionConfigs != null) {
           for (Integer serviceVersion : dbServiceVersionConfigs.keySet()) {
@@ -603,6 +610,7 @@ public class DatabaseConsistencyCheckHelper {
       }
 
       //getting services which has mapped configs which are not selected in clusterconfigmapping
+      LOG.info("Getting services which has mapped configs which are not selected in clusterconfigmapping");
       rs = statement.executeQuery(GET_NOT_SELECTED_SERVICE_CONFIGS_QUERY);
       if (rs != null) {
         String serviceName = null, configType = null, clusterName = null;


[34/47] ambari git commit: AMBARI-18969. Add support to provide additional slider specific parameters to llap (smohanty)

Posted by jo...@apache.org.
AMBARI-18969. Add support to provide additional slider specific parameters to llap (smohanty)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: 99cb9029a2845909e3351f5e6665a457d2c19e93
Parents: b59dc1d
Author: Sumit Mohanty <sm...@hortonworks.com>
Authored: Wed Nov 23 11:42:05 2016 -0800
Committer: Sumit Mohanty <sm...@hortonworks.com>
Committed: Wed Nov 23 11:42:14 2016 -0800

----------------------------------------------------------------------
 .../0.12.0.2.0/package/scripts/hive_server_interactive.py |  4 ++--
 .../HIVE/0.12.0.2.0/package/scripts/params_linux.py       |  1 +
 .../services/HIVE/configuration/hive-interactive-env.xml  | 10 ++++++++++
 3 files changed, 13 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/99cb9029/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_server_interactive.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_server_interactive.py b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_server_interactive.py
index d3773a7..b5edac8 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_server_interactive.py
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_server_interactive.py
@@ -274,9 +274,9 @@ class HiveServerInteractiveDefault(HiveServerInteractive):
       unique_name = "llap-slider%s" % datetime.utcnow().strftime('%Y-%m-%d_%H-%M-%S')
 
       cmd = format("{stack_root}/current/hive-server2-hive2/bin/hive --service llap --instances {params.num_llap_nodes}"
-                   " --slider-am-container-mb {params.slider_am_container_mb} --size {params.llap_daemon_container_size}m "
+                   " --slider-am-container-mb {params.slider_am_container_mb} --size {params.llap_daemon_container_size}m"
                    " --cache {params.hive_llap_io_mem_size}m --xmx {params.llap_heap_size}m --loglevel {params.llap_log_level}"
-                   " --output {LLAP_PACKAGE_CREATION_PATH}/{unique_name}")
+                   " {params.llap_extra_slider_opts} --output {LLAP_PACKAGE_CREATION_PATH}/{unique_name}")
       if params.security_enabled:
         llap_keytab_splits = params.hive_llap_keytab_file.split("/")
         Logger.debug("llap_keytab_splits : {0}".format(llap_keytab_splits))

http://git-wip-us.apache.org/repos/asf/ambari/blob/99cb9029/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_linux.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_linux.py b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_linux.py
index 30fc82a..a461bfe 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_linux.py
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_linux.py
@@ -607,6 +607,7 @@ if has_hive_interactive:
   hive_llap_io_mem_size = config['configurations']['hive-interactive-site']['hive.llap.io.memory.size']
   llap_heap_size = config['configurations']['hive-interactive-env']['llap_heap_size']
   llap_app_name = config['configurations']['hive-interactive-env']['llap_app_name']
+  llap_extra_slider_opts = default('/configurations/hive-interactive-env/llap_extra_slider_opts', "")
   hive_llap_principal = None
   if security_enabled:
     hive_llap_keytab_file = config['configurations']['hive-interactive-site']['hive.llap.zk.sm.keytab.file']

http://git-wip-us.apache.org/repos/asf/ambari/blob/99cb9029/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/configuration/hive-interactive-env.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/configuration/hive-interactive-env.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/configuration/hive-interactive-env.xml
index 1fd72eb..279c7c4 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/configuration/hive-interactive-env.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/HIVE/configuration/hive-interactive-env.xml
@@ -113,6 +113,16 @@
     <on-ambari-upgrade add="true"/>
   </property>
   <property>
+    <name>llap_extra_slider_opts</name>
+    <value></value>
+    <description>Additional slider specific opts for llap such as port range</description>
+    <display-name>Additional slider specific opts for llap</display-name>
+    <value-attributes>
+      <empty-value-valid>true</empty-value-valid>
+    </value-attributes>
+    <on-ambari-upgrade add="false"/>
+  </property>
+  <property>
     <name>num_retries_for_checking_llap_status</name>
     <value>10</value>
     <description>After starting LLAP app, retry count to check LLAP status before starting HiveServer2.</description>


[30/47] ambari git commit: AMBARI-18970. Unable to load Grafana Graphs in IE11. (Vivek Subramanian via Jaimin)

Posted by jo...@apache.org.
AMBARI-18970. Unable to load Grafana Graphs in IE11. (Vivek Subramanian via Jaimin)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: a8d6f03f89ff610926f997d6f41f915052a17e88
Parents: 90967bc
Author: Jaimin Jetly <ja...@hortonworks.com>
Authored: Wed Nov 23 09:26:17 2016 -0800
Committer: Jaimin Jetly <ja...@hortonworks.com>
Committed: Wed Nov 23 09:26:17 2016 -0800

----------------------------------------------------------------------
 .../ambari-metrics-grafana/ambari-metrics/datasource.js        | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/a8d6f03f/ambari-metrics/ambari-metrics-grafana/ambari-metrics/datasource.js
----------------------------------------------------------------------
diff --git a/ambari-metrics/ambari-metrics-grafana/ambari-metrics/datasource.js b/ambari-metrics/ambari-metrics-grafana/ambari-metrics/datasource.js
index 626439d..eb883e8 100644
--- a/ambari-metrics/ambari-metrics-grafana/ambari-metrics/datasource.js
+++ b/ambari-metrics/ambari-metrics-grafana/ambari-metrics/datasource.js
@@ -604,7 +604,7 @@ define([
                 });
           }
           //Templated Variables for Storm Components per Topology
-          if (interpolated.includes("stormComponent")) {
+          if (interpolated.indexOf("stormComponent") >= 0) {
             var componentName = interpolated.substring(0,interpolated.indexOf('.'));
             return this.initMetricAppidMapping()
                 .then(function () {
@@ -657,7 +657,7 @@ define([
                 });
           };
           //Templated Variables for Storm Topics per Topology
-          if (interpolated.includes("stormTopic")) {
+          if (interpolated.indexOf("stormTopic") >= 0) {
             var topicName = interpolated.substring(0,interpolated.indexOf('.'));
             return this.getStormEntities().then(function () {
               var topicNames = Object.keys(stormEntities[topicName]);
@@ -669,7 +669,7 @@ define([
             });
           }
           //Templated Variables for Storm Partitions per Topic
-          if (interpolated.includes("stormPartition")) {
+          if (interpolated.indexOf("stormPartition") >= 0) {
             var topicN, topologyN;
             return this.getStormEntities().then(function () {
               var partitionNames = _.uniq(stormEntities[topologyN][topicN]);


[39/47] ambari git commit: AMBARI-18984 Test and fix new tables styles on Ambari (part 5). (ababiichuk)

Posted by jo...@apache.org.
AMBARI-18984 Test and fix new tables styles on Ambari (part 5). (ababiichuk)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: 14d63dd9b4241ef5cf6624c3ca3d5a1f303bc68c
Parents: 3081aec
Author: ababiichuk <ab...@hortonworks.com>
Authored: Thu Nov 24 13:20:26 2016 +0200
Committer: ababiichuk <ab...@hortonworks.com>
Committed: Thu Nov 24 13:20:26 2016 +0200

----------------------------------------------------------------------
 ambari-web/app/messages.js                      |   2 +-
 ambari-web/app/styles/alerts.less               |  75 +----
 ambari-web/app/styles/application.less          | 123 ++------
 ambari-web/app/styles/modal_popups.less         |  67 +---
 ambari-web/app/styles/stack_versions.less       |   6 +-
 ambari-web/app/styles/wizard.less               |   4 -
 .../templates/common/configs/overrideWindow.hbs |   2 +-
 .../templates/common/host_progress_popup.hbs    | 316 +++++++++++--------
 .../common/modal_popups/alerts_popup.hbs        |  80 +++--
 .../modal_popups/dependent_configs_list.hbs     |   2 +-
 ambari-web/app/templates/experimental.hbs       |   2 +-
 .../templates/main/admin/service_auto_start.hbs |  70 ++--
 .../admin/stack_upgrade/edit_repositories.hbs   |  52 +--
 .../stack_upgrade/stack_upgrade_wizard.hbs      |   4 +-
 .../stack_upgrade/upgrade_history_details.hbs   |   4 +-
 .../main/admin/stack_upgrade/upgrade_task.hbs   |   4 +-
 .../alerts/add_definition_to_group_popup.hbs    |   2 +-
 .../main/host/bulk_operation_confirm_popup.hbs  |   2 +-
 ambari-web/app/templates/wizard/step1.hbs       |   2 +-
 .../wizard/step9/step9HostTasksLogPopup.hbs     |  88 +++---
 ambari-web/app/utils/host_progress_popup.js     |   5 +-
 ambari-web/app/views/main/host.js               |   5 +-
 ambari-web/app/views/wizard/step3_view.js       |   2 +-
 .../views/wizard/step9/hostLogPopupBody_view.js |   2 +
 24 files changed, 414 insertions(+), 507 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/14d63dd9/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index aa4e2aa..a1d84a3 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -1700,7 +1700,7 @@ Em.I18n.translations = {
   'admin.stackVersions.upgrade.installPackage.fail.title':'Packages could not be installed',
   'admin.stackVersions.upgrade.installPackage.fail.timeout':'Request timed out.',
 
-  'admin.stackVersions.editRepositories.info': 'Provide Base URLs for the Operating Systems you are configuring. Uncheck all other Operating Systems.',
+  'admin.stackVersions.editRepositories.info': 'Provide Base URLs for the Operating Systems you are configuring.',
   'admin.stackVersions.editRepositories.validation.warning': 'Some of the repositories failed validation. Make changes to the base url or skip validation if you are sure that urls are correct',
   'admin.stackVersions.version.install.confirm': 'You are about to install packages for version <strong>{0}</strong> on all hosts.',
   'admin.stackVersions.version.linkTooltip': 'Click to Edit Repositories',

http://git-wip-us.apache.org/repos/asf/ambari/blob/14d63dd9/ambari-web/app/styles/alerts.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/alerts.less b/ambari-web/app/styles/alerts.less
index bf3eaf3..77cc13c 100644
--- a/ambari-web/app/styles/alerts.less
+++ b/ambari-web/app/styles/alerts.less
@@ -416,11 +416,6 @@
   .modal-body, .modal-footer, .modal-header {
     min-width: 600px;
   }
-  #alert-info {
-    .alert-list-wrap:hover {
-      background-color: #e6e6e6;
-    }
-  }
 }
 
 .service-alerts {
@@ -444,76 +439,16 @@
 }
 
 .alerts-popup-wrap {
-  .trim_hostname{
-    display: block;
-    overflow: hidden;
-    text-overflow: ellipsis;
-  }
-  .top-wrap {
-    width: 100%;
-    border-bottom: 1px solid #CCC;
-    text-align: center;
-    font-size: 15px;
-    padding: 0 0 20px 0;
-    height: 20px;
-    .name-top {
-      width: 32%;
-      padding-left: 10px;
-    }
-    .service-top {
-      width: 31%;
-      padding-left: 10px;
-    }
-    .status-top,.name-top,.service-top,.last-triggered-top {
-      float: left;
-      text-align: left;
-    }
-  }
-  #alert-info{
+  #alert-info {
     overflow: auto;
     max-height: 340px;
-    width: 100%;
     .alert-list-wrap {
       padding: 10px 5px;
-      border-top: 1px solid #CCC;
-      border-bottom: 1px solid #CCC;
-    }
-    .alert-list-line-cursor{
-      width: 100%;
-      min-height: 20px;
-      .status-icon {
-        padding-right: 5px;
-        min-width: 20px;
-      }
-      .name-text {
-        float: left;
-        width: 33%;
-      }
-      .service-text {
-        padding-left: 5px;
-        width: 33%;
-        float: left;
-        .na-text {
-          color: #808080;
-        }
-      }
     }
-    .alert-list-line-cursor:before,.alert-list-line-cursor:after {
-      display: table;
-      line-height: 0;
-      content: "";
-    }
-    .alert-list-line-cursor:after {
-      clear: both;
-    }
-    .show-more {
-      width: 98.8%;
-      min-height: 20px;
-      cursor: pointer;
-      border-top: 1px solid #CCC;
-      text-align: center;
-      padding: 10px 10px 10px 0;
-      font-size: 16px;
+    .trim_hostname {
+      display: block;
+      overflow: hidden;
+      text-overflow: ellipsis;
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/14d63dd9/ambari-web/app/styles/application.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/application.less b/ambari-web/app/styles/application.less
index aab3287..7d93778 100644
--- a/ambari-web/app/styles/application.less
+++ b/ambari-web/app/styles/application.less
@@ -868,11 +868,7 @@ a:focus {
 }
 
 /*****start styles for install tasks logs*****/
-.task-list-main-warp, .task-detail-info {
-  i {
-    font-size: 20px;
-    vertical-align: middle;
-  }
+.task-list-main-wrap, .task-detail-info {
   .pending, .queued {
     color: #999;
   }
@@ -890,11 +886,7 @@ a:focus {
   }
 }
 
-.task-list-main-warp {
-
-  .task-list-line-cursor {
-    cursor: pointer;
-  }
+.task-list-main-wrap {
 
   .request-schedule-abort {
     margin-top: 7px;
@@ -904,95 +896,16 @@ a:focus {
   }
 
   .task-top-wrap {
-
     width: 100%;
     border-bottom: 1px solid #CCC;
-    text-align: center;
     font-size: 15px;
     height: 40px;
-
-    .task-detail-back-to-hosts {
-      float: left;
-    }
-
-    .select-wrap {
-      float: right;
-      margin-top: -8px;
-      select {
-        width: 140px;
-      }
-    }
-
-    .tasks-list-select{
-      //margin-top: -28px;
-    }
-
-    .task-name-top {
-      width: 23%;
-      padding-left: 20px;
-    }
-    .start-time-top {
-      width: 20%;
-      padding-left: 5px;
-    }
-    .duration-top {
-      width: 10%;
-      padding-left: 5px;
-    }
-    .task-name-top,.start-time-top,.duration-top {
-      float: left;
-      text-align: left;
-    }
-
-
   }
 
   #host-log {
     max-height: 340px;
     overflow: auto;
     width: 100%;
-    .log-list-wrap {
-      padding: 10px 10px 10px 20px;
-      border-top: 1px solid #CCC;
-      border-bottom: 1px solid #CCC;
-      .show-details {
-        float: right;
-        cursor: pointer;
-        font-size: 16px;
-
-        i {
-          color: #333;
-        }
-      }
-
-      .task-list-line-cursor:before,.task-list-line-cursor:after {
-        display: table;
-        line-height: 0;
-        content: "";
-      }
-      .task-list-line-cursor:after {
-        clear: both;
-      }
-      .operation-name-icon-wrap {
-        float: left;
-        width: 35%;
-      }
-      .start-time-text {
-        margin-left: 5px;
-        width: 20%;
-        float: left;
-      }
-      .duration-text {
-        margin-left: 5px;
-        width: 10%;
-        float: left;
-      }
-      .time-summary {
-        padding-left: 0;
-        color: #808080;
-        font-size: 12px;
-      }
-    }
   }
 }
 
@@ -1026,19 +939,9 @@ a:focus {
   .task-top-wrap {
     width: 100%;
     border-bottom: 1px solid #CCC;
-    text-align: center;
     font-size: 15px;
     padding: 0 0 10px 0;
 
-    .task-detail-back {
-      float: left;
-    }
-
-    .task-detail-log-rolename {
-      position: relative;
-      left: 0;
-      top: 0;
-    }
     .task-detail-status-ico {
       content: "";
       margin-top: -4px;
@@ -1559,6 +1462,12 @@ table.graphs {
     margin-top: 0;
     color: @green;
   }
+  .services-heading {
+    padding: 8px;
+    color: #999;
+    font-size: 13px;
+    font-weight: bold;
+  }
 }
 
 .admin-user-settings {
@@ -2683,4 +2592,20 @@ input[type="radio"].align-checkbox, input[type="checkbox"].align-checkbox {
 
 .side-menu-well {
   padding: 8px 0;
+}
+
+.table-body-wrap {
+  table {
+    table-layout: fixed;
+    margin-bottom: 0;
+  }
+}
+
+table.table.inner-table {
+  margin-bottom: 0;
+  background-color: transparent;
+}
+
+a.abort-icon:hover {
+  text-decoration: none;
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/14d63dd9/ambari-web/app/styles/modal_popups.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/modal_popups.less b/ambari-web/app/styles/modal_popups.less
index 1125c2a..0c87e63 100644
--- a/ambari-web/app/styles/modal_popups.less
+++ b/ambari-web/app/styles/modal_popups.less
@@ -35,7 +35,6 @@
       width: 98.8%;
       min-height: 20px;
       cursor: pointer;
-      border-top: 1px solid #CCC;
       text-align: center;
       padding: 10px 10px 10px 0;
       font-size: 16px;
@@ -49,71 +48,16 @@
     &.scheduled{
       max-height: 255px;
     }
-    .col-md-2{
-      width:20%;
-      float: left;
-    }
-    .host-progress-num{
-      float: left;
-      padding-left: 8px;
-    }
-    .host-name-icon-wrap{
-      float: left;
-      width: 50%;
-      white-space: nowrap;
-    }
   }
   #host-info, #service-info, #host-log {
     .log-list-wrap {
-      cursor: pointer;
       padding: 10px 10px 10px 20px;
-      border-top: 1px solid #CCC;
-      border-bottom: 1px solid #CCC;
     }
-    .task-list-line-cursor{
-      width: 100%;
-      min-height: 20px;
-      .progress-wrapper{
-        .progress{
-          margin-bottom: 0;
-        }
-      }
-      .show-details {
-        float: right;
-        cursor: pointer;
-        font-size: 16px;
-        i {
-          color: #333;
-        }
-      }
-      .operation-name-icon-wrap {
-        float: left;
-        width: 35%;
-      }
-      .start-time-text {
-        margin-left: 5px;
-        width: 20%;
-        float: left;
-      }
-      .duration-text {
-        margin-left: 5px;
-        width: 10%;
-        float: left;
-      }
-      .time-summary {
-        padding-left: 0;
-        color: #808080;
-        font-size: 12px;
+    .progress-wrapper {
+      .progress {
+        margin-bottom: 0;
       }
     }
-    .task-list-line-cursor:before,.task-list-line-cursor:after {
-      display: table;
-      line-height: 0;
-      content: "";
-    }
-    .task-list-line-cursor:after {
-      clear: both;
-    }
   }
 }
 
@@ -355,11 +299,6 @@
 }
 
 .host-progress-popup {
-  #service-info, #host-info, #host-log {
-    .log-list-wrap:hover {
-      background-color: #e6e6e6;
-    }
-  }
   .task-detail-info {
 
     .task-detail-log-info {

http://git-wip-us.apache.org/repos/asf/ambari/blob/14d63dd9/ambari-web/app/styles/stack_versions.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/stack_versions.less b/ambari-web/app/styles/stack_versions.less
index aca9c65..f67e03e 100644
--- a/ambari-web/app/styles/stack_versions.less
+++ b/ambari-web/app/styles/stack_versions.less
@@ -399,7 +399,7 @@
       margin-right: 5px;
     }
   }
-  .task-list-main-warp i {
+  .task-list-main-wrap i {
     font-size: 16px;
   }
   ul.failed-info-list {
@@ -432,10 +432,6 @@
 }
 
 .repository-list {
-  .os-block {
-    border-top: 1px solid #ddd;
-    padding-top: 10px;
-  }
   input[type="text"] {
     width: 80%;
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/14d63dd9/ambari-web/app/styles/wizard.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/wizard.less b/ambari-web/app/styles/wizard.less
index 747c7eb..a4dac8c 100644
--- a/ambari-web/app/styles/wizard.less
+++ b/ambari-web/app/styles/wizard.less
@@ -565,10 +565,6 @@
         color: grey;
       }
     }
-    .repos-inner-table {
-      margin-bottom: 0;
-      background-color: transparent;
-    }
     .repo-url input {
       width: 90%;
       height: 24px;

http://git-wip-us.apache.org/repos/asf/ambari/blob/14d63dd9/ambari-web/app/templates/common/configs/overrideWindow.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/configs/overrideWindow.hbs b/ambari-web/app/templates/common/configs/overrideWindow.hbs
index 1154bea..6784f28 100644
--- a/ambari-web/app/templates/common/configs/overrideWindow.hbs
+++ b/ambari-web/app/templates/common/configs/overrideWindow.hbs
@@ -104,7 +104,7 @@
           <table class="table table-hover">
             <tbody>
               {{#each entry in view.pageContent}}
-                <tr {{bindAttr class="entry.filtered::hidden"}}>
+                <tr {{bindAttr class="entry.filtered::hidden entry.selected:active"}}>
                   <td width="45%">
                     {{entry.host.hostName}}
                   </td>

http://git-wip-us.apache.org/repos/asf/ambari/blob/14d63dd9/ambari-web/app/templates/common/host_progress_popup.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/host_progress_popup.hbs b/ambari-web/app/templates/common/host_progress_popup.hbs
index c6c8bf8..f0a8c17 100644
--- a/ambari-web/app/templates/common/host_progress_popup.hbs
+++ b/ambari-web/app/templates/common/host_progress_popup.hbs
@@ -16,55 +16,81 @@
 * limitations under the License.
 }}
 
-<div class="host-component-popup-wrap">
+<div class="host-component-popup-wrap col-sm-12">
 
 {{#if view.parentView.isLoaded}}
 {{!-- SERVICES --}}
 
-  <div {{bindAttr class="view.parentView.isServiceListHidden:hidden :task-list-main-warp"}}>
-    <div class="task-top-wrap">
-      <div class="operation-name-top">{{t common.operations}}</div>
-      <div class="start-time-top">{{t common.startTime}}</div>
-      <div class="duration-top">{{t common.duration}}</div>
-      <div class="select-wrap">
-        {{t common.show}}:
-        {{view Ember.Select
-            contentBinding="view.categories"
-            optionValuePath="content.value"
-            optionLabelPath="content.label"
-            selectionBinding="view.serviceCategory"
-            classNames="form-control"
-        }}
+  <div {{bindAttr class="view.parentView.isServiceListHidden:hidden :task-list-main-wrap :table-body-wrap"}}>
+    <div class="row">
+      <div class="table-controls row col-sm-12 pull-right">
+        <div class="col-sm-12">
+          <div class="btn-group pull-right">
+            {{view Ember.Select
+              contentBinding="view.categories"
+              optionValuePath="content.value"
+              optionLabelPath="content.label"
+              selectionBinding="view.serviceCategory"
+              classNames="form-control"
+            }}
+          </div>
+        </div>
       </div>
     </div>
+    <table class="table table-hover">
+      <thead>
+        <tr>
+          <th class="col-sm-3">{{t common.operations}}</th>
+          <th class="col-sm-3">{{t common.startTime}}</th>
+          <th colspan="3" class="col-sm-6">{{t common.duration}}</th>
+        </tr>
+      </thead>
+    </table>
     <div id="service-info">
       {{#if view.isServiceEmptyList}}
         <div class="log-list-wrap">{{t hostPopup.noServicesToShow}}</div>
       {{else}}
-        {{#each servicesInfo in view.services}}
-          <div {{action gotoHosts servicesInfo}} {{bindAttr class="servicesInfo.isVisible::hidden :log-list-wrap"}}>
-            <div class="task-list-line-cursor">
-              <div class="operation-name-icon-wrap">
-                {{view statusIcon servicesInfoBinding="servicesInfo"}}
-                <a href="#">
-                  {{servicesInfo.name}}
-                </a>
-                {{#if servicesInfo.isAbortable}}
-                  {{view abortIcon servicesInfoBinding="servicesInfo"}}
-                {{/if}}
-              </div>
-              <div class="time-summary start-time-text">{{servicesInfo.startTime}}</div>
-              <div class="time-summary duration-text">{{servicesInfo.duration}}</div>
-              <div class="progress-wrapper col-md-2">
-                <div class="progress">
-                  <div {{bindAttr class="servicesInfo.isInProgress:active servicesInfo.isInProgress:progress-bar-striped servicesInfo.barColor :progress-bar" style="servicesInfo.barWidth"}}></div>
-                </div>
-              </div>
-              <div class="host-progress-num">{{servicesInfo.progress}}%</div>
-              <div class="show-details"><i class="glyphicon glyphicon-caret-right"></i></div>
-            </div>
-          </div>
-        {{/each}}
+        <table class="table table-hover">
+          <tbody>
+            {{#each servicesInfo in view.services}}
+              <tr {{action gotoHosts servicesInfo}} {{bindAttr class="servicesInfo.isVisible::hidden :pointer"}}>
+                <td class="col-sm-3">
+                  {{view statusIcon servicesInfoBinding="servicesInfo"}}
+                  <a href="#">
+                    {{servicesInfo.name}}
+                  </a>
+                </td>
+                <td class="col-sm-3">{{servicesInfo.startTime}}</td>
+                <td class="col-sm-2">{{servicesInfo.duration}}</td>
+                <td class="col-sm-3">
+                  <div class="progress-wrapper col-sm-10">
+                    <div class="progress">
+                      <div {{bindAttr class="servicesInfo.isInProgress:active servicesInfo.isInProgress:progress-bar-striped servicesInfo.barColor :progress-bar" style="servicesInfo.barWidth"}}></div>
+                    </div>
+                  </div>
+                  <div class="col-sm-2">{{servicesInfo.progress}}%</div>
+                </td>
+                <td class="col-sm-1 text-right">
+                  {{#if servicesInfo.isAbortable}}
+                    {{view abortIcon servicesInfoBinding="servicesInfo"}}
+                  {{/if}}
+                  <a class="action" href="#">
+                    <span class="icon icon-caret-right"></span>
+                  </a>
+                </td>
+              </tr>
+            {{/each}}
+          </tbody>
+          {{#if view.isPaginate}}
+            <tfoot>
+            <tr>
+              <td colspan="5">
+                {{view App.PaginationView}}
+              </td>
+            </tr>
+            </tfoot>
+          {{/if}}
+        </table>
       {{/if}}
       {{#if view.isShowMore}}
         <div class="show-more" {{action requestMoreOperations}}><a href="#">{{t hostPopup.serviceInfo.showMore}}</a>
@@ -76,24 +102,26 @@
 
   {{!-- HOSTS ---}}
 
-  <div {{bindAttr class="view.parentView.isHostListHidden:hidden :task-list-main-warp"}}>
-    <div class="task-top-wrap">
-      {{#if controller.isBackgroundOperations}}
-        <a class="task-detail-back-to-hosts" href="javascript:void(null)" {{action backToServiceList}} >
-          <i class="glyphicon glyphicon-arrow-left"></i>&nbsp;{{t common.operations}}
-        </a>
-      {{/if}}
-      <span class="task-detail-log-rolename">{{t common.hosts}}</span>
-
-      <div class="select-wrap">
-        {{t common.show}}:
-        {{view Ember.Select
-            contentBinding="view.categories"
-            optionValuePath="content.value"
-            optionLabelPath="content.label"
-            selectionBinding="view.hostCategory"
-            classNames="form-control"
-        }}
+  <div {{bindAttr class="view.parentView.isHostListHidden:hidden :task-list-main-wrap :table-body-wrap"}}>
+    <div class="row">
+      <h2 class="table-title col-sm-2">{{t common.hosts}}</h2>
+      <div class="table-controls row col-sm-10 pull-right">
+        <div class="col-sm-12">
+          <div class="btn-group pull-right">
+            {{view Ember.Select
+              contentBinding="view.categories"
+              optionValuePath="content.value"
+              optionLabelPath="content.label"
+              selectionBinding="view.hostCategory"
+              classNames="form-control"
+            }}
+          </div>
+          {{#if controller.isBackgroundOperations}}
+            <button type="button" class="btn btn-link pull-right" {{action backToServiceList}}>
+              <i class="glyphicon glyphicon-arrow-left"></i>&nbsp;{{t common.operations}}
+            </button>
+          {{/if}}
+        </div>
       </div>
     </div>
     {{#if view.isRequestSchedule}}
@@ -117,25 +145,42 @@
         {{#if view.isHostEmptyList}}
           <div class="log-list-wrap">{{t hostPopup.noHostsToShow}}</div>
         {{else}}
-          {{#each hostInfo in view.pageContent}}
-            <div {{action gotoTasks hostInfo}} {{bindAttr class="hostInfo.isVisible::hidden :log-list-wrap"}}>
-              <div class="task-list-line-cursor">
-                <div class="host-name-icon-wrap">
-                  {{view statusIcon servicesInfoBinding="hostInfo"}}
-                  <a href="#">
-                    {{hostInfo.displayName}}
-                  </a>
-                </div>
-                <div class="progress-wrapper col-md-2">
-                  <div class="progress">
-                    <div {{bindAttr class="hostInfo.isInProgress:progress-bar-striped :active hostInfo.barColor :progress-bar" style="hostInfo.barWidth"}}></div>
-                  </div>
-                </div>
-                <div class="host-progress-num">{{hostInfo.progress}}%</div>
-                <div class="show-details"><i class="glyphicon glyphicon-caret-right"></i></div>
-              </div>
-            </div>
-          {{/each}}
+          <table class="table table-hover">
+            <tbody>
+              {{#each hostInfo in view.pageContent}}
+                <tr {{action gotoTasks hostInfo}} {{bindAttr class="hostInfo.isVisible::hidden :pointer"}}>
+                  <td class="col-sm-6 text-nowrap">
+                    {{view statusIcon servicesInfoBinding="hostInfo"}}
+                    <a href="#">
+                      {{hostInfo.displayName}}
+                    </a>
+                  </td>
+                  <td class="col-sm-5">
+                    <div class="progress-wrapper col-md-6">
+                      <div class="progress">
+                        <div {{bindAttr class="hostInfo.isInProgress:progress-bar-striped :active hostInfo.barColor :progress-bar" style="hostInfo.barWidth"}}></div>
+                      </div>
+                    </div>
+                    <div class="col-sm-2">{{hostInfo.progress}}%</div>
+                  </td>
+                  <td class="col-sm-1 text-right">
+                    <a class="action" href="#">
+                      <span class="icon icon-caret-right"></span>
+                    </a>
+                  </td>
+                </tr>
+              {{/each}}
+            </tbody>
+            {{#if view.isPaginate}}
+              <tfoot>
+                <tr>
+                  <td colspan="3">
+                    {{view App.PaginationView}}
+                  </td>
+                </tr>
+              </tfoot>
+            {{/if}}
+          </table>
         {{/if}}
       </div>
     {{else}}
@@ -146,21 +191,25 @@
 
   {{!-- TASKS ---}}
 
-  <div {{bindAttr class="view.parentView.isTaskListHidden:hidden :task-list-main-warp"}}>
-    <div class="task-top-wrap">
-      <a class="task-detail-back-to-hosts" href="javascript:void(null)" {{action backToHostList}} ><i
-              class="glyphicon glyphicon-arrow-left"></i>&nbsp;{{t common.hosts}}</a>
-
-      <div class="task-name-top task-detail-log-rolename">{{t common.tasks}}</div>
-      <div class="select-wrap tasks-list-select">
-        {{t common.show}}:
-        {{view Ember.Select
-            contentBinding="view.categories"
-            optionValuePath="content.value"
-            optionLabelPath="content.label"
-            selectionBinding="view.taskCategory"
-            classNames="form-control"
-        }}
+  <div {{bindAttr class="view.parentView.isTaskListHidden:hidden :task-list-main-wrap :table-body-wrap"}}>
+    <div class="row">
+      <h2 class="table-title col-sm-2">{{t common.tasks}}</h2>
+      <div class="table-controls row col-sm-10 pull-right">
+        <div class="col-sm-12">
+          <div class="btn-group pull-right">
+            {{view Ember.Select
+              class="form-control"
+              contentBinding="view.categories"
+              optionValuePath="content.value"
+              optionLabelPath="content.label"
+              selectionBinding="view.taskCategory"
+              classNames="form-control"
+            }}
+          </div>
+          <button type="button" class="btn btn-link pull-right" {{action backToHostList}}>
+            <i class="glyphicon glyphicon-arrow-left"></i>&nbsp;{{t common.hosts}}
+          </button>
+        </div>
       </div>
     </div>
     <div id="host-log">
@@ -168,19 +217,34 @@
         {{#if view.isTasksEmptyList}}
           <div class="log-list-wrap">{{t hostPopup.noTasksToShow}}</div>
         {{else}}
-          {{#each taskInfo in view.tasks}}
-            <div {{action toggleTaskLog taskInfo}} {{bindAttr class="taskInfo.isVisible::hidden :log-list-wrap"}}>
-              <div class="task-list-line-cursor">
-                <div class="operation-name-icon-wrap">
-                  {{view statusIcon servicesInfoBinding="taskInfo"}}
-                  <a href="#">
-                    {{taskInfo.commandDetail}}
-                  </a>
-                </div>
-                <div class="show-details"><i class="glyphicon glyphicon-caret-right"></i></div>
-              </div>
-            </div>
-          {{/each}}
+          <table class="table table-hover">
+            <tbody>
+              {{#each taskInfo in view.tasks}}
+                <tr {{action toggleTaskLog taskInfo}} {{bindAttr class="taskInfo.isVisible::hidden :pointer"}}>
+                  <td class="col-sm-3">
+                    {{view statusIcon servicesInfoBinding="taskInfo"}}
+                    <a href="#">
+                      {{taskInfo.commandDetail}}
+                    </a>
+                  </td>
+                  <td class="col-sm-9 text-right">
+                    <a class="action" href="#">
+                      <span class="icon icon-caret-right"></span>
+                    </a>
+                  </td>
+                </tr>
+              {{/each}}
+            </tbody>
+            {{#if view.isPaginate}}
+              <tfoot>
+              <tr>
+                <td colspan="2">
+                  {{view App.PaginationView}}
+                </td>
+              </tr>
+              </tfoot>
+            {{/if}}
+          </table>
         {{/if}}
       {{else}}
         {{view App.SpinnerView}}
@@ -193,26 +257,31 @@
 
   <div {{bindAttr class="view.parentView.isLogWrapHidden:hidden :task-detail-info view.hostComponentLogsExists:task-detail-info-tabbed"}}>
     <div class="task-top-wrap">
-      <a class="task-detail-back" href="javascript:void(null)" {{action backToTaskList}} ><i
-                                                                                              class="glyphicon glyphicon-arrow-left"></i>&nbsp;{{t common.tasks}}</a>
-
-      <div {{bindAttr class="view.hostComponentLogsExists:task-detail-log-nav-actions"}}>
-        <i {{bindAttr class="view.openedTask.status :task-detail-status-ico view.openedTask.icon"}}></i>
-
-        <div class="task-detail-ico-wrap">
-          <a {{translateAttr title="common.fullLogPopup.clickToCopy"}} {{action "textTrigger" taskInfo target="view"}} class="task-detail-copy"><i
-                                                                                                                                                    class="glyphicon glyphicon-copy"></i> {{t common.copy}}</a>
-          <a {{translateAttr title="common.openNewWindow"}} {{action openTaskLogInDialog}} class="task-detail-open-dialog"><i
-                                                                                                                               class="glyphicon icon-external-link"></i> {{t common.open}}</a>
-          {{#if App.supports.logSearch}}
-            {{#if view.isLogSearchInstalled}}
-              <a {{action navigateToHostLogs target="view"}} {{bindAttr class="view.isLogsLinkVisible::hidden"}} href="#">
-                <i class="glyphicon glyphicon-file"></i> {{t common.host}} {{t common.logs}}
-              </a>
+      <div {{bindAttr class="view.hostComponentLogsExists:task-detail-log-nav-actions :row"}}>
+        <h2 class="table-title col-sm-5">
+          <i {{bindAttr class="view.openedTask.status :task-detail-status-ico view.openedTask.icon"}}></i>
+          {{view.openedTask.commandDetail}}
+        </h2>
+        <div class="table-controls row col-sm-7 pull-right">
+          <div class="col-sm-12">
+            {{#if App.supports.logSearch}}
+              {{#if view.isLogSearchInstalled}}
+                <button type="button" class="btn btn-link pull-right" {{action navigateToHostLogs target="view"}} {{bindAttr class="view.isLogsLinkVisible::hidden"}}>
+                  <i class="glyphicon glyphicon-file"></i>&nbsp;{{t common.host}} {{t common.logs}}
+                </button>
+              {{/if}}
             {{/if}}
-          {{/if}}
+            <button type="button" class="btn btn-link pull-right" {{translateAttr title="common.openNewWindow"}} {{action openTaskLogInDialog}}>
+              <i class="icon icon-external-link"></i>&nbsp;{{t common.open}}
+            </button>
+            <button type="button" class="btn btn-link pull-right" {{translateAttr title="common.fullLogPopup.clickToCopy"}} {{action "textTrigger" taskInfo target="view"}}>
+              <i class="glyphicon glyphicon-copy"></i>&nbsp;{{t common.copy}}
+            </button>
+            <button type="button" class="btn btn-link pull-right" {{action backToTaskList}}>
+              <i class="glyphicon glyphicon-arrow-left"></i>&nbsp;{{t common.tasks}}
+            </button>
+          </div>
         </div>
-        <span class="task-detail-log-rolename">{{view.openedTask.commandDetail}}</span>
       </div>
       <ul {{bindAttr class="view.hostComponentLogsExists::hide :nav :nav-tabs :task-detail-nav"}}>
         <li {{bindAttr class="view.isLevelLoaded:active"}}>
@@ -289,6 +358,3 @@
   {{view App.SpinnerView}}
 {{/if}}
 </div>
-{{#if view.isPaginate}}
-  {{view App.PaginationView}}
-{{/if}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/14d63dd9/ambari-web/app/templates/common/modal_popups/alerts_popup.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/modal_popups/alerts_popup.hbs b/ambari-web/app/templates/common/modal_popups/alerts_popup.hbs
index 7ace34c..179490a 100644
--- a/ambari-web/app/templates/common/modal_popups/alerts_popup.hbs
+++ b/ambari-web/app/templates/common/modal_popups/alerts_popup.hbs
@@ -16,49 +16,59 @@
 * limitations under the License.
 }}
 
-<div class="alerts-popup-wrap">
+<div class="alerts-popup-wrap table-body-wrap">
   {{#if view.isLoaded}}
-    <div class="alert-list-main-warp">
-      <div class="top-wrap">
-        <div class="service-top">{{t alerts.definition.details.serviceHost}}</div>
-        <div class="name-top">{{t alerts.fastAccess.popup.body.name}}</div>
-        <div class="last-triggered-top">{{t common.status}}</div>
-      </div>
-        <div id="alert-info">
-          {{#if view.isAlertEmptyList}}
-            <div class="alert-list-wrap">{{t alerts.fastAccess.popup.body.noalerts}}</div>
-          {{else}}
+    <table class="table table-hover">
+      <thead>
+        <tr>
+          <th class="col-sm-4">{{t alerts.definition.details.serviceHost}}</th>
+          <th class="col-sm-4">{{t alerts.fastAccess.popup.body.name}}</th>
+          <th class="col-sm-4">{{t common.status}}</th>
+        </tr>
+      </thead>
+    </table>
+    <div id="alert-info">
+      {{#if view.isAlertEmptyList}}
+        <div class="alert-list-wrap">{{t alerts.fastAccess.popup.body.noalerts}}</div>
+      {{else}}
+        <table class="table table-hover">
+          <tbody>
             {{#each instance in view.pageContent}}
-              <div class="alert-list-wrap">
-                <div class="alert-list-line-cursor">
-                  <div class="service-text">
-                    {{view App.AlertInstanceServiceHostView instanceBinding="instance"}}
-                  </div>
-                  <div class="name-text">
-                    <div>
-                      <a href="#" {{action "gotoAlertDetails" instance target="view"}}>{{instance.label}}</a>
-                    </div>
-                    <div class="instance-text">
-                      {{instance.text}}
-                    </div>
-                  </div>
-                  <div class="status-col" {{bindAttr title="instance.lastTriggered"}}>
-                      {{view App.AlertInstanceStateView instanceBinding="instance"}}
-                  </div>
-              </div>
-            </div>
-          {{/each}}
-        {{/if}}
-      </div>
+              <tr>
+                <td class="col-sm-4">
+                  {{view App.AlertInstanceServiceHostView instanceBinding="instance"}}
+                </td>
+                <td class="col-sm-4">
+                  <a href="#" {{action "gotoAlertDetails" instance target="view"}}>{{instance.label}}</a>
+                  <div class="instance-text">
+                    {{instance.text}}
+                  </div>task-detail-log-info
+                </td>
+                <td class="col-sm-4" {{bindAttr title="instance.lastTriggered"}}>
+                  {{view App.AlertInstanceStateView instanceBinding="instance"}}
+                </td>
+              </tr>
+            {{/each}}
+          </tbody>
+        </table>
+      {{/if}}
     </div>
+    {{#if view.isPaginate}}
+      <table class="table table-hover">
+        <tfoot>
+          <tr>
+            <td colspan="3">
+              {{view App.PaginationView}}
+            </td>
+          </tr>
+        </tfoot>
+      </table>
+    {{/if}}
 
     <div {{bindAttr class="view.filteringComplete:hidden :table-overlay"}}>
       {{view App.SpinnerView}}
     </div>
 
-    {{#if view.isPaginate}}
-      {{view App.PaginationView}}
-    {{/if}}
   {{else}}
     {{view App.SpinnerView}}
   {{/if}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/14d63dd9/ambari-web/app/templates/common/modal_popups/dependent_configs_list.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/modal_popups/dependent_configs_list.hbs b/ambari-web/app/templates/common/modal_popups/dependent_configs_list.hbs
index a717341..d117dd1 100644
--- a/ambari-web/app/templates/common/modal_popups/dependent_configs_list.hbs
+++ b/ambari-web/app/templates/common/modal_popups/dependent_configs_list.hbs
@@ -40,7 +40,7 @@
     </thead>
     <tbody>
     {{#each recommendation in view.parentView.recommendations}}
-      <tr>
+      <tr {{bindAttr class="recommendation.saveRecommended:active"}}>
         <td class="config-dependency-name">{{recommendation.propertyName}}</td>
         <td class="config-dependency-service">{{recommendation.serviceDisplayName}}</td>
         <td class="config-dependency-group">

http://git-wip-us.apache.org/repos/asf/ambari/blob/14d63dd9/ambari-web/app/templates/experimental.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/experimental.hbs b/ambari-web/app/templates/experimental.hbs
index 640393b..c3d9eba 100644
--- a/ambari-web/app/templates/experimental.hbs
+++ b/ambari-web/app/templates/experimental.hbs
@@ -40,7 +40,7 @@
       </thead>
       <tbody>
         {{#each support in controller.supports}}
-          <tr>
+          <tr {{bindAttr class="support.selected:active"}}>
             <td>{{support.name}}</td>
             <td></td>
             <td>{{view App.CheckboxView checkedBinding="support.selected"}}</td>

http://git-wip-us.apache.org/repos/asf/ambari/blob/14d63dd9/ambari-web/app/templates/main/admin/service_auto_start.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/service_auto_start.hbs b/ambari-web/app/templates/main/admin/service_auto_start.hbs
index be101e7..29ec3b3 100644
--- a/ambari-web/app/templates/main/admin/service_auto_start.hbs
+++ b/ambari-web/app/templates/main/admin/service_auto_start.hbs
@@ -33,17 +33,13 @@
       </div>
     </div>
   </div>
-    {{#if view.isLoaded}}
-        <hr>
+  {{#if view.isLoaded}}
+    <hr>
+    <div class="row">
+      <div class="col-md-4 col-lg-3">
+        <div class="services-heading">{{t common.service}}</div>
         <div class="row">
-          <div class="col-md-4 col-lg-3"><h5>{{t common.service}}</h5></div>
-          <div class="col-md-8 col-lg-9 row">
-            <div class="col-md-4"><h5>{{t common.component}}</h5></div>
-            <div class="col-md-8"><h5>{{t common.status}}</h5></div>
-          </div>
-        </div>
-        <div class="row">
-          <div class="col-md-4 col-lg-3">
+          <div class="col-md-12">
             <ul class="nav nav-tabs nav-stacked nav-tabs-left">
               {{#each tab in controller.tabs}}
                 <li {{bindAttr class="tab.isActive:active"}}>
@@ -55,33 +51,51 @@
               {{/each}}
             </ul>
           </div>
-          <div class="tab-content col-md-8 col-lg-9">
-            {{#each tab in controller.tabs}}
-              <div {{bindAttr class=":tab-pane tab.isActive:active tab.service_name"}}>
-                <table class="table">
-                {{#each component in tab.components}}
+        </div>
+      </div>
+      <div class="col-md-8 col-lg-9 row">
+        <div class="tab-content col-md-12">
+          {{#each tab in controller.tabs}}
+            <div {{bindAttr class=":tab-pane tab.isActive:active tab.service_name"}}>
+              <table class="table table-hover">
+                <thead>
                   <tr>
-                    <td class="col-md-4">
-                      {{component.display_name}}
-                    </td>
-                    <td class="col-md-8">
-                      {{view App.MainAdminServiceAutoStartComponentView componentBinding="component" tabBinding="tab"}}
-                    </td>
+                    <th class="col-md-4">
+                      {{t common.component}}
+                    </th>
+                    <th class="col-md-8">
+                      {{t common.status}}
+                    </th>
                   </tr>
-                {{/each}}
+                </thead>
+                <tbody>
+                  {{#each component in tab.components}}
+                    <tr>
+                      <td class="col-md-4">
+                        {{component.display_name}}
+                      </td>
+                      <td class="col-md-8">
+                        {{view App.MainAdminServiceAutoStartComponentView componentBinding="component" tabBinding="tab"}}
+                      </td>
+                    </tr>
+                  {{/each}}
+                </tbody>
+                <tfoot>
                   <tr>
                     <td class="col-md-4"></td>
                     <td class="col-md-8">
                       <a href="#" class="enable-all-link" {{action enableAll tab target="controller"}}>
-                          {{t common.enableAll}}
+                        {{t common.enableAll}}
                       </a> |
                       <a href="#" {{action disableAll tab target="controller"}}>{{t common.disableAll}}</a>
                     </td>
                   </tr>
-                </table>
-              </div>
-            {{/each}}
-          </div>
+                </tfoot>
+              </table>
+            </div>
+          {{/each}}
         </div>
-    {{/if}}
+      </div>
+    </div>
+  {{/if}}
 </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/14d63dd9/ambari-web/app/templates/main/admin/stack_upgrade/edit_repositories.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/edit_repositories.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/edit_repositories.hbs
index 18760ec..263b902 100644
--- a/ambari-web/app/templates/main/admin/stack_upgrade/edit_repositories.hbs
+++ b/ambari-web/app/templates/main/admin/stack_upgrade/edit_repositories.hbs
@@ -22,28 +22,36 @@
 <div {{bindAttr class="view.parentView.serverValidationFailed::hidden :alert :alert-warning"}}>
   {{t admin.stackVersions.editRepositories.validation.warning}}
 </div>
-<div class="row">
-  <div class="col-md-2"><strong>{{t common.os}}</strong></div>
-  <div class="col-md-10 row">
-    <div class="col-md-3"><strong>{{t common.name}}</strong></div>
-    <div class="col-md-9"><strong>{{t admin.cluster.repositories.baseUrl}}</strong></div>
-  </div>
-</div>
-{{#each os in view.content.operatingSystems}}
-  <div class="row os-block" {{bindAttr id="os.osType"}}>
-    <div class="col-md-2">
-      {{os.osType}}
-    </div>
-    <div class="col-md-10">
-      {{#each repository in os.repositories}}
-        <div {{bindAttr class="repository.repoName :row"}}>
-          <div class="col-md-3">{{repository.repoName}}</div>
-          <div {{bindAttr class="repository.hasError:error :form-group :col-md-9"}}>{{view App.BaseUrlTextField repositoryBinding="repository" disabledBinding="view.content.useRedhatSatellite"}}</div>
-        </div>
-      {{/each}}
-    </div>
-  </div>
-{{/each}}
+<table class="table table-hover">
+  <thead>
+    <tr>
+      <th class="col-md-2">{{t common.os}}</th>
+      <th class="col-md-2">{{t common.name}}</th>
+      <th class="col-md-8">{{t admin.cluster.repositories.baseUrl}}</th>
+    </tr>
+  </thead>
+  <tbody>
+    {{#each os in view.content.operatingSystems}}
+      <tr {{bindAttr id="os.osType"}}>
+        <td class="col-md-2">{{os.osType}}</td>
+        <td class="col-md-10" colspan="2">
+          <table class="table table-condensed no-borders inner-table">
+            <tbody>
+              {{#each repository in os.repositories}}
+                <tr {{bindAttr class="repository.repoName"}}>
+                  <td class="col-md-2">{{repository.repoName}}</td>
+                  <td class="col-md-8">
+                    <div {{bindAttr class="repository.hasError:error :form-group"}}>{{view App.BaseUrlTextField repositoryBinding="repository" disabledBinding="view.content.useRedhatSatellite"}}</div>
+                  </td>
+                </tr>
+              {{/each}}
+            </tbody>
+          </table>
+        </td>
+      </tr>
+    {{/each}}
+  </tbody>
+</table>
 
 <div id="skip-validation">
   {{#view view.skipCheckBox labelTranslate="installer.step1.advancedRepo.skipValidation.message"

http://git-wip-us.apache.org/repos/asf/ambari/blob/14d63dd9/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
index 84666a3..8bb0904 100644
--- a/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
+++ b/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
@@ -22,7 +22,7 @@
   </div>
 
   <div {{bindAttr class="view.isLoaded::hidden :row"}}>
-    <div class="col-md-3 task-list-main-warp">{{statusIcon controller.requestStatus}}
+    <div class="col-md-3 task-list-main-wrap">{{statusIcon controller.requestStatus}}
       &nbsp;{{view.upgradeStatusLabel}}</div>
     <div class="col-md-8">
       {{view App.ProgressBarView
@@ -35,7 +35,7 @@
     </div>
   </div>
 
-  <div class="task-list scrollable-block task-list-main-warp">
+  <div class="task-list scrollable-block task-list-main-wrap">
     {{#if view.isLoaded}}
       <div>
         {{#if view.runningItem}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/14d63dd9/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_history_details.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_history_details.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_history_details.hbs
index f9d0a2a..2e85b54 100644
--- a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_history_details.hbs
+++ b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_history_details.hbs
@@ -18,7 +18,7 @@
 
 <div id="stack-upgrade-record-dialog">
   <div {{bindAttr class="view.isLoaded::hidden :row"}}>
-    <div class="col-md-3 task-list-main-warp">{{statusIcon controller.requestStatus}}
+    <div class="col-md-3 task-list-main-wrap">{{statusIcon controller.requestStatus}}
       &nbsp;{{view.upgradeStatusLabel}}</div>
     <div class="col-md-8">
       {{view App.ProgressBarView
@@ -31,7 +31,7 @@
     </div>
   </div>
 
-  <div class="task-list scrollable-block task-list-main-warp">
+  <div class="task-list scrollable-block task-list-main-wrap">
     {{#if view.isReady}}
       {{#each group in controller.upgradeData.upgradeGroups}}
         {{#if group.isVisible}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/14d63dd9/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_task.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_task.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_task.hbs
index 488fe39..36450a2 100644
--- a/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_task.hbs
+++ b/ambari-web/app/templates/main/admin/stack_upgrade/upgrade_task.hbs
@@ -40,7 +40,7 @@
               <a {{translateAttr title="common.openNewWindow"}} {{action openOutLog target="view"}} class="task-detail-open-dialog pull-right">
                 <i class="icon-external-link"></i> {{t common.open}}
               </a>
-              <a title="Click to Copy" {{action copyOutLog view.content target="view"}} class="task-detail-copy pull-right">
+              <a {{translateAttr title="common.fullLogPopup.clickToCopy"}} {{action copyOutLog view.content target="view"}} class="task-detail-copy pull-right">
                 <i class="glyphicon glyphicon-copy"></i> {{t common.copy}}
               </a>
             </div>
@@ -56,7 +56,7 @@
               <a {{translateAttr title="common.openNewWindow"}} {{action openErrorLog target="view"}} class="task-detail-open-dialog pull-right">
                 <i class="icon-external-link"></i> {{t common.open}}
               </a>
-              <a title="Click to Copy" {{action copyErrLog view.content target="view"}} class="task-detail-copy pull-right">
+              <a {{translateAttr title="common.fullLogPopup.clickToCopy"}} {{action copyErrLog view.content target="view"}} class="task-detail-copy pull-right">
                 <i class="glyphicon glyphicon-copy"></i> {{t common.copy}}
               </a>
             </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/14d63dd9/ambari-web/app/templates/main/alerts/add_definition_to_group_popup.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/alerts/add_definition_to_group_popup.hbs b/ambari-web/app/templates/main/alerts/add_definition_to_group_popup.hbs
index 445cfd4..ed5cfa8 100644
--- a/ambari-web/app/templates/main/alerts/add_definition_to_group_popup.hbs
+++ b/ambari-web/app/templates/main/alerts/add_definition_to_group_popup.hbs
@@ -100,7 +100,7 @@
           <tbody>
             {{#if view.pageContent}}
               {{#each entry in view.pageContent}}
-                <tr {{bindAttr class="entry.filtered::hidden"}}>
+                <tr {{bindAttr class="entry.filtered::hidden entry.selected:active"}}>
                   <td width="35%">
                     {{entry.label}}
                   </td>

http://git-wip-us.apache.org/repos/asf/ambari/blob/14d63dd9/ambari-web/app/templates/main/host/bulk_operation_confirm_popup.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/host/bulk_operation_confirm_popup.hbs b/ambari-web/app/templates/main/host/bulk_operation_confirm_popup.hbs
index e9f55a9..217aa4f 100644
--- a/ambari-web/app/templates/main/host/bulk_operation_confirm_popup.hbs
+++ b/ambari-web/app/templates/main/host/bulk_operation_confirm_popup.hbs
@@ -19,7 +19,7 @@
 <p>{{{view.message}}}</p>
 <div class="task-top-wrap">
   <div class="task-detail-ico-wrap">
-    <a href="#" title="Click to Copy" {{action "textTrigger"}} class="task-detail-copy"><i class="glyphicon glyphicon-copy"></i> {{t common.copy}}</a>
+    <a href="#" {{translateAttr title="common.fullLogPopup.clickToCopy"}} {{action "textTrigger"}} class="task-detail-copy"><i class="glyphicon glyphicon-copy"></i> {{t common.copy}}</a>
   </div>
 </div>
 <div class="task-detail-log-info">

http://git-wip-us.apache.org/repos/asf/ambari/blob/14d63dd9/ambari-web/app/templates/wizard/step1.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/wizard/step1.hbs b/ambari-web/app/templates/wizard/step1.hbs
index dce6b27..312898c 100644
--- a/ambari-web/app/templates/wizard/step1.hbs
+++ b/ambari-web/app/templates/wizard/step1.hbs
@@ -135,7 +135,7 @@
                       <tr>
                         <td class="col-sm-2">{{operatingSystem.osType}}</td>
                         <td class="col-sm-9" colspan="2">
-                          <table class="table table-condensed no-borders repos-inner-table">
+                          <table class="table table-condensed no-borders inner-table">
                             <tbody>
                               {{#each repository in operatingSystem.repositories}}
                                 <tr>

http://git-wip-us.apache.org/repos/asf/ambari/blob/14d63dd9/ambari-web/app/templates/wizard/step9/step9HostTasksLogPopup.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/wizard/step9/step9HostTasksLogPopup.hbs b/ambari-web/app/templates/wizard/step9/step9HostTasksLogPopup.hbs
index 9640e32..6145730 100644
--- a/ambari-web/app/templates/wizard/step9/step9HostTasksLogPopup.hbs
+++ b/ambari-web/app/templates/wizard/step9/step9HostTasksLogPopup.hbs
@@ -24,34 +24,43 @@
   {{#if view.isNoTasksScheduled}}
     {{t installer.step9.host.status.noTasks}}
   {{else}}
-    <div {{bindAttr class="view.isLogWrapHidden::hidden :task-list-main-warp"}}>
-      <div class="task-top-wrap">
-        <div class="task-name-top task-detail-log-rolename">{{t common.tasks}}</div>
-        <div class="select-wrap">
-          {{t common.show}}:
-          {{view Ember.Select
-          classNames="form-control"
-          contentBinding="view.categories"
-          optionValuePath="content.value"
-          optionLabelPath="content.label"
-          selectionBinding="view.category"
-          }}
+    <div {{bindAttr class="view.isLogWrapHidden::hidden :task-list-main-wrap :table-body-wrap"}}>
+      <div class="row">
+        <h2 class="table-title col-sm-2">{{t common.tasks}}</h2>
+        <div class="table-controls row col-sm-10 pull-right">
+          <div class="col-sm-12">
+            <div class="btn-group pull-right">
+              {{view Ember.Select
+                classNames="form-control"
+                contentBinding="view.categories"
+                optionValuePath="content.value"
+                optionLabelPath="content.label"
+                selectionBinding="view.category"
+              }}
+            </div>
+          </div>
         </div>
       </div>
       <div id="host-log">
-        {{#each taskInfo in view.tasks}}
-          <div {{bindAttr class="taskInfo.isVisible::hidden :log-list-wrap"}}>
-            <div {{action toggleTaskLog taskInfo}} class="task-list-line-cursor">
-              <div class="operation-name-icon-wrap">
-                <i {{bindAttr class="taskInfo.status taskInfo.icon"}}></i>
-                <a href="#">
-                  {{taskInfo.commandDetail}}
-                </a>
-              </div>
-              <div class="show-details"><i class="glyphicon glyphicon-caret-right"></i></div>
-            </div>
-          </div>
-        {{/each}}
+        <table class="table table-hover">
+          <tbody>
+            {{#each taskInfo in view.tasks}}
+              <tr {{action toggleTaskLog taskInfo}} {{bindAttr class="taskInfo.isVisible::hidden :pointer"}}>
+                <td class="col-sm-3">
+                  <i {{bindAttr class="taskInfo.status taskInfo.icon"}}></i>
+                  <a href="#">
+                    {{taskInfo.commandDetail}}
+                  </a>
+                </td>
+                <td class="col-sm-9 text-right">
+                  <a class="action" href="#">
+                    <span class="icon icon-caret-right"></span>
+                  </a>
+                </td>
+              </tr>
+            {{/each}}
+          </tbody>
+        </table>
         {{#if view.isEmptyList}}
           <div class="log-list-wrap">{{t installer.step9.hostLog.popup.noTasksToShow}}</div>
         {{/if}}
@@ -60,20 +69,25 @@
 
     <div {{bindAttr class="view.isLogWrapHidden:hidden :task-detail-info"}}>
       <div class="task-top-wrap">
-        <a class="task-detail-back" href="javascript:void(null)" {{action backToTaskList}} ><i
-                class="glyphicon glyphicon-arrow-left"></i>&nbsp;{{t common.tasks}}</a>
-
-        <div>
-          <i {{bindAttr class="view.openedTask.status :task-detail-status-ico view.openedTask.icon"}}></i>
-          <div class="task-detail-ico-wrap">
-            <a title="Click to Copy" {{action "textTrigger" taskInfo target="view"}} class="task-detail-copy"><i class="glyphicon glyphicon-copy"></i> {{t common.copy}}</a>
-            <a {{translateAttr title="common.openNewWindow"}} {{action openTaskLogInDialog}} class="task-detail-open-dialog"><i class="glyphicon icon-external-link"></i> {{t common.open}}</a>
-          </div>
-          <span class="task-detail-log-rolename">
+        <div class="row">
+          <h2 class="table-title col-sm-5">
+            <i {{bindAttr class="view.openedTask.status :task-detail-status-ico view.openedTask.icon"}}></i>
             {{view.openedTask.commandDetail}}
-          </span>
+          </h2>
+          <div class="table-controls row col-sm-7 pull-right">
+            <div class="col-sm-12">
+              <button type="button" class="btn btn-link pull-right" {{translateAttr title="common.openNewWindow"}} {{action openTaskLogInDialog}}>
+                <i class="icon icon-external-link"></i>&nbsp;{{t common.open}}
+              </button>
+              <button type="button" class="btn btn-link pull-right" {{translateAttr title="common.fullLogPopup.clickToCopy"}} {{action "textTrigger" taskInfo target="view"}}>
+                <i class="glyphicon glyphicon-copy"></i>&nbsp;{{t common.copy}}
+              </button>
+              <button type="button" class="btn btn-link pull-right" {{action backToTaskList}}>
+                <i class="glyphicon glyphicon-arrow-left"></i>&nbsp;{{t common.tasks}}
+              </button>
+            </div>
+          </div>
         </div>
-
       </div>
       {{#if view.isTaskLoaded}}
           <div class="task-detail-log-info">

http://git-wip-us.apache.org/repos/asf/ambari/blob/14d63dd9/ambari-web/app/utils/host_progress_popup.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/host_progress_popup.js b/ambari-web/app/utils/host_progress_popup.js
index 5bd0ceb..c615cae 100644
--- a/ambari-web/app/utils/host_progress_popup.js
+++ b/ambari-web/app/utils/host_progress_popup.js
@@ -182,8 +182,9 @@ App.HostPopup = Em.Object.create({
    * @type {Em.View}
    */
   abortIcon: Em.View.extend({
-    tagName: 'i',
-    classNames: ['abort-icon', 'icon-remove-circle', 'pointer'],
+    tagName: 'a',
+    classNames: ['action', 'abort-icon'],
+    template: Em.Handlebars.compile('<span class="icon icon-remove-circle"></span>'),
     click: function () {
       this.get('controller').abortRequest(this.get('servicesInfo'));
       return false;

http://git-wip-us.apache.org/repos/asf/ambari/blob/14d63dd9/ambari-web/app/views/main/host.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/host.js b/ambari-web/app/views/main/host.js
index 6043d63..9183f6b 100644
--- a/ambari-web/app/views/main/host.js
+++ b/ambari-web/app/views/main/host.js
@@ -346,9 +346,10 @@ App.MainHostView = App.TableView.extend(App.TableServerViewMixin, {
     type: 'number'
   }),
 
-  HostView:Em.View.extend({
-    content:null,
+  HostView: Em.View.extend({
+    content: null,
     tagName: 'tr',
+    classNameBindings: ['content.selected:active'],
     didInsertElement: function(){
       App.tooltip(this.$("[rel='HealthTooltip'], [rel='UsageTooltip'], [rel='ComponentsTooltip']"));
     },

http://git-wip-us.apache.org/repos/asf/ambari/blob/14d63dd9/ambari-web/app/views/wizard/step3_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/wizard/step3_view.js b/ambari-web/app/views/wizard/step3_view.js
index 2f57b9e..3249b24 100644
--- a/ambari-web/app/views/wizard/step3_view.js
+++ b/ambari-web/app/views/wizard/step3_view.js
@@ -311,7 +311,7 @@ App.WizardHostView = Em.View.extend({
 
   tagName: 'tr',
 
-  classNameBindings: ['hostInfo.bootStatus'],
+  classNameBindings: ['hostInfo.bootStatus', 'hostInfo.isChecked:active'],
 
   /**
    * Host from parent view

http://git-wip-us.apache.org/repos/asf/ambari/blob/14d63dd9/ambari-web/app/views/wizard/step9/hostLogPopupBody_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/wizard/step9/hostLogPopupBody_view.js b/ambari-web/app/views/wizard/step9/hostLogPopupBody_view.js
index 3dad7d8..d983252 100644
--- a/ambari-web/app/views/wizard/step9/hostLogPopupBody_view.js
+++ b/ambari-web/app/views/wizard/step9/hostLogPopupBody_view.js
@@ -21,6 +21,8 @@ var date = require('utils/date/date');
 
 App.WizardStep9HostLogPopupBodyView = Em.View.extend({
 
+  classNames: ['col-sm-12'],
+
   templateName: require('templates/wizard/step9/step9HostTasksLogPopup'),
 
   /**


[10/47] ambari git commit: AMBARI-18873 : added separate module ambari-view-package to create deb and rpm for views. views pom updated to copy the artifact into target/views-jars of ambari-contrib-view (nitirajrathore)

Posted by jo...@apache.org.
AMBARI-18873 : added separate module ambari-view-package to create deb and rpm for views. views pom updated to copy the artifact into target/views-jars of ambari-contrib-view (nitirajrathore)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: 74869f9803815d511ca7039e679a6787ae9cfe72
Parents: 2152c6a
Author: Nitiraj Rathore <ni...@gmail.com>
Authored: Tue Nov 22 12:29:30 2016 +0530
Committer: Nitiraj Rathore <ni...@gmail.com>
Committed: Tue Nov 22 12:29:30 2016 +0530

----------------------------------------------------------------------
 contrib/views/ambari-views-package/pom.xml      | 123 +++++++++++++++++++
 .../src/main/package/deb/control/control        |  22 ++++
 contrib/views/capacity-scheduler/pom.xml        |  18 +++
 contrib/views/files/pom.xml                     |  18 +++
 contrib/views/hawq/pom.xml                      |  18 +++
 contrib/views/hive-next/pom.xml                 |  18 +++
 contrib/views/hive/pom.xml                      |  18 +++
 contrib/views/hueambarimigration/pom.xml        |  18 +++
 contrib/views/jobs/pom.xml                      |  23 ++++
 contrib/views/pig/pom.xml                       |  18 +++
 contrib/views/pom.xml                           |   5 +
 contrib/views/slider/pom.xml                    |  18 +++
 contrib/views/storm/pom.xml                     |  23 ++++
 contrib/views/tez/pom.xml                       |  18 +++
 contrib/views/wfmanager/pom.xml                 |  18 +++
 contrib/views/zeppelin/pom.xml                  |  18 +++
 16 files changed, 394 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/74869f98/contrib/views/ambari-views-package/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/ambari-views-package/pom.xml b/contrib/views/ambari-views-package/pom.xml
new file mode 100644
index 0000000..cb070e6
--- /dev/null
+++ b/contrib/views/ambari-views-package/pom.xml
@@ -0,0 +1,123 @@
+<!--
+   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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.ambari.contrib.views</groupId>
+  <artifactId>ambari-views-package</artifactId>
+  <version>2.5.0.0.0</version>
+  <name>Ambari Views Package</name>
+  <parent>
+    <groupId>org.apache.ambari.contrib.views</groupId>
+    <artifactId>ambari-contrib-views</artifactId>
+    <version>2.5.0.0.0</version>
+  </parent>
+
+  <description>
+    This package is a meta package to create installable RPM and DEB file
+    which includes all the views jars.
+  </description>
+
+  <properties>
+    <deb.dependency.list>ambari-server (&gt;= ${ambari.version})</deb.dependency.list>
+    <views.directory>/var/lib/ambari-server/resources/views</views.directory>
+    <deb.architecture>amd64</deb.architecture>
+  </properties>
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>rpm-maven-plugin</artifactId>
+        <version>2.0.1</version>
+        <executions>
+          <execution>
+            <phase>none</phase>
+            <goals>
+              <goal>rpm</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <copyright>2012, Apache Software Foundation</copyright>
+          <group>Development</group>
+          <description>Maven Recipe: RPM Package.</description>
+          <provides>
+            <provide>ambari-views-package</provide>
+          </provides>
+          <prereqs>
+            <prereq>ambari-server &gt;= ${ambari.version}</prereq>
+          </prereqs>
+
+          <mappings>
+            <mapping>
+              <directory>${views.directory}</directory>
+              <filemode>777</filemode>
+              <username>root</username>
+              <groupname>root</groupname>
+              <sources>
+                <source>
+                  <location>${views.jars.dir.rel}</location>
+                </source>
+              </sources>
+            </mapping>
+          </mappings>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.vafer</groupId>
+        <artifactId>jdeb</artifactId>
+        <version>1.4</version>
+        <executions>
+          <execution>
+            <phase>none</phase>
+            <goals>
+              <goal>jdeb</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <verbose>true</verbose>
+          <skip>false</skip>
+          <controlDir>${basedir}/src/main/package/deb/control</controlDir>
+          <deb>${basedir}/target/${project.artifactId}_${package-version}-${package-release}.deb</deb>
+          <dataSet>
+            <data>
+              <src>${views.jars.dir.rel}</src>
+              <type>directory</type>
+              <mapper>
+                <prefix>${views.directory}</prefix>
+                <filemode>777</filemode>
+                <type>perm</type>
+                <user>root</user>
+                <group>root</group>
+              </mapper>
+            </data>
+          </dataSet>
+        </configuration>
+      </plugin>
+      <plugin>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <configuration>
+          <skipAssembly>true</skipAssembly>
+        </configuration>
+      </plugin>
+
+    </plugins>
+  </build>
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/74869f98/contrib/views/ambari-views-package/src/main/package/deb/control/control
----------------------------------------------------------------------
diff --git a/contrib/views/ambari-views-package/src/main/package/deb/control/control b/contrib/views/ambari-views-package/src/main/package/deb/control/control
new file mode 100644
index 0000000..40cd855
--- /dev/null
+++ b/contrib/views/ambari-views-package/src/main/package/deb/control/control
@@ -0,0 +1,22 @@
+# 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
+Package: [[artifactId]]
+Version: [[package-version]]-[[package-release]]
+Section: [[deb.section]]
+Priority: [[deb.priority]]
+Depends: [[deb.dependency.list]]
+Architecture: [[deb.architecture]]
+Description: [[description]]
+Maintainer: [[deb.publisher]]

http://git-wip-us.apache.org/repos/asf/ambari/blob/74869f98/contrib/views/capacity-scheduler/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/capacity-scheduler/pom.xml b/contrib/views/capacity-scheduler/pom.xml
index 7b7cdc9..c9de4d9 100644
--- a/contrib/views/capacity-scheduler/pom.xml
+++ b/contrib/views/capacity-scheduler/pom.xml
@@ -217,6 +217,24 @@
                     <includeScope>runtime</includeScope>
                 </configuration>
             </execution>
+          <execution>
+            <id>copy-artifact</id>
+            <phase>package</phase>
+            <goals>
+              <goal>copy</goal>
+            </goals>
+            <configuration>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>${project.groupId}</groupId>
+                  <artifactId>${project.artifactId}</artifactId>
+                  <version>${project.version}</version>
+                  <type>${project.packaging}</type>
+                </artifactItem>
+              </artifactItems>
+              <outputDirectory>${views.jars.dir.rel}</outputDirectory>
+            </configuration>
+          </execution>
         </executions>
       </plugin>
       <plugin>

http://git-wip-us.apache.org/repos/asf/ambari/blob/74869f98/contrib/views/files/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/files/pom.xml b/contrib/views/files/pom.xml
index 67beef9..f42d635 100644
--- a/contrib/views/files/pom.xml
+++ b/contrib/views/files/pom.xml
@@ -215,6 +215,24 @@
               <includeScope>runtime</includeScope>
             </configuration>
           </execution>
+          <execution>
+            <id>copy-artifact</id>
+            <phase>package</phase>
+            <goals>
+              <goal>copy</goal>
+            </goals>
+            <configuration>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>${project.groupId}</groupId>
+                  <artifactId>${project.artifactId}</artifactId>
+                  <version>${project.version}</version>
+                  <type>${project.packaging}</type>
+                </artifactItem>
+              </artifactItems>
+              <outputDirectory>${views.jars.dir.rel}</outputDirectory>
+            </configuration>
+          </execution>
         </executions>
       </plugin>
       <plugin>

http://git-wip-us.apache.org/repos/asf/ambari/blob/74869f98/contrib/views/hawq/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/hawq/pom.xml b/contrib/views/hawq/pom.xml
index 4fc543f..2aa04e0 100644
--- a/contrib/views/hawq/pom.xml
+++ b/contrib/views/hawq/pom.xml
@@ -209,6 +209,24 @@
                             <includeScope>runtime</includeScope>
                         </configuration>
                     </execution>
+                    <execution>
+                        <id>copy-artifact</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy</goal>
+                        </goals>
+                        <configuration>
+                            <artifactItems>
+                                <artifactItem>
+                                    <groupId>${project.groupId}</groupId>
+                                    <artifactId>${project.artifactId}</artifactId>
+                                    <version>${project.version}</version>
+                                    <type>${project.packaging}</type>
+                                </artifactItem>
+                            </artifactItems>
+                            <outputDirectory>${views.jars.dir.rel}</outputDirectory>
+                        </configuration>
+                    </execution>
                 </executions>
             </plugin>
         </plugins>

http://git-wip-us.apache.org/repos/asf/ambari/blob/74869f98/contrib/views/hive-next/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/hive-next/pom.xml b/contrib/views/hive-next/pom.xml
index 46deaf3..65c9902 100644
--- a/contrib/views/hive-next/pom.xml
+++ b/contrib/views/hive-next/pom.xml
@@ -322,6 +322,24 @@
               <includeScope>runtime</includeScope>
             </configuration>
           </execution>
+          <execution>
+            <id>copy-artifact</id>
+            <phase>package</phase>
+            <goals>
+              <goal>copy</goal>
+            </goals>
+            <configuration>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>${project.groupId}</groupId>
+                  <artifactId>${project.artifactId}</artifactId>
+                  <version>${project.version}</version>
+                  <type>${project.packaging}</type>
+                </artifactItem>
+              </artifactItems>
+              <outputDirectory>${views.jars.dir.rel}</outputDirectory>
+            </configuration>
+          </execution>
         </executions>
       </plugin>
       <plugin>

http://git-wip-us.apache.org/repos/asf/ambari/blob/74869f98/contrib/views/hive/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/hive/pom.xml b/contrib/views/hive/pom.xml
index 2814049..efa49e1 100644
--- a/contrib/views/hive/pom.xml
+++ b/contrib/views/hive/pom.xml
@@ -315,6 +315,24 @@
               <includeScope>runtime</includeScope>
             </configuration>
           </execution>
+          <execution>
+            <id>copy-artifact</id>
+            <phase>package</phase>
+            <goals>
+              <goal>copy</goal>
+            </goals>
+            <configuration>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>${project.groupId}</groupId>
+                  <artifactId>${project.artifactId}</artifactId>
+                  <version>${project.version}</version>
+                  <type>${project.packaging}</type>
+                </artifactItem>
+              </artifactItems>
+              <outputDirectory>${views.jars.dir.rel}</outputDirectory>
+            </configuration>
+          </execution>
         </executions>
       </plugin>
       <plugin>

http://git-wip-us.apache.org/repos/asf/ambari/blob/74869f98/contrib/views/hueambarimigration/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/hueambarimigration/pom.xml b/contrib/views/hueambarimigration/pom.xml
index 21837c3..ea94bec 100644
--- a/contrib/views/hueambarimigration/pom.xml
+++ b/contrib/views/hueambarimigration/pom.xml
@@ -233,6 +233,24 @@
               <includeScope>runtime</includeScope>
             </configuration>
           </execution>
+          <execution>
+            <id>copy-artifact</id>
+            <phase>package</phase>
+            <goals>
+              <goal>copy</goal>
+            </goals>
+            <configuration>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>${project.groupId}</groupId>
+                  <artifactId>${project.artifactId}</artifactId>
+                  <version>${project.version}</version>
+                  <type>${project.packaging}</type>
+                </artifactItem>
+              </artifactItems>
+              <outputDirectory>${views.jars.dir.rel}</outputDirectory>
+            </configuration>
+          </execution>
         </executions>
       </plugin>
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/74869f98/contrib/views/jobs/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/jobs/pom.xml b/contrib/views/jobs/pom.xml
index 8460c5b..d58ce10 100644
--- a/contrib/views/jobs/pom.xml
+++ b/contrib/views/jobs/pom.xml
@@ -34,6 +34,29 @@
     <build>
         <plugins>
             <plugin>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-artifact</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>copy</goal>
+                        </goals>
+                        <configuration>
+                            <artifactItems>
+                                <artifactItem>
+                                    <groupId>${project.groupId}</groupId>
+                                    <artifactId>${project.artifactId}</artifactId>
+                                    <version>${project.version}</version>
+                                    <type>${project.packaging}</type>
+                                </artifactItem>
+                            </artifactItems>
+                            <outputDirectory>${views.jars.dir.rel}</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
                 <groupId>org.codehaus.mojo</groupId>
                 <artifactId>build-helper-maven-plugin</artifactId>
                 <version>1.8</version>

http://git-wip-us.apache.org/repos/asf/ambari/blob/74869f98/contrib/views/pig/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/pig/pom.xml b/contrib/views/pig/pom.xml
index d2aada7..2f03d1e 100644
--- a/contrib/views/pig/pom.xml
+++ b/contrib/views/pig/pom.xml
@@ -283,6 +283,24 @@
               <includeScope>runtime</includeScope>
             </configuration>
           </execution>
+          <execution>
+            <id>copy-artifact</id>
+            <phase>package</phase>
+            <goals>
+              <goal>copy</goal>
+            </goals>
+            <configuration>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>${project.groupId}</groupId>
+                  <artifactId>${project.artifactId}</artifactId>
+                  <version>${project.version}</version>
+                  <type>${project.packaging}</type>
+                </artifactItem>
+              </artifactItems>
+              <outputDirectory>${views.jars.dir.rel}</outputDirectory>
+            </configuration>
+          </execution>
         </executions>
       </plugin>
       <plugin>

http://git-wip-us.apache.org/repos/asf/ambari/blob/74869f98/contrib/views/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/pom.xml b/contrib/views/pom.xml
index 94f8421..fb7d8fa 100644
--- a/contrib/views/pom.xml
+++ b/contrib/views/pom.xml
@@ -32,6 +32,8 @@
     <ambari.version>2.0.0.0-SNAPSHOT</ambari.version>
     <ambari.dir>${project.parent.parent.basedir}</ambari.dir>
     <hadoop.version>2.7.1</hadoop.version>
+    <views.jars.dir>views-jars</views.jars.dir>
+    <views.jars.dir.rel>../target/${views.jars.dir}</views.jars.dir.rel>
   </properties>
   <modules>
     <module>utils</module>
@@ -47,7 +49,10 @@
     <module>zeppelin</module>
     <module>hueambarimigration</module>
     <module>hive-next</module>
+    <module>hive</module>
     <module>wfmanager</module>
+    <!--ambari-views-package should be last in the module list for it to function properly-->
+    <module>ambari-views-package</module>
   </modules>
   <build>
     <pluginManagement>

http://git-wip-us.apache.org/repos/asf/ambari/blob/74869f98/contrib/views/slider/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/slider/pom.xml b/contrib/views/slider/pom.xml
index 0ddcb84..e907ece 100644
--- a/contrib/views/slider/pom.xml
+++ b/contrib/views/slider/pom.xml
@@ -303,6 +303,24 @@
               <includeArtifactIds>slider-agent</includeArtifactIds>
             </configuration>
           </execution>
+          <execution>
+            <id>copy-artifact</id>
+            <phase>package</phase>
+            <goals>
+              <goal>copy</goal>
+            </goals>
+            <configuration>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>${project.groupId}</groupId>
+                  <artifactId>${project.artifactId}</artifactId>
+                  <version>${project.version}</version>
+                  <type>${project.packaging}</type>
+                </artifactItem>
+              </artifactItems>
+              <outputDirectory>${views.jars.dir.rel}</outputDirectory>
+            </configuration>
+          </execution>
         </executions>
       </plugin>
       <plugin>

http://git-wip-us.apache.org/repos/asf/ambari/blob/74869f98/contrib/views/storm/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/storm/pom.xml b/contrib/views/storm/pom.xml
index 38ec8ba..cd92658 100644
--- a/contrib/views/storm/pom.xml
+++ b/contrib/views/storm/pom.xml
@@ -74,6 +74,29 @@
           </execution>
         </executions>
       </plugin>
+      <plugin>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>copy-artifact</id>
+            <phase>package</phase>
+            <goals>
+              <goal>copy</goal>
+            </goals>
+            <configuration>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>${project.groupId}</groupId>
+                  <artifactId>${project.artifactId}</artifactId>
+                  <version>${project.version}</version>
+                  <type>${project.packaging}</type>
+                </artifactItem>
+              </artifactItems>
+              <outputDirectory>${views.jars.dir.rel}</outputDirectory>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
     </plugins>
   </build>
   <dependencies>

http://git-wip-us.apache.org/repos/asf/ambari/blob/74869f98/contrib/views/tez/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/tez/pom.xml b/contrib/views/tez/pom.xml
index 26b0c49..170b89a 100644
--- a/contrib/views/tez/pom.xml
+++ b/contrib/views/tez/pom.xml
@@ -106,6 +106,24 @@
              <includes>fonts/**/*, img/**/*, scripts/**/*, assets/**/*, config/**/*, styles/**/*, index.html</includes>
            </configuration>
          </execution>
+         <execution>
+           <id>copy-artifact</id>
+           <phase>package</phase>
+           <goals>
+             <goal>copy</goal>
+           </goals>
+           <configuration>
+             <artifactItems>
+               <artifactItem>
+                 <groupId>${project.groupId}</groupId>
+                 <artifactId>${project.artifactId}</artifactId>
+                 <version>${project.version}</version>
+                 <type>${project.packaging}</type>
+               </artifactItem>
+             </artifactItems>
+             <outputDirectory>${views.jars.dir.rel}</outputDirectory>
+           </configuration>
+         </execution>
        </executions>
       </plugin>
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/74869f98/contrib/views/wfmanager/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/pom.xml b/contrib/views/wfmanager/pom.xml
index e03e656..d4aedf3 100644
--- a/contrib/views/wfmanager/pom.xml
+++ b/contrib/views/wfmanager/pom.xml
@@ -246,6 +246,24 @@
 							<includeScope>runtime</includeScope>
 						</configuration>
 					</execution>
+					<execution>
+						<id>copy-artifact</id>
+						<phase>package</phase>
+						<goals>
+							<goal>copy</goal>
+						</goals>
+						<configuration>
+							<artifactItems>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>${project.artifactId}</artifactId>
+									<version>${project.version}</version>
+									<type>${project.packaging}</type>
+								</artifactItem>
+							</artifactItems>
+							<outputDirectory>${views.jars.dir.rel}</outputDirectory>
+						</configuration>
+					</execution>
 				</executions>
 			</plugin>
 		</plugins>

http://git-wip-us.apache.org/repos/asf/ambari/blob/74869f98/contrib/views/zeppelin/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/zeppelin/pom.xml b/contrib/views/zeppelin/pom.xml
index 52efdce..2a52ce7 100644
--- a/contrib/views/zeppelin/pom.xml
+++ b/contrib/views/zeppelin/pom.xml
@@ -132,6 +132,24 @@
               <includeScope>runtime</includeScope>
             </configuration>
           </execution>
+          <execution>
+            <id>copy-artifact</id>
+            <phase>package</phase>
+            <goals>
+              <goal>copy</goal>
+            </goals>
+            <configuration>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>${project.groupId}</groupId>
+                  <artifactId>${project.artifactId}</artifactId>
+                  <version>${project.version}</version>
+                  <type>${project.packaging}</type>
+                </artifactItem>
+              </artifactItems>
+              <outputDirectory>${views.jars.dir.rel}</outputDirectory>
+            </configuration>
+          </execution>
         </executions>
       </plugin>
       <plugin>


[25/47] ambari git commit: AMBARI-18972. Remove redundant css (part 4) (onechiporenko)

Posted by jo...@apache.org.
AMBARI-18972. Remove redundant css (part 4) (onechiporenko)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: 6088c17906b784f57adca36af224d63135a49b9a
Parents: 292d279
Author: Oleg Nechiporenko <on...@apache.org>
Authored: Wed Nov 23 12:49:38 2016 +0200
Committer: Oleg Nechiporenko <on...@apache.org>
Committed: Wed Nov 23 12:49:38 2016 +0200

----------------------------------------------------------------------
 .../app/controllers/main/charts/heatmap.js      |   6 +-
 ambari-web/app/styles/application.less          | 213 +------------------
 ambari-web/app/styles/wizard.less               |  19 +-
 .../common/assign_master_components.hbs         |  62 +++---
 .../common/form/check_db_connection.hbs         |  26 ++-
 .../templates/common/host_progress_popup.hbs    |   7 +-
 .../main/charts/heatmap/heatmap_host_detail.hbs |  70 ++++--
 .../main/charts/heatmap/heatmap_rack.hbs        |  37 +---
 .../templates/main/charts/heatmap_dropdown.hbs  |   4 +-
 .../main/host/details/deleteComponentPopup.hbs  |  20 +-
 .../main/host/details/doDeleteHostPopup.hbs     |  35 ++-
 .../details/raiseDeleteComponentErrorPopup.hbs  |  21 +-
 .../main/service/info/heatmap_dropdown.hbs      |   2 +-
 ambari-web/app/templates/wizard/step3.hbs       |   2 +-
 .../wizard/step3/step3_host_warnings_popup.hbs  |  18 +-
 .../wizard/step9/step9HostTasksLogPopup.hbs     |   2 +-
 .../common/assign_master_components_view.js     |   4 +-
 .../views/main/charts/heatmap/heatmap_rack.js   |  23 +-
 .../step1_controller_test.js                    |  11 +-
 19 files changed, 213 insertions(+), 369 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/6088c179/ambari-web/app/controllers/main/charts/heatmap.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/charts/heatmap.js b/ambari-web/app/controllers/main/charts/heatmap.js
index caa3f2d..e4f35a4 100644
--- a/ambari-web/app/controllers/main/charts/heatmap.js
+++ b/ambari-web/app/controllers/main/charts/heatmap.js
@@ -270,10 +270,10 @@ App.MainChartsHeatmapController = Em.Controller.extend(App.WidgetSectionMixin, {
     var rackCount = this.get('racks.length');
     if (rackCount < 2) {
       return "col-md-12";
-    } else if (rackCount == 2) {
+    }
+    if (rackCount === 2) {
       return "col-md-6";
-    } else {
-      return "col-md-4";
     }
+    return "col-md-4";
   }.property('racks.length')
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/6088c179/ambari-web/app/styles/application.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/application.less b/ambari-web/app/styles/application.less
index 024679e..aab3287 100644
--- a/ambari-web/app/styles/application.less
+++ b/ambari-web/app/styles/application.less
@@ -461,16 +461,6 @@ table.diff {
   }
 }
 
-.row .tinyoffset {
-  margin-left: 3%!important;
-}
-
-.row .tinyspan {
-  width: 2%!important;
-  *width: 1.95%!important;
-  float: none;
-}
-
 .hidden-scroll {
   overflow-y: hidden;
 }
@@ -1168,22 +1158,6 @@ a:focus {
     .tab-marker-position (@health-status-yellow);
   }
 
-  .summary-view-host{
-    float: right;
-    padding-right: 20px;
-    a {
-      text-decoration: none;
-      &:hover {
-        text-decoration: underline;
-      }
-    }
-    .category-name {
-      cursor: pointer;
-      color: #23527c;
-      font-size: 14px;
-      margin-left: 10px;
-    }
-  }
   .service-summary-component-red-dead {
     color: @health-status-red;
     display: inline;
@@ -1215,30 +1189,6 @@ a:focus {
   }
 }
 
-#security-stages {
-  tr {
-    height: 50px;
-  }
-  td {
-    width: 180px;
-  }
-  .progress-wrapper {
-    width: 50%;
-    .progress {
-      margin-bottom: 0;
-    }
-  }
-  .progress-percentage {
-    margin-left: 10px;
-  }
-  a.remove-link {
-    text-decoration:none;
-    pointer-events: none;
-    color:black;
-    cursor: default;
-  }
-}
-
 .faintText {
   color: #999;
 }
@@ -1591,14 +1541,6 @@ table.graphs {
   border-radius: 4px;
   padding: 4px;
   background: #FFFDF6;
-  .warning-details {
-    padding-left: 16px;
-    padding-top: 5px;
-  }
-  .warning-list {
-    font-size: 0.95em;
-    font-style: italic;
-  }
 }
 
 .services-menu {
@@ -1660,68 +1602,10 @@ ul.filter {
 
 /*start charts rack*/
 .rack {
-  vertical-align: top;
-  border: 1px solid #D4D4D4;
-  margin-bottom: 10px;
-  margin-top:5px;
-  background-color: #fff;
 
   .rackHeader {
-    background-color: #F7F7F7;
     padding: 5px 5px 5px 10px;
-    border-bottom: 1px solid #D4D4D4;
-
-    .statusName {
-      font-size: 15px;
-      color: #006F9F;
-      text-shadow: #fff 0 0 1px;
-      font-weight: bold;
-      vertical-align: top;
-    }
-    .toggler {
-      background-repeat: no-repeat;
-      background-image: @rack-state-toggler;
-      display: block;
-      height: 22px;
-      position: relative;
-      width: 32px;
-      float: right;
-
-      span {
-        background-repeat: no-repeat;
-        background-image: @rack-state-plus;
-        display: block;
-        height: 17px;
-        left: 7px;
-        position: absolute;
-        top: 3px;
-        width: 18px;
-      }
-
-      span.isActive {
-        background-image: @rack-state-minus !important;
-        top: 10px;
-      }
-    }
-  }
-  .hostsSummary {
-    border-left: 1px solid #CDCDCD;
-    border-right: 1px solid #CDCDCD;
-    border-bottom: 1px solid #9f9f9f;
-    background-color: #f7f8fa;
-    font-size: 12px;
-    padding: 4px 0 4px 9px;
-    .textBlock {
-      color: #000;
-      padding-right: 10px;
-
-      div {
-        height: 12px;
-        margin: 0 3px 0 0;
-        width: 12px;
-        display: inline-block;
-      }
-    }
+    color: #006F9F;
   }
   .indicatorR {
     background-color: #E2001A;
@@ -1734,103 +1618,23 @@ ul.filter {
   .indicatorG {
     background-color: #88BF67;
   }
-  .statusIndicator {
-    display: inline-block;
-    width: 20px;
-    height: 19px;
-    margin-right: 10px;
-    margin-top: 4px;
-    float: left;
-    background-repeat: no-repeat;
-  }
-  .rackName {
-    margin-top: 4px;
-    float: left;
-  }
-  .statusIndicator.LIVE {
-    background-image: @rack-status-live;
-  }
-
-  .statusIndicator.CRITICAL {
-    background-image: @rack-status-critical;
-  }
-
-  .statusIndicator.DEAD {
-    background-image: @rack-status-dead;
-  }
 
   .hosts {
-    padding: 4px;
-    overflow: hidden;
-    display: none;
+    padding: 2px 15px;
 
-    .ember-view {
-      float: left;
-      width: 100%;
-      height: 43px;
-
-      .hostBlock {
-        height: 38px;
-        position: relative;
-        border: 1px solid #D4D4D4;
-        margin-right: 3px;
-      }
-    }
     .hostBlock {
+      height: 38px;
+      border: 1px solid #D4D4D4;
       border-radius: 4px;
     }
-    .hostBlock.HEALTHY {
-      background-color: #87BE73;
-    }
-    .hostBlock.UNHEALTHY {
-      background-color: #E40024;
-    }
-    .hostBlock.CRITICAL {
-      background: #F39236;
-    }
-    .ember-view:hover {
-    }
-  }
-
-  .hosts.isActive {
-    display: block;
   }
 }
 
 /*Start Heatmap*/
 .heatmap {
-  li.heatmap-metrics-dropdown-links{
-    cursor: pointer;
-  }
-  .rack.rack-5-2 {
-    .hosts {
-      height: 86px;
-    }
-  }
-  .rack.rack-5-4 {
-    .hosts {
-      height: 172px;
-    }
-  }
-  .rack.rack-5-6 {
-    .hosts {
-      height: 258px;
-    }
-  }
-  .rack.rack-5-8 {
-    .hosts {
-      height: 344px;
-    }
-  }
-  .rack.rack-5-10 {
-    .hosts {
-      height: 430px;
-    }
-  }
 
   .heatmap_host_details {
-    font-size: 12px;
-    line-height: 1.6em;
+
     border: 1px solid #D9D9D9;
     background: #f9f9f9;
     width: 280px;
@@ -1838,9 +1642,7 @@ ul.filter {
     position: absolute;
     z-index: 1000;
   }
-  .container-fluid {
-    padding: 0;
-  }
+
   .legend {
     margin-top: 20px;
     margin-bottom: 20px;
@@ -1857,9 +1659,6 @@ ul.filter {
     }
   }
 
-  h4 {
-    color: #777;
-  }
   .heatmap-host {
     display: block;
     width: 100%;

http://git-wip-us.apache.org/repos/asf/ambari/blob/6088c179/ambari-web/app/styles/wizard.less
----------------------------------------------------------------------
diff --git a/ambari-web/app/styles/wizard.less b/ambari-web/app/styles/wizard.less
index 005bd0c..747c7eb 100644
--- a/ambari-web/app/styles/wizard.less
+++ b/ambari-web/app/styles/wizard.less
@@ -380,12 +380,6 @@
   }
 
   .remaining-hosts {
-    padding: 25px;
-    border-top: solid 1px #ccc;
-    border-left: solid 1px #ccc;
-    border-right: groove 5px #ccc;
-    border-bottom: groove 5px #ccc;
-    margin-top: 20px;
     background-color: #FCF8E3;
     color: #C09853;
   }
@@ -427,27 +421,22 @@
   }
 
   .hostName {
-    word-wrap: break-word!important;
-    white-space: normal;
-    width: 220px;
     line-height: 30px;
-    display: inline-block;
   }
   .hostString {
     margin-bottom: 5px;
     word-wrap: break-word;
   }
 
-  .badge {
+  .label {
     background-color: @green;
     color: #fff;
     cursor: pointer;
     font-weight: bold;
     text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
-  }
-
-  .badge:hover {
-    background-color: @green;
+    &:hover {
+      background-color: @green;
+    }
   }
 
   .alertFlag {

http://git-wip-us.apache.org/repos/asf/ambari/blob/6088c179/ambari-web/app/templates/common/assign_master_components.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/assign_master_components.hbs b/ambari-web/app/templates/common/assign_master_components.hbs
index fc90a99..a0a4990 100644
--- a/ambari-web/app/templates/common/assign_master_components.hbs
+++ b/ambari-web/app/templates/common/assign_master_components.hbs
@@ -33,7 +33,7 @@
       {{#if controller.isLoaded}}
         <div class="assign-masters row">
           <div class="select-hosts col-md-8">
-            <div class="row col-md-12">
+            <div class="row">
               {{#if showCurrentHost}}
                 <div class="col-md-12 control-group mlc">
                   <div class="row">
@@ -46,23 +46,22 @@
               <div class="clearfix"></div>
               <div class="row">
                 <div class="col-md-12 control-group">
-                  <form class="form-horizontal" autocomplete="off">
                     <!-- View for array controller -->
                     {{#each controller.additionalHostsList}}
-                      <div class="row additional-hosts-list">
-                        <div class="col-md-5">
+                      <div class="row row-no-pad additional-hosts-list">
+                        <div class="col-md-4">
                           <label class="pts pull-right">
                             {{label}}
                           </label>
                         </div>
-                        <div class="col-md-7 host-cell">
+                        <div class="col-md-8 host-cell">
                           {{host}}
                         </div>
                       </div>
                     {{/each}}
                     {{#each servicesMastersToShow}}
-                      <div class="row">
-                        <div class="col-md-5">
+                      <div class="row row-no-pad form-group">
+                        <div class="col-md-4">
                           <div class="control-group">
                             <label class="pts pull-right">
                               {{#if showCurrentPrefix}}
@@ -75,13 +74,13 @@
                             </label>
                           </div>
                         </div>
-                        <div class="col-md-7">
+                        <div class="col-md-6">
                           {{#if isServiceCoHost}}
                             <div class="hostName">
                               {{selectedHost}}<i class="glyphicon glyphicon-asterisks">&#10037;</i>
                             </div>
                           {{else}}
-                            <div {{bindAttr class="errorMessage:error: warnMessage:warning: :form-group"}}>
+                            <div {{bindAttr class="errorMessage:error: warnMessage:warning:"}}>
                               {{#if view.shouldUseInputs}}
                                 {{view App.InputHostView
                                 componentBinding="this"
@@ -93,13 +92,6 @@
                                 optionValuePath="content.host_name"
                                 optionLabelPath="content.host_info" }}
                               {{/if}}
-                              {{#if showAddControl}}
-                                {{view App.AddControlView componentNameBinding="component_name"}}
-                              {{/if}}
-                              {{#if showRemoveControl}}
-                                {{view App.RemoveControlView componentNameBinding="component_name" serviceComponentIdBinding="serviceComponentId"}}
-                              {{/if}}
-
                               <span rel="popover" title="Warning" {{bindAttr data-content="warnMessage"}}>
                                 {{#if warnMessage}}
                                   <i class="glyphicon glyphicon-warning-sign"></i>
@@ -113,9 +105,22 @@
                             </div>
                           {{/if}}
                         </div>
+                        <div class="col-md-1 pts">
+                          {{#if showAddControl}}
+                            <div class="pull-right">
+                              {{view App.AddControlView componentNameBinding="component_name"}}
+                            </div>
+                          {{/if}}
+                        </div>
+                        <div class="col-md-1 pts">
+                          {{#if showRemoveControl}}
+                            <div class="pull-left">
+                              {{view App.RemoveControlView componentNameBinding="component_name" serviceComponentIdBinding="serviceComponentId"}}
+                            </div>
+                          {{/if}}
+                        </div>
                       </div>
                     {{/each}}
-                  </form>
                 </div>
               </div>
             </div>
@@ -123,17 +128,26 @@
 
           <div class="host-assignments col-md-4">
             {{#each masterHostMapping}}
-              <div class="mapping-box">
-                <div class="hostString"><span>{{hostInfo}}</span></div>
-                {{#each masterServicesToDisplay}}
-                  <span {{bindAttr class="isInstalled:assigned-service:new-service :service-component :label"}}>{{display_name}}</span>
-                {{/each}}
+              <div class="well side-menu-well">
+                <div class="row">
+                  <div class="col-md-10 col-md-offset-1">
+                    <div class="hostString"><span>{{hostInfo}}</span></div>
+                    {{#each masterServicesToDisplay}}
+                      <span {{bindAttr class="isInstalled:assigned-service:new-service :service-component :label"}}>{{display_name}}</span>
+                    {{/each}}
+                  </div>
+                </div>
               </div>
             {{/each}}
 
             {{#if remainingHosts}}
-              <div class="remaining-hosts">
-                <span><strong>{{remainingHosts}}</strong> {{t installer.step5.attention}}</span></div>
+              <div class="remaining-hosts well side-menu-well">
+                <div class="row">
+                  <div class="col-md-10 col-md-offset-1">
+                    <strong>{{remainingHosts}}</strong> {{t installer.step5.attention}}
+                  </div>
+                </div>
+              </div>
             {{/if}}
           </div>
           <div class="clearfix"></div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/6088c179/ambari-web/app/templates/common/form/check_db_connection.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/form/check_db_connection.hbs b/ambari-web/app/templates/common/form/check_db_connection.hbs
index 71bcdab..39de9c4 100644
--- a/ambari-web/app/templates/common/form/check_db_connection.hbs
+++ b/ambari-web/app/templates/common/form/check_db_connection.hbs
@@ -16,16 +16,22 @@
 * limitations under the License.
 }}
 
-<div class="entry-row form-group db-connection">
-  <div class="col-md-3 control-label"></div>
-  <div class="col-md-9">
-    <span {{bindAttr class=":pull-left :btn :btn-primary view.isBtnDisabled:disabled"}} {{action connectToDatabase target="view"}}>{{view.btnCaption}}</span>
-    <div class="pull-left connection-result mll">
-      <a {{bindAttr class="view.isConnectionSuccess:mute:action"}} {{action showLogsPopup target="view"}}>{{view.responseCaption}}</a>
+<div class="entry-row db-connection">
+  <div class="col-md-3 form-group control-label"></div>
+  <div class="col-md-9 form-group">
+    <div class="row">
+      <div class="col-md-5">
+        <span {{bindAttr class=":pull-left :btn :btn-primary view.isBtnDisabled:disabled"}} {{action connectToDatabase target="view"}}>{{view.btnCaption}}</span>
+      </div>
+      <div class="connection-result col-md-5">
+        <a {{bindAttr class="view.isConnectionSuccess:mute:action :btn :btn-link"}} {{action showLogsPopup target="view"}}>{{view.responseCaption}}</a>
+      </div>
+      {{#if view.isConnecting}}
+        {{view App.SpinnerView classNames="mll pull-left"}}
+      {{/if}}
+      <div class="col-md-2">
+        <i {{bindAttr class="view.isConnectionSuccess:glyphicon-ok-sign:glyphicon-warning-sign :glyphicon view.isRequestResolved::hide"}}></i>
+      </div>
     </div>
-    {{#if view.isConnecting}}
-      {{view App.SpinnerView classNames="mll pull-left"}}
-    {{/if}}
-    <i {{bindAttr class=":pull-right view.isConnectionSuccess:glyphicon-ok-sign:glyphicon-warning-sign :glyphicon view.isRequestResolved::hide"}}></i>
   </div>
 </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/6088c179/ambari-web/app/templates/common/host_progress_popup.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/host_progress_popup.hbs b/ambari-web/app/templates/common/host_progress_popup.hbs
index 2123f0a..c6c8bf8 100644
--- a/ambari-web/app/templates/common/host_progress_popup.hbs
+++ b/ambari-web/app/templates/common/host_progress_popup.hbs
@@ -33,7 +33,7 @@
             optionValuePath="content.value"
             optionLabelPath="content.label"
             selectionBinding="view.serviceCategory"
-            class="form-control"
+            classNames="form-control"
         }}
       </div>
     </div>
@@ -92,7 +92,7 @@
             optionValuePath="content.value"
             optionLabelPath="content.label"
             selectionBinding="view.hostCategory"
-            class="form-control"
+            classNames="form-control"
         }}
       </div>
     </div>
@@ -155,12 +155,11 @@
       <div class="select-wrap tasks-list-select">
         {{t common.show}}:
         {{view Ember.Select
-            class="form-control"
             contentBinding="view.categories"
             optionValuePath="content.value"
             optionLabelPath="content.label"
             selectionBinding="view.taskCategory"
-            class="form-control"
+            classNames="form-control"
         }}
       </div>
     </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/6088c179/ambari-web/app/templates/main/charts/heatmap/heatmap_host_detail.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/charts/heatmap/heatmap_host_detail.hbs b/ambari-web/app/templates/main/charts/heatmap/heatmap_host_detail.hbs
index ca45740..c2311e3 100644
--- a/ambari-web/app/templates/main/charts/heatmap/heatmap_host_detail.hbs
+++ b/ambari-web/app/templates/main/charts/heatmap/heatmap_host_detail.hbs
@@ -16,22 +16,54 @@
 * limitations under the License.
 }}
 
-<b>{{view.details.hostName}}</b><br/>
-{{t common.os}}: {{view.details.osType}}<br/>
-{{t common.ipAddress}}: {{view.details.ip}}<br/>
-{{t common.rack}}: {{view.details.rack}}<br/>
-{{#if view.details.metricName}}
-  {{view.details.metricName}}: {{view.details.metricValue}}<br/>
-{{/if}}
-{{#if view.details.diskUsage}}
-  {{t common.disk}}: {{view.details.diskUsage}}% <br/>
-{{/if}}
-{{#if view.details.cpuUsage}}
-  {{t common.cpu}}: {{view.details.cpuUsage}}%<br/>
-{{/if}}
-{{#if view.details.memoryUsage}}
-  {{t common.memory}}: {{view.details.memoryUsage}}%<br/>
-{{/if}}
-{{#if view.details.hostComponents}}
-  {{t common.components}}: {{view.details.hostComponents}}<br/>
-{{/if}}
+<table class="table">
+  <thead>
+  <tr>
+    <td colspan="2">{{view.details.hostName}}</td>
+  </tr>
+  </thead>
+  <tbody>
+  <tr>
+    <td>{{t common.os}}</td>
+    <td>{{view.details.osType}}</td>
+  </tr>
+  <tr>
+    <td>{{t common.ipAddress}}</td>
+    <td>{{view.details.ip}}</td>
+  </tr>
+  <tr>
+    <td>{{t common.rack}}</td>
+    <td>{{view.details.rack}}</td>
+  </tr>
+  {{#if view.details.metricName}}
+    <tr>
+      <td>{{view.details.metricName}}</td>
+      <td>{{view.details.metricValue}}</td>
+    </tr>
+  {{/if}}
+  {{#if view.details.diskUsage}}
+    <tr>
+      <td>{{t common.disk}}</td>
+      <td>{{view.details.diskUsage}}%</td>
+    </tr>
+  {{/if}}
+  {{#if view.details.cpuUsage}}
+    <tr>
+      <td>{{t common.cpu}}</td>
+      <td>{{view.details.cpuUsage}}%</td>
+    </tr>
+  {{/if}}
+  {{#if view.details.memoryUsage}}
+    <tr>
+      <td>{{t common.memory}}</td>
+      <td>{{view.details.memoryUsage}}%</td>
+    </tr>
+  {{/if}}
+  {{#if view.details.hostComponents}}
+    <tr>
+      <td>{{t common.components}}</td>
+      <td>{{view.details.hostComponents}}</td>
+    </tr>
+  {{/if}}
+  </tbody>
+</table>

http://git-wip-us.apache.org/repos/asf/ambari/blob/6088c179/ambari-web/app/templates/main/charts/heatmap/heatmap_rack.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/charts/heatmap/heatmap_rack.hbs b/ambari-web/app/templates/main/charts/heatmap/heatmap_rack.hbs
index c3fe9fe..304e63d 100644
--- a/ambari-web/app/templates/main/charts/heatmap/heatmap_rack.hbs
+++ b/ambari-web/app/templates/main/charts/heatmap/heatmap_rack.hbs
@@ -16,36 +16,21 @@
 * limitations under the License.
 }}
 
-<div class="rackHeader">
-  <div class="statusName clearfix">
-    <div {{bindAttr class="view.statusIndicator rack.status"}}></div>
-    <div class="rackName">{{rack.name}}</div>
+<div class="rackHeader panel-heading">
+  <div class="statusName">
+    <h3 class="panel-title rackName">{{rack.name}}</h3>
   </div>
 </div>
-<!--<div class="hostsSummary clearfix">-->
-  <!--<div class="textBlock">Total hosts: {{!rack.hosts.length}}</div>-->
-  <!--{{!#if view.heatmapIsOpened}}-->
-    <!--<div class="textBlock">-->
-      <!--<div class="indicatorG"></div>-->
-      <!--Hosts in live state: {{!rack.liveHostsCount}}-->
-    <!--</div>-->
-    <!--<div class="textBlock">-->
-      <!--<div class="indicatorY"></div>-->
-      <!--Hosts in critical state: {{!rack.criticalHostsCount}}-->
-    <!--</div>-->
-    <!--<div class="textBlock">-->
-      <!--<div class="indicatorR"></div>-->
-      <!--Hosts in dead state: {{!rack.deadHostsCount}}-->
-    <!--</div>-->
-  <!--{{!/if}}-->
-<!--</div>-->
-<div class="isActive hosts clearfix">
-  <div {{bindAttr  class="view.rack.isLoaded::hidden"}}>
-    {{#each view.hosts}}
-        <div {{bindAttr style="view.hostCssStyle"}}>
+
+<div class="isActive hosts clearfix panel-body">
+  <div {{bindAttr class="view.rack.isLoaded::hidden"}}>
+    <div class="row row-no-pad">
+      {{#each view.hosts}}
+        <div {{bindAttr class="view.hostCssStyle"}}>
           {{view App.MainChartsHeatmapHostView contentBinding="this"}}
         </div>
-    {{/each}}
+      {{/each}}
+    </div>
   </div>
   {{#unless view.rack.isLoaded}}
     {{view App.SpinnerView}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/6088c179/ambari-web/app/templates/main/charts/heatmap_dropdown.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/charts/heatmap_dropdown.hbs b/ambari-web/app/templates/main/charts/heatmap_dropdown.hbs
index 1dd3d21..c080901 100644
--- a/ambari-web/app/templates/main/charts/heatmap_dropdown.hbs
+++ b/ambari-web/app/templates/main/charts/heatmap_dropdown.hbs
@@ -23,11 +23,11 @@
   <ul class="dropdown-menu">
     {{#each category in controller.heatmapCategories}}
       <li class="dropdown-submenu">
-        <a tabindex="-1" >{{category.displayName}}</a>
+        <a tabindex="-1">{{category.displayName}}</a>
         <ul class="dropdown-menu">
           {{#each heatmap in category.heatmaps}}
             <li>
-              <a tabindex="-1" {{action showHeatMapMetric heatmap target="controller"}}>{{heatmap.widget_name}}</a>
+              <a tabindex="-1" href="#" {{action showHeatMapMetric heatmap target="controller"}}>{{heatmap.widget_name}}</a>
             </li>
           {{/each}}
         </ul>

http://git-wip-us.apache.org/repos/asf/ambari/blob/6088c179/ambari-web/app/templates/main/host/details/deleteComponentPopup.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/host/details/deleteComponentPopup.hbs b/ambari-web/app/templates/main/host/details/deleteComponentPopup.hbs
index 14a585d..45cee97 100644
--- a/ambari-web/app/templates/main/host/details/deleteComponentPopup.hbs
+++ b/ambari-web/app/templates/main/host/details/deleteComponentPopup.hbs
@@ -18,26 +18,28 @@
 
 <p>{{{deleteComponentMsg}}}</p>
 {{#if lastComponent}}
-  <div class="alert alert-danger row">
-    <div class='tinyspan tinyoffset'>{{view App.CheckboxView checkedBinding="isChecked"}}</div>
-    <div class='col-md-10'>{{{lastComponentError}}}</div>
+  <div class="alert alert-danger">
+    <div class="row row-no-pad">
+      <div class="col-md-1">{{view App.CheckboxView checkedBinding="isChecked"}}</div>
+      <div class="col-md-11">{{{lastComponentError}}}</div>
+    </div>
   </div>
 {{/if}}
 {{#if isZkServer}}
-  <div class='alert alert-warning'>{{{deleteZkServerMsg}}}</div>
+  <div class="alert alert-warning">{{{deleteZkServerMsg}}}</div>
 {{/if}}
 {{#if isHiveMetastore}}
-  <div class='alert alert-warning'>{{{deleteHiveMetastoreMsg}}}</div>
+  <div class="alert alert-warning">{{{deleteHiveMetastoreMsg}}}</div>
 {{/if}}
 {{#if isWebHCatServer}}
-  <div class='alert alert-warning'>{{{deleteWebHCatServerMsg}}}</div>
+  <div class="alert alert-warning">{{{deleteWebHCatServerMsg}}}</div>
 {{/if}}
 {{#if isNimbus}}
-  <div class='alert alert-warning'>{{{deleteNimbusMsg}}}</div>
+  <div class="alert alert-warning">{{{deleteNimbusMsg}}}</div>
 {{/if}}
 {{#if isRangerKMSServer}}
-  <div class='alert alert-warning'>{{{deleteRangerKMSServereMsg}}}</div>
+  <div class="alert alert-warning">{{{deleteRangerKMSServereMsg}}}</div>
 {{/if}}
 {{#if isJournalNode}}
-    <div class='alert alert-warning'>{{{deleteJournalNodeMsg}}}</div>
+  <div class="alert alert-warning">{{{deleteJournalNodeMsg}}}</div>
 {{/if}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/6088c179/ambari-web/app/templates/main/host/details/doDeleteHostPopup.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/host/details/doDeleteHostPopup.hbs b/ambari-web/app/templates/main/host/details/doDeleteHostPopup.hbs
index 15729e0..6a62ee0 100644
--- a/ambari-web/app/templates/main/host/details/doDeleteHostPopup.hbs
+++ b/ambari-web/app/templates/main/host/details/doDeleteHostPopup.hbs
@@ -16,29 +16,29 @@
 * limitations under the License.
 }}
 {{#if unknownComponents}}
-  {{t hosts.delete.popup.unknownComponents}}
-  <br /><br />
-  <div class='row'>
-    <div class='tinyoffset col-md-10'>
-      <i>{{unknownComponents}}</i>
+  <div class="row">
+    <div class="col-md-12">
+      <p>{{t hosts.delete.popup.unknownComponents}}<br /><i>{{unknownComponents}}</i></p>
     </div>
   </div>
-  <br />
 {{/if}}
 <p><i class="glyphicon glyphicon-warning-sign"></i> {{{deletePopupBody}}}</p>
 {{#if lastComponent}}
-    <div class="alert alert-danger row">
-        <div class='tinyspan tinyoffset'>{{view App.CheckboxView checkedBinding="isChecked"}}</div>
-        <div class='col-md-10'>{{view lastComponentError}}</div>
+  <div class="alert alert-danger">
+    <div class="row row-no-pad">
+      <div class="col-md-1">{{view App.CheckboxView checkedBinding="isChecked"}}</div>
+      <div class="col-md-10">{{view lastComponentError}}</div>
     </div>
+  </div>
 {{/if}}
-<br />
+
 {{#if toDecommissionComponents.length}}
-  <div class='alert alert-warning'>
+  <div class="alert alert-warning">
     {{view decommissionWarning}}
   </div>
 {{/if}}
-<div class='alert alert-warning'>{{{t common.important.strong}}}
+
+<div class="alert alert-warning">{{{t common.important.strong}}}
   {{#if unknownComponents}}
     {{t hosts.delete.popup.body.msg.unknownComponents}}
   {{/if}}
@@ -46,12 +46,11 @@
 </div>
 
 {{#unless unknownComponents}}
-  <div class='alert alert-warning'>
-  <!-- Agent is still online, so host record will be re-inserted on next heartbeat. -->
-  {{t hosts.delete.popup.body.msg5}}
-  <span class="text-danger">{{t hosts.delete.popup.body.msg6}}</span>
+  <div class="alert alert-warning">
+    <!-- Agent is still online, so host record will be re-inserted on next heartbeat. -->
+    {{t hosts.delete.popup.body.msg5}}
+    <span class="text-danger">{{t hosts.delete.popup.body.msg6}}</span>
   </div>
 {{/unless}}
 
-
-<div class='alert alert-warning'>{{{t common.important.strong}}} {{t hosts.delete.popup.body.msg3}}</div>
+<div class="alert alert-warning">{{{t common.important.strong}}} {{t hosts.delete.popup.body.msg3}}</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/6088c179/ambari-web/app/templates/main/host/details/raiseDeleteComponentErrorPopup.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/host/details/raiseDeleteComponentErrorPopup.hbs b/ambari-web/app/templates/main/host/details/raiseDeleteComponentErrorPopup.hbs
index e83e76a..a21d364 100644
--- a/ambari-web/app/templates/main/host/details/raiseDeleteComponentErrorPopup.hbs
+++ b/ambari-web/app/templates/main/host/details/raiseDeleteComponentErrorPopup.hbs
@@ -17,16 +17,17 @@
 }}
 
 <div class="dialog-delete-component">
-  <div class="warning">
-  <i class="glyphicon glyphicon-warning-sign"></i> <strong>{{componentsBody}}</strong>
-  </div>
-  <div class="row">
-    <div class="tinyoffset col-md-10 warning-list">
-    {{componentsStr}}
+  <div class="warning row row-no-pad">
+    <div class="col-md-1">
+      <i class="glyphicon glyphicon-warning-sign"></i>
+    </div>
+    <div class="col-md-11 warning-list">
+      <p><strong>{{componentsBody}}</strong><br /><em>{{componentsStr}}</em></p>
+      {{#if showBodyEnd}}
+        <div class="warning-details">
+          {{{componentsBodyEnd}}}
+        </div>
+      {{/if}}
     </div>
   </div>
-
-{{#if showBodyEnd}}
-  <div class="warning-details">{{{componentsBodyEnd}}}</div>
-{{/if}}
 </div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/6088c179/ambari-web/app/templates/main/service/info/heatmap_dropdown.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/service/info/heatmap_dropdown.hbs b/ambari-web/app/templates/main/service/info/heatmap_dropdown.hbs
index d4ad435..10e333e 100644
--- a/ambari-web/app/templates/main/service/info/heatmap_dropdown.hbs
+++ b/ambari-web/app/templates/main/service/info/heatmap_dropdown.hbs
@@ -24,7 +24,7 @@
   <ul class="dropdown-menu">
     {{#each heatmap in controller.allHeatmaps}}
       <li class="heatmap-metrics-dropdown-links">
-        <a tabindex="-1" {{action showHeatMapMetric heatmap target="controller"}}>{{heatmap.widget_name}}</a>
+        <a tabindex="-1" href="#" {{action showHeatMapMetric heatmap target="controller"}}>{{heatmap.widget_name}}</a>
       </li>
     {{/each}}
   </ul>

http://git-wip-us.apache.org/repos/asf/ambari/blob/6088c179/ambari-web/app/templates/wizard/step3.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/wizard/step3.hbs b/ambari-web/app/templates/wizard/step3.hbs
index 64c76ef..2ba87e1 100644
--- a/ambari-web/app/templates/wizard/step3.hbs
+++ b/ambari-web/app/templates/wizard/step3.hbs
@@ -71,7 +71,7 @@
                 <th class="col-md-2">{{t common.action}}</th>
                 <!-- trash icon -->
                 <!-- retry icon -->
-                <th class="tinyspan">
+                <th>
                   {{view App.CheckboxView checkedBinding="view.pageChecked"}}
                 </th>
               </tr>

http://git-wip-us.apache.org/repos/asf/ambari/blob/6088c179/ambari-web/app/templates/wizard/step3/step3_host_warnings_popup.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/wizard/step3/step3_host_warnings_popup.hbs b/ambari-web/app/templates/wizard/step3/step3_host_warnings_popup.hbs
index 0628a98..7b8475f 100644
--- a/ambari-web/app/templates/wizard/step3/step3_host_warnings_popup.hbs
+++ b/ambari-web/app/templates/wizard/step3/step3_host_warnings_popup.hbs
@@ -61,14 +61,14 @@
               </div>
               <div id="{{unbound category.category}}" class="panel-body collapse in" style="display: none">
                 {{#if category.warnings.length}}
-                  <table>
+                  <table class="table">
                     <thead>
-                    <tr>
-                      <th colspan="2">{{{category.message}}}</th>
-                    </tr>
-                    <tr>
-                      <th colspan="2"><b>{{category.type}}</b></th>
-                    </tr>
+                      <tr>
+                        <th colspan="4">{{{category.message}}}</th>
+                      </tr>
+                      <tr>
+                        <th colspan="4"><b>{{category.type}}</b></th>
+                      </tr>
                     </thead>
                     <tbody>
                       {{#each warning in category.warnings}}
@@ -76,9 +76,13 @@
                         <td class="warning-name" {{bindAttr data-original-title="warning.command"}} >{{{warning.name}}}</td>
                         {{#if warning.version}}
                           <td class="package-version">{{warning.version}}</td>
+                        {{else}}
+                          <td></td>
                         {{/if}}
                         {{#if warning.target}}
                           <td class="package-version">{{warning.target}}</td>
+                        {{else}}
+                          <td></td>
                         {{/if}}
                         <td>{{category.action}}
                           <a href="javascript:void(null);" rel='HostsListTooltip' {{bindAttr data-original-title="warning.hostsList"}} {{action showHostsPopup warning.hostsLong}}>

http://git-wip-us.apache.org/repos/asf/ambari/blob/6088c179/ambari-web/app/templates/wizard/step9/step9HostTasksLogPopup.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/wizard/step9/step9HostTasksLogPopup.hbs b/ambari-web/app/templates/wizard/step9/step9HostTasksLogPopup.hbs
index 3d6895c..9640e32 100644
--- a/ambari-web/app/templates/wizard/step9/step9HostTasksLogPopup.hbs
+++ b/ambari-web/app/templates/wizard/step9/step9HostTasksLogPopup.hbs
@@ -30,7 +30,7 @@
         <div class="select-wrap">
           {{t common.show}}:
           {{view Ember.Select
-          class="form-control"
+          classNames="form-control"
           contentBinding="view.categories"
           optionValuePath="content.value"
           optionLabelPath="content.label"

http://git-wip-us.apache.org/repos/asf/ambari/blob/6088c179/ambari-web/app/views/common/assign_master_components_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/assign_master_components_view.js b/ambari-web/app/views/common/assign_master_components_view.js
index d838eef..53859f6 100644
--- a/ambari-web/app/views/common/assign_master_components_view.js
+++ b/ambari-web/app/views/common/assign_master_components_view.js
@@ -173,7 +173,7 @@ App.AddControlView = Em.View.extend({
 
   tagName: "span",
 
-  classNames: ["badge"],
+  classNames: ["label", 'extra-component'],
 
   classNameBindings: ['uniqueId'],
 
@@ -212,7 +212,7 @@ App.RemoveControlView = Em.View.extend({
 
   tagName: "span",
 
-  classNames: ["badge"],
+  classNames: ["label", 'extra-component'],
 
   template: Em.Handlebars.compile('-'),
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/6088c179/ambari-web/app/views/main/charts/heatmap/heatmap_rack.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/charts/heatmap/heatmap_rack.js b/ambari-web/app/views/main/charts/heatmap/heatmap_rack.js
index af840fb..012e762 100644
--- a/ambari-web/app/views/main/charts/heatmap/heatmap_rack.js
+++ b/ambari-web/app/views/main/charts/heatmap/heatmap_rack.js
@@ -21,7 +21,7 @@ var lazyloading = require('utils/lazy_loading');
 
 App.MainChartsHeatmapRackView = Em.View.extend({
   templateName: require('templates/main/charts/heatmap/heatmap_rack'),
-  classNames: ['rack'],
+  classNames: ['rack', 'panel', 'panel-default'],
   classNameBindings: ['visualSchema'],
 
   /** rack status block class */
@@ -63,13 +63,22 @@ App.MainChartsHeatmapRackView = Em.View.extend({
    */
   hostCssStyle: function () {
     var rack = this.get('rack');
-    var widthPercent = 100;
     var hostCount = rack.get('hosts.length');
-    if (hostCount && hostCount < 11) {
-      widthPercent = (100 / hostCount) - 0.5;
-    } else {
-      widthPercent = 10; // max out at 10%
+    if (hostCount >= 12) {
+      return 'col-md-1';
     }
-    return "width:" + widthPercent + "%;float:left;";
+    if (hostCount === 1) {
+      return 'col-md-12';
+    }
+    if (hostCount === 2) {
+      return 'col-md-6';
+    }
+    if (hostCount === 3) {
+      return 'col-md-4';
+    }
+    if (hostCount === 4) {
+      return 'col-md-3';
+    }
+    return 'col-md-2';
   }.property('rack.isLoaded')
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/6088c179/ambari-web/test/controllers/main/alerts/add_alert_definition/step1_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/alerts/add_alert_definition/step1_controller_test.js b/ambari-web/test/controllers/main/alerts/add_alert_definition/step1_controller_test.js
index 7d19239..58f1b47 100644
--- a/ambari-web/test/controllers/main/alerts/add_alert_definition/step1_controller_test.js
+++ b/ambari-web/test/controllers/main/alerts/add_alert_definition/step1_controller_test.js
@@ -24,17 +24,22 @@ var controller;
 describe('App.AddAlertDefinitionStep1Controller', function () {
 
   beforeEach(function () {
-    controller = App.AddAlertDefinitionStep1Controller.create({content: {}});
+    controller = App.AddAlertDefinitionStep1Controller.create({content: Em.Object.create({})});
   });
 
   describe('#selectType', function() {
 
     beforeEach(function () {
+      sinon.stub(App.router, 'send', Em.K);
       controller.get('content').set('selectedType', '');
     });
 
+    afterEach(function () {
+      App.router.send.restore();
+    });
+
     it('should set isActive for selected type', function () {
-      var e = {context: {value: 'PORT'}};
+      var e = {context: {name: 'PORT'}};
       controller.selectType(e);
       expect(controller.get('content.selectedType')).to.equal('PORT');
     });
@@ -49,7 +54,7 @@ describe('App.AddAlertDefinitionStep1Controller', function () {
 
     it('should set predefined type', function () {
       controller.loadStep();
-      expect(controller.get('content.selectedType').to.equal(''));
+      expect(controller.get('content.selectedType')).to.equal('');
     });
 
   });


[11/47] ambari git commit: AMBARI-18425: Support PAM as an authentication option for Ranger in Ambari (Shi Wang via mugdha)

Posted by jo...@apache.org.
AMBARI-18425: Support PAM as an authentication option for Ranger in Ambari (Shi Wang via mugdha)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: a10cc80b3b75fa3bfa3d51d5e0382e1b56d61913
Parents: 74869f9
Author: Shi Wang <sh...@us.ibm.com>
Authored: Thu Nov 17 13:03:38 2016 -0800
Committer: Mugdha Varadkar <mu...@apache.org>
Committed: Tue Nov 22 12:35:51 2016 +0530

----------------------------------------------------------------------
 .../0.4.0/package/scripts/setup_ranger_xml.py   | 18 ++++++++++++++++
 .../0.4.0/package/templates/ranger_admin_pam.j2 | 22 ++++++++++++++++++++
 .../package/templates/ranger_remote_pam.j2      | 22 ++++++++++++++++++++
 .../0.5.0/configuration/ranger-admin-site.xml   |  2 +-
 ambari-web/app/data/HDP2.3/site_properties.js   |  3 +++
 5 files changed, 66 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/a10cc80b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/setup_ranger_xml.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/setup_ranger_xml.py b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/setup_ranger_xml.py
index f1b4797..316d207 100644
--- a/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/setup_ranger_xml.py
+++ b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/setup_ranger_xml.py
@@ -166,6 +166,24 @@ def setup_ranger_admin(upgrade_type=None):
 
     Link('/usr/bin/ranger-admin',
     to=format('{ranger_home}/ews/ranger-admin-services.sh'))
+  
+  if default("/configurations/ranger-admin-site/ranger.authentication.method", "") == 'PAM':
+    d = '/etc/pam.d'
+    if os.path.isdir(d):
+        File(format('{d}/ranger-admin'),
+            content=Template('ranger_admin_pam.j2'),
+            owner = params.unix_user,
+            group = params.unix_group,
+            mode=0644
+            )
+        File(format('{d}/ranger-remote'),
+            content=Template('ranger_remote_pam.j2'),
+            owner = params.unix_user,
+            group = params.unix_group,
+            mode=0644
+            )
+    else:
+    	Logger.error("Unable to use PAM authentication, /etc/pam.d/ directory does not exist.")
 
   Execute(('ln','-sf', format('{ranger_home}/ews/ranger-admin-services.sh'),'/usr/bin/ranger-admin'),
     not_if=format("ls /usr/bin/ranger-admin"),

http://git-wip-us.apache.org/repos/asf/ambari/blob/a10cc80b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/templates/ranger_admin_pam.j2
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/templates/ranger_admin_pam.j2 b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/templates/ranger_admin_pam.j2
new file mode 100644
index 0000000..d69ad6c
--- /dev/null
+++ b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/templates/ranger_admin_pam.j2
@@ -0,0 +1,22 @@
+{#
+ # 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.
+ #}
+#%PAM-1.0
+auth    sufficient        pam_unix.so
+auth    sufficient        pam_sss.so
+account sufficient        pam_unix.so
+account sufficient        pam_sss.so

http://git-wip-us.apache.org/repos/asf/ambari/blob/a10cc80b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/templates/ranger_remote_pam.j2
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/templates/ranger_remote_pam.j2 b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/templates/ranger_remote_pam.j2
new file mode 100644
index 0000000..d69ad6c
--- /dev/null
+++ b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/templates/ranger_remote_pam.j2
@@ -0,0 +1,22 @@
+{#
+ # 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.
+ #}
+#%PAM-1.0
+auth    sufficient        pam_unix.so
+auth    sufficient        pam_sss.so
+account sufficient        pam_unix.so
+account sufficient        pam_sss.so

http://git-wip-us.apache.org/repos/asf/ambari/blob/a10cc80b/ambari-server/src/main/resources/common-services/RANGER/0.5.0/configuration/ranger-admin-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/RANGER/0.5.0/configuration/ranger-admin-site.xml b/ambari-server/src/main/resources/common-services/RANGER/0.5.0/configuration/ranger-admin-site.xml
index c0e537b..c52924c 100644
--- a/ambari-server/src/main/resources/common-services/RANGER/0.5.0/configuration/ranger-admin-site.xml
+++ b/ambari-server/src/main/resources/common-services/RANGER/0.5.0/configuration/ranger-admin-site.xml
@@ -184,7 +184,7 @@
     <name>ranger.authentication.method</name>
     <value>UNIX</value>
     <display-name>Authentication method</display-name>
-    <description>Ranger admin Authentication - UNIX/LDAP/AD/NONE</description>
+    <description>Ranger admin Authentication - UNIX/PAM/LDAP/AD/NONE</description>
     <value-attributes>
       <overridable>false</overridable>
     </value-attributes>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a10cc80b/ambari-web/app/data/HDP2.3/site_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2.3/site_properties.js b/ambari-web/app/data/HDP2.3/site_properties.js
index 9ae68df..2dadd1b 100644
--- a/ambari-web/app/data/HDP2.3/site_properties.js
+++ b/ambari-web/app/data/HDP2.3/site_properties.js
@@ -105,6 +105,9 @@ hdp23properties.push({
         foreignKeys: ['ranger.ldap.ad.domain','ranger.ldap.ad.url','ranger.ldap.ad.base.dn','ranger.ldap.ad.bind.dn','ranger.ldap.ad.bind.password','ranger.ldap.ad.referral','ranger.ldap.ad.user.searchfilter']
       },
       {
+         displayName: 'PAM'
+      },
+      {
         displayName: 'UNIX',
         foreignKeys: ['ranger.unixauth.service.port', 'ranger.unixauth.service.hostname', 'ranger.unixauth.remote.login.enabled']
       },


[43/47] ambari git commit: AMBARI-18979. Optimize loading of views in cloud environments (Laszlo Puskas via magyari_sandor)

Posted by jo...@apache.org.
AMBARI-18979. Optimize loading of views in cloud environments (Laszlo Puskas via magyari_sandor)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: 549d7cc86e43664050546355d96ba457c06e7884
Parents: c255559
Author: Laszlo Puskas <lp...@hortonworks.com>
Authored: Fri Nov 25 17:35:42 2016 +0100
Committer: Sandor Magyari <sm...@hortonworks.com>
Committed: Fri Nov 25 17:35:42 2016 +0100

----------------------------------------------------------------------
 .../server/configuration/Configuration.java     |  23 +-
 .../ambari/server/events/AmbariEvent.java       |   5 +
 .../events/ClusterConfigFinishedEvent.java      |  53 +++
 .../ambari/server/topology/TopologyManager.java |  16 +-
 .../ambari/server/view/ViewExtractor.java       |   2 +-
 .../apache/ambari/server/view/ViewRegistry.java | 381 +++++++++++--------
 .../ClusterDeployWithStartOnlyTest.java         |   2 +-
 ...InstallWithoutStartOnComponentLevelTest.java |   2 +-
 .../ClusterInstallWithoutStartTest.java         |   2 +-
 .../ambari/server/view/ViewRegistryTest.java    |   2 +
 10 files changed, 314 insertions(+), 174 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/549d7cc8/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
index 863c948..5676091 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java
@@ -1863,6 +1863,22 @@ public class Configuration {
       "server.stages.parallel", Boolean.TRUE);
 
   /**
+   *
+   * Property driving the view extraction.
+   * It only applies to  blueprint deployments.
+   *
+   * If set to TRUE on ambari-server startup only the system views are loaded; non-system views are extracted upon a cluster
+   * creation request is received and the cluster configuration is successfully performed
+   *
+   * It is advised to use this property only in cases when ambari-server startup time is critical (eg. cloud environments)
+   *
+   * By default this is FALSE so all views are extracted and deployed at server startup.
+   */
+  @Markdown(description = "Drives view extraction in case of blueprint deployments; non-system views are deployed when cluster configuration is successful")
+  public static final ConfigurationProperty<Boolean> VIEW_EXTRACT_AFTER_CLUSTER_CONFIG =  new ConfigurationProperty<>("view.extract-after-cluster-config", Boolean.FALSE);
+
+
+  /**
    * In case this is set to DEPENDENCY_ORDERED one stage is created for each request and command dependencies are
    * handled directly by ActionScheduler. In case of STAGE (which is the default) one or more stages are
    * created depending on dependencies.
@@ -4441,6 +4457,11 @@ public class Configuration {
     return Integer.parseInt(getProperty(VIEW_REQUEST_THREADPOOL_MAX_SIZE));
   }
 
+  public Boolean extractViewsAfterClusterConfig() {
+    return Boolean.parseBoolean(getProperty(VIEW_EXTRACT_AFTER_CLUSTER_CONFIG));
+  }
+
+
   /**
    * Get the time, in ms, that a request to a view will wait for an available
    * thread to handle the request before returning an error.
@@ -5760,7 +5781,7 @@ public class Configuration {
     String acceptors = getProperty(SRVR_API_ACCEPTOR_THREAD_COUNT);
     return StringUtils.isEmpty(acceptors) ? null : Integer.parseInt(acceptors);
   }
- 
+
   public String getPamConfigurationFile() {
     return getProperty(PAM_CONFIGURATION_FILE);
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/549d7cc8/ambari-server/src/main/java/org/apache/ambari/server/events/AmbariEvent.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/AmbariEvent.java b/ambari-server/src/main/java/org/apache/ambari/server/events/AmbariEvent.java
index 7ec5972..868ce3f 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/events/AmbariEvent.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/events/AmbariEvent.java
@@ -128,6 +128,11 @@ public abstract class AmbariEvent {
     CLUSTER_CONFIG_CHANGED,
 
     /**
+     * Cluster configuration finished.
+     */
+    CLUSTER_CONFIG_FINISHED,
+
+    /**
      * Metrics Collector force refresh needed.
      */
     METRICS_COLLECTOR_HOST_DOWN,

http://git-wip-us.apache.org/repos/asf/ambari/blob/549d7cc8/ambari-server/src/main/java/org/apache/ambari/server/events/ClusterConfigFinishedEvent.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/events/ClusterConfigFinishedEvent.java b/ambari-server/src/main/java/org/apache/ambari/server/events/ClusterConfigFinishedEvent.java
new file mode 100644
index 0000000..f0cac72
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/events/ClusterConfigFinishedEvent.java
@@ -0,0 +1,53 @@
+/**
+ * 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.
+ */
+
+package org.apache.ambari.server.events;
+
+/**
+ * The {@link ClusterConfigFinishedEvent} class is fired when a
+ * cluster configuration is successfully updated.
+ */
+public class ClusterConfigFinishedEvent extends AmbariEvent {
+  private final String clusterName;
+
+
+  public ClusterConfigFinishedEvent(String clusterName) {
+    super(AmbariEventType.CLUSTER_CONFIG_FINISHED);
+    this.clusterName = clusterName;
+  }
+
+  /**
+   * Get the cluster name
+   *
+   * @return
+   */
+  public String getClusterName() {
+    return clusterName;
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public String toString() {
+    StringBuilder buffer = new StringBuilder("ClusterConfigChangedEvent{");
+    buffer.append("clusterName=").append(getClusterName());
+    buffer.append("}");
+    return buffer.toString();
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/549d7cc8/ambari-server/src/main/java/org/apache/ambari/server/topology/TopologyManager.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/topology/TopologyManager.java b/ambari-server/src/main/java/org/apache/ambari/server/topology/TopologyManager.java
index 341633e..d6a4bdd 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/topology/TopologyManager.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/topology/TopologyManager.java
@@ -58,6 +58,7 @@ import org.apache.ambari.server.controller.spi.ResourceProvider;
 import org.apache.ambari.server.controller.spi.SystemException;
 import org.apache.ambari.server.controller.spi.UnsupportedPropertyException;
 import org.apache.ambari.server.events.AmbariEvent;
+import org.apache.ambari.server.events.ClusterConfigFinishedEvent;
 import org.apache.ambari.server.events.HostRemovedEvent;
 import org.apache.ambari.server.events.RequestFinishedEvent;
 import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
@@ -114,6 +115,9 @@ public class TopologyManager {
   @Inject
   private SecurityConfigurationFactory securityConfigurationFactory;
 
+  @Inject
+  private AmbariEventPublisher ambariEventPublisher;
+
   /**
    * A boolean not cached thread-local (volatile) to prevent double-checked
    * locking on the synchronized keyword.
@@ -145,8 +149,9 @@ public class TopologyManager {
       : executor;
   }
 
+  // executed by the IoC framework after creating the object (guice)
   @Inject
-  public void setEventPublisher(AmbariEventPublisher ambariEventPublisher) {
+  private void register() {
     ambariEventPublisher.register(this);
   }
 
@@ -280,6 +285,13 @@ public class TopologyManager {
 
     addClusterConfigRequest(topology, new ClusterConfigurationRequest(
       ambariContext, topology, true, stackAdvisorBlueprintProcessor, configureSecurity));
+    executor.submit(new Callable<Boolean>() {
+      @Override
+      public Boolean call() throws Exception {
+        ambariEventPublisher.publish(new ClusterConfigFinishedEvent(clusterName));
+        return Boolean.TRUE;
+      }
+    });
     LogicalRequest logicalRequest = processRequest(persistedRequest, topology, provisionId);
 
     //todo: this should be invoked as part of a generic lifecycle event which could possibly
@@ -352,7 +364,7 @@ public class TopologyManager {
 
     Map<String, String> requestInfoProps = new HashMap<>();
     requestInfoProps.put(org.apache.ambari.server.controller.spi.Request.REQUEST_INFO_BODY_PROPERTY,
-        "{\"" + ArtifactResourceProvider.ARTIFACT_DATA_PROPERTY + "\": " + descriptor + "}");
+      "{\"" + ArtifactResourceProvider.ARTIFACT_DATA_PROPERTY + "\": " + descriptor + "}");
 
     org.apache.ambari.server.controller.spi.Request request = new RequestImpl(Collections.<String>emptySet(),
         Collections.singleton(properties), requestInfoProps, null);

http://git-wip-us.apache.org/repos/asf/ambari/blob/549d7cc8/ambari-server/src/main/java/org/apache/ambari/server/view/ViewExtractor.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewExtractor.java b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewExtractor.java
index 3425691..0dabf90 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewExtractor.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewExtractor.java
@@ -74,7 +74,7 @@ public class ViewExtractor {
 
     try {
       // Remove directory if jar was updated since last extracting
-      if (archiveDir.exists() && viewArchive.lastModified() > archiveDir.lastModified()) {
+      if (archiveDir.exists() && viewArchive != null && viewArchive.lastModified() > archiveDir.lastModified()) {
         FileUtils.deleteDirectory(archiveDir);
       }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/549d7cc8/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java
index 7f58485..ab83696 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java
@@ -57,6 +57,7 @@ import org.apache.ambari.server.controller.AmbariServer;
 import org.apache.ambari.server.controller.AmbariSessionManager;
 import org.apache.ambari.server.controller.spi.Resource;
 import org.apache.ambari.server.controller.spi.ResourceProvider;
+import org.apache.ambari.server.events.ClusterConfigFinishedEvent;
 import org.apache.ambari.server.events.ServiceInstalledEvent;
 import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
 import org.apache.ambari.server.orm.dao.MemberDAO;
@@ -142,7 +143,7 @@ public class ViewRegistry {
   private static final String EXTRACT_COMMAND = "extract";
   private static final String ALL_VIEWS_REG_EXP = ".*";
   protected static final int DEFAULT_REQUEST_CONNECT_TIMEOUT = 5000;
-  protected static final int DEFAULT_REQUEST_READ_TIMEOUT    = 10000;
+  protected static final int DEFAULT_REQUEST_READ_TIMEOUT = 10000;
   private static final String VIEW_AMBARI_VERSION_REGEXP = "^((\\d+\\.)?)*(\\*|\\d+)$";
   private static final String VIEW_LOG_FILE = "view.log4j.properties";
   private static final String AMBARI_LOG_FILE = "log4j.properties";
@@ -313,7 +314,7 @@ public class ViewRegistry {
   @Inject
   RemoteAmbariClusterDAO remoteAmbariClusterDAO;
 
- // ----- Constructors -----------------------------------------------------
+  // ----- Constructors -----------------------------------------------------
 
   /**
    * Create the view registry.
@@ -329,7 +330,7 @@ public class ViewRegistry {
   /**
    * Registry main method.
    *
-   * @param args  the command line arguments
+   * @param args the command line arguments
    */
   public static void main(String[] args) {
 
@@ -337,8 +338,8 @@ public class ViewRegistry {
 
       if (args[0].equals(EXTRACT_COMMAND)) {
 
-        String     archivePath = args[1];
-        ViewModule viewModule  = new ViewModule();
+        String archivePath = args[1];
+        ViewModule viewModule = new ViewModule();
 
         try {
           if (extractViewArchive(archivePath, viewModule, true)) {
@@ -366,9 +367,8 @@ public class ViewRegistry {
   /**
    * Get a view definition for the given name.
    *
-   * @param viewName  the view name
-   * @param version   the version
-   *
+   * @param viewName the view name
+   * @param version  the version
    * @return the view definition for the given name
    */
   public ViewEntity getDefinition(String viewName, String version) {
@@ -378,8 +378,7 @@ public class ViewRegistry {
   /**
    * Get the view definition for the given resource type.
    *
-   * @param resourceTypeEntity  the resource type
-   *
+   * @param resourceTypeEntity the resource type
    * @return the view definition for the given resource type or null
    */
   public ViewEntity getDefinition(ResourceTypeEntity resourceTypeEntity) {
@@ -397,7 +396,7 @@ public class ViewRegistry {
   /**
    * Add a view definition to the registry.
    *
-   * @param definition  the definition
+   * @param definition the definition
    */
   public void addDefinition(ViewEntity definition) {
     viewDefinitions.put(definition.getName(), definition);
@@ -406,8 +405,7 @@ public class ViewRegistry {
   /**
    * Get the collection of view instances for the given view definition.
    *
-   * @param definition  the view definition
-   *
+   * @param definition the view definition
    * @return the collection of view instances for the view definition
    */
   public Collection<ViewInstanceEntity> getInstanceDefinitions(ViewEntity definition) {
@@ -423,10 +421,9 @@ public class ViewRegistry {
   /**
    * Get the instance definition for the given view name and instance name.
    *
-   * @param viewName      the view name
-   * @param version       the version
-   * @param instanceName  the instance name
-   *
+   * @param viewName     the view name
+   * @param version      the version
+   * @param instanceName the instance name
    * @return the view instance definition for the given view and instance name
    */
   public ViewInstanceEntity getInstanceDefinition(String viewName, String version, String instanceName) {
@@ -439,8 +436,8 @@ public class ViewRegistry {
   /**
    * Add an instance definition for the given view definition.
    *
-   * @param definition          the owning view definition
-   * @param instanceDefinition  the instance definition
+   * @param definition         the owning view definition
+   * @param instanceDefinition the instance definition
    */
   public void addInstanceDefinition(ViewEntity definition, ViewInstanceEntity instanceDefinition) {
     Map<String, ViewInstanceEntity> instanceDefinitions = viewInstanceDefinitions.get(definition);
@@ -459,8 +456,8 @@ public class ViewRegistry {
   /**
    * Remove an instance definition for the given view definition.
    *
-   * @param definition    the owning view definition
-   * @param instanceName  the instance name
+   * @param definition   the owning view definition
+   * @param instanceName the instance name
    */
   public void removeInstanceDefinition(ViewEntity definition, String instanceName) {
     Map<String, ViewInstanceEntity> instanceDefinitions = viewInstanceDefinitions.get(definition);
@@ -480,7 +477,7 @@ public class ViewRegistry {
   /**
    * Init the singleton instance.
    *
-   * @param singleton  the view registry
+   * @param singleton the view registry
    */
   public static void initInstance(ViewRegistry singleton) {
     ViewRegistry.singleton = singleton;
@@ -489,7 +486,7 @@ public class ViewRegistry {
   /**
    * Get the view registry singleton.
    *
-   * @return  the view registry
+   * @return the view registry
    */
   public static ViewRegistry getInstance() {
     return singleton;
@@ -498,9 +495,8 @@ public class ViewRegistry {
   /**
    * Get the sub-resource definitions for the given view name.
    *
-   * @param viewName  the instance name
-   * @param version   the version
-   *
+   * @param viewName the instance name
+   * @param version  the version
    * @return the set of sub-resource definitions
    */
   public Set<SubResourceDefinition> getSubResourceDefinitions(
@@ -511,11 +507,14 @@ public class ViewRegistry {
 
     return subResourceDefinitionsMap.get(viewName);
   }
+
   /**
    * Read all view archives.
    */
   public void readViewArchives() {
-    readViewArchives(false, false, ALL_VIEWS_REG_EXP);
+    boolean systemViewsOnly = configuration.extractViewsAfterClusterConfig() && clustersProvider.get().getClusters().isEmpty();
+    LOG.info("Triggering loading of [{}] views", systemViewsOnly ? "SYSTEM" : "ALL");
+    readViewArchives(systemViewsOnly, false, ALL_VIEWS_REG_EXP);
   }
 
   /**
@@ -530,8 +529,7 @@ public class ViewRegistry {
   /**
    * Determine whether or not the given view instance exists.
    *
-   * @param instanceEntity  the view instance entity
-   *
+   * @param instanceEntity the view instance entity
    * @return true if the the given view instance exists; false otherwise
    */
   public boolean instanceExists(ViewInstanceEntity instanceEntity) {
@@ -545,12 +543,11 @@ public class ViewRegistry {
   /**
    * Install the given view instance with its associated view.
    *
-   * @param instanceEntity  the view instance entity
-   *
-   * @throws ValidationException       if the given instance fails the validation checks
-   * @throws IllegalArgumentException  if the view associated with the given instance
-   *                                   does not exist
-   * @throws SystemException           if the instance can not be installed
+   * @param instanceEntity the view instance entity
+   * @throws ValidationException      if the given instance fails the validation checks
+   * @throws IllegalArgumentException if the view associated with the given instance
+   *                                  does not exist
+   * @throws SystemException          if the instance can not be installed
    */
   public void installViewInstance(ViewInstanceEntity instanceEntity)
       throws ValidationException, IllegalArgumentException, SystemException {
@@ -558,8 +555,8 @@ public class ViewRegistry {
 
     if (viewEntity != null) {
       String instanceName = instanceEntity.getName();
-      String viewName     = viewEntity.getCommonName();
-      String version      = viewEntity.getVersion();
+      String viewName = viewEntity.getCommonName();
+      String version = viewEntity.getVersion();
 
       if (getInstanceDefinition(viewName, version, instanceName) == null) {
         if (LOG.isDebugEnabled()) {
@@ -602,10 +599,9 @@ public class ViewRegistry {
   /**
    * Update a view instance for the view with the given view name.
    *
-   * @param instanceEntity  the view instance entity
-   *
-   * @throws ValidationException   if the given instance fails the validation checks
-   * @throws SystemException       if the instance can not be updated
+   * @param instanceEntity the view instance entity
+   * @throws ValidationException if the given instance fails the validation checks
+   * @throws SystemException     if the instance can not be updated
    */
   public void updateViewInstance(ViewInstanceEntity instanceEntity)
       throws ValidationException, SystemException {
@@ -624,9 +620,9 @@ public class ViewRegistry {
    *
    * @param instanceEntity
    */
-  public void updateView(ViewInstanceEntity instanceEntity){
+  public void updateView(ViewInstanceEntity instanceEntity) {
     ViewEntity viewEntity = getDefinition(instanceEntity.getViewName());
-    if(null != viewEntity && null != viewEntity.getView()){
+    if (null != viewEntity && null != viewEntity.getView()) {
       viewEntity.getView().onUpdate(instanceEntity);
     }
   }
@@ -634,9 +630,8 @@ public class ViewRegistry {
   /**
    * Get a view instance entity for the given view name and instance name.
    *
-   * @param viewName      the view name
-   * @param instanceName  the instance name
-   *
+   * @param viewName     the view name
+   * @param instanceName the instance name
    * @return a view instance entity for the given view name and instance name.
    */
   public ViewInstanceEntity getViewInstanceEntity(String viewName, String instanceName) {
@@ -646,7 +641,7 @@ public class ViewRegistry {
   /**
    * Uninstall a view instance for the view with the given view name.
    *
-   * @param instanceEntity  the view instance entity
+   * @param instanceEntity the view instance entity
    * @throws IllegalStateException if the given instance is not in a valid state
    */
   @Transactional
@@ -655,8 +650,8 @@ public class ViewRegistry {
 
     if (viewEntity != null) {
       String instanceName = instanceEntity.getName();
-      String viewName     = viewEntity.getCommonName();
-      String version      = viewEntity.getVersion();
+      String viewName = viewEntity.getCommonName();
+      String version = viewEntity.getVersion();
 
       if (getInstanceDefinition(viewName, version, instanceName) != null) {
         if (instanceEntity.isXmlDriven()) {
@@ -664,7 +659,7 @@ public class ViewRegistry {
         }
         if (LOG.isDebugEnabled()) {
           LOG.debug("Deleting view instance " + viewName + "/" +
-              version + "/" +instanceName);
+              version + "/" + instanceName);
         }
         List<PrivilegeEntity> instancePrivileges = privilegeDAO.findByResourceId(instanceEntity.getResource().getId());
         for (PrivilegeEntity privilegeEntity : instancePrivileges) {
@@ -683,8 +678,8 @@ public class ViewRegistry {
   /**
    * Remove the data entry keyed by the given key from the given instance entity.
    *
-   * @param instanceEntity  the instance entity
-   * @param key             the data key
+   * @param instanceEntity the instance entity
+   * @param key            the data key
    */
   @Transactional
   public void removeInstanceData(ViewInstanceEntity instanceEntity, String key) {
@@ -699,17 +694,17 @@ public class ViewRegistry {
   /**
    * Copy all privileges from one view instance to another
    *
-   * @param sourceInstanceEntity  the source instance entity
-   * @param targetInstanceEntity  the target instance entity
+   * @param sourceInstanceEntity the source instance entity
+   * @param targetInstanceEntity the target instance entity
    */
   @Transactional
   public void copyPrivileges(ViewInstanceEntity sourceInstanceEntity,
                              ViewInstanceEntity targetInstanceEntity) {
     LOG.debug("Copy all privileges from " + sourceInstanceEntity.getName() + " to " +
-              targetInstanceEntity.getName());
+        targetInstanceEntity.getName());
     List<PrivilegeEntity> targetInstancePrivileges = privilegeDAO.findByResourceId(targetInstanceEntity.getResource().getId());
     if (targetInstancePrivileges.size() > 0) {
-      LOG.warn("Target instance {} already has privileges assigned, these will not be deleted. Manual clean up may be needed",targetInstanceEntity.getName());
+      LOG.warn("Target instance {} already has privileges assigned, these will not be deleted. Manual clean up may be needed", targetInstanceEntity.getName());
     }
 
     List<PrivilegeEntity> sourceInstancePrivileges = privilegeDAO.findByResourceId(sourceInstanceEntity.getResource().getId());
@@ -721,9 +716,9 @@ public class ViewRegistry {
       try {
         privilegeDAO.create(targetPrivilege);
         targetPrivilege.getPrincipal().getPrivileges().add(sourcePrivilege);
-      } catch (Exception e){
-        LOG.warn("Could not migrate privilege {} ",targetPrivilege);
-        LOG.error("Caught exception",e);
+      } catch (Exception e) {
+        LOG.warn("Could not migrate privilege {} ", targetPrivilege);
+        LOG.error("Caught exception", e);
       }
 
     }
@@ -732,7 +727,7 @@ public class ViewRegistry {
   /**
    * Notify any registered listeners of the given event.
    *
-   * @param event  the event
+   * @param event the event
    */
   public void fireEvent(Event event) {
 
@@ -745,9 +740,9 @@ public class ViewRegistry {
   /**
    * Register the given listener to listen for events from the view identified by the given name and version.
    *
-   * @param listener     the listener
-   * @param viewName     the view name
-   * @param viewVersion  the view version; null indicates all versions
+   * @param listener    the listener
+   * @param viewName    the view name
+   * @param viewVersion the view version; null indicates all versions
    */
   public synchronized void registerListener(Listener listener, String viewName, String viewVersion) {
 
@@ -766,9 +761,9 @@ public class ViewRegistry {
   /**
    * Un-register the given listener from the view identified by the given name and version.
    *
-   * @param listener     the listener
-   * @param viewName     the view name
-   * @param viewVersion  the view version; null indicates all versions
+   * @param listener    the listener
+   * @param viewName    the view name
+   * @param viewVersion the view version; null indicates all versions
    */
   public synchronized void unregisterListener(Listener listener, String viewName, String viewVersion) {
 
@@ -786,12 +781,11 @@ public class ViewRegistry {
    * is permitted for the given user on the view instance identified by
    * the given resource.
    *
-   * @param permissionEntity  the permission entity
-   * @param resourceEntity    the resource entity
-   * @param userName          the user name
-   *
+   * @param permissionEntity the permission entity
+   * @param resourceEntity   the resource entity
+   * @param userName         the user name
    * @return true if the access specified by the given permission
-   *         is permitted for the given user.
+   * is permitted for the given user.
    */
   public boolean hasPermission(PermissionEntity permissionEntity, ResourceEntity resourceEntity, String userName) {
 
@@ -823,11 +817,10 @@ public class ViewRegistry {
    * by the given instance name should be allowed based on the permissions
    * granted to the current user.
    *
-   * @param viewName      the view name
-   * @param version       the view version
-   * @param instanceName  the name of the view instance resource
-   * @param readOnly      indicate whether or not this is for a read only operation
-   *
+   * @param viewName     the view name
+   * @param version      the view version
+   * @param instanceName the name of the view instance resource
+   * @param readOnly     indicate whether or not this is for a read only operation
    * @return true if the access to the view instance is allowed
    */
   public boolean checkPermission(String viewName, String version, String instanceName, boolean readOnly) {
@@ -842,9 +835,8 @@ public class ViewRegistry {
    * Determine whether or not access to the given view instance should be allowed based
    * on the permissions granted to the current user.
    *
-   * @param instanceEntity  the view instance entity
-   * @param readOnly        indicate whether or not this is for a read only operation
-   *
+   * @param instanceEntity the view instance entity
+   * @param readOnly       indicate whether or not this is for a read only operation
    * @return true if the access to the view instance is allowed
    */
   public boolean checkPermission(ViewInstanceEntity instanceEntity, boolean readOnly) {
@@ -867,8 +859,7 @@ public class ViewRegistry {
    * Determine whether or not the given view definition resource should be included
    * based on the permissions granted to the current user.
    *
-   * @param definitionEntity  the view definition entity
-   *
+   * @param definitionEntity the view definition entity
    * @return true if the view instance should be included based on the permissions of the current user
    */
   public boolean includeDefinition(ViewEntity definitionEntity) {
@@ -877,8 +868,8 @@ public class ViewRegistry {
       return true;
     }
 
-    for (ViewInstanceEntity instanceEntity: definitionEntity.getInstances()) {
-      if (checkPermission(instanceEntity, true) ) {
+    for (ViewInstanceEntity instanceEntity : definitionEntity.getInstances()) {
+      if (checkPermission(instanceEntity, true)) {
         return true;
       }
     }
@@ -888,11 +879,10 @@ public class ViewRegistry {
   /**
    * Set the properties of the given view instance from the given property set.
    *
-   * @param instanceEntity  the view instance entity
-   * @param properties      the view instance properties
-   * @param viewConfig      the view configuration
-   * @param classLoader     the class loader for the view
-   *
+   * @param instanceEntity the view instance entity
+   * @param properties     the view instance properties
+   * @param viewConfig     the view configuration
+   * @param classLoader    the class loader for the view
    * @throws SystemException if the view instance properties can not be set
    */
   public void setViewInstanceProperties(ViewInstanceEntity instanceEntity, Map<String, String> properties,
@@ -905,7 +895,7 @@ public class ViewRegistry {
         parameterConfigMap.put(paramConfig.getName(), paramConfig);
       }
       for (Map.Entry<String, String> entry : properties.entrySet()) {
-        String name  = entry.getKey();
+        String name = entry.getKey();
         String value = entry.getValue();
 
         ParameterConfig parameterConfig = parameterConfigMap.get(name);
@@ -923,8 +913,7 @@ public class ViewRegistry {
   /**
    * Get the cluster associated with the given view instance.
    *
-   * @param viewInstance  the view instance
-   *
+   * @param viewInstance the view instance
    * @return the cluster
    */
   public Cluster getCluster(ViewInstanceDefinition viewInstance) {
@@ -959,26 +948,26 @@ public class ViewRegistry {
    * </p>
    * Used for view instance auto creation.
    *
-   * @param event  the service installed event
+   * @param event the service installed event
    */
   @Subscribe
   @AllowConcurrentEvents
   public void onAmbariEvent(ServiceInstalledEvent event) {
 
-    Clusters clusters  = clustersProvider.get();
-    Long     clusterId = event.getClusterId();
+    Clusters clusters = clustersProvider.get();
+    Long clusterId = event.getClusterId();
 
     try {
       org.apache.ambari.server.state.Cluster cluster = clusters.getClusterById(clusterId);
       String clusterName = cluster.getClusterName();
 
-      StackId     stackId       = cluster.getCurrentStackVersion();
-      Set<String> serviceNames  = cluster.getServices().keySet();
+      StackId stackId = cluster.getCurrentStackVersion();
+      Set<String> serviceNames = cluster.getServices().keySet();
 
       for (ViewEntity viewEntity : getDefinitions()) {
 
-        String             viewName   = viewEntity.getName();
-        ViewConfig         viewConfig = viewEntity.getConfiguration();
+        String viewName = viewEntity.getName();
+        ViewConfig viewConfig = viewEntity.getConfiguration();
         AutoInstanceConfig autoConfig = viewConfig.getAutoInstance();
 
         try {
@@ -999,6 +988,15 @@ public class ViewRegistry {
     }
   }
 
+  @Subscribe
+  public void onClusterConfigFinishedEvent(ClusterConfigFinishedEvent event) {
+    if (configuration.extractViewsAfterClusterConfig()) {
+      LOG.info("Trigger extracting NON-SYSTEM views; cluster [{}] ...", event.getClusterName());
+      readNonSystemViewViewArchives();
+      LOG.info("Trigger extracting NON-SYSTEM views; cluster [{}] DONE.", event.getClusterName());
+    }
+  }
+
 
   // ----- helper methods ----------------------------------------------------
 
@@ -1006,11 +1004,10 @@ public class ViewRegistry {
    * Determine whether a new view instance should be automatically created and associated with
    * a cluster based on the given configuration and cluster state.
    *
-   * @param autoConfig    the view instance auto creation configuration
-   * @param stackId       the stack id of the cluster
-   * @param serviceName   the name of the service added which triggered this check
-   * @param serviceNames  the set of service names of the cluster
-   *
+   * @param autoConfig   the view instance auto creation configuration
+   * @param stackId      the stack id of the cluster
+   * @param serviceName  the name of the service added which triggered this check
+   * @param serviceNames the set of service names of the cluster
    * @return true if a new view instance should be created
    */
   private boolean checkAutoInstanceConfig(AutoInstanceConfig autoConfig, StackId stackId,
@@ -1029,7 +1026,7 @@ public class ViewRegistry {
 
           if (id.getStackName().equals(stackId.getStackName())) {
 
-            String stackVersion       = stackId.getStackVersion();
+            String stackVersion = stackId.getStackVersion();
             String configStackVersion = id.getStackVersion();
 
             // make sure that the configured stack version equals the cluster stack version (account for *)
@@ -1038,7 +1035,7 @@ public class ViewRegistry {
             int index = configStackVersion.indexOf('*');
             if (index == -1) {
               compVal = VersionUtils.compareVersions(configStackVersion, stackVersion);
-            } else  if (index > 0) {
+            } else if (index > 0) {
               String[] parts = configStackVersion.substring(0, index).split("\\.");
               compVal = VersionUtils.compareVersions(configStackVersion, stackVersion, parts.length);
             }
@@ -1090,7 +1087,7 @@ public class ViewRegistry {
     String viewName = viewDefinition.getName();
 
     for (ParameterConfig parameterConfiguration : parameterConfigurations) {
-      ViewParameterEntity viewParameterEntity =  new ViewParameterEntity();
+      ViewParameterEntity viewParameterEntity = new ViewParameterEntity();
 
       viewParameterEntity.setViewName(viewName);
       viewParameterEntity.setName(parameterConfiguration.getName());
@@ -1144,8 +1141,8 @@ public class ViewRegistry {
       } else {
         ResourceInstanceFactoryImpl.addResourceDefinition(type, resourceDefinition);
 
-        Class<?> clazz      = resourceConfiguration.getResourceClass(cl);
-        String   idProperty = resourceConfiguration.getIdProperty();
+        Class<?> clazz = resourceConfiguration.getResourceClass(cl);
+        String idProperty = resourceConfiguration.getIdProperty();
 
         ViewSubResourceProvider provider = new ViewSubResourceProvider(type, clazz, idProperty, viewDefinition);
         viewDefinition.addResourceProvider(type, provider);
@@ -1165,7 +1162,7 @@ public class ViewRegistry {
 
     Collection<PermissionEntity> permissions = new HashSet<PermissionEntity>();
     for (PermissionConfig permissionConfiguration : permissionConfigurations) {
-      PermissionEntity permissionEntity =  new PermissionEntity();
+      PermissionEntity permissionEntity = new PermissionEntity();
 
       permissionEntity.setPermissionName(permissionConfiguration.getName());
       permissionEntity.setResourceType(resourceTypeEntity);
@@ -1226,7 +1223,7 @@ public class ViewRegistry {
 
   // bind a view instance definition to the given view definition
   protected void bindViewInstance(ViewEntity viewDefinition,
-                                   ViewInstanceEntity viewInstanceDefinition)
+                                  ViewInstanceEntity viewInstanceDefinition)
       throws ClassNotFoundException {
     viewInstanceDefinition.setViewEntity(viewDefinition);
 
@@ -1240,7 +1237,7 @@ public class ViewRegistry {
     Collection<ViewSubResourceDefinition> resourceDefinitions = viewDefinition.getResourceDefinitions().values();
     for (ViewSubResourceDefinition resourceDefinition : resourceDefinitions) {
 
-      Resource.Type  type           = resourceDefinition.getType();
+      Resource.Type type = resourceDefinition.getType();
       ResourceConfig resourceConfig = resourceDefinition.getResourceConfiguration();
 
       ViewResourceHandler viewResourceService = new ViewSubResourceService(type, viewInstanceDefinition);
@@ -1252,7 +1249,7 @@ public class ViewRegistry {
       if (resourceConfig.isExternal()) {
         externalSubResourceService.addResourceService(resourceConfig.getName(), service);
       } else {
-        viewInstanceDefinition.addService(viewDefinition.getResourceDefinition(type).getPluralName(),service);
+        viewInstanceDefinition.addService(viewDefinition.getResourceDefinition(type).getPluralName(), service);
         viewInstanceDefinition.addResourceProvider(type,
             getProvider(resourceConfig.getProviderClass(cl), viewInstanceContext));
       }
@@ -1263,7 +1260,7 @@ public class ViewRegistry {
   // Set the entities defined in the view persistence element for the given view instance
   private static void setPersistenceEntities(ViewInstanceEntity viewInstanceDefinition) {
     ViewEntity viewDefinition = viewInstanceDefinition.getViewEntity();
-    ViewConfig viewConfig     = viewDefinition.getConfiguration();
+    ViewConfig viewConfig = viewDefinition.getConfiguration();
 
     Collection<ViewEntityEntity> entities = new HashSet<ViewEntityEntity>();
 
@@ -1332,7 +1329,7 @@ public class ViewRegistry {
 
   // get the given view validator class from the given class loader; inject a context
   private static Validator getValidator(Class<? extends Validator> clazz,
-                              final ViewContext viewContext) {
+                                        final ViewContext viewContext) {
     Injector viewInstanceInjector = Guice.createInjector(new AbstractModule() {
       @Override
       protected void configure() {
@@ -1371,17 +1368,16 @@ public class ViewRegistry {
    * Sync given view with data in DB. Ensures that view data in DB is updated,
    * all instances changes from xml config are reflected to DB
    *
-   * @param view                 view config from xml
-   * @param instanceDefinitions  view instances from xml
-   *
+   * @param view                view config from xml
+   * @param instanceDefinitions view instances from xml
    * @throws Exception if the view can not be synced
    */
   private void syncView(ViewEntity view,
                         Set<ViewInstanceEntity> instanceDefinitions)
       throws Exception {
 
-    String      viewName      = view.getName();
-    ViewEntity  persistedView = viewDAO.findByName(viewName);
+    String viewName = view.getName();
+    ViewEntity persistedView = viewDAO.findByName(viewName);
 
     if (LOG.isDebugEnabled()) {
       LOG.debug("Syncing view " + viewName + ".");
@@ -1396,7 +1392,7 @@ public class ViewRegistry {
       // create an admin resource type to represent this view
       ResourceTypeEntity resourceType = resourceTypeDAO.merge(view.getResourceType());
 
-      for( ViewInstanceEntity instance : view.getInstances()) {
+      for (ViewInstanceEntity instance : view.getInstances()) {
         instance.setResource(createViewInstanceResource(resourceType));
       }
       // ... merge the view
@@ -1408,10 +1404,10 @@ public class ViewRegistry {
     view.setPermissions(persistedView.getPermissions());
 
     // make sure that each instance of the view in the db is reflected in the given view
-    for (ViewInstanceEntity persistedInstance : persistedView.getInstances()){
+    for (ViewInstanceEntity persistedInstance : persistedView.getInstances()) {
 
-      String             instanceName = persistedInstance.getName();
-      ViewInstanceEntity instance     = view.getInstanceDefinition(instanceName);
+      String instanceName = persistedInstance.getName();
+      ViewInstanceEntity instance = view.getInstanceDefinition(instanceName);
 
       // if the persisted instance is not in the view ...
       if (instance == null) {
@@ -1437,8 +1433,8 @@ public class ViewRegistry {
 
   // sync the given view instance entity to the matching view instance entity in the registry
   private void syncViewInstance(ViewInstanceEntity instanceEntity) {
-    String viewName     = instanceEntity.getViewDefinition().getViewName();
-    String version      = instanceEntity.getViewDefinition().getVersion();
+    String viewName = instanceEntity.getViewDefinition().getViewName();
+    String version = instanceEntity.getViewDefinition().getVersion();
     String instanceName = instanceEntity.getInstanceName();
 
     ViewInstanceEntity registryEntry = getInstanceDefinition(viewName, version, instanceName);
@@ -1521,32 +1517,85 @@ public class ViewRegistry {
 
   /**
    * Extract a view archive at the specified path
+   *
    * @param path
    */
   public void readViewArchive(Path path) {
 
     File viewDir = configuration.getViewsDir();
     String extractedArchivesPath = viewDir.getAbsolutePath() +
-            File.separator + EXTRACTED_ARCHIVES_DIR;
+        File.separator + EXTRACTED_ARCHIVES_DIR;
 
     File archiveFile = path.toAbsolutePath().toFile();
     if (extractor.ensureExtractedArchiveDirectory(extractedArchivesPath)) {
-        try {
-          final ViewConfig viewConfig = archiveUtility.getViewConfigFromArchive(archiveFile);
-          String viewName = ViewEntity.getViewName(viewConfig.getName(), viewConfig.getVersion());
-          final String extractedArchiveDirPath = extractedArchivesPath + File.separator + viewName;
-          final File extractedArchiveDirFile = archiveUtility.getFile(extractedArchiveDirPath);
-          final ViewEntity viewDefinition = new ViewEntity(viewConfig, configuration, extractedArchiveDirPath);
-          addDefinition(viewDefinition);
-          readViewArchive(viewDefinition, archiveFile, extractedArchiveDirFile, ambariMetaInfoProvider.get().getServerVersion());
-        } catch (Exception e){
-          LOG.error("Could not process archive at path "+path, e);
-        }
+      try {
+        final ViewConfig viewConfig = archiveUtility.getViewConfigFromArchive(archiveFile);
+        String viewName = ViewEntity.getViewName(viewConfig.getName(), viewConfig.getVersion());
+        final String extractedArchiveDirPath = extractedArchivesPath + File.separator + viewName;
+        final File extractedArchiveDirFile = archiveUtility.getFile(extractedArchiveDirPath);
+        final ViewEntity viewDefinition = new ViewEntity(viewConfig, configuration, extractedArchiveDirPath);
+        addDefinition(viewDefinition);
+        readViewArchive(viewDefinition, archiveFile, extractedArchiveDirFile, ambariMetaInfoProvider.get().getServerVersion());
+      } catch (Exception e) {
+        LOG.error("Could not process archive at path " + path, e);
+      }
     }
 
   }
 
+  private void readNonSystemViewViewArchives() {
+    try {
+
+      File viewDir = configuration.getViewsDir();
+      String extractedArchivesPath = viewDir.getAbsolutePath() +
+          File.separator + EXTRACTED_ARCHIVES_DIR;
+
+      File[] files = viewDir.listFiles();
+
+      if (files != null) {
+        final String serverVersion = ambariMetaInfoProvider.get().getServerVersion();
+
+        final ExecutorService executorService = getExecutorService(configuration);
+
+        for (final File archiveFile : files) {
+          if (!archiveFile.isDirectory()) {
+            try {
+              final ViewConfig viewConfig = archiveUtility.getViewConfigFromArchive(archiveFile);
+
+              String commonName = viewConfig.getName();
+              String version = viewConfig.getVersion();
+              String viewName = ViewEntity.getViewName(commonName, version);
+
+              final String extractedArchiveDirPath = extractedArchivesPath + File.separator + viewName;
+              final File extractedArchiveDirFile = archiveUtility.getFile(extractedArchiveDirPath);
+
+              final ViewEntity viewDefinition = new ViewEntity(viewConfig, configuration, extractedArchiveDirPath);
+
+              boolean systemView = viewDefinition.isSystem();
+              if (!systemView) {
+                addDefinition(viewDefinition);
+                executorService.submit(new Runnable() {
+                  @Override
+                  public void run() {
+                    readViewArchive(viewDefinition, archiveFile, extractedArchiveDirFile, serverVersion);
+                    migrateDataFromPreviousVersion(viewDefinition, serverVersion);
+                  }
+                });
+              }
 
+            } catch (Exception e) {
+              String msg = "Caught exception reading view archive " + archiveFile.getAbsolutePath();
+              LOG.error(msg, e);
+            }
+          }
+        }
+      }
+
+    } catch (Exception e) {
+      LOG.error("Caught exception reading view archives.", e);
+    }
+
+  }
 
 
   // read the view archives.
@@ -1560,7 +1609,7 @@ public class ViewRegistry {
 
       if (extractor.ensureExtractedArchiveDirectory(extractedArchivesPath)) {
 
-        File[] files  = viewDir.listFiles();
+        File[] files = viewDir.listFiles();
 
         if (files != null) {
 
@@ -1575,8 +1624,8 @@ public class ViewRegistry {
                 final ViewConfig viewConfig = archiveUtility.getViewConfigFromArchive(archiveFile);
 
                 String commonName = viewConfig.getName();
-                String version    = viewConfig.getVersion();
-                String viewName   = ViewEntity.getViewName(commonName, version);
+                String version = viewConfig.getVersion();
+                String viewName = ViewEntity.getViewName(commonName, version);
 
                 if (!viewName.matches(viewNameRegExp)) {
                   continue;
@@ -1615,7 +1664,7 @@ public class ViewRegistry {
             }
           }
 
-          for(ViewEntity view : getDefinitions()) {
+          for (ViewEntity view : getDefinitions()) {
             if (view.getStatus() == ViewDefinition.ViewStatus.DEPLOYED) {
               // migrate views that are not need extraction, for ones that need call will be done in the runnable.
               migrateDataFromPreviousVersion(view, serverVersion);
@@ -1688,7 +1737,7 @@ public class ViewRegistry {
 
         LOG.info("View deployed: " + viewDefinition.getName() + ".");
       }
-    } catch (Exception e) {
+    } catch (Throwable e) {
       String msg = "Caught exception loading view " + viewDefinition.getName();
 
       setViewStatus(viewDefinition, ViewEntity.ViewStatus.ERROR, msg + " : " + e.getMessage());
@@ -1800,7 +1849,7 @@ public class ViewRegistry {
     for (org.apache.ambari.server.state.Cluster cluster : allClusters.values()) {
 
       String clusterName = cluster.getClusterName();
-      Long clusterId= cluster.getClusterId();
+      Long clusterId = cluster.getClusterId();
       StackId stackId = cluster.getCurrentStackVersion();
       Set<String> serviceNames = cluster.getServices().keySet();
 
@@ -1816,7 +1865,7 @@ public class ViewRegistry {
           }
         } catch (Exception e) {
           LOG.error("Can't auto create instance of view " + viewName + " for cluster " + clusterName +
-            ".  Caught exception :" + e.getMessage(), e);
+              ".  Caught exception :" + e.getMessage(), e);
         }
       }
     }
@@ -1829,7 +1878,7 @@ public class ViewRegistry {
    * assigned to one of the roles in the suppled set of role names.
    *
    * @param viewInstanceEntity a view instance entity
-   * @param roles the set of roles to use to for granting access
+   * @param roles              the set of roles to use to for granting access
    */
   @Transactional
   protected void setViewInstanceRoleAccess(ViewInstanceEntity viewInstanceEntity, Collection<String> roles) {
@@ -1869,16 +1918,15 @@ public class ViewRegistry {
    * Check the configured view max and min Ambari versions for the given view entity
    * against the given Ambari server version.
    *
-   * @param view           the view
-   * @param serverVersion  the server version
-   *
+   * @param view          the view
+   * @param serverVersion the server version
    * @return true if the given server version >= min version && <= max version for the given view
    */
   protected boolean checkViewVersions(ViewEntity view, String serverVersion) {
     ViewConfig config = view.getConfiguration();
 
     return checkViewVersion(view, config.getMinAmbariVersion(), serverVersion, "minimum", -1, "less than") &&
-           checkViewVersion(view, config.getMaxAmbariVersion(), serverVersion, "maximum", 1, "greater than");
+        checkViewVersion(view, config.getMaxAmbariVersion(), serverVersion, "maximum", 1, "greater than");
 
   }
 
@@ -1901,7 +1949,7 @@ public class ViewRegistry {
       int index = version.indexOf('*');
 
       int compVal = index == -1 ? VersionUtils.compareVersions(serverVersion, version) :
-                    index > 0 ? VersionUtils.compareVersions(serverVersion, version.substring(0, index), index) : 0;
+          index > 0 ? VersionUtils.compareVersions(serverVersion, version.substring(0, index), index) : 0;
 
       if (compVal == errValue) {
         String msg = "The Ambari server version " + serverVersion + " is " + errMsg + " the configured " + label +
@@ -1935,9 +1983,9 @@ public class ViewRegistry {
       throws Exception {
     Injector injector = Guice.createInjector(viewModule);
 
-    ViewExtractor      extractor      = injector.getInstance(ViewExtractor.class);
+    ViewExtractor extractor = injector.getInstance(ViewExtractor.class);
     ViewArchiveUtility archiveUtility = injector.getInstance(ViewArchiveUtility.class);
-    Configuration      configuration  = injector.getInstance(Configuration.class);
+    Configuration configuration = injector.getInstance(Configuration.class);
 
     File viewDir = configuration.getViewsDir();
 
@@ -1951,11 +1999,11 @@ public class ViewRegistry {
       ViewConfig viewConfig = archiveUtility.getViewConfigFromArchive(archiveFile);
 
       String commonName = viewConfig.getName();
-      String version    = viewConfig.getVersion();
-      String viewName   = ViewEntity.getViewName(commonName, version);
+      String version = viewConfig.getVersion();
+      String viewName = ViewEntity.getViewName(commonName, version);
 
       String extractedArchiveDirPath = extractedArchivesPath + File.separator + viewName;
-      File   extractedArchiveDirFile = archiveUtility.getFile(extractedArchiveDirPath);
+      File extractedArchiveDirFile = archiveUtility.getFile(extractedArchiveDirPath);
 
       if (!extractedArchiveDirFile.exists()) {
         ViewEntity viewDefinition = new ViewEntity(viewConfig, configuration, extractedArchiveDirPath);
@@ -1968,7 +2016,7 @@ public class ViewRegistry {
           } finally {
             if (classLoader != null && classLoader instanceof ViewClassLoader) {
               try {
-                ((ViewClassLoader)classLoader).close();
+                ((ViewClassLoader) classLoader).close();
               } catch (IOException e) {
               }
             }
@@ -2006,8 +2054,7 @@ public class ViewRegistry {
   /**
    * Factory method to create a view URL stream provider.
    *
-   * @param viewContext  the view context
-   *
+   * @param viewContext the view context
    * @return a new view URL stream provider
    */
   protected ViewURLStreamProvider createURLStreamProvider(ViewContext viewContext) {
@@ -2045,26 +2092,26 @@ public class ViewRegistry {
    * @param clusterId
    * @return
    */
-  protected AmbariStreamProvider createRemoteAmbariStreamProvider(Long clusterId){
+  protected AmbariStreamProvider createRemoteAmbariStreamProvider(Long clusterId) {
     RemoteAmbariClusterEntity clusterEntity = remoteAmbariClusterDAO.findById(clusterId);
-    if(clusterEntity != null) {
+    if (clusterEntity != null) {
       return new RemoteAmbariStreamProvider(getBaseurl(clusterEntity.getUrl()),
-        clusterEntity.getUsername(),clusterEntity.getPassword(),
-        configuration.getViewAmbariRequestConnectTimeout(),configuration.getViewAmbariRequestReadTimeout());
+          clusterEntity.getUsername(), clusterEntity.getPassword(),
+          configuration.getViewAmbariRequestConnectTimeout(), configuration.getViewAmbariRequestReadTimeout());
     }
     return null;
   }
 
   /**
-   *  Get baseurl of the cluster
-   *  baseurl wil be http://host:port
+   * Get baseurl of the cluster
+   * baseurl wil be http://host:port
    *
    * @param url will be in format like http://host:port/api/v1/clusters/clusterName
    * @return baseurl
    */
-  private String getBaseurl(String url){
+  private String getBaseurl(String url) {
     int index = url.indexOf(API_PREFIX);
-    return url.substring(0,index);
+    return url.substring(0, index);
   }
 
   /**
@@ -2074,7 +2121,7 @@ public class ViewRegistry {
    * Finds latest between unregistered instances and returns it.
    *
    * @param serverVersion server version
-   * @param instance view instance entity
+   * @param instance      view instance entity
    * @return latest unregistered instance of same name of same view.
    */
   private ViewInstanceEntity getLatestUnregisteredInstance(String serverVersion, ViewInstanceEntity instance)

http://git-wip-us.apache.org/repos/asf/ambari/blob/549d7cc8/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterDeployWithStartOnlyTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterDeployWithStartOnlyTest.java b/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterDeployWithStartOnlyTest.java
index 279340e..c9a3693 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterDeployWithStartOnlyTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterDeployWithStartOnlyTest.java
@@ -390,7 +390,7 @@ public class ClusterDeployWithStartOnlyTest {
     expectLastCall().once();
 
     expect(clusterController.ensureResourceProvider(anyObject(Resource.Type.class))).andReturn(resourceProvider);
-    expect(executor.submit(anyObject(AsyncCallableService.class))).andReturn(mockFuture);
+    expect(executor.submit(anyObject(AsyncCallableService.class))).andReturn(mockFuture).times(2);
 
     persistedTopologyRequest = new PersistedTopologyRequest(1, request);
     expect(persistedState.getAllRequests()).andReturn(Collections.<ClusterTopology,

http://git-wip-us.apache.org/repos/asf/ambari/blob/549d7cc8/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartOnComponentLevelTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartOnComponentLevelTest.java b/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartOnComponentLevelTest.java
index 7ae4485..f72fce6 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartOnComponentLevelTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartOnComponentLevelTest.java
@@ -366,7 +366,7 @@ public class ClusterInstallWithoutStartOnComponentLevelTest {
     expectLastCall().once();
 
     expect(clusterController.ensureResourceProvider(anyObject(Resource.Type.class))).andReturn(resourceProvider);
-    expect(executor.submit(anyObject(AsyncCallableService.class))).andReturn(mockFuture);
+    expect(executor.submit(anyObject(AsyncCallableService.class))).andReturn(mockFuture).times(2);
 
     persistedTopologyRequest = new PersistedTopologyRequest(1, request);
     expect(persistedState.getAllRequests()).andReturn(Collections.<ClusterTopology,

http://git-wip-us.apache.org/repos/asf/ambari/blob/549d7cc8/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartTest.java b/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartTest.java
index 4a71699..42fff74 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartTest.java
@@ -360,7 +360,7 @@ public class ClusterInstallWithoutStartTest {
     expectLastCall().once();
 
     expect(clusterController.ensureResourceProvider(anyObject(Resource.Type.class))).andReturn(resourceProvider);
-    expect(executor.submit(anyObject(AsyncCallableService.class))).andReturn(mockFuture);
+    expect(executor.submit(anyObject(AsyncCallableService.class))).andReturn(mockFuture).times(2);
 
     persistedTopologyRequest = new PersistedTopologyRequest(1, request);
     expect(persistedState.getAllRequests()).andReturn(Collections.<ClusterTopology,

http://git-wip-us.apache.org/repos/asf/ambari/blob/549d7cc8/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java b/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java
index 6b560ee..c364e53 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/view/ViewRegistryTest.java
@@ -345,6 +345,7 @@ public class ViewRegistryTest {
     expect(configuration.getViewExtractionThreadPoolCoreSize()).andReturn(2).anyTimes();
     expect(configuration.getViewExtractionThreadPoolMaxSize()).andReturn(3).anyTimes();
     expect(configuration.getViewExtractionThreadPoolTimeout()).andReturn(10000L).anyTimes();
+    expect(configuration.extractViewsAfterClusterConfig()).andReturn(Boolean.FALSE).anyTimes();
 
     expect(viewDir.listFiles()).andReturn(new File[]{viewArchive});
 
@@ -574,6 +575,7 @@ public class ViewRegistryTest {
     expect(configuration.getViewExtractionThreadPoolCoreSize()).andReturn(2).anyTimes();
     expect(configuration.getViewExtractionThreadPoolMaxSize()).andReturn(3).anyTimes();
     expect(configuration.getViewExtractionThreadPoolTimeout()).andReturn(10000L).anyTimes();
+    expect(configuration.extractViewsAfterClusterConfig()).andReturn(Boolean.FALSE).anyTimes();
 
     expect(viewDir.listFiles()).andReturn(new File[]{viewArchive}).anyTimes();
 


[03/47] ambari git commit: AMBARI-18782. Disable HDP-2.2 stack (missed commit) (dgrinenko via ncole)

Posted by jo...@apache.org.
AMBARI-18782. Disable HDP-2.2 stack (missed commit) (dgrinenko via ncole)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: be2628c99d29ebd740663e37bdc6d9476e5daced
Parents: 3807632
Author: Nate Cole <nc...@hortonworks.com>
Authored: Mon Nov 21 14:06:05 2016 -0500
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Mon Nov 21 14:06:13 2016 -0500

----------------------------------------------------------------------
 .../stacks/HDP/2.2/upgrades/upgrade-2.3.xml     | 1042 -----------------
 .../stacks/HDP/2.2/upgrades/upgrade-2.4.xml     | 1050 ------------------
 2 files changed, 2092 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/be2628c9/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.3.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.3.xml b/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.3.xml
deleted file mode 100644
index a8a991f..0000000
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.3.xml
+++ /dev/null
@@ -1,1042 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   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.
--->
-
-<upgrade xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="upgrade-pack.xsd">
-  <target>2.3.*.*</target>
-  <target-stack>HDP-2.3</target-stack>
-  <skip-failures>false</skip-failures>
-  <skip-service-check-failures>false</skip-service-check-failures>
-  <type>ROLLING</type>
-
-  <prerequisite-checks>
-    <!-- List of additional pre-req checks to run in addition to the required pre-reqs -->
-    <check>org.apache.ambari.server.checks.HiveMultipleMetastoreCheck</check>
-    <check>org.apache.ambari.server.checks.SecondaryNamenodeDeletedCheck</check>
-    <check>org.apache.ambari.server.checks.ServicesMapReduceDistributedCacheCheck</check>
-    <check>org.apache.ambari.server.checks.ServicesNamenodeHighAvailabilityCheck</check>
-    <check>org.apache.ambari.server.checks.ServicesNamenodeTruncateCheck</check>
-    <check>org.apache.ambari.server.checks.ServicesTezDistributedCacheCheck</check>
-    <check>org.apache.ambari.server.checks.ServicesYarnWorkPreservingCheck</check>
-    <check>org.apache.ambari.server.checks.YarnRMHighAvailabilityCheck</check>
-    <check>org.apache.ambari.server.checks.YarnTimelineServerStatePreservingCheck</check>
-    <check>org.apache.ambari.server.checks.KafkaKerberosCheck</check>
-
-    <configuration>
-      <!-- Configuration properties for all pre-reqs including required pre-reqs -->
-      <check-properties name="org.apache.ambari.server.checks.YarnTimelineServerStatePreservingCheck">
-        <property name="min-applicable-stack-version">HDP-2.2.4.2</property>
-      </check-properties>
-      <check-properties name="org.apache.ambari.server.checks.HiveDynamicServiceDiscoveryCheck">
-        <property name="min-failure-stack-version">HDP-2.3.0.0</property>
-      </check-properties>
-    </configuration>
-  </prerequisite-checks>
-
-  <order>
-    <group xsi:type="cluster" name="PRE_CLUSTER" title="Prepare Upgrade">
-      <direction>UPGRADE</direction>
-      <supports-auto-skip-failure>false</supports-auto-skip-failure>
-
-      <execute-stage service="HDFS" component="NAMENODE" title="Pre Upgrade HDFS">
-        <task xsi:type="execute" hosts="master">
-          <script>scripts/namenode.py</script>
-          <function>prepare_rolling_upgrade</function>
-        </task>
-      </execute-stage>
-
-      <execute-stage service="TEZ" component="TEZ_CLIENT" title="Check Tez Tarball">
-        <task xsi:type="execute" hosts="any">
-          <script>scripts/pre_upgrade.py</script>
-          <function>prepare</function>
-        </task>
-      </execute-stage>
-    </group>
-
-    <group xsi:type="cluster" name="PREPARE_BACKUPS" title="Prepare Backups">
-      <direction>UPGRADE</direction>
-      <skippable>true</skippable>
-      <supports-auto-skip-failure>false</supports-auto-skip-failure>
-
-      <execute-stage service="HBASE" component="HBASE_MASTER" title="Pre Upgrade HBase Backup">
-        <task xsi:type="execute" hosts="master">
-          <script>scripts/hbase_upgrade.py</script>
-          <function>take_snapshot</function>
-        </task>
-      </execute-stage>
-
-      <execute-stage service="HIVE" component="HIVE_METASTORE" title="Pre Upgrade Hive Backup">
-        <task xsi:type="manual">
-          <message>Before continuing, please backup the Hive Metastore database referenced by the Hive Metastore service(s) located on the following host(s): {{hosts.all}}.</message>
-        </task>
-      </execute-stage>
-
-      <execute-stage service="OOZIE" component="OOZIE_SERVER" title="Pre Upgrade Oozie Backup">
-        <task xsi:type="manual">
-          <message>Before continuing, please backup the Oozie Server database referenced by the Oozie server located on {{hosts.all}}.</message>
-        </task>
-      </execute-stage>
-
-      <execute-stage service="RANGER" component="RANGER_ADMIN" title="Pre Upgrade Ranger Backup">
-        <task xsi:type="manual">
-          <message>Before continuing, please backup the Ranger Admin database and Ranger Audit database.
-                If audit database size is too large( > 3GB ) then follow the below instructions:
-                1. Backup the audit table from audit database.
-                2. Truncate audit table.
-                3. Follow upgrade process and once completed then restore audit data to audit table.</message>
-        </task>
-      </execute-stage>
-    </group>
-
-    <!--
-    On an HDP 2.3 to 2.2 downgrade, the /etc/component/conf must be turned back from a symlink
-    into a normal directory. This will avoid the circular symbolic link that will happen after
-    hdp-select sets /usr/hdp/current/component back to 2.2:
-
-    # new symlink created for 2.3
-    /etc/flume/conf -> /usr/hdp/current/flume-server/conf
-
-    # circular reference from 2.2 (current)
-    /usr/hdp/2.2.0.0-1234/flume/conf -> /etc/flume/conf
-    /usr/hdp/current/flume-server/conf -> /etc/flume/conf
-    -->
-    <group xsi:type="cluster" name="RESTORE_CONFIG_DIRS" title="Restore Configuration Directories">
-      <direction>DOWNGRADE</direction>
-      <execute-stage title="Restore configuration directories and remove HDP 2.3 symlinks">
-        <task xsi:type="execute">
-          <script>scripts/ru_set_all.py</script>
-          <function>unlink_all_configs</function>
-        </task>
-      </execute-stage>
-    </group>
-
-
-    <group name="ZOOKEEPER" title="ZooKeeper">
-      <supports-auto-skip-failure>false</supports-auto-skip-failure>
-      <service name="ZOOKEEPER">
-        <component>ZOOKEEPER_SERVER</component>
-      </service>
-    </group>
-
-    <group name="RANGER" title="Ranger">
-      <skippable>true</skippable>
-      <supports-auto-skip-failure>false</supports-auto-skip-failure>
-      <service name="RANGER">
-        <component>RANGER_ADMIN</component>
-        <component>RANGER_USERSYNC</component>
-      </service>
-    </group>
-
-    <group name="CORE_MASTER" title="Core Masters">
-      <service-check>false</service-check>
-      <service name="HDFS">
-        <component>NAMENODE</component>
-        <component>JOURNALNODE</component>
-        <component>ZKFC</component>
-      </service>
-
-      <service name="MAPREDUCE2">
-        <component>HISTORYSERVER</component>
-      </service>
-
-      <service name="YARN">
-        <component>APP_TIMELINE_SERVER</component>
-        <component>RESOURCEMANAGER</component>
-      </service>
-
-      <service name="HBASE">
-        <component>HBASE_MASTER</component>
-      </service>
-    </group>
-
-    <group name="SERVICE_CHECK" title="All Service Checks" xsi:type="service-check">
-      <direction>UPGRADE</direction>
-      <skippable>true</skippable>
-      <priority>
-        <service>ZOOKEEPER</service>
-        <service>HDFS</service>
-        <service>YARN</service>
-        <service>MAPREDUCE2</service>
-        <service>HBASE</service>
-      </priority>
-      <exclude>
-        <service>AMBARI_METRICS</service>
-        <service>LOGSEARCH</service>
-      </exclude>
-    </group>
-
-    <group name="CORE_SLAVES" title="Core Slaves" xsi:type="colocated">
-      <service-check>false</service-check>
-      <skippable>true</skippable>
-      <service name="HDFS">
-        <component>DATANODE</component>
-      </service>
-
-      <service name="HBASE">
-        <component>HBASE_REGIONSERVER</component>
-      </service>
-
-      <service name="YARN">
-        <component>NODEMANAGER</component>
-      </service>
-
-      <batch>
-        <percent>20</percent>
-        <summary>Verification Required</summary>
-        <message>The initial batch of {{components}} hosts have been {{direction.past}}. You are advised to check the hosts and perform cluster/workload-specific tests against your cluster to ensure proper operation before proceeding with {{direction.text}} of the remaining services.</message>
-      </batch>
-    </group>
-
-    <group name="SERVICE_CHECK" title="All Service Checks" xsi:type="service-check">
-      <direction>UPGRADE</direction>
-      <skippable>true</skippable>
-      <priority>
-        <service>ZOOKEEPER</service>
-        <service>HDFS</service>
-        <service>YARN</service>
-        <service>HBASE</service>
-      </priority>
-      <exclude>
-        <service>AMBARI_METRICS</service>
-        <service>LOGSEARCH</service>
-      </exclude>
-    </group>
-
-    <group name="HIVE" title="Hive">
-      <skippable>true</skippable>
-      <supports-auto-skip-failure>false</supports-auto-skip-failure>
-      <service name="HIVE">
-        <component>HIVE_METASTORE</component>
-        <component>HIVE_SERVER</component>
-        <component>WEBHCAT_SERVER</component>
-      </service>
-    </group>
-
-    <group name="SPARK" title="Spark">
-      <skippable>true</skippable>
-      <supports-auto-skip-failure>false</supports-auto-skip-failure>
-      <service-check>false</service-check>
-      <service name="SPARK">
-        <component>SPARK_JOBHISTORYSERVER</component>
-      </service>
-    </group>
-
-    <group name="SPARK_CLIENTS" title="Spark Clients">
-      <skippable>true</skippable>
-      <service name="SPARK">
-        <component>SPARK_CLIENT</component>
-      </service>
-    </group>
-
-    <group name="OOZIE" title="Oozie">
-      <skippable>true</skippable>
-      <supports-auto-skip-failure>false</supports-auto-skip-failure>
-      <service-check>false</service-check>
-      <service name="OOZIE">
-        <component>OOZIE_SERVER</component>
-      </service>
-    </group>
-
-    <group name="OOZIE_CLIENTS" title="Oozie Clients">
-      <skippable>true</skippable>
-      <service name="OOZIE">
-        <component>OOZIE_CLIENT</component>
-      </service>
-    </group>
-
-    <group name="FALCON" title="Falcon">
-      <skippable>true</skippable>
-      <supports-auto-skip-failure>false</supports-auto-skip-failure>
-      <service-check>false</service-check>
-      <service name="FALCON">
-        <component>FALCON_SERVER</component>
-      </service>
-    </group>
-
-    <group name="FALCON_CLIENTS" title="Falcon Clients">
-      <skippable>true</skippable>
-      <service name="FALCON">
-        <component>FALCON_CLIENT</component>
-      </service>
-    </group>
-
-    <group name="CLIENTS" title="Client Components">
-      <service-check>false</service-check>
-      <service name="ZOOKEEPER">
-        <component>ZOOKEEPER_CLIENT</component>
-      </service>
-
-      <service name="HDFS">
-        <component>HDFS_CLIENT</component>
-      </service>
-
-      <service name="YARN">
-        <component>YARN_CLIENT</component>
-      </service>
-
-      <service name="MAPREDUCE2">
-        <component>MAPREDUCE2_CLIENT</component>
-      </service>
-
-      <service name="TEZ">
-        <component>TEZ_CLIENT</component>
-      </service>
-
-      <service name="HBASE">
-        <component>HBASE_CLIENT</component>
-      </service>
-
-      <service name="PIG">
-        <component>PIG</component>
-      </service>
-
-      <service name="SQOOP">
-        <component>SQOOP</component>
-      </service>
-
-      <service name="HIVE">
-        <component>HIVE_CLIENT</component>
-        <component>HCAT</component>
-      </service>
-    </group>
-
-    <group name="SERVICE_CHECK" title="All Service Checks" xsi:type="service-check">
-      <direction>UPGRADE</direction>
-      <skippable>true</skippable>
-      <priority>
-        <service>ZOOKEEPER</service>
-        <service>HDFS</service>
-        <service>YARN</service>
-        <service>HBASE</service>
-      </priority>
-      <exclude>
-        <service>AMBARI_METRICS</service>
-        <service>LOGSEARCH</service>
-      </exclude>
-    </group>
-
-    <group name="KAFKA" title="Kafka">
-      <skippable>true</skippable>
-      <service name="KAFKA">
-        <component>KAFKA_BROKER</component>
-      </service>
-    </group>
-
-    <group name="KNOX" title="Knox">
-      <skippable>true</skippable>
-      <service name="KNOX">
-        <component>KNOX_GATEWAY</component>
-      </service>
-    </group>
-
-    <group name="STORM" title="Storm">
-      <skippable>true</skippable>
-      <service name="STORM">
-        <component>NIMBUS</component>
-        <component>SUPERVISOR</component>
-        <component>STORM_UI_SERVER</component>
-        <component>DRPC_SERVER</component>
-      </service>
-    </group>
-
-    <group name="SLIDER" title="Slider">
-      <skippable>true</skippable>
-      <service name="SLIDER">
-        <component>SLIDER</component>
-      </service>
-    </group>
-
-    <group name="FLUME" title="Flume">
-      <skippable>true</skippable>
-      <service name="FLUME">
-        <component>FLUME_HANDLER</component>
-      </service>
-    </group>
-
-    <group name="ACCUMULO" title="Accumulo">
-      <skippable>true</skippable>
-      <service name="ACCUMULO">
-        <component>ACCUMULO_MASTER</component>
-        <component>ACCUMULO_TSERVER</component>
-        <component>ACCUMULO_MONITOR</component>
-        <component>ACCUMULO_GC</component>
-        <component>ACCUMULO_TRACER</component>
-        <component>ACCUMULO_CLIENT</component>
-      </service>
-    </group>
-
-    <group xsi:type="cluster" name="ALL_HOST_OPS" title="Finalize Hosts">
-      <execute-stage title="Update remaining HDP stack to {{version}}">
-        <task xsi:type="execute">
-          <script>scripts/ru_set_all.py</script>
-          <function>actionexecute</function>
-        </task>
-      </execute-stage>
-    </group>
-
-    <group xsi:type="cluster" name="FINALIZE_PRE_CHECK" title="Finalize {{direction.text.proper}} Pre-Check">
-      <direction>UPGRADE</direction>
-
-      <execute-stage title="Check Component Versions">
-        <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.ComponentVersionCheckAction" />
-      </execute-stage>
-    </group>
-
-    <group xsi:type="cluster" name="POST_CLUSTER" title="Finalize {{direction.text.proper}}">
-      <skippable>true</skippable>
-      <supports-auto-skip-failure>false</supports-auto-skip-failure>
-
-      <execute-stage title="Confirm Finalize">
-        <direction>UPGRADE</direction>
-        <task xsi:type="manual">
-          <message>Please confirm you are ready to finalize.</message>
-        </task>
-      </execute-stage>
-
-      <execute-stage service="HDFS" component="NAMENODE" title="Execute HDFS Finalize">
-        <task xsi:type="execute" hosts="master">
-          <script>scripts/namenode.py</script>
-          <function>finalize_rolling_upgrade</function>
-        </task>
-      </execute-stage>
-
-      <execute-stage title="Save Cluster State">
-        <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.FinalizeUpgradeAction"/>
-      </execute-stage>
-
-    </group>
-  </order>
-
-  <processing>
-    <service name="ZOOKEEPER">
-      <component name="ZOOKEEPER_SERVER">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="ZOOKEEPER_CLIENT">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="RANGER">
-      <component name="RANGER_ADMIN">
-        <pre-upgrade>
-          <task xsi:type="execute" hosts="all">
-            <summary>Stop Ranger Admin</summary>
-            <script>scripts/ranger_admin.py</script>
-            <function>stop</function>
-          </task>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_set_ranger_admin_ssl_flag"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_update_ranger_env"/>
-          <task xsi:type="configure" id="hdp_2_3_0_0_update_ranger_admin"/>
-
-          <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.RangerConfigCalculation">
-            <summary>Calculating Ranger Properties</summary>
-          </task>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_update_ranger_usersync"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_update_ranger_site"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_update_ranger_usersync_sync_source"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_update_ranger_usersync_properties"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_update_ranger_delete_oracle_home"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_update_ranger_admin_hdfs_audit"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_update_ranger_admin_db_audit"/>
-
-          <task xsi:type="execute" hosts="all">
-            <script>scripts/ranger_admin.py</script>
-            <function>set_pre_start</function>
-          </task>
-
-          <task xsi:type="execute" hosts="any">
-            <summary>Upgrading Ranger database schema</summary>
-            <script>scripts/ranger_admin.py</script>
-            <function>setup_ranger_database</function>
-          </task>
-
-          <task xsi:type="configure_function" hosts="all" />
-
-          <task xsi:type="execute" hosts="any">
-            <summary>Applying Ranger java patches</summary>
-            <script>scripts/ranger_admin.py</script>
-            <function>setup_ranger_java_patches</function>
-          </task>
-        </pre-upgrade>
-
-        <pre-downgrade/> <!--  no-op to prevent config changes on downgrade -->
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-
-      </component>
-
-      <component name="RANGER_USERSYNC">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="HDFS">
-      <component name="NAMENODE">
-        <pre-upgrade>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_namenode_ha_adjustments"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_modify_hadoop_env"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_hdfs_adjust_ranger_plugin"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_hdfs_transition_ranger_hdfs_policy"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_hdfs_transition_ranger_hdfs_audit"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_hdfs_transition_ranger_hdfs_security"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_hdfs_ranger_hdfs_delete_old_properties"/>
-        </pre-upgrade>
-
-        <pre-downgrade/> <!--  no-op to prevent config changes on downgrade -->
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="DATANODE">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="HDFS_CLIENT">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="JOURNALNODE">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="ZKFC">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="MAPREDUCE2">
-      <component name="HISTORYSERVER">
-        <pre-upgrade>
-          <task xsi:type="configure" id="hdp_2_3_0_0_mapreduce2_adjust_history_server"/>
-        </pre-upgrade>
-
-        <pre-downgrade/> <!--  no-op to prevent config changes on downgrade -->
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="MAPREDUCE2_CLIENT">
-        <pre-upgrade>
-          <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.FixLzoCodecPath">
-            <summary>Verifying LZO codec path for mapreduce</summary>
-          </task>
-        </pre-upgrade>
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="YARN">
-      <component name="APP_TIMELINE_SERVER">
-        <pre-upgrade>
-          <task xsi:type="configure" id="hdp_2_3_0_0_yarn_ats_enable_recovery"/>
-          <task xsi:type="configure" id="hdp_2_3_0_0_yarn_keep_ats_v1"/>
-        </pre-upgrade>
-
-        <pre-downgrade/> <!--  no-op to prevent config changes on downgrade -->
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="RESOURCEMANAGER">
-        <pre-upgrade>
-          <task xsi:type="configure" id="hdp_2_3_0_0_yarn_rm_disable_node_labels"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_yarn_rm_clear_default_node_label_expression"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_yarn_rm_check_cs_root_def_capacity"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_yarn_rm_check_cs_root_max_capacity"/>
-
-        </pre-upgrade>
-
-        <pre-downgrade/> <!--  no-op to prevent config changes on downgrade -->
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="NODEMANAGER">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="YARN_CLIENT">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="HBASE">
-      <component name="HBASE_MASTER">
-        <pre-upgrade>
-          <task xsi:type="configure" id="hdp_2_3_0_0_hbase_master_adjust_phoenix_scheduler_factory"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_hbase_master_adjust_phoenix_rpc_controller_factory"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_hbase_master_set_global_memstore_size"/>
-
-          <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.HBaseConfigCalculation">
-            <summary>Calculating HBase Properties</summary>
-          </task>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_hbase_master_adjust_phoenix_indexed_wal_edit_codec"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_hbase_master_adjust_authorization_coprocessors"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_hbase_master_transition_ranger_hbase_policy"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_hbase_master_transition_ranger_hbase_audit"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_hbase_master_copy_ranger_policies"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_hbase_master_delete_old_ranger_properties"/>
-
-          <!-- These HBASE configs changed in HDP 2.3.4.0, but Ambari can't distinguish HDP 2.3.2.0 vs HDP 2.3.4.0, so easier to always do them. -->
-          <task xsi:type="configure" id="hdp_2_3_4_0_hbase_remove_local_indexing"/>
-        </pre-upgrade>
-
-        <pre-downgrade/> <!--  no-op to prevent config changes on downgrade -->
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="HBASE_REGIONSERVER">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="HBASE_CLIENT">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="TEZ">
-      <component name="TEZ_CLIENT">
-        <pre-upgrade>
-          <task xsi:type="configure" id="hdp_2_3_0_0_tez_client_adjust_properties"/>
-          <task xsi:type="configure" id="hdp_2_2_0_0_tez_client_adjust_tez_counters_properties"/>
-          <task xsi:type="configure" id="hdp_2_3_0_0_tez_client_adjust_tez_lib_uris_property"/>
-          <task xsi:type="configure" id="hdp_2_3_0_0_tez_keep_ats_v1"/>
-          <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.FixLzoCodecPath">
-            <summary>Verifying LZO codec path for Tez</summary>
-          </task>
-        </pre-upgrade>
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="PIG">
-      <component name="PIG">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="SQOOP">
-      <component name="SQOOP">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="HIVE">
-      <component name="HIVE_METASTORE">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="HIVE_SERVER">
-        <pre-upgrade>
-          <task xsi:type="configure" id="hdp_2_3_0_0_hive_server_replace_auth_manager"/>
-          <task xsi:type="configure" id="hdp_2_3_0_0_hive_server_configure_authentication"/>
-          <task xsi:type="configure" id="hdp_2_3_0_0_hive_server_configure_ranger_policy"/>
-          <task xsi:type="configure" id="hdp_2_3_0_0_hive_server_configure_ranger_security"/>
-          <task xsi:type="configure" id="hdp_2_3_0_0_hive_server_configure_ranger_audit"/>
-          <task xsi:type="configure" id="hdp_2_3_0_0_hive_server_remove_deprecated_ranger_properties"/>
-          <task xsi:type="configure" id="hdp_2_3_0_0_hive_server_remove_datastore_classname"/>
-        </pre-upgrade>
-
-        <pre-downgrade/>
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="WEBHCAT_SERVER">
-        <pre-upgrade>
-          <task xsi:type="configure" id="hdp_2_3_0_0_webhcat_server_update_env"/>
-          <task xsi:type="configure" id="hdp_2_3_0_0_webhcat_server_update_configuration_paths"/>
-        </pre-upgrade>
-
-        <pre-downgrade/>
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="HIVE_CLIENT">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="HCAT">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="SLIDER">
-      <component name="SLIDER">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="SPARK">
-      <component name="SPARK_JOBHISTORYSERVER">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-      <component name="SPARK_CLIENT">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="OOZIE">
-      <component name="OOZIE_SERVER">
-        <pre-upgrade>
-          <task xsi:type="configure" id="hdp_2_3_0_0_oozie_remove_redundant_configurations"/>
-
-          <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.OozieConfigCalculation">
-            <summary>Adjusting Oozie properties</summary>
-          </task>
-
-          <task xsi:type="execute" hosts="all" sequential="true">
-            <summary>Shut down all Oozie servers</summary>
-            <script>scripts/oozie_server.py</script>
-            <function>stop</function>
-          </task>
-
-          <!-- It is extremely important that both of these tasks run on the exact same host. Hence, pick the first alphabetically. -->
-          <task xsi:type="configure_function" hosts="first" />
-
-          <task xsi:type="execute" hosts="first" sequential="true">
-            <summary>Upgrading the Oozie database and creating a new sharelib</summary>
-            <script>scripts/oozie_server_upgrade.py</script>
-            <function>upgrade_oozie_database_and_sharelib</function>
-          </task>
-        </pre-upgrade>
-
-        <pre-downgrade>
-          <task xsi:type="execute" hosts="all" sequential="true">
-            <summary>Shut down all Oozie servers</summary>
-            <script>scripts/oozie_server.py</script>
-            <function>stop</function>
-          </task>
-
-          <task xsi:type="execute" hosts="any" sequential="true">
-            <summary>Create a new sharelib</summary>
-            <script>scripts/oozie_server_upgrade.py</script>
-            <function>create_sharelib</function>
-          </task>
-        </pre-downgrade>
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="OOZIE_CLIENT">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="FALCON">
-      <component name="FALCON_SERVER">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-      <component name="FALCON_CLIENT">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="KAFKA">
-      <component name="KAFKA_BROKER">
-        <!-- In HDP 2.3.4.0, Kafka had changes that required stopping all Kafka Brokers, running a migration script,
-        and then starting one at a time. This is needed during both upgrade and downgrade. -->
-        <pre-upgrade>
-          <task xsi:type="execute" hosts="all">
-            <summary>Shut down all Kafka Brokers</summary>
-            <script>scripts/kafka_broker.py</script>
-            <function>stop</function>
-          </task>
-        </pre-upgrade>
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="KNOX">
-      <component name="KNOX_GATEWAY">
-        <pre-upgrade>
-          <task xsi:type="configure" id="hdp_2_3_0_0_knox_configure_ranger_policy"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_knox_configure_ranger_knox_audit"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_knox_remove_deprecated_ranger_properties"/>
-        </pre-upgrade>
-
-        <pre-downgrade/> <!--  no-op to prevent config changes on downgrade -->
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="STORM">
-      <component name="NIMBUS">
-
-        <pre-upgrade>
-          <task xsi:type="manual">
-            <message>Before continuing, please deactivate and kill any currently running topologies.</message>
-          </task>
-
-          <task xsi:type="execute">
-            <summary>Removing Storm data from ZooKeeper</summary>
-            <script>scripts/storm_upgrade.py</script>
-            <function>delete_storm_zookeeper_data</function>
-          </task>
-
-          <task xsi:type="execute">
-            <summary>Removing local Storm data</summary>
-            <script>scripts/storm_upgrade.py</script>
-            <function>delete_storm_local_data</function>
-          </task>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_nimbus_monitor_freq_adjustment"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_nimbus_convert_nimbus_host_to_seeds"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_update_storm_env"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_nimbus_update_env_vars"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_nimbus_configure_ranger_policy"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_nimbus_configure_ranger_audit"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_nimbus_remove_deprecated_ranger_properties"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_remove_empty_storm_topology_submission_notifier_plugin_class"/>
-
-          <task xsi:type="configure" id="increase_storm_zookeeper_timeouts"/>
-        </pre-upgrade>
-
-        <pre-downgrade>
-          <task xsi:type="execute">
-            <summary>Removing Storm data from ZooKeeper</summary>
-            <script>scripts/storm_upgrade.py</script>
-            <function>delete_storm_zookeeper_data</function>
-          </task>
-
-          <task xsi:type="execute">
-            <summary>Removing local Storm data</summary>
-            <script>scripts/storm_upgrade.py</script>
-            <function>delete_storm_local_data</function>
-          </task>
-        </pre-downgrade>
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="SUPERVISOR">
-        <pre-upgrade>
-          <task xsi:type="execute">
-            <summary>Removing local Storm data</summary>
-            <script>scripts/storm_upgrade.py</script>
-            <function>delete_storm_local_data</function>
-          </task>
-        </pre-upgrade>
-
-        <pre-downgrade>
-          <task xsi:type="manual">
-            <message>Before continuing, please deactivate and kill any currently running topologies.</message>
-          </task>
-
-          <task xsi:type="execute">
-            <summary>Removing local Storm data</summary>
-            <script>scripts/storm_upgrade.py</script>
-            <function>delete_storm_local_data</function>
-          </task>
-        </pre-downgrade>
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="STORM_UI_SERVER">
-        <pre-upgrade>
-          <task xsi:type="execute">
-            <summary>Removing local Storm data</summary>
-            <script>scripts/storm_upgrade.py</script>
-            <function>delete_storm_local_data</function>
-          </task>
-        </pre-upgrade>
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="DRPC_SERVER">
-        <pre-upgrade>
-          <task xsi:type="execute">
-            <summary>Removing local Storm data</summary>
-            <script>scripts/storm_upgrade.py</script>
-            <function>delete_storm_local_data</function>
-          </task>
-        </pre-upgrade>
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-
-        <post-upgrade>
-          <task xsi:type="manual">
-            <message>Please rebuild your topology using the new Storm version dependencies and resubmit it using the newly created jar.</message>
-          </task>
-        </post-upgrade>
-      </component>
-    </service>
-
-    <service name="FLUME">
-      <component name="FLUME_HANDLER">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="ACCUMULO">
-      <component name="ACCUMULO_MASTER">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-      <component name="ACCUMULO_MONITOR">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-      <component name="ACCUMULO_GC">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-      <component name="ACCUMULO_TRACER">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-      <component name="ACCUMULO_TSERVER">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-      <component name="ACCUMULO_CLIENT">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-  </processing>
-</upgrade>

http://git-wip-us.apache.org/repos/asf/ambari/blob/be2628c9/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.4.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.4.xml b/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.4.xml
deleted file mode 100644
index 4144798..0000000
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.4.xml
+++ /dev/null
@@ -1,1050 +0,0 @@
-<?xml version="1.0"?>
-<!--
-   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.
--->
-
-<upgrade xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="upgrade-pack.xsd">
-  <target>2.4.*.*</target>
-  <target-stack>HDP-2.4</target-stack>
-  <skip-failures>false</skip-failures>
-  <skip-service-check-failures>false</skip-service-check-failures>
-  <type>ROLLING</type>
-
-  <prerequisite-checks>
-    <!-- List of additional pre-req checks to run in addition to the required pre-reqs -->
-    <check>org.apache.ambari.server.checks.HiveMultipleMetastoreCheck</check>
-    <check>org.apache.ambari.server.checks.SecondaryNamenodeDeletedCheck</check>
-    <check>org.apache.ambari.server.checks.ServicesMapReduceDistributedCacheCheck</check>
-    <check>org.apache.ambari.server.checks.ServicesNamenodeHighAvailabilityCheck</check>
-    <check>org.apache.ambari.server.checks.ServicesNamenodeTruncateCheck</check>
-    <check>org.apache.ambari.server.checks.ServicesTezDistributedCacheCheck</check>
-    <check>org.apache.ambari.server.checks.ServicesYarnWorkPreservingCheck</check>
-    <check>org.apache.ambari.server.checks.YarnRMHighAvailabilityCheck</check>
-    <check>org.apache.ambari.server.checks.YarnTimelineServerStatePreservingCheck</check>
-    <check>org.apache.ambari.server.checks.KafkaKerberosCheck</check>
-
-    <configuration>
-      <!-- Configuration properties for all pre-reqs including required pre-reqs -->
-      <check-properties name="org.apache.ambari.server.checks.YarnTimelineServerStatePreservingCheck">
-        <property name="min-applicable-stack-version">HDP-2.2.4.2</property>
-      </check-properties>
-      <check-properties name="org.apache.ambari.server.checks.HiveDynamicServiceDiscoveryCheck">
-        <property name="min-failure-stack-version">HDP-2.3.0.0</property>
-      </check-properties>
-    </configuration>
-  </prerequisite-checks>
-
-  <!-- Instructs the upgrade pack how to build the configuration pack -->
-  <upgrade-path>
-    <intermediate-stack version="2.3"/>
-  </upgrade-path>
-
-  <order>
-    <group xsi:type="cluster" name="PRE_CLUSTER" title="Prepare Upgrade">
-      <direction>UPGRADE</direction>
-      <supports-auto-skip-failure>false</supports-auto-skip-failure>
-
-      <execute-stage service="HDFS" component="NAMENODE" title="Pre Upgrade HDFS">
-        <task xsi:type="execute" hosts="master">
-          <script>scripts/namenode.py</script>
-          <function>prepare_rolling_upgrade</function>
-        </task>
-      </execute-stage>
-
-      <execute-stage service="TEZ" component="TEZ_CLIENT" title="Check Tez Tarball">
-        <task xsi:type="execute" hosts="any">
-          <script>scripts/pre_upgrade.py</script>
-          <function>prepare</function>
-        </task>
-      </execute-stage>
-    </group>
-
-    <group xsi:type="cluster" name="PREPARE_BACKUPS" title="Prepare Backups">
-      <direction>UPGRADE</direction>
-      <skippable>true</skippable>
-      <supports-auto-skip-failure>false</supports-auto-skip-failure>
-
-      <execute-stage service="HBASE" component="HBASE_MASTER" title="Pre Upgrade HBase Backup">
-        <task xsi:type="execute" hosts="master">
-          <script>scripts/hbase_upgrade.py</script>
-          <function>take_snapshot</function>
-        </task>
-      </execute-stage>
-
-      <execute-stage service="HIVE" component="HIVE_METASTORE" title="Pre Upgrade Hive Backup">
-        <task xsi:type="manual">
-          <message>Before continuing, please backup the Hive Metastore database referenced by the Hive Metastore service(s) located on the following host(s): {{hosts.all}}.</message>
-        </task>
-      </execute-stage>
-
-      <execute-stage service="OOZIE" component="OOZIE_SERVER" title="Pre Upgrade Oozie Backup">
-        <task xsi:type="manual">
-          <message>Before continuing, please backup the Oozie Server database referenced by the Oozie server located on {{hosts.all}}.</message>
-        </task>
-      </execute-stage>
-
-      <execute-stage service="RANGER" component="RANGER_ADMIN" title="Pre Upgrade Ranger Backup">
-        <task xsi:type="manual">
-          <message>Before continuing, please backup the Ranger Admin database and Ranger Audit database.
-                If audit database size is too large( > 3GB ) then follow the below instructions:
-                1. Backup the audit table from audit database.
-                2. Truncate audit table.
-                3. Follow upgrade process and once completed then restore audit data to audit table.</message>
-        </task>
-      </execute-stage>
-    </group>
-
-    <!--
-    On an HDP 2.4 to 2.2 downgrade, the /etc/component/conf must be turned back from a symlink
-    into a normal directory. This will avoid the circular symbolic link that will happen after
-    hdp-select sets /usr/hdp/current/component back to 2.2:
-
-    # new symlink created for 2.3+
-    /etc/flume/conf -> /usr/hdp/current/flume-server/conf
-
-    # circular reference from 2.2 (current)
-    /usr/hdp/2.2.0.0-1234/flume/conf -> /etc/flume/conf
-    /usr/hdp/current/flume-server/conf -> /etc/flume/conf
-    -->
-    <group xsi:type="cluster" name="RESTORE_CONFIG_DIRS" title="Restore Configuration Directories">
-      <direction>DOWNGRADE</direction>
-      <execute-stage title="Restore configuration directories and remove HDP 2.3+ symlinks">
-        <task xsi:type="execute">
-          <script>scripts/ru_set_all.py</script>
-          <function>unlink_all_configs</function>
-        </task>
-      </execute-stage>
-    </group>
-
-
-    <group name="ZOOKEEPER" title="ZooKeeper">
-      <supports-auto-skip-failure>false</supports-auto-skip-failure>
-      <service name="ZOOKEEPER">
-        <component>ZOOKEEPER_SERVER</component>
-      </service>
-    </group>
-
-    <group name="RANGER" title="Ranger">
-      <skippable>true</skippable>
-      <supports-auto-skip-failure>false</supports-auto-skip-failure>
-      <service name="RANGER">
-        <component>RANGER_ADMIN</component>
-        <component>RANGER_USERSYNC</component>
-      </service>
-    </group>
-
-    <group name="CORE_MASTER" title="Core Masters">
-      <service-check>false</service-check>
-      <service name="HDFS">
-        <component>NAMENODE</component>
-        <component>JOURNALNODE</component>
-        <component>ZKFC</component>
-      </service>
-
-      <service name="MAPREDUCE2">
-        <component>HISTORYSERVER</component>
-      </service>
-
-      <service name="YARN">
-        <component>APP_TIMELINE_SERVER</component>
-        <component>RESOURCEMANAGER</component>
-      </service>
-
-      <service name="HBASE">
-        <component>HBASE_MASTER</component>
-      </service>
-    </group>
-
-    <group name="SERVICE_CHECK" title="All Service Checks" xsi:type="service-check">
-      <direction>UPGRADE</direction>
-      <skippable>true</skippable>
-      <priority>
-        <service>ZOOKEEPER</service>
-        <service>HDFS</service>
-        <service>YARN</service>
-        <service>MAPREDUCE2</service>
-        <service>HBASE</service>
-      </priority>
-      <exclude>
-        <service>AMBARI_METRICS</service>
-        <service>LOGSEARCH</service>
-      </exclude>
-    </group>
-
-    <group name="CORE_SLAVES" title="Core Slaves" xsi:type="colocated">
-      <service-check>false</service-check>
-      <skippable>true</skippable>
-      <service name="HDFS">
-        <component>DATANODE</component>
-      </service>
-
-      <service name="HBASE">
-        <component>HBASE_REGIONSERVER</component>
-      </service>
-
-      <service name="YARN">
-        <component>NODEMANAGER</component>
-      </service>
-
-      <batch>
-        <percent>20</percent>
-        <summary>Verification Required</summary>
-        <message>The initial batch of {{components}} hosts have been {{direction.past}}. You are advised to check the hosts and perform cluster/workload-specific tests against your cluster to ensure proper operation before proceeding with {{direction.text}} of the remaining services.</message>
-      </batch>
-    </group>
-
-    <group name="SERVICE_CHECK" title="All Service Checks" xsi:type="service-check">
-      <direction>UPGRADE</direction>
-      <skippable>true</skippable>
-      <priority>
-        <service>ZOOKEEPER</service>
-        <service>HDFS</service>
-        <service>YARN</service>
-        <service>HBASE</service>
-      </priority>
-      <exclude>
-        <service>AMBARI_METRICS</service>
-        <service>LOGSEARCH</service>
-      </exclude>
-    </group>
-
-    <group name="HIVE" title="Hive">
-      <skippable>true</skippable>
-      <supports-auto-skip-failure>false</supports-auto-skip-failure>
-      <service name="HIVE">
-        <component>HIVE_METASTORE</component>
-        <component>HIVE_SERVER</component>
-        <component>WEBHCAT_SERVER</component>
-      </service>
-    </group>
-
-    <group name="SPARK" title="Spark">
-      <skippable>true</skippable>
-      <supports-auto-skip-failure>false</supports-auto-skip-failure>
-      <service-check>false</service-check>
-      <service name="SPARK">
-        <component>SPARK_JOBHISTORYSERVER</component>
-      </service>
-    </group>
-
-    <group name="SPARK_CLIENTS" title="Spark Clients">
-      <skippable>true</skippable>
-      <service name="SPARK">
-        <component>SPARK_CLIENT</component>
-      </service>
-    </group>
-
-    <group name="OOZIE" title="Oozie">
-      <skippable>true</skippable>
-      <supports-auto-skip-failure>false</supports-auto-skip-failure>
-      <service-check>false</service-check>
-      <service name="OOZIE">
-        <component>OOZIE_SERVER</component>
-      </service>
-    </group>
-
-    <group name="OOZIE_CLIENTS" title="Oozie Clients">
-      <skippable>true</skippable>
-      <service name="OOZIE">
-        <component>OOZIE_CLIENT</component>
-      </service>
-    </group>
-
-    <group name="FALCON" title="Falcon">
-      <skippable>true</skippable>
-      <supports-auto-skip-failure>false</supports-auto-skip-failure>
-      <service-check>false</service-check>
-      <service name="FALCON">
-        <component>FALCON_SERVER</component>
-      </service>
-    </group>
-
-    <group name="FALCON_CLIENTS" title="Falcon Clients">
-      <skippable>true</skippable>
-      <service name="FALCON">
-        <component>FALCON_CLIENT</component>
-      </service>
-    </group>
-
-    <group name="CLIENTS" title="Client Components">
-      <service-check>false</service-check>
-      <service name="ZOOKEEPER">
-        <component>ZOOKEEPER_CLIENT</component>
-      </service>
-
-      <service name="HDFS">
-        <component>HDFS_CLIENT</component>
-      </service>
-
-      <service name="YARN">
-        <component>YARN_CLIENT</component>
-      </service>
-
-      <service name="MAPREDUCE2">
-        <component>MAPREDUCE2_CLIENT</component>
-      </service>
-
-      <service name="TEZ">
-        <component>TEZ_CLIENT</component>
-      </service>
-
-      <service name="HBASE">
-        <component>HBASE_CLIENT</component>
-      </service>
-
-      <service name="PIG">
-        <component>PIG</component>
-      </service>
-
-      <service name="SQOOP">
-        <component>SQOOP</component>
-      </service>
-
-      <service name="HIVE">
-        <component>HIVE_CLIENT</component>
-        <component>HCAT</component>
-      </service>
-    </group>
-
-    <group name="SERVICE_CHECK" title="All Service Checks" xsi:type="service-check">
-      <direction>UPGRADE</direction>
-      <skippable>true</skippable>
-      <priority>
-        <service>ZOOKEEPER</service>
-        <service>HDFS</service>
-        <service>YARN</service>
-        <service>HBASE</service>
-      </priority>
-      <exclude>
-        <service>AMBARI_METRICS</service>
-        <service>LOGSEARCH</service>
-      </exclude>
-    </group>
-
-    <group name="KAFKA" title="Kafka">
-      <skippable>true</skippable>
-      <service name="KAFKA">
-        <component>KAFKA_BROKER</component>
-      </service>
-    </group>
-
-    <group name="KNOX" title="Knox">
-      <skippable>true</skippable>
-      <service name="KNOX">
-        <component>KNOX_GATEWAY</component>
-      </service>
-    </group>
-
-    <group name="STORM" title="Storm">
-      <skippable>true</skippable>
-      <service name="STORM">
-        <component>NIMBUS</component>
-        <component>SUPERVISOR</component>
-        <component>STORM_UI_SERVER</component>
-        <component>DRPC_SERVER</component>
-      </service>
-    </group>
-
-    <group name="SLIDER" title="Slider">
-      <skippable>true</skippable>
-      <service name="SLIDER">
-        <component>SLIDER</component>
-      </service>
-    </group>
-
-    <group name="FLUME" title="Flume">
-      <skippable>true</skippable>
-      <service name="FLUME">
-        <component>FLUME_HANDLER</component>
-      </service>
-    </group>
-
-    <group name="ACCUMULO" title="Accumulo">
-      <skippable>true</skippable>
-      <service name="ACCUMULO">
-        <component>ACCUMULO_MASTER</component>
-        <component>ACCUMULO_TSERVER</component>
-        <component>ACCUMULO_MONITOR</component>
-        <component>ACCUMULO_GC</component>
-        <component>ACCUMULO_TRACER</component>
-        <component>ACCUMULO_CLIENT</component>
-      </service>
-    </group>
-
-    <group xsi:type="cluster" name="ALL_HOST_OPS" title="Finalize Hosts">
-      <execute-stage title="Update remaining HDP stack to {{version}}">
-        <task xsi:type="execute">
-          <script>scripts/ru_set_all.py</script>
-          <function>actionexecute</function>
-        </task>
-      </execute-stage>
-    </group>
-
-    <group xsi:type="cluster" name="FINALIZE_PRE_CHECK" title="Finalize {{direction.text.proper}} Pre-Check">
-      <direction>UPGRADE</direction>
-
-      <execute-stage title="Check Component Versions">
-        <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.ComponentVersionCheckAction" />
-      </execute-stage>
-    </group>
-
-    <group xsi:type="cluster" name="POST_CLUSTER" title="Finalize {{direction.text.proper}}">
-      <skippable>true</skippable>
-      <supports-auto-skip-failure>false</supports-auto-skip-failure>
-
-      <execute-stage title="Confirm Finalize">
-        <direction>UPGRADE</direction>
-        <task xsi:type="manual">
-          <message>Please confirm you are ready to finalize.</message>
-        </task>
-      </execute-stage>
-
-      <execute-stage service="HDFS" component="NAMENODE" title="Execute HDFS Finalize">
-        <task xsi:type="execute" hosts="master">
-          <script>scripts/namenode.py</script>
-          <function>finalize_rolling_upgrade</function>
-        </task>
-      </execute-stage>
-
-      <execute-stage title="Save Cluster State">
-        <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.FinalizeUpgradeAction"/>
-      </execute-stage>
-
-    </group>
-  </order>
-
-  <processing>
-    <service name="ZOOKEEPER">
-      <component name="ZOOKEEPER_SERVER">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="ZOOKEEPER_CLIENT">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="RANGER">
-      <component name="RANGER_ADMIN">
-        <pre-upgrade>
-          <task xsi:type="execute" hosts="all">
-            <summary>Stop Ranger Admin</summary>
-            <script>scripts/ranger_admin.py</script>
-            <function>stop</function>
-          </task>
-          <task xsi:type="configure" id="hdp_2_3_0_0_set_ranger_admin_ssl_flag"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_update_ranger_env"/>
-          <task xsi:type="configure" id="hdp_2_3_0_0_update_ranger_admin"/>
-
-          <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.RangerConfigCalculation">
-            <summary>Calculating Ranger Properties</summary>
-          </task>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_update_ranger_usersync"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_update_ranger_site"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_update_ranger_usersync_sync_source"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_update_ranger_usersync_properties"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_update_ranger_delete_oracle_home"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_update_ranger_admin_hdfs_audit"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_update_ranger_admin_db_audit"/>
-
-          <task xsi:type="execute" hosts="all">
-            <script>scripts/ranger_admin.py</script>
-            <function>set_pre_start</function>
-          </task>
-
-          <task xsi:type="execute" hosts="any">
-            <summary>Upgrading Ranger database schema</summary>
-            <script>scripts/ranger_admin.py</script>
-            <function>setup_ranger_database</function>
-          </task>
-
-          <task xsi:type="configure_function" hosts="all" />
-
-          <task xsi:type="execute" hosts="any">
-            <summary>Applying Ranger java patches</summary>
-            <script>scripts/ranger_admin.py</script>
-            <function>setup_ranger_java_patches</function>
-          </task>
-        </pre-upgrade>
-
-        <pre-downgrade/> <!--  no-op to prevent config changes on downgrade -->
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-
-      </component>
-
-      <component name="RANGER_USERSYNC">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="HDFS">
-      <component name="NAMENODE">
-        <pre-upgrade>
-          <task xsi:type="configure" id="hdp_2_3_0_0_namenode_ha_adjustments"/>
-          <task xsi:type="configure" id="hdp_2_3_0_0_modify_hadoop_env"/>
-          <task xsi:type="configure" id="hdp_2_3_0_0_hdfs_adjust_ranger_plugin"/>
-          <task xsi:type="configure" id="hdp_2_3_0_0_hdfs_transition_ranger_hdfs_policy"/>
-          <task xsi:type="configure" id="hdp_2_3_0_0_hdfs_transition_ranger_hdfs_audit"/>
-          <task xsi:type="configure" id="hdp_2_3_0_0_hdfs_transition_ranger_hdfs_security"/>
-          <task xsi:type="configure" id="hdp_2_3_0_0_hdfs_ranger_hdfs_delete_old_properties"/>
-        </pre-upgrade>
-
-        <pre-downgrade/> <!--  no-op to prevent config changes on downgrade -->
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="DATANODE">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="HDFS_CLIENT">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="JOURNALNODE">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="ZKFC">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="MAPREDUCE2">
-      <component name="HISTORYSERVER">
-        <pre-upgrade>
-          <task xsi:type="configure" id="hdp_2_3_0_0_mapreduce2_adjust_history_server"/>
-        </pre-upgrade>
-
-        <pre-downgrade/> <!--  no-op to prevent config changes on downgrade -->
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="MAPREDUCE2_CLIENT">
-        <pre-upgrade>
-          <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.FixLzoCodecPath">
-            <summary>Verifying LZO codec path for mapreduce</summary>
-          </task>
-        </pre-upgrade>
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="YARN">
-      <component name="APP_TIMELINE_SERVER">
-        <pre-upgrade>
-          <task xsi:type="configure" id="hdp_2_3_0_0_yarn_ats_enable_recovery"/>
-          <task xsi:type="configure" id="hdp_2_3_0_0_yarn_keep_ats_v1"/>
-        </pre-upgrade>
-
-        <pre-downgrade/> <!--  no-op to prevent config changes on downgrade -->
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="RESOURCEMANAGER">
-        <pre-upgrade>
-          <task xsi:type="configure" id="hdp_2_3_0_0_yarn_rm_disable_node_labels"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_yarn_rm_clear_default_node_label_expression"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_yarn_rm_check_cs_root_def_capacity"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_yarn_rm_check_cs_root_max_capacity"/>
-
-          <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.SparkShufflePropertyConfig">
-            <summary>Calculating Yarn Properties for Spark Shuffle</summary>
-          </task>
-        </pre-upgrade>
-
-        <pre-downgrade/> <!--  no-op to prevent config changes on downgrade -->
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="NODEMANAGER">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="YARN_CLIENT">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="HBASE">
-      <component name="HBASE_MASTER">
-        <pre-upgrade>
-          <task xsi:type="configure" id="hdp_2_3_0_0_hbase_master_adjust_phoenix_scheduler_factory"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_hbase_master_adjust_phoenix_rpc_controller_factory"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_hbase_master_set_global_memstore_size"/>
-
-          <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.HBaseConfigCalculation">
-            <summary>Calculating HBase Properties</summary>
-          </task>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_hbase_master_adjust_phoenix_indexed_wal_edit_codec"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_hbase_master_adjust_authorization_coprocessors"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_hbase_master_transition_ranger_hbase_policy"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_hbase_master_transition_ranger_hbase_audit"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_hbase_master_copy_ranger_policies"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_hbase_master_delete_old_ranger_properties"/>
-
-          <!-- These HBASE configs changed in HDP 2.3.4.0, but Ambari can't distinguish HDP 2.3.2.0 vs HDP 2.3.4.0, so easier to always do them. -->
-          <task xsi:type="configure" id="hdp_2_3_4_0_hbase_remove_local_indexing"/>
-        </pre-upgrade>
-
-        <pre-downgrade/> <!--  no-op to prevent config changes on downgrade -->
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="HBASE_REGIONSERVER">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="HBASE_CLIENT">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="TEZ">
-      <component name="TEZ_CLIENT">
-        <pre-upgrade>
-          <task xsi:type="configure" id="hdp_2_3_0_0_tez_client_adjust_properties"/>
-
-          <task xsi:type="configure" id="hdp_2_2_0_0_tez_client_adjust_tez_counters_properties"/>
-
-          <!-- Apply HDP 2.4 since same as that in HDP 2.3 -->
-          <task xsi:type="configure" id="hdp_2_4_0_0_tez_client_adjust_tez_lib_uris_property"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_tez_keep_ats_v1"/>
-
-          <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.FixLzoCodecPath">
-            <summary>Verifying LZO codec path for Tez</summary>
-          </task>
-        </pre-upgrade>
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="PIG">
-      <component name="PIG">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="SQOOP">
-      <component name="SQOOP">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="HIVE">
-      <component name="HIVE_METASTORE">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="HIVE_SERVER">
-        <pre-upgrade>
-          <task xsi:type="configure" id="hdp_2_3_0_0_hive_server_replace_auth_manager"/>
-          <task xsi:type="configure" id="hdp_2_3_0_0_hive_server_configure_authentication"/>
-          <task xsi:type="configure" id="hdp_2_3_0_0_hive_server_configure_ranger_policy"/>
-          <task xsi:type="configure" id="hdp_2_3_0_0_hive_server_configure_ranger_security"/>
-          <task xsi:type="configure" id="hdp_2_3_0_0_hive_server_configure_ranger_audit"/>
-          <task xsi:type="configure" id="hdp_2_3_0_0_hive_server_remove_deprecated_ranger_properties"/>
-          <task xsi:type="configure" id="hdp_2_3_0_0_hive_server_remove_datastore_classname"/>
-        </pre-upgrade>
-
-        <pre-downgrade/>
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="WEBHCAT_SERVER">
-        <pre-upgrade>
-          <task xsi:type="configure" id="hdp_2_3_0_0_webhcat_server_update_env"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_webhcat_server_update_configuration_paths"/>
-        </pre-upgrade>
-
-        <pre-downgrade/>
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="HIVE_CLIENT">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="HCAT">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="SLIDER">
-      <component name="SLIDER">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="SPARK">
-      <component name="SPARK_JOBHISTORYSERVER">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-      <component name="SPARK_CLIENT">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="OOZIE">
-      <component name="OOZIE_SERVER">
-        <pre-upgrade>
-          <task xsi:type="configure" id="hdp_2_3_0_0_oozie_remove_redundant_configurations"/>
-          <task xsi:type="configure" id="hdp_2_4_0_0_oozie_remove_service_classes" />
-
-          <task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.OozieConfigCalculation">
-            <summary>Adjusting Oozie properties</summary>
-          </task>
-
-          <task xsi:type="execute" hosts="all" sequential="true">
-            <summary>Shut down all Oozie servers</summary>
-            <script>scripts/oozie_server.py</script>
-            <function>stop</function>
-          </task>
-
-          <!-- It is extremely important that both of these tasks run on the exact same host. Hence, pick the first alphabetically. -->
-          <task xsi:type="configure_function" hosts="first" />
-
-          <task xsi:type="execute" hosts="first" sequential="true">
-            <summary>Upgrading the Oozie database and creating a new sharelib</summary>
-            <script>scripts/oozie_server_upgrade.py</script>
-            <function>upgrade_oozie_database_and_sharelib</function>
-          </task>
-        </pre-upgrade>
-
-        <pre-downgrade>
-          <task xsi:type="execute" hosts="all" sequential="true">
-            <summary>Shut down all Oozie servers</summary>
-            <script>scripts/oozie_server.py</script>
-            <function>stop</function>
-          </task>
-
-          <task xsi:type="execute" hosts="any" sequential="true">
-            <summary>Create a new sharelib</summary>
-            <script>scripts/oozie_server_upgrade.py</script>
-            <function>create_sharelib</function>
-          </task>
-        </pre-downgrade>
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="OOZIE_CLIENT">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="FALCON">
-      <component name="FALCON_SERVER">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-      <component name="FALCON_CLIENT">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="KAFKA">
-      <component name="KAFKA_BROKER">
-        <!-- In HDP 2.3.4.0, Kafka had changes that required stopping all Kafka Brokers, running a migration script,
-        and then starting one at a time. This is needed during both upgrade and downgrade. -->
-        <pre-upgrade>
-          <task xsi:type="execute" hosts="all">
-            <summary>Shut down all Kafka Brokers</summary>
-            <script>scripts/kafka_broker.py</script>
-            <function>stop</function>
-          </task>
-        </pre-upgrade>
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="KNOX">
-      <component name="KNOX_GATEWAY">
-        <pre-upgrade>
-          <task xsi:type="configure" id="hdp_2_3_0_0_knox_configure_ranger_policy"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_knox_configure_ranger_knox_audit"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_knox_remove_deprecated_ranger_properties"/>
-        </pre-upgrade>
-
-        <pre-downgrade/> <!--  no-op to prevent config changes on downgrade -->
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="STORM">
-      <component name="NIMBUS">
-
-        <pre-upgrade>
-          <task xsi:type="manual">
-            <message>Before continuing, please deactivate and kill any currently running topologies.</message>
-          </task>
-
-          <task xsi:type="execute">
-            <summary>Removing Storm data from ZooKeeper</summary>
-            <script>scripts/storm_upgrade.py</script>
-            <function>delete_storm_zookeeper_data</function>
-          </task>
-
-          <task xsi:type="execute">
-            <summary>Removing local Storm data</summary>
-            <script>scripts/storm_upgrade.py</script>
-            <function>delete_storm_local_data</function>
-          </task>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_nimbus_monitor_freq_adjustment"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_nimbus_convert_nimbus_host_to_seeds"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_update_storm_env"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_nimbus_update_env_vars"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_nimbus_configure_ranger_policy"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_nimbus_configure_ranger_audit"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_nimbus_remove_deprecated_ranger_properties"/>
-
-          <task xsi:type="configure" id="hdp_2_3_0_0_remove_empty_storm_topology_submission_notifier_plugin_class"/>
-
-          <task xsi:type="configure" id="increase_storm_zookeeper_timeouts"/>
-        </pre-upgrade>
-
-        <pre-downgrade>
-          <task xsi:type="execute">
-            <summary>Removing Storm data from ZooKeeper</summary>
-            <script>scripts/storm_upgrade.py</script>
-            <function>delete_storm_zookeeper_data</function>
-          </task>
-
-          <task xsi:type="execute">
-            <summary>Removing local Storm data</summary>
-            <script>scripts/storm_upgrade.py</script>
-            <function>delete_storm_local_data</function>
-          </task>
-        </pre-downgrade>
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="SUPERVISOR">
-        <pre-upgrade>
-          <task xsi:type="execute">
-            <summary>Removing local Storm data</summary>
-            <script>scripts/storm_upgrade.py</script>
-            <function>delete_storm_local_data</function>
-          </task>
-        </pre-upgrade>
-
-        <pre-downgrade>
-          <task xsi:type="manual">
-            <message>Before continuing, please deactivate and kill any currently running topologies.</message>
-          </task>
-
-          <task xsi:type="execute">
-            <summary>Removing local Storm data</summary>
-            <script>scripts/storm_upgrade.py</script>
-            <function>delete_storm_local_data</function>
-          </task>
-        </pre-downgrade>
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="STORM_UI_SERVER">
-        <pre-upgrade>
-          <task xsi:type="execute">
-            <summary>Removing local Storm data</summary>
-            <script>scripts/storm_upgrade.py</script>
-            <function>delete_storm_local_data</function>
-          </task>
-        </pre-upgrade>
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-
-      <component name="DRPC_SERVER">
-        <pre-upgrade>
-          <task xsi:type="execute">
-            <summary>Removing local Storm data</summary>
-            <script>scripts/storm_upgrade.py</script>
-            <function>delete_storm_local_data</function>
-          </task>
-        </pre-upgrade>
-
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-
-        <post-upgrade>
-          <task xsi:type="manual">
-            <message>Please rebuild your topology using the new Storm version dependencies and resubmit it using the newly created jar.</message>
-          </task>
-        </post-upgrade>
-      </component>
-    </service>
-
-    <service name="FLUME">
-      <component name="FLUME_HANDLER">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-
-    <service name="ACCUMULO">
-      <component name="ACCUMULO_MASTER">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-      <component name="ACCUMULO_MONITOR">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-      <component name="ACCUMULO_GC">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-      <component name="ACCUMULO_TRACER">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-      <component name="ACCUMULO_TSERVER">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-      <component name="ACCUMULO_CLIENT">
-        <upgrade>
-          <task xsi:type="restart-task"/>
-        </upgrade>
-      </component>
-    </service>
-  </processing>
-</upgrade>


[40/47] ambari git commit: AMBARI-18985. typeahead was lost while bootstrap 2 to bootstrap3 mirgation (onechiporenko)

Posted by jo...@apache.org.
AMBARI-18985. typeahead was lost while bootstrap 2 to bootstrap3 mirgation (onechiporenko)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: b7d55f0c9375686b8949ada3a4688eb936cf8404
Parents: 14d63dd
Author: Oleg Nechiporenko <on...@apache.org>
Authored: Thu Nov 24 15:49:00 2016 +0200
Committer: Oleg Nechiporenko <on...@apache.org>
Committed: Thu Nov 24 15:49:00 2016 +0200

----------------------------------------------------------------------
 .../common/assign_master_components_view.js     |   2 +
 ambari-web/brunch-config.js                     |   1 +
 ambari-web/vendor/scripts/jquery.typeahead.js   | 300 +++++++++++++++++++
 3 files changed, 303 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/b7d55f0c/ambari-web/app/views/common/assign_master_components_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/assign_master_components_view.js b/ambari-web/app/views/common/assign_master_components_view.js
index 53859f6..4646cf0 100644
--- a/ambari-web/app/views/common/assign_master_components_view.js
+++ b/ambari-web/app/views/common/assign_master_components_view.js
@@ -63,6 +63,8 @@ App.InputHostView = Em.TextField.extend(App.SelectHost, {
    */
   typeahead: null,
 
+  classNames: ['form-control'],
+
   /**
    * When <code>value</code> (host_info) is changed this method is triggered
    * If new hostname is valid, this host is assigned to master component

http://git-wip-us.apache.org/repos/asf/ambari/blob/b7d55f0c/ambari-web/brunch-config.js
----------------------------------------------------------------------
diff --git a/ambari-web/brunch-config.js b/ambari-web/brunch-config.js
index 27a6057..d646fdc 100644
--- a/ambari-web/brunch-config.js
+++ b/ambari-web/brunch-config.js
@@ -67,6 +67,7 @@ module.exports.config = {
           'vendor/scripts/jquery.timeago.js',
           'vendor/scripts/jquery.ajax-retry.js',
           'vendor/scripts/jquery.sticky-kit.js',
+          'vendor/scripts/jquery.typeahead.js',
           'vendor/scripts/underscore.js',
           'vendor/scripts/backbone.js',
           'vendor/scripts/difflib.js',

http://git-wip-us.apache.org/repos/asf/ambari/blob/b7d55f0c/ambari-web/vendor/scripts/jquery.typeahead.js
----------------------------------------------------------------------
diff --git a/ambari-web/vendor/scripts/jquery.typeahead.js b/ambari-web/vendor/scripts/jquery.typeahead.js
new file mode 100644
index 0000000..c020a8e
--- /dev/null
+++ b/ambari-web/vendor/scripts/jquery.typeahead.js
@@ -0,0 +1,300 @@
+/* =============================================================
+ * bootstrap-typeahead.js v2.1.1
+ * http://twitter.github.com/bootstrap/javascript.html#typeahead
+ * =============================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed 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.
+ * ============================================================ */
+
+
+!function($){
+
+  "use strict"; // jshint ;_;
+
+
+  /* TYPEAHEAD PUBLIC CLASS DEFINITION
+   * ================================= */
+
+  var Typeahead = function (element, options) {
+    this.$element = $(element)
+    this.options = $.extend({}, $.fn.typeahead.defaults, options)
+    this.matcher = this.options.matcher || this.matcher
+    this.sorter = this.options.sorter || this.sorter
+    this.highlighter = this.options.highlighter || this.highlighter
+    this.updater = this.options.updater || this.updater
+    this.$menu = $(this.options.menu).appendTo('body')
+    this.source = this.options.source
+    this.shown = false
+    this.listen()
+  }
+
+  Typeahead.prototype = {
+
+    constructor: Typeahead
+
+    , select: function () {
+      var val = this.$menu.find('.active').attr('data-value')
+      this.$element
+        .val(this.updater(val))
+        .change()
+      return this.hide()
+    }
+
+    , updater: function (item) {
+      return item
+    }
+
+    , show: function () {
+      var pos = $.extend({}, this.$element.offset(), {
+        height: this.$element[0].offsetHeight
+      })
+
+      this.$menu.css({
+        top: pos.top + pos.height
+        , left: pos.left
+      })
+
+      this.$menu.show()
+      this.shown = true
+      return this
+    }
+
+    , hide: function () {
+      this.$menu.hide()
+      this.shown = false
+      return this
+    }
+
+    , lookup: function (event) {
+      var items
+
+      this.query = this.$element.val()
+
+      if (!this.query || this.query.length < this.options.minLength) {
+        return this.shown ? this.hide() : this
+      }
+
+      items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source
+
+      return items ? this.process(items) : this
+    }
+
+    , process: function (items) {
+      var that = this
+
+      items = $.grep(items, function (item) {
+        return that.matcher(item)
+      })
+
+      items = this.sorter(items)
+
+      if (!items.length) {
+        return this.shown ? this.hide() : this
+      }
+
+      return this.render(items.slice(0, this.options.items)).show()
+    }
+
+    , matcher: function (item) {
+      return ~item.toLowerCase().indexOf(this.query.toLowerCase())
+    }
+
+    , sorter: function (items) {
+      var beginswith = []
+        , caseSensitive = []
+        , caseInsensitive = []
+        , item
+
+      while (item = items.shift()) {
+        if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
+        else if (~item.indexOf(this.query)) caseSensitive.push(item)
+        else caseInsensitive.push(item)
+      }
+
+      return beginswith.concat(caseSensitive, caseInsensitive)
+    }
+
+    , highlighter: function (item) {
+      var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&')
+      return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {
+        return '<strong>' + match + '</strong>'
+      })
+    }
+
+    , render: function (items) {
+      var that = this
+
+      items = $(items).map(function (i, item) {
+        i = $(that.options.item).attr('data-value', item)
+        i.find('a').html(that.highlighter(item))
+        return i[0]
+      })
+
+      items.first().addClass('active')
+      this.$menu.html(items)
+      return this
+    }
+
+    , next: function (event) {
+      var active = this.$menu.find('.active').removeClass('active')
+        , next = active.next()
+
+      if (!next.length) {
+        next = $(this.$menu.find('li')[0])
+      }
+
+      next.addClass('active')
+    }
+
+    , prev: function (event) {
+      var active = this.$menu.find('.active').removeClass('active')
+        , prev = active.prev()
+
+      if (!prev.length) {
+        prev = this.$menu.find('li').last()
+      }
+
+      prev.addClass('active')
+    }
+
+    , listen: function () {
+      this.$element
+        .on('blur',     $.proxy(this.blur, this))
+        .on('keypress', $.proxy(this.keypress, this))
+        .on('keyup',    $.proxy(this.keyup, this))
+
+      if ($.browser.chrome || $.browser.webkit || $.browser.msie) {
+        this.$element.on('keydown', $.proxy(this.keydown, this))
+      }
+
+      this.$menu
+        .on('click', $.proxy(this.click, this))
+        .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
+    }
+
+    , move: function (e) {
+      if (!this.shown) return
+
+      switch(e.keyCode) {
+        case 9: // tab
+        case 13: // enter
+        case 27: // escape
+          e.preventDefault()
+          break
+
+        case 38: // up arrow
+          e.preventDefault()
+          this.prev()
+          break
+
+        case 40: // down arrow
+          e.preventDefault()
+          this.next()
+          break
+      }
+
+      e.stopPropagation()
+    }
+
+    , keydown: function (e) {
+      this.suppressKeyPressRepeat = !~$.inArray(e.keyCode, [40,38,9,13,27])
+      this.move(e)
+    }
+
+    , keypress: function (e) {
+      if (this.suppressKeyPressRepeat) return
+      this.move(e)
+    }
+
+    , keyup: function (e) {
+      switch(e.keyCode) {
+        case 40: // down arrow
+        case 38: // up arrow
+          break
+
+        case 9: // tab
+        case 13: // enter
+          if (!this.shown) return
+          this.select()
+          break
+
+        case 27: // escape
+          if (!this.shown) return
+          this.hide()
+          break
+
+        default:
+          this.lookup()
+      }
+
+      e.stopPropagation()
+      e.preventDefault()
+    }
+
+    , blur: function (e) {
+      var that = this
+      setTimeout(function () { that.hide() }, 150)
+    }
+
+    , click: function (e) {
+      e.stopPropagation()
+      e.preventDefault()
+      this.select()
+    }
+
+    , mouseenter: function (e) {
+      this.$menu.find('.active').removeClass('active')
+      $(e.currentTarget).addClass('active')
+    }
+
+  }
+
+
+  /* TYPEAHEAD PLUGIN DEFINITION
+   * =========================== */
+
+  $.fn.typeahead = function (option) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('typeahead')
+        , options = typeof option == 'object' && option
+      if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  $.fn.typeahead.defaults = {
+    source: []
+    , items: 8
+    , menu: '<ul class="typeahead dropdown-menu"></ul>'
+    , item: '<li><a href="#"></a></li>'
+    , minLength: 1
+  }
+
+  $.fn.typeahead.Constructor = Typeahead
+
+
+  /*   TYPEAHEAD DATA-API
+   * ================== */
+
+  $(function () {
+    $('body').on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
+      var $this = $(this)
+      if ($this.data('typeahead')) return
+      e.preventDefault()
+      $this.typeahead($this.data())
+    })
+  })
+
+}(window.jQuery);
\ No newline at end of file


[35/47] ambari git commit: Ambari-2.4.2 website updates (jluniya)

Posted by jo...@apache.org.
Ambari-2.4.2 website updates (jluniya)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: 998baf64d2a6500fba91a1a8e035dcd9cf3a4373
Parents: 99cb902
Author: Jayush Luniya <jl...@hortonworks.com>
Authored: Wed Nov 23 11:57:50 2016 -0800
Committer: Jayush Luniya <jl...@hortonworks.com>
Committed: Wed Nov 23 11:59:54 2016 -0800

----------------------------------------------------------------------
 docs/pom.xml                    | 2 +-
 docs/src/site/apt/index.apt     | 2 +-
 docs/src/site/apt/whats-new.apt | 4 ++--
 docs/src/site/site.xml          | 2 ++
 4 files changed, 6 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/998baf64/docs/pom.xml
----------------------------------------------------------------------
diff --git a/docs/pom.xml b/docs/pom.xml
index 82ca6db..625dce3 100644
--- a/docs/pom.xml
+++ b/docs/pom.xml
@@ -28,7 +28,7 @@
     <modelVersion>4.0.0</modelVersion>
 
     <groupId>org.apache.ambari</groupId>
-    <version>2.4.1</version>
+    <version>2.4.2</version>
     <artifactId>ambari</artifactId>
     <packaging>pom</packaging>
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/998baf64/docs/src/site/apt/index.apt
----------------------------------------------------------------------
diff --git a/docs/src/site/apt/index.apt b/docs/src/site/apt/index.apt
index 78b6d90..485ea69 100644
--- a/docs/src/site/apt/index.apt
+++ b/docs/src/site/apt/index.apt
@@ -52,7 +52,7 @@ Introduction
 
 Getting Started with Ambari
 
-  Follow the {{{https://cwiki.apache.org/confluence/display/AMBARI/Installation+Guide+for+Ambari+2.4.1} installation guide for Ambari 2.4.1}}.
+  Follow the {{{https://cwiki.apache.org/confluence/display/AMBARI/Installation+Guide+for+Ambari+2.4.2} installation guide for Ambari 2.4.2}}.
 
   Note: Ambari currently supports the 64-bit version of the following Operating Systems:
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/998baf64/docs/src/site/apt/whats-new.apt
----------------------------------------------------------------------
diff --git a/docs/src/site/apt/whats-new.apt b/docs/src/site/apt/whats-new.apt
index ba8aadc..ff5698f 100644
--- a/docs/src/site/apt/whats-new.apt
+++ b/docs/src/site/apt/whats-new.apt
@@ -16,7 +16,7 @@
 
 What's New with Ambari?
 
-  * The latest release of Ambari is Ambari 2.4.1. This is a maintainenance release of Ambari 2.4.0.
+  * The latest release of Ambari is Ambari 2.4.2. This is a maintainenance release of Ambari 2.4.0.
 
   * Ambari 2.4.0 added the following features:
 
@@ -51,7 +51,7 @@ JIRA
 
 User Guide
 
-  Take a look at {{{https://cwiki.apache.org/confluence/display/AMBARI/Installation+Guide+for+Ambari+2.4.1} how to install a Hadoop cluster using Ambari 2.4.1}}.
+  Take a look at {{{https://cwiki.apache.org/confluence/display/AMBARI/Installation+Guide+for+Ambari+2.4.2} how to install a Hadoop cluster using Ambari 2.4.2}}.
 
 Stay Tuned
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/998baf64/docs/src/site/site.xml
----------------------------------------------------------------------
diff --git a/docs/src/site/site.xml b/docs/src/site/site.xml
index e0bad19..3e14e83 100644
--- a/docs/src/site/site.xml
+++ b/docs/src/site/site.xml
@@ -107,6 +107,7 @@
       <item name="Quick Start Guide" href="https://cwiki.apache.org/confluence/display/AMBARI/Quick+Start+Guide"/>
       <item name="Features + Roadmap" href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=30755705"/>
       <item name="API Reference" href="https://github.com/apache/ambari/blob/trunk/ambari-server/docs/api/v1/index.md"/>
+      <item name="Install Guide for 2.4.2" href="https://cwiki.apache.org/confluence/display/AMBARI/Installation+Guide+for+Ambari+2.4.2"/>
       <item name="Install Guide for 2.4.1" href="https://cwiki.apache.org/confluence/display/AMBARI/Installation+Guide+for+Ambari+2.4.1"/>
       <item name="Install Guide for 2.4.0" href="https://cwiki.apache.org/confluence/display/AMBARI/Installation+Guide+for+Ambari+2.4.0"/>
       <item name="Install Guide for 2.2.2" href="https://cwiki.apache.org/confluence/display/AMBARI/Installation+Guide+for+Ambari+2.2.2"/>
@@ -137,6 +138,7 @@
     </menu>
 
     <menu name="Releases">
+      <item name="2.4.2" href="http://www.apache.org/dyn/closer.cgi/ambari/ambari-2.4.2"/>
       <item name="2.4.1" href="http://www.apache.org/dyn/closer.cgi/ambari/ambari-2.4.1"/>
       <item name="2.4.0" href="http://archive.apache.org/dist/ambari/ambari-2.4.0"/>
       <item name="2.2.2" href="http://archive.apache.org/dist/ambari/ambari-2.2.2"/>


[26/47] ambari git commit: AMBARI-18973 Service Auto Start: discard popup appears even when no changes were made. (atkach)

Posted by jo...@apache.org.
AMBARI-18973 Service Auto Start: discard popup appears even when no changes were made. (atkach)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: 29db2273e77b8fd4f36c15a2001495a08099250a
Parents: 6088c17
Author: Andrii Tkach <at...@apache.org>
Authored: Wed Nov 23 13:52:31 2016 +0200
Committer: Andrii Tkach <at...@apache.org>
Committed: Wed Nov 23 15:25:58 2016 +0200

----------------------------------------------------------------------
 ambari-web/app/assets/test/tests.js             |   4 +-
 .../main/admin/service_auto_start.js            | 342 +++++++++++--------
 .../templates/main/admin/service_auto_start.hbs |  12 +-
 .../service_auto_start/component_auto_start.hbs |   2 +-
 .../app/views/main/admin/service_auto_start.js  |  68 +---
 .../service_auto_start/component_auto_start.js  |  15 +-
 .../main/admin/service_auto_start_test.js       | 326 ++++++++++++++++++
 .../component_auto_start_test.js                |  64 ++++
 .../views/main/admin/service_auto_start_test.js |  83 +++++
 9 files changed, 703 insertions(+), 213 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/29db2273/ambari-web/app/assets/test/tests.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/assets/test/tests.js b/ambari-web/app/assets/test/tests.js
index 959d1c6..4263016 100644
--- a/ambari-web/app/assets/test/tests.js
+++ b/ambari-web/app/assets/test/tests.js
@@ -65,7 +65,7 @@ var files = [
   'test/controllers/main/admin/kerberos/step6_controller_test',
   'test/controllers/main/admin/kerberos/step7_controller_test',
   'test/controllers/main/admin/kerberos/step8_controller_test',
-
+  'test/controllers/main/admin/service_auto_start_test',
   'test/controllers/main/admin/stack_and_upgrade_controller_test',
   'test/controllers/main/admin/stack_upgrade_history_controller_test',
   'test/controllers/main/admin/serviceAccounts_controller_test',
@@ -269,6 +269,8 @@ var files = [
   'test/views/main/admin/stack_upgrade/services_view_test',
   'test/views/main/admin/stack_upgrade/menu_view_test',
   'test/views/main/admin/stack_upgrade/failed_hosts_modal_view_test',
+  'test/views/main/admin/service_auto_start/component_auto_start_test',
+  'test/views/main/admin/service_auto_start_test',
   'test/views/main/dashboard/config_history_view_test',
   'test/views/main/dashboard/widget_test',
   'test/views/main/dashboard/widgets_test',

http://git-wip-us.apache.org/repos/asf/ambari/blob/29db2273/ambari-web/app/controllers/main/admin/service_auto_start.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/service_auto_start.js b/ambari-web/app/controllers/main/admin/service_auto_start.js
index 3365cae..501e6bb 100644
--- a/ambari-web/app/controllers/main/admin/service_auto_start.js
+++ b/ambari-web/app/controllers/main/admin/service_auto_start.js
@@ -21,12 +21,87 @@ var App = require('app');
 App.MainAdminServiceAutoStartController = Em.Controller.extend({
   name: 'mainAdminServiceAutoStartController',
 
+  /**
+   * @type {?object}
+   * @default null
+   */
   clusterConfigs: null,
+
+  /**
+   * @type {Array}
+   */
   componentsConfigs: [],
+
+  /**
+   * @type {boolean}
+   * @default false
+   */
   isSaveDisabled: true,
-  valueChanged: false,
-  syncTrigger: false, // trigger status reset in switch view after "save"
-  revertTrigger: false, // trigger status reset in switch view after "discard"
+
+  /**
+   * Current value of servicesAutoStart
+   * @type {boolean}
+   */
+  servicesAutoStart: false,
+
+  /**
+   * Value of servicesAutoStart saved on server
+   * @type {boolean}
+   */
+  servicesAutoStartSaved: false,
+
+  /**
+   * config version tag,
+   * required to sync cluster configs locally without reload
+   * @type {?object}
+   */
+  tag: null,
+
+  /**
+   * @type {boolean}
+   */
+  isServicesAutoStartChanged: Em.computed.notEqualProperties('servicesAutoStart', 'servicesAutoStartSaved'),
+
+  valueChanged: function() {
+    var isSaveDisabled = true;
+
+    if (this.get('isServicesAutoStartChanged')) {
+      this.set('clusterConfigs.recovery_enabled', this.get('servicesAutoStart') + '');
+      isSaveDisabled = false;
+    }
+    this.get('tabs').forEach(function(tab) {
+      if (isSaveDisabled) {
+        isSaveDisabled = !tab.get('components').someProperty('isChanged');
+      }
+    });
+
+    this.set('isSaveDisabled', isSaveDisabled);
+  },
+
+  load: function() {
+    var self = this;
+    var dfd = $.Deferred();
+
+    return this.loadClusterConfig().done(function (data) {
+      var tag = [
+        {
+          siteName: 'cluster-env',
+          tagName: data.Clusters.desired_configs['cluster-env'].tag,
+          newTagName: null
+        }
+      ];
+      self.set('tag', tag);
+      App.router.get('configurationController').getConfigsByTags(tag).done(function (data) {
+        var servicesAutoStart = data[0].properties.recovery_enabled === 'true';
+        self.set('clusterConfigs', data[0].properties);
+        self.set('servicesAutoStart', servicesAutoStart);
+        self.set('servicesAutoStartSaved', servicesAutoStart);
+        self.loadComponentsConfigs().done(dfd.resolve).fail(dfd.reject);
+      }).fail(dfd.reject);
+    }).fail(dfd.reject);
+
+    return dfd.promise();
+  },
 
   loadClusterConfig: function () {
     return App.ajax.send({
@@ -50,64 +125,53 @@ App.MainAdminServiceAutoStartController = Em.Controller.extend({
     this.set('componentsConfigs', data.items);
   },
 
+  saveClusterConfigs: function (clusterConfigs) {
+    return App.ajax.send({
+      name: 'admin.save_configs',
+      sender: this,
+      data: {
+        siteName: 'cluster-env',
+        properties: clusterConfigs
+      }
+    });
+  },
+
+  saveComponentSettingsCall: function(recoveryEnabled, components) {
+    return App.ajax.send({
+      name: 'components.update',
+      sender: this,
+      data: {
+        ServiceComponentInfo: {
+          recovery_enabled: recoveryEnabled
+        },
+        query: 'ServiceComponentInfo/component_name.in(' + components.join(',') + ')'
+      }
+    });
+  },
+
   tabs: function() {
     var services = {};
     var tabs = [];
-    this.get('componentsConfigs').forEach(function(component) {
+
+    this.get('componentsConfigs').forEach(function (component) {
       var serviceComponentInfo = component.ServiceComponentInfo;
       if (serviceComponentInfo.total_count) {
         if (serviceComponentInfo.category === "MASTER" || serviceComponentInfo.category === "SLAVE") {
-          var componentRecovery = Ember.Object.create({
-            display_name: App.format.role(serviceComponentInfo.component_name, false),
-            component_name: serviceComponentInfo.component_name,
-            recovery_enabled: serviceComponentInfo.recovery_enabled === 'true',
-            valueChanged: false,
-            service_name: serviceComponentInfo.service_name,
-            syncTrigger: false,
-            revertTrigger: false,
-          });
-          if (services[serviceComponentInfo.service_name]) {
-            services[serviceComponentInfo.service_name].get('componentRecovery').push(componentRecovery);
-            services[serviceComponentInfo.service_name].set('enabledComponents', services[serviceComponentInfo.service_name].get('enabledComponents') + (componentRecovery.get('recovery_enabled') ? 1 : 0));
-            services[serviceComponentInfo.service_name].set('totalComponents', services[serviceComponentInfo.service_name].get('totalComponents') + 1);
+          var componentRecovery = this.createRecoveryComponent(serviceComponentInfo);
+          var service = services[serviceComponentInfo.service_name];
+
+          if (service) {
+            service.get('components').pushObject(componentRecovery);
+            service.set('enabledComponents', services[serviceComponentInfo.service_name].get('enabledComponents') + (componentRecovery.get('recovery_enabled') ? 1 : 0));
+            service.set('totalComponents', services[serviceComponentInfo.service_name].get('totalComponents') + 1);
           } else {
-            services[serviceComponentInfo.service_name] = Ember.Object.create({
-              service_name: serviceComponentInfo.service_name,
-              display_name: App.format.role(serviceComponentInfo.service_name, true),
-              headingClass: "." + serviceComponentInfo.service_name,
-              isActive: false,
-              tooltip: function () {
-                var percentage = this.get('enabledComponents') / this.get('totalComponents');
-                var tooltip = '';
-                if (percentage === 1) {
-                  tooltip = Em.I18n.t('admin.serviceAutoStart.tooltip.text').format("All");
-                } else if (percentage === 0) {
-                  tooltip = Em.I18n.t('admin.serviceAutoStart.tooltip.text').format("No");
-                } else {
-                  tooltip = Em.I18n.t('admin.serviceAutoStart.tooltip.text').format(this.get('enabledComponents') + "/" + this.get('totalComponents'));
-                }
-                return tooltip;
-              }.property('enabledComponents', 'totalComponents'),
-              componentRecovery: [componentRecovery],
-              enabledComponents: componentRecovery.recovery_enabled ? 1 : 0,
-              totalComponents: 1,
-              indicator: function () {
-                var percentage = this.get('enabledComponents') / this.get('totalComponents');
-                var indicator = "icon-adjust";
-                if (percentage === 1) {
-                  indicator = "icon-circle";
-                } else if (percentage === 0) {
-                  indicator = "icon-circle-blank";
-                }
-                return indicator;
-              }.property('enabledComponents', 'totalComponents')
-            });
+            services[serviceComponentInfo.service_name] = this.createTab(serviceComponentInfo, componentRecovery);
           }
         }
       }
-    });
-    for (var service in services ) {
-      tabs.push(services[service]);
+    }, this);
+    for (var name in services ) {
+      tabs.push(services[name]);
     }
     if (tabs.length) {
       tabs[0].set('isActive', true);
@@ -115,54 +179,93 @@ App.MainAdminServiceAutoStartController = Em.Controller.extend({
     return tabs;
   }.property('componentsConfigs'),
 
-  checkValuesChange: function () {
-    var valuesChanged = this.get('valueChanged');
-    this.get('tabs').forEach(function (service) {
-      service.get('componentRecovery').forEach(function (component) {
-        valuesChanged = valuesChanged || component.get('valueChanged');
+  createRecoveryComponent: function(serviceComponentInfo) {
+    return Ember.Object.create({
+      displayName: App.format.role(serviceComponentInfo.component_name, false),
+      componentName: serviceComponentInfo.component_name,
+      recoveryEnabled: serviceComponentInfo.recovery_enabled === 'true',
+      recoveryEnabledSaved: serviceComponentInfo.recovery_enabled === 'true',
+      isChanged: Em.computed.notEqualProperties('recoveryEnabled', 'recoveryEnabledSaved'),
+      serviceName: serviceComponentInfo.service_name
+    });
+  },
+
+  createTab: function(serviceComponentInfo, componentRecovery) {
+    return Ember.Object.create({
+      service_name: serviceComponentInfo.service_name,
+      display_name: App.format.role(serviceComponentInfo.service_name, true),
+      headingClass: "." + serviceComponentInfo.service_name,
+      isActive: false,
+      tooltip: function () {
+        var percentage = this.get('enabledComponents') / this.get('totalComponents');
+        var text = Em.I18n.t('admin.serviceAutoStart.tooltip.text');
+        if (percentage === 1) {
+          return text.format("All");
+        } else if (percentage === 0) {
+          return text.format("No");
+        } else {
+          return text.format(this.get('enabledComponents') + "/" + this.get('totalComponents'));
+        }
+      }.property('enabledComponents', 'totalComponents'),
+      components: Em.A([componentRecovery]),
+      enabledComponents: componentRecovery.recovery_enabled ? 1 : 0,
+      totalComponents: 1,
+      indicator: function () {
+        var percentage = this.get('enabledComponents') / this.get('totalComponents');
+        var indicator = "icon-adjust";
+        if (percentage === 1) {
+          indicator = "icon-circle";
+        } else if (percentage === 0) {
+          indicator = "icon-circle-blank";
+        }
+        return indicator;
+      }.property('enabledComponents', 'totalComponents')
+    });
+  },
+
+  filterTabsByRecovery: function(tabs, isRecoveryEnabled) {
+    var components = [];
+
+    tabs.forEach(function (service) {
+      service.get('components').forEach(function (component) {
+        if (component.get('isChanged') && component.get('recoveryEnabled') === isRecoveryEnabled) {
+          components.push(component.get('componentName'));
+        }
       });
     });
-    this.set('isSaveDisabled', !valuesChanged);
-  }.observes('valueChanged'),
+    return components;
+  },
 
   syncStatus: function () {
-    // component level switches
-    this.get('tabs').forEach(function (service) {
-      service.get('componentRecovery').forEach(function (component) {
-        component.set('valueChanged', false);
-        component.toggleProperty('syncTrigger');
+    var servicesAutoStart = this.get('servicesAutoStart');
+    this.set('servicesAutoStartSaved', servicesAutoStart);
+    App.router.get('configurationController').getConfigsByTags(this.get('tag')).done(function(data) {
+      data[0].properties.recovery_enabled = servicesAutoStart + '';
+      App.router.get('configurationController').saveToDB(data);
+    });
+    this.get('tabs').forEach(function(tab) {
+      tab.get('components').forEach(function(component) {
+        component.set('recoveryEnabledSaved', component.get('recoveryEnabled'));
       });
     });
-    // service level switch
-    this.toggleProperty('syncTrigger');
-    this.set('valueChanged', false);
-    this.set('isSaveDisabled', true);
+    this.valueChanged();
   },
 
   revertStatus: function () {
-    // component level switches
-    this.get('tabs').forEach(function (service) {
-      service.get('componentRecovery').forEach(function (component) {
-        component.set('valueChanged', false);
-        component.toggleProperty('revertTrigger');
+    this.set('servicesAutoStart', this.get('servicesAutoStartSaved'));
+    this.get('tabs').forEach(function(tab) {
+      tab.get('components').forEach(function(component) {
+        component.set('recoveryEnabled', component.get('recoveryEnabledSaved'));
       });
     });
-    // service level switch
-    this.toggleProperty('revertTrigger');
-    this.set('valueChanged', false);
-    this.set('isSaveDisabled', true);
   },
 
   enableAll: function (event) {
-    event.context.get('componentRecovery').forEach(function (component) {
-      component.set('recoveryEnabled', true);
-    });
+    event.context.get('components').setEach('recoveryEnabled', true);
   },
 
   disableAll: function (event) {
-    event.context.get('componentRecovery').forEach(function (component) {
-      component.set('recoveryEnabled', false);
-    });
+    event.context.get('components').setEach('recoveryEnabled', false);
   },
 
   /**
@@ -193,79 +296,38 @@ App.MainAdminServiceAutoStartController = Em.Controller.extend({
       primary: Em.I18n.t('common.save'),
       secondary: Em.I18n.t('common.cancel'),
       onSave: function () {
-        //save cluster setting
-        if (self.get('valueChanged')) {
-          self.saveClusterConfigs(self.get('clusterConfigs'));
+        var clusterConfigsCall, enabledComponentsCall, disabledComponentsCall;
+
+        if (self.get('isServicesAutoStartChanged')) {
+          clusterConfigsCall = self.saveClusterConfigs(self.get('clusterConfigs'));
         }
-        //save component settings
-        var enabledComponents = [];
-        var disabledComponents = [];
-        self.get('tabs').forEach(function (service) {
-          service.get('componentRecovery').forEach(function (component) {
-            if (component.get('valueChanged')) {
-              if (component.get('recovery_enabled')) {
-                enabledComponents.push(component.get('component_name'));
-              } else {
-                disabledComponents.push(component.get('component_name'));
-              }
-            }
-          });
-        });
-        if (enabledComponents.length){
-          var promise1 = App.ajax.send({
-            name: 'components.update',
-            sender: this,
-            data: {
-              ServiceComponentInfo: {
-                recovery_enabled: "true"
-              },
-              query: 'ServiceComponentInfo/component_name.in(' + enabledComponents.join(',') + ')'
-            }
-          });
+        var enabledComponents = self.filterTabsByRecovery(self.get('tabs'), true);
+        var disabledComponents = self.filterTabsByRecovery(self.get('tabs'), false);
+
+        if (enabledComponents.length) {
+          enabledComponentsCall = self.saveComponentSettingsCall('true', enabledComponents);
         }
-        if (disabledComponents.length){
-          var promise2 = App.ajax.send({
-            name: 'components.update',
-            sender: this,
-            data: {
-              ServiceComponentInfo: {
-                recovery_enabled: "false"
-              },
-              query: 'ServiceComponentInfo/component_name.in(' + disabledComponents.join(',') + ')'
-            }
-          });
+        if (disabledComponents.length) {
+          disabledComponentsCall = self.saveComponentSettingsCall('false', disabledComponents);
         }
-        $.when(promise1, promise2).done(
-          function () {
-            if (typeof transitionCallback === 'function') {
-              transitionCallback();
-            }
-            self.syncStatus();
+        $.when(clusterConfigsCall, enabledComponentsCall, disabledComponentsCall).done(function () {
+          if (typeof transitionCallback === 'function') {
+            transitionCallback();
           }
-        );
+          self.syncStatus();
+        });
         this.hide();
       },
       onDiscard: function () {
+        self.revertStatus();
         if (typeof transitionCallback === 'function') {
           transitionCallback();
         }
-        self.revertStatus();
         this.hide();
       },
       onCancel: function () {
         this.hide();
       }
     });
-  },
-
-  saveClusterConfigs: function (clusterConfigs) {
-    return App.ajax.send({
-      name: 'admin.save_configs',
-      sender: this,
-      data: {
-        siteName: 'cluster-env',
-        properties: clusterConfigs
-      }
-    });
   }
 });

http://git-wip-us.apache.org/repos/asf/ambari/blob/29db2273/ambari-web/app/templates/main/admin/service_auto_start.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/service_auto_start.hbs b/ambari-web/app/templates/main/admin/service_auto_start.hbs
index 91d3706..be101e7 100644
--- a/ambari-web/app/templates/main/admin/service_auto_start.hbs
+++ b/ambari-web/app/templates/main/admin/service_auto_start.hbs
@@ -24,7 +24,7 @@
       <strong>{{t admin.serviceAutoStart.body.text}}</strong>
     </div>
     <div class="col-md-4">
-      {{view App.CheckboxView checkedBinding="view.switcherValue"}}
+      {{view App.CheckboxView checkedBinding="controller.servicesAutoStart"}}
     </div>
     <div class="col-md-6">
       <div class="pull-right operations-button">
@@ -33,7 +33,7 @@
       </div>
     </div>
   </div>
-    {{#if view.switcherValue}}
+    {{#if view.isLoaded}}
         <hr>
         <div class="row">
           <div class="col-md-4 col-lg-3"><h5>{{t common.service}}</h5></div>
@@ -59,20 +59,22 @@
             {{#each tab in controller.tabs}}
               <div {{bindAttr class=":tab-pane tab.isActive:active tab.service_name"}}>
                 <table class="table">
-                {{#each component in tab.componentRecovery}}
+                {{#each component in tab.components}}
                   <tr>
                     <td class="col-md-4">
                       {{component.display_name}}
                     </td>
                     <td class="col-md-8">
-                      {{view App.MainAdminServiceAutoStartComponentView recoveryEnabledBinding="component.recovery_enabled" componentBinding="component" tabBinding="tab"}}
+                      {{view App.MainAdminServiceAutoStartComponentView componentBinding="component" tabBinding="tab"}}
                     </td>
                   </tr>
                 {{/each}}
                   <tr>
                     <td class="col-md-4"></td>
                     <td class="col-md-8">
-                      <a href="#" class="enable-all-link" {{action enableAll tab target="controller"}}>{{t common.enableAll}}</a> |
+                      <a href="#" class="enable-all-link" {{action enableAll tab target="controller"}}>
+                          {{t common.enableAll}}
+                      </a> |
                       <a href="#" {{action disableAll tab target="controller"}}>{{t common.disableAll}}</a>
                     </td>
                   </tr>

http://git-wip-us.apache.org/repos/asf/ambari/blob/29db2273/ambari-web/app/templates/main/admin/service_auto_start/component_auto_start.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/service_auto_start/component_auto_start.hbs b/ambari-web/app/templates/main/admin/service_auto_start/component_auto_start.hbs
index 06a17f8..a52dcfd 100644
--- a/ambari-web/app/templates/main/admin/service_auto_start/component_auto_start.hbs
+++ b/ambari-web/app/templates/main/admin/service_auto_start/component_auto_start.hbs
@@ -16,4 +16,4 @@
 * limitations under the License.
 }}
 
-{{view App.CheckboxView checkedBinding="view.recoveryEnabled"}}
+{{view App.CheckboxView checkedBinding="view.component.recoveryEnabled"}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/29db2273/ambari-web/app/views/main/admin/service_auto_start.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/service_auto_start.js b/ambari-web/app/views/main/admin/service_auto_start.js
index 5b10d1b..7b4e46c 100644
--- a/ambari-web/app/views/main/admin/service_auto_start.js
+++ b/ambari-web/app/views/main/admin/service_auto_start.js
@@ -20,49 +20,26 @@ var App = require('app');
 
 App.MainAdminServiceAutoStartView = Em.View.extend({
   templateName: require('templates/main/admin/service_auto_start'),
+
   /**
-   * Value used in the checkbox.
-   *
-   * @property switcherValue
    * @type {boolean}
+   * @default false
    */
-  switcherValue: false,
-
-  savedRecoveryEnabled: false,
+  isLoaded: false,
 
   didInsertElement: function () {
     var self = this;
-    this.get('controller').loadClusterConfig().done(function (data) {
-      var tag = [
-        {
-          siteName: 'cluster-env',
-          tagName: data.Clusters.desired_configs['cluster-env'].tag,
-          newTagName: null
-        }
-      ];
-      App.router.get('configurationController').getConfigsByTags(tag).done(function (data) {
-        self.set('controller.clusterConfigs', data[0].properties);
-        self.set('switcherValue', data[0].properties.recovery_enabled === 'true');
-        self.set('savedRecoveryEnabled', self.get('switcherValue'));
-        // plugin should be initiated after applying binding for switcherValue
-        Em.run.later('sync', function() {
-          self.initSwitcher();
-        }.bind(self), 10);
-        self.get('controller').loadComponentsConfigs();
-      });
+    this.get('controller').load().then(function() {
+      self.set('isLoaded', true);
+      self.initSwitcher();
     });
   },
 
-  /**
-   * Init switcher plugin.
-   *
-   * @method initSwitcher
-   */
-  updateClusterConfigs: function (state){
-    this.set('switcherValue', state);
-    this.set('controller.clusterConfigs.recovery_enabled', '' + state);
-    this.set('controller.valueChanged', this.get('savedRecoveryEnabled') !== state);
-  },
+  onValueChange: function () {
+    if (this.get('switcher')) {
+      this.get('switcher').bootstrapSwitch('state', this.get('controller.servicesAutoStart'));
+    }
+  }.observes('controller.servicesAutoStart'),
 
   /**
    * Init switcher plugin.
@@ -71,33 +48,20 @@ App.MainAdminServiceAutoStartView = Em.View.extend({
    */
   initSwitcher: function () {
     var self = this;
-    if (this.$()) {
+    if (this.$) {
       this.set('switcher', this.$("input:eq(0)").bootstrapSwitch({
+        state: self.get('controller.servicesAutoStart'),
         onText: Em.I18n.t('common.enabled'),
         offText: Em.I18n.t('common.disabled'),
         offColor: 'default',
         onColor: 'success',
         handleWidth: Math.max(Em.I18n.t('common.enabled').length, Em.I18n.t('common.disabled').length) * 8,
         onSwitchChange: function (event, state) {
-          self.updateClusterConfigs(state);
+          self.set('controller.servicesAutoStart', state);
+          self.get('controller').valueChanged();
         }
       }));
     }
-  },
-
-  syncComponentRecoveryStatus: function () {
-    this.set('savedRecoveryEnabled', this.get('switcherValue'));
-  }.observes('controller.syncTrigger'),
-
-  revertComponentRecoveryStatus: function () {
-    this.set('switcherValue', this.get('savedRecoveryEnabled'));
-    if (this.get('controller.clusterConfigs')) {
-      this.set('controller.clusterConfigs.recovery_enabled', '' +  this.get('savedRecoveryEnabled'));
-    }
-    var switcher = this.get('switcher');
-    if (switcher) {
-      switcher.bootstrapSwitch('state', this.get('savedRecoveryEnabled'));
-    }
-  }.observes('controller.revertTrigger')
+  }
 });
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/29db2273/ambari-web/app/views/main/admin/service_auto_start/component_auto_start.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/service_auto_start/component_auto_start.js b/ambari-web/app/views/main/admin/service_auto_start/component_auto_start.js
index ceafd21..8588b04 100644
--- a/ambari-web/app/views/main/admin/service_auto_start/component_auto_start.js
+++ b/ambari-web/app/views/main/admin/service_auto_start/component_auto_start.js
@@ -21,24 +21,13 @@ var App = require('app');
 App.MainAdminServiceAutoStartComponentView = Em.View.extend({
   templateName: require('templates/main/admin/service_auto_start/component_auto_start'),
 
-  recoveryEnabled: false,
-  savedRecoveryEnabled: false,
   tab: null,
   component: null,
 
   didInsertElement: function () {
-    this.set('savedRecoveryEnabled', this.get('recoveryEnabled'));
     this.initSwitcher();
   },
 
-  syncComponentRecoveryStatus: function () {
-    this.set('savedRecoveryEnabled', this.get('component.recoveryEnabled'))
-  }.observes('component.syncTrigger'),
-
-  revertComponentRecoveryStatus: function () {
-    this.set('component.recoveryEnabled', this.get('savedRecoveryEnabled'));
-  }.observes('component.revertTrigger'),
-
   onValueChange: function () {
     this.get('switcher').bootstrapSwitch('state', this.get('component.recoveryEnabled'));
   }.observes('component.recoveryEnabled'),
@@ -59,10 +48,8 @@ App.MainAdminServiceAutoStartComponentView = Em.View.extend({
         handleWidth: Math.max(Em.I18n.t('common.enabled').length, Em.I18n.t('common.disabled').length) * 8,
         onSwitchChange: function (event, state) {
           self.set('tab.enabledComponents', self.get('tab.enabledComponents') + (state ? 1 : -1));
-          self.set('recoveryEnabled', state);
           self.set('component.recoveryEnabled', state);
-          self.set('component.valueChanged', self.get('savedRecoveryEnabled') !== state);
-          self.get('parentView.controller').checkValuesChange();
+          self.get('controller').valueChanged();
         }
       }));
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/29db2273/ambari-web/test/controllers/main/admin/service_auto_start_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/admin/service_auto_start_test.js b/ambari-web/test/controllers/main/admin/service_auto_start_test.js
new file mode 100644
index 0000000..8cb176e
--- /dev/null
+++ b/ambari-web/test/controllers/main/admin/service_auto_start_test.js
@@ -0,0 +1,326 @@
+/**
+ * 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.
+ */
+
+var App = require('app');
+var testHelpers = require('test/helpers');
+
+describe('App.MainAdminServiceAutoStartController', function() {
+  var controller;
+
+  beforeEach(function() {
+    controller = App.MainAdminServiceAutoStartController.create({
+      clusterConfigs: {}
+    });
+  });
+
+
+  describe('#valueChanged()', function() {
+
+    it('servicesAutoStart is changed', function() {
+      controller.reopen({
+        servicesAutoStart: true,
+        servicesAutoStartSaved: false,
+        tabs: []
+      });
+      controller.valueChanged();
+      expect(controller.get('isSaveDisabled')).to.be.false;
+    });
+
+    it('servicesAutoStart is not changed', function() {
+      controller.reopen({
+        servicesAutoStart: true,
+        servicesAutoStartSaved: true,
+        tabs: []
+      });
+      controller.valueChanged();
+      expect(controller.get('isSaveDisabled')).to.be.true;
+    });
+
+    it('components state is not changed', function() {
+      controller.reopen({
+        servicesAutoStart: true,
+        servicesAutoStartSaved: true,
+        tabs: [Em.Object.create({
+          components: [
+            Em.Object.create({
+              isChanged: false
+            })
+          ]
+        })]
+      });
+      controller.valueChanged();
+      expect(controller.get('isSaveDisabled')).to.be.true;
+    });
+
+    it('components state is changed', function() {
+      controller.reopen({
+        servicesAutoStart: true,
+        servicesAutoStartSaved: true,
+        tabs: [Em.Object.create({
+          components: [
+            Em.Object.create({
+              isChanged: true
+            })
+          ]
+        })]
+      });
+      controller.valueChanged();
+      expect(controller.get('isSaveDisabled')).to.be.false;
+    });
+  });
+
+  describe('#loadClusterConfig()', function() {
+
+    it('App.ajax.send should be called', function() {
+      controller.loadClusterConfig();
+      var args = testHelpers.findAjaxRequest('name', 'config.tags.site');
+      expect(args[0]).to.be.eql({
+        name: 'config.tags.site',
+        sender: controller,
+        data: {
+          site: 'cluster-env'
+        }
+      });
+    });
+  });
+
+  describe('#loadComponentsConfigs()', function() {
+
+    it('App.ajax.send should be called', function() {
+      controller.loadComponentsConfigs();
+      var args = testHelpers.findAjaxRequest('name', 'components.get_category');
+      expect(args[0]).to.be.eql({
+        name: 'components.get_category',
+        sender: controller,
+        success: 'loadComponentsConfigsSuccess'
+      });
+    });
+  });
+
+  describe('#loadComponentsConfigsSuccess()', function() {
+
+    it('componentsConfigs should be set', function() {
+      controller.loadComponentsConfigsSuccess({items: {prop1: 'val1'}});
+      expect(controller.get('componentsConfigs')).to.be.eql({prop1: 'val1'});
+    });
+  });
+
+  describe('#saveClusterConfigs()', function() {
+    var clusterConfigs = {};
+
+    it('App.ajax.send should be called', function() {
+      controller.saveClusterConfigs(clusterConfigs);
+      var args = testHelpers.findAjaxRequest('name', 'admin.save_configs');
+      expect(args[0]).to.be.eql({
+        name: 'admin.save_configs',
+        sender: controller,
+        data: {
+          siteName: 'cluster-env',
+          properties: clusterConfigs
+        }
+      });
+    });
+  });
+
+  describe('#saveComponentSettingsCall()', function() {
+    it('App.ajax.send should be called', function() {
+      controller.saveComponentSettingsCall(true, ['c1', 'c2']);
+      var args = testHelpers.findAjaxRequest('name', 'components.update');
+      expect(args[0]).to.be.eql({
+        name: 'components.update',
+        sender: controller,
+        data: {
+          ServiceComponentInfo: {
+            recovery_enabled: true
+          },
+          query: 'ServiceComponentInfo/component_name.in(c1,c2)'
+        }
+      });
+    });
+  });
+
+  describe('#createRecoveryComponent()', function() {
+
+    it('should return recovery component', function() {
+      var serviceComponentInfo = {
+        component_name: 'c1',
+        recovery_enabled: 'true',
+        service_name: 's1'
+      };
+      expect(controller.createRecoveryComponent(serviceComponentInfo)).to.be.an.object;
+    });
+  });
+
+  describe('#createTab()', function() {
+
+    it('should return tab', function() {
+      var serviceComponentInfo = {
+        component_name: 'c1',
+        recovery_enabled: 'true',
+        service_name: 's1'
+      };
+      expect(controller.createTab(serviceComponentInfo, {})).to.be.an.object;
+    });
+  });
+
+  describe('#filterTabsByRecovery()', function() {
+
+    it('should return empty when no components were changed', function() {
+      var tabs = [Em.Object.create({
+        components: [
+          Em.Object.create({
+            isChanged: false
+          })
+        ]
+      })];
+      expect(controller.filterTabsByRecovery(tabs, true)).to.be.empty;
+    });
+
+    it('should return enabled components ', function() {
+      var tabs = [Em.Object.create({
+        components: [
+          Em.Object.create({
+            isChanged: true,
+            recoveryEnabled: true
+          })
+        ]
+      })];
+      expect(controller.filterTabsByRecovery(tabs, true)).to.have.length(1);
+    });
+
+    it('should return disabled components ', function() {
+      var tabs = [Em.Object.create({
+        components: [
+          Em.Object.create({
+            isChanged: true,
+            recoveryEnabled: false
+          })
+        ]
+      })];
+      expect(controller.filterTabsByRecovery(tabs, false)).to.have.length(1);
+    });
+  });
+
+  describe('#syncStatus()', function() {
+    var mock = {
+      getConfigsByTags: function() {
+        return {
+          done: function(callback) {
+            callback([{properties: {}}]);
+          }
+        }
+      },
+      saveToDB: Em.K
+    };
+
+    beforeEach(function() {
+      sinon.stub(App.router, 'get').returns(mock);
+      sinon.spy(mock, 'saveToDB');
+      sinon.stub(controller, 'valueChanged');
+    });
+
+    afterEach(function() {
+      App.router.get.restore();
+      mock.saveToDB.restore();
+      controller.valueChanged.restore();
+    });
+
+    it('should save servicesAutoStart to local DB', function() {
+      controller.setProperties({
+        servicesAutoStart: true
+      });
+      controller.syncStatus();
+      expect(mock.saveToDB.getCall(0).args[0]).to.be.eql([{
+        properties: {
+          recovery_enabled: 'true'
+        }
+      }]);
+    });
+
+    it('recoveryEnabledSaved should be synced with recoveryEnabled', function() {
+      controller.reopen({
+        servicesAutoStart: true,
+        tabs: [Em.Object.create({
+          components: [
+            Em.Object.create({
+              recoveryEnabled: true,
+              recoveryEnabledSaved: false
+            })
+          ]
+        })]
+      });
+      controller.syncStatus();
+      expect(controller.get('tabs')[0].get('components')[0].get('recoveryEnabledSaved')).to.be.true;
+    });
+
+    it('valueChanged should be called', function() {
+      controller.syncStatus();
+      expect(controller.valueChanged).to.be.calledonce;
+    });
+  });
+
+  describe('#revertStatus()', function() {
+
+    it('component recoveryEnabled should be reverted', function() {
+      controller.reopen({
+        tabs: [Em.Object.create({
+          components: [
+            Em.Object.create({
+              recoveryEnabled: true,
+              recoveryEnabledSaved: false
+            })
+          ]
+        })]
+      });
+      controller.revertStatus();
+      expect(controller.get('tabs')[0].get('components')[0].get('recoveryEnabled')).to.be.false;
+    });
+
+    it('servicesAutoStart should be reverted', function() {
+      controller.reopen({
+        servicesAutoStart: true,
+        servicesAutoStartSaved: false
+      });
+      controller.revertStatus();
+      expect(controller.get('servicesAutoStart')).to.be.false;
+    });
+  });
+
+  describe('#enableAll()', function() {
+
+    it('should set each recoveryEnabled to true', function() {
+      var components = [
+        Em.Object.create({recoveryEnabled: false})
+      ];
+      controller.enableAll({context: Em.Object.create({components: components})});
+      expect(components[0].get('recoveryEnabled')).to.be.true;
+    });
+  });
+
+  describe('#disableAll()', function() {
+
+    it('should set each recoveryEnabled to false', function() {
+      var components = [
+        Em.Object.create({recoveryEnabled: true})
+      ];
+      controller.disableAll({context: Em.Object.create({components: components})});
+      expect(components[0].get('recoveryEnabled')).to.be.false;
+    });
+  });
+
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/29db2273/ambari-web/test/views/main/admin/service_auto_start/component_auto_start_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/admin/service_auto_start/component_auto_start_test.js b/ambari-web/test/views/main/admin/service_auto_start/component_auto_start_test.js
new file mode 100644
index 0000000..70fd61e
--- /dev/null
+++ b/ambari-web/test/views/main/admin/service_auto_start/component_auto_start_test.js
@@ -0,0 +1,64 @@
+/**
+ * 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.
+ */
+
+var App = require('app');
+var view;
+
+describe('App.MainAdminServiceAutoStartComponentView', function () {
+
+  beforeEach(function () {
+    view = App.MainAdminServiceAutoStartComponentView.create();
+  });
+
+
+  describe('#didInsertElement()', function() {
+
+    beforeEach(function() {
+      sinon.stub(view, 'initSwitcher');
+    });
+
+    afterEach(function() {
+      view.initSwitcher.restore();
+    });
+
+    it('initSwitcher should be called', function() {
+      view.didInsertElement();
+      expect(view.initSwitcher).to.be.calledOnce;
+    });
+  });
+
+  describe('#onValueChange()', function() {
+    var mock = {
+      bootstrapSwitch: Em.K
+    };
+
+    beforeEach(function() {
+      sinon.spy(mock, 'bootstrapSwitch');
+    });
+
+    afterEach(function() {
+      mock.bootstrapSwitch.restore();
+    });
+
+    it('bootstrapSwitch should be called', function() {
+      view.set('switcher', mock);
+      view.onValueChange();
+      expect(mock.bootstrapSwitch).to.be.calledOnce;
+    });
+  });
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/29db2273/ambari-web/test/views/main/admin/service_auto_start_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/admin/service_auto_start_test.js b/ambari-web/test/views/main/admin/service_auto_start_test.js
new file mode 100644
index 0000000..f45f784
--- /dev/null
+++ b/ambari-web/test/views/main/admin/service_auto_start_test.js
@@ -0,0 +1,83 @@
+/**
+ * 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.
+ */
+
+var App = require('app');
+var view;
+
+describe('App.MainAdminServiceAutoStartView', function () {
+
+  beforeEach(function () {
+    view = App.MainAdminServiceAutoStartView.create({
+      controller: Em.Object.create({
+        load: Em.K
+      })
+    });
+  });
+
+
+  describe('#didInsertElement()', function() {
+
+    beforeEach(function() {
+      sinon.stub(view, 'initSwitcher');
+      sinon.stub(view.get('controller'), 'load').returns({
+        then: Em.clb
+      })
+    });
+
+    afterEach(function() {
+      view.initSwitcher.restore();
+      view.get('controller').load.restore();
+    });
+
+    it('initSwitcher should be called', function() {
+      view.didInsertElement();
+      expect(view.initSwitcher).to.be.calledOnce;
+    });
+
+    it('isLoaded should be true', function() {
+      view.didInsertElement();
+      expect(view.get('isLoaded')).to.be.true;
+    });
+  });
+
+  describe('#onValueChange()', function() {
+    var mock = {
+      bootstrapSwitch: Em.K
+    };
+
+    beforeEach(function() {
+      sinon.spy(mock, 'bootstrapSwitch');
+    });
+
+    afterEach(function() {
+      mock.bootstrapSwitch.restore();
+    });
+
+    it('bootstrapSwitch should not be called', function() {
+      view.set('switcher', null);
+      view.onValueChange();
+      expect(mock.bootstrapSwitch).to.not.be.called;
+    });
+
+    it('bootstrapSwitch should be called', function() {
+      view.set('switcher', mock);
+      view.onValueChange();
+      expect(mock.bootstrapSwitch).to.be.calledOnce;
+    });
+  });
+});
\ No newline at end of file


[45/47] ambari git commit: AMBARI-18993. Perf: Status commands return INSTALLED even if component in STARTED state.(vbrodetskyi)

Posted by jo...@apache.org.
AMBARI-18993. Perf: Status commands return INSTALLED even if component in STARTED state.(vbrodetskyi)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: 9579275eb9cc4bd1896a86eb66f6e9fcb84d503e
Parents: 5c002c6
Author: Vitaly Brodetskyi <vb...@hortonworks.com>
Authored: Sun Nov 27 19:16:22 2016 +0200
Committer: Vitaly Brodetskyi <vb...@hortonworks.com>
Committed: Sun Nov 27 19:16:22 2016 +0200

----------------------------------------------------------------------
 ambari-agent/conf/unix/agent-multiplier.py | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/9579275e/ambari-agent/conf/unix/agent-multiplier.py
----------------------------------------------------------------------
diff --git a/ambari-agent/conf/unix/agent-multiplier.py b/ambari-agent/conf/unix/agent-multiplier.py
index dec79eb..7c0774c 100644
--- a/ambari-agent/conf/unix/agent-multiplier.py
+++ b/ambari-agent/conf/unix/agent-multiplier.py
@@ -59,10 +59,12 @@ class Multiplier:
     self.log_dir = "/var/log/ambari-agent"
     self.config_dir = "/etc/ambari-agent/conf"
     self.pid_file = "/var/run/ambari-agent/ambari-agent.pid"
+    self.prefix_dir = "/var/lib/ambari-agent/data"
 
     # Ambari Agent config file to use as a template
     # Will change hostname and port after copying
     self.source_config_file = "/etc/ambari-agent/conf/ambari-agent.ini"
+    self.source_version_file = "/var/lib/ambari-agent/data/version"
     self.base_ping_port = 5000
 
     self.start = 0
@@ -159,11 +161,12 @@ class Multiplier:
       host_config_dir = host_home_dir + self.config_dir
       host_pid_file = host_home_dir + self.pid_file
       host_pid_dir = os.path.dirname(host_pid_file)
+      host_prefix = host_home_dir + self.prefix_dir
 
       if self.verbose:
         print "Analyzing host %s with port %d" % (host_name, host.ping_port)
 
-      for dir in [host_home_dir, host_log_dir, host_config_dir, host_pid_dir]:
+      for dir in [host_home_dir, host_log_dir, host_config_dir, host_pid_dir, host_prefix]:
         if not os.path.isdir(dir):
           print "Creating dir %s" % (dir)
           os.makedirs(dir)
@@ -174,6 +177,12 @@ class Multiplier:
         print "Copying config file %s" % str(host_config_file)
         shutil.copyfile(self.source_config_file, host_config_file)
 
+      # Copy version file
+      version_file = os.path.join(host_prefix, "version")
+      if not os.path.isfile(version_file):
+        print "Copying version file %s" % str(version_file)
+        shutil.copyfile(self.source_version_file, version_file)
+
       # Create hostname.sh script to use custom FQDN for each agent.
       host_name_script = os.path.join(host_config_dir, "hostname.sh")
       self.create_host_name_script(host_name, host_name_script)
@@ -183,7 +192,8 @@ class Multiplier:
                      "hostname_script": host_name_script,
                      "public_hostname_script": host_name_script,
                      "logdir": host_log_dir,
-                     "piddir": host_pid_dir}
+                     "piddir": host_pid_dir,
+                     "prefix": host_prefix}
       self.change_config(host_config_file, config_dict)
 
       # Change /etc/hosts file by appending each hostname.