You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by nc...@apache.org on 2015/05/28 21:17:37 UTC

ambari git commit: AMBARI-11483. Ranger: Admin RU does not complete for HDP-2.2 -> HDP-2.3 (ncole)

Repository: ambari
Updated Branches:
  refs/heads/trunk 98586c0ce -> e7e350390


AMBARI-11483. Ranger: Admin RU does not complete for HDP-2.2 -> HDP-2.3 (ncole)


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

Branch: refs/heads/trunk
Commit: e7e350390a85f237e961f143c87953c42c29213e
Parents: 98586c0
Author: Nate Cole <nc...@hortonworks.com>
Authored: Thu May 28 10:45:32 2015 -0400
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Thu May 28 15:17:17 2015 -0400

----------------------------------------------------------------------
 .../functions/setup_ranger_plugin_xml.py        |   5 +-
 .../upgrades/RangerConfigCalculation.java       | 132 +++++++++++++++
 .../0.96.0.2.0/package/scripts/hbase_master.py  |   2 +-
 .../package/scripts/hbase_regionserver.py       |   2 +-
 .../package/scripts/setup_ranger_hbase.py       |  13 +-
 .../2.1.0.2.0/package/scripts/hdfs_namenode.py  |   4 +-
 .../package/scripts/setup_ranger_hdfs.py        |  11 +-
 .../RANGER/0.4.0/package/scripts/params.py      |   3 +-
 .../0.4.0/package/scripts/ranger_admin.py       |   7 +
 .../0.4.0/package/scripts/ranger_service.py     |   6 +-
 .../0.4.0/package/scripts/setup_ranger_xml.py   |  68 ++++++--
 .../stacks/HDP/2.2/upgrades/upgrade-2.3.xml     | 101 +++++++++++
 .../upgrades/RangerConfigCalculationTest.java   | 166 +++++++++++++++++++
 13 files changed, 490 insertions(+), 30 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/e7e35039/ambari-common/src/main/python/resource_management/libraries/functions/setup_ranger_plugin_xml.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/setup_ranger_plugin_xml.py b/ambari-common/src/main/python/resource_management/libraries/functions/setup_ranger_plugin_xml.py
index e9ec4f5..cfa51da 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/setup_ranger_plugin_xml.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/setup_ranger_plugin_xml.py
@@ -44,7 +44,7 @@ def setup_ranger_plugin(component_select_name, service_name,
                         plugin_policymgr_ssl_properties, plugin_policymgr_ssl_attributes,
                         component_list, audit_db_is_enabled, credential_file, 
                         xa_audit_db_password, ssl_truststore_password,
-                        ssl_keystore_password, api_version=None):
+                        ssl_keystore_password, api_version=None, hdp_version_override = None):
 
   File(component_downloaded_custom_connector,
     content = DownloadSource(component_driver_curl_source)
@@ -56,6 +56,9 @@ def setup_ranger_plugin(component_select_name, service_name,
   )
 
   hdp_version = get_hdp_version(component_select_name)
+  if hdp_version_override is not None:
+    hdp_version = hdp_version_override
+
   component_conf_dir = conf_dict
   
   if plugin_enabled:

http://git-wip-us.apache.org/repos/asf/ambari/blob/e7e35039/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/RangerConfigCalculation.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/RangerConfigCalculation.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/RangerConfigCalculation.java
new file mode 100644
index 0000000..ed41c8a
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/RangerConfigCalculation.java
@@ -0,0 +1,132 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ambari.server.serveraction.upgrades;
+
+import java.text.MessageFormat;
+import java.util.Map;
+import java.util.concurrent.ConcurrentMap;
+
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.actionmanager.HostRoleStatus;
+import org.apache.ambari.server.agent.CommandReport;
+import org.apache.ambari.server.serveraction.AbstractServerAction;
+import org.apache.ambari.server.state.Cluster;
+import org.apache.ambari.server.state.Clusters;
+import org.apache.ambari.server.state.Config;
+
+import com.google.inject.Inject;
+
+/**
+ * Computes Ranger properties.  This class is only used when moving from
+ * HDP-2.2 to HDP-2.3 in that upgrade pack.
+ */
+public class RangerConfigCalculation extends AbstractServerAction {
+  private static final String SOURCE_CONFIG_TYPE = "admin-properties";
+
+  @Inject
+  private Clusters m_clusters;
+
+  @Override
+  public CommandReport execute(ConcurrentMap<String, Object> requestSharedDataContext)
+      throws AmbariException, InterruptedException {
+
+    String clusterName = getExecutionCommand().getClusterName();
+
+    Cluster cluster = m_clusters.getCluster(clusterName);
+
+    Config sourceConfig = cluster.getDesiredConfigByType(SOURCE_CONFIG_TYPE);
+
+    if (null == sourceConfig) {
+      return createCommandReport(0, HostRoleStatus.COMPLETED, "{}",
+          MessageFormat.format("Source type {0} not found, skipping", SOURCE_CONFIG_TYPE), "");
+    }
+
+    String dbProp = "DB_FLAVOR";
+    String dbHostProp = "db_host";
+    String dbNameProp = "db_name";
+
+    StringBuilder stdout = new StringBuilder();
+
+    String db = sourceConfig.getProperties().get(dbProp);
+    if (null == db) {
+      return createCommandReport(0, HostRoleStatus.COMPLETED, "{}",
+          MessageFormat.format("Target database from {0}/{1} not found, skipping",
+              SOURCE_CONFIG_TYPE, dbProp), "");
+    }
+
+    stdout.append(MessageFormat.format("Database type is {0}\n", db));
+
+    db = db.toLowerCase();
+    if (!"mysql".equals(db) && !"oracle".equals(db)) {
+      stdout.append(MessageFormat.format("Target database {0} is not recognized, skipping", db));
+      return createCommandReport(0, HostRoleStatus.COMPLETED, "{}", stdout.toString(), "");
+    }
+
+    String dbHost = sourceConfig.getProperties().get(dbHostProp);
+    String dbName = sourceConfig.getProperties().get(dbNameProp);
+
+    stdout.append(MessageFormat.format("Database host: {0}\n", dbHost));
+    stdout.append(MessageFormat.format("Database name: {0}\n", dbName));
+
+    if (null == dbHost) {
+      stdout.append(MessageFormat.format("Hostname must be set using {0}/{1} , skipping", SOURCE_CONFIG_TYPE, dbHostProp));
+
+      return createCommandReport(0, HostRoleStatus.COMPLETED, "{}", stdout.toString(), "");
+    }
+
+    String driver = null;
+    String url = null;
+    String dialect = null;
+
+    if ("mysql".equals(db)) {
+      if (null == dbName) {
+        stdout.append(MessageFormat.format("Target database {0} requires {1} to be set, skipping", db, dbName));
+
+        return createCommandReport(0, HostRoleStatus.COMPLETED, "{}", stdout.toString(), "");
+      }
+      driver = "com.mysql.jdbc.Driver";
+      url = MessageFormat.format("jdbc:mysql://{0}/{1}", dbHost, dbName);
+      dialect = "org.eclipse.persistence.platform.database.MySQLPlatform";
+    } else if ("oracle".equals(db)) {
+      driver = "oracle.jdbc.OracleDriver";
+      url = MessageFormat.format("jdbc:oracle:thin:@//{0}", dbHost);
+      dialect = "org.eclipse.persistence.platform.database.OraclePlatform";
+    }
+
+    stdout.append(MessageFormat.format("Database driver: {0}\n", driver));
+    stdout.append(MessageFormat.format("Database url: {0}\n", url));
+    stdout.append(MessageFormat.format("Database dialect: {0}", dialect));
+
+    Config config = cluster.getDesiredConfigByType("ranger-admin-site");
+    Map<String, String> targetValues = config.getProperties();
+    targetValues.put("ranger.jpa.jdbc.driver", driver);
+    targetValues.put("ranger.jpa.jdbc.url", url);
+    targetValues.put("ranger.jpa.jdbc.dialect", dialect);
+
+    targetValues.put("ranger.jpa.audit.jdbc.driver", driver);
+    targetValues.put("ranger.jpa.audit.jdbc.url", url);
+    targetValues.put("ranger.jpa.audit.jdbc.dialect", dialect);
+
+    config.setProperties(targetValues);
+    config.persist(false);
+
+    return createCommandReport(0, HostRoleStatus.COMPLETED, "{}", stdout.toString(), "");
+  }
+
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/e7e35039/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase_master.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase_master.py b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase_master.py
index 30198c9..19e639c 100644
--- a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase_master.py
+++ b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase_master.py
@@ -80,7 +80,7 @@ class HbaseMasterDefault(HbaseMaster):
     import params
     env.set_params(params)
     self.configure(env) # for security
-    setup_ranger_hbase()  
+    setup_ranger_hbase(rolling_upgrade=rolling_restart)  
     hbase_service('master', action = 'start')
     
   def stop(self, env, rolling_restart=False):

http://git-wip-us.apache.org/repos/asf/ambari/blob/e7e35039/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase_regionserver.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase_regionserver.py b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase_regionserver.py
index 882b982..3244092 100644
--- a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase_regionserver.py
+++ b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase_regionserver.py
@@ -83,7 +83,7 @@ class HbaseRegionServerDefault(HbaseRegionServer):
     import params
     env.set_params(params)
     self.configure(env) # for security
-    setup_ranger_hbase()  
+    setup_ranger_hbase(rolling_upgrade=rolling_restart)  
     hbase_service( 'regionserver',
       action = 'start'
     )

http://git-wip-us.apache.org/repos/asf/ambari/blob/e7e35039/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/setup_ranger_hbase.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/setup_ranger_hbase.py b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/setup_ranger_hbase.py
index 86049f8..6b4dfaa 100644
--- a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/setup_ranger_hbase.py
+++ b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/setup_ranger_hbase.py
@@ -19,7 +19,7 @@ limitations under the License.
 """
 from resource_management.core.logger import Logger
 
-def setup_ranger_hbase():
+def setup_ranger_hbase(rolling_upgrade = False):
   import params
   
   if params.has_ranger_admin:
@@ -29,6 +29,11 @@ def setup_ranger_hbase():
     else:
       from resource_management.libraries.functions.setup_ranger_plugin import setup_ranger_plugin
     
+    hdp_version = None
+
+    if rolling_upgrade:
+      hdp_version = params.version
+
     setup_ranger_plugin('hbase-client', 'hbase', 
                         params.downloaded_custom_connector, params.driver_curl_source,
                         params.driver_curl_target, params.java64_home,
@@ -42,7 +47,7 @@ def setup_ranger_hbase():
                         plugin_policymgr_ssl_properties=params.config['configurations']['ranger-hbase-policymgr-ssl'], plugin_policymgr_ssl_attributes=params.config['configuration_attributes']['ranger-hbase-policymgr-ssl'],
                         component_list=['hbase-client', 'hbase-master', 'hbase-regionserver'], audit_db_is_enabled=params.xa_audit_db_is_enabled,
                         credential_file=params.credential_file, xa_audit_db_password=params.xa_audit_db_password, 
-                        ssl_truststore_password=params.ssl_truststore_password, ssl_keystore_password=params.ssl_keystore_password
-    )                 
+                        ssl_truststore_password=params.ssl_truststore_password, ssl_keystore_password=params.ssl_keystore_password,
+                        hdp_version_override = hdp_version)                 
   else:
-    Logger.info('Ranger admin not installed')
\ No newline at end of file
+    Logger.info('Ranger admin not installed')

http://git-wip-us.apache.org/repos/asf/ambari/blob/e7e35039/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs_namenode.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs_namenode.py b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs_namenode.py
index 923d9df..5e824d0 100644
--- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs_namenode.py
+++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs_namenode.py
@@ -35,7 +35,7 @@ def namenode(action=None, do_format=True, rolling_restart=False, env=None):
     #additional namenode)
     create_name_dirs(params.dfs_name_dir)
   elif action == "start":
-    setup_ranger_hdfs()
+    setup_ranger_hdfs(rolling_upgrade = rolling_restart)
     import params
     if do_format:
       format_namenode()
@@ -350,4 +350,4 @@ def bootstrap_standby_namenode(params):
         Logger.warning('Bootstrap standby namenode failed with %d error code. Will retry' % (code))
   except Exception as ex:
     Logger.error('Bootstrap standby namenode threw an exception. Reason %s' %(str(ex)))
-  return False
\ No newline at end of file
+  return False

http://git-wip-us.apache.org/repos/asf/ambari/blob/e7e35039/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/setup_ranger_hdfs.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/setup_ranger_hdfs.py b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/setup_ranger_hdfs.py
index f7ddbed..f5df86f 100644
--- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/setup_ranger_hdfs.py
+++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/setup_ranger_hdfs.py
@@ -19,7 +19,7 @@ limitations under the License.
 """
 from resource_management.core.logger import Logger
 
-def setup_ranger_hdfs():
+def setup_ranger_hdfs(rolling_upgrade = False):
   import params
 
   if params.has_ranger_admin:
@@ -29,6 +29,11 @@ def setup_ranger_hdfs():
     else:
       from resource_management.libraries.functions.setup_ranger_plugin import setup_ranger_plugin
 
+    hdp_version = None
+
+    if rolling_upgrade:
+      hdp_version = params.version
+
     setup_ranger_plugin('hadoop-client', 'hdfs',
                         params.downloaded_custom_connector, params.driver_curl_source,
                         params.driver_curl_target, params.java_home,
@@ -42,7 +47,7 @@ def setup_ranger_hdfs():
                         plugin_policymgr_ssl_properties=params.config['configurations']['ranger-hdfs-policymgr-ssl'], plugin_policymgr_ssl_attributes=params.config['configuration_attributes']['ranger-hdfs-policymgr-ssl'],
                         component_list=['hadoop-client'], audit_db_is_enabled=params.xa_audit_db_is_enabled,
                         credential_file=params.credential_file, xa_audit_db_password=params.xa_audit_db_password, 
-                        ssl_truststore_password=params.ssl_truststore_password, ssl_keystore_password=params.ssl_keystore_password
-    )
+                        ssl_truststore_password=params.ssl_truststore_password, ssl_keystore_password=params.ssl_keystore_password,
+                        hdp_version_override = hdp_version)
   else:
     Logger.info('Ranger admin not installed')

http://git-wip-us.apache.org/repos/asf/ambari/blob/e7e35039/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 f5da743..7a6dacf 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
@@ -60,7 +60,8 @@ if stack_is_hdp22_or_further:
   ranger_ugsync_conf = '/etc/ranger/usersync/conf'
 
 if stack_is_hdp23_or_further:
-  ranger_conf    = '/usr/hdp/current/ranger-admin/conf'
+  ranger_conf = '/usr/hdp/current/ranger-admin/conf'
+  ranger_ugsync_conf = '/usr/hdp/current/ranger-usersync/conf'
 
 usersync_services_file = "/usr/hdp/current/ranger-usersync/ranger-usersync-services.sh"
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/e7e35039/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_admin.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_admin.py b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_admin.py
index 2c7a599..a471bb4 100644
--- a/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_admin.py
+++ b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_admin.py
@@ -58,6 +58,13 @@ class RangerAdmin(Script):
   def pre_rolling_restart(self, env):
     import params
     env.set_params(params)
+
+    if params.xml_configurations_supported:
+      from setup_ranger_xml import ranger, setup_ranger_db, setup_java_patch
+      ranger('ranger_admin', rolling_upgrade=True)
+      setup_ranger_db(rolling_upgrade=True)
+      setup_java_patch(rolling_upgrade=True)
+
     self.set_ru_rangeradmin_in_progress()
     upgrade.prestart(env, "ranger-admin")
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/e7e35039/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 6e32dac..8ad2627 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
@@ -27,8 +27,10 @@ def ranger_service(name, action=None):
     Execute(params.ranger_start, environment={'JAVA_HOME': params.java_home}, user=params.unix_user, not_if=no_op_test)
   elif name == 'ranger_usersync':
     no_op_test = format('ps -ef | grep proc_rangerusersync | grep -v grep')
-    
+
+
     if params.stack_is_hdp23_or_further:
+      Execute(('chown','-R', format('{unix_user}:{unix_group}'), format('{usersync_log_dir}/')), sudo=True)
       Execute(params.usersync_start,
               environment={'JAVA_HOME': params.java_home},          
               not_if=no_op_test,
@@ -40,4 +42,4 @@ def ranger_service(name, action=None):
               environment={'JAVA_HOME': params.java_home},        
               not_if=no_op_test,
               sudo=True,
-      )
\ No newline at end of file
+      )

http://git-wip-us.apache.org/repos/asf/ambari/blob/e7e35039/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 df85da8..d845eb4 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
@@ -30,25 +30,36 @@ from resource_management.libraries.functions.is_empty import is_empty
 # This file contains functions used for setup/configure of Ranger Admin and Ranger Usersync.
 # The design is to mimic what is done by the setup.sh script bundled by Ranger component currently.
 
-def ranger(name=None):
+def ranger(name=None, rolling_upgrade=False):
   """
   parameter name: name of ranger service component
   """
   if name == 'ranger_admin':
-    setup_ranger_admin()
+    setup_ranger_admin(rolling_upgrade=rolling_upgrade)
 
   if name == 'ranger_usersync':
     setup_usersync()
 
-def setup_ranger_admin():
+def setup_ranger_admin(rolling_upgrade=False):
   import params
 
+  ranger_home = params.ranger_home
+  ranger_conf = params.ranger_conf
+
+  if rolling_upgrade:
+    ranger_home = format("/usr/hdp/{version}/ranger-admin")
+    ranger_conf = format("/usr/hdp/{version}/ranger-admin/conf")
+
   File(format("/usr/lib/ambari-agent/{check_db_connection_jar_name}"),
     content = DownloadSource(format("{jdk_location}{check_db_connection_jar_name}")),
   )
 
+  cp = format("{check_db_connection_jar}")
+  cp = cp + os.pathsep + format("{driver_curl_target}")
+  cp = cp + os.pathsep + format("{ranger_home}/ews/webapp/WEB-INF/lib/*")
+
   db_connection_check_command = format(
-    "{java_home}/bin/java -cp {check_db_connection_jar}:{driver_curl_target} org.apache.ambari.server.DBConnectionVerification '{ranger_jdbc_connection_url}' {ranger_db_user} {ranger_db_password!p} {ranger_jdbc_driver}")
+    "{java_home}/bin/java -cp {cp} org.apache.ambari.server.DBConnectionVerification '{ranger_jdbc_connection_url}' {ranger_db_user} {ranger_db_password!p} {ranger_jdbc_driver}")
 
   Execute(db_connection_check_command, path='/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin', tries=5, try_sleep=10)
 
@@ -57,6 +68,16 @@ def setup_ranger_admin():
     only_if=format("ls {ranger_home}/ews/webapp/WEB-INF/classes/conf"),
     sudo=True)
 
+  if rolling_upgrade:
+    src_file = format('{ranger_home}/ews/webapp/WEB-INF/classes/conf.dist/ranger-admin-default-site.xml')
+    dst_file = format('{ranger_home}/conf/ranger-admin-default-site.xml')
+    Execute(('cp', '-f', src_file, dst_file), sudo=True)
+
+    src_file = format('{ranger_home}/ews/webapp/WEB-INF/classes/conf.dist/security-applicationContext.xml')
+    dst_file = format('{ranger_home}/conf/security-applicationContext.xml')
+
+    Execute(('cp', '-f', src_file, dst_file), sudo=True)
+
   Execute(('chown','-R',format('{unix_user}:{unix_group}'), format('{ranger_home}/')), sudo=True)
 
   Execute(('ln','-sf', format('{ranger_home}/ews/ranger-admin-services.sh'),'/usr/bin/ranger-admin'),
@@ -65,23 +86,23 @@ def setup_ranger_admin():
     sudo=True)
 
   XmlConfig("ranger-admin-site.xml",
-    conf_dir=params.ranger_conf,
+    conf_dir=ranger_conf,
     configurations=params.config['configurations']['ranger-admin-site'],
     configuration_attributes=params.config['configuration_attributes']['ranger-admin-site'],
     owner=params.unix_user,
     group=params.unix_group,
     mode=0644)
 
-  Directory(os.path.join(params.ranger_conf,'ranger_jaas'),
+  Directory(os.path.join(ranger_conf,'ranger_jaas'),
     mode=0700,
     owner=params.unix_user,
     group=params.unix_group,
   )
 
-  do_keystore_setup()
+  do_keystore_setup(rolling_upgrade=rolling_upgrade)
 
 
-def setup_ranger_db():
+def setup_ranger_db(rolling_upgrade=False):
   import params
   
   File(params.downloaded_custom_connector,
@@ -98,6 +119,10 @@ def setup_ranger_db():
       not_if=format("test -f {driver_curl_target}"),
       sudo=True)
 
+  ranger_home = params.ranger_home
+  if rolling_upgrade:
+    ranger_home = format("/usr/hdp/{version}/ranger-admin")
+
   if not os.path.isfile(os.path.join(params.ranger_home, 'ews', 'lib',params.jdbc_jar_name)):
     Execute(('cp', '--remove-destination', params.downloaded_custom_connector, os.path.join(params.ranger_home, 'ews', 'lib')),
       path=["/bin", "/usr/bin/"],
@@ -111,29 +136,42 @@ def setup_ranger_db():
   if params.create_db_dbuser:
     Logger.info('Setting up Ranger DB and DB User')
     dba_setup = format('python {ranger_home}/dba_script.py -q')
-    Execute(dba_setup, environment={'RANGER_ADMIN_HOME':params.ranger_home, 'JAVA_HOME': params.java_home}, logoutput=True)
+    Execute(dba_setup, environment={'RANGER_ADMIN_HOME':ranger_home, 'JAVA_HOME': params.java_home}, logoutput=True)
   else:
     Logger.info('Separate DBA property not set. Assuming Ranger DB and DB User exists!')
 
   db_setup = format('python {ranger_home}/db_setup.py')
-  Execute(db_setup, environment={'RANGER_ADMIN_HOME':params.ranger_home, 'JAVA_HOME': params.java_home}, logoutput=True)
+  Execute(db_setup, environment={'RANGER_ADMIN_HOME':ranger_home, 'JAVA_HOME': params.java_home}, logoutput=True)
 
 
-def setup_java_patch():
+def setup_java_patch(rolling_upgrade=False):
   import params
 
+  ranger_home = params.ranger_home
+  if rolling_upgrade:
+    ranger_home = format("/usr/hdp/{version}/ranger-admin")
+
   setup_java_patch = format('python {ranger_home}/db_setup.py -javapatch')
-  Execute(setup_java_patch, environment={'RANGER_ADMIN_HOME':params.ranger_home, 'JAVA_HOME': params.java_home}, logoutput=True)
+  Execute(setup_java_patch, environment={'RANGER_ADMIN_HOME':ranger_home, 'JAVA_HOME': params.java_home}, logoutput=True)
 
 
-def do_keystore_setup(): 
+def do_keystore_setup(rolling_upgrade=False): 
   import params
 
+  ranger_home = params.ranger_home
+  cred_lib_path = params.cred_lib_path
+  cred_setup_prefix = params.cred_setup_prefix
+
+  if rolling_upgrade:
+    ranger_home = format("/usr/hdp/{version}/ranger-admin")
+    cred_lib_path = os.path.join(ranger_home,"cred","lib","*")
+    cred_setup_prefix = format('python {ranger_home}/ranger_credential_helper.py -l "{cred_lib_path}"')
+
   if not is_empty(params.ranger_credential_provider_path):    
     jceks_path = params.ranger_credential_provider_path
     cred_setup = format('{cred_setup_prefix} -f {jceks_path} -k "{ranger_jpa_jdbc_credential_alias}" -v "{ranger_ambari_db_password}" -c 1')
 
-    Execute(cred_setup, environment={'RANGER_ADMIN_HOME':params.ranger_home, 'JAVA_HOME': params.java_home}, logoutput=True)
+    Execute(cred_setup, environment={'RANGER_ADMIN_HOME':ranger_home, 'JAVA_HOME': params.java_home}, logoutput=True)
 
     File(params.ranger_credential_provider_path,
       owner = params.unix_user,
@@ -144,7 +182,7 @@ def do_keystore_setup():
     jceks_path = params.ranger_credential_provider_path
     cred_setup = format('{cred_setup_prefix} -f {jceks_path} -k "{ranger_jpa_audit_jdbc_credential_alias}" -v "{ranger_ambari_audit_db_password}" -c 1')
 
-    Execute(cred_setup, environment={'RANGER_ADMIN_HOME':params.ranger_home, 'JAVA_HOME': params.java_home}, logoutput=True)
+    Execute(cred_setup, environment={'RANGER_ADMIN_HOME':ranger_home, 'JAVA_HOME': params.java_home}, logoutput=True)
 
     File(params.ranger_credential_provider_path,
       owner = params.unix_user,

http://git-wip-us.apache.org/repos/asf/ambari/blob/e7e35039/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.3.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.3.xml b/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.3.xml
index 1cbdd88..30d31c7 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.3.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.3.xml
@@ -311,6 +311,107 @@
 
     <service name="RANGER">
       <component name="RANGER_ADMIN">
+        <pre-upgrade>
+          <task xsi:type="configure">
+            <type>ranger-env</type>
+            <set key="xml_configurations_supported" value="true" />
+          </task>
+          <task xsi:type="configure" summary="Updating Ranger Admin">
+            <type>ranger-admin-site</type>
+            <transfer operation="copy" from-type="ranger-site" from-key="HTTPS_CLIENT_AUTH" to-key="xasecure.policymgr.clientssl.keystore" default-value="" />
+            <transfer operation="copy" from-type="ranger-site" from-key="HTTPS_KEYSTORE_FILE" to-key="ranger.https.attrib.keystore.file" default-value="" />
+            <transfer operation="copy" from-type="ranger-site" from-key="HTTPS_KEYSTORE_PASS" to-key="ranger.service.https.attrib.keystore.pass" default-value="" mask="true" />
+            <transfer operation="copy" from-type="ranger-site" from-key="HTTPS_KEY_ALIAS" to-key="ranger.service.https.attrib.keystore.keyalias" default-value="" />
+            <transfer operation="copy" from-type="ranger-site" from-key="HTTPS_SERVICE_PORT" to-key="ranger.service.https.port" default-value="" />
+            <transfer operation="copy" from-type="ranger-site" from-key="HTTP_ENABLED" to-key="ranger.service.http.enabled" default-value="" />
+            <transfer operation="copy" from-type="ranger-site" from-key="HTTP_SERVICE_PORT" to-key="ranger.service.http.port" default-value="" />
+
+            <transfer operation="copy" from-type="admin-properties" from-key="authServiceHostName" to-key="ranger.unixauth.service.hostname" default-value="" />
+            <transfer operation="copy" from-type="admin-properties" from-key="authServicePort" to-key="ranger.unixauth.service.port" default-value="" />
+            <transfer operation="copy" from-type="admin-properties" from-key="authentication_method" to-key="ranger.authentication.method" default-value="" />
+            <transfer operation="copy" from-type="admin-properties" from-key="remoteLoginEnabled" to-key="ranger.unixauth.remote.login.enabled" default-value="" />
+            <transfer operation="copy" from-type="admin-properties" from-key="xa_ldap_url" to-key="ranger.ldap.url" default-value="" />
+            <transfer operation="copy" from-type="admin-properties" from-key="xa_ldap_userDNpattern" to-key="ranger.ldap.user.dnpattern" default-value="" />
+            <transfer operation="copy" from-type="admin-properties" from-key="xa_ldap_groupSearchBase" to-key="ranger.ldap.group.searchbase" default-value="" />
+            <transfer operation="copy" from-type="admin-properties" from-key="xa_ldap_groupSearchFilter" to-key="ranger.ldap.group.searchfilter" default-value="" />
+            <transfer operation="copy" from-type="admin-properties" from-key="xa_ldap_groupRoleAttribute" to-key="ranger.ldap.group.roleattribute" default-value="" />
+            <transfer operation="copy" from-type="admin-properties" from-key="xa_ldap_ad_domain" to-key="ranger.ldap.ad.domain" default-value="" />
+            <transfer operation="copy" from-type="admin-properties" from-key="xa_ldap_ad_url" to-key="ranger.ldap.ad.url" default-value="" />
+            <transfer operation="copy" from-type="admin-properties" from-key="policymgr_external_url" to-key="ranger.externalurl" default-value="" />
+            <transfer operation="copy" from-type="admin-properties" from-key="db_user" to-key="ranger.jpa.jdbc.user" default-value="" />
+            <transfer operation="copy" from-type="admin-properties" from-key="db_password" to-key="ranger.jpa.jdbc.password" default-value="" mask="true" />
+            <transfer operation="copy" from-type="admin-properties" from-key="audit_db_user" to-key="ranger.jpa.audit.jdbc.user" default-value="" />
+            <transfer operation="copy" from-type="admin-properties" from-key="audit_db_password" to-key="ranger.jpa.audit.jdbc.password" default-value="" mask="true" />
+
+            <set key="ranger.audit.solr.urls" value="" />
+            <set key="ranger.audit.solr.zookeepers" value="" />
+            <set key="ranger.audit.solr.username" value="" />
+            <set key="ranger.audit.solr.password" value="" />
+            <set key="ranger.audit.solr.authentication-method" value="" />
+            <set key="ranger.audit.source.type" value="" />
+          </task>
+          
+          <task xsi:type="server_action" summary="Calculating Ranger Properties" class="org.apache.ambari.server.serveraction.upgrades.RangerConfigCalculation" />
+          <task xsi:type="manual">
+            <message>ASDFJASD;LFJKASD;LFJASD;FLKAS</message>
+          </task>
+          
+          <task xsi:type="configure" summary="Updating Ranger Usersync">
+            <type>ranger-ugsync-site</type>
+            <transfer operation="copy" from-type="usersync-properties" from-key="CRED_KEYSTORE_FILENAME" to-key="ranger.usersync.credstore.filename" default-value="/etc/ranger/usersync/ugsync.jceks" />
+            <transfer operation="copy" from-type="usersync-properties" from-key="MIN_UNIX_USER_ID_TO_SYNC" to-key="ranger.usersync.unix.minUserId" default-value="" />
+            <transfer operation="copy" from-type="usersync-properties" from-key="SYNC_INTERVAL" to-key="ranger.usersync.sleeptimeinmillisbetweensynccycle" default-value="60000" />
+            <transfer operation="copy" from-type="usersync-properties" from-key="SYNC_LDAP_BIND_DN" to-key="ranger.usersync.ldap.binddn" default-value="" />
+            <transfer operation="copy" from-type="usersync-properties" from-key="SYNC_LDAP_BIND_PASSWORD" to-key="" default-value="ranger.usersync.ldap.ldapbindpassword" mask="true" />
+            <transfer operation="copy" from-type="usersync-properties" from-key="SYNC_LDAP_GROUPNAME_CASE_CONVERSION" to-key="ranger.usersync.ldap.groupname.caseconversion" default-value="" />
+            <transfer operation="copy" from-type="usersync-properties" from-key="SYNC_LDAP_URL" to-key="ranger.usersync.ldap.url" default-value="" />
+            <transfer operation="copy" from-type="usersync-properties" from-key="SYNC_LDAP_USERNAME_CASE_CONVERSION" to-key="ranger.usersync.ldap.username.caseconversion" default-value="" />
+            <transfer operation="copy" from-type="usersync-properties" from-key="SYNC_LDAP_USER_GROUP_NAME_ATTRIBUTE" to-key="ranger.usersync.group.memberattributename" default-value="" />
+            <transfer operation="copy" from-type="usersync-properties" from-key="SYNC_LDAP_USER_NAME_ATTRIBUTE" to-key="ranger.usersync.group.nameattribute" default-value="" />
+            <transfer operation="copy" from-type="usersync-properties" from-key="SYNC_LDAP_USER_OBJECT_CLASS" to-key="ranger.usersync.group.objectclass" default-value="" />
+            <transfer operation="copy" from-type="usersync-properties" from-key="SYNC_LDAP_USER_SEARCH_BASE" to-key="ranger.usersync.group.searchbase" default-value="" />
+            <transfer operation="copy" from-type="usersync-properties" from-key="SYNC_LDAP_USER_SEARCH_FILTER" to-key="ranger.usersync.group.searchfilter" default-value="" />
+            <transfer operation="copy" from-type="usersync-properties" from-key="SYNC_LDAP_USER_SEARCH_SCOPE" to-key="ranger.usersync.group.searchscope" default-value="" />
+            <transfer operation="copy" from-type="usersync-properties" from-key="logdir" to-key="ranger.usersync.logdir" default-value="" />
+            <transfer operation="copy" from-type="usersync-properties" from-key="SYNC_SOURCE" to-key="ranger.usersync.source.impl.class" default-value="org.apache.ranger.unixusersync.process.UnixUserGroupBuilder" />
+            <transfer operation="copy" from-type="usersync-properties" from-key="POLICY_MGR_URL" to-key="ranger.usersync.policymanager.baseURL" default-value="{{ranger_external_url}}" />
+          </task>
+            
+          <task xsi:type="configure">
+            <type>ranger-site</type>
+            <transfer operation="delete" delete-key="HTTPS_CLIENT_AUTH" />
+            <transfer operation="delete" delete-key="HTTPS_KEYSTORE_FILE" />
+            <transfer operation="delete" delete-key="HTTPS_KEYSTORE_PASS" />
+            <transfer operation="delete" delete-key="HTTPS_KEY_ALIAS" />
+            <transfer operation="delete" delete-key="HTTPS_SERVICE_PORT" />
+            <transfer operation="delete" delete-key="HTTP_ENABLED" />
+            <transfer operation="delete" delete-key="HTTP_SERVICE_PORT" />
+            <transfer operation="delete" delete-key="" />
+          </task>
+
+          <task xsi:type="configure">
+            <type>usersync-properties</type>
+            <transfer operation="delete" delete-key="CRED_KEYSTORE_FILENAME" />
+            <transfer operation="delete" delete-key="MIN_UNIX_USER_ID_TO_SYNC" />
+            <transfer operation="delete" delete-key="SYNC_INTERVAL" />
+            <transfer operation="delete" delete-key="SYNC_LDAP_BIND_DN" />
+            <transfer operation="delete" delete-key="SYNC_LDAP_BIND_PASSWORD" />
+            <transfer operation="delete" delete-key="SYNC_LDAP_GROUPNAME_CASE_CONVERSION" />
+            <transfer operation="delete" delete-key="SYNC_LDAP_URL" />
+            <transfer operation="delete" delete-key="SYNC_LDAP_USERNAME_CASE_CONVERSION" />
+            <transfer operation="delete" delete-key="SYNC_LDAP_USER_GROUP_NAME_ATTRIBUTE" />
+            <transfer operation="delete" delete-key="SYNC_LDAP_USER_NAME_ATTRIBUTE" />
+            <transfer operation="delete" delete-key="SYNC_LDAP_USER_OBJECT_CLASS" />
+            <transfer operation="delete" delete-key="SYNC_LDAP_USER_SEARCH_BASE" />
+            <transfer operation="delete" delete-key="SYNC_LDAP_USER_SEARCH_FILTER" />
+            <transfer operation="delete" delete-key="SYNC_LDAP_USER_SEARCH_SCOPE" />
+            <transfer operation="delete" delete-key="logdir" />
+            <transfer operation="delete" delete-key="SYNC_SOURCE" />
+            <transfer operation="delete" delete-key="POLICY_MGR_URL" />
+            <transfer operation="delete" delete-key="" />
+          </task>
+        </pre-upgrade>
+      
         <upgrade>
           <task xsi:type="restart" />
         </upgrade>

http://git-wip-us.apache.org/repos/asf/ambari/blob/e7e35039/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/RangerConfigCalculationTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/RangerConfigCalculationTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/RangerConfigCalculationTest.java
new file mode 100644
index 0000000..88fa58e
--- /dev/null
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/RangerConfigCalculationTest.java
@@ -0,0 +1,166 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ambari.server.serveraction.upgrades;
+
+import static org.easymock.EasyMock.anyObject;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.lang.reflect.Field;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.ambari.server.actionmanager.ExecutionCommandWrapper;
+import org.apache.ambari.server.actionmanager.HostRoleCommand;
+import org.apache.ambari.server.agent.CommandReport;
+import org.apache.ambari.server.agent.ExecutionCommand;
+import org.apache.ambari.server.state.Cluster;
+import org.apache.ambari.server.state.Clusters;
+import org.apache.ambari.server.state.Config;
+import org.apache.ambari.server.state.ConfigImpl;
+import org.easymock.EasyMock;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.google.inject.Injector;
+
+/**
+ * Tests upgrade-related server side actions
+ */
+public class RangerConfigCalculationTest {
+
+  private Injector m_injector;
+  private Clusters m_clusters;
+  private Field m_clusterField;
+
+  @Before
+  public void setup() throws Exception {
+    m_injector = EasyMock.createMock(Injector.class);
+    m_clusters = EasyMock.createMock(Clusters.class);
+    Cluster cluster = EasyMock.createMock(Cluster.class);
+
+    Config adminConfig = new ConfigImpl("admin-properties") {
+      Map<String, String> mockProperties = new HashMap<String, String>() {{
+        put("DB_FLAVOR", "MYSQL");
+        put("db_host", "host1");
+        put("db_name", "ranger");
+      }};
+      @Override
+      public Map<String, String> getProperties() {
+        return mockProperties;
+      }
+    };
+
+    Config adminSiteConfig = new ConfigImpl("admin-properties") {
+      Map<String, String> mockProperties = new HashMap<String, String>();
+      @Override
+      public Map<String, String> getProperties() {
+        return mockProperties;
+      }
+
+      @Override
+      public void setProperties(Map<String, String> properties) {
+        mockProperties.putAll(properties);
+      }
+
+      @Override
+      public void persist(boolean newConfig) {
+        // no-op
+      }
+    };
+
+    expect(cluster.getDesiredConfigByType("admin-properties")).andReturn(adminConfig).atLeastOnce();
+    expect(cluster.getDesiredConfigByType("ranger-admin-site")).andReturn(adminSiteConfig).atLeastOnce();
+
+    expect(m_clusters.getCluster((String) anyObject())).andReturn(cluster).anyTimes();
+    expect(m_injector.getInstance(Clusters.class)).andReturn(m_clusters).atLeastOnce();
+
+    replay(m_injector, m_clusters, cluster);
+
+    m_clusterField = RangerConfigCalculation.class.getDeclaredField("m_clusters");
+    m_clusterField.setAccessible(true);
+  }
+
+  @Test
+  public void testAction() throws Exception {
+
+    Map<String, String> commandParams = new HashMap<String, String>();
+    commandParams.put("clusterName", "c1");
+
+    ExecutionCommand executionCommand = new ExecutionCommand();
+    executionCommand.setCommandParams(commandParams);
+    executionCommand.setClusterName("c1");
+
+    HostRoleCommand hrc = EasyMock.createMock(HostRoleCommand.class);
+    expect(hrc.getRequestId()).andReturn(1L).anyTimes();
+    expect(hrc.getStageId()).andReturn(2L).anyTimes();
+    expect(hrc.getExecutionCommandWrapper()).andReturn(new ExecutionCommandWrapper(executionCommand)).anyTimes();
+    replay(hrc);
+
+    RangerConfigCalculation action = new RangerConfigCalculation();
+    m_clusterField.set(action, m_clusters);
+
+    action.setExecutionCommand(executionCommand);
+    action.setHostRoleCommand(hrc);
+
+    CommandReport report = action.execute(null);
+    assertNotNull(report);
+
+    Cluster c = m_clusters.getCluster("c1");
+    Config config = c.getDesiredConfigByType("ranger-admin-site");
+    Map<String, String> map = config.getProperties();
+
+    assertTrue(map.containsKey("ranger.jpa.jdbc.driver"));
+    assertTrue(map.containsKey("ranger.jpa.jdbc.url"));
+    assertTrue(map.containsKey("ranger.jpa.jdbc.dialect"));
+    assertTrue(map.containsKey("ranger.jpa.audit.jdbc.driver"));
+    assertTrue(map.containsKey("ranger.jpa.audit.jdbc.url"));
+    assertTrue(map.containsKey("ranger.jpa.audit.jdbc.dialect"));
+
+    assertEquals("com.mysql.jdbc.Driver", map.get("ranger.jpa.jdbc.driver"));
+    assertEquals("jdbc:mysql://host1/ranger", map.get("ranger.jpa.jdbc.url"));
+    assertEquals("org.eclipse.persistence.platform.database.MySQLPlatform", map.get("ranger.jpa.jdbc.dialect"));
+
+    assertEquals("com.mysql.jdbc.Driver", map.get("ranger.jpa.audit.jdbc.driver"));
+    assertEquals("jdbc:mysql://host1/ranger", map.get("ranger.jpa.audit.jdbc.url"));
+    assertEquals("org.eclipse.persistence.platform.database.MySQLPlatform", map.get("ranger.jpa.audit.jdbc.dialect"));
+
+    config = c.getDesiredConfigByType("admin-properties");
+    config.getProperties().put("DB_FLAVOR", "oracle");
+
+    report = action.execute(null);
+    assertNotNull(report);
+
+    config = c.getDesiredConfigByType("ranger-admin-site");
+    map = config.getProperties();
+
+    assertEquals("oracle.jdbc.OracleDriver", map.get("ranger.jpa.jdbc.driver"));
+    assertEquals("jdbc:oracle:thin:@//host1", map.get("ranger.jpa.jdbc.url"));
+    assertEquals("org.eclipse.persistence.platform.database.OraclePlatform", map.get("ranger.jpa.jdbc.dialect"));
+
+    assertEquals("oracle.jdbc.OracleDriver", map.get("ranger.jpa.audit.jdbc.driver"));
+    assertEquals("jdbc:oracle:thin:@//host1", map.get("ranger.jpa.audit.jdbc.url"));
+    assertEquals("org.eclipse.persistence.platform.database.OraclePlatform", map.get("ranger.jpa.audit.jdbc.dialect"));
+
+  }
+
+
+}