You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ga...@apache.org on 2016/04/05 05:51:11 UTC

ambari git commit: AMBARI-14383. Add support for Ranger TagSync process as a component under RANGER(gautam)

Repository: ambari
Updated Branches:
  refs/heads/trunk e195171f3 -> bf04d16b1


AMBARI-14383. Add support for Ranger TagSync process as a component under RANGER(gautam)


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

Branch: refs/heads/trunk
Commit: bf04d16b103e89a2d6a0d4538b47a99d3d75a772
Parents: e195171
Author: Gautam Borad <ga...@apache.org>
Authored: Mon Apr 4 11:19:05 2016 +0530
Committer: Gautam Borad <ga...@apache.org>
Committed: Tue Apr 5 09:21:04 2016 +0530

----------------------------------------------------------------------
 .../libraries/functions/conf_select.py          |   6 +
 .../libraries/functions/constants.py            |   1 +
 .../libraries/functions/package_conditions.py   |  11 +-
 .../libraries/functions/stack_features.py       |   5 +
 .../libraries/functions/stack_select.py         |   2 +
 .../RANGER/0.4.0/package/scripts/params.py      |  24 +-
 .../0.4.0/package/scripts/ranger_service.py     |  12 +-
 .../0.4.0/package/scripts/ranger_tagsync.py     |  81 +++++
 .../0.4.0/package/scripts/setup_ranger_xml.py   | 101 +++++-
 .../0.4.0/package/scripts/status_params.py      |   4 +-
 .../HDP/2.0.6/properties/stack_features.json    |   5 +
 .../stacks/HDP/2.2/services/RANGER/metainfo.xml |   8 +
 .../configuration/ranger-tagsync-site.xml       | 187 +++++++++++
 .../tagsync-application-properties.xml          |  95 ++++++
 .../stacks/HDP/2.5/services/RANGER/metainfo.xml |  30 +-
 .../services/RANGER/themes/theme_version_3.json | 308 +++++++++++++++++++
 .../stacks/HDP/2.5/services/stack_advisor.py    |  36 ++-
 .../stacks/HDP/2.6/services/RANGER/metainfo.xml |   2 +-
 18 files changed, 907 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/bf04d16b/ambari-common/src/main/python/resource_management/libraries/functions/conf_select.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/conf_select.py b/ambari-common/src/main/python/resource_management/libraries/functions/conf_select.py
index a85befb..b5de69d 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/conf_select.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/conf_select.py
@@ -115,6 +115,12 @@ _PACKAGE_DIRS = {
       "current_dir": "{0}/current/ranger-admin/conf".format(STACK_ROOT_PATTERN)
     }
   ],
+  "ranger-tagsync": [
+    {
+      "conf_dir": "/etc/ranger/tagsync/conf",
+      "current_dir": "{0}/current/ranger-tagsync/conf".format(STACK_ROOT_PATTERN)
+    }
+  ],
   "ranger-kms": [
     {
       "conf_dir": "/etc/ranger/kms/conf",

http://git-wip-us.apache.org/repos/asf/ambari/blob/bf04d16b/ambari-common/src/main/python/resource_management/libraries/functions/constants.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/constants.py b/ambari-common/src/main/python/resource_management/libraries/functions/constants.py
index f7d817a..055a576 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/constants.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/constants.py
@@ -47,6 +47,7 @@ class StackFeature:
   DATANODE_NON_ROOT = "datanode_non_root"
   REMOVE_RANGER_HDFS_PLUGIN_ENV = "remove_ranger_hdfs_plugin_env"
   RANGER = "ranger"
+  RANGER_TAGSYNC_COMPONENT = "ranger_tagsync_component"
   PHOENIX = "phoenix"
   NFS = "nfs"
   TEZ_FOR_SPARK = "tez_for_spark"

http://git-wip-us.apache.org/repos/asf/ambari/blob/bf04d16b/ambari-common/src/main/python/resource_management/libraries/functions/package_conditions.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/package_conditions.py b/ambari-common/src/main/python/resource_management/libraries/functions/package_conditions.py
index 4ca3b7b..df46ce0 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/package_conditions.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/package_conditions.py
@@ -20,7 +20,7 @@ Ambari Agent
 
 """
 __all__ = ["is_lzo_enabled", "should_install_phoenix", "should_install_ams_collector", "should_install_ams_grafana",
-           "should_install_mysql", "should_install_mysl_connector"]
+           "should_install_mysql", "should_install_mysl_connector", "should_install_ranger_tagsync"]
 
 import os
 from resource_management.libraries.script import Script
@@ -66,4 +66,11 @@ def should_install_hive_atlas():
 
 def should_install_kerberos_server():
   config = Script.get_config()
-  return 'role' in config and config['role'] != "KERBEROS_CLIENT"
\ No newline at end of file
+  return 'role' in config and config['role'] != "KERBEROS_CLIENT"
+
+def should_install_ranger_tagsync():
+  config = Script.get_config()
+  ranger_tagsync_hosts = default("/clusterHostInfo/ranger_tagsync_hosts", [])
+  has_ranger_tagsync = len(ranger_tagsync_hosts) > 0
+
+  return has_ranger_tagsync
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/bf04d16b/ambari-common/src/main/python/resource_management/libraries/functions/stack_features.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/stack_features.py b/ambari-common/src/main/python/resource_management/libraries/functions/stack_features.py
index 4fc3489..8d31fdc 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/stack_features.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/stack_features.py
@@ -65,6 +65,11 @@ _DEFAULT_STACK_FEATURES = {
       "min_version": "2.2.0.0"
     },
     {
+      "name": "ranger_tagsync_component",
+      "description": "Ranger Tagsync component support (AMBARI-14383)",
+      "min_version": "2.5.0.0"
+    },
+    {
       "name": "phoenix",
       "description": "Phoenix Service support",
       "min_version": "2.3.0.0"

http://git-wip-us.apache.org/repos/asf/ambari/blob/bf04d16b/ambari-common/src/main/python/resource_management/libraries/functions/stack_select.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/stack_select.py b/ambari-common/src/main/python/resource_management/libraries/functions/stack_select.py
index 6308a81..b994fce 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/stack_select.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/stack_select.py
@@ -64,6 +64,8 @@ SERVER_ROLE_DIRECTORY_MAP = {
   'OOZIE_SERVER' : 'oozie-server',
   'RANGER_ADMIN' : 'ranger-admin',
   'RANGER_USERSYNC' : 'ranger-usersync',
+  'RANGER_TAGSYNC' : 'ranger-tagsync',
+  'RANGER_KMS' : 'ranger-kms',
   'SPARK_JOBHISTORYSERVER' : 'spark-historyserver',
   'SPARK_THRIFTSERVER' : 'spark-thriftserver',
   'NIMBUS' : 'storm-nimbus',

http://git-wip-us.apache.org/repos/asf/ambari/blob/bf04d16b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/params.py b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/params.py
index 31398f3..c0ab3e8 100644
--- a/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/params.py
+++ b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/params.py
@@ -31,7 +31,8 @@ from resource_management.libraries.functions import StackFeature
 # for use with <stack-root>/current/<component>
 SERVER_ROLE_DIRECTORY_MAP = {
   'RANGER_ADMIN' : 'ranger-admin',
-  'RANGER_USERSYNC' : 'ranger-usersync'
+  'RANGER_USERSYNC' : 'ranger-usersync',
+  'RANGER_TAGSYNC' : 'ranger-tagsync'
 }
 
 component_directory = Script.get_component_from_role(SERVER_ROLE_DIRECTORY_MAP, "RANGER_ADMIN")
@@ -56,12 +57,15 @@ create_db_dbuser = config['configurations']['ranger-env']['create_db_dbuser']
 stack_supports_rolling_upgrade = stack_version_formatted and check_stack_feature(StackFeature.ROLLING_UPGRADE, stack_version_formatted)
 stack_supports_config_versioning =  stack_version_formatted and check_stack_feature(StackFeature.CONFIG_VERSIONING, stack_version_formatted)
 stack_supports_usersync_non_root =  stack_version_formatted and check_stack_feature(StackFeature.RANGER_USERSYNC_NON_ROOT, stack_version_formatted)
+stack_supports_ranger_tagsync =  stack_version_formatted and check_stack_feature(StackFeature.RANGER_TAGSYNC_COMPONENT, stack_version_formatted)
 
 downgrade_from_version = default("/commandParams/downgrade_from_version", None)
 upgrade_direction = default("/commandParams/upgrade_direction", None)
 
 ranger_conf    = '/etc/ranger/admin/conf'
 ranger_ugsync_conf = '/etc/ranger/usersync/conf'
+ranger_tagsync_home  = format('{stack_root}/current/ranger-tagsync')
+ranger_tagsync_conf = format('{stack_root}/current/ranger-tagsync/conf')
 
 if upgrade_direction == Direction.DOWNGRADE and version and not check_stack_feature(StackFeature.CONFIG_VERSIONING, version):
   stack_supports_rolling_upgrade = True
@@ -84,12 +88,17 @@ if stack_supports_config_versioning:
   ranger_conf = format('{stack_root}/current/ranger-admin/conf')
   ranger_ugsync_conf = format('{stack_root}/current/ranger-usersync/conf')
 
+if stack_supports_ranger_tagsync:
+  ranger_tagsync_home  = format('{stack_root}/current/ranger-tagsync')
+  tagsync_bin = '/usr/bin/ranger-tagsync'
+  ranger_tagsync_conf = format('{stack_root}/current/ranger-tagsync/conf')
+
 usersync_services_file = format('{stack_root}/current/ranger-usersync/ranger-usersync-services.sh')
 
 java_home = config['hostLevelParams']['java_home']
 unix_user  = config['configurations']['ranger-env']['ranger_user']
 unix_group = config['configurations']['ranger-env']['ranger_group']
-ranger_pid_dir = config['configurations']['ranger-env']['ranger_pid_dir']
+ranger_pid_dir = default("/configurations/ranger-env/ranger_pid_dir", "/var/run/ranger")
 usersync_log_dir = default("/configurations/ranger-env/ranger_usersync_log_dir", "/var/log/ranger/usersync")
 admin_log_dir = default("/configurations/ranger-env/ranger_admin_log_dir", "/var/log/ranger/admin")
 ranger_admin_default_file = format('{ranger_conf}/ranger-admin-default-site.xml')
@@ -200,3 +209,14 @@ ug_sync_source = config["configurations"]["ranger-ugsync-site"]["ranger.usersync
 current_host = config['hostname']
 if current_host in ranger_admin_hosts:
   ranger_host = current_host
+
+# ranger-tagsync
+ranger_tagsync_hosts = default("/clusterHostInfo/ranger_tagsync_hosts", [])
+has_ranger_tagsync = len(ranger_tagsync_hosts) > 0
+
+tagsync_enabled = config["configurations"]["ranger-tagsync-site"]['ranger.tagsync.enabled']
+tagsync_log_dir = default("/configurations/ranger-tagsync-site/ranger.tagsync.logdir", "/var/log/ranger/tagsync")
+ranger_tagsync_tagadmin_password = unicode(config["configurations"]["ranger-tagsync-site"]["ranger.tagsync.tagadmin.password"]) if has_ranger_tagsync else None
+tagsync_jceks_path = config["configurations"]["ranger-tagsync-site"]["ranger.tagsync.tagadmin.keystore"]
+tagsync_application_properties = dict(config["configurations"]["tagsync-application-properties"]) if has_ranger_tagsync else None
+tagsync_pid_file = format('{ranger_pid_dir}/tagsync.pid')

http://git-wip-us.apache.org/repos/asf/ambari/blob/bf04d16b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_service.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_service.py b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_service.py
index 9477b8e..9f4757b 100644
--- a/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_service.py
+++ b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_service.py
@@ -42,7 +42,7 @@ def ranger_service(name, action=None):
         Execute(params.usersync_start,
                 environment=env_dict,
                 not_if=no_op_test,
-                user=params.unix_user,
+                user=params.unix_user
         )
       except:
         show_logs(params.usersync_log_dir, params.unix_user)
@@ -52,5 +52,13 @@ def ranger_service(name, action=None):
       Execute((params.usersync_start,),
               environment={'JAVA_HOME': params.java_home},
               not_if=no_op_test,
-              sudo=True,
+              sudo=True
       )
+  elif name == 'ranger_tagsync' and params.stack_supports_ranger_tagsync:
+    no_op_test = format('ps -ef | grep proc_rangertagsync | grep -v grep')
+    cmd = format('{tagsync_bin} start')
+    Execute(cmd,
+      environment=env_dict,
+      user=params.unix_user,
+      not_if=no_op_test
+    )
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/bf04d16b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_tagsync.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_tagsync.py b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_tagsync.py
new file mode 100644
index 0000000..79316f9
--- /dev/null
+++ b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_tagsync.py
@@ -0,0 +1,81 @@
+#!/usr/bin/env python
+"""
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+"""
+from resource_management.libraries.script import Script
+from resource_management.libraries.functions import conf_select
+from resource_management.libraries.functions import stack_select
+from resource_management.core.resources.system import Execute, File
+from resource_management.libraries.functions.check_process_status import check_process_status
+from resource_management.core.exceptions import ComponentIsNotRunning
+from resource_management.libraries.functions.format import format
+from resource_management.core.logger import Logger
+from resource_management.core import shell
+from ranger_service import ranger_service
+from setup_ranger_xml import ranger
+import upgrade
+
+class RangerTagsync(Script):
+
+  def install(self, env):
+    self.install_packages(env)
+    self.configure(env)
+
+  def configure(self, env, upgrade_type=None):
+    import params
+    env.set_params(params)
+    ranger('ranger_tagsync', upgrade_type=upgrade_type)
+
+  def start(self, env, upgrade_type=None):
+    import params
+    env.set_params(params)
+
+    self.configure(env, upgrade_type=upgrade_type)
+    ranger_service('ranger_tagsync')
+
+  def stop(self, env, upgrade_type=None):
+    import params
+    env.set_params(params)
+
+    Execute(format('{tagsync_bin} stop'), environment={'JAVA_HOME': params.java_home}, user=params.unix_user)
+    File(params.tagsync_pid_file,
+      action = "delete"
+    )
+
+  def status(self, env):
+    import status_params
+    env.set_params(status_params)
+
+    check_process_status(status_params.tagsync_pid_file)
+
+  def pre_upgrade_restart(self, env, upgrade_type=None):
+    import params
+    env.set_params(params)
+
+    if params.stack_supports_ranger_tagsync:
+      Logger.info("Executing Ranger Tagsync Stack Upgrade pre-restart")
+      conf_select.select(params.stack_name, "ranger-tagsync", params.version)
+      stack_select.select("ranger-tagsync", params.version)
+
+  def get_stack_to_component(self):
+    import params
+    return {params.stack_name: "ranger-tagsync"}
+
+
+if __name__ == "__main__":
+  RangerTagsync().execute()

http://git-wip-us.apache.org/repos/asf/ambari/blob/bf04d16b/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 9a856a5..9544ee8 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
@@ -24,6 +24,7 @@ from resource_management.core.resources.system import File, Directory, Execute,
 from resource_management.core.source import DownloadSource, InlineTemplate
 from resource_management.libraries.resources.xml_config import XmlConfig
 from resource_management.libraries.resources.modify_properties_file import ModifyPropertiesFile
+from resource_management.libraries.resources.properties_file import PropertiesFile
 from resource_management.core.exceptions import Fail
 from resource_management.libraries.functions.format import format
 from resource_management.libraries.functions.is_empty import is_empty
@@ -43,6 +44,9 @@ def ranger(name=None, upgrade_type=None):
   if name == 'ranger_usersync':
     setup_usersync(upgrade_type=upgrade_type)
 
+  if name == 'ranger_tagsync':
+    setup_tagsync(upgrade_type=upgrade_type)
+
 def setup_ranger_admin(upgrade_type=None):
   import params
 
@@ -349,7 +353,7 @@ def setup_usersync(upgrade_type=None):
   )
   
   Directory(format("{ranger_ugsync_conf}/"),
-       owner = params.unix_user
+    owner = params.unix_user
   )
 
   if upgrade_type is not None:
@@ -424,3 +428,98 @@ def setup_usersync(upgrade_type=None):
         group = params.unix_group,
         mode = 0640
     )
+
+def setup_tagsync(upgrade_type=None):
+  import params
+
+  ranger_tagsync_home = params.ranger_tagsync_home
+  ranger_home = params.ranger_home
+  ranger_tagsync_conf = params.ranger_tagsync_conf
+
+  tagsync_log4j_file = format('{ranger_tagsync_conf}/log4j.xml')
+  tagsync_services_file = format('{ranger_tagsync_home}/ranger-tagsync-services.sh')
+
+  Directory(format("{ranger_tagsync_conf}"),
+    owner = params.unix_user,
+    group = params.unix_group,
+    create_parents = True
+  )
+
+  Directory(params.ranger_pid_dir,
+    mode=0750,
+    create_parents=True,
+    owner = params.unix_user,
+    group = params.unix_group,
+    cd_access = "a",
+  )
+
+  Directory(params.tagsync_log_dir,
+    create_parents = True,
+    owner = params.unix_user,
+    group = params.unix_group,
+    cd_access = "a",
+    mode=0755
+  )
+
+  File(format('{ranger_tagsync_conf}/ranger-tagsync-env-logdir.sh'),
+    content = format("export RANGER_TAGSYNC_LOG_DIR={tagsync_log_dir}"),
+    owner = params.unix_user,
+    group = params.unix_group,
+    mode=0755
+  )
+
+  XmlConfig("ranger-tagsync-site.xml",
+    conf_dir=ranger_tagsync_conf,
+    configurations=params.config['configurations']['ranger-tagsync-site'],
+    configuration_attributes=params.config['configuration_attributes']['ranger-tagsync-site'],
+    owner=params.unix_user,
+    group=params.unix_group,
+    mode=0644)
+
+  PropertiesFile(format('{ranger_tagsync_conf}/application.properties'),
+    properties = params.tagsync_application_properties,
+    mode=0755,
+    owner=params.unix_user,
+    group=params.unix_group
+  )
+
+  if upgrade_type is not None:
+    src_file = format('{ranger_tagsync_home}/ews/webapp/WEB-INF/classes/conf.dist/log4j.xml')
+    dst_file = format('{tagsync_log4j_file}')
+    Execute(('cp', '-f', src_file, dst_file), sudo=True)
+
+  if os.path.isfile(tagsync_log4j_file):
+    File(tagsync_log4j_file, owner=params.unix_user, group=params.unix_group)
+  else:
+    Logger.warning('Required file {0} does not exist, copying the file to {1} path'.format(tagsync_log4j_file, ranger_tagsync_conf))
+    src_file = format('{ranger_tagsync_home}/ews/webapp/WEB-INF/classes/conf.dist/log4j.xml')
+    dst_file = format('{tagsync_log4j_file}')
+    Execute(('cp', '-f', src_file, dst_file), sudo=True)
+    File(tagsync_log4j_file, owner=params.unix_user, group=params.unix_group)
+
+  cred_file = format('{ranger_home}/ranger_credential_helper.py')
+  if os.path.isfile(format('{ranger_tagsync_home}/ranger_credential_helper.py')):
+    cred_file = format('{ranger_tagsync_home}/ranger_credential_helper.py')
+
+  cred_lib = os.path.join(ranger_tagsync_home,"lib","*")
+  cred_setup_prefix = (cred_file, '-l', cred_lib)
+
+  if not is_empty(params.tagsync_jceks_path) and not is_empty(params.ranger_tagsync_tagadmin_password) and params.tagsync_enabled:
+    cred_setup = cred_setup_prefix + ('-f', params.tagsync_jceks_path, '-k', 'tagadmin.user.password', '-v', PasswordString(params.ranger_tagsync_tagadmin_password), '-c', '1')
+    Execute(cred_setup, environment={'JAVA_HOME': params.java_home}, logoutput=True, sudo=True)
+
+    File(params.tagsync_jceks_path,
+         owner = params.unix_user,
+         group = params.unix_group,
+         mode = 0640
+    )
+
+  if os.path.isfile(tagsync_services_file):
+    File(tagsync_services_file,
+      mode = 0755,
+    )
+
+    Execute(('ln','-sf', format('{tagsync_services_file}'),'/usr/bin/ranger-tagsync'),
+      not_if=format("ls /usr/bin/ranger-tagsync"),
+      only_if=format("ls {tagsync_services_file}"),
+      sudo=True)

http://git-wip-us.apache.org/repos/asf/ambari/blob/bf04d16b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/status_params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/status_params.py b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/status_params.py
index b932f88..251ca63 100644
--- a/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/status_params.py
+++ b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/status_params.py
@@ -24,4 +24,6 @@ from resource_management.libraries.functions.format import format
 config  = Script.get_config()
 tmp_dir = Script.get_tmp_dir()
 
-upgrade_marker_file = format("{tmp_dir}/rangeradmin_ru.inprogress")
\ No newline at end of file
+upgrade_marker_file = format("{tmp_dir}/rangeradmin_ru.inprogress")
+ranger_pid_dir = config['configurations']['ranger-env']['ranger_pid_dir']
+tagsync_pid_file = format('{ranger_pid_dir}/tagsync.pid')
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/bf04d16b/ambari-server/src/main/resources/stacks/HDP/2.0.6/properties/stack_features.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/properties/stack_features.json b/ambari-server/src/main/resources/stacks/HDP/2.0.6/properties/stack_features.json
index 7a3c12e..0388aa2 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/properties/stack_features.json
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/properties/stack_features.json
@@ -42,6 +42,11 @@
       "min_version": "2.2.0.0"
     },
     {
+      "name": "ranger_tagsync_component",
+      "description": "Ranger Tagsync component support (AMBARI-14383)",
+      "min_version": "2.5.0.0"
+    },
+    {
       "name": "phoenix",
       "description": "Phoenix Service support",
       "min_version": "2.3.0.0"

http://git-wip-us.apache.org/repos/asf/ambari/blob/bf04d16b/ambari-server/src/main/resources/stacks/HDP/2.2/services/RANGER/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/services/RANGER/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.2/services/RANGER/metainfo.xml
index d2bc6f0..0529aa6 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/services/RANGER/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/services/RANGER/metainfo.xml
@@ -40,6 +40,10 @@
             <package>
               <name>ranger_${stack_version}-usersync</name>
             </package>
+            <package>
+              <name>ranger_${stack_version}-tagsync</name>
+              <condition>should_install_ranger_tagsync</condition>
+            </package>
           </packages>
         </osSpecific>
         <osSpecific>
@@ -51,6 +55,10 @@
             <package>
               <name>ranger-${stack_version}-usersync</name>
             </package>
+            <package>
+              <name>ranger-${stack_version}-tagsync</name>
+              <condition>should_install_ranger_tagsync</condition>
+            </package>
           </packages>
         </osSpecific>
       </osSpecifics>

http://git-wip-us.apache.org/repos/asf/ambari/blob/bf04d16b/ambari-server/src/main/resources/stacks/HDP/2.5/services/RANGER/configuration/ranger-tagsync-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/RANGER/configuration/ranger-tagsync-site.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/services/RANGER/configuration/ranger-tagsync-site.xml
new file mode 100644
index 0000000..cfcab3b
--- /dev/null
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/RANGER/configuration/ranger-tagsync-site.xml
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * 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>ranger.tagsync.enabled</name>
+    <display-name>Enable Tagsync</display-name>
+    <value>true</value>
+    <description>Enable/Disable Ranger Tagsync</description>
+    <value-attributes>
+      <empty-value-valid>true</empty-value-valid>
+      <type>value-list</type>
+      <overridable>false</overridable>
+      <entries>
+        <entry>
+          <value>true</value>
+          <label>Yes</label>
+        </entry>
+        <entry>
+          <value>false</value>
+          <label>No</label>
+        </entry>
+      </entries>
+      <selection-cardinality>1</selection-cardinality>
+    </value-attributes>
+  </property>
+
+  <property>
+    <name>ranger.tagsync.logdir</name>
+    <value>/var/log/ranger/tagsync</value>
+    <description>Ranger Log dir</description>
+  </property>
+
+  <property>
+    <name>ranger.tagsync.tagadmin.rest.url</name>
+    <value>{{ranger_external_url}}</value>
+    <description>Ranger TagAdmin REST URL</description>
+    <value-attributes>
+      <empty-value-valid>true</empty-value-valid>
+    </value-attributes>
+  </property>
+
+  <property>
+    <name>ranger.tagsync.filesource.modtime.check.interval</name>
+    <display-name>File Source: File update polling interval</display-name>
+    <value></value>
+    <description></description>
+    <value-attributes>
+      <empty-value-valid>true</empty-value-valid>
+    </value-attributes>
+  </property>
+
+  <property>
+    <name>ranger.tagsync.atlasrestsource.download.interval</name>
+    <display-name>AtlasREST Source: Atlas source download interval</display-name>
+    <value></value>
+    <value-attributes>
+      <empty-value-valid>true</empty-value-valid>
+    </value-attributes>
+  </property>
+
+  <property>
+    <name>ranger.tagsync.tagadmin.rest.ssl.config.file</name>
+    <value>/usr/hdp/current/ranger-tagsync/conf/mytruststore.jks</value>
+    <description>Truststore used for tagsync, required if tagsync -&gt; ranger admin communication is SSL enabled</description>
+  </property>
+
+  <property>
+    <name>ranger.tagsync.filesource.filename</name>
+    <display-name>File Source: Filename</display-name>
+    <value></value>
+    <description>File Source Filename</description>
+    <value-attributes>
+      <empty-value-valid>true</empty-value-valid>
+    </value-attributes>
+  </property>
+
+  <property>
+    <name>ranger.tagsync.source.impl.class</name>
+    <display-name>Tag Source</display-name>
+    <value>atlas</value>
+    <description>Tagsync Source IMPL class</description>
+    <value-attributes>
+      <type>value-list</type>
+      <empty-value-valid>true</empty-value-valid>
+      <overridable>false</overridable>
+      <entries>
+        <entry>
+          <value>atlas</value>
+          <label>ATLAS</label>
+        </entry>
+        <entry>
+          <value>file</value>
+          <label>FILE</label>
+        </entry>
+        <entry>
+          <value>atlasrest</value>
+          <label>ATLASREST</label>
+        </entry>
+      </entries>
+      <selection-cardinality>1</selection-cardinality>
+    </value-attributes>
+  </property>
+
+  <property>
+    <name>ranger.tagsync.tagadmin.keystore</name>
+    <value>/usr/hdp/current/ranger-tagsync/conf/rangertagsync.jceks</value>
+    <description>Keystore file</description>
+    <value-attributes>
+      <empty-value-valid>true</empty-value-valid>
+    </value-attributes>
+  </property>
+
+  <property>
+    <name>ranger.tagsync.tagadmin.alias</name>
+    <value>tagsync.tagadmin</value>
+    <description></description>
+  </property>
+
+  <property>
+    <name>ranger.tagsync.tagadmin.password</name>
+    <display-name>Tagsync admin password</display-name>
+    <value></value>
+    <description>Tagadmin password</description>
+    <value-attributes>
+      <type>password</type>
+    </value-attributes>
+  </property>
+
+  <property>
+    <name>ranger.tagsync.atlas.to.service.mapping</name>
+    <display-name>Tagsync Atlas to Ranger service mapping</display-name>
+    <value></value>
+    <description>Service Mapping</description>
+    <value-attributes>
+      <empty-value-valid>true</empty-value-valid>
+    </value-attributes>
+  </property>
+
+  <property>
+    <name>ranger.tagsync.atlasrestsource.endpoint</name>
+    <display-name>AtlasREST Source: Atlas endpoint</display-name>
+    <value></value>
+    <description></description>
+    <value-attributes>
+      <empty-value-valid>true</empty-value-valid>
+    </value-attributes>
+  </property>
+
+  <property>
+    <name>ranger.tagsync.source.atlas.custom.resource.mappers</name>
+    <value></value>
+    <description></description>
+    <value-attributes>
+      <empty-value-valid>true</empty-value-valid>
+    </value-attributes>
+  </property>
+
+  <property>
+    <name>ranger.tagsync.sink.impl.class</name>
+    <value>org.apache.ranger.tagsync.sink.tagadmin.TagAdminRESTSink</value>
+    <description></description>
+    <value-attributes>
+      <empty-value-valid>true</empty-value-valid>
+    </value-attributes>
+  </property>
+
+</configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/bf04d16b/ambari-server/src/main/resources/stacks/HDP/2.5/services/RANGER/configuration/tagsync-application-properties.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/RANGER/configuration/tagsync-application-properties.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/services/RANGER/configuration/tagsync-application-properties.xml
new file mode 100644
index 0000000..d369098
--- /dev/null
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/RANGER/configuration/tagsync-application-properties.xml
@@ -0,0 +1,95 @@
+<?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>
+
+  <property>
+    <name>atlas.kafka.entities.group.id</name>
+    <display-name>Atlas Source: Kafka consumer group</display-name>
+    <value>ranger_entities_consumer</value>
+    <description></description>
+  </property>
+
+  <property>
+    <name>atlas.kafka.bootstrap.servers</name>
+    <display-name>Atlas Source: Kafka endpoint</display-name>
+    <value>localhost:6667</value>
+    <description></description>
+    <depends-on>
+      <property>
+        <type>kafka-broker</type>
+        <name>port</name>
+      </property>
+      <property>
+        <type>ranger-tagsync-site</type>
+        <name>ranger.tagsync.enabled</name>
+      </property>
+    </depends-on>
+    <value-attributes>
+      <empty-value-valid>true</empty-value-valid>
+    </value-attributes>
+  </property>
+
+  <property>
+    <name>atlas.kafka.zookeeper.connect</name>
+    <display-name>Atlas Source: Zookeeper endpoint</display-name>
+    <value>localhost:2181</value>
+    <description></description>
+    <depends-on>
+      <property>
+        <type>zoo.cfg</type>
+        <name>clientPort</name>
+      </property>
+      <property>
+        <type>ranger-tagsync-site</type>
+        <name>ranger.tagsync.enabled</name>
+      </property>
+    </depends-on>
+    <value-attributes>
+      <empty-value-valid>true</empty-value-valid>
+    </value-attributes>
+  </property>
+
+  <property>
+    <name>atlas.notification.embedded</name>
+    <value>false</value>
+    <description></description>
+  </property>
+
+  <property>
+    <name>atlas.kafka.acks</name>
+    <value>1</value>
+    <description></description>
+  </property>
+
+  <property>
+    <name>atlas.kafka.data</name>
+    <value>/usr/hdp/current/atlas-server/data/kafka</value>
+    <description></description>
+  </property>
+
+  <property>
+    <name>atlas.kafka.hook.group.id</name>
+    <value>atlas</value>
+    <description></description>
+  </property>
+
+</configuration>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/bf04d16b/ambari-server/src/main/resources/stacks/HDP/2.5/services/RANGER/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/RANGER/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.5/services/RANGER/metainfo.xml
index 73a3788..9f96308 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.5/services/RANGER/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/RANGER/metainfo.xml
@@ -23,7 +23,35 @@
   <services>
     <service>
       <name>RANGER</name>
-      <version>0.5.0.2.5</version>
+      <version>0.6.0.2.5</version>
+
+      <components>
+        <component>
+          <name>RANGER_TAGSYNC</name>
+          <displayName>Ranger Tagsync</displayName>
+          <category>MASTER</category>
+          <cardinality>1</cardinality>
+          <versionAdvertised>true</versionAdvertised>
+          <commandScript>
+            <script>scripts/ranger_tagsync.py</script>
+            <scriptType>PYTHON</scriptType>
+            <timeout>600</timeout>
+          </commandScript>
+        </component>
+      </components>
+
+      <themes>
+        <theme>
+          <fileName>theme_version_3.json</fileName>
+          <default>true</default>
+        </theme>
+      </themes>
+
+      <configuration-dependencies>
+        <config-type>ranger-tagsync-site</config-type>
+        <config-type>tagsync-application-properties</config-type>
+      </configuration-dependencies>
+
     </service>
   </services>
 </metainfo>

http://git-wip-us.apache.org/repos/asf/ambari/blob/bf04d16b/ambari-server/src/main/resources/stacks/HDP/2.5/services/RANGER/themes/theme_version_3.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.5/services/RANGER/themes/theme_version_3.json b/ambari-server/src/main/resources/stacks/HDP/2.5/services/RANGER/themes/theme_version_3.json
new file mode 100644
index 0000000..19411d4
--- /dev/null
+++ b/ambari-server/src/main/resources/stacks/HDP/2.5/services/RANGER/themes/theme_version_3.json
@@ -0,0 +1,308 @@
+{
+  "configuration": {
+    "layouts": [
+      {
+        "name": "default",
+        "tabs": [
+          {
+            "name": "ranger_tagsync",
+            "display-name": "Ranger Tagsync",
+            "layout": {
+              "tab-columns": "1",
+              "tab-rows": "1",
+              "sections": [
+                {
+                  "name": "section-tagsync",
+                  "display-name": "Ranger Tagsync",
+                  "row-index": "0",
+                  "column-index": "0",
+                  "row-span": "2",
+                  "column-span": "1",
+                  "section-columns": "1",
+                  "section-rows": "2",
+                  "subsections": [
+                    {
+                      "name": "subsection-ranger-tagsync-row1-col1",
+                      "row-index": "0",
+                      "column-index": "0",
+                      "row-span": "1",
+                      "column-span": "1"
+                    },
+                    {
+                      "name": "subsection-ranger-tagsync-row2-col1",
+                      "row-index": "1",
+                      "column-index": "0",
+                      "row-span": "1",
+                      "column-span": "1",
+                      "depends-on": [
+                        {
+                          "configs": [
+                            "ranger-tagsync-site/ranger.tagsync.enabled"
+                          ],
+                          "if": "${ranger-tagsync-site/ranger.tagsync.enabled}",
+                          "then": {
+                            "property_value_attributes": {
+                              "visible": true
+                            }
+                          },
+                          "else": {
+                            "property_value_attributes": {
+                              "visible": false
+                            }
+                          }
+                        }
+                      ]
+                    }
+                  ]
+                }
+              ]
+            }
+          }
+        ]
+      }
+    ],
+    "placement": {
+      "configuration-layout": "default",
+      "configs": [
+        {
+          "config": "ranger-tagsync-site/ranger.tagsync.enabled",
+          "subsection-name": "subsection-ranger-tagsync-row1-col1"
+        },
+        {
+          "config": "ranger-tagsync-site/ranger.tagsync.tagadmin.password",
+          "subsection-name": "subsection-ranger-tagsync-row2-col1"
+        },
+        {
+          "config": "ranger-tagsync-site/ranger.tagsync.source.impl.class",
+          "subsection-name": "subsection-ranger-tagsync-row2-col1"
+        },
+        {
+          "config": "ranger-tagsync-site/ranger.tagsync.filesource.modtime.check.interval",
+          "subsection-name": "subsection-ranger-tagsync-row2-col1",
+          "depends-on": [
+            {
+              "configs":[
+                "ranger-tagsync-site/ranger.tagsync.source.impl.class"
+              ],
+              "if": "${ranger-tagsync-site/ranger.tagsync.source.impl.class} === file",
+              "then": {
+                "property_value_attributes": {
+                  "visible": true
+                }
+              },
+              "else": {
+                "property_value_attributes": {
+                  "visible": false
+                }
+              }
+            }
+          ]
+        },
+        {
+          "config": "ranger-tagsync-site/ranger.tagsync.filesource.filename",
+          "subsection-name": "subsection-ranger-tagsync-row2-col1",
+          "depends-on": [
+            {
+              "configs":[
+                "ranger-tagsync-site/ranger.tagsync.source.impl.class"
+              ],
+              "if": "${ranger-tagsync-site/ranger.tagsync.source.impl.class} === file",
+              "then": {
+                "property_value_attributes": {
+                  "visible": true
+                }
+              },
+              "else": {
+                "property_value_attributes": {
+                  "visible": false
+                }
+              }
+            }
+          ]
+        },
+        {
+          "config": "ranger-tagsync-site/ranger.tagsync.atlasrestsource.endpoint",
+          "subsection-name": "subsection-ranger-tagsync-row2-col1",
+          "depends-on": [
+            {
+              "configs":[
+                "ranger-tagsync-site/ranger.tagsync.source.impl.class"
+              ],
+              "if": "${ranger-tagsync-site/ranger.tagsync.source.impl.class} === atlasrest",
+              "then": {
+                "property_value_attributes": {
+                  "visible": true
+                }
+              },
+              "else": {
+                "property_value_attributes": {
+                  "visible": false
+                }
+              }
+            }
+          ]
+        },
+        {
+          "config": "ranger-tagsync-site/ranger.tagsync.atlasrestsource.download.interval",
+          "subsection-name": "subsection-ranger-tagsync-row2-col1",
+          "depends-on": [
+            {
+              "configs":[
+                "ranger-tagsync-site/ranger.tagsync.source.impl.class"
+              ],
+              "if": "${ranger-tagsync-site/ranger.tagsync.source.impl.class} === atlasrest",
+              "then": {
+                "property_value_attributes": {
+                  "visible": true
+                }
+              },
+              "else": {
+                "property_value_attributes": {
+                  "visible": false
+                }
+              }
+            }
+          ]
+        },
+        {
+          "config": "ranger-tagsync-site/ranger.tagsync.atlas.to.service.mapping",
+          "subsection-name": "subsection-ranger-tagsync-row2-col1"
+        },
+        {
+          "config": "tagsync-application-properties/atlas.kafka.entities.group.id",
+          "subsection-name": "subsection-ranger-tagsync-row2-col1",
+          "depends-on": [
+            {
+              "configs":[
+                "ranger-tagsync-site/ranger.tagsync.source.impl.class"
+              ],
+              "if": "${ranger-tagsync-site/ranger.tagsync.source.impl.class} === atlas",
+              "then": {
+                "property_value_attributes": {
+                  "visible": true
+                }
+              },
+              "else": {
+                "property_value_attributes": {
+                  "visible": false
+                }
+              }
+            }
+          ]
+        },
+        {
+          "config": "tagsync-application-properties/atlas.kafka.bootstrap.servers",
+          "subsection-name": "subsection-ranger-tagsync-row2-col1",
+          "depends-on": [
+            {
+              "configs":[
+                "ranger-tagsync-site/ranger.tagsync.source.impl.class"
+              ],
+              "if": "${ranger-tagsync-site/ranger.tagsync.source.impl.class} === atlas",
+              "then": {
+                "property_value_attributes": {
+                  "visible": true
+                }
+              },
+              "else": {
+                "property_value_attributes": {
+                  "visible": false
+                }
+              }
+            }
+          ]
+        },
+        {
+          "config": "tagsync-application-properties/atlas.kafka.zookeeper.connect",
+          "subsection-name": "subsection-ranger-tagsync-row2-col1",
+          "depends-on": [
+            {
+              "configs":[
+                "ranger-tagsync-site/ranger.tagsync.source.impl.class"
+              ],
+              "if": "${ranger-tagsync-site/ranger.tagsync.source.impl.class} === atlas",
+              "then": {
+                "property_value_attributes": {
+                  "visible": true
+                }
+              },
+              "else": {
+                "property_value_attributes": {
+                  "visible": false
+                }
+              }
+            }
+          ]
+        }
+      ]
+    },
+    "widgets": [
+      {
+        "config": "ranger-tagsync-site/ranger.tagsync.enabled",
+        "widget": {
+          "type": "toggle"
+        }
+      },
+      {
+        "config": "ranger-tagsync-site/ranger.tagsync.tagadmin.password",
+        "widget": {
+          "type": "password"
+        }
+      },
+      {
+        "config": "ranger-tagsync-site/ranger.tagsync.source.impl.class",
+        "widget": {
+          "type": "combo"
+        }
+      },
+      {
+        "config": "ranger-tagsync-site/ranger.tagsync.atlas.to.service.mapping",
+        "widget": {
+          "type": "text-field"
+        }
+      },
+      {
+        "config": "ranger-tagsync-site/ranger.tagsync.filesource.modtime.check.interval",
+        "widget": {
+          "type": "text-field"
+        }
+      },
+      {
+        "config": "ranger-tagsync-site/ranger.tagsync.filesource.filename",
+        "widget": {
+          "type": "text-field"
+        }
+      },
+      {
+        "config": "ranger-tagsync-site/ranger.tagsync.atlasrestsource.download.interval",
+        "widget": {
+          "type": "text-field"
+        }
+      },
+      {
+        "config": "ranger-tagsync-site/ranger.tagsync.atlasrestsource.endpoint",
+        "widget": {
+          "type": "text-field"
+        }
+      },
+      {
+        "config": "tagsync-application-properties/atlas.kafka.entities.group.id",
+        "widget": {
+          "type": "text-field"
+        }
+      },
+      {
+        "config": "tagsync-application-properties/atlas.kafka.bootstrap.servers",
+        "widget": {
+          "type": "text-field"
+        }
+      },
+      {
+        "config": "tagsync-application-properties/atlas.kafka.zookeeper.connect",
+        "widget": {
+          "type": "text-field"
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/bf04d16b/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 9dd5cc7..9050092 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
@@ -19,4 +19,38 @@ limitations under the License.
 
 
 class HDP25StackAdvisor(HDP24StackAdvisor):
-  pass
+
+  def getServiceConfigurationRecommenderDict(self):
+    parentRecommendConfDict = super(HDP25StackAdvisor, self).getServiceConfigurationRecommenderDict()
+    childRecommendConfDict = {
+      "RANGER": self.recommendRangerConfigurations
+    }
+    parentRecommendConfDict.update(childRecommendConfDict)
+    return parentRecommendConfDict
+
+  def recommendRangerConfigurations(self, configurations, clusterData, services, hosts):
+    super(HDP25StackAdvisor, self).recommendRangerConfigurations(configurations, clusterData, services, hosts)
+    servicesList = [service["StackServices"]["service_name"] for service in services["services"]]
+
+    putTagsyncAppProperty = self.putProperty(configurations, "tagsync-application-properties", services)
+
+    zookeeper_host_port = self.getZKHostPortString(services)
+    if zookeeper_host_port:
+      zookeeper_host_list = zookeeper_host_port.split(',')
+      putTagsyncAppProperty('atlas.kafka.zookeeper.connect', zookeeper_host_list[0])
+    else:
+      putTagsyncAppProperty('atlas.kafka.zookeeper.connect', 'localhost:6667')
+
+    if 'KAFKA' in servicesList:
+      kafka_hosts = self.getHostNamesWithComponent("KAFKA", "KAFKA_BROKER", services)
+      kafka_port = '6667'
+      if 'kafka-broker' in services['configurations'] and ('port' in services['configurations']['kafka-broker']['properties']):
+        kafka_port = services['configurations']['kafka-broker']['properties']['port']
+      kafka_host_port = []
+      for i in range(len(kafka_hosts)):
+        kafka_host_port.append(kafka_hosts[i] + ':' + kafka_port)
+
+      final_kafka_host = ",".join(kafka_host_port)
+      putTagsyncAppProperty('atlas.kafka.bootstrap.servers', final_kafka_host)
+    else:
+      putTagsyncAppProperty('atlas.kafka.bootstrap.servers', 'localhost:2181')

http://git-wip-us.apache.org/repos/asf/ambari/blob/bf04d16b/ambari-server/src/main/resources/stacks/HDP/2.6/services/RANGER/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/RANGER/metainfo.xml b/ambari-server/src/main/resources/stacks/HDP/2.6/services/RANGER/metainfo.xml
index 18c3333..8f0f715 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/services/RANGER/metainfo.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/RANGER/metainfo.xml
@@ -23,7 +23,7 @@
   <services>
     <service>
       <name>RANGER</name>
-      <version>0.5.0.2.6</version>
+      <version>0.6.0.2.6</version>
     </service>
   </services>
 </metainfo>