AMBARI-18370. Do not execute stack-selector-tool after HDP component install on 
sysprepped hosts. (stoader)


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

Branch: refs/heads/branch-dev-patch-upgrade
Commit: a54d60918b9df11cd0046d2d96203f60b1ecd546
Parents: 02256c3
Author: Toader, Sebastian <stoa...@hortonworks.com>
Authored: Wed Sep 14 13:52:52 2016 +0200
Committer: Toader, Sebastian <stoa...@hortonworks.com>
Committed: Wed Sep 14 13:52:52 2016 +0200

----------------------------------------------------------------------
 .../main/resources/scripts/Ambaripreupload.py   | 11 +++++-
 .../2.0.6/hooks/after-INSTALL/scripts/params.py |  1 +
 .../scripts/shared_initialization.py            |  3 ++
 .../hooks/after-INSTALL/test_after_install.py   | 35 ++++++++++++++++++++
 4 files changed, 49 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/a54d6091/ambari-server/src/main/resources/scripts/Ambaripreupload.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/scripts/Ambaripreupload.py 
b/ambari-server/src/main/resources/scripts/Ambaripreupload.py
index 9492e17..09dcd7e 100644
--- a/ambari-server/src/main/resources/scripts/Ambaripreupload.py
+++ b/ambari-server/src/main/resources/scripts/Ambaripreupload.py
@@ -417,4 +417,13 @@ with Environment() as env:
   except:
     os.remove("/var/lib/ambari-agent/data/.hdfs_resource_ignore")
     raise
-  print "Completed tarball copy. Ambari preupload script completed."
+  print "Completed tarball copy."
+
+  if not options.upgrade:
+    print "Executing stack-selector-tool for stack {0} 
...".format(stack_version)
+    Execute(
+      ('/usr/bin/hdp-select', 'set', 'all', stack_version),
+      sudo = True
+    )
+
+  print "Ambari preupload script completed."
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/a54d6091/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/after-INSTALL/scripts/params.py
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/after-INSTALL/scripts/params.py
 
b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/after-INSTALL/scripts/params.py
index 819d8f7..ed34217 100644
--- 
a/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/after-INSTALL/scripts/params.py
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/after-INSTALL/scripts/params.py
@@ -33,6 +33,7 @@ tmp_dir = Script.get_tmp_dir()
 dfs_type = default("/commandParams/dfs_type", "")
 
 is_parallel_execution_enabled = 
int(default("/agentConfigParams/agent/parallel_execution", 0)) == 1
+host_sys_prepped = default("/hostLevelParams/host_sys_prepped", False)
 
 sudo = AMBARI_SUDO_BINARY
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/a54d6091/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/after-INSTALL/scripts/shared_initialization.py
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/after-INSTALL/scripts/shared_initialization.py
 
b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/after-INSTALL/scripts/shared_initialization.py
index 9982dc6..e9f2283 100644
--- 
a/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/after-INSTALL/scripts/shared_initialization.py
+++ 
b/ambari-server/src/main/resources/stacks/HDP/2.0.6/hooks/after-INSTALL/scripts/shared_initialization.py
@@ -44,6 +44,9 @@ def setup_stack_symlinks():
     version = params.current_version if params.current_version is not None 
else params.stack_version_unformatted
 
     if not params.upgrade_suspended:
+      if params.host_sys_prepped:
+        Logger.warning("Skipping running stack-selector-tool for stack {0} as 
its a sys_prepped host. This may cause symlink pointers not to be created for 
HDP componets installed later on top of an already sys_prepped 
host.".format(version))
+        return
       # On parallel command execution this should be executed by a single 
process at a time.
       with FcntlBasedProcessLock(params.stack_select_lock_file, enabled = 
params.is_parallel_execution_enabled, skip_fcntl_failures = True):
         stack_select.select_all(version)

http://git-wip-us.apache.org/repos/asf/ambari/blob/a54d6091/ambari-server/src/test/python/stacks/2.0.6/hooks/after-INSTALL/test_after_install.py
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/python/stacks/2.0.6/hooks/after-INSTALL/test_after_install.py
 
b/ambari-server/src/test/python/stacks/2.0.6/hooks/after-INSTALL/test_after_install.py
index 06a366e..434ef51 100644
--- 
a/ambari-server/src/test/python/stacks/2.0.6/hooks/after-INSTALL/test_after_install.py
+++ 
b/ambari-server/src/test/python/stacks/2.0.6/hooks/after-INSTALL/test_after_install.py
@@ -253,3 +253,38 @@ class TestHookAfterInstall(RMFTestCase):
             to = current_dir,)
 
     self.assertNoMoreResources()
+
+
+  @patch("resource_management.core.Logger.warning")
+  @patch("shared_initialization.load_version", new = 
MagicMock(return_value="2.3.0.0-1243"))
+  @patch("resource_management.libraries.functions.conf_select.create")
+  @patch("resource_management.libraries.functions.conf_select.select")
+  @patch("os.symlink")
+  @patch("shutil.rmtree")
+  def test_hook_setup_stack_symlinks_skipped(self, rmtree_mock, symlink_mock, 
conf_select_select_mock, conf_select_create_mock, logger_warning_mock):
+    """
+    Tests that <stack-selector-tool> set all is not called on sys_prepped hosts
+    :return:
+    """
+
+    def mocked_conf_select(arg1, arg2, arg3, dry_run = False):
+      return "/etc/{0}/{1}/0".format(arg2, arg3)
+
+    conf_select_create_mock.side_effect = mocked_conf_select
+
+    config_file = self.get_src_folder() + 
"/test/python/stacks/2.0.6/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+    json_content['hostLevelParams']['stack_version'] = "2.3"
+    json_content['hostLevelParams']['current_version'] = "2.3.0.0-1234"
+    json_content['hostLevelParams']['host_sys_prepped'] = "true"
+
+    self.executeScript("2.0.6/hooks/after-INSTALL/scripts/hook.py",
+                       classname="AfterInstallHook",
+                       command="hook",
+                       config_dict = json_content)
+
+    logger_warning_mock.assert_any_call('Skipping running stack-selector-tool 
for stack 2.3.0.0-1234 as its a sys_prepped host. This may cause symlink 
pointers not to be created for HDP componets installed later on top of an 
already sys_prepped host.')

Reply via email to