You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jo...@apache.org on 2015/04/14 17:52:08 UTC
[2/2] ambari git commit: AMBARI-10323 - Alerts: Hive Metastore And
HS2 Process Alerts Do Not Work With Custom Smoke User (jonathanhurley)
AMBARI-10323 - Alerts: Hive Metastore And HS2 Process Alerts Do Not Work With Custom Smoke User (jonathanhurley)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/0ff32cd4
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/0ff32cd4
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/0ff32cd4
Branch: refs/heads/branch-2.0.maint
Commit: 0ff32cd45aa2b5b90c8f2eb7c686dcb27e5101ae
Parents: 4f15078
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Wed Apr 1 20:24:02 2015 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Tue Apr 14 11:51:37 2015 -0400
----------------------------------------------------------------------
.../package/alerts/alert_hive_metastore.py | 2 +-
.../package/alerts/alert_hive_thrift_port.py | 22 +++--
.../resources/host_scripts/alert_disk_space.py | 44 +++++-----
.../package/files/alert_hive_thrift_port.py | 89 ++++++++++++++++----
.../python/host_scripts/TestAlertDiskSpace.py | 74 ++++++++--------
5 files changed, 134 insertions(+), 97 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/0ff32cd4/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/alerts/alert_hive_metastore.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/alerts/alert_hive_metastore.py b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/alerts/alert_hive_metastore.py
index 1802c3d..d501461 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/alerts/alert_hive_metastore.py
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/alerts/alert_hive_metastore.py
@@ -125,7 +125,7 @@ def execute(parameters=None, host_name=None):
label = OK_MESSAGE.format(total_time)
except Exception, exception:
result_code = 'CRITICAL'
- label = CRITICAL_MESSAGE.format(host_name, exception.message)
+ label = CRITICAL_MESSAGE.format(host_name, str(exception))
except Exception, e:
label = str(e)
http://git-wip-us.apache.org/repos/asf/ambari/blob/0ff32cd4/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/alerts/alert_hive_thrift_port.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/alerts/alert_hive_thrift_port.py b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/alerts/alert_hive_thrift_port.py
index c1ac0aa..3e32db9 100644
--- a/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/alerts/alert_hive_thrift_port.py
+++ b/ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/alerts/alert_hive_thrift_port.py
@@ -24,8 +24,8 @@ from resource_management.libraries.functions import hive_check
from resource_management.libraries.functions import format
from resource_management.libraries.functions import get_kinit_path
-OK_MESSAGE = "TCP OK - %.4f response on port %s"
-CRITICAL_MESSAGE = "Connection failed on host {0}:{1}"
+OK_MESSAGE = "TCP OK - {0:.3f}s response on port {1}"
+CRITICAL_MESSAGE = "Connection failed on host {0}:{1} ({2})"
HIVE_SERVER_THRIFT_PORT_KEY = '{{hive-site/hive.server2.thrift.port}}'
HIVE_SERVER_THRIFT_HTTP_PORT_KEY = '{{hive-site/hive.server2.thrift.http.port}}'
@@ -71,7 +71,7 @@ def execute(parameters=None, host_name=None):
"""
if parameters is None:
- return (('UNKNOWN', ['There were no parameters supplied to the script.']))
+ return ('UNKNOWN', ['There were no parameters supplied to the script.'])
transport_mode = HIVE_SERVER_TRANSPORT_MODE_DEFAULT
if HIVE_SERVER_TRANSPORT_MODE_KEY in parameters:
@@ -105,7 +105,9 @@ def execute(parameters=None, host_name=None):
hive_server_principal = HIVE_SERVER_PRINCIPAL_DEFAULT
if HIVE_SERVER_PRINCIPAL_KEY in parameters:
hive_server_principal = parameters[HIVE_SERVER_PRINCIPAL_KEY]
+
smokeuser_keytab = SMOKEUSER_KEYTAB_DEFAULT
+
if SMOKEUSER_KEYTAB_KEY in parameters:
smokeuser_keytab = parameters[SMOKEUSER_KEYTAB_KEY]
@@ -126,25 +128,21 @@ def execute(parameters=None, host_name=None):
host_name = socket.getfqdn()
start_time = time.time()
+
try:
hive_check.check_thrift_port_sasl(host_name, port,
hive_server2_authentication, hive_server_principal, kinitcmd, smokeuser,
transport_mode = transport_mode)
- is_thrift_port_ok = True
- except:
- is_thrift_port_ok = False
-
- if is_thrift_port_ok == True:
result_code = 'OK'
total_time = time.time() - start_time
- label = OK_MESSAGE % (total_time, port)
- else:
+ label = OK_MESSAGE.format(total_time, port)
+ except Exception, exception:
result_code = 'CRITICAL'
- label = CRITICAL_MESSAGE.format(host_name,port)
+ label = CRITICAL_MESSAGE.format(host_name, port, str(exception))
except Exception, e:
label = str(e)
result_code = 'UNKNOWN'
- return ((result_code, [label]))
+ return (result_code, [label])
http://git-wip-us.apache.org/repos/asf/ambari/blob/0ff32cd4/ambari-server/src/main/resources/host_scripts/alert_disk_space.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/host_scripts/alert_disk_space.py b/ambari-server/src/main/resources/host_scripts/alert_disk_space.py
index f51db1f..68e22df 100644
--- a/ambari-server/src/main/resources/host_scripts/alert_disk_space.py
+++ b/ambari-server/src/main/resources/host_scripts/alert_disk_space.py
@@ -24,7 +24,7 @@ import platform
from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl
from ambari_commons import OSConst
-DiskInfo = collections.namedtuple('DiskInfo', 'total used free')
+DiskInfo = collections.namedtuple('DiskInfo', 'total used free path')
MIN_FREE_SPACE = 5000000000L # 5GB
# the location where HDP installs components when using HDP 2.2+
@@ -43,7 +43,10 @@ def get_tokens():
@OsFamilyFuncImpl(os_family=OsFamilyImpl.DEFAULT)
def execute(parameters=None, host_name=None):
"""
- Performs advanced disk checks under Linux
+ Performs advanced disk checks under Linux. This will first attempt to
+ check the HDP installation directories if they exist. If they do not exist,
+ it will default to checking /
+
Returns a tuple containing the result code and a pre-formatted result label
Keyword arguments:
@@ -51,35 +54,23 @@ def execute(parameters=None, host_name=None):
host_name (string): the name of this host where the alert is running
"""
- # Check usage of root partition
- try:
- disk_usage = _get_disk_usage()
- result_code, label = _get_warnings_for_partition(disk_usage)
- except NotImplementedError, platform_error:
- return 'CRITICAL', [str(platform_error)]
-
- # determine the location of HDP home; if it exists then we should also
- # check it in addition to /
+ # determine the location of HDP home
hdp_home = None
if os.path.isdir(HDP_HOME_DIR):
hdp_home = HDP_HOME_DIR
elif os.path.isdir(HDP_HOME_LEGACY_DIR):
hdp_home = HDP_HOME_LEGACY_DIR
- if result_code == 'OK' and hdp_home:
- # Root partition seems to be OK, let's check HDP home
- try:
- disk_usage = _get_disk_usage(hdp_home)
- result_code_usr_hdp, label_usr_hdp = _get_warnings_for_partition(disk_usage)
- if result_code_usr_hdp != 'OK':
- label = "{0}. Insufficient space at {1}: {2}".format(label, hdp_home, label_usr_hdp)
- result_code = 'WARNING'
- except NotImplementedError, platform_error:
- return 'CRITICAL', [str(platform_error)]
- pass
+ # if hdp home was found, use it; otherwise default to None
+ path = hdp_home if hdp_home is not None else None
- return result_code, [label]
+ try:
+ disk_usage = _get_disk_usage(path)
+ result_code, label = _get_warnings_for_partition(disk_usage)
+ except NotImplementedError, platform_error:
+ return 'CRITICAL', [str(platform_error)]
+ return result_code, [label]
def _get_warnings_for_partition(disk_usage):
if disk_usage is None or disk_usage.total == 0:
@@ -96,6 +87,9 @@ def _get_warnings_for_partition(disk_usage):
percent, _get_formatted_size(disk_usage.used),
_get_formatted_size(disk_usage.total))
+ if disk_usage.path is not None:
+ label += ", path=" + disk_usage.path
+
if result_code == 'OK':
# Check absolute disk space value
if disk_usage.free < MIN_FREE_SPACE:
@@ -141,7 +135,7 @@ def _get_disk_usage(path='/'):
else:
raise NotImplementedError("{0} is not a supported platform for this alert".format(platform.platform()))
- return DiskInfo(total=total, used=used, free=free)
+ return DiskInfo(total=total, used=used, free=free, path=path)
@OsFamilyFuncImpl(os_family=OSConst.WINSRV_FAMILY)
@@ -172,7 +166,7 @@ def _get_disk_usage(path=None):
free += free_bytes.value
used += total_bytes.value - free_bytes.value
- return DiskInfo(total=total, used=used, free=free)
+ return DiskInfo(total=total, used=used, free=free, path=None)
def _get_formatted_size(bytes):
http://git-wip-us.apache.org/repos/asf/ambari/blob/0ff32cd4/ambari-server/src/main/resources/stacks/BIGTOP/0.8/services/HIVE/package/files/alert_hive_thrift_port.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/BIGTOP/0.8/services/HIVE/package/files/alert_hive_thrift_port.py b/ambari-server/src/main/resources/stacks/BIGTOP/0.8/services/HIVE/package/files/alert_hive_thrift_port.py
index 2e302f2..96d68b3 100644
--- a/ambari-server/src/main/resources/stacks/BIGTOP/0.8/services/HIVE/package/files/alert_hive_thrift_port.py
+++ b/ambari-server/src/main/resources/stacks/BIGTOP/0.8/services/HIVE/package/files/alert_hive_thrift_port.py
@@ -21,25 +21,43 @@ limitations under the License.
import socket
import time
from resource_management.libraries.functions import hive_check
+from resource_management.libraries.functions import format
+from resource_management.libraries.functions import get_kinit_path
-OK_MESSAGE = "TCP OK - %.4f response on port %s"
-CRITICAL_MESSAGE = "Connection failed on host {0}:{1}"
+OK_MESSAGE = "TCP OK - {0:.3f}s response on port {1}"
+CRITICAL_MESSAGE = "Connection failed on host {0}:{1} ({2})"
HIVE_SERVER_THRIFT_PORT_KEY = '{{hive-site/hive.server2.thrift.port}}'
+HIVE_SERVER_THRIFT_HTTP_PORT_KEY = '{{hive-site/hive.server2.thrift.http.port}}'
+HIVE_SERVER_TRANSPORT_MODE_KEY = '{{hive-site/hive.server2.transport.mode}}'
SECURITY_ENABLED_KEY = '{{cluster-env/security_enabled}}'
+HIVE_SERVER2_AUTHENTICATION_KEY = '{{hive-site/hive.server2.authentication}}'
+HIVE_SERVER_PRINCIPAL_KEY = '{{hive-site/hive.server2.authentication.kerberos.principal}}'
+SMOKEUSER_KEYTAB_KEY = '{{cluster-env/smokeuser_keytab}}'
+SMOKEUSER_PRINCIPAL_KEY = '{{cluster-env/smokeuser_principal_name}}'
+SMOKEUSER_KEY = '{{cluster-env/smokeuser}}'
PERCENT_WARNING = 200
PERCENT_CRITICAL = 200
THRIFT_PORT_DEFAULT = 10000
+HIVE_SERVER_TRANSPORT_MODE_DEFAULT = 'binary'
+HIVE_SERVER_PRINCIPAL_DEFAULT = 'hive/_HOST@EXAMPLE.COM'
+HIVE_SERVER2_AUTHENTICATION_DEFAULT = 'NOSASL'
+SMOKEUSER_KEYTAB_DEFAULT = '/etc/security/keytabs/smokeuser.headless.keytab'
+SMOKEUSER_PRINCIPAL_DEFAULT = 'ambari-qa@EXAMPLE.COM'
+SMOKEUSER_DEFAULT = 'ambari-qa'
def get_tokens():
"""
Returns a tuple of tokens in the format {{site/property}} that will be used
to build the dictionary passed into execute
"""
- return (HIVE_SERVER_THRIFT_PORT_KEY,SECURITY_ENABLED_KEY)
-
+ return (HIVE_SERVER_THRIFT_PORT_KEY,SECURITY_ENABLED_KEY, SMOKEUSER_KEY,
+ HIVE_SERVER2_AUTHENTICATION_KEY,HIVE_SERVER_PRINCIPAL_KEY,
+ SMOKEUSER_KEYTAB_KEY,SMOKEUSER_PRINCIPAL_KEY,HIVE_SERVER_THRIFT_HTTP_PORT_KEY,
+ HIVE_SERVER_TRANSPORT_MODE_KEY)
+
def execute(parameters=None, host_name=None):
"""
@@ -51,36 +69,71 @@ def execute(parameters=None, host_name=None):
"""
if parameters is None:
- return (('UNKNOWN', ['There were no parameters supplied to the script.']))
+ return ('UNKNOWN', ['There were no parameters supplied to the script.'])
+
+ transport_mode = HIVE_SERVER_TRANSPORT_MODE_DEFAULT
+ if HIVE_SERVER_TRANSPORT_MODE_KEY in parameters:
+ transport_mode = parameters[HIVE_SERVER_TRANSPORT_MODE_KEY]
- thrift_port = THRIFT_PORT_DEFAULT
- if HIVE_SERVER_THRIFT_PORT_KEY in parameters:
- thrift_port = int(parameters[HIVE_SERVER_THRIFT_PORT_KEY])
+ port = THRIFT_PORT_DEFAULT
+ if transport_mode.lower() == 'binary' and HIVE_SERVER_THRIFT_PORT_KEY in parameters:
+ port = int(parameters[HIVE_SERVER_THRIFT_PORT_KEY])
+ elif transport_mode.lower() == 'http' and HIVE_SERVER_THRIFT_HTTP_PORT_KEY in parameters:
+ port = int(parameters[HIVE_SERVER_THRIFT_HTTP_PORT_KEY])
security_enabled = False
if SECURITY_ENABLED_KEY in parameters:
- security_enabled = bool(parameters[SECURITY_ENABLED_KEY])
+ security_enabled = str(parameters[SECURITY_ENABLED_KEY]).upper() == 'TRUE'
+
+ hive_server2_authentication = HIVE_SERVER2_AUTHENTICATION_DEFAULT
+ if HIVE_SERVER2_AUTHENTICATION_KEY in parameters:
+ hive_server2_authentication = parameters[HIVE_SERVER2_AUTHENTICATION_KEY]
+
+ smokeuser_principal = SMOKEUSER_PRINCIPAL_DEFAULT
+ if SMOKEUSER_PRINCIPAL_KEY in parameters:
+ smokeuser_principal = parameters[SMOKEUSER_PRINCIPAL_KEY]
+
+ smokeuser = SMOKEUSER_DEFAULT
+ if SMOKEUSER_KEY in parameters:
+ smokeuser = parameters[SMOKEUSER_KEY]
result_code = None
+ if security_enabled:
+ hive_server_principal = HIVE_SERVER_PRINCIPAL_DEFAULT
+ if HIVE_SERVER_PRINCIPAL_KEY in parameters:
+ hive_server_principal = parameters[HIVE_SERVER_PRINCIPAL_KEY]
+
+ smokeuser_keytab = SMOKEUSER_KEYTAB_DEFAULT
+
+ if SMOKEUSER_KEYTAB_KEY in parameters:
+ smokeuser_keytab = parameters[SMOKEUSER_KEYTAB_KEY]
+ kinit_path_local = get_kinit_path()
+ kinitcmd=format("{kinit_path_local} -kt {smokeuser_keytab} {smokeuser_principal}; ")
+ else:
+ hive_server_principal = None
+ kinitcmd=None
+
try:
if host_name is None:
host_name = socket.getfqdn()
start_time = time.time()
- is_thrift_port_ok = hive_check.check_thrift_port_sasl(host_name,
- thrift_port, security_enabled=security_enabled)
-
- if is_thrift_port_ok == True:
+
+ try:
+ hive_check.check_thrift_port_sasl(host_name, port,
+ hive_server2_authentication, hive_server_principal, kinitcmd, smokeuser,
+ transport_mode = transport_mode)
+
result_code = 'OK'
total_time = time.time() - start_time
- label = OK_MESSAGE % (total_time, thrift_port)
- else:
+ label = OK_MESSAGE.format(total_time, port)
+ except Exception, exception:
result_code = 'CRITICAL'
- label = CRITICAL_MESSAGE.format(host_name,thrift_port)
+ label = CRITICAL_MESSAGE.format(host_name, port, str(exception))
except Exception, e:
label = str(e)
result_code = 'UNKNOWN'
-
- return ((result_code, [label]))
\ No newline at end of file
+
+ return (result_code, [label])
http://git-wip-us.apache.org/repos/asf/ambari/blob/0ff32cd4/ambari-server/src/test/python/host_scripts/TestAlertDiskSpace.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/host_scripts/TestAlertDiskSpace.py b/ambari-server/src/test/python/host_scripts/TestAlertDiskSpace.py
index 8194bba..c94dfa6 100644
--- a/ambari-server/src/test/python/host_scripts/TestAlertDiskSpace.py
+++ b/ambari-server/src/test/python/host_scripts/TestAlertDiskSpace.py
@@ -22,86 +22,78 @@ from mock.mock import patch, MagicMock
from ambari_commons.os_check import OSCheck
from stacks.utils.RMFTestCase import *
+from only_for_platform import get_platform, not_for_platform, only_for_platform, PLATFORM_LINUX, PLATFORM_WINDOWS
+
+if get_platform() != PLATFORM_WINDOWS:
+ os_distro_value = ('Suse','11','Final')
+ from pwd import getpwnam
+else:
+ #No Windows tests for now, but start getting prepared
+ os_distro_value = ('win2012serverr2','6.3','WindowsServer')
class TestAlertDiskSpace(RMFTestCase):
+
+ @patch.object(OSCheck, "os_distribution", new = MagicMock(return_value = os_distro_value))
@patch('alert_disk_space._get_disk_usage')
@patch("os.path.isdir")
@patch.object(OSCheck, "get_os_family", new = MagicMock(return_value = 'redhat'))
def test_linux_flow(self, isdir_mock, disk_usage_mock):
isdir_mock.return_value = False
- # / OK, /usr/hdp OK
+ # / OK
disk_usage_mock.return_value = alert_disk_space.DiskInfo(
total = 21673930752L, used = 5695861760L,
- free = 15978068992L)
+ free = 15978068992L, path="/")
res = alert_disk_space.execute()
self.assertEqual(res,
- ('OK', ['Capacity Used: [26.28%, 5.7 GB], Capacity Total: [21.7 GB]']))
+ ('OK', ['Capacity Used: [26.28%, 5.7 GB], Capacity Total: [21.7 GB], path=/']))
- # / WARNING, /usr/hdp OK
+ # / WARNING
disk_usage_mock.return_value = alert_disk_space.DiskInfo(
total = 21673930752L, used = 14521533603L,
- free = 7152397149L)
+ free = 7152397149L, path="/")
res = alert_disk_space.execute()
self.assertEqual(res, (
'WARNING',
- ['Capacity Used: [67.00%, 14.5 GB], Capacity Total: [21.7 GB]']))
+ ['Capacity Used: [67.00%, 14.5 GB], Capacity Total: [21.7 GB], path=/']))
- # / CRITICAL, /usr/hdp OK
+ # / CRITICAL
disk_usage_mock.return_value = alert_disk_space.DiskInfo(
total = 21673930752L, used = 20590234214L,
- free = 1083696538)
+ free = 1083696538, path="/")
res = alert_disk_space.execute()
self.assertEqual(res, ('CRITICAL',
- ['Capacity Used: [95.00%, 20.6 GB], Capacity Total: [21.7 GB]']))
+ ['Capacity Used: [95.00%, 20.6 GB], Capacity Total: [21.7 GB], path=/']))
- # / < 5GB, /usr/hdp OK
+ # / OK but < 5GB
disk_usage_mock.return_value = alert_disk_space.DiskInfo(
total = 5418482688L, used = 1625544806L,
- free = 3792937882L)
+ free = 3792937882L, path="/")
res = alert_disk_space.execute()
self.assertEqual(res, ('WARNING', [
- 'Capacity Used: [30.00%, 1.6 GB], Capacity Total: [5.4 GB]. Total free space is less than 5.0 GB']))
-
- # / OK, /usr/hdp WARNING
- disk_usage_mock.side_effect = [
- alert_disk_space.DiskInfo(total = 21673930752L, used = 5695861760L,
- free = 15978068992L),
- alert_disk_space.DiskInfo(total = 21673930752L, used = 14521533603L,
- free = 7152397149L)]
+ 'Capacity Used: [30.00%, 1.6 GB], Capacity Total: [5.4 GB], path=/. Total free space is less than 5.0 GB']))
# trigger isdir(/usr/hdp) to True
isdir_mock.return_value = True
- res = alert_disk_space.execute()
- self.assertEqual(res, (
- 'WARNING', ["Capacity Used: [26.28%, 5.7 GB], Capacity Total: [21.7 GB]. "
- "Insufficient space at /usr/hdp: Capacity Used: [67.00%, 14.5 GB], Capacity Total: [21.7 GB]"]))
-
- # / OK, /usr/hdp CRITICAL
- disk_usage_mock.side_effect = [
- alert_disk_space.DiskInfo(total = 21673930752L, used = 5695861760L,
- free = 15978068992L),
- alert_disk_space.DiskInfo(total = 21673930752L, used = 20590234214L,
- free = 1083696538L)]
+ # / OK
+ disk_usage_mock.return_value = alert_disk_space.DiskInfo(
+ total = 21673930752L, used = 5695861760L,
+ free = 15978068992L, path="/usr/hdp")
res = alert_disk_space.execute()
- self.assertEqual(res, (
- 'WARNING', ["Capacity Used: [26.28%, 5.7 GB], Capacity Total: [21.7 GB]. "
- "Insufficient space at /usr/hdp: Capacity Used: [95.00%, 20.6 GB], Capacity Total: [21.7 GB]"]))
+ self.assertEqual(res,
+ ('OK', ['Capacity Used: [26.28%, 5.7 GB], Capacity Total: [21.7 GB], path=/usr/hdp']))
- # / OK, /usr/hdp < 5GB
- disk_usage_mock.side_effect = [
- alert_disk_space.DiskInfo(total = 21673930752L, used = 5695861760L,
- free = 15978068992L),
- alert_disk_space.DiskInfo(total = 5418482688L, used = 1625544806L,
- free = 3792937882L)]
+ # /usr/hdp < 5GB
+ disk_usage_mock.return_value = alert_disk_space.DiskInfo(
+ total = 5418482688L, used = 1625544806L,
+ free = 3792937882L, path="/usr/hdp")
res = alert_disk_space.execute()
self.assertEqual(res, (
- 'WARNING', ["Capacity Used: [26.28%, 5.7 GB], Capacity Total: [21.7 GB]. "
- "Insufficient space at /usr/hdp: Capacity Used: [30.00%, 1.6 GB], Capacity Total: [5.4 GB]. Total free space is less than 5.0 GB"]))
+ 'WARNING', ["Capacity Used: [30.00%, 1.6 GB], Capacity Total: [5.4 GB], path=/usr/hdp. Total free space is less than 5.0 GB"]))