You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by fb...@apache.org on 2015/05/01 19:37:12 UTC

ambari git commit: AMBARI-10747 [WinTP2] Ambari server: HDPWIN stack - Ensure the specific hadoop users can be domain users

Repository: ambari
Updated Branches:
  refs/heads/trunk 99d96d15c -> 77e4d50c8


AMBARI-10747 [WinTP2] Ambari server: HDPWIN stack - Ensure the specific hadoop users can be domain users

Taking corrective action to switch the hadoop user to <domain>\hadoop for each active service after installation.


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

Branch: refs/heads/trunk
Commit: 77e4d50c8c4c73ee446f01b05ea1d1d17567197b
Parents: 99d96d1
Author: Florian Barca <fb...@hortonworks.com>
Authored: Fri May 1 10:37:04 2015 -0700
Committer: Florian Barca <fb...@hortonworks.com>
Committed: Fri May 1 10:37:04 2015 -0700

----------------------------------------------------------------------
 .../core/providers/__init__.py                  |   2 +
 .../core/providers/service.py                   |   3 +
 .../core/providers/windows/service.py           | 211 ++++++++++++++++---
 .../core/resources/service.py                   |  15 +-
 .../libraries/functions/install_hdp_msi.py      |  16 +-
 .../functions/windows_service_utils.py          |  38 ++--
 .../libraries/script/script.py                  |   3 +-
 .../ambari_server/dbConfiguration_windows.py    |   3 -
 .../main/python/ambari_server/serverSetup.py    |   4 +-
 .../Ambari-DDL-SQLServer-CREATELOCAL.sql        |   1 +
 .../AMBARI_METRICS/0.1.0/package/scripts/ams.py |  17 +-
 .../0.1.0/package/scripts/params_windows.py     |   4 +
 .../FALCON/0.5.0.2.1/package/scripts/falcon.py  |   4 +
 .../0.5.0.2.1/package/scripts/status_params.py  |   2 +
 .../FLUME/1.4.0.2.0/package/scripts/flume.py    |   7 +
 .../1.4.0.2.0/package/scripts/params_windows.py |   6 +-
 .../HBASE/0.96.0.2.0/package/scripts/hbase.py   |   8 +
 .../package/scripts/params_windows.py           |  10 +-
 .../HDFS/2.1.0.2.0/package/scripts/hdfs.py      |   7 +
 .../2.1.0.2.0/package/scripts/journalnode.py    |   2 +-
 .../HDFS/2.1.0.2.0/package/scripts/namenode.py  |   6 +-
 .../2.1.0.2.0/package/scripts/params_windows.py |  11 +-
 .../2.1.0.2.0/package/scripts/status_params.py  |   1 +
 .../2.1.0.2.0/package/scripts/zkfc_slave.py     |   2 +-
 .../HIVE/0.12.0.2.0/package/scripts/hive.py     |   8 +
 .../package/scripts/params_windows.py           |  15 +-
 .../HIVE/0.12.0.2.0/package/scripts/webhcat.py  |   5 +
 .../KNOX/0.5.0.2.2/package/scripts/knox.py      |   9 +-
 .../KNOX/0.5.0.2.2/package/scripts/knox_ldap.py |  21 +-
 .../0.5.0.2.2/package/scripts/params_windows.py |   5 +-
 .../OOZIE/4.0.0.2.0/package/scripts/oozie.py    |  22 +-
 .../4.0.0.2.0/package/scripts/params_windows.py |   3 +-
 .../package/scripts/params_windows.py           |   5 +-
 .../package/scripts/params_windows.py           |   5 +-
 .../STORM/0.9.1.2.1/package/scripts/nimbus.py   |   3 +-
 .../0.9.1.2.1/package/scripts/params_windows.py |   9 +-
 .../STORM/0.9.1.2.1/package/scripts/storm.py    |  20 +-
 .../0.9.1.2.1/package/scripts/supervisor.py     |   2 +-
 .../0.9.1.2.1/package/scripts/ui_server.py      |   2 +-
 .../0.4.0.2.1/package/scripts/params_windows.py |   3 +-
 .../2.1.0.2.0/package/scripts/params_windows.py |   9 +-
 .../YARN/2.1.0.2.0/package/scripts/service.py   |   3 +-
 .../2.1.0.2.0/package/scripts/status_params.py  |  12 +-
 .../YARN/2.1.0.2.0/package/scripts/yarn.py      |   8 +
 .../3.4.5.2.0/package/scripts/params_windows.py |   3 +-
 .../3.4.5.2.0/package/scripts/zookeeper.py      |   6 +
 .../2.1/hooks/after-INSTALL/scripts/params.py   |   3 +-
 .../2.1/hooks/before-START/scripts/params.py    |   2 +-
 .../ambari/server/upgrade/UpgradeTest.java      |  12 +-
 .../hooks/before-START/test_before_start.py     |   1 +
 50 files changed, 463 insertions(+), 116 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-common/src/main/python/resource_management/core/providers/__init__.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/core/providers/__init__.py b/ambari-common/src/main/python/resource_management/core/providers/__init__.py
index b7f94e5..0cefd12 100644
--- a/ambari-common/src/main/python/resource_management/core/providers/__init__.py
+++ b/ambari-common/src/main/python/resource_management/core/providers/__init__.py
@@ -55,6 +55,7 @@ PROVIDERS = dict(
   ),
   winsrv=dict(
     Service="resource_management.core.providers.windows.service.ServiceProvider",
+    ServiceConfig="resource_management.core.providers.windows.service.ServiceConfigProvider",
     Execute="resource_management.core.providers.windows.system.ExecuteProvider",
     File="resource_management.core.providers.windows.system.FileProvider",
     Directory="resource_management.core.providers.windows.system.DirectoryProvider"
@@ -69,6 +70,7 @@ PROVIDERS = dict(
     User="resource_management.core.providers.accounts.UserProvider",
     Group="resource_management.core.providers.accounts.GroupProvider",
     Service="resource_management.core.providers.service.ServiceProvider",
+    ServiceConfig="resource_management.core.providers.service.ServiceConfigProvider",
   ),
 )
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-common/src/main/python/resource_management/core/providers/service.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/core/providers/service.py b/ambari-common/src/main/python/resource_management/core/providers/service.py
index 23b1b3a..50167f1 100644
--- a/ambari-common/src/main/python/resource_management/core/providers/service.py
+++ b/ambari-common/src/main/python/resource_management/core/providers/service.py
@@ -94,3 +94,6 @@ class ServiceProvider(Provider):
       self.__upstart = os.path.exists("/sbin/start") \
         and os.path.exists("/etc/init/%s.conf" % self.resource.service_name)
     return self.__upstart
+
+class ServiceConfigProvider(Provider):
+  pass

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-common/src/main/python/resource_management/core/providers/windows/service.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/core/providers/windows/service.py b/ambari-common/src/main/python/resource_management/core/providers/windows/service.py
index ba08899..174acea 100644
--- a/ambari-common/src/main/python/resource_management/core/providers/windows/service.py
+++ b/ambari-common/src/main/python/resource_management/core/providers/windows/service.py
@@ -18,34 +18,47 @@ limitations under the License.
 Ambari Agent
 
 """
-from resource_management.core.providers import Provider
-from resource_management.core.base import Fail
-import win32service
 import time
+import win32api
+import win32service
+import win32serviceutil
+import winerror
+
+from ambari_commons.os_windows import WinServiceController
+
+from resource_management.core.base import Fail
+from resource_management.core.providers import Provider
 
 
-_schSCManager = win32service.OpenSCManager(None, None, win32service.SC_MANAGER_ALL_ACCESS)
+def safe_open_scmanager():
+  try:
+    _schSCManager = win32service.OpenSCManager(None, None, win32service.SC_MANAGER_ALL_ACCESS)
+  except win32api.error, details:
+    raise Fail("Error opening Service Control Manager on the local machine: {0}".format(details.winerror))
 
+  return _schSCManager
+
+def safe_open_service(hSCM, service_name):
+  try:
+    hSvc = win32serviceutil.SmartOpenService(hSCM, service_name,
+                                             win32service.SERVICE_ALL_ACCESS)
+  except win32api.error, details:
+    if details.winerror == winerror.ERROR_SERVICE_DOES_NOT_EXIST:
+      err_msg = "Invalid service name: {0}".format(service_name)
+    else:
+      err_msg = "Error configuring service {0}: {1}".format(service_name, details.winerror)
+    raise Fail(err_msg)
+
+  return hSvc
 
 class ServiceProvider(Provider):
   def action_start(self):
-    self._service_handle = self._service_handle if hasattr(self, "_service_handle") else \
-      win32service.OpenService(_schSCManager, self.resource.service_name, win32service.SERVICE_ALL_ACCESS)
-    if not self.status():
-      self.enable()
-      win32service.StartService(self._service_handle, None)
-      self.wait_status(win32service.SERVICE_RUNNING)
+    WinServiceController.Start(self.resource.service_name, 5)
 
   def action_stop(self):
-    self._service_handle = self._service_handle if hasattr(self, "_service_handle") else \
-      win32service.OpenService(_schSCManager, self.resource.service_name, win32service.SERVICE_ALL_ACCESS)
-    if self.status():
-      win32service.ControlService(self._service_handle, win32service.SERVICE_CONTROL_STOP)
-      self.wait_status(win32service.SERVICE_STOPPED)
+    WinServiceController.Stop(self.resource.service_name, 5)
 
   def action_restart(self):
-    self._service_handle = win32service.OpenService(_schSCManager, self.resource.service_name,
-                                                    win32service.SERVICE_ALL_ACCESS)
     self.action_stop()
     self.action_start()
 
@@ -53,23 +66,34 @@ class ServiceProvider(Provider):
     raise Fail("Reload for Service resource not supported on windows")
 
   def status(self):
-    if win32service.QueryServiceStatusEx(self._service_handle)["CurrentState"] == win32service.SERVICE_RUNNING:
+    svcStatus = WinServiceController.QueryStatus(self.resource.service_name)
+    if svcStatus == win32service.SERVICE_RUNNING:
       return True
     return False
 
   def enable(self):
-    if win32service.QueryServiceConfig(self._service_handle)[1] == win32service.SERVICE_DISABLED:
-      win32service.ChangeServiceConfig(self._service_handle,
-                                       win32service.SERVICE_NO_CHANGE,
-                                       win32service.SERVICE_DEMAND_START,
-                                       win32service.SERVICE_NO_CHANGE,
-                                       None,
-                                       None,
-                                       0,
-                                       None,
-                                       None,
-                                       None,
-                                       None)
+    hSCM = safe_open_scmanager()
+
+    try:
+      hSvc = safe_open_service(hSCM, self.resource.service_name)
+
+      if win32service.QueryServiceConfig(hSvc)[1] == win32service.SERVICE_DISABLED:
+        win32service.ChangeServiceConfig(hSvc,
+                                         win32service.SERVICE_NO_CHANGE,
+                                         win32service.SERVICE_DEMAND_START,
+                                         win32service.SERVICE_NO_CHANGE,
+                                         None,
+                                         None,
+                                         0,
+                                         None,
+                                         None,
+                                         None,
+                                         None)
+      win32service.CloseServiceHandle(hSvc)
+    except win32api.error, details:
+      raise Fail("Error enabling service {0}: {1}".format(self.resource.service_name, details.winerror))
+    finally:
+      win32service.CloseServiceHandle(hSCM)
 
   def get_current_status(self):
     return win32service.QueryServiceStatusEx(self._service_handle)["CurrentState"]
@@ -77,4 +101,129 @@ class ServiceProvider(Provider):
   def wait_status(self, status, timeout=5):
     begin = time.time()
     while self.get_current_status() != status and (timeout == 0 or time.time() - begin < timeout):
-      time.sleep(1)
\ No newline at end of file
+      time.sleep(1)
+
+
+class ServiceConfigProvider(Provider):
+  def action_install(self):
+    hSCM = safe_open_scmanager()
+
+    self._fix_system_user_name()
+
+    try:
+      hSvc = win32service.CreateService(hSCM,
+                                        self.resource.service_name,
+                                        self.resource.display_name,
+                                        win32service.SERVICE_ALL_ACCESS,         # desired access
+                                        win32service.SERVICE_WIN32_OWN_PROCESS,  # service type
+                                        self.resource.start_type,
+                                        win32service.SERVICE_ERROR_NORMAL,       # error control type
+                                        self.resource.exe_path,
+                                        None,
+                                        0,
+                                        None,
+                                        self.resource.userName,
+                                        self.resource.password)
+      if self.resource.description:
+        try:
+          win32service.ChangeServiceConfig2(hSvc, win32service.SERVICE_CONFIG_DESCRIPTION, self.description)
+        except NotImplementedError:
+          pass    ## ChangeServiceConfig2 and description do not exist on NT
+
+      win32service.CloseServiceHandle(hSvc)
+    except win32api.error, details:
+      raise Fail("Error creating service {0}: {1}".format(self.resource.service_name, details.winerror))
+    finally:
+      win32service.CloseServiceHandle(hSCM)
+
+  def action_configure(self):
+    hSCM = safe_open_scmanager()
+
+    try:
+      hSvc = safe_open_service(hSCM, self.resource.service_name)
+
+      self._fix_system_user_name()
+
+      try:
+        win32service.ChangeServiceConfig(hSvc,
+                                         win32service.SERVICE_NO_CHANGE,
+                                         self.resource.startType,
+                                         win32service.SERVICE_NO_CHANGE,
+                                         None,
+                                         None,
+                                         0,
+                                         None,
+                                         self.resource.username,
+                                         self.resource.password,
+                                         self.resource.displayName)
+        if self.resource.description:
+          try:
+            win32service.ChangeServiceConfig2(hSvc, win32service.SERVICE_CONFIG_DESCRIPTION, self.resource.description)
+          except NotImplementedError:
+            pass    ## ChangeServiceConfig2 and description do not exist on NT
+      except win32api.error, details:
+        raise Fail("Error configuring service {0}: {1}".format(self.resource.service_name, details.winerror))
+      finally:
+        win32service.CloseServiceHandle(hSvc)
+    finally:
+      win32service.CloseServiceHandle(hSCM)
+
+  def action_change_user(self):
+    hSCM = safe_open_scmanager()
+
+    try:
+      hSvc = safe_open_service(hSCM, self.resource.service_name)
+
+      self._fix_system_user_name()
+
+      try:
+        win32service.ChangeServiceConfig(hSvc,
+                                         win32service.SERVICE_NO_CHANGE,
+                                         win32service.SERVICE_NO_CHANGE,
+                                         win32service.SERVICE_NO_CHANGE,
+                                         None,
+                                         None,
+                                         0,
+                                         None,
+                                         self.resource.username,
+                                         self.resource.password,
+                                         None)
+      except win32api.error, details:
+        raise Fail("Error changing user for service {0}: {1}".format(self.resource.service_name, details.winerror))
+      finally:
+        win32service.CloseServiceHandle(hSvc)
+    finally:
+      win32service.CloseServiceHandle(hSCM)
+
+  def action_uninstall(self):
+    hSCM = safe_open_scmanager()
+
+    try:
+      try:
+        hSvc = win32serviceutil.SmartOpenService(hSCM, self.resource.service_name,
+                                                 win32service.SERVICE_ALL_ACCESS)
+      except win32api.error, details:
+        if details.winerror == winerror.ERROR_SERVICE_DOES_NOT_EXIST:
+          # Nothing to do
+          return
+        else:
+          raise Fail("Error removing service {0}: {1}".format(self.resource.service_name, details.winerror))
+
+      try:
+        win32service.DeleteService(hSvc)
+      except win32api.error:
+        # Error mostly means the service is running and its removal is delayed until the next opportunity
+        pass
+      finally:
+        win32service.CloseServiceHandle(hSvc)
+    finally:
+      win32service.CloseServiceHandle(hSCM)
+
+  def _fix_system_user_name(self):
+    if self.resource.username.upper() == "NT AUTHORITY\\SYSTEM":
+      self.resource.username = None
+
+  def _is_system_user(self):
+    if self.resource.username in ["NT AUTHORITY\\SYSTEM", "NT AUTHORITY\\NetworkService", "NT AUTHORITY\\LocalService"]:
+      return True
+    return False
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-common/src/main/python/resource_management/core/resources/service.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/core/resources/service.py b/ambari-common/src/main/python/resource_management/core/resources/service.py
index 20d5c1b..cb202cf 100644
--- a/ambari-common/src/main/python/resource_management/core/resources/service.py
+++ b/ambari-common/src/main/python/resource_management/core/resources/service.py
@@ -20,7 +20,7 @@ Ambari Agent
 
 """
 
-__all__ = ["Service"]
+__all__ = ["Service", "ServiceConfig"]
 
 from resource_management.core.base import Resource, ResourceArgument, ForcedListArgument
 
@@ -36,3 +36,16 @@ class Service(Resource):
   status_command = ResourceArgument()
 
   actions = ["nothing", "start", "stop", "restart", "reload"]
+
+class ServiceConfig(Resource):
+  action = ForcedListArgument(default="install")
+  service_name = ResourceArgument(default=lambda obj: obj.name)
+  display_name = ResourceArgument()
+  description = ResourceArgument()
+  start_type = ResourceArgument()
+  #exe_path = ResourceArgument()
+  #arguments = ResourceArgument()
+  username = ResourceArgument()
+  password = ResourceArgument()
+
+  actions = ["nothing", "install", "configure", "change_user", "uninstall"]

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-common/src/main/python/resource_management/libraries/functions/install_hdp_msi.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/install_hdp_msi.py b/ambari-common/src/main/python/resource_management/libraries/functions/install_hdp_msi.py
index ddb99e1..12ccc51 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/install_hdp_msi.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/install_hdp_msi.py
@@ -93,24 +93,24 @@ OOZIE_DB_PASSWORD=oozie
 """
 
 INSTALL_MSI_CMD = 'cmd /C start /wait msiexec /qn /i  {hdp_msi_path} /lv {hdp_log_path} MSIUSEREALADMINDETECTION=1 ' \
-                  'HDP_LAYOUT={hdp_layout_path} DESTROY_DATA=yes HDP_USER_PASSWORD={hadoop_password_arg} HDP=yes ' \
+                  'HDP_LAYOUT={hdp_layout_path} DESTROY_DATA=yes HDP_USER={hadoop_user} HDP_USER_PASSWORD={hadoop_password_arg} HDP=yes ' \
                   'KNOX=yes KNOX_MASTER_SECRET="AmbariHDP2Windows" FALCON=yes STORM=yes HBase=yes STORM=yes FLUME=yes SLIDER=yes PHOENIX=yes RANGER=no'
 CREATE_SERVICE_SCRIPT = os.path.abspath("sbin\createservice.ps1")
-CREATE_SERVICE_CMD = 'cmd /C powershell -File "{script}" -username hadoop -password "{password}" -servicename ' \
+CREATE_SERVICE_CMD = 'cmd /C powershell -File "{script}" -username {username} -password "{password}" -servicename ' \
                      '{servicename} -hdpresourcesdir "{resourcedir}" -servicecmdpath "{servicecmd}"'
 INSTALL_MARKER_OK = "msi.installed"
 INSTALL_MARKER_FAILED = "msi.failed"
 _working_dir = None
 
 
-def _ensure_services_created(hadoop_password):
+def _ensure_services_created(hadoop_user, hadoop_password):
   resource_dir_hdfs = os.path.join(os.environ["HADOOP_HDFS_HOME"], "bin")
   service_cmd_hdfs = os.path.join(os.environ["HADOOP_HDFS_HOME"], "bin", "hdfs.cmd")
   if not check_windows_service_exists("journalnode"):
-    Execute(CREATE_SERVICE_CMD.format(script=CREATE_SERVICE_SCRIPT, password=hadoop_password, servicename="journalnode",
+    Execute(CREATE_SERVICE_CMD.format(script=CREATE_SERVICE_SCRIPT, username=hadoop_user, password=hadoop_password, servicename="journalnode",
                                       resourcedir=resource_dir_hdfs, servicecmd=service_cmd_hdfs), logoutput=True)
   if not check_windows_service_exists("zkfc"):
-    Execute(CREATE_SERVICE_CMD.format(script=CREATE_SERVICE_SCRIPT, password=hadoop_password, servicename="zkfc",
+    Execute(CREATE_SERVICE_CMD.format(script=CREATE_SERVICE_SCRIPT, username=hadoop_user, password=hadoop_password, servicename="zkfc",
                                       resourcedir=resource_dir_hdfs, servicecmd=service_cmd_hdfs), logoutput=True)
 
 
@@ -155,7 +155,7 @@ def _write_marker():
     open(os.path.join(_working_dir, INSTALL_MARKER_FAILED), "w").close()
 
 
-def install_windows_msi(msi_url, save_dir, save_file, hadoop_password, stack_version):
+def install_windows_msi(msi_url, save_dir, save_file, hadoop_user, hadoop_password, stack_version):
   global _working_dir
   _working_dir = save_dir
   save_dir = os.path.abspath(save_dir)
@@ -194,10 +194,10 @@ def install_windows_msi(msi_url, save_dir, save_file, hadoop_password, stack_ver
 
     Execute(
       INSTALL_MSI_CMD.format(hdp_msi_path=hdp_msi_path, hdp_log_path=hdp_log_path, hdp_layout_path=hdp_layout_path,
-                             hadoop_password_arg=hadoop_password_arg))
+                             hadoop_user=hadoop_user, hadoop_password_arg=hadoop_password_arg))
     reload_windows_env()
     # create additional services manually due to hdp.msi limitaitons
-    _ensure_services_created(hadoop_password)
+    _ensure_services_created(hadoop_user, hadoop_password)
     _create_symlinks(stack_version)
     # finalizing install
     _write_marker()

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-common/src/main/python/resource_management/libraries/functions/windows_service_utils.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/windows_service_utils.py b/ambari-common/src/main/python/resource_management/libraries/functions/windows_service_utils.py
index 7d994b7..019a326 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/windows_service_utils.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/windows_service_utils.py
@@ -20,23 +20,35 @@ Ambari Agent
 """
 
 from resource_management.core.exceptions import ComponentIsNotRunning
-from resource_management.core.logger import Logger
+from resource_management.core.providers.windows.service import safe_open_scmanager, safe_open_service
+
 __all__ = ['check_windows_service_status', 'check_windows_service_exists']
 
 import win32service
 
-_schSCManager = win32service.OpenSCManager(None, None, win32service.SC_MANAGER_ALL_ACCESS)
-
 def check_windows_service_status(service_name):
-  _service_handle = win32service.OpenService(_schSCManager, service_name, win32service.SERVICE_ALL_ACCESS)
-  if win32service.QueryServiceStatusEx(_service_handle)["CurrentState"] == win32service.SERVICE_STOPPED:
-      raise ComponentIsNotRunning()
+  _schSCManager = safe_open_scmanager()
+
+  try:
+    _service_handle = safe_open_service(_schSCManager, service_name)
+    try:
+      if win32service.QueryServiceStatusEx(_service_handle)["CurrentState"] == win32service.SERVICE_STOPPED:
+        raise ComponentIsNotRunning()
+    finally:
+      win32service.CloseServiceHandle(_service_handle)
+  finally:
+    win32service.CloseServiceHandle(_schSCManager)
 
 def check_windows_service_exists(service_name):
-  typeFilter = win32service.SERVICE_WIN32
-  stateFilter = win32service.SERVICE_STATE_ALL
-  statuses = win32service.EnumServicesStatus(_schSCManager, typeFilter, stateFilter)
-  for (short_name, desc, status) in statuses:
-    if short_name == service_name:
-      return True
-  return False
+  _schSCManager = safe_open_scmanager()
+
+  try:
+    typeFilter = win32service.SERVICE_WIN32
+    stateFilter = win32service.SERVICE_STATE_ALL
+    statuses = win32service.EnumServicesStatus(_schSCManager, typeFilter, stateFilter)
+    for (short_name, desc, status) in statuses:
+      if short_name == service_name:
+        return True
+    return False
+  finally:
+    win32service.CloseServiceHandle(_schSCManager)

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-common/src/main/python/resource_management/libraries/script/script.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/script/script.py b/ambari-common/src/main/python/resource_management/libraries/script/script.py
index 6ef4bb5..a4ddc7c 100644
--- a/ambari-common/src/main/python/resource_management/libraries/script/script.py
+++ b/ambari-common/src/main/python/resource_management/libraries/script/script.py
@@ -298,8 +298,9 @@ class Script(object):
 
     if OSCheck.is_windows_family():
       #TODO hacky install of windows msi, remove it or move to old(2.1) stack definition when component based install will be implemented
+      hadoop_user = config["configurations"]["cluster-env"]["hadoop.user.name"]
       install_windows_msi(os.path.join(config['hostLevelParams']['jdk_location'], "hdp.msi"),
-                          config["hostLevelParams"]["agentCacheDir"], "hdp.msi", self.get_password("hadoop"),
+                          config["hostLevelParams"]["agentCacheDir"], "hdp.msi", hadoop_user, self.get_password(hadoop_user),
                           str(config['hostLevelParams']['stack_version']))
       reload_windows_env()
     pass

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/python/ambari_server/dbConfiguration_windows.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/python/ambari_server/dbConfiguration_windows.py b/ambari-server/src/main/python/ambari_server/dbConfiguration_windows.py
index 04db2af..96cd823 100644
--- a/ambari-server/src/main/python/ambari_server/dbConfiguration_windows.py
+++ b/ambari-server/src/main/python/ambari_server/dbConfiguration_windows.py
@@ -93,7 +93,6 @@ class MSSQLConfig(DBMSConfig):
 
     self.env_var_db_name = ""
     self.env_var_db_log_name = ""
-    self.env_var_db_owner = ""
 
     self.init_script_file = ""
     self.drop_tables_script_file = ""
@@ -284,7 +283,6 @@ class MSSQLConfig(DBMSConfig):
     # Setup DB
     os.environ[self.env_var_db_name] = self.database_name
     os.environ[self.env_var_db_log_name] = self.database_name + '_log'
-    os.environ[self.env_var_db_owner] = 'hadoop'
 
     # Don't create the database, assume it already exists. Just clear out the known tables structure
     MSSQLConfig._execute_db_script(self.database_host, self.drop_tables_script_file)
@@ -333,7 +331,6 @@ class MSSQLAmbariDBConfig(MSSQLConfig):
 
     self.env_var_db_name ='AMBARIDBNAME'
     self.env_var_db_log_name = 'AMBARIDBLOGNAME'
-    self.env_var_db_owner = 'AMBARIDBOWNER'
 
     # The values from options supersede the values from properties
     self.init_script_file = compress_backslashes(DBMSConfig._init_member_with_default(options, "init_db_script_file",

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/python/ambari_server/serverSetup.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/python/ambari_server/serverSetup.py b/ambari-server/src/main/python/ambari_server/serverSetup.py
index 89e3afd..9986422 100644
--- a/ambari-server/src/main/python/ambari_server/serverSetup.py
+++ b/ambari-server/src/main/python/ambari_server/serverSetup.py
@@ -321,7 +321,9 @@ def check_ambari_user(options):
 def service_setup(register_service, svc_user, svc_password):
   from ambari_windows_service import svcsetup
 
-  result = svcsetup(register_service, svc_user, svc_password)
+  svc_user_setup = svc_user if svc_user.upper() != "NT AUTHORITY\\SYSTEM" else None
+
+  result = svcsetup(register_service, svc_user_setup, svc_password)
   if result == 0:
     write_property(NR_USER_PROPERTY, svc_user)
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATELOCAL.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATELOCAL.sql b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATELOCAL.sql
index 87e7a40..380b0a0 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATELOCAL.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATELOCAL.sql
@@ -118,6 +118,7 @@ GO
 ALTER authorization on DATABASE::$(AMBARIDBNAME) to [NT AUTHORITY\SYSTEM]
 GO
 
+--set AMBARIDBOWNER=hadoop
 if exists (select 1 from master.sys.syslogins where name='$(AMBARIDBOWNER)')
 BEGIN
     CREATE USER [$(AMBARIDBOWNER)] FOR LOGIN [$(AMBARIDBOWNER)]

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/ams.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/ams.py b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/ams.py
index 8cbbed2..c7de4f3 100644
--- a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/ams.py
+++ b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/ams.py
@@ -72,7 +72,11 @@ def ams(name=None):
          owner=params.ams_user,
          content=InlineTemplate(params.ams_env_sh_template)
     )
-    pass
+
+    ServiceConfig(params.ams_collector_win_service_name,
+                  action="change_user",
+                  username = params.ams_user,
+                  password = Script.get_password(params.ams_user))
 
     if params.is_hbase_distributed:
       # Configuration needed to support NN HA
@@ -93,6 +97,11 @@ def ams(name=None):
                 group=params.user_group,
                 mode=0644
       )
+    else:
+      ServiceConfig(params.ams_embedded_hbase_win_service_name,
+                    action="change_user",
+                    username = params.ams_user,
+                    password = Script.get_password(params.ams_user))
     pass
 
   elif name == 'monitor':
@@ -131,6 +140,12 @@ def ams(name=None):
       template_tag=None
     )
 
+    ServiceConfig(params.ams_monitor_win_service_name,
+                  action="change_user",
+                  username = params.ams_user,
+                  password = Script.get_password(params.ams_user))
+
+
 @OsFamilyFuncImpl(os_family=OsFamilyImpl.DEFAULT)
 def ams(name=None):
   import params

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/params_windows.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/params_windows.py b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/params_windows.py
index 1b3509e..85a65e6 100644
--- a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/params_windows.py
+++ b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/params_windows.py
@@ -33,3 +33,7 @@ hadoop_bin_dir = os.path.join(os.environ["HADOOP_HOME"], "bin")
 hbase_cmd = os.path.join(os.environ["COLLECTOR_HOME"], "hbase", "bin", "hbase.cmd")
 hadoop_conf_dir = os.path.join(os.environ["HADOOP_HOME"], "conf")
 hbase_conf_dir = os.path.join(os.environ["COLLECTOR_HOME"], "hbase", "conf")
+
+ams_collector_win_service_name = "AmbariMetricsCollector"
+ams_monitor_win_service_name = "AmbariMetricsCollector"
+ams_embedded_hbase_win_service_name = "ams_hbase_master"

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/FALCON/0.5.0.2.1/package/scripts/falcon.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/FALCON/0.5.0.2.1/package/scripts/falcon.py b/ambari-server/src/main/resources/common-services/FALCON/0.5.0.2.1/package/scripts/falcon.py
index 05bae60..62fb1dd 100644
--- a/ambari-server/src/main/resources/common-services/FALCON/0.5.0.2.1/package/scripts/falcon.py
+++ b/ambari-server/src/main/resources/common-services/FALCON/0.5.0.2.1/package/scripts/falcon.py
@@ -169,6 +169,10 @@ def falcon(type, action = None):
     )
 
   if type == 'server':
+    ServiceConfig(params.falcon_win_service_name,
+                  action="change_user",
+                  username=params.falcon_user,
+                  password = Script.get_password(params.falcon_user))
     if action == 'start':
       Service(params.falcon_win_service_name, action="start")
     if action == 'stop':

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/FALCON/0.5.0.2.1/package/scripts/status_params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/FALCON/0.5.0.2.1/package/scripts/status_params.py b/ambari-server/src/main/resources/common-services/FALCON/0.5.0.2.1/package/scripts/status_params.py
index 0556ec1..c5478e5 100644
--- a/ambari-server/src/main/resources/common-services/FALCON/0.5.0.2.1/package/scripts/status_params.py
+++ b/ambari-server/src/main/resources/common-services/FALCON/0.5.0.2.1/package/scripts/status_params.py
@@ -24,6 +24,8 @@ config = Script.get_config()
 
 if OSCheck.is_windows_family():
   falcon_win_service_name = "falcon"
+  hadoop_user = config["configurations"]["cluster-env"]["hadoop.user.name"]
+  falcon_user = hadoop_user
 else:
   falcon_pid_dir = config['configurations']['falcon-env']['falcon_pid_dir']
   server_pid_file = format('{falcon_pid_dir}/falcon.pid')

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/FLUME/1.4.0.2.0/package/scripts/flume.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/FLUME/1.4.0.2.0/package/scripts/flume.py b/ambari-server/src/main/resources/common-services/FLUME/1.4.0.2.0/package/scripts/flume.py
index 11cae75..18055d5 100644
--- a/ambari-server/src/main/resources/common-services/FLUME/1.4.0.2.0/package/scripts/flume.py
+++ b/ambari-server/src/main/resources/common-services/FLUME/1.4.0.2.0/package/scripts/flume.py
@@ -31,7 +31,14 @@ from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl
 def flume(action = None):
   import params
 
+  from service_mapping import flume_win_service_name
+
   if action == 'config':
+    ServiceConfig(flume_win_service_name,
+                  action="change_user",
+                  username=params.flume_user,
+                  password = Script.get_password(params.flume_user))
+
     # remove previously defined meta's
     for n in find_expected_agent_names(params.flume_conf_dir):
       os.unlink(os.path.join(params.flume_conf_dir, n, 'ambari-meta.json'))

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/FLUME/1.4.0.2.0/package/scripts/params_windows.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/FLUME/1.4.0.2.0/package/scripts/params_windows.py b/ambari-server/src/main/resources/common-services/FLUME/1.4.0.2.0/package/scripts/params_windows.py
index 87b9640..17177ec 100644
--- a/ambari-server/src/main/resources/common-services/FLUME/1.4.0.2.0/package/scripts/params_windows.py
+++ b/ambari-server/src/main/resources/common-services/FLUME/1.4.0.2.0/package/scripts/params_windows.py
@@ -24,8 +24,10 @@ import os
 # server configurations
 config = Script.get_config()
 
+hadoop_user = config["configurations"]["cluster-env"]["hadoop.user.name"]
+
 hdp_root = os.path.abspath(os.path.join(os.environ["HADOOP_HOME"],".."))
 flume_home = os.environ['FLUME_HOME']
 flume_conf_dir = os.path.join(flume_home, 'conf')
-flume_user = 'hadoop'
-hdfs_user = "hadoop"
+flume_user = hadoop_user
+hdfs_user = hadoop_user

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase.py b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase.py
index 2ddd137..8ce244a 100644
--- a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase.py
+++ b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase.py
@@ -33,6 +33,14 @@ def hbase(name=None):
             configuration_attributes=params.config['configuration_attributes']['hbase-site']
   )
 
+  if params.service_map.has_key(name):
+    # Manually overriding service logon user & password set by the installation package
+    service_name = params.service_map[name]
+    ServiceConfig(service_name,
+                  action="change_user",
+                  username = params.hbase_user,
+                  password = Script.get_password(params.hbase_user))
+
 # name is 'master' or 'regionserver' or 'queryserver' or 'client'
 @OsFamilyFuncImpl(os_family=OsFamilyImpl.DEFAULT)
 def hbase(name=None):

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/params_windows.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/params_windows.py b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/params_windows.py
index 571b93c..c132503 100644
--- a/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/params_windows.py
+++ b/ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/params_windows.py
@@ -28,10 +28,16 @@ hbase_conf_dir = os.environ["HBASE_CONF_DIR"]
 hbase_bin_dir = os.path.join(os.environ["HBASE_HOME"],'bin')
 hbase_executable = os.path.join(hbase_bin_dir,"hbase.cmd")
 hdp_root = os.path.abspath(os.path.join(os.environ["HADOOP_HOME"],".."))
-hbase_user = "hadoop"
+hadoop_user = config["configurations"]["cluster-env"]["hadoop.user.name"]
+hbase_user = hadoop_user
 
 #decomm params
 region_drainer = os.path.join(hbase_bin_dir,"draining_servers.rb")
 region_mover = os.path.join(hbase_bin_dir,"region_mover.rb")
 hbase_excluded_hosts = config['commandParams']['excluded_hosts']
-hbase_drain_only = config['commandParams']['mark_draining_only']
\ No newline at end of file
+hbase_drain_only = config['commandParams']['mark_draining_only']
+
+service_map = {
+  'master' : status_params.hbase_master_win_service_name,
+  'regionserver' : status_params.hbase_regionserver_win_service_name
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs.py b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs.py
index a15a486..a615c27 100644
--- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs.py
+++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs.py
@@ -117,6 +117,13 @@ def hdfs(component=None):
          owner=params.hdfs_user,
          mode="f",
          )
+  if params.service_map.has_key(component):
+    service_name = params.service_map[component]
+    ServiceConfig(service_name,
+                  action="change_user",
+                  username=params.hdfs_user,
+                  password=Script.get_password(params.hdfs_user))
+
   if "hadoop-policy" in params.config['configurations']:
     XmlConfig("hadoop-policy.xml",
               conf_dir=params.hadoop_conf_dir,

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/journalnode.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/journalnode.py b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/journalnode.py
index e8cc06c..8ec1fe9 100644
--- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/journalnode.py
+++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/journalnode.py
@@ -174,7 +174,7 @@ class JournalNodeWindows(JournalNode):
   def configure(self, env):
     import params
     env.set_params(params)
-    hdfs()
+    hdfs("journalnode")
     pass
 
   def status(self, env):

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/namenode.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/namenode.py b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/namenode.py
index 2b6e6f8..dd439d7 100644
--- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/namenode.py
+++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/namenode.py
@@ -249,11 +249,11 @@ class NameNodeDefault(NameNode):
 class NameNodeWindows(NameNode):
 
   def rebalancehdfs(self, env):
-    from ambari_commons.os_windows import run_os_command_impersonated
+    from ambari_commons.os_windows import UserHelper, run_os_command_impersonated
     import params
     env.set_params(params)
 
-    hdfs_user = params.hdfs_user
+    hdfs_username, hdfs_domain = UserHelper.parse_user_name(params.hdfs_user, ".")
 
     name_node_parameters = json.loads( params.name_node_params )
     threshold = name_node_parameters['threshold']
@@ -272,7 +272,7 @@ class NameNodeWindows(NameNode):
     _print("Executing command %s\n" % command)
 
     parser = hdfs_rebalance.HdfsParser()
-    returncode, stdout, err = run_os_command_impersonated(' '.join(command), hdfs_user, Script.get_password(hdfs_user))
+    returncode, stdout, err = run_os_command_impersonated(' '.join(command), hdfs_username, Script.get_password(params.hdfs_user), hdfs_domain)
 
     for line in stdout.split('\n'):
       _print('[balancer] %s %s' % (str(datetime.now()), line ))

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/params_windows.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/params_windows.py b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/params_windows.py
index c14e6ca..c3ee304 100644
--- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/params_windows.py
+++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/params_windows.py
@@ -58,9 +58,18 @@ if dfs_ha_enabled:
       namenode_id = nn_id
       namenode_rpc = nn_host
 
-hdfs_user = "hadoop"
+hadoop_user = config["configurations"]["cluster-env"]["hadoop.user.name"]
+hdfs_user = hadoop_user
 
 grep_exe = "findstr"
 
 name_node_params = default("/commandParams/namenode", None)
 exclude_packages = []
+
+service_map = {
+  "datanode" : datanode_win_service_name,
+  "journalnode" : journalnode_win_service_name,
+  "namenode" : namenode_win_service_name,
+  "secondarynamenode" : snamenode_win_service_name,
+  "zkfc_slave": zkfc_win_service_name
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/status_params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/status_params.py b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/status_params.py
index debb914..3e4cfe4 100644
--- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/status_params.py
+++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/status_params.py
@@ -27,6 +27,7 @@ if OSCheck.is_windows_family():
   datanode_win_service_name = "datanode"
   snamenode_win_service_name = "secondarynamenode"
   journalnode_win_service_name = "journalnode"
+  zkfc_win_service_name = "zkfc"
 else:
   hadoop_pid_dir_prefix = config['configurations']['hadoop-env']['hadoop_pid_dir_prefix']
   hdfs_user = config['configurations']['hadoop-env']['hdfs_user']

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/zkfc_slave.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/zkfc_slave.py b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/zkfc_slave.py
index 28cd434..14de094 100644
--- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/zkfc_slave.py
+++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/zkfc_slave.py
@@ -36,7 +36,7 @@ class ZkfcSlave(Script):
   def configure(self, env):
     import params
     env.set_params(params)
-    hdfs()
+    hdfs("zkfc_slave")
     pass
 
 @OsFamilyImpl(os_family=OsFamilyImpl.DEFAULT)

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive.py b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive.py
index 9de92c6..4df6014 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive.py
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive.py
@@ -29,13 +29,21 @@ from ambari_commons import OSConst
 @OsFamilyFuncImpl(os_family=OSConst.WINSRV_FAMILY)
 def hive(name=None):
   import params
+
   XmlConfig("hive-site.xml",
             conf_dir = params.hive_conf_dir,
             configurations = params.config['configurations']['hive-site'],
             owner=params.hive_user,
             configuration_attributes=params.config['configuration_attributes']['hive-site']
   )
+
   if name in ["hiveserver2","metastore"]:
+    # Manually overriding service logon user & password set by the installation package
+    service_name = params.service_map[name]
+    ServiceConfig(service_name,
+                  action="change_user",
+                  username = params.hive_user,
+                  password = Script.get_password(params.hive_user))
     Execute(format("cmd /c hadoop fs -mkdir -p {hive_warehouse_dir}"), logoutput=True, user=params.hadoop_user)
 
   if name == 'metastore':

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_windows.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_windows.py b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_windows.py
index d84b226..329fe0c 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_windows.py
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/params_windows.py
@@ -39,9 +39,9 @@ hcat_config_dir = os.environ["WEBHCAT_CONF_DIR"]
 
 hive_env_sh_template = config['configurations']['hive-env']['content']
 hive_warehouse_dir = config['configurations']['hive-site']['hive.metastore.warehouse.dir']
-hive_user = "hadoop"
-hadoop_user = "hadoop"
-hcat_user = "hadoop"
+hadoop_user = config["configurations"]["cluster-env"]["hadoop.user.name"]
+hive_user = hadoop_user
+hcat_user = hadoop_user
 
 hive_bin = os.path.join(hive_home, "bin")
 hive_metastore_db_type = config['configurations']['hive-env']['hive_database_type']
@@ -51,4 +51,11 @@ hive_metastore_user_passwd = config['configurations']['hive-site']['javax.jdo.op
 hive_exclude_packages = []
 
 ######## Metastore Schema
-init_metastore_schema = not config['configurations']['hive-site']['datanucleus.autoCreateSchema']
\ No newline at end of file
+init_metastore_schema = not config['configurations']['hive-site']['datanucleus.autoCreateSchema']
+
+service_map = {
+  "metastore" : hive_metastore_win_service_name,
+  "client" : hive_client_win_service_name,
+  "hiveserver2" : hive_server_win_service_name,
+  "templeton" : webhcat_server_win_service_name
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/webhcat.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/webhcat.py b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/webhcat.py
index d396f11..733ab0a 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/webhcat.py
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/webhcat.py
@@ -35,6 +35,11 @@ def webhcat():
             conf_dir=params.hcat_config_dir,
             configurations=params.config['configurations']['webhcat-site']
   )
+  # Manually overriding service logon user & password set by the installation package
+  ServiceConfig(params.webhcat_server_win_service_name,
+                action="change_user",
+                username = params.hcat_user,
+                password = Script.get_password(params.hcat_user))
 
 
 @OsFamilyFuncImpl(os_family=OsFamilyImpl.DEFAULT)

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/KNOX/0.5.0.2.2/package/scripts/knox.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/KNOX/0.5.0.2.2/package/scripts/knox.py b/ambari-server/src/main/resources/common-services/KNOX/0.5.0.2.2/package/scripts/knox.py
index ab25187..f3040ee 100644
--- a/ambari-server/src/main/resources/common-services/KNOX/0.5.0.2.2/package/scripts/knox.py
+++ b/ambari-server/src/main/resources/common-services/KNOX/0.5.0.2.2/package/scripts/knox.py
@@ -25,6 +25,7 @@ from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl
 @OsFamilyFuncImpl(os_family=OSConst.WINSRV_FAMILY)
 def knox():
   import params
+  from service_mapping import knox_geteway_win_service_name
 
   XmlConfig("gateway-site.xml",
             conf_dir=params.knox_conf_dir,
@@ -33,6 +34,12 @@ def knox():
             owner=params.knox_user
   )
 
+  # Manually overriding service logon user & password set by the installation package
+  ServiceConfig(knox_geteway_win_service_name,
+                action="change_user",
+                username = params.knox_user,
+                password = Script.get_password(params.knox_user))
+
   File(os.path.join(params.knox_conf_dir, "gateway-log4j.properties"),
        owner=params.knox_user,
        content=params.gateway_log4j
@@ -45,7 +52,7 @@ def knox():
   )
 
   if params.security_enabled:
-    TemplateConfig( os.path.join(knox_conf_dir, "krb5JAASLogin.conf"),
+    TemplateConfig( os.path.join(params.knox_conf_dir, "krb5JAASLogin.conf"),
         owner = params.knox_user,
         template_tag = None
     )

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/KNOX/0.5.0.2.2/package/scripts/knox_ldap.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/KNOX/0.5.0.2.2/package/scripts/knox_ldap.py b/ambari-server/src/main/resources/common-services/KNOX/0.5.0.2.2/package/scripts/knox_ldap.py
index 08e28f5..c96605e 100644
--- a/ambari-server/src/main/resources/common-services/KNOX/0.5.0.2.2/package/scripts/knox_ldap.py
+++ b/ambari-server/src/main/resources/common-services/KNOX/0.5.0.2.2/package/scripts/knox_ldap.py
@@ -20,7 +20,10 @@ limitations under the License.
 import os
 from resource_management import *
 
-def ldap():
+from ambari_commons import OSConst
+from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl
+
+def _ldap_common():
     import params
 
     File(os.path.join(params.knox_conf_dir, 'ldap-log4j.properties'),
@@ -37,3 +40,19 @@ def ldap():
          content=params.users_ldif
     )
 
+@OsFamilyFuncImpl(os_family=OSConst.WINSRV_FAMILY)
+def ldap():
+  import params
+  from service_mapping import knox_ldap_win_service_name
+
+  # Manually overriding service logon user & password set by the installation package
+  ServiceConfig(knox_ldap_win_service_name,
+                action="change_user",
+                username = params.knox_user,
+                password = Script.get_password(params.knox_user))
+
+  _ldap_common()
+
+@OsFamilyFuncImpl(os_family=OsFamilyImpl.DEFAULT)
+def ldap():
+  _ldap_common()
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/KNOX/0.5.0.2.2/package/scripts/params_windows.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/KNOX/0.5.0.2.2/package/scripts/params_windows.py b/ambari-server/src/main/resources/common-services/KNOX/0.5.0.2.2/package/scripts/params_windows.py
index 3d72735..652094a 100644
--- a/ambari-server/src/main/resources/common-services/KNOX/0.5.0.2.2/package/scripts/params_windows.py
+++ b/ambari-server/src/main/resources/common-services/KNOX/0.5.0.2.2/package/scripts/params_windows.py
@@ -36,7 +36,8 @@ knox_data_dir = os.path.join(knox_home, 'data')
 knox_master_secret_path = os.path.join(knox_data_dir, 'security', 'master')
 knox_cert_store_path = os.path.join(knox_data_dir, 'security', 'keystores', 'gateway.jks')
 
-knox_user = 'hadoop'
-hdfs_user = "hadoop"
+hadoop_user = config["configurations"]["cluster-env"]["hadoop.user.name"]
+knox_user = hadoop_user
+hdfs_user = hadoop_user
 knox_group = None
 mode = None

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py
index 76e01ff..21ba06b 100644
--- a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py
+++ b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py
@@ -19,15 +19,15 @@ limitations under the License.
 """
 import os
 
-from resource_management.core.resources import Directory
-from resource_management.core.resources import File
-from resource_management.core.resources.system import Execute
+from resource_management.core.resources.service import ServiceConfig
+from resource_management.core.resources.system import Directory, Execute, File
 from resource_management.core.source import DownloadSource
 from resource_management.core.source import InlineTemplate
 from resource_management.core.source import Template
-from resource_management.libraries.functions import format
-from resource_management.libraries.functions import compare_versions
+from resource_management.libraries.functions.format import format
+from resource_management.libraries.functions.version import compare_versions
 from resource_management.libraries.resources.xml_config import XmlConfig
+from resource_management.libraries.script.script import Script
 from resource_management.core.resources.packaging import Package
 from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl
 from ambari_commons import OSConst
@@ -37,6 +37,8 @@ from ambari_commons.inet_utils import download_file
 def oozie(is_server=False):
   import params
 
+  from status_params import oozie_server_win_service_name
+
   XmlConfig("oozie-site.xml",
             conf_dir=params.oozie_conf_dir,
             configurations=params.config['configurations']['oozie-site'],
@@ -52,8 +54,16 @@ def oozie(is_server=False):
 
   Directory(params.oozie_tmp_dir,
             owner=params.oozie_user,
-             recursive = True,
+            recursive = True,
   )
+
+  if is_server:
+    # Manually overriding service logon user & password set by the installation package
+    ServiceConfig(oozie_server_win_service_name,
+                  action="change_user",
+                  username = params.oozie_user,
+                  password = Script.get_password(params.oozie_user))
+
   download_file(os.path.join(params.config['hostLevelParams']['jdk_location'], "sqljdbc4.jar"),
                       os.path.join(params.oozie_root, "extra_libs", "sqljdbc4.jar")
   )

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_windows.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_windows.py b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_windows.py
index 9d6b062..ec404c4 100644
--- a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_windows.py
+++ b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_windows.py
@@ -23,11 +23,12 @@ from status_params import *
 
 config = Script.get_config()
 
+hadoop_user = config["configurations"]["cluster-env"]["hadoop.user.name"]
 hdp_root = os.path.abspath(os.path.join(os.environ["HADOOP_HOME"], ".."))
 oozie_root = os.environ['OOZIE_ROOT']
 oozie_home = os.environ['OOZIE_HOME']
 oozie_conf_dir = os.path.join(oozie_home,'conf')
-oozie_user = "hadoop"
+oozie_user = hadoop_user
 oozie_tmp_dir = "c:\\hadoop\\temp\\oozie"
 
 oozie_env_cmd_template = config['configurations']['oozie-env']['content']

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/PIG/0.12.0.2.0/package/scripts/params_windows.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/PIG/0.12.0.2.0/package/scripts/params_windows.py b/ambari-server/src/main/resources/common-services/PIG/0.12.0.2.0/package/scripts/params_windows.py
index 3e63083..7bb7ef8 100644
--- a/ambari-server/src/main/resources/common-services/PIG/0.12.0.2.0/package/scripts/params_windows.py
+++ b/ambari-server/src/main/resources/common-services/PIG/0.12.0.2.0/package/scripts/params_windows.py
@@ -32,5 +32,6 @@ if (('pig-log4j' in config['configurations']) and ('content' in config['configur
 else:
   log4j_props = None
 
-pig_user = "hadoop"
-hdfs_user = "hadoop"
\ No newline at end of file
+hadoop_user = config["configurations"]["cluster-env"]["hadoop.user.name"]
+pig_user = hadoop_user
+hdfs_user = hadoop_user

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/SLIDER/0.60.0.2.2/package/scripts/params_windows.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/SLIDER/0.60.0.2.2/package/scripts/params_windows.py b/ambari-server/src/main/resources/common-services/SLIDER/0.60.0.2.2/package/scripts/params_windows.py
index c28d062..932c5a4 100644
--- a/ambari-server/src/main/resources/common-services/SLIDER/0.60.0.2.2/package/scripts/params_windows.py
+++ b/ambari-server/src/main/resources/common-services/SLIDER/0.60.0.2.2/package/scripts/params_windows.py
@@ -30,5 +30,6 @@ slider_conf_dir = os.path.join(slider_home, 'conf')
 storm_slider_conf_dir = os.path.join(os.environ['STORM_HOME'], 'conf')
 slider_home_dir = slider_home
 
-slider_user = 'hadoop'
-hdfs_user = "hadoop"
+hadoop_user = config["configurations"]["cluster-env"]["hadoop.user.name"]
+slider_user = hadoop_user
+hdfs_user = hadoop_user

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/nimbus.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/nimbus.py b/ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/nimbus.py
index 57db32d..8e3c6b4 100644
--- a/ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/nimbus.py
+++ b/ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/nimbus.py
@@ -42,7 +42,7 @@ class Nimbus(Script):
   def configure(self, env):
     import params
     env.set_params(params)
-    storm()
+    storm("nimbus")
 
 
 @OsFamilyImpl(os_family=OsFamilyImpl.DEFAULT)
@@ -136,6 +136,5 @@ class NimbusWindows(Nimbus):
     env.set_params(status_params)
     check_windows_service_status(status_params.nimbus_win_service_name)
 
-
 if __name__ == "__main__":
   Nimbus().execute()

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/params_windows.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/params_windows.py b/ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/params_windows.py
index 152baa4..d98246c 100644
--- a/ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/params_windows.py
+++ b/ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/params_windows.py
@@ -26,4 +26,11 @@ config = Script.get_config()
 
 hdp_root = os.path.abspath(os.path.join(os.environ["HADOOP_HOME"],".."))
 conf_dir = os.environ["STORM_CONF_DIR"]
-storm_user = "hadoop"
+hadoop_user = config["configurations"]["cluster-env"]["hadoop.user.name"]
+storm_user = hadoop_user
+
+service_map = {
+  "nimbus" : nimbus_win_service_name,
+  "supervisor" : supervisor_win_service_name,
+  "ui" : ui_win_service_name
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/storm.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/storm.py b/ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/storm.py
index 08d5b34..e7e5a4c 100644
--- a/ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/storm.py
+++ b/ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/storm.py
@@ -18,13 +18,13 @@ limitations under the License.
 
 """
 
-import resource_management
-from resource_management.core.resources import File
-from resource_management.core.resources import Execute
-from resource_management.core.resources import Directory
+from resource_management.core.exceptions import Fail
+from resource_management.core.resources.service import ServiceConfig
+from resource_management.core.resources.system import Directory, Execute, File
 from resource_management.core.source import InlineTemplate
 from resource_management.libraries.resources.template_config import TemplateConfig
 from resource_management.libraries.functions.format import format
+from resource_management.libraries.script.script import Script
 from resource_management.core.source import Template
 from resource_management.libraries.functions import compare_versions
 from yaml_utils import yaml_config_template, yaml_config
@@ -32,7 +32,7 @@ from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl
 from ambari_commons import OSConst
 
 @OsFamilyFuncImpl(os_family=OSConst.WINSRV_FAMILY)
-def storm():
+def storm(name=None):
   import params
   yaml_config("storm.yaml",
               conf_dir=params.conf_dir,
@@ -40,8 +40,16 @@ def storm():
               owner=params.storm_user
   )
 
+  if params.service_map.has_key(name):
+    service_name = params.service_map[name]
+    ServiceConfig(service_name,
+                  action="change_user",
+                  username = params.storm_user,
+                  password = Script.get_password(params.storm_user))
+
+
 @OsFamilyFuncImpl(os_family=OsFamilyImpl.DEFAULT)
-def storm():
+def storm(name=None):
   import params
 
   Directory(params.log_dir,

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/supervisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/supervisor.py b/ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/supervisor.py
index 4acfd80..cee42d4 100644
--- a/ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/supervisor.py
+++ b/ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/supervisor.py
@@ -39,7 +39,7 @@ class Supervisor(Script):
   def configure(self, env):
     import params
     env.set_params(params)
-    storm()
+    storm("supervisor")
 
 
 @OsFamilyImpl(os_family=OSConst.WINSRV_FAMILY)

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/ui_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/ui_server.py b/ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/ui_server.py
index 172a357..0814282 100644
--- a/ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/ui_server.py
+++ b/ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/ui_server.py
@@ -44,7 +44,7 @@ class UiServer(Script):
   def configure(self, env):
     import params
     env.set_params(params)
-    storm()
+    storm("ui")
 
 @OsFamilyImpl(os_family=OSConst.WINSRV_FAMILY)
 class UiServerWindows(UiServer):

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/TEZ/0.4.0.2.1/package/scripts/params_windows.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/TEZ/0.4.0.2.1/package/scripts/params_windows.py b/ambari-server/src/main/resources/common-services/TEZ/0.4.0.2.1/package/scripts/params_windows.py
index 767ed1c..2a7bd8b 100644
--- a/ambari-server/src/main/resources/common-services/TEZ/0.4.0.2.1/package/scripts/params_windows.py
+++ b/ambari-server/src/main/resources/common-services/TEZ/0.4.0.2.1/package/scripts/params_windows.py
@@ -21,7 +21,8 @@ from resource_management import *
 import os
 
 config = Script.get_config()
-tez_user = "hadoop"
+hadoop_user = config["configurations"]["cluster-env"]["hadoop.user.name"]
+tez_user = hadoop_user
 tez_home_dir = None
 tez_conf_dir = "conf"
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/params_windows.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/params_windows.py b/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/params_windows.py
index edd4d17..0f8ce73 100644
--- a/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/params_windows.py
+++ b/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/params_windows.py
@@ -27,9 +27,10 @@ from status_params import *
 # server configurations
 config = Script.get_config()
 
-yarn_user = "hadoop"
-hdfs_user = "hadoop"
-smokeuser = "hadoop"
+hadoop_user = config["configurations"]["cluster-env"]["hadoop.user.name"]
+yarn_user = hadoop_user
+hdfs_user = hadoop_user
+smokeuser = hadoop_user
 config_dir = os.environ["HADOOP_CONF_DIR"]
 hadoop_home = os.environ["HADOOP_HOME"]
 
@@ -55,4 +56,4 @@ hadoopMapredExamplesJarName = "hadoop-mapreduce-examples-2.*.jar"
 
 exclude_hosts = default("/clusterHostInfo/decom_nm_hosts", [])
 exclude_file_path = default("/configurations/yarn-site/yarn.resourcemanager.nodes.exclude-path","/etc/hadoop/conf/yarn.exclude")
-update_exclude_file_only = config['commandParams']['update_exclude_file_only']
\ No newline at end of file
+update_exclude_file_only = config['commandParams']['update_exclude_file_only']

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/service.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/service.py b/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/service.py
index f6487e5..c827529 100644
--- a/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/service.py
+++ b/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/service.py
@@ -26,7 +26,7 @@ from ambari_commons import OSConst
 @OsFamilyFuncImpl(os_family=OSConst.WINSRV_FAMILY)
 def service(componentName, action='start', serviceName='yarn'):
   import status_params
-  if componentName == 'resourcemanager' or componentName == 'nodemanager' or componentName == 'historyserver' or componentName == 'timelineserver':
+  if status_params.service_map.has_key(componentName):
     service_name = status_params.service_map[componentName]
     if action == 'start' or action == 'stop':
       Service(service_name, action=action)
@@ -36,7 +36,6 @@ def service(componentName, action='start', serviceName='yarn'):
 
 @OsFamilyFuncImpl(os_family=OsFamilyImpl.DEFAULT)
 def service(componentName, action='start', serviceName='yarn'):
-
   import params
 
   if serviceName == 'mapreduce' and componentName == 'historyserver':

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/status_params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/status_params.py b/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/status_params.py
index 42e6fad..61402a0 100644
--- a/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/status_params.py
+++ b/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/status_params.py
@@ -25,7 +25,17 @@ config = Script.get_config()
 tmp_dir = Script.get_tmp_dir()
 
 if OSCheck.is_windows_family():
-  service_map = {'resourcemanager':'resourcemanager', 'nodemanager':'nodemanager', 'historyserver':'jobhistoryserver', 'timelineserver':'historyserver'}
+  resourcemanager_win_service_name = 'resourcemanager'
+  nodemanager_win_service_name = 'nodemanager'
+  historyserver_win_service_name = 'jobhistoryserver'
+  timelineserver_win_service_name = 'timelineserver'
+
+  service_map = {
+    'resourcemanager' : resourcemanager_win_service_name,
+    'nodemanager' : nodemanager_win_service_name,
+    'historyserver' : historyserver_win_service_name,
+    'timelineserver' : timelineserver_win_service_name
+  }
 else:
   mapred_user = config['configurations']['mapred-env']['mapred_user']
   yarn_user = config['configurations']['yarn-env']['yarn_user']

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/yarn.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/yarn.py b/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/yarn.py
index 22888e2..583e6e9 100644
--- a/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/yarn.py
+++ b/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/yarn.py
@@ -49,6 +49,14 @@ def yarn(name = None):
             mode='f'
   )
 
+  if params.service_map.has_key(name):
+    service_name = params.service_map[name]
+
+    ServiceConfig(service_name,
+                  action="change_user",
+                  username = params.yarn_user,
+                  password = Script.get_password(params.yarn_user))
+
 
 @OsFamilyFuncImpl(os_family=OsFamilyImpl.DEFAULT)
 def yarn(name = None):

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/ZOOKEEPER/3.4.5.2.0/package/scripts/params_windows.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/ZOOKEEPER/3.4.5.2.0/package/scripts/params_windows.py b/ambari-server/src/main/resources/common-services/ZOOKEEPER/3.4.5.2.0/package/scripts/params_windows.py
index c7302a5..e5ce948 100644
--- a/ambari-server/src/main/resources/common-services/ZOOKEEPER/3.4.5.2.0/package/scripts/params_windows.py
+++ b/ambari-server/src/main/resources/common-services/ZOOKEEPER/3.4.5.2.0/package/scripts/params_windows.py
@@ -28,7 +28,8 @@ config = Script.get_config()
 # notused zookeeper_home_dir = os.environ["ZOOKEEPER_HOME"]
 config_dir = os.environ["ZOOKEEPER_CONF_DIR"]
 hdp_root = os.environ["HADOOP_NODE_INSTALL_ROOT"]
-zk_user = "hadoop"
+hadoop_user = config["configurations"]["cluster-env"]["hadoop.user.name"]
+zk_user = hadoop_user
 
 # notused zk_log_dir = config['configurations']['zookeeper-env']['zk_log_dir']
 zk_data_dir = ensure_double_backslashes(config['configurations']['zoo.cfg']['dataDir'])

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/common-services/ZOOKEEPER/3.4.5.2.0/package/scripts/zookeeper.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/ZOOKEEPER/3.4.5.2.0/package/scripts/zookeeper.py b/ambari-server/src/main/resources/common-services/ZOOKEEPER/3.4.5.2.0/package/scripts/zookeeper.py
index d6c40ee..6ea9047 100644
--- a/ambari-server/src/main/resources/common-services/ZOOKEEPER/3.4.5.2.0/package/scripts/zookeeper.py
+++ b/ambari-server/src/main/resources/common-services/ZOOKEEPER/3.4.5.2.0/package/scripts/zookeeper.py
@@ -107,6 +107,12 @@ def zookeeper(type = None, rolling_restart = False):
   configFile("zoo.cfg", template_name="zoo.cfg.j2", mode="f")
   configFile("configuration.xsl", template_name="configuration.xsl.j2", mode="f")
 
+  ServiceConfig(params.zookeeper_win_service_name,
+                action="change_user",
+                username = params.zk_user,
+                password = Script.get_password(params.zk_user))
+
+
   Directory(params.zk_data_dir,
             owner=params.zk_user,
             mode="(OI)(CI)F",

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/stacks/HDPWIN/2.1/hooks/after-INSTALL/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDPWIN/2.1/hooks/after-INSTALL/scripts/params.py b/ambari-server/src/main/resources/stacks/HDPWIN/2.1/hooks/after-INSTALL/scripts/params.py
index 3f494d3..bfc605c 100644
--- a/ambari-server/src/main/resources/stacks/HDPWIN/2.1/hooks/after-INSTALL/scripts/params.py
+++ b/ambari-server/src/main/resources/stacks/HDPWIN/2.1/hooks/after-INSTALL/scripts/params.py
@@ -23,7 +23,8 @@ from urlparse import urlparse
 config = Script.get_config()
 hadoop_conf_dir = None
 hadoop_common_dir = os.path.join("share", "hadoop", "common", "lib")
-hdfs_user="hadoop"
+hadoop_user = config["configurations"]["cluster-env"]["hadoop.user.name"]
+hdfs_user = hadoop_user
 hadoop_common_bin = "bin"
 
 if os.environ.has_key("HADOOP_CONF_DIR"):

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/main/resources/stacks/HDPWIN/2.1/hooks/before-START/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDPWIN/2.1/hooks/before-START/scripts/params.py b/ambari-server/src/main/resources/stacks/HDPWIN/2.1/hooks/before-START/scripts/params.py
index a9ac605..093ea38 100644
--- a/ambari-server/src/main/resources/stacks/HDPWIN/2.1/hooks/before-START/scripts/params.py
+++ b/ambari-server/src/main/resources/stacks/HDPWIN/2.1/hooks/before-START/scripts/params.py
@@ -35,4 +35,4 @@ if has_metric_collector:
 
 hadoop_conf_dir = os.environ["HADOOP_CONF_DIR"]
 hbase_conf_dir = os.environ["HBASE_CONF_DIR"]
-hadoop_user = "hadoop"
\ No newline at end of file
+hadoop_user = config["configurations"]["cluster-env"]["hadoop.user.name"]

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeTest.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeTest.java
index 92b9297..0ca5bb0 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeTest.java
@@ -85,7 +85,7 @@ public class UpgradeTest {
   private static String DROP_DERBY_URL = "jdbc:derby:memory:myDB/ambari;drop=true";
 
   private final String sourceVersion;
-  private  Properties properties = new Properties();
+  private Properties properties = new Properties();
 
   private Injector injector;
 
@@ -94,9 +94,9 @@ public class UpgradeTest {
     properties.setProperty(Configuration.SERVER_PERSISTENCE_TYPE_KEY, "remote");
     properties.setProperty(Configuration.SERVER_JDBC_URL_KEY, Configuration.JDBC_IN_MEMORY_URL);
     properties.setProperty(Configuration.SERVER_JDBC_DRIVER_KEY, Configuration.JDBC_IN_MEMROY_DRIVER);
-    properties.setProperty(Configuration.METADETA_DIR_PATH,"src/test/resources/stacks");
-    properties.setProperty(Configuration.SERVER_VERSION_FILE,"src/test/resources/version");
-    properties.setProperty(Configuration.OS_VERSION_KEY,"centos5");
+    properties.setProperty(Configuration.METADETA_DIR_PATH, "src/test/resources/stacks");
+    properties.setProperty(Configuration.SERVER_VERSION_FILE, "src/test/resources/version");
+    properties.setProperty(Configuration.OS_VERSION_KEY, "centos5");
     properties.setProperty(Configuration.SHARED_RESOURCES_DIR_KEY, "src/test/resources/");
   }
 
@@ -188,7 +188,7 @@ public class UpgradeTest {
     LOG.info("Upgrading schema to target version = " + targetVersion);
 
     UpgradeCatalog targetUpgradeCatalog = AbstractUpgradeCatalog
-      .getUpgradeCatalog(targetVersion);
+        .getUpgradeCatalog(targetVersion);
 
     LOG.debug("Target upgrade catalog. " + targetUpgradeCatalog);
 
@@ -197,7 +197,7 @@ public class UpgradeTest {
     LOG.info("Upgrading schema from source version = " + sourceVersion);
 
     List<UpgradeCatalog> upgradeCatalogs =
-      schemaUpgradeHelper.getUpgradePath(sourceVersion, targetVersion);
+        schemaUpgradeHelper.getUpgradePath(sourceVersion, targetVersion);
 
     try {
       schemaUpgradeHelper.executeUpgrade(upgradeCatalogs);

http://git-wip-us.apache.org/repos/asf/ambari/blob/77e4d50c/ambari-server/src/test/python/stacks/2.0.6/hooks/before-START/test_before_start.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/hooks/before-START/test_before_start.py b/ambari-server/src/test/python/stacks/2.0.6/hooks/before-START/test_before_start.py
index 2a810a0..fb2699a 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/hooks/before-START/test_before_start.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/hooks/before-START/test_before_start.py
@@ -23,6 +23,7 @@ from mock.mock import MagicMock, call, patch
 from resource_management import Hook
 import json
 
+@patch("platform.linux_distribution", new = MagicMock(return_value="Linux"))
 @patch("os.path.exists", new = MagicMock(return_value=True))
 @patch.object(Hook, "run_custom_hook", new = MagicMock())
 class TestHookBeforeStart(RMFTestCase):