Repository: ambari
Updated Branches:
  refs/heads/branch-2.1 188eca064 -> a64b61028


AMBARI-13534. Derived properties when Ranger plugin is enabled should be 
recommended by stack advisor. (jaimin)


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

Branch: refs/heads/branch-2.1
Commit: a64b61028a5f5b38a6d16d227798cf5d6f67e31e
Parents: 188eca0
Author: Jaimin Jetly <jai...@hortonworks.com>
Authored: Thu Oct 22 17:29:48 2015 -0700
Committer: Jaimin Jetly <jai...@hortonworks.com>
Committed: Thu Oct 22 17:30:11 2015 -0700

----------------------------------------------------------------------
 .../0.8.1.2.2/configuration/kafka-log4j.xml     |   6 +
 .../KNOX/0.5.0.2.2/configuration/topology.xml   |   6 +
 .../services/HBASE/configuration/hbase-site.xml |  77 +++++++
 .../services/STORM/configuration/storm-site.xml |  12 ++
 .../stacks/HDP/2.2/services/stack_advisor.py    | 104 +++++++++-
 .../services/HDFS/configuration/hdfs-site.xml   |  15 ++
 .../KAFKA/configuration/kafka-broker.xml        |  13 ++
 .../services/YARN/configuration/yarn-site.xml   |  24 +++
 .../stacks/HDP/2.3/services/stack_advisor.py    |  95 ++++++++-
 .../stacks/2.2/common/test_stack_advisor.py     | 128 +++++++++++-
 .../stacks/2.3/common/test_stack_advisor.py     | 204 +++++++++++++++++++
 .../configs/modification_handlers/hbase.js      | 107 ----------
 .../utils/configs/modification_handlers/hdfs.js |  55 -----
 .../configs/modification_handlers/kafka.js      |  71 -------
 .../utils/configs/modification_handlers/knox.js |  67 ------
 .../configs/modification_handlers/storm.js      |  70 -------
 .../utils/configs/modification_handlers/yarn.js |  71 -------
 17 files changed, 659 insertions(+), 466 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/a64b6102/ambari-server/src/main/resources/common-services/KAFKA/0.8.1.2.2/configuration/kafka-log4j.xml
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/common-services/KAFKA/0.8.1.2.2/configuration/kafka-log4j.xml
 
b/ambari-server/src/main/resources/common-services/KAFKA/0.8.1.2.2/configuration/kafka-log4j.xml
index e18732d..e8e785f 100644
--- 
a/ambari-server/src/main/resources/common-services/KAFKA/0.8.1.2.2/configuration/kafka-log4j.xml
+++ 
b/ambari-server/src/main/resources/common-services/KAFKA/0.8.1.2.2/configuration/kafka-log4j.xml
@@ -114,6 +114,12 @@ log4j.additivity.state.change.logger=false
     <value-attributes>
       <show-property-name>false</show-property-name>
     </value-attributes>
+    <depends-on>
+      <property>
+        <type>ranger-kafka-plugin-properties</type>
+        <name>ranger-kafka-plugin-enabled</name>
+      </property>
+    </depends-on>
   </property>
 
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a64b6102/ambari-server/src/main/resources/common-services/KNOX/0.5.0.2.2/configuration/topology.xml
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/common-services/KNOX/0.5.0.2.2/configuration/topology.xml
 
b/ambari-server/src/main/resources/common-services/KNOX/0.5.0.2.2/configuration/topology.xml
index 583cfeb..d6a7dbb 100644
--- 
a/ambari-server/src/main/resources/common-services/KNOX/0.5.0.2.2/configuration/topology.xml
+++ 
b/ambari-server/src/main/resources/common-services/KNOX/0.5.0.2.2/configuration/topology.xml
@@ -122,5 +122,11 @@
        <empty-value-valid>true</empty-value-valid>
        <show-property-name>false</show-property-name>
     </value-attributes>
+        <depends-on>
+            <property>
+                <type>ranger-knox-plugin-properties</type>
+                <name>ranger-knox-plugin-enabled</name>
+            </property>
+        </depends-on>
     </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a64b6102/ambari-server/src/main/resources/stacks/HDP/2.2/services/HBASE/configuration/hbase-site.xml
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.2/services/HBASE/configuration/hbase-site.xml
 
b/ambari-server/src/main/resources/stacks/HDP/2.2/services/HBASE/configuration/hbase-site.xml
index cdb0391..3c9b390 100644
--- 
a/ambari-server/src/main/resources/stacks/HDP/2.2/services/HBASE/configuration/hbase-site.xml
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.2/services/HBASE/configuration/hbase-site.xml
@@ -230,4 +230,81 @@
       <increment-step>0.01</increment-step>
     </value-attributes>
   </property>
+  <property>
+    <name>hbase.coprocessor.master.classes</name>
+    <value></value>
+    <description>A comma-separated list of
+      org.apache.hadoop.hbase.coprocessor.MasterObserver coprocessors that are
+      loaded by default on the active HMaster process. For any implemented
+      coprocessor methods, the listed classes will be called in order. After
+      implementing your own MasterObserver, just put it in HBase's classpath
+      and add the fully qualified class name here.
+    </description>
+    <value-attributes>
+      <empty-value-valid>true</empty-value-valid>
+    </value-attributes>
+    <depends-on>
+      <property>
+        <type>hbase-site</type>
+        <name>hbase.security.authorization</name>
+      </property>
+      <property>
+        <type>ranger-hbase-plugin-properties</type>
+        <name>ranger-hbase-plugin-enabled</name>
+      </property>
+    </depends-on>
+  </property>
+  <property>
+    <name>hbase.coprocessor.region.classes</name>
+    
<value>org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint</value>
+    <description>A comma-separated list of Coprocessors that are loaded by
+      default on all tables. For any override coprocessor method, these classes
+      will be called in order. After implementing your own Coprocessor, just 
put
+      it in HBase's classpath and add the fully qualified class name here.
+      A coprocessor can also be loaded on demand by setting HTableDescriptor.
+    </description>
+    <value-attributes>
+      <empty-value-valid>true</empty-value-valid>
+    </value-attributes>
+    <depends-on>
+      <property>
+        <type>hbase-site</type>
+        <name>hbase.security.authorization</name>
+      </property>
+      <property>
+        <type>hbase-site</type>
+        <name>hbase.security.authentication</name>
+      </property>
+      <property>
+        <type>ranger-hbase-plugin-properties</type>
+        <name>ranger-hbase-plugin-enabled</name>
+      </property>
+    </depends-on>
+  </property>
+  <property>
+    <name>hbase.security.authorization</name>
+    <value>false</value>
+    <description> Set Authorization Method.</description>
+    <display-name>Enable Authorization</display-name>
+    <value-attributes>
+      <type>value-list</type>
+      <entries>
+        <entry>
+          <value>true</value>
+          <label>Native</label>
+        </entry>
+        <entry>
+          <value>false</value>
+          <label>Off</label>
+        </entry>
+      </entries>
+      <selection-cardinality>1</selection-cardinality>
+    </value-attributes>
+    <depends-on>
+      <property>
+        <type>ranger-hbase-plugin-properties</type>
+        <name>ranger-hbase-plugin-enabled</name>
+      </property>
+    </depends-on>
+  </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a64b6102/ambari-server/src/main/resources/stacks/HDP/2.2/services/STORM/configuration/storm-site.xml
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.2/services/STORM/configuration/storm-site.xml
 
b/ambari-server/src/main/resources/stacks/HDP/2.2/services/STORM/configuration/storm-site.xml
index 00a1391..29dc700 100644
--- 
a/ambari-server/src/main/resources/stacks/HDP/2.2/services/STORM/configuration/storm-site.xml
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.2/services/STORM/configuration/storm-site.xml
@@ -109,4 +109,16 @@
     <value>{{log_dir}}</value>
     <description>Log directory for Storm.</description>
   </property>
+
+  <property>
+    <name>nimbus.authorizer</name>
+    <value>backtype.storm.security.auth.authorizer.SimpleACLAuthorizer</value>
+    <description>Log directory for Storm.</description>
+    <depends-on>
+      <property>
+        <type>ranger-storm-plugin-properties</type>
+        <name>ranger-storm-plugin-enabled</name>
+      </property>
+    </depends-on>
+  </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a64b6102/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 cf9c91e..707a641 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
@@ -23,6 +23,7 @@ from urlparse import urlparse
 import os
 import fnmatch
 import socket
+import re
 
 class HDP22StackAdvisor(HDP21StackAdvisor):
 
@@ -569,13 +570,20 @@ class HDP22StackAdvisor(HDP21StackAdvisor):
               ('hbase-site' in services['configurations'] and 
'phoenix.functions.allowUserDefinedFunctions' in 
services['configurations']["hbase-site"]["properties"]):
         
putHbaseSitePropertyAttributes('phoenix.functions.allowUserDefinedFunctions', 
'delete', 'true')
 
-    servicesList = [service["StackServices"]["service_name"] for service in 
services["services"]]
-    if 'ranger-hbase-plugin-properties' in services['configurations'] and 
('ranger-hbase-plugin-enabled' in 
services['configurations']['ranger-hbase-plugin-properties']['properties']):
+    if "ranger-env" in services["configurations"] and 
"ranger-hbase-plugin-properties" in services["configurations"] and \
+        "ranger-hbase-plugin-enabled" in 
services["configurations"]["ranger-env"]["properties"]:
+      putHbaseRangerPluginProperty = self.putProperty(configurations, 
"ranger-hbase-plugin-properties", services)
+      rangerEnvHbasePluginProperty = 
services["configurations"]["ranger-env"]["properties"]["ranger-hbase-plugin-enabled"]
+      putHbaseRangerPluginProperty("ranger-hbase-plugin-enabled", 
rangerEnvHbasePluginProperty)
+
+    rangerPluginEnabled = ''
+    if 'ranger-hbase-plugin-properties' in configurations and 
'ranger-hbase-plugin-enabled' in  
configurations['ranger-hbase-plugin-properties']['properties']:
+      rangerPluginEnabled = 
configurations['ranger-hbase-plugin-properties']['properties']['ranger-hbase-plugin-enabled']
+    elif 'ranger-hbase-plugin-properties' in services['configurations'] and 
'ranger-hbase-plugin-enabled' in 
services['configurations']['ranger-hbase-plugin-properties']['properties']:
       rangerPluginEnabled = 
services['configurations']['ranger-hbase-plugin-properties']['properties']['ranger-hbase-plugin-enabled']
-      if ("RANGER" in servicesList) and (rangerPluginEnabled.lower() == 
"Yes".lower()):
-        putHbaseSiteProperty("hbase.security.authorization", 'true')
-        putHbaseSiteProperty("hbase.coprocessor.master.classes", 
'com.xasecure.authorization.hbase.XaSecureAuthorizationCoprocessor')
-        putHbaseSiteProperty("hbase.coprocessor.region.classes", 
'com.xasecure.authorization.hbase.XaSecureAuthorizationCoprocessor')
+
+    if rangerPluginEnabled and rangerPluginEnabled.lower() == 'Yes'.lower():
+      putHbaseSiteProperty('hbase.security.authorization','true')
 
     # Recommend configs for bucket cache
     threshold = 23 # 2 Gb is reserved for other offheap memory
@@ -670,11 +678,38 @@ class HDP22StackAdvisor(HDP21StackAdvisor):
     [uniqueCoprocessorRegionClassList.append(i) for i in 
coprocessorRegionClassList if not uniqueCoprocessorRegionClassList.count(i)]
     putHbaseSiteProperty('hbase.coprocessor.region.classes', 
','.join(set(uniqueCoprocessorRegionClassList)))
 
-    if "ranger-env" in services["configurations"] and 
"ranger-hbase-plugin-properties" in services["configurations"] and \
-        "ranger-hbase-plugin-enabled" in 
services["configurations"]["ranger-env"]["properties"]:
-      putHbaseRangerPluginProperty = self.putProperty(configurations, 
"ranger-hbase-plugin-properties", services)
-      rangerEnvHbasePluginProperty = 
services["configurations"]["ranger-env"]["properties"]["ranger-hbase-plugin-enabled"]
-      putHbaseRangerPluginProperty("ranger-hbase-plugin-enabled", 
rangerEnvHbasePluginProperty)
+    stackVersion = services["Versions"]["stack_version"]
+
+    if stackVersion == '2.2':
+      rangerClass = 
'com.xasecure.authorization.hbase.XaSecureAuthorizationCoprocessor'
+    else:
+      rangerClass = 
'org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor'
+
+    nonRangerClass = 'org.apache.hadoop.hbase.security.access.AccessController'
+    hbaseClassConfigs = ['hbase.coprocessor.master.classes', 
'hbase.coprocessor.region.classes']
+
+    for item in range(len(hbaseClassConfigs)):
+      if hbaseClassConfigs[item] in 
services['configurations']['hbase-site']['properties']:
+        if 'hbase-site' in configurations and hbaseClassConfigs[item] in 
configurations['hbase-site']['properties']:
+          coprocessorConfig = 
configurations['hbase-site']['properties'][hbaseClassConfigs[item]]
+        else:
+          coprocessorConfig = 
services['configurations']['hbase-site']['properties'][hbaseClassConfigs[item]]
+        coprocessorClasses = coprocessorConfig.split(",")
+        coprocessorClasses = filter(None, coprocessorClasses) # Removes empty 
string elements from array
+        if rangerPluginEnabled and rangerPluginEnabled.lower() == 
'Yes'.lower():
+          if nonRangerClass in coprocessorClasses:
+            coprocessorClasses.remove(nonRangerClass)
+          if not rangerClass in coprocessorClasses:
+            coprocessorClasses.append(rangerClass)
+          putHbaseSiteProperty(hbaseClassConfigs[item], 
','.join(coprocessorClasses))
+        elif rangerPluginEnabled and rangerPluginEnabled.lower() == 
'No'.lower():
+          if rangerClass in coprocessorClasses:
+            coprocessorClasses.remove(rangerClass)
+            if not nonRangerClass in coprocessorClasses:
+              coprocessorClasses.append(nonRangerClass)
+            putHbaseSiteProperty(hbaseClassConfigs[item], 
','.join(coprocessorClasses))
+      elif rangerPluginEnabled and rangerPluginEnabled.lower() == 
'Yes'.lower():
+        putHbaseSiteProperty(hbaseClassConfigs[item], rangerClass)
 
 
   def recommendTezConfigurations(self, configurations, clusterData, services, 
hosts):
@@ -732,12 +767,36 @@ class HDP22StackAdvisor(HDP21StackAdvisor):
 
 
   def recommendStormConfigurations(self, configurations, clusterData, 
services, hosts):
+    putStormSiteProperty = self.putProperty(configurations, "storm-site", 
services)
+    putStormSiteAttributes = self.putPropertyAttribute(configurations, 
"storm-site")
+    core_site = services["configurations"]["core-site"]["properties"]
+    stackVersion = services["Versions"]["stack_version"]
     if "ranger-env" in services["configurations"] and 
"ranger-storm-plugin-properties" in services["configurations"] and \
         "ranger-storm-plugin-enabled" in 
services["configurations"]["ranger-env"]["properties"]:
       putStormRangerPluginProperty = self.putProperty(configurations, 
"ranger-storm-plugin-properties", services)
       rangerEnvStormPluginProperty = 
services["configurations"]["ranger-env"]["properties"]["ranger-storm-plugin-enabled"]
       putStormRangerPluginProperty("ranger-storm-plugin-enabled", 
rangerEnvStormPluginProperty)
 
+    rangerPluginEnabled = ''
+    if 'ranger-storm-plugin-properties' in configurations and 
'ranger-storm-plugin-enabled' in  
configurations['ranger-storm-plugin-properties']['properties']:
+      rangerPluginEnabled = 
configurations['ranger-storm-plugin-properties']['properties']['ranger-storm-plugin-enabled']
+    elif 'ranger-storm-plugin-properties' in services['configurations'] and 
'ranger-storm-plugin-enabled' in 
services['configurations']['ranger-storm-plugin-properties']['properties']:
+      rangerPluginEnabled = 
services['configurations']['ranger-storm-plugin-properties']['properties']['ranger-storm-plugin-enabled']
+
+    nonRangerClass = 
'backtype.storm.security.auth.authorizer.SimpleACLAuthorizer'
+    if stackVersion == '2.2':
+      rangerClass = 
'com.xasecure.authorization.storm.authorizer.XaSecureStormAuthorizer'
+    else:
+      rangerClass = 
'org.apache.ranger.authorization.storm.authorizer.RangerStormAuthorizer'
+    # Cluster is kerberized
+    if ('hadoop.security.authentication' in core_site and 
core_site['hadoop.security.authentication'] == 'kerberos'):
+      if rangerPluginEnabled and (rangerPluginEnabled.lower() == 
'Yes'.lower()):
+        putStormSiteProperty('nimbus.authorizer',rangerClass)
+      elif 
(services["configurations"]["storm-site"]["properties"]["nimbus.authorizer"] == 
rangerClass):
+        putStormSiteProperty('nimbus.authorizer', nonRangerClass)
+    else:
+      putStormSiteAttributes('nimbus.authorizer', 'delete', 'true')
+
   def recommendKnoxConfigurations(self, configurations, clusterData, services, 
hosts):
     if "ranger-env" in services["configurations"] and 
"ranger-knox-plugin-properties" in services["configurations"] and \
         "ranger-knox-plugin-enabled" in 
services["configurations"]["ranger-env"]["properties"]:
@@ -745,6 +804,29 @@ class HDP22StackAdvisor(HDP21StackAdvisor):
       rangerEnvKnoxPluginProperty = 
services["configurations"]["ranger-env"]["properties"]["ranger-knox-plugin-enabled"]
       putKnoxRangerPluginProperty("ranger-knox-plugin-enabled", 
rangerEnvKnoxPluginProperty)
 
+    if 'topology' in services["configurations"] and 'content' in 
services["configurations"]["topology"]["properties"]:
+      putKnoxTopologyContent = self.putProperty(configurations, "topology", 
services)
+      rangerPluginEnabled = ''
+      if 'ranger-knox-plugin-properties' in configurations and 
'ranger-knox-plugin-enabled' in  
configurations['ranger-knox-plugin-properties']['properties']:
+        rangerPluginEnabled = 
configurations['ranger-knox-plugin-properties']['properties']['ranger-knox-plugin-enabled']
+      elif 'ranger-knox-plugin-properties' in services['configurations'] and 
'ranger-knox-plugin-enabled' in 
services['configurations']['ranger-knox-plugin-properties']['properties']:
+        rangerPluginEnabled = 
services['configurations']['ranger-knox-plugin-properties']['properties']['ranger-knox-plugin-enabled']
+      topologyContent = 
services["configurations"]["topology"]["properties"]["content"]
+      authPattern = 
"<provider>\s*<role>\s*authorization\s*</role>[\s\S]*?</provider>"
+      authXml = re.search(authPattern, topologyContent)
+
+      if authXml.group(0):
+        authNamePattern = "<name>\s*(.*?)\s*</name>"
+        authName = re.search(authNamePattern, authXml.group(0))
+        newAuthName=''
+        if authName.group(1) == 'AclsAuthz' and rangerPluginEnabled and 
rangerPluginEnabled.lower() == "Yes".lower():
+          newAuthName = authName.group(0).replace('AclsAuthz', 
'XASecurePDPKnox')
+        elif ((not rangerPluginEnabled) or rangerPluginEnabled.lower() != 
"Yes".lower()) and authName.group(1) == 'XASecurePDPKnox':
+          newAuthName = authName.group(0).replace('XASecurePDPKnox', 
'AclsAuthz')
+        if newAuthName:
+          newAuthxml = authXml.group(0).replace(authName.group(0), newAuthName)
+          newTopologyXmlContent = topologyContent.replace(authXml.group(0), 
newAuthxml)
+          putKnoxTopologyContent('content', newTopologyXmlContent)
 
 
   def getServiceConfigurationValidators(self):

http://git-wip-us.apache.org/repos/asf/ambari/blob/a64b6102/ambari-server/src/main/resources/stacks/HDP/2.3/services/HDFS/configuration/hdfs-site.xml
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.3/services/HDFS/configuration/hdfs-site.xml
 
b/ambari-server/src/main/resources/stacks/HDP/2.3/services/HDFS/configuration/hdfs-site.xml
index df2f3fe..c856ad3 100644
--- 
a/ambari-server/src/main/resources/stacks/HDP/2.3/services/HDFS/configuration/hdfs-site.xml
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.3/services/HDFS/configuration/hdfs-site.xml
@@ -54,4 +54,19 @@
     </description>
   </property>
 
+  <property>
+    <name>dfs.namenode.inode.attributes.provider.class</name>
+    <value>org.apache.ranger.authorization.hadoop.RangerHdfsAuthorizer</value>
+    <description>Enable ranger hdfs plugin</description>
+    <depends-on>
+      <property>
+        <type>ranger-hdfs-plugin-properties</type>
+        <name>ranger-hdfs-plugin-enabled</name>
+      </property>
+    </depends-on>
+    <value-attributes>
+      <overridable>false</overridable>
+    </value-attributes>
+  </property>
+
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a64b6102/ambari-server/src/main/resources/stacks/HDP/2.3/services/KAFKA/configuration/kafka-broker.xml
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.3/services/KAFKA/configuration/kafka-broker.xml
 
b/ambari-server/src/main/resources/stacks/HDP/2.3/services/KAFKA/configuration/kafka-broker.xml
index 6b69653..896db6f 100644
--- 
a/ambari-server/src/main/resources/stacks/HDP/2.3/services/KAFKA/configuration/kafka-broker.xml
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.3/services/KAFKA/configuration/kafka-broker.xml
@@ -138,4 +138,17 @@
       These metrics would be included even if the exclude prefix omits them.
     </description>
   </property>
+  <property>
+    <name>authorizer.class.name</name>
+    <value>kafka.security.auth.SimpleAclAuthorizer</value>
+    <description>
+      Kafka authorizer class
+    </description>
+    <depends-on>
+      <property>
+        <type>ranger-kafka-plugin-properties</type>
+        <name>ranger-kafka-plugin-enabled</name>
+      </property>
+    </depends-on>
+  </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a64b6102/ambari-server/src/main/resources/stacks/HDP/2.3/services/YARN/configuration/yarn-site.xml
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.3/services/YARN/configuration/yarn-site.xml
 
b/ambari-server/src/main/resources/stacks/HDP/2.3/services/YARN/configuration/yarn-site.xml
index 12a8a21..7b91d59 100644
--- 
a/ambari-server/src/main/resources/stacks/HDP/2.3/services/YARN/configuration/yarn-site.xml
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.3/services/YARN/configuration/yarn-site.xml
@@ -32,6 +32,30 @@
   </property>
 
   <property>
+    <name>yarn.acl.enable</name>
+    <value>false</value>
+    <description> Are acls enabled. </description>
+    <depends-on>
+      <property>
+        <type>ranger-yarn-plugin-properties</type>
+        <name>ranger-yarn-plugin-enabled</name>
+      </property>
+    </depends-on>
+  </property>
+
+  <property>
+    <name>yarn.authorization-provider</name>
+    
<value>org.apache.ranger.authorization.yarn.authorizer.RangerYarnAuthorizer</value>
+    <description> Yarn authorization provider class. </description>
+    <depends-on>
+      <property>
+        <type>ranger-yarn-plugin-properties</type>
+        <name>ranger-yarn-plugin-enabled</name>
+      </property>
+    </depends-on>
+  </property>
+
+  <property>
     <name>yarn.admin.acl</name>
     <value>yarn</value>
     <description> ACL of who can be admin of the YARN cluster. </description>

http://git-wip-us.apache.org/repos/asf/ambari/blob/a64b6102/ambari-server/src/main/resources/stacks/HDP/2.3/services/stack_advisor.py
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.3/services/stack_advisor.py 
b/ambari-server/src/main/resources/stacks/HDP/2.3/services/stack_advisor.py
index 7a6662c..464f9cc 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.3/services/stack_advisor.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.3/services/stack_advisor.py
@@ -238,14 +238,27 @@ class HDP23StackAdvisor(HDP22StackAdvisor):
     super(HDP23StackAdvisor, self).recommendHDFSConfigurations(configurations, 
clusterData, services, hosts)
 
     putHdfsSiteProperty = self.putProperty(configurations, "hdfs-site", 
services)
-    servicesList = [service["StackServices"]["service_name"] for service in 
services["services"]]
+    putHdfsSitePropertyAttribute = self.putPropertyAttribute(configurations, 
"hdfs-site")
+
     if ('ranger-hdfs-plugin-properties' in services['configurations']) and 
('ranger-hdfs-plugin-enabled' in 
services['configurations']['ranger-hdfs-plugin-properties']['properties']):
-      rangerPluginEnabled = 
services['configurations']['ranger-hdfs-plugin-properties']['properties']['ranger-hdfs-plugin-enabled']
-      if ("RANGER" in servicesList) and (rangerPluginEnabled.lower() == 
'Yes'.lower()):
+      rangerPluginEnabled = ''
+      if 'ranger-hdfs-plugin-properties' in configurations and 
'ranger-hdfs-plugin-enabled' in  
configurations['ranger-hdfs-plugin-properties']['properties']:
+        rangerPluginEnabled = 
configurations['ranger-hdfs-plugin-properties']['properties']['ranger-hdfs-plugin-enabled']
+      elif 'ranger-hdfs-plugin-properties' in services['configurations'] and 
'ranger-hdfs-plugin-enabled' in 
services['configurations']['ranger-hdfs-plugin-properties']['properties']:
+        rangerPluginEnabled = 
services['configurations']['ranger-hdfs-plugin-properties']['properties']['ranger-hdfs-plugin-enabled']
+
+      if rangerPluginEnabled and (rangerPluginEnabled.lower() == 
'Yes'.lower()):
         
putHdfsSiteProperty("dfs.namenode.inode.attributes.provider.class",'org.apache.ranger.authorization.hadoop.RangerHdfsAuthorizer')
+      else:
+        
putHdfsSitePropertyAttribute('dfs.namenode.inode.attributes.provider.class', 
'delete', 'true')
+    else:
+      
putHdfsSitePropertyAttribute('dfs.namenode.inode.attributes.provider.class', 
'delete', 'true')
 
   def recommendKAFKAConfigurations(self, configurations, clusterData, 
services, hosts):
+    core_site = services["configurations"]["core-site"]["properties"]
     putKafkaBrokerProperty = self.putProperty(configurations, "kafka-broker", 
services)
+    putKafkaLog4jProperty = self.putProperty(configurations, "kafka-log4j", 
services)
+    putKafkaBrokerAttributes = self.putPropertyAttribute(configurations, 
"kafka-broker")
 
     if "ranger-env" in services["configurations"] and 
"ranger-kafka-plugin-properties" in services["configurations"] and \
         "ranger-kafka-plugin-enabled" in 
services["configurations"]["ranger-env"]["properties"]:
@@ -253,11 +266,68 @@ class HDP23StackAdvisor(HDP22StackAdvisor):
       rangerEnvKafkaPluginProperty = 
services["configurations"]["ranger-env"]["properties"]["ranger-kafka-plugin-enabled"]
       putKafkaRangerPluginProperty("ranger-kafka-plugin-enabled", 
rangerEnvKafkaPluginProperty)
 
-    servicesList = [service["StackServices"]["service_name"] for service in 
services["services"]]
     if 'ranger-kafka-plugin-properties' in services['configurations'] and 
('ranger-kafka-plugin-enabled' in 
services['configurations']['ranger-kafka-plugin-properties']['properties']):
-      rangerPluginEnabled = 
services['configurations']['ranger-kafka-plugin-properties']['properties']['ranger-kafka-plugin-enabled']
-      if ("RANGER" in servicesList) and (rangerPluginEnabled.lower() == 
"Yes".lower()):
+      kafkaLog4jRangerLines = [{
+        "name": "log4j.appender.rangerAppender",
+        "value": "org.apache.log4j.DailyRollingFileAppender"
+        },
+        {
+          "name": "log4j.appender.rangerAppender.DatePattern",
+          "value": "'.'yyyy-MM-dd-HH"
+        },
+        {
+          "name": "log4j.appender.rangerAppender.File",
+          "value": "${kafka.logs.dir}/ranger_kafka.log"
+        },
+        {
+          "name": "log4j.appender.rangerAppender.layout",
+          "value": "org.apache.log4j.PatternLayout"
+        },
+        {
+          "name": "log4j.appender.rangerAppender.layout.ConversionPattern",
+          "value": "%d{ISO8601} %p [%t] %C{6} (%F:%L) - %m%n"
+        },
+        {
+          "name": "log4j.logger.org.apache.ranger",
+          "value": "INFO, rangerAppender"
+        }]
+
+      rangerPluginEnabled=''
+      if 'ranger-kafka-plugin-properties' in configurations and 
'ranger-kafka-plugin-enabled' in  
configurations['ranger-kafka-plugin-properties']['properties']:
+        rangerPluginEnabled = 
configurations['ranger-kafka-plugin-properties']['properties']['ranger-kafka-plugin-enabled']
+      elif 'ranger-kafka-plugin-properties' in services['configurations'] and 
'ranger-kafka-plugin-enabled' in 
services['configurations']['ranger-kafka-plugin-properties']['properties']:
+        rangerPluginEnabled = 
services['configurations']['ranger-kafka-plugin-properties']['properties']['ranger-kafka-plugin-enabled']
+
+      if  rangerPluginEnabled and rangerPluginEnabled.lower() == "Yes".lower():
+        # recommend authorizer.class.name
         putKafkaBrokerProperty("authorizer.class.name", 
'org.apache.ranger.authorization.kafka.authorizer.RangerKafkaAuthorizer')
+        # change kafka-log4j when ranger plugin is installed
+
+        if 'kafka-log4j' in services['configurations'] and 'content' in 
services['configurations']['kafka-log4j']['properties']:
+          kafkaLog4jContent = 
services['configurations']['kafka-log4j']['properties']['content']
+          for item in range(len(kafkaLog4jRangerLines)):
+            if kafkaLog4jRangerLines[item]["name"] not in kafkaLog4jContent:
+              kafkaLog4jContent+= '\n' + kafkaLog4jRangerLines[item]["name"] + 
'=' + kafkaLog4jRangerLines[item]["value"]
+          putKafkaLog4jProperty("content",kafkaLog4jContent)
+
+
+      else:
+      # Cluster is kerberized
+        if 'hadoop.security.authentication' in core_site and 
core_site['hadoop.security.authentication'] == 'kerberos' and \
+          
services['configurations']['kafka-broker']['properties']['authorizer.class.name']
 == 'org.apache.ranger.authorization.kafka.authorizer.RangerKafkaAuthorizer':
+          putKafkaBrokerProperty("authorizer.class.name", 
'kafka.security.auth.SimpleAclAuthorizer')
+        else:
+          putKafkaBrokerAttributes('authorizer.class.name', 'delete', 'true')
+      # Cluster with Ranger is not kerberized
+    elif ('hadoop.security.authentication' not in core_site or 
core_site['hadoop.security.authentication'] != 'kerberos'):
+      putKafkaBrokerAttributes('authorizer.class.name', 'delete', 'true')
+
+
+
+    # Cluster without Ranger is not kerberized
+    elif ('hadoop.security.authentication' not in core_site or 
core_site['hadoop.security.authentication'] != 'kerberos'):
+      putKafkaBrokerAttributes('authorizer.class.name', 'delete', 'true')
+
 
   def recommendRangerConfigurations(self, configurations, clusterData, 
services, hosts):
     super(HDP23StackAdvisor, 
self).recommendRangerConfigurations(configurations, clusterData, services, 
hosts)
@@ -370,11 +440,24 @@ class HDP23StackAdvisor(HDP22StackAdvisor):
 
   def recommendYARNConfigurations(self, configurations, clusterData, services, 
hosts):
     super(HDP23StackAdvisor, self).recommendYARNConfigurations(configurations, 
clusterData, services, hosts)
+    putYarnSiteProperty = self.putProperty(configurations, "yarn-site", 
services)
+    putYarnSitePropertyAttributes = self.putPropertyAttribute(configurations, 
"yarn-site")
     if "ranger-env" in services["configurations"] and 
"ranger-yarn-plugin-properties" in services["configurations"] and \
         "ranger-yarn-plugin-enabled" in 
services["configurations"]["ranger-env"]["properties"]:
       putYarnRangerPluginProperty = self.putProperty(configurations, 
"ranger-yarn-plugin-properties", services)
       rangerEnvYarnPluginProperty = 
services["configurations"]["ranger-env"]["properties"]["ranger-yarn-plugin-enabled"]
       putYarnRangerPluginProperty("ranger-yarn-plugin-enabled", 
rangerEnvYarnPluginProperty)
+    rangerPluginEnabled = ''
+    if 'ranger-yarn-plugin-properties' in configurations and 
'ranger-yarn-plugin-enabled' in  
configurations['ranger-yarn-plugin-properties']['properties']:
+      rangerPluginEnabled = 
configurations['ranger-yarn-plugin-properties']['properties']['ranger-yarn-plugin-enabled']
+    elif 'ranger-yarn-plugin-properties' in services['configurations'] and 
'ranger-yarn-plugin-enabled' in 
services['configurations']['ranger-yarn-plugin-properties']['properties']:
+      rangerPluginEnabled = 
services['configurations']['ranger-yarn-plugin-properties']['properties']['ranger-yarn-plugin-enabled']
+
+    if rangerPluginEnabled and (rangerPluginEnabled.lower() == 'Yes'.lower()):
+      putYarnSiteProperty('yarn.acl.enable','true')
+      
putYarnSiteProperty('yarn.authorization-provider','org.apache.ranger.authorization.yarn.authorizer.RangerYarnAuthorizer')
+    else:
+      putYarnSitePropertyAttributes('yarn.authorization-provider', 'delete', 
'true')
 
   def getServiceConfigurationValidators(self):
       parentValidators = super(HDP23StackAdvisor, 
self).getServiceConfigurationValidators()

http://git-wip-us.apache.org/repos/asf/ambari/blob/a64b6102/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 2ce1cee..7abdcd0 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
@@ -2271,6 +2271,9 @@ class TestHDP22StackAdvisor(TestCase):
     services = {
       "services" : [
       ],
+      "Versions": {
+        "stack_version": "2.2"
+      },
       "configurations": {
         "hbase-env": {
           "properties": {
@@ -2285,7 +2288,13 @@ class TestHDP22StackAdvisor(TestCase):
             "hbase.bucketcache.ioengine": "",
             "hbase.bucketcache.size": "",
             "hbase.bucketcache.percentage.in.combinedcache": "",
-            "hbase.coprocessor.regionserver.classes": ""
+            "hbase.coprocessor.regionserver.classes": "",
+            "hbase.coprocessor.region.classes": ""
+          }
+        },
+        "ranger-hbase-plugin-properties": {
+          "properties": {
+            "ranger-hbase-plugin-enabled" : "No"
           }
         }
       }
@@ -2331,7 +2340,7 @@ class TestHDP22StackAdvisor(TestCase):
 
     # Test when phoenix_sql_enabled = true
     self.stackAdvisor.recommendHBASEConfigurations(configurations, 
clusterData, services, None)
-    self.assertEquals(configurations, expected)
+    self.assertEquals(configurations, expected, "Test when Phoenix sql is 
enabled")
 
     # Test when phoenix_sql_enabled = false
     
services['configurations']['hbase-env']['properties']['phoenix_sql_enabled'] = 
'false'
@@ -2340,7 +2349,7 @@ class TestHDP22StackAdvisor(TestCase):
     
expected['hbase-site']['property_attributes']['hbase.coprocessor.regionserver.classes']
 = {'delete': 'true'}
     
expected['hbase-site']['property_attributes']['phoenix.functions.allowUserDefinedFunctions']
 = {'delete': 'true'}
     self.stackAdvisor.recommendHBASEConfigurations(configurations, 
clusterData, services, None)
-    self.assertEquals(configurations, expected)
+    self.assertEquals(configurations, expected, "Test when Phoenix sql is 
disabled")
 
     # Test hbase_master_heapsize maximum
     hosts['items'][0]['Hosts']['host_name'] = 'host1'
@@ -2375,27 +2384,53 @@ class TestHDP22StackAdvisor(TestCase):
     
expected['hbase-site']['property_attributes']['phoenix.functions.allowUserDefinedFunctions']
 = {'delete': 'true'}
     expected['hbase-env']['property_attributes']['hbase_master_heapsize'] = 
{'maximum': '49152'}
     self.stackAdvisor.recommendHBASEConfigurations(configurations, 
clusterData, services, hosts)
-    self.assertEquals(configurations, expected)
+    self.assertEquals(configurations, expected, "Test with Phoenix disabled")
 
     # Test when hbase.security.authentication = kerberos
     
services['configurations']['hbase-site']['properties']['hbase.security.authentication']
 = 'kerberos'
     expected['hbase-site']['properties']['hbase.coprocessor.region.classes'] = 
'org.apache.hadoop.hbase.security.token.TokenProvider,org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint'
     self.stackAdvisor.recommendHBASEConfigurations(configurations, 
clusterData, services, None)
-    self.assertEquals(configurations, expected)
+    self.assertEquals(configurations, expected, "Test with Kerberos enabled")
 
     # Test when hbase.security.authentication = simple
     
services['configurations']['hbase-site']['properties']['hbase.security.authentication']
 = 'simple'
     expected['hbase-site']['properties']['hbase.coprocessor.region.classes'] = 
'org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint'
     self.stackAdvisor.recommendHBASEConfigurations(configurations, 
clusterData, services, None)
-    self.assertEquals(configurations, expected)
+    self.assertEquals(configurations, expected, "Test with Kerberos disabled")
+
+    # Test when Ranger plugin HBase is enabled in non-kerberos environment
+    
configurations['hbase-site']['properties'].pop('hbase.coprocessor.region.classes',
 None)
+    
configurations['hbase-site']['properties'].pop('hbase.coprocessor.master.classes',
 None)
+    
configurations['hbase-site']['properties'].pop('hbase.coprocessor.regionserver.classes',
 None)
+    
services['configurations']['ranger-hbase-plugin-properties']['properties']['ranger-hbase-plugin-enabled']
 = 'Yes'
+    
services['configurations']['hbase-site']['properties']['hbase.security.authentication']
 = 'simple'
+    
services['configurations']['hbase-site']['properties']['hbase.security.authorization']
 = 'false'
+    
services['configurations']['hbase-site']['properties']['hbase.coprocessor.region.classes']
 = ''
+    
services['configurations']['hbase-site']['properties']['hbase.coprocessor.master.classes']
 = ''
+
+    expected['hbase-site']['properties']['hbase.security.authorization'] = 
"true"
+    expected['hbase-site']['properties']['hbase.coprocessor.region.classes'] = 
'org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint,com.xasecure.authorization.hbase.XaSecureAuthorizationCoprocessor'
+    expected['hbase-site']['properties']['hbase.coprocessor.master.classes'] = 
'com.xasecure.authorization.hbase.XaSecureAuthorizationCoprocessor'
+    
expected['hbase-site']['properties']['hbase.coprocessor.regionserver.classes'] 
= 'org.apache.hadoop.hbase.security.access.AccessController'
+    self.stackAdvisor.recommendHBASEConfigurations(configurations, 
clusterData, services, None)
+    self.assertEquals(configurations, expected)     #"Test when Ranger plugin 
HBase is enabled in non-kerberos environment"
 
     # Test when hbase.security.authentication = kerberos AND class already 
there
     
configurations['hbase-site']['properties'].pop('hbase.coprocessor.region.classes',
 None)
+    
configurations['hbase-site']['properties'].pop('hbase.coprocessor.master.classes',
 None)
+    
configurations['hbase-site']['properties'].pop('hbase.coprocessor.regionserver.classes',
 None)
+    
configurations['hbase-site']['properties'].pop('hbase.security.authorization', 
None)
+    
services['configurations']['ranger-hbase-plugin-properties']['properties']['ranger-hbase-plugin-enabled']
 = 'No'
+    
services['configurations']['hbase-site']['properties']['hbase.security.authorization']
 = 'false'
     
services['configurations']['hbase-site']['properties']['hbase.security.authentication']
 = 'kerberos'
+    
services['configurations']['hbase-site']['properties']['hbase.coprocessor.master.classes']
 = ''
     
services['configurations']['hbase-site']['properties']['hbase.coprocessor.region.classes']
 = 'a.b.c.d'
     expected['hbase-site']['properties']['hbase.coprocessor.region.classes'] = 
'a.b.c.d,org.apache.hadoop.hbase.security.token.TokenProvider,org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint'
+    expected['hbase-site']['properties']['hbase.coprocessor.master.classes'] = 
''
+    del expected['hbase-site']['properties']['hbase.security.authorization']
+    del 
expected['hbase-site']['properties']['hbase.coprocessor.regionserver.classes']
     self.stackAdvisor.recommendHBASEConfigurations(configurations, 
clusterData, services, None)
-    self.assertEquals(configurations, expected)
+    self.assertEquals(configurations, expected, "Test with Kerberos enabled 
and hbase.coprocessor.region.classes predefined")
 
     # Test when hbase.security.authentication = kerberos AND authorization = 
true
     
configurations['hbase-site']['properties'].pop('hbase.coprocessor.region.classes',
 None)
@@ -2406,7 +2441,20 @@ class TestHDP22StackAdvisor(TestCase):
     expected['hbase-site']['properties']['hbase.coprocessor.region.classes'] = 
'org.apache.hadoop.hbase.security.access.AccessController,org.apache.hadoop.hbase.security.token.TokenProvider,org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint'
     
expected['hbase-site']['properties']['hbase.coprocessor.regionserver.classes'] 
= "org.apache.hadoop.hbase.security.access.AccessController"
     self.stackAdvisor.recommendHBASEConfigurations(configurations, 
clusterData, services, None)
-    self.assertEquals(configurations, expected)
+    self.assertEquals(configurations, expected, "Test with Kerberos enabled 
and authorization is true")
+
+    # Test when Ranger plugin HBase is enabled in kerberos environment
+    
configurations['hbase-site']['properties'].pop('hbase.coprocessor.region.classes',
 None)
+    
services['configurations']['hbase-site']['properties']['hbase.coprocessor.region.classes']
 = ''
+    
services['configurations']['hbase-site']['properties']['hbase.coprocessor.master.classes']
 = ''
+    
services['configurations']['hbase-site']['properties']['hbase.security.authentication']
 = 'kerberos'
+    
services['configurations']['hbase-site']['properties']['hbase.security.authorization']
 = 'false'
+    
services['configurations']['ranger-hbase-plugin-properties']['properties']['ranger-hbase-plugin-enabled']
 = 'Yes'
+    expected['hbase-site']['properties']['hbase.security.authorization']  = 
'true'
+    expected['hbase-site']['properties']['hbase.coprocessor.master.classes'] = 
'com.xasecure.authorization.hbase.XaSecureAuthorizationCoprocessor'
+    expected['hbase-site']['properties']['hbase.coprocessor.region.classes'] = 
'org.apache.hadoop.hbase.security.token.TokenProvider,org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint,com.xasecure.authorization.hbase.XaSecureAuthorizationCoprocessor'
+    self.stackAdvisor.recommendHBASEConfigurations(configurations, 
clusterData, services, None)
+    self.assertEquals(configurations, expected, "Test with Kerberos enabled 
and HBase ranger plugin enabled")
 
     # Test - default recommendations should have certain configs deleted. HAS 
TO BE LAST TEST.
     services["configurations"] = {"hbase-site": {"properties": 
{"phoenix.functions.allowUserDefinedFunctions": '', 
"hbase.rpc.controllerfactory.class": ''}}}
@@ -2417,6 +2465,70 @@ class TestHDP22StackAdvisor(TestCase):
     
self.assertEquals(configurations['hbase-site']['properties']['hbase.regionserver.wal.codec'],
 "org.apache.hadoop.hbase.regionserver.wal.WALCellCodec")
 
 
+  def test_recommendStormConfigurations(self):
+    configurations = {}
+    clusterData = {}
+    services = {
+      "services":
+        [
+          {
+            "StackServices": {
+              "service_name" : "STORM",
+              "service_version" : "2.6.0.2.2"
+            }
+          }
+        ],
+      "Versions": {
+        "stack_version": "2.2"
+      },
+      "configurations": {
+        "core-site": {
+          "properties": { },
+        },
+        "storm-site": {
+          "properties": {
+            "nimbus.authorizer" : 
"backtype.storm.security.auth.authorizer.SimpleACLAuthorizer"
+          },
+          "property_attributes": {}
+        },
+        "ranger-storm-plugin-properties": {
+          "properties": {
+            "ranger-storm-plugin-enabled": "No"
+          }
+        }
+      }
+    }
+
+    # 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")
+
+    # Test nimbus.authorizer with Ranger Storm plugin enabled in non-kerberos 
environment
+    configurations['storm-site']['properties'] = {}
+    configurations['storm-site']['property_attributes'] = {}
+    
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")
+
+    # Test nimbus.authorizer with Ranger Storm plugin being enabled in 
kerberos environment
+    configurations['storm-site']['properties'] = {}
+    configurations['storm-site']['property_attributes'] = {}
+    
services['configurations']['storm-site']['properties']['nimbus.authorizer'] = ''
+    
services['configurations']['ranger-storm-plugin-properties']['properties']['ranger-storm-plugin-enabled']
 = 'Yes'
+    
services['configurations']['core-site']['properties']['hadoop.security.authentication']
 = 'kerberos'
+    self.stackAdvisor.recommendStormConfigurations(configurations, 
clusterData, services, None)
+    
self.assertEquals(configurations['storm-site']['properties']['nimbus.authorizer'],
 'com.xasecure.authorization.storm.authorizer.XaSecureStormAuthorizer', "Test 
nimbus.authorizer with Ranger Storm plugin enabled in kerberos environment")
+
+    # Test nimbus.authorizer with Ranger Storm plugin being disabled in 
kerberos environment
+    configurations['storm-site']['properties'] = {}
+    configurations['storm-site']['property_attributes'] = {}
+    
services['configurations']['ranger-storm-plugin-properties']['properties']['ranger-storm-plugin-enabled']
 = 'No'
+    
services['configurations']['core-site']['properties']['hadoop.security.authentication']
 = 'kerberos'
+    
services['configurations']['storm-site']['properties']['nimbus.authorizer'] = 
'com.xasecure.authorization.storm.authorizer.XaSecureStormAuthorizer'
+    self.stackAdvisor.recommendStormConfigurations(configurations, 
clusterData, services, None)
+    
self.assertEquals(configurations['storm-site']['properties']['nimbus.authorizer'],
 'backtype.storm.security.auth.authorizer.SimpleACLAuthorizer', "Test 
nimbus.authorizer with Ranger Storm plugin being disabled in kerberos 
environment")
+
+
   def test_recommendHDFSConfigurations(self):
     configurations = {
       'ranger-hdfs-plugin-properties':{

http://git-wip-us.apache.org/repos/asf/ambari/blob/a64b6102/ambari-server/src/test/python/stacks/2.3/common/test_stack_advisor.py
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/python/stacks/2.3/common/test_stack_advisor.py 
b/ambari-server/src/test/python/stacks/2.3/common/test_stack_advisor.py
index ff6c93e..33ad293 100644
--- a/ambari-server/src/test/python/stacks/2.3/common/test_stack_advisor.py
+++ b/ambari-server/src/test/python/stacks/2.3/common/test_stack_advisor.py
@@ -71,6 +71,207 @@ class TestHDP23StackAdvisor(TestCase):
     open_mock.return_value = MagicFile()
     return self.get_system_min_uid_real()
 
+  def test_recommendHDFSConfigurations(self):
+    configurations = {}
+    clusterData = {
+      "totalAvailableRam": 2048,
+      "hBaseInstalled": True,
+      "hbaseRam": 112,
+      "reservedRam": 128
+    }
+    services = {
+      "services":
+        [
+          {
+            "StackServices": {
+              "service_name" : "HDFS",
+              "service_version" : "2.6.0.2.2"
+            }
+          }
+        ],
+      "Versions": {
+        "stack_version": "2.3"
+      },
+      "configurations": {
+        "hdfs-site": {
+          "properties": {
+            "dfs.namenode.inode.attributes.provider.class": 
"org.apache.ranger.authorization.hadoop.RangerHdfsAuthorizer"
+          }
+        },
+        "ranger-hdfs-plugin-properties": {
+          "properties": {
+            "ranger-hdfs-plugin-enabled": "No"
+          }
+        }
+      }
+    }
+
+    # Test with Ranger HDFS plugin disabled
+    self.stackAdvisor.recommendHDFSConfigurations(configurations, clusterData, 
services, None)
+    
self.assertEquals(configurations['hdfs-site']['property_attributes']['dfs.namenode.inode.attributes.provider.class'],
 {'delete': 'true'}, "Test with Ranger HDFS plugin is disabled")
+
+    # Test with Ranger HDFS plugin is enabled
+    configurations['hdfs-site']['properties'] = {}
+    configurations['hdfs-site']['property_attributes'] = {}
+    
services['configurations']['ranger-hdfs-plugin-properties']['properties']['ranger-hdfs-plugin-enabled']
 = 'Yes'
+    self.stackAdvisor.recommendHDFSConfigurations(configurations, clusterData, 
services, None)
+    
self.assertEquals(configurations['hdfs-site']['properties']['dfs.namenode.inode.attributes.provider.class'],
 'org.apache.ranger.authorization.hadoop.RangerHdfsAuthorizer', "Test with 
Ranger HDFS plugin is enabled")
+
+  def test_recommendYARNConfigurations(self):
+    configurations = {}
+    servicesList = ["YARN"]
+    components = []
+    hosts = {
+      "items" : [
+        {
+          "Hosts" : {
+            "cpu_count" : 6,
+            "total_mem" : 50331648,
+            "disk_info" : [
+              {"mountpoint" : "/"},
+              {"mountpoint" : "/dev/shm"},
+              {"mountpoint" : "/vagrant"},
+              {"mountpoint" : "/"},
+              {"mountpoint" : "/dev/shm"},
+              {"mountpoint" : "/vagrant"}
+            ],
+            "public_host_name" : "c6401.ambari.apache.org",
+            "host_name" : "c6401.ambari.apache.org"
+          }
+        }
+      ]
+    }
+    services = {
+      "services" : [ {
+        "StackServices":{
+          "service_name": "YARN",
+        },
+        "Versions": {
+          "stack_version": "2.3"
+        },
+        "components": [
+          {
+            "StackServiceComponents": {
+              "component_name": "NODEMANAGER",
+              "hostnames": ["c6401.ambari.apache.org"]
+            }
+          }
+        ]
+      }
+      ],
+      "configurations": {
+        "yarn-site": {
+          "properties": {
+            "yarn.authorization-provider": 
"org.apache.ranger.authorization.yarn.authorizer.RangerYarnAuthorizer"
+          }
+        },
+        "ranger-yarn-plugin-properties": {
+          "properties": {
+            "ranger-yarn-plugin-enabled": "No"
+          }
+        }
+      }
+    }
+
+    clusterData = 
self.stackAdvisor.getConfigurationClusterSummary(servicesList, hosts, 
components, None)
+    # Test with Ranger YARN plugin disabled
+    self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, 
services, None)
+    
self.assertEquals(configurations['yarn-site']['property_attributes']['yarn.authorization-provider'],
 {'delete': 'true'}, "Test with Ranger HDFS plugin is disabled")
+
+    # Test with Ranger YARN plugin is enabled
+    configurations['yarn-site']['properties'] = {}
+    configurations['yarn-site']['property_attributes'] = {}
+    
services['configurations']['ranger-yarn-plugin-properties']['properties']['ranger-yarn-plugin-enabled']
 = 'Yes'
+    self.stackAdvisor.recommendYARNConfigurations(configurations, clusterData, 
services, None)
+    
self.assertEquals(configurations['yarn-site']['properties']['yarn.authorization-provider'],
 'org.apache.ranger.authorization.yarn.authorizer.RangerYarnAuthorizer', "Test 
with Ranger YARN plugin enabled")
+
+
+  def test_recommendKAFKAConfigurations(self):
+    configurations = {}
+    clusterData = {
+      "totalAvailableRam": 2048,
+      "hBaseInstalled": True,
+      "hbaseRam": 112,
+      "reservedRam": 128
+    }
+    services = {
+      "services":
+        [
+          {
+            "StackServices": {
+              "service_name" : "KAFKA",
+              "service_version" : "2.6.0.2.2"
+            }
+          }
+        ],
+      "Versions": {
+        "stack_version": "2.3"
+      },
+      "configurations": {
+        "core-site": {
+          "properties": { },
+        },
+        "kafka-broker": {
+          "properties": {
+            "authorizer.class.name" : "kafka.security.auth.SimpleAclAuthorizer"
+          },
+          "property_attributes": {}
+        },
+        "ranger-kafka-plugin-properties": {
+          "properties": {
+            "ranger-kafka-plugin-enabled": "No"
+          }
+        },
+        "kafka-log4j": {
+          "properties": {
+            "content": "kafka.logs.dir=logs"
+          }
+        }
+      }
+    }
+
+    # Test authorizer.class.name with Ranger Kafka plugin disabled in 
non-kerberos environment
+    self.stackAdvisor.recommendKAFKAConfigurations(configurations, 
clusterData, services, None)
+    
self.assertEquals(configurations['kafka-broker']['property_attributes']['authorizer.class.name'],
 {'delete': 'true'}, "Test authorizer.class.name with Ranger Kafka plugin is 
disabled in non-kerberos environment")
+
+    # Test authorizer.class.name with Ranger Kafka plugin disabled in kerberos 
environment
+    configurations['kafka-broker']['properties'] = {}
+    configurations['kafka-broker']['property_attributes'] = {}
+    
services['configurations']['core-site']['properties']['hadoop.security.authentication']
 = 'kerberos'
+    
services['configurations']['kafka-broker']['properties']['authorizer.class.name']
 = 'org.apache.ranger.authorization.kafka.authorizer.RangerKafkaAuthorizer'
+    self.stackAdvisor.recommendKAFKAConfigurations(configurations, 
clusterData, services, None)
+    
self.assertEquals(configurations['kafka-broker']['properties']['authorizer.class.name'],
 'kafka.security.auth.SimpleAclAuthorizer' , "Test authorizer.class.name with 
Ranger Kafka plugin disabled in kerberos environment")
+
+    # Test authorizer.class.name with Ranger Kafka plugin enabled in 
non-kerberos environment
+    configurations['kafka-broker']['properties'] = {}
+    configurations['kafka-broker']['property_attributes'] = {}
+    del 
services['configurations']['core-site']['properties']['hadoop.security.authentication']
+    
services['configurations']['kafka-broker']['properties']['authorizer.class.name']
 = 'kafka.security.auth.SimpleAclAuthorizer'
+    
services['configurations']['ranger-kafka-plugin-properties']['properties']['ranger-kafka-plugin-enabled']
 = 'Yes'
+    self.stackAdvisor.recommendKAFKAConfigurations(configurations, 
clusterData, services, None)
+    
self.assertEquals(configurations['kafka-broker']['properties']['authorizer.class.name'],
 'org.apache.ranger.authorization.kafka.authorizer.RangerKafkaAuthorizer', 
"Test authorizer.class.name with Ranger Kafka plugin enabled in kerberos 
environment")
+
+    # Test authorizer.class.name with Ranger Kafka plugin enabled in kerberos 
environment
+    configurations['kafka-broker']['properties'] = {}
+    configurations['kafka-broker']['property_attributes'] = {}
+    
services['configurations']['core-site']['properties']['hadoop.security.authentication']
 = 'kerberos'
+    
services['configurations']['kafka-broker']['properties']['authorizer.class.name']
 = 'kafka.security.auth.SimpleAclAuthorizer'
+    
services['configurations']['ranger-kafka-plugin-properties']['properties']['ranger-kafka-plugin-enabled']
 = 'Yes'
+    self.stackAdvisor.recommendKAFKAConfigurations(configurations, 
clusterData, services, None)
+    
self.assertEquals(configurations['kafka-broker']['properties']['authorizer.class.name'],
 'org.apache.ranger.authorization.kafka.authorizer.RangerKafkaAuthorizer', 
"Test authorizer.class.name with Ranger Kafka plugin enabled in kerberos 
environment")
+
+    # Test kafka-log4j content when Ranger plugin for Kafka is enabled
+
+    self.stackAdvisor.recommendKAFKAConfigurations(configurations, 
clusterData, services, None)
+    log4jContent = 
services['configurations']['kafka-log4j']['properties']['content']
+    newRangerLog4content = 
"\nlog4j.appender.rangerAppender=org.apache.log4j.DailyRollingFileAppender\nlog4j.appender.rangerAppender.DatePattern='.'yyyy-MM-dd-HH\n"
 \
+                     
"log4j.appender.rangerAppender.File=${kafka.logs.dir}/ranger_kafka.log\nlog4j.appender.rangerAppender.layout"
 \
+                     
"=org.apache.log4j.PatternLayout\nlog4j.appender.rangerAppender.layout.ConversionPattern=%d{ISO8601}
 %p [%t] %C{6} (%F:%L) - %m%n\n" \
+                     "log4j.logger.org.apache.ranger=INFO, rangerAppender"
+    expectedLog4jContent = log4jContent + newRangerLog4content
+    self.assertEquals(configurations['kafka-log4j']['properties']['content'], 
expectedLog4jContent, "Test kafka-log4j content when Ranger plugin for Kafka is 
enabled")
+
+
   def test_recommendHBASEConfigurations(self):
     configurations = {}
     clusterData = {
@@ -201,6 +402,9 @@ class TestHDP23StackAdvisor(TestCase):
             },
             ],
           }],
+      "Versions": {
+        "stack_version": "2.3"
+      },
       "configurations": {
         "yarn-site": {
           "properties": {

http://git-wip-us.apache.org/repos/asf/ambari/blob/a64b6102/ambari-web/app/utils/configs/modification_handlers/hbase.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/configs/modification_handlers/hbase.js 
b/ambari-web/app/utils/configs/modification_handlers/hbase.js
deleted file mode 100644
index bcb87d2..0000000
--- a/ambari-web/app/utils/configs/modification_handlers/hbase.js
+++ /dev/null
@@ -1,107 +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');
-require('utils/configs/modification_handlers/modification_handler');
-
-module.exports = App.ServiceConfigModificationHandler.create({
-  serviceId : 'HBASE',
-
-  updateConfigClasses : function(configClasses, authEnabled, 
affectedProperties, addOldValue) {
-    if (configClasses != null) {
-      var xaAuthCoProcessorClass = App.get('isHadoop23Stack') ? 
"org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor"
-        : "com.xasecure.authorization.hbase.XaSecureAuthorizationCoprocessor";
-      var nonXAClass = 
'org.apache.hadoop.hbase.security.access.AccessController';
-      var currentClassesList = configClasses.get('value').trim().length > 0 ? 
configClasses.get('value').trim().split(',') : [];
-      var newClassesList = null, xaClassIndex, nonXaClassIndex;
-
-      if (authEnabled) {
-        var nonXaClassIndex = currentClassesList.indexOf(nonXAClass);
-        if (nonXaClassIndex > -1) {
-          currentClassesList.splice(nonXaClassIndex, 1);
-          newClassesList = currentClassesList;
-        }
-        var xaClassIndex = currentClassesList.indexOf(xaAuthCoProcessorClass);
-        if (xaClassIndex < 0) {
-          currentClassesList.push(xaAuthCoProcessorClass);
-          newClassesList = currentClassesList;
-        }
-      } else {
-        var xaClassIndex = currentClassesList.indexOf(xaAuthCoProcessorClass);
-        if (xaClassIndex > -1) {
-          currentClassesList.splice(xaClassIndex, 1);
-          newClassesList = currentClassesList;
-        }
-        if (addOldValue) {
-          var nonXaClassIndex = currentClassesList.indexOf(nonXAClass);
-          if (nonXaClassIndex < 0) {
-            currentClassesList.push(nonXAClass);
-            newClassesList = currentClassesList;
-          }
-        }
-      }
-
-      if (newClassesList != null) {
-        affectedProperties.push({
-          serviceName : "HBASE",
-          sourceServiceName : "HBASE",
-          propertyName : configClasses.get('name'),
-          propertyDisplayName : configClasses.get('name'),
-          newValue : newClassesList.join(','),
-          curValue : configClasses.get('value'),
-          changedPropertyName : 'ranger-hbase-plugin-enabled',
-          removed : false,
-          filename : 'hbase-site.xml'
-        });
-      }
-    }
-  },
-
-  getDependentConfigChanges : function(changedConfig, selectedServices, 
allConfigs, securityEnabled) {
-    var affectedProperties = [];
-    var newValue = changedConfig.get("value");
-    var hbaseAuthEnabledPropertyName = "ranger-hbase-plugin-enabled";
-    var affectedPropertyName = changedConfig.get("name");
-    if (affectedPropertyName == hbaseAuthEnabledPropertyName) {
-      var configAuthEnabled = this.getConfig(allConfigs, 
'hbase.security.authorization', 'hbase-site.xml', 'HBASE');
-      var configMasterClasses = this.getConfig(allConfigs, 
'hbase.coprocessor.master.classes', 'hbase-site.xml', 'HBASE');
-      var configRegionClasses = this.getConfig(allConfigs, 
'hbase.coprocessor.region.classes', 'hbase-site.xml', 'HBASE');
-
-      var authEnabled = newValue == "Yes";
-      var newAuthEnabledValue = authEnabled ? "true" : "false";
-      var newRpcProtectionValue = authEnabled ? "privacy" : "authentication";
-
-      // Add HBase-Ranger configs
-      this.updateConfigClasses(configMasterClasses, authEnabled, 
affectedProperties, configAuthEnabled.get('value') == 'true');
-      this.updateConfigClasses(configRegionClasses, authEnabled, 
affectedProperties, configAuthEnabled.get('value') == 'true');
-      if (authEnabled && newAuthEnabledValue !== 
configAuthEnabled.get('value')) {
-        affectedProperties.push({
-          serviceName : "HBASE",
-          sourceServiceName : "HBASE",
-          propertyName : 'hbase.security.authorization',
-          propertyDisplayName : 'hbase.security.authorization',
-          newValue : newAuthEnabledValue,
-          curValue : configAuthEnabled.get('value'),
-          changedPropertyName : hbaseAuthEnabledPropertyName,
-          removed : false,
-          filename : 'hbase-site.xml'
-        });
-      }
-    }
-    return affectedProperties;
-  }
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/a64b6102/ambari-web/app/utils/configs/modification_handlers/hdfs.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/configs/modification_handlers/hdfs.js 
b/ambari-web/app/utils/configs/modification_handlers/hdfs.js
deleted file mode 100644
index c77a716..0000000
--- a/ambari-web/app/utils/configs/modification_handlers/hdfs.js
+++ /dev/null
@@ -1,55 +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');
-require('utils/configs/modification_handlers/modification_handler');
-
-module.exports = App.ServiceConfigModificationHandler.create({
-  serviceId : 'HDFS',
-
-  getDependentConfigChanges : function(changedConfig, selectedServices, 
allConfigs, securityEnabled) {
-    var affectedProperties = [];
-    var newValue = changedConfig.get("value");
-    var rangerPluginEnabledName = "ranger-hdfs-plugin-enabled";
-    var affectedPropertyName = changedConfig.get("name");
-    if (App.get('isHadoop23Stack') && affectedPropertyName == 
rangerPluginEnabledName) {
-      var configAttributesProviderClass = this.getConfig(allConfigs, 
'dfs.namenode.inode.attributes.provider.class', 'hdfs-site.xml', 'HDFS');
-      var isAttributesProviderClassSet = typeof configAttributesProviderClass 
!== 'undefined';
-
-      var rangerPluginEnabled = newValue == "Yes";
-      var newDfsPermissionsEnabled = rangerPluginEnabled ? "true" : "false";
-      var newAttributesProviderClass = 
'org.apache.ranger.authorization.hadoop.RangerHdfsAuthorizer';
-
-      if (rangerPluginEnabled && (!isAttributesProviderClassSet || 
newAttributesProviderClass != configAttributesProviderClass.get('value'))) {
-        affectedProperties.push({
-          serviceName : "HDFS",
-          sourceServiceName : "HDFS",
-          propertyName : 'dfs.namenode.inode.attributes.provider.class',
-          propertyDisplayName : 'dfs.namenode.inode.attributes.provider.class',
-          newValue : newAttributesProviderClass,
-          curValue : isAttributesProviderClassSet ? 
configAttributesProviderClass.get('value') : '',
-          changedPropertyName : rangerPluginEnabledName,
-          removed : false,
-          isNewProperty : !isAttributesProviderClassSet,
-          filename : 'hdfs-site.xml',
-          categoryName: 'Custom hdfs-site'
-        });
-      }
-    }
-    return affectedProperties;
-  }
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/a64b6102/ambari-web/app/utils/configs/modification_handlers/kafka.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/configs/modification_handlers/kafka.js 
b/ambari-web/app/utils/configs/modification_handlers/kafka.js
deleted file mode 100644
index ff5168f..0000000
--- a/ambari-web/app/utils/configs/modification_handlers/kafka.js
+++ /dev/null
@@ -1,71 +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');
-require('utils/configs/modification_handlers/modification_handler');
-
-module.exports = App.ServiceConfigModificationHandler.create({
-  serviceId: 'KAFKA',
-
-  getDependentConfigChanges: function (changedConfig, selectedServices, 
allConfigs) {
-    var rangerPluginEnabledName = "ranger-kafka-plugin-enabled";
-    var affectedProperties = [];
-    var affectedPropertyName = changedConfig.get("name");
-    var authorizerClassName, kafkaLog4jContent, newLog4jContentValue;
-    var isEnabling = changedConfig.get('value') === 'Yes';
-
-    if (affectedPropertyName === rangerPluginEnabledName) {
-      authorizerClassName = this.getConfig(allConfigs, 
'authorizer.class.name', 'kafka-broker.xml', 'KAFKA');
-      kafkaLog4jContent = this.getConfig(allConfigs, 'content', 
'kafka-log4j.xml', 'KAFKA');
-      newLog4jContentValue = kafkaLog4jContent.get('value');
-      newLog4jContentValue += 
"\n\nlog4j.appender.rangerAppender=org.apache.log4j.DailyRollingFileAppender\n" 
+
-      "log4j.appender.rangerAppender.DatePattern='.'yyyy-MM-dd-HH\n" +
-      
"log4j.appender.rangerAppender.File=${kafka.logs.dir}/ranger_kafka.log\n" +
-      "log4j.appender.rangerAppender.layout=org.apache.log4j.PatternLayout\n" +
-      "log4j.appender.rangerAppender.layout.ConversionPattern=%d{ISO8601} %p 
[%t] %C{6} (%F:%L) - %m%n\n" +
-      "log4j.logger.org.apache.ranger=INFO, rangerAppender";
-
-      affectedProperties = [
-        {
-          serviceName: "KAFKA",
-          sourceServiceName: "KAFKA",
-          propertyName: 'authorizer.class.name',
-          propertyDisplayName: 'authorizer.class.name',
-          newValue: isEnabling ? 
'org.apache.ranger.authorization.kafka.authorizer.RangerKafkaAuthorizer' :
-              App.StackConfigProperty.find().findProperty('name', 
'authorizer.class.name').get('value'),
-          curValue: authorizerClassName.get('value'),
-          changedPropertyName: rangerPluginEnabledName,
-          removed: false,
-          filename: 'kafka-broker.xml'
-        },
-        {
-          serviceName: "KAFKA",
-          sourceServiceName: "KAFKA",
-          propertyName: 'content',
-          propertyDisplayName: 'content',
-          newValue: isEnabling ? newLog4jContentValue : 
App.StackConfigProperty.find().filterProperty('filename', 
'kafka-log4j.xml').findProperty('name', 'content').get('value'),
-          curValue: kafkaLog4jContent.get('value'),
-          changedPropertyName: rangerPluginEnabledName,
-          removed: false,
-          filename: 'kafka-log4j.xml'
-        }
-      ];
-    }
-
-    return affectedProperties;
-  }
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/a64b6102/ambari-web/app/utils/configs/modification_handlers/knox.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/configs/modification_handlers/knox.js 
b/ambari-web/app/utils/configs/modification_handlers/knox.js
deleted file mode 100644
index 482c535..0000000
--- a/ambari-web/app/utils/configs/modification_handlers/knox.js
+++ /dev/null
@@ -1,67 +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');
-require('utils/configs/modification_handlers/modification_handler');
-
-module.exports = App.ServiceConfigModificationHandler.create({
-  serviceId : 'KNOX',
-
-  getDependentConfigChanges : function(changedConfig, selectedServices, 
allConfigs, securityEnabled) {
-    var affectedProperties = [];
-    var newValue = changedConfig.get("value");
-    var rangerPluginEnablePropertyName = "ranger-knox-plugin-enabled";
-    var affectedPropertyName = changedConfig.get("name");
-    if (affectedPropertyName == rangerPluginEnablePropertyName) {
-      var topologyXmlContent = this.getConfig(allConfigs, 'content', 
'topology.xml', 'KNOX');
-      if (topologyXmlContent != null) {
-        var topologyXmlContentString = topologyXmlContent.get('value');
-        var newTopologyXmlContentString = null;
-        var authEnabled = newValue == "Yes";
-        var authXml = 
/<provider>[\s]*<role>[\s]*authorization[\s]*<\/role>[\s\S]*?<\/provider>/.exec(topologyXmlContentString);
-        if (authXml != null && authXml.length > 0) {
-          var nameArray = /<name>\s*(.*?)\s*<\/name>/.exec(authXml[0]);
-          if (nameArray != null && nameArray.length > 1) {
-            if (authEnabled && 'AclsAuthz' == nameArray[1]) {
-              var newName = nameArray[0].replace('AclsAuthz', 
'XASecurePDPKnox');
-              var newAuthXml = authXml[0].replace(nameArray[0], newName);
-              newTopologyXmlContentString = 
topologyXmlContentString.replace(authXml[0], newAuthXml);
-            } else if (!authEnabled && 'XASecurePDPKnox' == nameArray[1]) {
-              var newName = nameArray[0].replace('XASecurePDPKnox', 
'AclsAuthz');
-              var newAuthXml = authXml[0].replace(nameArray[0], newName);
-              newTopologyXmlContentString = 
topologyXmlContentString.replace(authXml[0], newAuthXml);
-            }
-          }
-        }
-        if (newTopologyXmlContentString != null) {
-          affectedProperties.push({
-            serviceName : "KNOX",
-            sourceServiceName : "KNOX",
-            propertyName : 'content',
-            propertyDisplayName : 'content',
-            newValue : newTopologyXmlContentString,
-            curValue : topologyXmlContent.get('value'),
-            changedPropertyName : rangerPluginEnablePropertyName,
-            removed : false,
-            filename : 'topology.xml'
-          });
-        }
-      }
-    }
-    return affectedProperties;
-  }
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/a64b6102/ambari-web/app/utils/configs/modification_handlers/storm.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/configs/modification_handlers/storm.js 
b/ambari-web/app/utils/configs/modification_handlers/storm.js
deleted file mode 100644
index a5fd83c..0000000
--- a/ambari-web/app/utils/configs/modification_handlers/storm.js
+++ /dev/null
@@ -1,70 +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');
-require('utils/configs/modification_handlers/modification_handler');
-
-module.exports = App.ServiceConfigModificationHandler.create({
-  serviceId : 'STORM',
-
-  getDependentConfigChanges : function(changedConfig, selectedServices, 
allConfigs, securityEnabled) {
-    var affectedProperties = [];
-    var newValue = changedConfig.get("value");
-    var rangerPluginEnablePropertyName = "ranger-storm-plugin-enabled";
-    var affectedPropertyName = changedConfig.get("name");
-    if (affectedPropertyName == rangerPluginEnablePropertyName) {
-      var authEnabled = newValue == "Yes";
-      var configNimbusAuthorizer = this.getConfig(allConfigs, 
'nimbus.authorizer', 'storm-site.xml', 'STORM');
-      if (configNimbusAuthorizer != null) {
-        // Only when configuration is already present, do we act on it.
-        // Unsecured clusters do not have this config, and hence we skip any
-        // updates
-        var newNimbusAuthorizer = authEnabled ? (App.get('isHadoop23Stack') ? 
"org.apache.ranger.authorization.storm.authorizer.RangerStormAuthorizer"
-              : 
"com.xasecure.authorization.storm.authorizer.XaSecureStormAuthorizer")
-            : "backtype.storm.security.auth.authorizer.SimpleACLAuthorizer";
-
-        // Add Storm-Ranger configs
-        if (newNimbusAuthorizer !== configNimbusAuthorizer.get('value')) {
-          affectedProperties.push({
-            serviceName : "STORM",
-            sourceServiceName : "STORM",
-            propertyName : 'nimbus.authorizer',
-            propertyDisplayName : 'nimbus.authorizer',
-            newValue : newNimbusAuthorizer,
-            curValue : configNimbusAuthorizer.get('value'),
-            changedPropertyName : rangerPluginEnablePropertyName,
-            removed : false,
-            filename : 'storm-site.xml'
-          });
-        }
-      }
-      if (authEnabled && affectedProperties.length < 1 && !securityEnabled) {
-        App.ModalPopup.show({
-          header : 
Em.I18n.t('services.storm.configs.range-plugin-enable.dialog.title'),
-          primary : Em.I18n.t('ok'),
-          secondary : false,
-          showCloseButton : false,
-          onPrimary : function() {
-            this.hide();
-          },
-          body : 
Em.I18n.t('services.storm.configs.range-plugin-enable.dialog.message')
-        });
-      }
-    }
-    return affectedProperties;
-  }
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/a64b6102/ambari-web/app/utils/configs/modification_handlers/yarn.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/configs/modification_handlers/yarn.js 
b/ambari-web/app/utils/configs/modification_handlers/yarn.js
deleted file mode 100644
index 55bb1a9..0000000
--- a/ambari-web/app/utils/configs/modification_handlers/yarn.js
+++ /dev/null
@@ -1,71 +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');
-require('utils/configs/modification_handlers/modification_handler');
-
-module.exports = App.ServiceConfigModificationHandler.create({
-  serviceId: 'YARN',
-
-  getDependentConfigChanges: function (changedConfig, selectedServices, 
allConfigs, securityEnabled) {
-    var affectedProperties = [],
-      newValue = changedConfig.get('value'),
-      rangerPluginEnabledName = 'ranger-yarn-plugin-enabled',
-      affectedPropertyName = changedConfig.get('name');
-    if (affectedPropertyName == rangerPluginEnabledName) {
-      var configYarnAclEnable = this.getConfig(allConfigs, 'yarn.acl.enable', 
'yarn-site.xml', 'YARN'),
-        configAuthorizationProviderClass = this.getConfig(allConfigs, 
'yarn.authorization-provider', 'yarn-site.xml', 'YARN'),
-        isAuthorizationProviderClassNotSet = typeof 
configAuthorizationProviderClass === 'undefined',
-        rangerPluginEnabled = newValue == 'Yes',
-        newYarnAclEnable = 'true',
-        newAuthorizationProviderClass = 
'org.apache.ranger.authorization.yarn.authorizer.RangerYarnAuthorizer';
-
-      // Add YARN-Ranger configs
-      if (rangerPluginEnabled) {
-        if (configYarnAclEnable != null && newYarnAclEnable !== 
configYarnAclEnable.get('value')) {
-          affectedProperties.push({
-            serviceName: 'YARN',
-            sourceServiceName: 'YARN',
-            propertyName: 'yarn.acl.enable',
-            propertyDisplayName: 'yarn.acl.enable',
-            newValue: newYarnAclEnable,
-            curValue: configYarnAclEnable.get('value'),
-            changedPropertyName: rangerPluginEnabledName,
-            removed: false,
-            filename: 'yarn-site.xml'
-          });
-        }
-        if (isAuthorizationProviderClassNotSet || 
newAuthorizationProviderClass !== 
configAuthorizationProviderClass.get('value')) {
-          affectedProperties.push({
-            serviceName: 'YARN',
-            sourceServiceName: 'YARN',
-            propertyName: 'yarn.authorization-provider',
-            propertyDisplayName: 'yarn.authorization-provider',
-            newValue: newAuthorizationProviderClass,
-            curValue: isAuthorizationProviderClassNotSet ? '': 
configAuthorizationProviderClass.get('value'),
-            changedPropertyName: rangerPluginEnabledName,
-            removed: false,
-            isNewProperty: isAuthorizationProviderClassNotSet,
-            filename: 'yarn-site.xml',
-            categoryName: 'Custom yarn-site'
-          });
-        }
-      }
-    }
-    return affectedProperties;
-  }
-});

Reply via email to