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 2017/05/03 16:47:29 UTC

[46/53] [abbrv] ambari git commit: AMBARI-20857. After WE is enabled, graphana fails to start with SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version (echekanskiy)

AMBARI-20857. After WE is enabled, graphana fails to start with SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version (echekanskiy)


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

Branch: refs/heads/branch-feature-AMBARI-12556
Commit: b733e70fd3aecb05e7817dcbd5e118a37381ace6
Parents: 4134bbf
Author: Eugene Chekanskiy <ec...@hortonworks.com>
Authored: Wed May 3 13:19:35 2017 +0300
Committer: Eugene Chekanskiy <ec...@hortonworks.com>
Committed: Wed May 3 13:19:35 2017 +0300

----------------------------------------------------------------------
 .../main/python/ambari_agent/AmbariConfig.py    | 16 +++++-
 .../ambari_agent/CustomServiceOrchestrator.py   |  2 +-
 .../src/main/python/ambari_agent/NetUtil.py     |  2 +-
 .../python/ambari_agent/alerts/web_alert.py     |  2 +-
 .../src/main/python/ambari_commons/network.py   | 20 ++-----
 .../libraries/script/script.py                  | 57 ++++++++++++--------
 .../package/scripts/metrics_grafana_util.py     | 37 +++++++++----
 .../0.1.0/package/scripts/service_check.py      | 22 +++++---
 .../package/alerts/alert_metrics_deviation.py   | 10 +++-
 .../HDFS/2.1.0.2.0/package/scripts/params.py    |  2 +-
 .../HDFS/2.1.0.2.0/package/scripts/utils.py     |  2 +-
 .../0.8/services/HDFS/package/scripts/params.py |  2 +-
 .../stacks/2.5/RANGER_KMS/test_kms_server.py    | 13 ++++-
 13 files changed, 122 insertions(+), 65 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/b733e70f/ambari-agent/src/main/python/ambari_agent/AmbariConfig.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/ambari_agent/AmbariConfig.py b/ambari-agent/src/main/python/ambari_agent/AmbariConfig.py
index cf48189..4118ece 100644
--- a/ambari-agent/src/main/python/ambari_agent/AmbariConfig.py
+++ b/ambari-agent/src/main/python/ambari_agent/AmbariConfig.py
@@ -328,9 +328,23 @@ class AmbariConfig:
         logger.info("Updating config property (%s) with value (%s)", k, v)
     pass
 
-  def get_force_https_protocol(self):
+  def get_force_https_protocol_name(self):
+    """
+    Get forced https protocol name.
+
+    :return: protocol name, PROTOCOL_TLSv1 by default
+    """
     return self.get('security', 'force_https_protocol', default="PROTOCOL_TLSv1")
 
+  def get_force_https_protocol_value(self):
+    """
+    Get forced https protocol value that correspondents to ssl module variable.
+
+    :return: protocol value
+    """
+    import ssl
+    return getattr(ssl, self.get_force_https_protocol_name())
+
 def isSameHostList(hostlist1, hostlist2):
   is_same = True
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/b733e70f/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py b/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
index 8b8a8f9..4c13eb3 100644
--- a/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
+++ b/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
@@ -81,7 +81,7 @@ class CustomServiceOrchestrator():
   def __init__(self, config, controller):
     self.config = config
     self.tmp_dir = config.get('agent', 'prefix')
-    self.force_https_protocol = config.get_force_https_protocol()
+    self.force_https_protocol = config.get_force_https_protocol_name()
     self.exec_tmp_dir = Constants.AGENT_TMP_DIR
     self.file_cache = FileCache(config)
     self.status_commands_stdout = os.path.join(self.tmp_dir,

http://git-wip-us.apache.org/repos/asf/ambari/blob/b733e70f/ambari-agent/src/main/python/ambari_agent/NetUtil.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/ambari_agent/NetUtil.py b/ambari-agent/src/main/python/ambari_agent/NetUtil.py
index 9b29633..fc19605 100644
--- a/ambari-agent/src/main/python/ambari_agent/NetUtil.py
+++ b/ambari-agent/src/main/python/ambari_agent/NetUtil.py
@@ -29,7 +29,7 @@ LOG_REQUEST_MESSAGE = "GET %s -> %s, body: %s"
 
 logger = logging.getLogger(__name__)
 
-ensure_ssl_using_protocol(AmbariConfig.get_resolved_config().get_force_https_protocol())
+ensure_ssl_using_protocol(AmbariConfig.get_resolved_config().get_force_https_protocol_name())
 
 class NetUtil:
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/b733e70f/ambari-agent/src/main/python/ambari_agent/alerts/web_alert.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/ambari_agent/alerts/web_alert.py b/ambari-agent/src/main/python/ambari_agent/alerts/web_alert.py
index ef144bb..79b1c3b 100644
--- a/ambari-agent/src/main/python/ambari_agent/alerts/web_alert.py
+++ b/ambari-agent/src/main/python/ambari_agent/alerts/web_alert.py
@@ -55,7 +55,7 @@ DEFAULT_CONNECTION_TIMEOUT = 5
 
 WebResponse = namedtuple('WebResponse', 'status_code time_millis error_msg')
 
-ensure_ssl_using_protocol(AmbariConfig.get_resolved_config().get_force_https_protocol())
+ensure_ssl_using_protocol(AmbariConfig.get_resolved_config().get_force_https_protocol_name())
 
 class WebAlert(BaseAlert):
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/b733e70f/ambari-common/src/main/python/ambari_commons/network.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/ambari_commons/network.py b/ambari-common/src/main/python/ambari_commons/network.py
index 4c589f3..edb9add 100644
--- a/ambari-common/src/main/python/ambari_commons/network.py
+++ b/ambari-common/src/main/python/ambari_commons/network.py
@@ -42,30 +42,20 @@ class HTTPSConnectionWithCustomSslVersion(httplib.HTTPSConnection):
     self.sock = ssl.wrap_socket(conn_socket, self.key_file, self.cert_file,
                                 ssl_version=self.ssl_version)
 
-def get_http_connection(host, port, https_enabled=False, ca_certs=None):
+def get_http_connection(host, port, https_enabled=False, ca_certs=None, ssl_version = ssl.PROTOCOL_SSLv23):
   if https_enabled:
-    ssl_version = ssl.PROTOCOL_SSLv23
     if ca_certs:
-      ssl_version = check_ssl_certificate_and_return_ssl_version(host, port, ca_certs)
+      check_ssl_certificate_and_return_ssl_version(host, port, ca_certs, ssl_version)
     return HTTPSConnectionWithCustomSslVersion(host, port, ssl_version)
   else:
     return httplib.HTTPConnection(host, port)
 
-def check_ssl_certificate_and_return_ssl_version(host, port, ca_certs):
+def check_ssl_certificate_and_return_ssl_version(host, port, ca_certs, ssl_version = ssl.PROTOCOL_SSLv23):
   try:
-    # Try with TLSv1 first.
-    ssl_version = ssl.PROTOCOL_TLSv1
     ssl.get_server_certificate((host, port), ssl_version=ssl_version, ca_certs=ca_certs)
   except ssl.SSLError as ssl_error:
-    print_warning_msg("Failed to verify the SSL certificate for https://{0}:{1} with CA certificate in {2} using ssl.PROTOCOL_TLSv1."
-                      " Trying to use less secure ssl.PROTOCOL_SSLv23. Error : {3}".format(host, port, ca_certs, str(ssl_error)))
-    try:
-      # Try with SSLv23 only if TLSv1 failed.
-      ssl_version = ssl.PROTOCOL_SSLv23
-      ssl.get_server_certificate((host, port), ssl_version=ssl_version, ca_certs=ca_certs)
-    except ssl.SSLError as ssl_error:
-      raise Fail("Failed to verify the SSL certificate for https://{0}:{1} with CA certificate in {2}. Error : {3}"
-               .format(host, port, ca_certs, str(ssl_error)))
+    raise Fail("Failed to verify the SSL certificate for https://{0}:{1} with CA certificate in {2}. Error : {3}"
+             .format(host, port, ca_certs, str(ssl_error)))
   return ssl_version
 
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/b733e70f/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 da47351..dc657fb 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
@@ -180,7 +180,7 @@ class Script(object):
         json.dump(Script.structuredOut, fp)
     except IOError, err:
       Script.structuredOut.update({"errMsg" : "Unable to write to " + self.stroutfile})
-      
+
   def get_component_name(self):
     """
     To be overridden by subclasses.
@@ -218,7 +218,7 @@ class Script(object):
     """
     stack_name = Script.get_stack_name()
     component_name = self.get_component_name()
-    
+
     if component_name and stack_name:
       component_version = get_component_version(stack_name, component_name)
 
@@ -261,15 +261,15 @@ class Script(object):
     parser.add_option("-o", "--out-files-logging", dest="log_out_files", action="store_true",
                       help="use this option to enable outputting *.out files of the service pre-start")
     (self.options, args) = parser.parse_args()
-    
+
     self.log_out_files = self.options.log_out_files
-    
+
     # parse arguments
     if len(args) < 6:
      print "Script expects at least 6 arguments"
      print USAGE.format(os.path.basename(sys.argv[0])) # print to stdout
      sys.exit(1)
-     
+
     self.command_name = str.lower(sys.argv[1])
     self.command_data_file = sys.argv[2]
     self.basedir = sys.argv[3]
@@ -312,7 +312,7 @@ class Script(object):
 
         if not self.is_hook():
           self.execute_prefix_function(self.command_name, 'pre', env)
-        
+
         method(env)
 
         if not self.is_hook():
@@ -342,10 +342,10 @@ class Script(object):
   def is_hook(self):
     from resource_management.libraries.script.hook import Hook
     return (Hook in self.__class__.__bases__)
-        
+
   def get_log_folder(self):
     return ""
-  
+
   def get_user(self):
     return ""
 
@@ -359,15 +359,15 @@ class Script(object):
     if self.log_out_files:
       log_folder = self.get_log_folder()
       user = self.get_user()
-      
+
       if log_folder == "":
         Logger.logger.warn("Log folder for current script is not defined")
         return
-      
+
       if user == "":
         Logger.logger.warn("User for current script is not defined")
         return
-      
+
       show_logs(log_folder, user, lines_count=COUNT_OF_LAST_LINES_OF_OUT_FILES_LOGGED, mask=OUT_FILES_MASK)
 
   def post_start(self, env=None):
@@ -420,7 +420,7 @@ class Script(object):
       raise Fail("Script '{0}' has no method '{1}'".format(sys.argv[0], command_name))
     method = getattr(self, command_name)
     return method
-  
+
   def get_stack_version_before_packages_installed(self):
     """
     This works in a lazy way (calculates the version first time and stores it). 
@@ -437,7 +437,7 @@ class Script(object):
     if not Script.stack_version_from_distro_select and component_name:
       from resource_management.libraries.functions import stack_select
       Script.stack_version_from_distro_select = stack_select.get_stack_version_before_install(component_name)
-      
+
     # If <stack-selector-tool> has not yet been done (situations like first install),
     # we can use <stack-selector-tool> version itself.
     # Wildcards cause a lot of troubles with installing packages, if the version contains wildcards we should try to specify it.
@@ -448,7 +448,7 @@ class Script(object):
               stack_tools.get_stack_tool_package(stack_tools.STACK_SELECTOR_NAME))
 
     return Script.stack_version_from_distro_select
-  
+
   def format_package_name(self, name):
     from resource_management.libraries.functions.default import default
     """
@@ -485,7 +485,7 @@ class Script(object):
       stack_version_package_formatted = self.get_stack_version_before_packages_installed().replace('.', package_delimiter).replace('-', package_delimiter) if STACK_VERSION_PLACEHOLDER in name else name
 
     package_name = name.replace(STACK_VERSION_PLACEHOLDER, stack_version_package_formatted)
-    
+
     return package_name
 
   @staticmethod
@@ -510,10 +510,25 @@ class Script(object):
     return Script.tmp_dir
 
   @staticmethod
-  def get_force_https_protocol():
+  def get_force_https_protocol_name():
+    """
+    Get forced https protocol name.
+
+    :return: protocol name, PROTOCOL_TLSv1 by default
+    """
     return Script.force_https_protocol
 
   @staticmethod
+  def get_force_https_protocol_value():
+    """
+    Get forced https protocol value that correspondents to ssl module variable.
+
+    :return: protocol value
+    """
+    import ssl
+    return getattr(ssl, Script.get_force_https_protocol_name())
+
+  @staticmethod
   def get_component_from_role(role_directory_map, default_role):
     """
     Gets the <stack-root>/current/<component> component given an Ambari role,
@@ -684,13 +699,13 @@ class Script(object):
                           hadoop_user, self.get_password(hadoop_user),
                           str(config['hostLevelParams']['stack_version']))
       reload_windows_env()
-      
+
   def check_package_condition(self, package):
     condition = package['condition']
-    
+
     if not condition:
       return True
-    
+
     return self.should_install_package(package)
 
   def should_install_package(self, package):
@@ -881,7 +896,7 @@ class Script(object):
     config = self.get_config()
     return {'configurations':config['configurations'][dict],
             'configuration_attributes':config['configuration_attributes'][dict]}
-    
+
   def generate_configs_get_xml_file_dict(self, filename, dict):
     config = self.get_config()
     return config['configurations'][dict]
@@ -893,7 +908,7 @@ class Script(object):
     """
     import params
     env.set_params(params)
-    
+
     config = self.get_config()
 
     xml_configs_list = config['commandParams']['xml_configs_list']

http://git-wip-us.apache.org/repos/asf/ambari/blob/b733e70f/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/metrics_grafana_util.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/metrics_grafana_util.py b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/metrics_grafana_util.py
index 06a4518..3036857 100644
--- a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/metrics_grafana_util.py
+++ b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/metrics_grafana_util.py
@@ -23,6 +23,7 @@ from ambari_commons.parallel_processing import PrallelProcessResult, execute_in_
 from service_check import post_metrics_to_collector
 from resource_management.core.logger import Logger
 from resource_management.core.base import Fail
+from resource_management.libraries.script.script import Script
 from resource_management import Template
 from collections import namedtuple
 from urlparse import urlparse
@@ -54,9 +55,13 @@ def perform_grafana_get_call(url, server):
 
   for i in xrange(0, GRAFANA_CONNECT_TRIES):
     try:
-      conn = network.get_http_connection(server.host,
-                                         int(server.port),
-                                         grafana_https_enabled, ca_certs)
+      conn = network.get_http_connection(
+        server.host,
+        int(server.port),
+        grafana_https_enabled,
+        ca_certs,
+        ssl_version=Script.get_force_https_protocol_value()
+      )
 
       userAndPass = b64encode('{0}:{1}'.format(server.user, server.password))
       headers = { 'Authorization' : 'Basic %s' %  userAndPass }
@@ -94,7 +99,13 @@ def perform_grafana_put_call(url, id, payload, server):
 
   for i in xrange(0, GRAFANA_CONNECT_TRIES):
     try:
-      conn = network.get_http_connection(server.host, int(server.port), grafana_https_enabled, ca_certs)
+      conn = network.get_http_connection(
+        server.host,
+        int(server.port),
+        grafana_https_enabled,
+        ca_certs,
+        ssl_version=Script.get_force_https_protocol_value()
+      )
       conn.request("PUT", url + "/" + str(id), payload, headers)
       response = conn.getresponse()
       data = response.read()
@@ -130,9 +141,12 @@ def perform_grafana_post_call(url, payload, server):
   for i in xrange(0, GRAFANA_CONNECT_TRIES):
     try:
       Logger.info("Connecting (POST) to %s:%s%s" % (server.host, server.port, url))
-      conn = network.get_http_connection(server.host,
-                                         int(server.port),
-                                         grafana_https_enabled, ca_certs)
+      conn = network.get_http_connection(
+        server.host,
+        int(server.port),
+        grafana_https_enabled, ca_certs,
+        ssl_version=Script.get_force_https_protocol_value()
+      )
       
       conn.request("POST", url, payload, headers)
 
@@ -171,9 +185,12 @@ def perform_grafana_delete_call(url, server):
 
   for i in xrange(0, GRAFANA_CONNECT_TRIES):
     try:
-      conn = network.get_http_connection(server.host,
-                                         int(server.port),
-                                         grafana_https_enabled, ca_certs)
+      conn = network.get_http_connection(
+        server.host,
+        int(server.port),
+        grafana_https_enabled, ca_certs,
+        ssl_version=Script.get_force_https_protocol_value()
+      )
 
       userAndPass = b64encode('{0}:{1}'.format(server.user, server.password))
       headers = { 'Authorization' : 'Basic %s' %  userAndPass }

http://git-wip-us.apache.org/repos/asf/ambari/blob/b733e70f/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/service_check.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/service_check.py b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/service_check.py
index e753958..2b3dfa9 100644
--- a/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/service_check.py
+++ b/ambari-server/src/main/resources/common-services/AMBARI_METRICS/0.1.0/package/scripts/service_check.py
@@ -91,10 +91,13 @@ class AMSServiceCheck(Script):
                                                    params.metric_collector_port,
                                                    self.AMS_METRICS_GET_URL % encoded_get_metrics_parameters))
       for i in xrange(0, self.AMS_READ_TRIES):
-        conn = network.get_http_connection(metric_collector_host,
-                                           int(params.metric_collector_port),
-                                           params.metric_collector_https_enabled,
-                                           ca_certs)
+        conn = network.get_http_connection(
+          metric_collector_host,
+          int(params.metric_collector_port),
+          params.metric_collector_https_enabled,
+          ca_certs,
+          ssl_version=Script.get_force_https_protocol_value()
+        )
         conn.request("GET", self.AMS_METRICS_GET_URL % encoded_get_metrics_parameters)
         response = conn.getresponse()
         Logger.info("Http response for host %s : %s %s" % (metric_collector_host, response.status, response.reason))
@@ -164,10 +167,13 @@ def post_metrics_to_collector(ams_metrics_post_url, metric_collector_host, metri
       Logger.info("Connecting (POST) to %s:%s%s" % (metric_collector_host,
                                                     metric_collector_port,
                                                     ams_metrics_post_url))
-      conn = network.get_http_connection(metric_collector_host,
-                                         int(metric_collector_port),
-                                         metric_collector_https_enabled,
-                                         ca_certs)
+      conn = network.get_http_connection(
+        metric_collector_host,
+        int(metric_collector_port),
+        metric_collector_https_enabled,
+        ca_certs,
+        ssl_version=Script.get_force_https_protocol_value()
+      )
       conn.request("POST", ams_metrics_post_url, metric_json, headers)
 
       response = conn.getresponse()

http://git-wip-us.apache.org/repos/asf/ambari/blob/b733e70f/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/alerts/alert_metrics_deviation.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/alerts/alert_metrics_deviation.py b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/alerts/alert_metrics_deviation.py
index bc2102a..7f64c80 100644
--- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/alerts/alert_metrics_deviation.py
+++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/alerts/alert_metrics_deviation.py
@@ -34,7 +34,7 @@ from resource_management.libraries.functions.curl_krb_request import curl_krb_re
 from resource_management.libraries.functions.curl_krb_request import DEFAULT_KERBEROS_KINIT_TIMER_MS
 from resource_management.libraries.functions.curl_krb_request import KERBEROS_KINIT_TIMER_PARAMETER
 from ambari_commons.ambari_metrics_helper import select_metric_collector_for_sink
-
+from ambari_agent.AmbariConfig import AmbariConfig
 
 RESULT_STATE_OK = 'OK'
 RESULT_STATE_CRITICAL = 'CRITICAL'
@@ -320,7 +320,13 @@ def execute(configurations={}, parameters={}, host_name=None):
   metric_collector_https_enabled = str(configurations[AMS_HTTP_POLICY]) == "HTTPS_ONLY"
 
   try:
-    conn = network.get_http_connection(collector_host, int(collector_port), metric_collector_https_enabled, ca_certs)
+    conn = network.get_http_connection(
+      collector_host,
+      int(collector_port),
+      metric_collector_https_enabled,
+      ca_certs,
+      ssl_version=AmbariConfig.get_resolved_config().get_force_https_protocol_value()
+    )
     conn.request("GET", AMS_METRICS_GET_URL % encoded_get_metrics_parameters)
     response = conn.getresponse()
     data = response.read()

http://git-wip-us.apache.org/repos/asf/ambari/blob/b733e70f/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/params.py b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/params.py
index 7f282b3..838510c 100644
--- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/params.py
+++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/params.py
@@ -26,4 +26,4 @@ else:
 
 nfsgateway_heapsize = config['configurations']['hadoop-env']['nfsgateway_heapsize']
 retryAble = default("/commandParams/command_retry_enabled", False)
-script_https_protocol = Script.get_force_https_protocol()
\ No newline at end of file
+script_https_protocol = Script.get_force_https_protocol_name()
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/b733e70f/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/utils.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/utils.py b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/utils.py
index d8d0515..c9b63ff 100644
--- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/utils.py
+++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/utils.py
@@ -38,7 +38,7 @@ from resource_management.libraries.functions.show_logs import show_logs
 from ambari_commons.inet_utils import ensure_ssl_using_protocol
 from zkfc_slave import ZkfcSlaveDefault
 
-ensure_ssl_using_protocol(Script.get_force_https_protocol())
+ensure_ssl_using_protocol(Script.get_force_https_protocol_name())
 
 def safe_zkfc_op(action, env):
   """

http://git-wip-us.apache.org/repos/asf/ambari/blob/b733e70f/ambari-server/src/main/resources/stacks/BIGTOP/0.8/services/HDFS/package/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/BIGTOP/0.8/services/HDFS/package/scripts/params.py b/ambari-server/src/main/resources/stacks/BIGTOP/0.8/services/HDFS/package/scripts/params.py
index f85efb0..19e223c 100644
--- a/ambari-server/src/main/resources/stacks/BIGTOP/0.8/services/HDFS/package/scripts/params.py
+++ b/ambari-server/src/main/resources/stacks/BIGTOP/0.8/services/HDFS/package/scripts/params.py
@@ -241,4 +241,4 @@ ttnode_heapsize = "1024m"
 dtnode_heapsize = config['configurations']['hadoop-env']['dtnode_heapsize']
 mapred_pid_dir_prefix = default("/configurations/mapred-env/mapred_pid_dir_prefix","/var/run/hadoop-mapreduce")
 mapred_log_dir_prefix = default("/configurations/mapred-env/mapred_log_dir_prefix","/var/log/hadoop-mapreduce")
-script_https_protocol = Script.get_force_https_protocol()
\ No newline at end of file
+script_https_protocol = Script.get_force_https_protocol_name()
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/b733e70f/ambari-server/src/test/python/stacks/2.5/RANGER_KMS/test_kms_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.5/RANGER_KMS/test_kms_server.py b/ambari-server/src/test/python/stacks/2.5/RANGER_KMS/test_kms_server.py
index 3d03c5f..f6f0af3 100644
--- a/ambari-server/src/test/python/stacks/2.5/RANGER_KMS/test_kms_server.py
+++ b/ambari-server/src/test/python/stacks/2.5/RANGER_KMS/test_kms_server.py
@@ -43,13 +43,22 @@ class TestRangerKMS(RMFTestCase):
     self.assertTrue(isfile_mock.called)
     self.assertNoMoreResources()
 
+  current_date = datetime.now()
+
+  class DTMOCK(object):
+    """
+    Mock datetime to avoid test failures when test run a little bit slower than usuall.
+    """
+    def now(self):
+      return TestRangerKMS.current_date
+
   @patch("resource_management.libraries.functions.ranger_functions.Rangeradmin.check_ranger_login_urllib2", new=MagicMock(return_value=200))
   @patch("resource_management.libraries.functions.ranger_functions.Rangeradmin.create_ambari_admin_user", new=MagicMock(return_value=200))
   @patch("kms.get_repo")
   @patch("kms.create_repo")
   @patch("os.path.isfile")
+  @patch("kms.datetime", new=DTMOCK())
   def test_start_default(self, get_repo_mock, create_repo_mock, isfile_mock):
-
     get_repo_mock.return_value = True
     create_repo_mock.return_value = True
 
@@ -64,7 +73,7 @@ class TestRangerKMS(RMFTestCase):
 
     # TODO confirm repo call
 
-    current_datetime = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
+    current_datetime = self.current_date.strftime("%Y-%m-%d %H:%M:%S")
 
     self.assertResourceCalled('File', '/usr/hdp/current/ranger-kms/conf/ranger-security.xml',
       owner = 'kms',