You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by mr...@apache.org on 2017/05/10 05:12:22 UTC

ambari git commit: AMBARI-20974: Ambari fails to start due to NPE after installation of HDF mpack (mradhakrishnan)

Repository: ambari
Updated Branches:
  refs/heads/branch-2.5 ea936070a -> fc17c82b8


AMBARI-20974: Ambari fails to start due to NPE after installation of HDF mpack (mradhakrishnan)


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

Branch: refs/heads/branch-2.5
Commit: fc17c82b84030197c3e3c1e5c2ddcdb865d97365
Parents: ea93607
Author: Madhuvanthi Radhakrishnan <mr...@hortonworks.com>
Authored: Tue May 9 22:04:35 2017 -0700
Committer: Madhuvanthi Radhakrishnan <mr...@hortonworks.com>
Committed: Tue May 9 22:04:35 2017 -0700

----------------------------------------------------------------------
 .../main/python/ambari_server/setupMpacks.py    | 38 ++++++++++++++++++--
 ambari-server/src/test/python/TestMpacks.py     | 17 ++++++---
 2 files changed, 48 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/fc17c82b/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 167f264..09473dc 100755
--- a/ambari-server/src/main/python/ambari_server/setupMpacks.py
+++ b/ambari-server/src/main/python/ambari_server/setupMpacks.py
@@ -29,7 +29,7 @@ from ambari_server.serverClassPath import ServerClassPath
 from ambari_commons.exceptions import FatalException
 from ambari_commons.inet_utils import download_file
 from ambari_commons.logging_utils import print_info_msg, print_error_msg, print_warning_msg
-from ambari_commons.os_utils import copy_file, run_os_command
+from ambari_commons.os_utils import copy_file, run_os_command, change_owner, set_file_permissions
 from ambari_server.serverConfiguration import get_ambari_properties, get_ambari_version, get_stack_location, \
   get_common_services_location, get_mpacks_staging_location, get_server_temp_location, get_extension_location, \
   get_java_exe_path, read_ambari_user, parse_properties_file, JDBC_DATABASE_PROPERTY, get_dashboard_location
@@ -243,6 +243,7 @@ def create_symlink_using_path(src_path, dest_link, force=False):
   """
   if force and os.path.islink(dest_link):
     sudo.unlink(dest_link)
+
   sudo.symlink(src_path, dest_link)
   print_info_msg("Symlink: " + dest_link)
 
@@ -718,24 +719,38 @@ def _install_mpack(options, replay_mode=False, is_upgrade=False):
     validate_purge(options, purge_resources, tmp_root_dir, mpack_metadata, replay_mode)
     purge_stacks_and_mpacks(purge_resources, replay_mode)
 
+  adjust_ownership_list = []
+  change_ownership_list = []
   # Get ambari mpack properties
   stack_location, extension_location, service_definitions_location, mpacks_staging_location, dashboard_location = get_mpack_properties()
   mpacks_cache_location = os.path.join(mpacks_staging_location, MPACKS_CACHE_DIRNAME)
   # Create directories
   if not os.path.exists(stack_location):
     sudo.makedir(stack_location, 0755)
+  adjust_ownership_list.append((stack_location, "0755", "{0}", True))
+  change_ownership_list.append((stack_location,"{0}",True))
   if not os.path.exists(extension_location):
     sudo.makedir(extension_location, 0755)
+  adjust_ownership_list.append((extension_location, "0755", "{0}", True))
+  change_ownership_list.append((extension_location,"{0}",True))
   if not os.path.exists(service_definitions_location):
     sudo.makedir(service_definitions_location, 0755)
+  adjust_ownership_list.append((service_definitions_location, "0755", "{0}", True))
+  change_ownership_list.append((service_definitions_location,"{0}",True))
   if not os.path.exists(mpacks_staging_location):
     sudo.makedir(mpacks_staging_location, 0755)
+  adjust_ownership_list.append((mpacks_staging_location, "0755", "{0}", True))
+  change_ownership_list.append((mpacks_staging_location,"{0}",True))
   if not os.path.exists(mpacks_cache_location):
     sudo.makedir(mpacks_cache_location, 0755)
+  adjust_ownership_list.append((mpacks_cache_location, "0755", "{0}", True))
+  change_ownership_list.append((mpacks_cache_location,"{0}",True))
   if not os.path.exists(dashboard_location):
     sudo.makedir(dashboard_location, 0755)
     sudo.makedir(os.path.join(dashboard_location, GRAFANA_DASHBOARDS_DIRNAME), 0755)
     sudo.makedir(os.path.join(dashboard_location, SERVICE_METRICS_DIRNAME), 0755)
+  adjust_ownership_list.append((dashboard_location, "0755", "{0}", True))
+  change_ownership_list.append((dashboard_location,"{0}",True))
 
   # Stage management pack (Stage at /var/lib/ambari-server/resources/mpacks/mpack_name-mpack_version)
   mpack_name = mpack_metadata.name
@@ -780,7 +795,26 @@ def _install_mpack(options, replay_mode=False, is_upgrade=False):
     else:
       print_info_msg("Unknown artifact {0} of type {1}".format(artifact_name, artifact_type))
 
-  print_info_msg("Management pack {0}-{1} successfully installed!".format(mpack_name, mpack_version))
+  ambari_user = read_ambari_user()
+
+  # This is required when a non-admin user is configured to setup ambari-server
+  print_info_msg("Adjusting file permissions and ownerships")
+  for pack in adjust_ownership_list:
+      file = pack[0]
+      mod = pack[1]
+      user = pack[2].format(ambari_user)
+      recursive = pack[3]
+      logger.info("Setting file permissions: {0} {1} {2} {3}".format(file, mod, user, recursive))
+      set_file_permissions(file, mod, user, recursive)
+
+  for pack in change_ownership_list:
+      path = pack[0]
+      user = pack[1].format(ambari_user)
+      recursive = pack[2]
+      logger.info("Changing ownership: {0} {1} {2}".format(path, user, recursive))
+      change_owner(path, user, recursive)
+
+  print_info_msg("Management pack {0}-{1} successfully installed! Please restart ambari-server.".format(mpack_name, mpack_version))
   return mpack_metadata, mpack_name, mpack_version, mpack_staging_dir, mpack_archive_path
 
 def _execute_hook(mpack_metadata, hook_name, base_dir):

http://git-wip-us.apache.org/repos/asf/ambari/blob/fc17c82b/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 ef81945..28d82fc 100644
--- a/ambari-server/src/test/python/TestMpacks.py
+++ b/ambari-server/src/test/python/TestMpacks.py
@@ -269,7 +269,8 @@ class TestMpacks(TestCase):
   @patch("ambari_server.setupMpacks.download_mpack")
   @patch("ambari_server.setupMpacks.run_os_command")
   @patch("ambari_server.setupMpacks.validate_purge")
-  def test_install_stack_mpack(self, validate_purge_mock, run_os_command_mock, download_mpack_mock, expand_mpack_mock, purge_stacks_and_mpacks_mock,
+  @patch("ambari_server.setupMpacks.set_file_permissions")
+  def test_install_stack_mpack(self, set_file_permissions_mock, validate_purge_mock, run_os_command_mock, download_mpack_mock, expand_mpack_mock, purge_stacks_and_mpacks_mock,
                                      add_replay_log_mock, get_ambari_properties_mock, get_ambari_version_mock,
                                      create_symlink_mock, os_mkdir_mock, shutil_move_mock, os_path_exists_mock):
     options = self._create_empty_options_mock()
@@ -415,7 +416,9 @@ class TestMpacks(TestCase):
   @patch("ambari_server.setupMpacks.add_replay_log")
   @patch("ambari_server.setupMpacks.expand_mpack")
   @patch("ambari_server.setupMpacks.download_mpack")
-  def test_install_extension_mpack(self, download_mpack_mock, expand_mpack_mock, add_replay_log_mock,
+  @patch("ambari_server.setupMpacks.set_file_permissions")
+
+  def test_install_extension_mpack(self, set_file_permissions_mock, download_mpack_mock, expand_mpack_mock, add_replay_log_mock,
       purge_stacks_and_mpacks_mock, get_ambari_properties_mock, get_ambari_version_mock,
       create_symlink_mock, os_mkdir_mock, shutil_move_mock, os_path_exists_mock):
     options = self._create_empty_options_mock()
@@ -490,10 +493,11 @@ class TestMpacks(TestCase):
   @patch("ambari_server.setupMpacks.purge_stacks_and_mpacks")
   @patch("ambari_server.setupMpacks.expand_mpack")
   @patch("ambari_server.setupMpacks.download_mpack")
-  def test_install_addon_service_mpack(self, download_mpack_mock, expand_mpack_mock, purge_stacks_and_mpacks_mock,
+  @patch("ambari_server.setupMpacks.set_file_permissions")
+  def test_install_addon_service_mpack(self, set_file_permissions_mock, download_mpack_mock, expand_mpack_mock, purge_stacks_and_mpacks_mock,
                                        add_replay_log_mock, get_ambari_properties_mock, get_ambari_version_mock,
                                        create_symlink_mock, os_mkdir_mock, shutil_move_mock,os_symlink_mock,
-                                       os_path_isdir_mock, os_path_exists_mock):
+                                       os_path_isdir_mock, os_path_exists_mock ):
     options = self._create_empty_options_mock()
     options.mpack_path = "/path/to/myservice.tar.gz"
     options.purge = False
@@ -580,7 +584,9 @@ class TestMpacks(TestCase):
   @patch("ambari_server.setupMpacks.expand_mpack")
   @patch("ambari_server.setupMpacks.download_mpack")
   @patch("ambari_server.setupMpacks.run_os_command")
-  def test_upgrade_stack_mpack(self, run_os_command_mock, download_mpack_mock, expand_mpack_mock, purge_stacks_and_mpacks_mock,
+  @patch("ambari_server.setupMpacks.set_file_permissions")
+
+  def test_upgrade_stack_mpack(self, set_file_permissions_mock, run_os_command_mock, download_mpack_mock, expand_mpack_mock, purge_stacks_and_mpacks_mock,
                                _uninstall_mpack_mock, add_replay_log_mock, get_ambari_properties_mock,
                                get_ambari_version_mock, create_symlink_mock, os_mkdir_mock, shutil_move_mock,
                                os_path_exists_mock, create_symlink_using_path_mock):
@@ -590,6 +596,7 @@ class TestMpacks(TestCase):
     expand_mpack_mock.side_effect = ["mpacks/mystack-ambari-mpack-1.0.0.1", "mpacks/mystack-ambari-mpack-1.0.0.1"]
     get_ambari_version_mock.return_value = "2.4.0.0"
     run_os_command_mock.return_value = (0, "", "")
+
     mpacks_directory = configs[serverConfiguration.MPACKS_STAGING_PATH_PROPERTY]
     os_path_exists_mock.side_effect = [True, True, True, True, True, True, True, True, True, True,
                                        True, True, True, True, True, True, True, False, False, True,