浏览代码

AMBARI-15127. Separate DB operation during upgrade and add them as pre-upgrade tasks(gautam)

Gautam Borad 9 年之前
父节点
当前提交
eeef001d47
共有 16 个文件被更改,包括 539 次插入140 次删除
  1. 36 9
      ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_admin.py
  2. 3 7
      ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_usersync.py
  3. 5 5
      ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/setup_ranger.py
  4. 67 55
      ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/setup_ranger_xml.py
  5. 77 58
      ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/package/scripts/kms.py
  6. 14 2
      ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/package/scripts/kms_server.py
  7. 14 0
      ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/nonrolling-upgrade-2.3.xml
  8. 14 0
      ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/nonrolling-upgrade-2.4.xml
  9. 12 0
      ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.3.xml
  10. 12 0
      ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.4.xml
  11. 46 1
      ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.3.xml
  12. 46 1
      ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.4.xml
  13. 42 0
      ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.3.xml
  14. 63 1
      ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.4.xml
  15. 46 1
      ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/nonrolling-upgrade-2.4.xml
  16. 42 0
      ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.4.xml

+ 36 - 9
ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_admin.py

@@ -17,6 +17,7 @@ See the License for the specific language governing permissions and
 limitations under the License.
 limitations under the License.
 
 
 """
 """
+from resource_management.libraries.functions import hdp_select
 from resource_management.libraries.script import Script
 from resource_management.libraries.script import Script
 from resource_management.core.resources.system import Execute
 from resource_management.core.resources.system import Execute
 from resource_management.core.exceptions import ComponentIsNotRunning
 from resource_management.core.exceptions import ComponentIsNotRunning
@@ -59,12 +60,6 @@ class RangerAdmin(Script):
 
 
     upgrade.prestart(env, "ranger-admin")
     upgrade.prestart(env, "ranger-admin")
 
 
-    if params.xml_configurations_supported:
-      from setup_ranger_xml import ranger, setup_ranger_db, setup_java_patch
-      ranger('ranger_admin', upgrade_type=upgrade_type)
-      setup_ranger_db(upgrade_type=upgrade_type)
-      setup_java_patch(upgrade_type=upgrade_type)
-
     self.set_ru_rangeradmin_in_progress(params.upgrade_marker_file)
     self.set_ru_rangeradmin_in_progress(params.upgrade_marker_file)
 
 
   def post_upgrade_restart(self,env, upgrade_type=None):
   def post_upgrade_restart(self,env, upgrade_type=None):
@@ -77,7 +72,7 @@ class RangerAdmin(Script):
   def start(self, env, upgrade_type=None):
   def start(self, env, upgrade_type=None):
     import params
     import params
     env.set_params(params)
     env.set_params(params)
-    self.configure(env)
+    self.configure(env, upgrade_type=upgrade_type)
     ranger_service('ranger_admin')
     ranger_service('ranger_admin')
 
 
 
 
@@ -96,7 +91,7 @@ class RangerAdmin(Script):
         raise ComponentIsNotRunning()
         raise ComponentIsNotRunning()
     pass
     pass
 
 
-  def configure(self, env):
+  def configure(self, env, upgrade_type=None):
     import params
     import params
     env.set_params(params)
     env.set_params(params)
     if params.xml_configurations_supported:
     if params.xml_configurations_supported:
@@ -104,7 +99,7 @@ class RangerAdmin(Script):
     else:
     else:
       from setup_ranger import ranger
       from setup_ranger import ranger
 
 
-    ranger('ranger_admin')
+    ranger('ranger_admin', upgrade_type=upgrade_type)
 
 
   def set_ru_rangeradmin_in_progress(self, upgrade_marker_file):
   def set_ru_rangeradmin_in_progress(self, upgrade_marker_file):
     config_dir = os.path.dirname(upgrade_marker_file)
     config_dir = os.path.dirname(upgrade_marker_file)
@@ -124,6 +119,38 @@ class RangerAdmin(Script):
   def is_ru_rangeradmin_in_progress(self, upgrade_marker_file):
   def is_ru_rangeradmin_in_progress(self, upgrade_marker_file):
     return os.path.isfile(upgrade_marker_file)
     return os.path.isfile(upgrade_marker_file)
 
 
+  def setup_ranger_database(self, env):
+    import params
+    env.set_params(params)
+
+    upgrade_stack = hdp_select._get_upgrade_stack()
+    if upgrade_stack is None:
+      raise Fail('Unable to determine the stack and stack version')
+
+    stack_version = upgrade_stack[1]
+
+    if params.xml_configurations_supported:
+      Logger.info(format('Setting Ranger database schema, using version {stack_version}'))
+
+      from setup_ranger_xml import setup_ranger_db
+      setup_ranger_db(stack_version=stack_version)
+
+  def setup_ranger_java_patches(self, env):
+    import params
+    env.set_params(params)
+
+    upgrade_stack = hdp_select._get_upgrade_stack()
+    if upgrade_stack is None:
+      raise Fail('Unable to determine the stack and stack version')
+
+    stack_version = upgrade_stack[1]
+
+    if params.xml_configurations_supported:
+      Logger.info(format('Applying Ranger java patches, using version {stack_version}'))
+
+      from setup_ranger_xml import setup_java_patch
+      setup_java_patch(stack_version=stack_version)
+
 if __name__ == "__main__":
 if __name__ == "__main__":
   RangerAdmin().execute()
   RangerAdmin().execute()
 
 

+ 3 - 7
ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_usersync.py

@@ -32,7 +32,7 @@ class RangerUsersync(Script):
     self.install_packages(env)
     self.install_packages(env)
     self.configure(env)
     self.configure(env)
     
     
-  def configure(self, env):
+  def configure(self, env, upgrade_type=None):
     import params
     import params
     env.set_params(params)
     env.set_params(params)
 
 
@@ -41,13 +41,13 @@ class RangerUsersync(Script):
     else:
     else:
       from setup_ranger import ranger    
       from setup_ranger import ranger    
     
     
-    ranger('ranger_usersync')
+    ranger('ranger_usersync', upgrade_type=upgrade_type)
     
     
   def start(self, env, upgrade_type=None):
   def start(self, env, upgrade_type=None):
     import params
     import params
     env.set_params(params)
     env.set_params(params)
     
     
-    self.configure(env)
+    self.configure(env, upgrade_type=upgrade_type)
     ranger_service('ranger_usersync')
     ranger_service('ranger_usersync')
     
     
   def stop(self, env, upgrade_type=None):
   def stop(self, env, upgrade_type=None):
@@ -70,10 +70,6 @@ class RangerUsersync(Script):
     env.set_params(params)
     env.set_params(params)
     upgrade.prestart(env, "ranger-usersync")
     upgrade.prestart(env, "ranger-usersync")
 
 
-    if params.xml_configurations_supported:
-      from setup_ranger_xml import ranger
-      ranger('ranger_usersync', upgrade_type=upgrade_type)
-
   def get_stack_to_component(self):
   def get_stack_to_component(self):
     return {"HDP": "ranger-usersync"}
     return {"HDP": "ranger-usersync"}
 
 

+ 5 - 5
ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/setup_ranger.py

@@ -23,14 +23,14 @@ import os
 from resource_management import *
 from resource_management import *
 from resource_management.core.logger import Logger
 from resource_management.core.logger import Logger
 
 
-def ranger(name=None):
+def ranger(name=None, upgrade_type=None):
   if name == 'ranger_admin':
   if name == 'ranger_admin':
-    setup_ranger_admin()
+    setup_ranger_admin(upgrade_type=upgrade_type)
 
 
   if name == 'ranger_usersync':
   if name == 'ranger_usersync':
-    setup_usersync()
+    setup_usersync(upgrade_type=upgrade_type)
 
 
-def setup_ranger_admin():
+def setup_ranger_admin(upgrade_type=None):
   import params
   import params
 
 
   check_db_connnection()
   check_db_connnection()
@@ -84,7 +84,7 @@ def setup_ranger_admin():
     group = params.unix_group
     group = params.unix_group
   )
   )
 
 
-def setup_usersync():
+def setup_usersync(upgrade_type=None):
   import params
   import params
 
 
   PropertiesFile(format("{usersync_home}/install.properties"),
   PropertiesFile(format("{usersync_home}/install.properties"),

+ 67 - 55
ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/setup_ranger_xml.py

@@ -58,6 +58,7 @@ def setup_ranger_admin(upgrade_type=None):
   if upgrade_type is not None:
   if upgrade_type is not None:
     ranger_home = format("/usr/hdp/{version}/ranger-admin")
     ranger_home = format("/usr/hdp/{version}/ranger-admin")
     ranger_conf = format("/usr/hdp/{version}/ranger-admin/conf")
     ranger_conf = format("/usr/hdp/{version}/ranger-admin/conf")
+    copy_jdbc_connector(stack_version=params.version)
 
 
   File(format("/usr/lib/ambari-agent/{check_db_connection_jar_name}"),
   File(format("/usr/lib/ambari-agent/{check_db_connection_jar_name}"),
     content = DownloadSource(format("{jdk_location}{check_db_connection_jar_name}")),
     content = DownloadSource(format("{jdk_location}{check_db_connection_jar_name}")),
@@ -69,7 +70,7 @@ def setup_ranger_admin(upgrade_type=None):
     cp = cp + os.pathsep + format("{ranger_home}/ews/lib/{jdbc_jar_name}")
     cp = cp + os.pathsep + format("{ranger_home}/ews/lib/{jdbc_jar_name}")
   else:
   else:
     cp = cp + os.pathsep + format("{driver_curl_target}")
     cp = cp + os.pathsep + format("{driver_curl_target}")
-  cp = cp + os.pathsep + format("{ranger_home}/ews/webapp/WEB-INF/lib/*")
+  cp = cp + os.pathsep + format("{ranger_home}/ews/lib/*")
 
 
   db_connection_check_command = format(
   db_connection_check_command = format(
     "{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}")
     "{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}")
@@ -146,67 +147,22 @@ def setup_ranger_admin(upgrade_type=None):
   do_keystore_setup(upgrade_type=upgrade_type)
   do_keystore_setup(upgrade_type=upgrade_type)
 
 
 
 
-def setup_ranger_db(upgrade_type=None):
+def setup_ranger_db(stack_version=None):
   import params
   import params
   
   
-  File(params.downloaded_custom_connector,
-    content = DownloadSource(params.driver_curl_source),
-    mode = 0644
-  )
-
-  Directory(params.java_share_dir,
-    mode=0755,
-    create_parents = True,
-    cd_access="a"
-  )
-
-  if params.db_flavor.lower() != 'sqla':
-    Execute(('cp', '--remove-destination', params.downloaded_custom_connector, params.driver_curl_target),
-      path=["/bin", "/usr/bin/"],
-      sudo=True)
-
-    File(params.driver_curl_target, mode=0644)
-
   ranger_home = params.ranger_home
   ranger_home = params.ranger_home
-  if upgrade_type is not None:
-    ranger_home = format("/usr/hdp/{version}/ranger-admin")
-
-  if params.db_flavor.lower() == 'sqla':
-    Execute(('tar', '-xvf', params.downloaded_custom_connector, '-C', params.tmp_dir), sudo = True)
-
-    Execute(('cp', '--remove-destination', params.jar_path_in_archive, os.path.join(params.ranger_home, 'ews', 'lib')),
-      path=["/bin", "/usr/bin/"],
-      sudo=True)
-
-    Directory(params.jdbc_libs_dir,
-      cd_access="a",
-      create_parents = True)
-
-    Execute(as_sudo(['yes', '|', 'cp', params.libs_path_in_archive, params.jdbc_libs_dir], auto_escape=False),
-            path=["/bin", "/usr/bin/"])
-  else:
-    Execute(('cp', '--remove-destination', params.downloaded_custom_connector, os.path.join(params.ranger_home, 'ews', 'lib')),
-      path=["/bin", "/usr/bin/"],
-      sudo=True)
-
-  File(os.path.join(params.ranger_home, 'ews', 'lib',params.jdbc_jar_name), mode=0644)
+  version = params.version
+  if stack_version is not None:
+    ranger_home = format("/usr/hdp/{stack_version}/ranger-admin")
+    version = stack_version
 
 
-  ModifyPropertiesFile(format("{ranger_home}/install.properties"),
-    properties = params.config['configurations']['admin-properties'],
-    owner = params.unix_user,
-  )
+  copy_jdbc_connector(stack_version=version)
 
 
   ModifyPropertiesFile(format("{ranger_home}/install.properties"),
   ModifyPropertiesFile(format("{ranger_home}/install.properties"),
     properties = {'audit_store': params.ranger_audit_source_type},
     properties = {'audit_store': params.ranger_audit_source_type},
     owner = params.unix_user,
     owner = params.unix_user,
   )
   )
 
 
-  if params.db_flavor.lower() == 'sqla':
-    ModifyPropertiesFile(format("{ranger_home}/install.properties"),
-      properties = {'SQL_CONNECTOR_JAR': format('{ranger_home}/ews/lib/{jdbc_jar_name}')},
-      owner = params.unix_user,
-    )
-
   env_dict = {'RANGER_ADMIN_HOME':ranger_home, 'JAVA_HOME':params.java_home}
   env_dict = {'RANGER_ADMIN_HOME':ranger_home, 'JAVA_HOME':params.java_home}
   if params.db_flavor.lower() == 'sqla':
   if params.db_flavor.lower() == 'sqla':
     env_dict = {'RANGER_ADMIN_HOME':ranger_home, 'JAVA_HOME':params.java_home, 'LD_LIBRARY_PATH':params.ld_lib_path}
     env_dict = {'RANGER_ADMIN_HOME':ranger_home, 'JAVA_HOME':params.java_home, 'LD_LIBRARY_PATH':params.ld_lib_path}
@@ -231,12 +187,12 @@ def setup_ranger_db(upgrade_type=None):
   )
   )
 
 
 
 
-def setup_java_patch(upgrade_type=None):
+def setup_java_patch(stack_version=None):
   import params
   import params
 
 
   ranger_home = params.ranger_home
   ranger_home = params.ranger_home
-  if upgrade_type is not None:
-    ranger_home = format("/usr/hdp/{version}/ranger-admin")
+  if stack_version is not None:
+    ranger_home = format("/usr/hdp/{stack_version}/ranger-admin")
 
 
   env_dict = {'RANGER_ADMIN_HOME':ranger_home, 'JAVA_HOME':params.java_home}
   env_dict = {'RANGER_ADMIN_HOME':ranger_home, 'JAVA_HOME':params.java_home}
   if params.db_flavor.lower() == 'sqla':
   if params.db_flavor.lower() == 'sqla':
@@ -300,6 +256,62 @@ def password_validation(password):
     raise Fail("LDAP/AD bind password contains one of the unsupported special characters like \" ' \ `")
     raise Fail("LDAP/AD bind password contains one of the unsupported special characters like \" ' \ `")
   else:
   else:
     Logger.info("password validated")
     Logger.info("password validated")
+
+def copy_jdbc_connector(stack_version=None):
+  import params
+
+  File(params.downloaded_custom_connector,
+    content = DownloadSource(params.driver_curl_source),
+    mode = 0644
+  )
+
+  Directory(params.java_share_dir,
+    mode=0755,
+    recursive=True,
+    cd_access="a"
+  )
+
+  if params.db_flavor.lower() != 'sqla':
+    Execute(('cp', '--remove-destination', params.downloaded_custom_connector, params.driver_curl_target),
+      path=["/bin", "/usr/bin/"],
+      sudo=True)
+
+    File(params.driver_curl_target, mode=0644)
+
+  ranger_home = params.ranger_home
+  if stack_version is not None:
+    ranger_home = format("/usr/hdp/{stack_version}/ranger-admin")
+
+  if params.db_flavor.lower() == 'sqla':
+    Execute(('tar', '-xvf', params.downloaded_custom_connector, '-C', params.tmp_dir), sudo = True)
+
+    Execute(('cp', '--remove-destination', params.jar_path_in_archive, os.path.join(ranger_home, 'ews', 'lib')),
+      path=["/bin", "/usr/bin/"],
+      sudo=True)
+
+    Directory(params.jdbc_libs_dir,
+      cd_access="a",
+      recursive=True)
+
+    Execute(as_sudo(['yes', '|', 'cp', params.libs_path_in_archive, params.jdbc_libs_dir], auto_escape=False),
+            path=["/bin", "/usr/bin/"])
+  else:
+    Execute(('cp', '--remove-destination', params.downloaded_custom_connector, os.path.join(ranger_home, 'ews', 'lib')),
+      path=["/bin", "/usr/bin/"],
+      sudo=True)
+
+  File(os.path.join(ranger_home, 'ews', 'lib',params.jdbc_jar_name), mode=0644)
+
+  ModifyPropertiesFile(format("{ranger_home}/install.properties"),
+    properties = params.config['configurations']['admin-properties'],
+    owner = params.unix_user,
+  )
+
+  if params.db_flavor.lower() == 'sqla':
+    ModifyPropertiesFile(format("{ranger_home}/install.properties"),
+      properties = {'SQL_CONNECTOR_JAR': format('{ranger_home}/ews/lib/{jdbc_jar_name}')},
+      owner = params.unix_user,
+    )
  
  
 def setup_usersync(upgrade_type=None):
 def setup_usersync(upgrade_type=None):
   import params
   import params

+ 77 - 58
ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/package/scripts/kms.py

@@ -48,69 +48,24 @@ def password_validation(password, key):
   else:
   else:
     Logger.info("Password validated")
     Logger.info("Password validated")
 
 
-def setup_kms_db():
+def setup_kms_db(stack_version=None):
   import params
   import params
 
 
   if params.has_ranger_admin:
   if params.has_ranger_admin:
 
 
-    password_validation(params.kms_master_key_password, 'KMS master key')
-
-    File(params.downloaded_custom_connector,
-      content = DownloadSource(params.driver_curl_source),
-      mode = 0644
-    )
-
-    Directory(params.java_share_dir,
-      mode=0755,
-      create_parents = True,
-      cd_access="a"
-    )
-    
-    if params.db_flavor.lower() != 'sqla':
-      Execute(('cp', '--remove-destination', params.downloaded_custom_connector, params.driver_curl_target),
-          path=["/bin", "/usr/bin/"],
-          sudo=True)
-
-      File(params.driver_curl_target, mode=0644)
-
-    Directory(os.path.join(params.kms_home, 'ews', 'lib'),
-      mode=0755
-    )
-    
-    if params.db_flavor.lower() == 'sqla':
-      Execute(('tar', '-xvf', params.downloaded_custom_connector, '-C', params.tmp_dir), sudo = True)
+    kms_home = params.kms_home
+    version = params.version
+    if stack_version is not None:
+      kms_home = format("/usr/hdp/{stack_version}/ranger-kms")
+      version = stack_version
 
 
-      Execute(('cp', '--remove-destination', params.jar_path_in_archive, os.path.join(params.kms_home, 'ews', 'webapp', 'lib')),
-        path=["/bin", "/usr/bin/"],
-        sudo=True)
-
-      Directory(params.jdbc_libs_dir,
-        cd_access="a",
-        create_parents = True)
-
-      Execute(as_sudo(['yes', '|', 'cp', params.libs_path_in_archive, params.jdbc_libs_dir], auto_escape=False),
-        path=["/bin", "/usr/bin/"])
-    else:
-      Execute(('cp', '--remove-destination', params.downloaded_custom_connector, os.path.join(params.kms_home, 'ews', 'webapp', 'lib')),
-        path=["/bin", "/usr/bin/"],
-        sudo=True)
-
-    File(os.path.join(params.kms_home, 'ews', 'webapp', 'lib', params.jdbc_jar_name), mode=0644)
+    password_validation(params.kms_master_key_password, 'KMS master key')
 
 
-    ModifyPropertiesFile(format("/usr/hdp/current/ranger-kms/install.properties"),
-      properties = params.config['configurations']['kms-properties'],
-      owner = params.kms_user
-    )
+    copy_jdbc_connector(stack_version=version)
 
 
+    env_dict = {'RANGER_KMS_HOME':kms_home, 'JAVA_HOME': params.java_home}
     if params.db_flavor.lower() == 'sqla':
     if params.db_flavor.lower() == 'sqla':
-      ModifyPropertiesFile(format("{kms_home}/install.properties"),
-        properties = {'SQL_CONNECTOR_JAR': format('{kms_home}/ews/webapp/lib/{jdbc_jar_name}')},
-        owner = params.kms_user,
-      )
-
-    env_dict = {'RANGER_KMS_HOME':params.kms_home, 'JAVA_HOME': params.java_home}
-    if params.db_flavor.lower() == 'sqla':
-      env_dict = {'RANGER_KMS_HOME':params.kms_home, 'JAVA_HOME': params.java_home, 'LD_LIBRARY_PATH':params.ld_library_path}
+      env_dict = {'RANGER_KMS_HOME':kms_home, 'JAVA_HOME': params.java_home, 'LD_LIBRARY_PATH':params.ld_library_path}
 
 
     dba_setup = format('ambari-python-wrap {kms_home}/dba_script.py -q')
     dba_setup = format('ambari-python-wrap {kms_home}/dba_script.py -q')
     db_setup = format('ambari-python-wrap {kms_home}/db_setup.py')
     db_setup = format('ambari-python-wrap {kms_home}/db_setup.py')
@@ -127,11 +82,12 @@ def setup_java_patch():
 
 
   if params.has_ranger_admin:
   if params.has_ranger_admin:
 
 
+    kms_home = params.kms_home
     setup_java_patch = format('ambari-python-wrap {kms_home}/db_setup.py -javapatch')
     setup_java_patch = format('ambari-python-wrap {kms_home}/db_setup.py -javapatch')
 
 
-    env_dict = {'RANGER_KMS_HOME':params.kms_home, 'JAVA_HOME': params.java_home}
+    env_dict = {'RANGER_KMS_HOME':kms_home, 'JAVA_HOME': params.java_home}
     if params.db_flavor.lower() == 'sqla':
     if params.db_flavor.lower() == 'sqla':
-      env_dict = {'RANGER_KMS_HOME':params.kms_home, 'JAVA_HOME': params.java_home, 'LD_LIBRARY_PATH':params.ld_library_path}
+      env_dict = {'RANGER_KMS_HOME':kms_home, 'JAVA_HOME': params.java_home, 'LD_LIBRARY_PATH':params.ld_library_path}
 
 
     Execute(setup_java_patch, environment=env_dict, logoutput=True, user=params.kms_user, tries=5, try_sleep=10)
     Execute(setup_java_patch, environment=env_dict, logoutput=True, user=params.kms_user, tries=5, try_sleep=10)
 
 
@@ -168,7 +124,7 @@ def do_keystore_setup(cred_provider_path, credential_alias, credential_password)
       mode = 0640
       mode = 0640
     )
     )
 
 
-def kms():
+def kms(upgrade_type=None):
   import params
   import params
 
 
   if params.has_ranger_admin:
   if params.has_ranger_admin:
@@ -179,6 +135,9 @@ def kms():
       create_parents = True
       create_parents = True
     )
     )
 
 
+    if upgrade_type is not None:
+      copy_jdbc_connector(stack_version=params.version)
+
     File(format("/usr/lib/ambari-agent/{check_db_connection_jar_name}"),
     File(format("/usr/lib/ambari-agent/{check_db_connection_jar_name}"),
       content = DownloadSource(format("{jdk_location}{check_db_connection_jar_name}")),
       content = DownloadSource(format("{jdk_location}{check_db_connection_jar_name}")),
       mode = 0644,
       mode = 0644,
@@ -298,6 +257,66 @@ def kms():
       mode=0644
       mode=0644
     )
     )
 
 
+def copy_jdbc_connector(stack_version=None):
+  import params
+
+  kms_home = params.kms_home
+  if stack_version is not None:
+    kms_home = format("/usr/hdp/{stack_version}/ranger-kms")
+
+  File(params.downloaded_custom_connector,
+    content = DownloadSource(params.driver_curl_source),
+    mode = 0644
+  )
+
+  Directory(params.java_share_dir,
+    mode=0755,
+    recursive=True,
+    cd_access="a"
+  )
+
+  if params.db_flavor.lower() != 'sqla':
+    Execute(('cp', '--remove-destination', params.downloaded_custom_connector, params.driver_curl_target),
+        path=["/bin", "/usr/bin/"],
+        sudo=True)
+
+    File(params.driver_curl_target, mode=0644)
+
+  Directory(os.path.join(kms_home, 'ews', 'lib'),
+    mode=0755
+  )
+
+  if params.db_flavor.lower() == 'sqla':
+    Execute(('tar', '-xvf', params.downloaded_custom_connector, '-C', params.tmp_dir), sudo = True)
+
+    Execute(('cp', '--remove-destination', params.jar_path_in_archive, os.path.join(kms_home, 'ews', 'webapp', 'lib')),
+      path=["/bin", "/usr/bin/"],
+      sudo=True)
+
+    Directory(params.jdbc_libs_dir,
+      cd_access="a",
+      recursive=True)
+
+    Execute(as_sudo(['yes', '|', 'cp', params.libs_path_in_archive, params.jdbc_libs_dir], auto_escape=False),
+      path=["/bin", "/usr/bin/"])
+  else:
+    Execute(('cp', '--remove-destination', params.downloaded_custom_connector, os.path.join(kms_home, 'ews', 'webapp', 'lib')),
+      path=["/bin", "/usr/bin/"],
+      sudo=True)
+
+  File(os.path.join(kms_home, 'ews', 'webapp', 'lib', params.jdbc_jar_name), mode=0644)
+
+  ModifyPropertiesFile(format("{kms_home}/install.properties"),
+    properties = params.config['configurations']['kms-properties'],
+    owner = params.kms_user
+  )
+
+  if params.db_flavor.lower() == 'sqla':
+    ModifyPropertiesFile(format("{kms_home}/install.properties"),
+      properties = {'SQL_CONNECTOR_JAR': format('{kms_home}/ews/webapp/lib/{jdbc_jar_name}')},
+      owner = params.kms_user,
+    )
+
 def enable_kms_plugin():
 def enable_kms_plugin():
 
 
   import params
   import params

+ 14 - 2
ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/package/scripts/kms_server.py

@@ -17,6 +17,7 @@ See the License for the specific language governing permissions and
 limitations under the License.
 limitations under the License.
 
 
 """
 """
+from resource_management.libraries.functions import hdp_select
 from resource_management.libraries.script import Script
 from resource_management.libraries.script import Script
 from resource_management.core.resources.system import Execute
 from resource_management.core.resources.system import Execute
 from resource_management.core.exceptions import ComponentIsNotRunning
 from resource_management.core.exceptions import ComponentIsNotRunning
@@ -74,9 +75,20 @@ class KmsServer(Script):
     env.set_params(params)
     env.set_params(params)
 
 
     upgrade.prestart(env, "ranger-kms")
     upgrade.prestart(env, "ranger-kms")
-    setup_kms_db()
-    kms()
+    kms(upgrade_type=upgrade_type)
     setup_java_patch()
     setup_java_patch()
 
 
+  def setup_ranger_kms_database(self, env):
+    import params
+    env.set_params(params)
+
+    upgrade_stack = hdp_select._get_upgrade_stack()
+    if upgrade_stack is None:
+      raise Fail('Unable to determine the stack and stack version')
+
+    stack_version = upgrade_stack[1]
+    Logger.info(format('Setting Ranger KMS database schema, using version {stack_version}'))
+    setup_kms_db(stack_version=stack_version)
+
 if __name__ == "__main__":
 if __name__ == "__main__":
   KmsServer().execute()
   KmsServer().execute()

+ 14 - 0
ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/nonrolling-upgrade-2.3.xml

@@ -877,9 +877,23 @@
 
 
     <service name="RANGER">
     <service name="RANGER">
       <component name="RANGER_ADMIN">
       <component name="RANGER_ADMIN">
+        <pre-upgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Upgrading Ranger database schema">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_database</function>
+          </task>
+        </pre-upgrade>
+
         <upgrade>
         <upgrade>
           <task xsi:type="restart-task"/>
           <task xsi:type="restart-task"/>
         </upgrade>
         </upgrade>
+
+        <post-upgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Applying Ranger java patches">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_java_patches</function>
+          </task>
+        </post-upgrade>
       </component>
       </component>
 
 
       <component name="RANGER_USERSYNC">
       <component name="RANGER_USERSYNC">

+ 14 - 0
ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/nonrolling-upgrade-2.4.xml

@@ -942,9 +942,23 @@
 
 
     <service name="RANGER">
     <service name="RANGER">
       <component name="RANGER_ADMIN">
       <component name="RANGER_ADMIN">
+        <pre-upgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Upgrading Ranger database schema">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_database</function>
+          </task>
+        </pre-upgrade>
+
         <upgrade>
         <upgrade>
           <task xsi:type="restart-task"/>
           <task xsi:type="restart-task"/>
         </upgrade>
         </upgrade>
+
+        <post-upgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Applying Ranger java patches">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_java_patches</function>
+          </task>
+        </post-upgrade>
       </component>
       </component>
 
 
       <component name="RANGER_USERSYNC">
       <component name="RANGER_USERSYNC">

+ 12 - 0
ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.3.xml

@@ -453,11 +453,23 @@
           <task xsi:type="configure" id="hdp_2_3_0_0_update_ranger_admin_hdfs_audit"/>
           <task xsi:type="configure" id="hdp_2_3_0_0_update_ranger_admin_hdfs_audit"/>
 
 
           <task xsi:type="configure" id="hdp_2_3_0_0_update_ranger_admin_db_audit"/>
           <task xsi:type="configure" id="hdp_2_3_0_0_update_ranger_admin_db_audit"/>
+
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Upgrading Ranger database schema">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_database</function>
+          </task>
         </pre-upgrade>
         </pre-upgrade>
       
       
         <upgrade>
         <upgrade>
           <task xsi:type="restart-task"/>
           <task xsi:type="restart-task"/>
         </upgrade>
         </upgrade>
+
+        <post-upgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Applying Ranger java patches">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_java_patches</function>
+          </task>
+        </post-upgrade>
       </component>
       </component>
 
 
       <component name="RANGER_USERSYNC">
       <component name="RANGER_USERSYNC">

+ 12 - 0
ambari-server/src/main/resources/stacks/HDP/2.2/upgrades/upgrade-2.4.xml

@@ -459,11 +459,23 @@
           <task xsi:type="configure" id="hdp_2_3_0_0_update_ranger_admin_hdfs_audit"/>
           <task xsi:type="configure" id="hdp_2_3_0_0_update_ranger_admin_hdfs_audit"/>
 
 
           <task xsi:type="configure" id="hdp_2_3_0_0_update_ranger_admin_db_audit"/>
           <task xsi:type="configure" id="hdp_2_3_0_0_update_ranger_admin_db_audit"/>
+
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Upgrading Ranger database schema">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_database</function>
+          </task>
         </pre-upgrade>
         </pre-upgrade>
       
       
         <upgrade>
         <upgrade>
           <task xsi:type="restart-task"/>
           <task xsi:type="restart-task"/>
         </upgrade>
         </upgrade>
+
+        <post-upgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Applying Ranger java patches">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_java_patches</function>
+          </task>
+        </post-upgrade>
       </component>
       </component>
 
 
       <component name="RANGER_USERSYNC">
       <component name="RANGER_USERSYNC">

+ 46 - 1
ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.3.xml

@@ -169,7 +169,10 @@
 
 
       <execute-stage service="RANGER" component="RANGER_ADMIN" title="Backup Ranger Database">
       <execute-stage service="RANGER" component="RANGER_ADMIN" title="Backup Ranger Database">
         <task xsi:type="manual">
         <task xsi:type="manual">
-          <message>Before continuing, please backup the Ranger Admin database and Ranger Audit database on the following host(s): {{hosts.all}}.</message>
+          <message>Before continuing, please backup the Ranger Admin database and Ranger Audit database on the following host(s): {{hosts.all}}. If audit database size is too large (greater than 3GB) then follow the below instructions:
+            1. Backup the audit table from audit database.
+            2. Truncate audit table.
+            3. Follow upgrade process and once completed then restore audit data to audit table.</message>
         </task>
         </task>
       </execute-stage>
       </execute-stage>
 
 
@@ -667,9 +670,37 @@
 
 
     <service name="RANGER">
     <service name="RANGER">
       <component name="RANGER_ADMIN">
       <component name="RANGER_ADMIN">
+        <pre-upgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Upgrading Ranger database schema">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_database</function>
+          </task>
+        </pre-upgrade>
+
+        <pre-downgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Downgrading Ranger database schema">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_database</function>
+          </task>
+        </pre-downgrade>
+
         <upgrade>
         <upgrade>
           <task xsi:type="restart-task"/>
           <task xsi:type="restart-task"/>
         </upgrade>
         </upgrade>
+
+        <post-upgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Applying Ranger java patches">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_java_patches</function>
+          </task>
+        </post-upgrade>
+
+        <post-downgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Applying Ranger java patches">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_java_patches</function>
+          </task>
+        </post-downgrade>
       </component>
       </component>
 
 
       <component name="RANGER_USERSYNC">
       <component name="RANGER_USERSYNC">
@@ -681,6 +712,20 @@
 
 
     <service name="RANGER_KMS">
     <service name="RANGER_KMS">
       <component name="RANGER_KMS_SERVER">
       <component name="RANGER_KMS_SERVER">
+        <pre-upgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Upgrading Ranger KMS database schema">
+            <script>scripts/kms_server.py</script>
+            <function>setup_ranger_kms_database</function>
+          </task>
+        </pre-upgrade>
+
+        <pre-downgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Downgrading Ranger KMS database schema">
+            <script>scripts/kms_server.py</script>
+            <function>setup_ranger_kms_database</function>
+          </task>
+        </pre-downgrade>
+
         <upgrade>
         <upgrade>
           <task xsi:type="restart-task"/>
           <task xsi:type="restart-task"/>
         </upgrade>
         </upgrade>

+ 46 - 1
ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/nonrolling-upgrade-2.4.xml

@@ -169,7 +169,10 @@
 
 
       <execute-stage service="RANGER" component="RANGER_ADMIN" title="Backup Ranger Database">
       <execute-stage service="RANGER" component="RANGER_ADMIN" title="Backup Ranger Database">
         <task xsi:type="manual">
         <task xsi:type="manual">
-          <message>Before continuing, please backup the Ranger Admin database and Ranger Audit database on the following host(s): {{hosts.all}}.</message>
+          <message>Before continuing, please backup the Ranger Admin database and Ranger Audit database on the following host(s): {{hosts.all}}. If audit database size is too large (greater than 3GB) then follow the below instructions:
+            1. Backup the audit table from audit database.
+            2. Truncate audit table.
+            3. Follow upgrade process and once completed then restore audit data to audit table.</message>
         </task>
         </task>
       </execute-stage>
       </execute-stage>
 
 
@@ -701,9 +704,37 @@
 
 
     <service name="RANGER">
     <service name="RANGER">
       <component name="RANGER_ADMIN">
       <component name="RANGER_ADMIN">
+        <pre-upgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Upgrading Ranger database schema">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_database</function>
+          </task>
+        </pre-upgrade>
+
+        <pre-downgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Downgrading Ranger database schema">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_database</function>
+          </task>
+        </pre-downgrade>
+
         <upgrade>
         <upgrade>
           <task xsi:type="restart-task"/>
           <task xsi:type="restart-task"/>
         </upgrade>
         </upgrade>
+
+        <post-upgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Applying Ranger java patches">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_java_patches</function>
+          </task>
+        </post-upgrade>
+
+        <post-downgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Applying Ranger java patches">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_java_patches</function>
+          </task>
+        </post-downgrade>
       </component>
       </component>
 
 
       <component name="RANGER_USERSYNC">
       <component name="RANGER_USERSYNC">
@@ -715,6 +746,20 @@
 
 
     <service name="RANGER_KMS">
     <service name="RANGER_KMS">
       <component name="RANGER_KMS_SERVER">
       <component name="RANGER_KMS_SERVER">
+        <pre-upgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Upgrading Ranger KMS database schema">
+            <script>scripts/kms_server.py</script>
+            <function>setup_ranger_kms_database</function>
+          </task>
+        </pre-upgrade>
+
+        <pre-downgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Downgrading Ranger KMS database schema">
+            <script>scripts/kms_server.py</script>
+            <function>setup_ranger_kms_database</function>
+          </task>
+        </pre-downgrade>
+
         <upgrade>
         <upgrade>
           <task xsi:type="restart-task"/>
           <task xsi:type="restart-task"/>
         </upgrade>
         </upgrade>

+ 42 - 0
ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.3.xml

@@ -452,9 +452,37 @@
 
 
     <service name="RANGER">
     <service name="RANGER">
       <component name="RANGER_ADMIN">
       <component name="RANGER_ADMIN">
+        <pre-upgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Upgrading Ranger database schema">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_database</function>
+          </task>
+        </pre-upgrade>
+
+        <pre-downgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Downgrading Ranger database schema">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_database</function>
+          </task>
+        </pre-downgrade>
+
         <upgrade>
         <upgrade>
           <task xsi:type="restart-task"/>
           <task xsi:type="restart-task"/>
         </upgrade>
         </upgrade>
+
+        <post-upgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Applying Ranger java patches">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_java_patches</function>
+          </task>
+        </post-upgrade>
+
+        <post-downgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Applying Ranger java patches">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_java_patches</function>
+          </task>
+        </post-downgrade>
       </component>
       </component>
 
 
       <component name="RANGER_USERSYNC">
       <component name="RANGER_USERSYNC">
@@ -466,6 +494,20 @@
 
 
     <service name="RANGER_KMS">
     <service name="RANGER_KMS">
       <component name="RANGER_KMS_SERVER">
       <component name="RANGER_KMS_SERVER">
+        <pre-upgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Upgrading Ranger KMS database schema">
+            <script>scripts/kms_server.py</script>
+            <function>setup_ranger_kms_database</function>
+          </task>
+        </pre-upgrade>
+
+        <pre-downgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Downgrading Ranger KMS database schema">
+            <script>scripts/kms_server.py</script>
+            <function>setup_ranger_kms_database</function>
+          </task>
+        </pre-downgrade>
+
         <upgrade>
         <upgrade>
           <task xsi:type="restart-task"/>
           <task xsi:type="restart-task"/>
         </upgrade>
         </upgrade>

+ 63 - 1
ambari-server/src/main/resources/stacks/HDP/2.3/upgrades/upgrade-2.4.xml

@@ -101,6 +101,12 @@
                 3. Follow upgrade process and once completed then restore audit data to audit table.</message>
                 3. Follow upgrade process and once completed then restore audit data to audit table.</message>
         </task>
         </task>
       </execute-stage>
       </execute-stage>
+
+      <execute-stage service="RANGER_KMS" component="RANGER_KMS_SERVER" title="Pre Upgrade Ranger KMS Backup">
+        <task xsi:type="manual">
+          <message>Before continuing, please backup Ranger KMS database on the following host(s): {{hosts.all}}.</message>
+        </task>
+      </execute-stage>
     </group>
     </group>
 
 
     <group name="ZOOKEEPER" title="ZooKeeper">
     <group name="ZOOKEEPER" title="ZooKeeper">
@@ -118,6 +124,14 @@
       </service>
       </service>
     </group>
     </group>
 
 
+    <group name="RANGER_KMS" title="Ranger_KMS">
+      <skippable>true</skippable>
+      <supports-auto-skip-failure>false</supports-auto-skip-failure>
+      <service name="RANGER_KMS">
+        <component>RANGER_KMS_SERVER</component>
+      </service>
+    </group>
+
     <group name="CORE_MASTER" title="Core Masters">
     <group name="CORE_MASTER" title="Core Masters">
       <service-check>false</service-check>
       <service-check>false</service-check>
       <service name="HDFS">
       <service name="HDFS">
@@ -418,11 +432,37 @@
 
 
     <service name="RANGER">
     <service name="RANGER">
       <component name="RANGER_ADMIN">
       <component name="RANGER_ADMIN">
-        <pre-downgrade /> <!--  no-op to prevent config changes on downgrade -->
+        <pre-upgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Upgrading Ranger database schema">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_database</function>
+          </task>
+        </pre-upgrade>
+
+        <pre-downgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Downgrading Ranger database schema">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_database</function>
+          </task>
+        </pre-downgrade>
 
 
         <upgrade>
         <upgrade>
           <task xsi:type="restart-task" />
           <task xsi:type="restart-task" />
         </upgrade>
         </upgrade>
+
+        <post-upgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Applying Ranger java patches">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_java_patches</function>
+          </task>
+        </post-upgrade>
+
+        <post-downgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Applying Ranger java patches">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_java_patches</function>
+          </task>
+        </post-downgrade>
       </component>
       </component>
 
 
       <component name="RANGER_USERSYNC">
       <component name="RANGER_USERSYNC">
@@ -432,6 +472,28 @@
       </component>
       </component>
     </service>
     </service>
 
 
+    <service name="RANGER_KMS">
+      <component name="RANGER_KMS_SERVER">
+        <pre-upgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Upgrading Ranger KMS database schema">
+            <script>scripts/kms_server.py</script>
+            <function>setup_ranger_kms_database</function>
+          </task>
+        </pre-upgrade>
+
+        <pre-downgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Downgrading Ranger KMS database schema">
+            <script>scripts/kms_server.py</script>
+            <function>setup_ranger_kms_database</function>
+          </task>
+        </pre-downgrade>
+
+        <upgrade>
+          <task xsi:type="restart-task" />
+        </upgrade>
+      </component>
+    </service>
+
     <service name="HDFS">
     <service name="HDFS">
       <component name="NAMENODE">
       <component name="NAMENODE">
         <pre-downgrade /> <!--  no-op to prevent config changes on downgrade -->
         <pre-downgrade /> <!--  no-op to prevent config changes on downgrade -->

+ 46 - 1
ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/nonrolling-upgrade-2.4.xml

@@ -170,7 +170,10 @@
 
 
       <execute-stage service="RANGER" component="RANGER_ADMIN" title="Backup Ranger Database">
       <execute-stage service="RANGER" component="RANGER_ADMIN" title="Backup Ranger Database">
         <task xsi:type="manual">
         <task xsi:type="manual">
-          <message>Before continuing, please backup the Ranger Admin database and Ranger Audit database on the following host(s): {{hosts.all}}.</message>
+          <message>Before continuing, please backup the Ranger Admin database and Ranger Audit database on the following host(s): {{hosts.all}}. If audit database size is too large (greater than 3GB) then follow the below instructions:
+            1. Backup the audit table from audit database.
+            2. Truncate audit table.
+            3. Follow upgrade process and once completed then restore audit data to audit table.</message>
         </task>
         </task>
       </execute-stage>
       </execute-stage>
 
 
@@ -662,9 +665,37 @@
 
 
     <service name="RANGER">
     <service name="RANGER">
       <component name="RANGER_ADMIN">
       <component name="RANGER_ADMIN">
+        <pre-upgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Upgrading Ranger database schema">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_database</function>
+          </task>
+        </pre-upgrade>
+
+        <pre-downgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Downgrading Ranger database schema">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_database</function>
+          </task>
+        </pre-downgrade>
+
         <upgrade>
         <upgrade>
           <task xsi:type="restart-task"/>
           <task xsi:type="restart-task"/>
         </upgrade>
         </upgrade>
+
+        <post-upgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Applying Ranger java patches">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_java_patches</function>
+          </task>
+        </post-upgrade>
+
+        <post-downgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Applying Ranger java patches">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_java_patches</function>
+          </task>
+        </post-downgrade>
       </component>
       </component>
 
 
       <component name="RANGER_USERSYNC">
       <component name="RANGER_USERSYNC">
@@ -676,6 +707,20 @@
 
 
     <service name="RANGER_KMS">
     <service name="RANGER_KMS">
       <component name="RANGER_KMS_SERVER">
       <component name="RANGER_KMS_SERVER">
+        <pre-upgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Upgrading Ranger KMS database schema">
+            <script>scripts/kms_server.py</script>
+            <function>setup_ranger_kms_database</function>
+          </task>
+        </pre-upgrade>
+
+        <pre-downgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Downgrading Ranger KMS database schema">
+            <script>scripts/kms_server.py</script>
+            <function>setup_ranger_kms_database</function>
+          </task>
+        </pre-downgrade>
+
         <upgrade>
         <upgrade>
           <task xsi:type="restart-task"/>
           <task xsi:type="restart-task"/>
         </upgrade>
         </upgrade>

+ 42 - 0
ambari-server/src/main/resources/stacks/HDP/2.4/upgrades/upgrade-2.4.xml

@@ -450,9 +450,37 @@
 
 
     <service name="RANGER">
     <service name="RANGER">
       <component name="RANGER_ADMIN">
       <component name="RANGER_ADMIN">
+        <pre-upgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Upgrading Ranger database schema">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_database</function>
+          </task>
+        </pre-upgrade>
+
+        <pre-downgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Downgrading Ranger database schema">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_database</function>
+          </task>
+        </pre-downgrade>
+
         <upgrade>
         <upgrade>
           <task xsi:type="restart-task" />
           <task xsi:type="restart-task" />
         </upgrade>
         </upgrade>
+
+        <post-upgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Applying Ranger java patches">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_java_patches</function>
+          </task>
+        </post-upgrade>
+
+        <post-downgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Applying Ranger java patches">
+            <script>scripts/ranger_admin.py</script>
+            <function>setup_ranger_java_patches</function>
+          </task>
+        </post-downgrade>
       </component>
       </component>
 
 
       <component name="RANGER_USERSYNC">
       <component name="RANGER_USERSYNC">
@@ -464,6 +492,20 @@
 
 
     <service name="RANGER_KMS">
     <service name="RANGER_KMS">
       <component name="RANGER_KMS_SERVER">
       <component name="RANGER_KMS_SERVER">
+        <pre-upgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Upgrading Ranger KMS database schema">
+            <script>scripts/kms_server.py</script>
+            <function>setup_ranger_kms_database</function>
+          </task>
+        </pre-upgrade>
+
+        <pre-downgrade>
+          <task xsi:type="execute" hosts="any" sequential="true" summary="Downgrading Ranger KMS database schema">
+            <script>scripts/kms_server.py</script>
+            <function>setup_ranger_kms_database</function>
+          </task>
+        </pre-downgrade>
+
         <upgrade>
         <upgrade>
           <task xsi:type="restart-task" />
           <task xsi:type="restart-task" />
         </upgrade>
         </upgrade>