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

ambari git commit: AMBARI-15964: Add purge-list option for management packs (jluniya)

Repository: ambari
Updated Branches:
  refs/heads/trunk 1fc8fe9fa -> d4ee11cc0


AMBARI-15964: Add purge-list option for management packs (jluniya)


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

Branch: refs/heads/trunk
Commit: d4ee11cc087254a26434d5f7cd9677c3096e8eba
Parents: 1fc8fe9
Author: Jayush Luniya <jl...@hortonworks.com>
Authored: Tue Apr 19 11:05:47 2016 -0700
Committer: Jayush Luniya <jl...@hortonworks.com>
Committed: Tue Apr 19 11:05:47 2016 -0700

----------------------------------------------------------------------
 ambari-server/src/main/python/ambari-server.py  | 17 ++++++--
 .../main/python/ambari_server/setupMpacks.py    | 25 +++++++----
 ambari-server/src/test/python/TestMpacks.py     | 44 +++++++++++++++++++-
 3 files changed, 75 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/d4ee11cc/ambari-server/src/main/python/ambari-server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/python/ambari-server.py b/ambari-server/src/main/python/ambari-server.py
index e34467c..d211e9c 100755
--- a/ambari-server/src/main/python/ambari-server.py
+++ b/ambari-server/src/main/python/ambari-server.py
@@ -36,7 +36,8 @@ from ambari_server.serverUtils import is_server_runing, refresh_stack_hash
 from ambari_server.serverSetup import reset, setup, setup_jce_policy
 from ambari_server.serverUpgrade import upgrade, upgrade_stack, set_current
 from ambari_server.setupHttps import setup_https, setup_truststore
-from ambari_server.setupMpacks import install_mpack, upgrade_mpack
+from ambari_server.setupMpacks import install_mpack, upgrade_mpack, STACK_DEFINITIONS_RESOURCE_NAME, \
+  SERVICE_DEFINITIONS_RESOURCE_NAME, MPACKS_RESOURCE_NAME
 from ambari_server.setupSso import setup_sso
 from ambari_server.dbCleanup import db_cleanup
 from ambari_server.hostUpdate import update_host_names
@@ -334,8 +335,13 @@ def init_parser_options(parser):
                     help="Specified the path for management pack to be installed/upgraded",
                     dest="mpack_path")
   parser.add_option('--purge', action="store_true", default=False,
-                    help="Purge existing stack definitions and previously installed management packs",
+                    help="Purge existing resources specified in purge-list",
                     dest="purge")
+  purge_resources = ",".join([STACK_DEFINITIONS_RESOURCE_NAME, SERVICE_DEFINITIONS_RESOURCE_NAME, MPACKS_RESOURCE_NAME])
+  default_purge_resources = ",".join([STACK_DEFINITIONS_RESOURCE_NAME, MPACKS_RESOURCE_NAME])
+  parser.add_option('--purge-list', default=default_purge_resources,
+                    help="Comma separated list of resources to purge ({0}). By default ({1}) will be purged.".format(purge_resources, default_purge_resources),
+                    dest="purge_list")
   parser.add_option('--force', action="store_true", default=False, help="Force install management pack", dest="force")
   # -b and -i the remaining available short options
   # -h reserved for help
@@ -409,8 +415,13 @@ def init_parser_options(parser):
                     help="Specified the path for management pack to be installed/upgraded",
                     dest="mpack_path")
   parser.add_option('--purge', action="store_true", default=False,
-                    help="Purge existing stack definitions and previously installed management packs",
+                    help="Purge existing resources specified in purge-list",
                     dest="purge")
+  purge_resources = ",".join([STACK_DEFINITIONS_RESOURCE_NAME, SERVICE_DEFINITIONS_RESOURCE_NAME, MPACKS_RESOURCE_NAME])
+  default_purge_resources = ",".join([STACK_DEFINITIONS_RESOURCE_NAME, MPACKS_RESOURCE_NAME])
+  parser.add_option('--purge-list', default=default_purge_resources,
+                    help="Comma separated list of resources to purge ({0}). By default ({1}) will be purged.".format(purge_resources, default_purge_resources),
+                    dest="purge_list")
   parser.add_option('--force', action="store_true", default=False, help="Force install management pack", dest="force")
 
   parser.add_option('--ldap-url', default=None, help="Primary url for LDAP", dest="ldap_url")

http://git-wip-us.apache.org/repos/asf/ambari/blob/d4ee11cc/ambari-server/src/main/python/ambari_server/setupMpacks.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/python/ambari_server/setupMpacks.py b/ambari-server/src/main/python/ambari_server/setupMpacks.py
index 3aa071f..6994cbd 100644
--- a/ambari-server/src/main/python/ambari_server/setupMpacks.py
+++ b/ambari-server/src/main/python/ambari_server/setupMpacks.py
@@ -38,6 +38,9 @@ from ambari_server.setupActions import INSTALL_MPACK_ACTION, UPGRADE_MPACK_ACTIO
 
 MPACKS_REPLAY_LOG_FILENAME = "mpacks_replay.log"
 MPACKS_CACHE_DIRNAME = "cache"
+STACK_DEFINITIONS_RESOURCE_NAME = "stack-definitions"
+SERVICE_DEFINITIONS_RESOURCE_NAME = "service-definitions"
+MPACKS_RESOURCE_NAME = "mpacks"
 
 class _named_dict(dict):
   """
@@ -180,7 +183,7 @@ def remove_symlinks(stack_location, service_definitions_location, staged_mpack_d
           print_info_msg("Removing symlink {0}".format(dir))
           sudo.unlink(dir)
 
-def purge_stacks_and_mpacks(replay_mode=False):
+def purge_stacks_and_mpacks(purge_list, replay_mode=False):
   """
   Purge all stacks and management packs
   :param replay_mode: Flag to indicate if purging in replay mode
@@ -190,16 +193,24 @@ def purge_stacks_and_mpacks(replay_mode=False):
 
   print_info_msg("Purging existing stack definitions and management packs")
 
-  if os.path.exists(stack_location):
+  if not purge_list:
+    print_info_msg("Nothing to purge")
+    return
+
+  # Don't delete default stack_advisor.py (stacks/stack_advisor.py)
+  if STACK_DEFINITIONS_RESOURCE_NAME in purge_list and os.path.exists(stack_location):
     print_info_msg("Purging stack location: " + stack_location)
-    sudo.rmtree(stack_location)
+    for file in sorted(os.listdir(stack_location)):
+      path = os.path.join(stack_location, file)
+      if(os.path.isdir(path)):
+        sudo.rmtree(path)
 
-  if os.path.exists(service_definitions_location):
+  if SERVICE_DEFINITIONS_RESOURCE_NAME in purge_list and os.path.exists(service_definitions_location):
     print_info_msg("Purging service definitions location: " + service_definitions_location)
     sudo.rmtree(service_definitions_location)
 
   # Don't purge mpacks staging directory in replay mode
-  if os.path.exists(mpacks_staging_location) and not replay_mode:
+  if MPACKS_RESOURCE_NAME in purge_list and not replay_mode and os.path.exists(mpacks_staging_location):
     print_info_msg("Purging mpacks staging location: " + mpacks_staging_location)
     sudo.rmtree(mpacks_staging_location)
     sudo.makedir(mpacks_staging_location, 0755)
@@ -537,8 +548,8 @@ def _install_mpack(options, replay_mode=False):
     validate_mpack_prerequisites(mpack_metadata)
 
   # Purge previously installed stacks and management packs
-  if options.purge:
-    purge_stacks_and_mpacks(replay_mode)
+  if options.purge and options.purge_list:
+    purge_stacks_and_mpacks(options.purge_list.split(","), replay_mode)
 
   # Get ambari mpack properties
   stack_location, service_definitions_location, mpacks_staging_location = get_mpack_properties()

http://git-wip-us.apache.org/repos/asf/ambari/blob/d4ee11cc/ambari-server/src/test/python/TestMpacks.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/TestMpacks.py b/ambari-server/src/test/python/TestMpacks.py
index 68e00ee..63dd643 100644
--- a/ambari-server/src/test/python/TestMpacks.py
+++ b/ambari-server/src/test/python/TestMpacks.py
@@ -18,7 +18,8 @@ limitations under the License.
 import os
 from mock.mock import patch, MagicMock, call
 from ambari_commons.exceptions import FatalException
-from ambari_server.setupMpacks import install_mpack, upgrade_mpack, replay_mpack_logs
+from ambari_server.setupMpacks import install_mpack, upgrade_mpack, replay_mpack_logs, purge_stacks_and_mpacks, \
+  STACK_DEFINITIONS_RESOURCE_NAME, SERVICE_DEFINITIONS_RESOURCE_NAME, MPACKS_RESOURCE_NAME
 from unittest import TestCase
 from ambari_server.serverConfiguration import STACK_LOCATION_KEY, COMMON_SERVICES_PATH_PROPERTY, MPACKS_STAGING_PATH_PROPERTY
 
@@ -65,6 +66,45 @@ class TestMpacks(TestCase):
     self.assertTrue(fail)
 
   @patch("os.path.exists")
+  @patch("ambari_server.setupMpacks.get_ambari_properties")
+  def test_purge_stacks_and_mpacks(self, get_ambari_version_mock, os_path_exists_mock):
+    options = self._create_empty_options_mock()
+    get_ambari_version_mock.return_value = configs
+    stacks_directory = configs[STACK_LOCATION_KEY]
+    common_services_directory = configs[COMMON_SERVICES_PATH_PROPERTY]
+    mpacks_directory = configs[MPACKS_STAGING_PATH_PROPERTY]
+    os_path_exists_mock.return_value = False
+
+    purge_stacks_and_mpacks(None)
+    os_path_exists_calls = []
+    os_path_exists_mock.assert_has_calls(os_path_exists_calls)
+
+    purge_stacks_and_mpacks(options.purge_list.split(","))
+    os_path_exists_calls = [
+      call(stacks_directory),
+      call(mpacks_directory)
+    ]
+    os_path_exists_mock.assert_has_calls(os_path_exists_calls)
+
+    options.purge_list = ",".join([STACK_DEFINITIONS_RESOURCE_NAME, SERVICE_DEFINITIONS_RESOURCE_NAME, MPACKS_RESOURCE_NAME])
+    purge_stacks_and_mpacks(options.purge_list.split(","))
+    os_path_exists_calls = [
+      call(stacks_directory),
+      call(common_services_directory),
+      call(mpacks_directory)
+    ]
+    os_path_exists_mock.assert_has_calls(os_path_exists_calls)
+
+    options.purge_list = ",".join([STACK_DEFINITIONS_RESOURCE_NAME, SERVICE_DEFINITIONS_RESOURCE_NAME, MPACKS_RESOURCE_NAME])
+    options.replay_mode = True
+    purge_stacks_and_mpacks(options.purge_list.split(","))
+    os_path_exists_calls = [
+      call(stacks_directory),
+      call(common_services_directory)
+    ]
+    os_path_exists_mock.assert_has_calls(os_path_exists_calls)
+
+  @patch("os.path.exists")
   @patch("ambari_server.setupMpacks.extract_archive")
   @patch("ambari_server.setupMpacks.get_archive_root_dir")
   @patch("ambari_server.setupMpacks.download_mpack")
@@ -443,6 +483,8 @@ class TestMpacks(TestCase):
     options = MagicMock()
     options.mpack_path = None
     options.purge = None
+    options.purge_list = ",".join([STACK_DEFINITIONS_RESOURCE_NAME, MPACKS_RESOURCE_NAME])
     options.force = None
     options.verbose = None
+    options.replay_mode = False
     return options
\ No newline at end of file