You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ao...@apache.org on 2014/02/03 17:44:16 UTC

[3/5] git commit: AMBARI-4487. When logging certain operations, need to mask sensitive properties (aonishuk)

AMBARI-4487. When logging certain operations, need to mask sensitive
properties (aonishuk)


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

Branch: refs/heads/trunk
Commit: 92c040b5baace56f64190142fa790e292d2aaf03
Parents: 0224d15
Author: Andrew Onischuk <ao...@hortonworks.com>
Authored: Mon Feb 3 08:05:55 2014 -0800
Committer: Andrew Onischuk <ao...@hortonworks.com>
Committed: Mon Feb 3 08:44:00 2014 -0800

----------------------------------------------------------------------
 .../python/resource_management/core/__init__.py |  1 +
 .../python/resource_management/core/base.py     |  8 +-
 .../resource_management/core/environment.py     | 40 ++--------
 .../python/resource_management/core/logger.py   | 82 ++++++++++++++++++++
 .../core/providers/__init__.py                  |  2 -
 .../core/providers/accounts.py                  | 13 ++--
 .../resource_management/core/providers/mount.py | 13 ++--
 .../core/providers/package/yumrpm.py            |  5 +-
 .../core/providers/package/zypper.py            |  5 +-
 .../core/providers/service.py                   |  5 +-
 .../core/providers/system.py                    | 38 ++++-----
 .../python/resource_management/core/shell.py    |  6 +-
 .../libraries/functions/check_process_status.py |  9 +--
 .../libraries/functions/default.py              |  5 +-
 .../libraries/functions/format.py               | 30 ++++++-
 .../libraries/providers/properties_file.py      |  2 +-
 .../libraries/providers/xml_config.py           |  2 +-
 .../HIVE/package/scripts/hive_service.py        |  2 +-
 .../HIVE/package/scripts/mysql_server.py        | 23 ++----
 .../services/HIVE/package/scripts/params.py     |  2 +
 .../HIVE/package/scripts/status_params.py       |  5 ++
 .../services/NAGIOS/package/scripts/nagios.py   |  2 +-
 .../OOZIE/package/scripts/oozie_service.py      |  2 +-
 .../HIVE/package/scripts/hive_service.py        |  2 +-
 .../HIVE/package/scripts/mysql_server.py        | 23 ++----
 .../services/HIVE/package/scripts/params.py     |  2 +
 .../HIVE/package/scripts/status_params.py       |  5 ++
 .../services/NAGIOS/package/scripts/nagios.py   |  2 +-
 .../OOZIE/package/scripts/oozie_service.py      |  2 +-
 .../stacks/1.3.2/HIVE/test_mysql_server.py      |  6 +-
 .../stacks/2.0.6/HIVE/test_mysql_server.py      |  6 +-
 31 files changed, 212 insertions(+), 138 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-agent/src/main/python/resource_management/core/__init__.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/resource_management/core/__init__.py b/ambari-agent/src/main/python/resource_management/core/__init__.py
index e321fef..1af793b 100644
--- a/ambari-agent/src/main/python/resource_management/core/__init__.py
+++ b/ambari-agent/src/main/python/resource_management/core/__init__.py
@@ -28,5 +28,6 @@ from resource_management.core.resources import *
 from resource_management.core.source import *
 from resource_management.core.system import *
 from resource_management.core.shell import *
+from resource_management.core.logger import *
 
 __version__ = "0.4.1"

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-agent/src/main/python/resource_management/core/base.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/resource_management/core/base.py b/ambari-agent/src/main/python/resource_management/core/base.py
index 462bdce..ff1d7f6 100644
--- a/ambari-agent/src/main/python/resource_management/core/base.py
+++ b/ambari-agent/src/main/python/resource_management/core/base.py
@@ -23,9 +23,9 @@ Ambari Agent
 __all__ = ["Resource", "ResourceArgument", "ForcedListArgument",
            "BooleanArgument"]
 
-import logging
 from resource_management.core.exceptions import Fail, InvalidArgument
 from resource_management.core.environment import Environment
+from resource_management.core.logger import Logger
 
 class ResourceArgument(object):
   def __init__(self, default=None, required=False):
@@ -93,8 +93,6 @@ class ResourceMetaclass(type):
 class Resource(object):
   __metaclass__ = ResourceMetaclass
 
-  log = logging.getLogger("resource_management.resource")
-
   action = ForcedListArgument(default="nothing")
   ignore_failures = BooleanArgument(default=False)
   not_if = ResourceArgument() # pass command e.g. not_if = ('ls','/root/jdk')
@@ -146,7 +144,7 @@ class Resource(object):
         except InvalidArgument, exc:
           raise InvalidArgument("%s %s" % (self, exc))
 
-    Resource.log.debug("New resource %s: %s" % (self, self.arguments))
+    Logger.debug("New resource %s: %s" % (self, self.arguments))
     
     if not self.env.test_mode:
       self.env.run()
@@ -174,6 +172,4 @@ class Resource(object):
     self.arguments = state['arguments']
     self.env = state['env']
 
-    Resource.log = logging.getLogger("resource_management.resource")
-
     self.validate()

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-agent/src/main/python/resource_management/core/environment.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/resource_management/core/environment.py b/ambari-agent/src/main/python/resource_management/core/environment.py
index 931b223..07aef95 100644
--- a/ambari-agent/src/main/python/resource_management/core/environment.py
+++ b/ambari-agent/src/main/python/resource_management/core/environment.py
@@ -22,7 +22,6 @@ Ambari Agent
 
 __all__ = ["Environment"]
 
-import logging
 import os
 import shutil
 import time
@@ -33,6 +32,7 @@ from resource_management.core.exceptions import Fail
 from resource_management.core.providers import find_provider
 from resource_management.core.utils import AttributeDictionary
 from resource_management.core.system import System
+from resource_management.core.logger import Logger
 
 
 class Environment(object):
@@ -44,7 +44,6 @@ class Environment(object):
     are looked up
     @param test_mode: if this is enabled, resources won't be executed until manualy running env.run().
     """
-    self.log = logging.getLogger("resource_management")
     self.reset(basedir, test_mode)
 
   def reset(self, basedir, test_mode):
@@ -73,7 +72,7 @@ class Environment(object):
         os.makedirs(self.config.backup.path, 0700)
       new_name = self.config.backup.prefix + path.replace('/', '-')
       backup_path = os.path.join(self.config.backup.path, new_name)
-      self.log.info("backing up %s to %s" % (path, backup_path))
+      Logger.info("backing up %s to %s" % (path, backup_path))
       shutil.copy(path, backup_path)
 
   def update_config(self, attributes, overwrite=True):
@@ -104,7 +103,7 @@ class Environment(object):
         self.config.params[variable] = value
         
   def run_action(self, resource, action):
-    self.log.debug("Performing action %s on %s" % (action, resource))
+    Logger.debug("Performing action %s on %s" % (action, resource))
 
     provider_class = find_provider(self, resource.__class__.__name__,
                                    resource.provider)
@@ -123,51 +122,26 @@ class Environment(object):
       ret, out = shell.call(cond)
       return ret == 0
 
-    raise Exception("Unknown condition type %r" % cond)
-
-  def _get_resource_repr(self, resource):
-    arguments_str = ""
-    for x,y in resource.arguments.iteritems():
-      
-      # strip unicode 'u' sign
-      if isinstance(y, unicode):
-        val = repr(y).lstrip('u')
-      # don't show dicts of configurations
-      # usually too long  
-      elif isinstance(y, dict):
-        val = "..."
-      # correctly output 'mode' (as they are octal values like 0755)
-      elif y and x == 'mode':
-        val = oct(y)
-      else:
-        val = repr(y)
-      
-      
-      arguments_str += "'{0}': {1}, ".format(x, val)
-      
-    if arguments_str:  
-      arguments_str = arguments_str[:-2]
-    
-    return "{0} {{{1}}}".format(resource, arguments_str)  
+    raise Exception("Unknown condition type %r" % cond) 
     
   def run(self):
     with self:
       # Run resource actions
       while self.resource_list:
         resource = self.resource_list.pop(0)
-        self.log.info(self._get_resource_repr(resource))
+        Logger.info_resource(resource)
         
         if resource.initial_wait:
           time.sleep(resource.initial_wait)
 
         if resource.not_if is not None and self._check_condition(
           resource.not_if):
-          self.log.info("Skipping %s due to not_if" % resource)
+          Logger.info("Skipping %s due to not_if" % resource)
           continue
 
         if resource.only_if is not None and not self._check_condition(
           resource.only_if):
-          self.log.info("Skipping %s due to only_if" % resource)
+          Logger.info("Skipping %s due to only_if" % resource)
           continue
 
         for action in resource.action:

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-agent/src/main/python/resource_management/core/logger.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/resource_management/core/logger.py b/ambari-agent/src/main/python/resource_management/core/logger.py
new file mode 100644
index 0000000..0aa62ad
--- /dev/null
+++ b/ambari-agent/src/main/python/resource_management/core/logger.py
@@ -0,0 +1,82 @@
+#!/usr/bin/env python
+"""
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Ambari Agent
+
+"""
+
+__all__ = ["Logger"]
+import logging
+
+class Logger:
+  logger = logging.getLogger("resource_management")
+  
+  # unprotected_strings : protected_strings map
+  sensitive_strings = {}
+  
+  @staticmethod
+  def info(text):
+    Logger.logger.info(Logger.get_protected_text(text))
+  
+  @staticmethod  
+  def debug(text):
+    Logger.logger.debug(Logger.get_protected_text(text))
+
+  @staticmethod
+  def info_resource(resource):
+    Logger.info(Logger.get_protected_text(Logger._get_resource_repr(resource)))
+  
+  @staticmethod  
+  def debug_resource(resource):
+    Logger.debug(Logger.get_protected_text(Logger._get_resource_repr(resource)))
+    
+  @staticmethod
+  def get_protected_text(text):
+    """
+    Replace passwords with [PROTECTED]
+    """
+    for unprotected_string, protected_string in Logger.sensitive_strings.iteritems():
+      text = text.replace(unprotected_string, protected_string)
+      
+    return text
+    
+  @staticmethod  
+  def _get_resource_repr(resource):
+    arguments_str = ""
+    for x,y in resource.arguments.iteritems():
+      
+      # strip unicode 'u' sign
+      if isinstance(y, unicode):
+        val = repr(y).lstrip('u')
+      # don't show dicts of configurations
+      # usually too long  
+      elif isinstance(y, dict):
+        val = "..."
+      # correctly output 'mode' (as they are octal values like 0755)
+      elif y and x == 'mode':
+        val = oct(y)
+      else:
+        val = repr(y)
+      
+      
+      arguments_str += "'{0}': {1}, ".format(x, val)
+      
+    if arguments_str:  
+      arguments_str = arguments_str[:-2]
+    
+    return "{0} {{{1}}}".format(resource, arguments_str)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-agent/src/main/python/resource_management/core/providers/__init__.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/resource_management/core/providers/__init__.py b/ambari-agent/src/main/python/resource_management/core/providers/__init__.py
index ea2fef3..64c32ce 100644
--- a/ambari-agent/src/main/python/resource_management/core/providers/__init__.py
+++ b/ambari-agent/src/main/python/resource_management/core/providers/__init__.py
@@ -22,14 +22,12 @@ Ambari Agent
 
 __all__ = ["Provider", "find_provider"]
 
-import logging
 from resource_management.core.exceptions import Fail
 from resource_management.libraries.providers import PROVIDERS as LIBRARY_PROVIDERS
 
 
 class Provider(object):
   def __init__(self, resource):
-    self.log = logging.getLogger("resource_management.provider")
     self.resource = resource
 
   def action_nothing(self):

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-agent/src/main/python/resource_management/core/providers/accounts.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/resource_management/core/providers/accounts.py b/ambari-agent/src/main/python/resource_management/core/providers/accounts.py
index 12350ac..92a528b 100644
--- a/ambari-agent/src/main/python/resource_management/core/providers/accounts.py
+++ b/ambari-agent/src/main/python/resource_management/core/providers/accounts.py
@@ -26,16 +26,17 @@ import grp
 import pwd
 from resource_management.core import shell
 from resource_management.core.providers import Provider
+from resource_management.core.logger import Logger
 
 
 class UserProvider(Provider):
   def action_create(self):
     if not self.user:
       command = ['useradd', "-m"]
-      self.log.info("Adding user %s" % self.resource)
+      Logger.info("Adding user %s" % self.resource)
     else:
       command = ['usermod']
-      self.log.info("Modifying user %s" % (self.resource.username))
+      Logger.info("Modifying user %s" % (self.resource.username))
 
     options = dict(
       comment="-c",
@@ -65,7 +66,7 @@ class UserProvider(Provider):
     if self.user:
       command = ['userdel', self.resource.username]
       shell.checked_call(command)
-      self.log.info("Removed user %s" % self.resource)
+      Logger.info("Removed user %s" % self.resource)
 
   @property
   def user(self):
@@ -80,10 +81,10 @@ class GroupProvider(Provider):
     group = self.group
     if not group:
       command = ['groupadd']
-      self.log.info("Adding group %s" % self.resource)
+      Logger.info("Adding group %s" % self.resource)
     else:
       command = ['groupmod']
-      self.log.info("Modifying group %s" % (self.resource.group_name))
+      Logger.info("Modifying group %s" % (self.resource.group_name))
       
     options = dict(
         gid="-g",
@@ -105,7 +106,7 @@ class GroupProvider(Provider):
     if self.group:
       command = ['groupdel', self.resource.group_name]
       shell.checked_call(command)
-      self.log.info("Removed group %s" % self.resource)
+      Logger.info("Removed group %s" % self.resource)
 
   @property
   def group(self):

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-agent/src/main/python/resource_management/core/providers/mount.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/resource_management/core/providers/mount.py b/ambari-agent/src/main/python/resource_management/core/providers/mount.py
index 703d669..dc6d7d9 100644
--- a/ambari-agent/src/main/python/resource_management/core/providers/mount.py
+++ b/ambari-agent/src/main/python/resource_management/core/providers/mount.py
@@ -26,6 +26,7 @@ import os
 import re
 from resource_management.core.base import Fail
 from resource_management.core.providers import Provider
+from resource_management.core.logger import Logger
 
 
 class MountProvider(Provider):
@@ -34,7 +35,7 @@ class MountProvider(Provider):
       os.makedirs(self.resource.mount_point)
 
     if self.is_mounted():
-      self.log.debug("%s already mounted" % self)
+      Logger.debug("%s already mounted" % self)
     else:
       args = ["mount"]
       if self.resource.fstype:
@@ -47,19 +48,19 @@ class MountProvider(Provider):
 
       check_call(args)
 
-      self.log.info("%s mounted" % self)
+      Logger.info("%s mounted" % self)
 
   def action_umount(self):
     if self.is_mounted():
       check_call(["umount", self.resource.mount_point])
 
-      self.log.info("%s unmounted" % self)
+      Logger.info("%s unmounted" % self)
     else:
-      self.log.debug("%s is not mounted" % self)
+      Logger.debug("%s is not mounted" % self)
 
   def action_enable(self):
     if self.is_enabled():
-      self.log.debug("%s already enabled" % self)
+      Logger.debug("%s already enabled" % self)
     else:
       if not self.resource.device:
         raise Fail("[%s] device not set but required for enable action" % self)
@@ -76,7 +77,7 @@ class MountProvider(Provider):
           self.resource.passno,
         ))
 
-      self.log.info("%s enabled" % self)
+      Logger.info("%s enabled" % self)
 
   def action_disable(self):
     pass # TODO

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-agent/src/main/python/resource_management/core/providers/package/yumrpm.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/resource_management/core/providers/package/yumrpm.py b/ambari-agent/src/main/python/resource_management/core/providers/package/yumrpm.py
index 2e7218e..4e1d34e 100644
--- a/ambari-agent/src/main/python/resource_management/core/providers/package/yumrpm.py
+++ b/ambari-agent/src/main/python/resource_management/core/providers/package/yumrpm.py
@@ -22,6 +22,7 @@ Ambari Agent
 
 from resource_management.core.providers.package import PackageProvider
 from resource_management.core import shell
+from resource_management.core.logger import Logger
 
 INSTALL_CMD = "/usr/bin/yum -d 0 -e 0 -y install %s"
 REMOVE_CMD = "/usr/bin/yum -d 0 -e 0 -y erase %s"
@@ -29,7 +30,7 @@ REMOVE_CMD = "/usr/bin/yum -d 0 -e 0 -y erase %s"
 class YumProvider(PackageProvider):
   def install_package(self, name):
     cmd = INSTALL_CMD % (name)
-    self.log.info("Installing package %s ('%s')", name, cmd)
+    Logger.info("Installing package %s ('%s')" % (name, cmd))
     shell.checked_call(cmd)
 
   def upgrade_package(self, name):
@@ -37,5 +38,5 @@ class YumProvider(PackageProvider):
   
   def remove_package(self, name):
     cmd = REMOVE_CMD % (name)
-    self.log.info("Removing package %s ('%s')", name, cmd)
+    Logger.info("Removing package %s ('%s')" % (name, cmd))
     shell.checked_call(cmd)    

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-agent/src/main/python/resource_management/core/providers/package/zypper.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/resource_management/core/providers/package/zypper.py b/ambari-agent/src/main/python/resource_management/core/providers/package/zypper.py
index 665a563..8815261 100644
--- a/ambari-agent/src/main/python/resource_management/core/providers/package/zypper.py
+++ b/ambari-agent/src/main/python/resource_management/core/providers/package/zypper.py
@@ -22,6 +22,7 @@ Ambari Agent
 
 from resource_management.core.providers.package import PackageProvider
 from resource_management.core import shell
+from resource_management.core.logger import Logger
 
 INSTALL_CMD = "/usr/bin/zypper --quiet install --auto-agree-with-licenses --no-confirm %s"
 REMOVE_CMD = "/usr/bin/zypper --quiet remove --no-confirm %s"
@@ -29,7 +30,7 @@ REMOVE_CMD = "/usr/bin/zypper --quiet remove --no-confirm %s"
 class ZypperProvider(PackageProvider):
   def install_package(self, name):
     cmd = INSTALL_CMD % (name)
-    self.log.info("Installing package %s ('%s')", name, cmd)
+    Logger.info("Installing package %s ('%s')", name, cmd)
     shell.checked_call(cmd)
 
   def upgrade_package(self, name):
@@ -37,5 +38,5 @@ class ZypperProvider(PackageProvider):
   
   def remove_package(self, name):
     cmd = REMOVE_CMD % (name)
-    self.log.info("Removing package %s ('%s')", name, cmd)
+    Logger.info("Removing package %s ('%s')", name, cmd)
     shell.checked_call(cmd)

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-agent/src/main/python/resource_management/core/providers/service.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/resource_management/core/providers/service.py b/ambari-agent/src/main/python/resource_management/core/providers/service.py
index f8db8b8..23b1b3a 100644
--- a/ambari-agent/src/main/python/resource_management/core/providers/service.py
+++ b/ambari-agent/src/main/python/resource_management/core/providers/service.py
@@ -25,6 +25,7 @@ import os
 from resource_management.core import shell
 from resource_management.core.base import Fail
 from resource_management.core.providers import Provider
+from resource_management.core.logger import Logger
 
 
 class ServiceProvider(Provider):
@@ -53,11 +54,11 @@ class ServiceProvider(Provider):
 
   def _exec_cmd(self, command, expect=None):
     if command != "status":
-      self.log.info("%s command '%s'" % (self.resource, command))
+      Logger.info("%s command '%s'" % (self.resource, command))
 
     custom_cmd = getattr(self.resource, "%s_command" % command, None)
     if custom_cmd:
-      self.log.debug("%s executing '%s'" % (self.resource, custom_cmd))
+      Logger.debug("%s executing '%s'" % (self.resource, custom_cmd))
       if hasattr(custom_cmd, "__call__"):
         if custom_cmd():
           ret = 0

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-agent/src/main/python/resource_management/core/providers/system.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/resource_management/core/providers/system.py b/ambari-agent/src/main/python/resource_management/core/providers/system.py
index ca428e2..5191113 100644
--- a/ambari-agent/src/main/python/resource_management/core/providers/system.py
+++ b/ambari-agent/src/main/python/resource_management/core/providers/system.py
@@ -30,6 +30,7 @@ import shutil
 from resource_management.core import shell
 from resource_management.core.base import Fail
 from resource_management.core.providers import Provider
+from resource_management.core.logger import Logger
 
 
 def _coerce_uid(user):
@@ -54,27 +55,27 @@ def _coerce_gid(group):
   return gid
 
 
-def _ensure_metadata(path, user, group, mode=None, log=None):
+def _ensure_metadata(path, user, group, mode=None):
   stat = os.stat(path)
 
   if mode:
     existing_mode = stat.st_mode & 07777
     if existing_mode != mode:
-      log and log.info("Changing permission for %s from %o to %o" % (
+      Logger.info("Changing permission for %s from %o to %o" % (
       path, existing_mode, mode))
       os.chmod(path, mode)
 
   if user:
     uid = _coerce_uid(user)
     if stat.st_uid != uid:
-      log and log.info(
+      Logger.info(
         "Changing owner for %s from %d to %s" % (path, stat.st_uid, user))
       os.chown(path, uid, -1)
 
   if group:
     gid = _coerce_gid(group)
     if stat.st_gid != gid:
-      log and log.info(
+      Logger.info(
         "Changing group for %s from %d to %s" % (path, stat.st_gid, group))
       os.chown(path, -1, gid)
 
@@ -106,14 +107,13 @@ class FileProvider(Provider):
             self.resource.env.backup_file(path)
 
     if write:
-      self.log.info("Writing %s because %s" % (self.resource, reason))
+      Logger.info("Writing %s because %s" % (self.resource, reason))
       with open(path, "wb") as fp:
         if content:
           fp.write(content)
 
     _ensure_metadata(self.resource.path, self.resource.owner,
-                        self.resource.group, mode=self.resource.mode,
-                        log=self.log)
+                        self.resource.group, mode=self.resource.mode)
 
   def action_delete(self):
     path = self.resource.path
@@ -122,7 +122,7 @@ class FileProvider(Provider):
       raise Fail("Applying %s failed, %s is directory not file!" % (self.resource, path))
     
     if os.path.exists(path):
-      self.log.info("Deleting %s" % self.resource)
+      Logger.info("Deleting %s" % self.resource)
       os.unlink(path)
 
   def _get_content(self):
@@ -140,7 +140,7 @@ class DirectoryProvider(Provider):
   def action_create(self):
     path = self.resource.path
     if not os.path.exists(path):
-      self.log.info("Creating directory %s" % self.resource)
+      Logger.info("Creating directory %s" % self.resource)
       if self.resource.recursive:
         os.makedirs(path, self.resource.mode or 0755)
       else:
@@ -154,7 +154,7 @@ class DirectoryProvider(Provider):
       raise Fail("Applying %s failed, file %s already exists" % (self.resource, path))
 
     _ensure_metadata(path, self.resource.owner, self.resource.group,
-                        mode=self.resource.mode, log=self.log)
+                        mode=self.resource.mode)
 
   def action_delete(self):
     path = self.resource.path
@@ -162,7 +162,7 @@ class DirectoryProvider(Provider):
       if not os.path.isdir(path):
         raise Fail("Applying %s failed, %s is not a directory" % (self.resource, path))
       
-      self.log.info("Removing directory %s and all its content" % self.resource)
+      Logger.info("Removing directory %s and all its content" % self.resource)
       shutil.rmtree(path)
 
 
@@ -177,7 +177,7 @@ class LinkProvider(Provider):
       if not os.path.islink(path):
         raise Fail(
           "%s trying to create a symlink with the same name as an existing file or directory" % self)
-      self.log.info("%s replacing old symlink to %s" % (self.resource, oldpath))
+      Logger.info("%s replacing old symlink to %s" % (self.resource, oldpath))
       os.unlink(path)
       
     if self.resource.hard:
@@ -186,19 +186,19 @@ class LinkProvider(Provider):
       if os.path.isdir(self.resource.to):
         raise Fail("Failed to apply %s, cannot create hard link to a directory (%s)" % (self.resource, self.resource.to))
       
-      self.log.info("Creating hard %s" % self.resource)
+      Logger.info("Creating hard %s" % self.resource)
       os.link(self.resource.to, path)
     else:
       if not os.path.exists(self.resource.to):
-        self.log.info("Warning: linking to nonexistent location %s", self.resource.to)
+        Logger.info("Warning: linking to nonexistent location %s", self.resource.to)
         
-      self.log.info("Creating symbolic %s" % self.resource)
+      Logger.info("Creating symbolic %s" % self.resource)
       os.symlink(self.resource.to, path)
 
   def action_delete(self):
     path = self.resource.path
     if os.path.exists(path):
-      self.log.info("Deleting %s" % self.resource)
+      Logger.info("Deleting %s" % self.resource)
       os.unlink(path)
 
 
@@ -218,7 +218,7 @@ class ExecuteProvider(Provider):
       if os.path.exists(self.resource.creates):
         return
 
-    self.log.debug("Executing %s" % self.resource)
+    Logger.debug("Executing %s" % self.resource)
     
     if self.resource.path != []:
       if not self.resource.environment:
@@ -236,7 +236,7 @@ class ExecuteProvider(Provider):
         if i == self.resource.tries-1: # last try
           raise ex
         else:
-          self.log.info("Retrying after %d seconds. Reason: %s", self.resource.try_sleep, str(ex))
+          Logger.info("Retrying after %d seconds. Reason: %s", self.resource.try_sleep, str(ex))
           time.sleep(self.resource.try_sleep)
        
 
@@ -244,7 +244,7 @@ class ExecuteScriptProvider(Provider):
   def action_run(self):
     from tempfile import NamedTemporaryFile
 
-    self.log.info("Running script %s" % self.resource)
+    Logger.info("Running script %s" % self.resource)
     with NamedTemporaryFile(prefix="resource_management-script", bufsize=0) as tf:
       tf.write(self.resource.code)
       tf.flush()

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-agent/src/main/python/resource_management/core/shell.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/resource_management/core/shell.py b/ambari-agent/src/main/python/resource_management/core/shell.py
index 6739974..7133791 100644
--- a/ambari-agent/src/main/python/resource_management/core/shell.py
+++ b/ambari-agent/src/main/python/resource_management/core/shell.py
@@ -22,12 +22,10 @@ Ambari Agent
 
 __all__ = ["checked_call"]
 
-import logging
 import subprocess
 import pipes
 from exceptions import Fail
-
-log = logging.getLogger("resource_management.provider")
+from resource_management.core.logger import Logger
 
 def checked_call(command, logoutput=False, 
          cwd=None, env=None, preexec_fn=None, user=None):
@@ -67,7 +65,7 @@ def _call(command, logoutput=False, throw_on_failure=True,
   code = proc.returncode
   
   if logoutput and out and out!="":
-    log.info(out)
+    Logger.info(out)
   
   if throw_on_failure and code:
     err_msg = ("Execution of '%s' returned %d. %s") % (command[-1], code, out)

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-agent/src/main/python/resource_management/libraries/functions/check_process_status.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/resource_management/libraries/functions/check_process_status.py b/ambari-agent/src/main/python/resource_management/libraries/functions/check_process_status.py
index b127b6a..7fdecdc 100644
--- a/ambari-agent/src/main/python/resource_management/libraries/functions/check_process_status.py
+++ b/ambari-agent/src/main/python/resource_management/libraries/functions/check_process_status.py
@@ -21,11 +21,10 @@ Ambari Agent
 """
 
 from resource_management.core.exceptions import ComponentIsNotRunning
+from resource_management.core.logger import Logger
 __all__ = ["check_process_status"]
 
-import os, logging
-
-log = logging.getLogger('resource_management')
+import os
 
 def check_process_status(pid_file):
   """
@@ -42,7 +41,7 @@ def check_process_status(pid_file):
     try:
       pid = int(f.read())
     except:
-      log.debug("Pid file {0} does not exist".format(pid_file))
+      Logger.debug("Pid file {0} does not exist".format(pid_file))
       raise ComponentIsNotRunning()
     try:
       # Kill will not actually kill the process
@@ -52,7 +51,7 @@ def check_process_status(pid_file):
       # process ID or process group ID.
       os.kill(pid, 0)
     except OSError:
-      log.debug("Process with pid {0} is not running. Stale pid file"
+      Logger.debug("Process with pid {0} is not running. Stale pid file"
                 " at {1}".format(pid, pid_file))
       raise ComponentIsNotRunning()
   pass

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-agent/src/main/python/resource_management/libraries/functions/default.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/resource_management/libraries/functions/default.py b/ambari-agent/src/main/python/resource_management/libraries/functions/default.py
index a66b9cd..459cb5d 100644
--- a/ambari-agent/src/main/python/resource_management/libraries/functions/default.py
+++ b/ambari-agent/src/main/python/resource_management/libraries/functions/default.py
@@ -21,12 +21,11 @@ Ambari Agent
 """
 
 __all__ = ["default"]
-import logging
 from resource_management.libraries.script import Script
 from resource_management.libraries.script.config_dictionary import UnknownConfiguration
+from resource_management.core.logger import Logger
 
 default_subdict='/configurations/global'
-log = logging.getLogger('resource_management')
 
 def default(name, default_value):
   subdicts = filter(None, name.split('/'))
@@ -40,7 +39,7 @@ def default(name, default_value):
       curr_dict = curr_dict[x]
     else:
       if not isinstance(default_value, UnknownConfiguration):
-        log.debug("Cannot find configuration: '%s'. Using '%s' value as default" % (name, default_value))
+        Logger.debug("Cannot find configuration: '%s'. Using '%s' value as default" % (name, default_value))
       return default_value
 
   return curr_dict
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-agent/src/main/python/resource_management/libraries/functions/format.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/resource_management/libraries/functions/format.py b/ambari-agent/src/main/python/resource_management/libraries/functions/format.py
index 87869ea..5320d2a 100644
--- a/ambari-agent/src/main/python/resource_management/libraries/functions/format.py
+++ b/ambari-agent/src/main/python/resource_management/libraries/functions/format.py
@@ -26,6 +26,7 @@ from string import Formatter
 from resource_management.core.exceptions import Fail
 from resource_management.core.utils import checked_unite
 from resource_management.core.environment import Environment
+from resource_management.core.logger import Logger
 
 
 class ConfigurationFormatter(Formatter):
@@ -33,9 +34,34 @@ class ConfigurationFormatter(Formatter):
     env = Environment.get_instance()
     variables = kwargs
     params = env.config.params
+    all_params = checked_unite(variables, params)
     
-    result = checked_unite(variables, params)
-    return self.vformat(format_string, args, result)
+    self.convert_field = self.convert_field_protected
+    result_protected = self.vformat(format_string, args, all_params)
+    
+    self.convert_field = self.convert_field_unprotected
+    result_unprotected = self.vformat(format_string, args, all_params)
+    
+    if result_protected != result_unprotected:
+      Logger.sensitive_strings[result_unprotected] = result_protected
+      
+    return result_unprotected
+  
+  def convert_field_unprotected(self, value, conversion):
+    if conversion == 'p':
+      return value
+      
+    return super(ConfigurationFormatter, self).convert_field(value, conversion)
+  
+  def convert_field_protected(self, value, conversion):
+    """
+    Enable masking sensitive information like
+    passwords from logs via !p (password) format flag.
+    """
+    if conversion == 'p':
+      return "[PROTECTED]"
+      
+    return super(ConfigurationFormatter, self).convert_field(value, conversion)
       
   
 def format(format_string, *args, **kwargs):

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-agent/src/main/python/resource_management/libraries/providers/properties_file.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/resource_management/libraries/providers/properties_file.py b/ambari-agent/src/main/python/resource_management/libraries/providers/properties_file.py
index 70d9218..94a51ff 100644
--- a/ambari-agent/src/main/python/resource_management/libraries/providers/properties_file.py
+++ b/ambari-agent/src/main/python/resource_management/libraries/providers/properties_file.py
@@ -38,7 +38,7 @@ class PropertiesFileProvider(Provider):
 {{key}}={{value}}{% endfor %}
     ''', extra_imports=[time], properties_dict=self.resource.properties)
 
-    self.log.debug(format("Generating properties file: {filepath}"))
+    Logger.info(format("Generating properties file: {filepath}"))
 
     with Environment.get_instance_copy() as env:
       File (format("{filepath}"),

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-agent/src/main/python/resource_management/libraries/providers/xml_config.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/resource_management/libraries/providers/xml_config.py b/ambari-agent/src/main/python/resource_management/libraries/providers/xml_config.py
index b2b8609..84b07ff 100644
--- a/ambari-agent/src/main/python/resource_management/libraries/providers/xml_config.py
+++ b/ambari-agent/src/main/python/resource_management/libraries/providers/xml_config.py
@@ -40,7 +40,7 @@ class XmlConfigProvider(Provider):
   </configuration>''', extra_imports=[time], configurations_dict=self.resource.configurations)
    
   
-    self.log.info(format("Generating config: {conf_dir}/{filename}"))
+    Logger.info(format("Generating config: {conf_dir}/{filename}"))
     
     with Environment.get_instance_copy() as env:
       File (format("{conf_dir}/{filename}"),

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/HIVE/package/scripts/hive_service.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/HIVE/package/scripts/hive_service.py b/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/HIVE/package/scripts/hive_service.py
index e8d4e5c..e81f04e 100644
--- a/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/HIVE/package/scripts/hive_service.py
+++ b/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/HIVE/package/scripts/hive_service.py
@@ -46,7 +46,7 @@ def hive_service(
 
     if params.hive_jdbc_driver == "com.mysql.jdbc.Driver" or params.hive_jdbc_driver == "oracle.jdbc.driver.OracleDriver":
       db_connection_check_command = format(
-        "{java64_home}/bin/java -cp {check_db_connection_jar}:/usr/share/java/{jdbc_jar_name} org.apache.ambari.server.DBConnectionVerification {hive_jdbc_connection_url} {hive_metastore_user_name} {hive_metastore_user_passwd} {hive_jdbc_driver}")
+        "{java64_home}/bin/java -cp {check_db_connection_jar}:/usr/share/java/{jdbc_jar_name} org.apache.ambari.server.DBConnectionVerification {hive_jdbc_connection_url} {hive_metastore_user_name} {hive_metastore_user_passwd!p} {hive_jdbc_driver}")
       Execute(db_connection_check_command,
               path='/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin')
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/HIVE/package/scripts/mysql_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/HIVE/package/scripts/mysql_server.py b/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/HIVE/package/scripts/mysql_server.py
index 8567311..5d9c067 100644
--- a/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/HIVE/package/scripts/mysql_server.py
+++ b/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/HIVE/package/scripts/mysql_server.py
@@ -25,11 +25,6 @@ from mysql_service import mysql_service
 
 class MysqlServer(Script):
 
-  if System.get_instance().os_family == "suse":
-    daemon_name = 'mysql'
-  else:
-    daemon_name = 'mysqld'
-
   def install(self, env):
     self.install_packages(env)
     self.configure(env)
@@ -38,40 +33,38 @@ class MysqlServer(Script):
     import params
     env.set_params(params)
 
-    mysql_service(daemon_name=self.daemon_name, action='start')
+    mysql_service(daemon_name=params.daemon_name, action='start')
 
     File(params.mysql_adduser_path,
          mode=0755,
          content=StaticFile('addMysqlUser.sh')
     )
 
-    # Autoescaping
-    cmd = ("bash", "-x", params.mysql_adduser_path, self.daemon_name,
-           params.hive_metastore_user_name, str(params.hive_metastore_user_passwd) , params.mysql_host[0])
+    cmd = format("bash -x {mysql_adduser_path} {daemon_name} {hive_metastore_user_name} {hive_metastore_user_passwd!p} {mysql_host[0]}")
 
     Execute(cmd,
             tries=3,
             try_sleep=5,
-            path='/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin',
-            logoutput=True
+            path='/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin'
     )
 
-    mysql_service(daemon_name=self.daemon_name, action='stop')
+    mysql_service(daemon_name=params.daemon_name, action='stop')
 
   def start(self, env):
     import params
     env.set_params(params)
 
-    mysql_service(daemon_name=self.daemon_name, action = 'start')
+    mysql_service(daemon_name=params.daemon_name, action = 'start')
 
   def stop(self, env):
     import params
     env.set_params(params)
 
-    mysql_service(daemon_name=self.daemon_name, action = 'stop')
+    mysql_service(daemon_name=params.daemon_name, action = 'stop')
 
   def status(self, env):
-    mysql_service(daemon_name=self.daemon_name, action = 'status')
+    import status_params
+    mysql_service(daemon_name=status_params.daemon_name, action = 'status')
 
 if __name__ == "__main__":
   MysqlServer().execute()

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/HIVE/package/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/HIVE/package/scripts/params.py b/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/HIVE/package/scripts/params.py
index 734d3ed..ca8393c 100644
--- a/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/HIVE/package/scripts/params.py
+++ b/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/HIVE/package/scripts/params.py
@@ -133,3 +133,5 @@ if ('hive-exec-log4j' in config['configurations']):
   log4j_exec_props = config['configurations']['hive-exec-log4j']
 else:
   log4j_exec_props = None
+  
+daemon_name = status_params.daemon_name

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/HIVE/package/scripts/status_params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/HIVE/package/scripts/status_params.py b/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/HIVE/package/scripts/status_params.py
index 7770975..8fed3d4 100644
--- a/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/HIVE/package/scripts/status_params.py
+++ b/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/HIVE/package/scripts/status_params.py
@@ -28,3 +28,8 @@ hive_pid = 'hive-server.pid'
 hive_metastore_pid = 'hive.pid'
 
 hcat_pid_dir = config['configurations']['global']['hcat_pid_dir'] #hcat_pid_dir
+
+if System.get_instance().os_family == "suse":
+  daemon_name = 'mysql'
+else:
+  daemon_name = 'mysqld'

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/NAGIOS/package/scripts/nagios.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/NAGIOS/package/scripts/nagios.py b/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/NAGIOS/package/scripts/nagios.py
index 9150995..36f6622 100644
--- a/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/NAGIOS/package/scripts/nagios.py
+++ b/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/NAGIOS/package/scripts/nagios.py
@@ -77,7 +77,7 @@ def nagios():
 def set_web_permisssions():
   import params
 
-  cmd = format("{htpasswd_cmd} -c -b  /etc/nagios/htpasswd.users {nagios_web_login} {nagios_web_password}")
+  cmd = format("{htpasswd_cmd} -c -b  /etc/nagios/htpasswd.users {nagios_web_login} {nagios_web_password!p}")
   test = format("grep {nagios_web_login} /etc/nagios/htpasswd.users")
   Execute( cmd,
     not_if = test

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/OOZIE/package/scripts/oozie_service.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/OOZIE/package/scripts/oozie_service.py b/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/OOZIE/package/scripts/oozie_service.py
index 1d8767c..ad64529 100644
--- a/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/OOZIE/package/scripts/oozie_service.py
+++ b/ambari-server/src/main/resources/stacks/HDP/1.3.2/services/OOZIE/package/scripts/oozie_service.py
@@ -10,7 +10,7 @@ def oozie_service(action = 'start'): # 'start' or 'stop'
     start_cmd = format("cd {oozie_tmp_dir} && /usr/lib/oozie/bin/oozie-start.sh")
     
     if params.jdbc_driver_name == "com.mysql.jdbc.Driver" or params.jdbc_driver_name == "oracle.jdbc.driver.OracleDriver":
-      db_connection_check_command = format("{java_home}/bin/java -cp {check_db_connection_jar}:{jdbc_driver_jar} org.apache.ambari.server.DBConnectionVerification {oozie_jdbc_connection_url} {oozie_metastore_user_name} {oozie_metastore_user_passwd} {jdbc_driver_name}")
+      db_connection_check_command = format("{java_home}/bin/java -cp {check_db_connection_jar}:{jdbc_driver_jar} org.apache.ambari.server.DBConnectionVerification {oozie_jdbc_connection_url} {oozie_metastore_user_name} {oozie_metastore_user_passwd!p} {jdbc_driver_name}")
     else:
       db_connection_check_command = None
       

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/HIVE/package/scripts/hive_service.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/HIVE/package/scripts/hive_service.py b/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/HIVE/package/scripts/hive_service.py
index e8d4e5c..e81f04e 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/HIVE/package/scripts/hive_service.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/HIVE/package/scripts/hive_service.py
@@ -46,7 +46,7 @@ def hive_service(
 
     if params.hive_jdbc_driver == "com.mysql.jdbc.Driver" or params.hive_jdbc_driver == "oracle.jdbc.driver.OracleDriver":
       db_connection_check_command = format(
-        "{java64_home}/bin/java -cp {check_db_connection_jar}:/usr/share/java/{jdbc_jar_name} org.apache.ambari.server.DBConnectionVerification {hive_jdbc_connection_url} {hive_metastore_user_name} {hive_metastore_user_passwd} {hive_jdbc_driver}")
+        "{java64_home}/bin/java -cp {check_db_connection_jar}:/usr/share/java/{jdbc_jar_name} org.apache.ambari.server.DBConnectionVerification {hive_jdbc_connection_url} {hive_metastore_user_name} {hive_metastore_user_passwd!p} {hive_jdbc_driver}")
       Execute(db_connection_check_command,
               path='/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin')
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/HIVE/package/scripts/mysql_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/HIVE/package/scripts/mysql_server.py b/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/HIVE/package/scripts/mysql_server.py
index 8567311..5d9c067 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/HIVE/package/scripts/mysql_server.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/HIVE/package/scripts/mysql_server.py
@@ -25,11 +25,6 @@ from mysql_service import mysql_service
 
 class MysqlServer(Script):
 
-  if System.get_instance().os_family == "suse":
-    daemon_name = 'mysql'
-  else:
-    daemon_name = 'mysqld'
-
   def install(self, env):
     self.install_packages(env)
     self.configure(env)
@@ -38,40 +33,38 @@ class MysqlServer(Script):
     import params
     env.set_params(params)
 
-    mysql_service(daemon_name=self.daemon_name, action='start')
+    mysql_service(daemon_name=params.daemon_name, action='start')
 
     File(params.mysql_adduser_path,
          mode=0755,
          content=StaticFile('addMysqlUser.sh')
     )
 
-    # Autoescaping
-    cmd = ("bash", "-x", params.mysql_adduser_path, self.daemon_name,
-           params.hive_metastore_user_name, str(params.hive_metastore_user_passwd) , params.mysql_host[0])
+    cmd = format("bash -x {mysql_adduser_path} {daemon_name} {hive_metastore_user_name} {hive_metastore_user_passwd!p} {mysql_host[0]}")
 
     Execute(cmd,
             tries=3,
             try_sleep=5,
-            path='/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin',
-            logoutput=True
+            path='/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin'
     )
 
-    mysql_service(daemon_name=self.daemon_name, action='stop')
+    mysql_service(daemon_name=params.daemon_name, action='stop')
 
   def start(self, env):
     import params
     env.set_params(params)
 
-    mysql_service(daemon_name=self.daemon_name, action = 'start')
+    mysql_service(daemon_name=params.daemon_name, action = 'start')
 
   def stop(self, env):
     import params
     env.set_params(params)
 
-    mysql_service(daemon_name=self.daemon_name, action = 'stop')
+    mysql_service(daemon_name=params.daemon_name, action = 'stop')
 
   def status(self, env):
-    mysql_service(daemon_name=self.daemon_name, action = 'status')
+    import status_params
+    mysql_service(daemon_name=status_params.daemon_name, action = 'status')
 
 if __name__ == "__main__":
   MysqlServer().execute()

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/HIVE/package/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/HIVE/package/scripts/params.py b/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/HIVE/package/scripts/params.py
index 734d3ed..9803b35 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/HIVE/package/scripts/params.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/HIVE/package/scripts/params.py
@@ -133,3 +133,5 @@ if ('hive-exec-log4j' in config['configurations']):
   log4j_exec_props = config['configurations']['hive-exec-log4j']
 else:
   log4j_exec_props = None
+
+daemon_name = status_params.daemon_name
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/HIVE/package/scripts/status_params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/HIVE/package/scripts/status_params.py b/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/HIVE/package/scripts/status_params.py
index 7770975..8fed3d4 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/HIVE/package/scripts/status_params.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/HIVE/package/scripts/status_params.py
@@ -28,3 +28,8 @@ hive_pid = 'hive-server.pid'
 hive_metastore_pid = 'hive.pid'
 
 hcat_pid_dir = config['configurations']['global']['hcat_pid_dir'] #hcat_pid_dir
+
+if System.get_instance().os_family == "suse":
+  daemon_name = 'mysql'
+else:
+  daemon_name = 'mysqld'

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/NAGIOS/package/scripts/nagios.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/NAGIOS/package/scripts/nagios.py b/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/NAGIOS/package/scripts/nagios.py
index 9150995..36f6622 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/NAGIOS/package/scripts/nagios.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/NAGIOS/package/scripts/nagios.py
@@ -77,7 +77,7 @@ def nagios():
 def set_web_permisssions():
   import params
 
-  cmd = format("{htpasswd_cmd} -c -b  /etc/nagios/htpasswd.users {nagios_web_login} {nagios_web_password}")
+  cmd = format("{htpasswd_cmd} -c -b  /etc/nagios/htpasswd.users {nagios_web_login} {nagios_web_password!p}")
   test = format("grep {nagios_web_login} /etc/nagios/htpasswd.users")
   Execute( cmd,
     not_if = test

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/OOZIE/package/scripts/oozie_service.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/OOZIE/package/scripts/oozie_service.py b/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/OOZIE/package/scripts/oozie_service.py
index e9edcc9..9db9491 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/OOZIE/package/scripts/oozie_service.py
+++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/OOZIE/package/scripts/oozie_service.py
@@ -30,7 +30,7 @@ def oozie_service(action = 'start'): # 'start' or 'stop'
     start_cmd = format("cd {oozie_tmp_dir} && /usr/lib/oozie/bin/oozie-start.sh")
     
     if params.jdbc_driver_name == "com.mysql.jdbc.Driver" or params.jdbc_driver_name == "oracle.jdbc.driver.OracleDriver":
-      db_connection_check_command = format("{java_home}/bin/java -cp {check_db_connection_jar}:{jdbc_driver_jar} org.apache.ambari.server.DBConnectionVerification {oozie_jdbc_connection_url} {oozie_metastore_user_name} {oozie_metastore_user_passwd} {jdbc_driver_name}")
+      db_connection_check_command = format("{java_home}/bin/java -cp {check_db_connection_jar}:{jdbc_driver_jar} org.apache.ambari.server.DBConnectionVerification {oozie_jdbc_connection_url} {oozie_metastore_user_name} {oozie_metastore_user_passwd!p} {jdbc_driver_name}")
     else:
       db_connection_check_command = None
       

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-server/src/test/python/stacks/1.3.2/HIVE/test_mysql_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/1.3.2/HIVE/test_mysql_server.py b/ambari-server/src/test/python/stacks/1.3.2/HIVE/test_mysql_server.py
index 6f95f1c..62a0ac7 100644
--- a/ambari-server/src/test/python/stacks/1.3.2/HIVE/test_mysql_server.py
+++ b/ambari-server/src/test/python/stacks/1.3.2/HIVE/test_mysql_server.py
@@ -106,8 +106,7 @@ class TestMySqlServer(RMFTestCase):
       content = StaticFile('addMysqlUser.sh'),
       mode = 493,
     )
-    self.assertResourceCalled('Execute', ('bash', '-x', '/tmp/addMysqlUser.sh', 'mysql', 'hive', 'q', 'c6402.ambari.apache.org'),
-      logoutput = True,
+    self.assertResourceCalled('Execute', 'bash -x /tmp/addMysqlUser.sh mysql hive q c6402.ambari.apache.org',
       path = ['/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin'],
       tries = 3,
       try_sleep = 5,
@@ -128,8 +127,7 @@ class TestMySqlServer(RMFTestCase):
       content = StaticFile('addMysqlUser.sh'),
       mode = 493,
     )
-    self.assertResourceCalled('Execute', ('bash', '-x', '/tmp/addMysqlUser.sh', 'mysql', 'hive', 'q', 'c6402.ambari.apache.org'),
-      logoutput = True,
+    self.assertResourceCalled('Execute', 'bash -x /tmp/addMysqlUser.sh mysql hive q c6402.ambari.apache.org',
       path = ['/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin'],
       tries = 3,
       try_sleep = 5,

http://git-wip-us.apache.org/repos/asf/ambari/blob/92c040b5/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_mysql_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_mysql_server.py b/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_mysql_server.py
index 9b61a3e..ef73403 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_mysql_server.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_mysql_server.py
@@ -107,8 +107,7 @@ class TestMySqlServer(RMFTestCase):
       content = StaticFile('addMysqlUser.sh'),
       mode = 493,
     )
-    self.assertResourceCalled('Execute', ('bash', '-x', '/tmp/addMysqlUser.sh', 'mysql', u'hive', 'asd', u'c6402.ambari.apache.org'),
-      logoutput = True,
+    self.assertResourceCalled('Execute', 'bash -x /tmp/addMysqlUser.sh mysql hive asd c6402.ambari.apache.org',
       path = ['/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin'],
       tries = 3,
       try_sleep = 5,
@@ -129,8 +128,7 @@ class TestMySqlServer(RMFTestCase):
       content = StaticFile('addMysqlUser.sh'),
       mode = 493,
     )
-    self.assertResourceCalled('Execute', ('bash', '-x', '/tmp/addMysqlUser.sh', 'mysql', u'hive', 'asd', u'c6402.ambari.apache.org'),
-      logoutput = True,
+    self.assertResourceCalled('Execute', 'bash -x /tmp/addMysqlUser.sh mysql hive asd c6402.ambari.apache.org',
       path = ['/usr/sbin:/sbin:/usr/local/bin:/bin:/usr/bin'],
       tries = 3,
       try_sleep = 5,