Преглед изворни кода

AMBARI-18905 - Management pack purge option should support extensions

Tim Thorpe пре 8 година
родитељ
комит
0ea79d3ee5

+ 7 - 1
ambari-server/src/main/python/ambari_server/setupMpacks.py

@@ -51,6 +51,7 @@ logger = logging.getLogger(__name__)
 MPACKS_REPLAY_LOG_FILENAME = "mpacks_replay.log"
 MPACKS_CACHE_DIRNAME = "cache"
 STACK_DEFINITIONS_RESOURCE_NAME = "stack-definitions"
+EXTENSION_DEFINITIONS_RESOURCE_NAME = "extension-definitions"
 SERVICE_DEFINITIONS_RESOURCE_NAME = "service-definitions"
 MPACKS_RESOURCE_NAME = "mpacks"
 
@@ -70,6 +71,7 @@ STACK_ADDON_SERVICE_DEFINITIONS_ARTIFACT_NAME = "stack-addon-service-definitions
 RESOURCE_FRIENDLY_NAMES = {
   STACK_DEFINITIONS_RESOURCE_NAME : "stack definitions",
   SERVICE_DEFINITIONS_RESOURCE_NAME: "service definitions",
+  EXTENSION_DEFINITIONS_RESOURCE_NAME: "extension definitions",
   MPACKS_RESOURCE_NAME: "management packs"
 }
 
@@ -309,7 +311,7 @@ def validate_purge(options, purge_list, mpack_dir, mpack_metadata, replay_mode=F
       err = "The management pack you are attempting to install does not contain {0}. Since this management pack " \
             "does not contain a stack, the --purge option with --purge-list={1} would cause your existing Ambari " \
             "installation to be unusable. Due to that we cannot install this management pack.".format(
-          RESOURCE_FRIENDLY_NAMES[STACK_DEFINITIONS_ARTIFACT_NAME], purge_list)
+          RESOURCE_FRIENDLY_NAMES[STACK_DEFINITIONS_RESOURCE_NAME], purge_list)
       print_error_msg(err)
       raise FatalException(1, err)
     else:
@@ -352,6 +354,10 @@ def purge_stacks_and_mpacks(purge_list, replay_mode=False):
       if(os.path.isdir(path)):
         sudo.rmtree(path)
 
+  if EXTENSION_DEFINITIONS_RESOURCE_NAME in purge_list and os.path.exists(extension_location):
+    print_info_msg("Purging extension location: " + extension_location)
+    sudo.rmtree(extension_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)

+ 12 - 1
ambari-server/src/test/python/TestMpacks.py

@@ -49,7 +49,8 @@ with patch.object(platform, "linux_distribution", return_value = MagicMock(retur
 
 from ambari_server.setupMpacks import install_mpack, upgrade_mpack, replay_mpack_logs, \
   purge_stacks_and_mpacks, validate_purge, read_mpack_metadata, \
-  STACK_DEFINITIONS_RESOURCE_NAME, SERVICE_DEFINITIONS_RESOURCE_NAME, MPACKS_RESOURCE_NAME
+  STACK_DEFINITIONS_RESOURCE_NAME, EXTENSION_DEFINITIONS_RESOURCE_NAME, \
+  SERVICE_DEFINITIONS_RESOURCE_NAME, MPACKS_RESOURCE_NAME
 
 with patch.object(os, "geteuid", new=MagicMock(return_value=0)):
   from resource_management.core import sudo
@@ -153,6 +154,7 @@ class TestMpacks(TestCase):
     options = self._create_empty_options_mock()
     get_ambari_version_mock.return_value = configs
     stacks_directory = configs[serverConfiguration.STACK_LOCATION_KEY]
+    extensions_directory = configs[serverConfiguration.EXTENSION_PATH_PROPERTY]
     common_services_directory = configs[serverConfiguration.COMMON_SERVICES_PATH_PROPERTY]
     mpacks_directory = configs[serverConfiguration.MPACKS_STAGING_PATH_PROPERTY]
     os_path_exists_mock.return_value = False
@@ -177,6 +179,15 @@ class TestMpacks(TestCase):
     ]
     os_path_exists_mock.assert_has_calls(os_path_exists_calls)
 
+    options.purge_list = ",".join([STACK_DEFINITIONS_RESOURCE_NAME, EXTENSION_DEFINITIONS_RESOURCE_NAME, MPACKS_RESOURCE_NAME])
+    purge_stacks_and_mpacks(options.purge_list.split(","))
+    os_path_exists_calls = [
+      call(stacks_directory),
+      call(extensions_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(","))