You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by fb...@apache.org on 2015/01/29 22:31:40 UTC
ambari git commit: AMBARI-9390 Ambari Server Setup issues on Windows
Repository: ambari
Updated Branches:
refs/heads/trunk 79aced639 -> a4f16b954
AMBARI-9390 Ambari Server Setup issues on Windows
Fixed SQL Server database attribute retrieval at setup
Fixed Metrics msi installation check
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/a4f16b95
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/a4f16b95
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/a4f16b95
Branch: refs/heads/trunk
Commit: a4f16b954759145f7cf5a0e5c492e3e9ba6c6312
Parents: 79aced6
Author: Florian Barca <fb...@hortonworks.com>
Authored: Thu Jan 29 13:31:02 2015 -0800
Committer: Florian Barca <fb...@hortonworks.com>
Committed: Thu Jan 29 13:31:02 2015 -0800
----------------------------------------------------------------------
.../libraries/functions/install_hdp_msi.py | 2 +-
.../libraries/functions/reload_windows_env.py | 6 +--
.../ambari_server/dbConfiguration_windows.py | 10 ++---
.../AMS/0.1.0/package/scripts/ams.py | 8 +++-
.../0.1.0/package/scripts/metric_collector.py | 47 ++++++++++----------
.../AMS/0.1.0/package/scripts/metric_monitor.py | 3 +-
.../AMS/0.1.0/package/scripts/service_check.py | 42 +++++++++++++----
7 files changed, 71 insertions(+), 47 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/a4f16b95/ambari-common/src/main/python/resource_management/libraries/functions/install_hdp_msi.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/install_hdp_msi.py b/ambari-common/src/main/python/resource_management/libraries/functions/install_hdp_msi.py
index d20dd42..8f32378 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/install_hdp_msi.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/install_hdp_msi.py
@@ -144,7 +144,7 @@ def _is_msi_installed():
# check if msi was installed correctly and raise Fail in case of broken install
def _validate_msi_install():
if not _is_msi_installed() and os.path.exists(os.path.join(_working_dir, INSTALL_MARKER_FAILED)):
- Fail("Current or previous hdp.msi install failed. Check hdp.msi install logs")
+ raise Fail("Current or previous hdp.msi install failed. Check hdp.msi install logs")
return _is_msi_installed()
http://git-wip-us.apache.org/repos/asf/ambari/blob/a4f16b95/ambari-common/src/main/python/resource_management/libraries/functions/reload_windows_env.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/reload_windows_env.py b/ambari-common/src/main/python/resource_management/libraries/functions/reload_windows_env.py
index 49cb812..eaa2582 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/reload_windows_env.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/reload_windows_env.py
@@ -29,9 +29,9 @@ default_whitelist = ["FALCON_CONF_DIR", "FALCON_DATA_DIR", "FALCON_HOME", "FALCO
"HDFS_AUDIT_LOGGER", "HDFS_DATA_DIR", "HIVE_CONF_DIR", "HIVE_HOME", "HIVE_LIB_DIR", "HIVE_LOG_DIR",
"HIVE_OPTS", "KNOX_CONF_DIR", "KNOX_HOME", "KNOX_LOG_DIR", "MAHOUT_HOME", "OOZIE_DATA",
"OOZIE_HOME", "OOZIE_LOG", "OOZIE_ROOT", "PIG_HOME", "SQOOP_HOME", "STORM_CONF_DIR", "STORM_HOME",
- "STORM_LOG_DIR", "WEBHCAT_CONF_DIR", "YARN_LOG_DIR", "ZOOKEEPER_CONF_DIR", "ZOOKEEPER_HOME",
- "ZOOKEEPER_LIB_DIR", "ZOO_LOG_DIR", "COLLECTOR_CONF_DIR", "COLLECTOR_HOME", "MONITOR_CONF_DIR",
- "MONITOR_HOME", "SINK_HOME"]
+ "STORM_LOG_DIR", "TEZ_HOME", "WEBHCAT_CONF_DIR", "YARN_LOG_DIR", "ZOOKEEPER_CONF_DIR",
+ "ZOOKEEPER_HOME", "ZOOKEEPER_LIB_DIR", "ZOO_LOG_DIR", "COLLECTOR_CONF_DIR", "COLLECTOR_HOME",
+ "MONITOR_CONF_DIR", "MONITOR_HOME", "SINK_HOME"]
def reload_windows_env(keys_white_list=default_whitelist):
root = HKEY_LOCAL_MACHINE
subkey = r'SYSTEM\CurrentControlSet\Control\Session Manager\Environment'
http://git-wip-us.apache.org/repos/asf/ambari/blob/a4f16b95/ambari-server/src/main/python/ambari_server/dbConfiguration_windows.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/python/ambari_server/dbConfiguration_windows.py b/ambari-server/src/main/python/ambari_server/dbConfiguration_windows.py
index 742fa8b..60308a0 100644
--- a/ambari-server/src/main/python/ambari_server/dbConfiguration_windows.py
+++ b/ambari-server/src/main/python/ambari_server/dbConfiguration_windows.py
@@ -65,10 +65,9 @@ class SQLServerConfig(DBMSConfig):
self.JDBC_DRIVER_INSTALL_MSG = 'Before starting Ambari Server, you must install the SQL Server JDBC driver.'
# The values from options supersede the values from properties
- self.database_host = options.database_host if options.database_host is not None and options.database_host is not "" else \
- properties.get_property(self.dbPropKeys.server_key)
+ self.database_host = DBMSConfig._init_member_with_prop_default(options, "database_host", properties, self.dbPropKeys.server_key, "")
try:
- if self.database_host is None or self.database_host is "":
+ if not self.database_host:
self.database_host = options.default_database_host
else:
self.database_host = compress_backslashes(self.database_host)
@@ -81,11 +80,10 @@ class SQLServerConfig(DBMSConfig):
properties, self.dbPropKeys.db_name_key, configDefaults.DEFAULT_DB_NAME)
self.use_windows_authentication = DBMSConfig._init_member_with_prop_default(options, "database_windows_auth",
- properties, self.dbAuthKeys.integrated_auth_key, False)
+ properties, self.dbAuthKeys.integrated_auth_key, "False")
self.database_username = DBMSConfig._init_member_with_prop_default(options, "database_username",
properties, self.dbAuthKeys.user_name_key, DEFAULT_USERNAME)
- self.database_password = options.database_password if options.database_password is not None and options.database_password is not "" \
- else ""
+ self.database_password = DBMSConfig._init_member_with_default(options, "database_password", "")
if not self.database_password:
self.database_password = DBMSConfig._read_password_from_properties(properties)
http://git-wip-us.apache.org/repos/asf/ambari/blob/a4f16b95/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/ams.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/ams.py b/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/ams.py
index f8d357e..20c4223 100644
--- a/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/ams.py
+++ b/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/ams.py
@@ -22,6 +22,7 @@ from resource_management import *
from ambari_commons import OSConst
from service_mapping import *
from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl
+from ambari_commons.str_utils import compress_backslashes
import glob
@OsFamilyFuncImpl(os_family=OSConst.WINSRV_FAMILY)
@@ -81,8 +82,11 @@ def ams(name=None):
]
for link_pair in links_pairs:
link, target = link_pair
- target = glob.glob(os.path.expandvars(target))[0].replace("\\\\", "\\")
- Execute('cmd /c mklink "{0}" "{1}"'.format(link, target))
+ real_link = os.path.expandvars(link)
+ target = compress_backslashes(glob.glob(os.path.expandvars(target))[0])
+ if not os.path.exists(real_link):
+ #TODO check the symlink destination too. Broken in Python 2.x on Windows.
+ Execute('cmd /c mklink "{0}" "{1}"'.format(real_link, target))
Directory(params.ams_monitor_conf_dir,
owner=params.ams_user,
http://git-wip-us.apache.org/repos/asf/ambari/blob/a4f16b95/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/metric_collector.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/metric_collector.py b/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/metric_collector.py
index 2926bb9..addfc33 100644
--- a/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/metric_collector.py
+++ b/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/metric_collector.py
@@ -25,37 +25,36 @@ from hbase import hbase
from status import check_service_status
class AmsCollector(Script):
- def install(self, env):
- self.install_packages(env)
+ def install(self, env):
+ self.install_packages(env)
+ self.configure(env) # for security
- def configure(self, env):
- import params
- env.set_params(params)
- hbase('master')
- hbase('regionserver')
- ams(name='collector')
+ def configure(self, env):
+ import params
+ env.set_params(params)
+ hbase('master')
+ hbase('regionserver')
+ ams(name='collector')
- def start(self, env):
- import params
- env.set_params(params)
- self.configure(env) # for security
+ def start(self, env):
+ self.configure(env) # for security
- ams_service( 'collector',
- action = 'start'
- )
+ ams_service( 'collector',
+ action = 'start'
+ )
- def stop(self, env):
- import params
- env.set_params(params)
+ def stop(self, env):
+ import params
+ env.set_params(params)
- ams_service( 'collector', action = 'stop')
+ ams_service( 'collector', action = 'stop')
- def status(self, env):
- import status_params
- env.set_params(status_params)
- check_service_status(name='collector')
+ def status(self, env):
+ import status_params
+ env.set_params(status_params)
+ check_service_status(name='collector')
if __name__ == "__main__":
- AmsCollector().execute()
+ AmsCollector().execute()
http://git-wip-us.apache.org/repos/asf/ambari/blob/a4f16b95/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/metric_monitor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/metric_monitor.py b/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/metric_monitor.py
index d53a834..f6cce8f 100644
--- a/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/metric_monitor.py
+++ b/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/metric_monitor.py
@@ -26,6 +26,7 @@ from status import check_service_status
class AmsMonitor(Script):
def install(self, env):
self.install_packages(env)
+ self.configure(env) # for security
def configure(self, env):
import params
@@ -33,8 +34,6 @@ class AmsMonitor(Script):
ams(name='monitor')
def start(self, env):
- import params
- env.set_params(params)
self.configure(env) # for security
ams_service( 'monitor',
http://git-wip-us.apache.org/repos/asf/ambari/blob/a4f16b95/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/service_check.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/service_check.py b/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/service_check.py
index 8e8be0e..46eba89 100644
--- a/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/service_check.py
+++ b/ambari-server/src/main/resources/common-services/AMS/0.1.0/package/scripts/service_check.py
@@ -22,21 +22,45 @@ from resource_management.core.logger import Logger
from resource_management.core.base import Fail
from resource_management import Script
from resource_management import Template
+
+from ambari_commons import OSConst
+from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl
+
import httplib
import urllib
import json
+import os
import random
import time
import socket
class AMSServiceCheck(Script):
-
AMS_METRICS_POST_URL = "/ws/v1/timeline/metrics/"
AMS_METRICS_GET_URL = "/ws/v1/timeline/metrics?%s"
AMS_CONNECT_TRIES = 3
AMS_CONNECT_TIMEOUT = 10
+ @OsFamilyFuncImpl(os_family=OSConst.WINSRV_FAMILY)
+ def service_check(self, env):
+ from resource_management.libraries.functions.windows_service_utils import check_windows_service_exists
+ from service_mapping import collector_win_service_name, monitor_win_service_name
+ import params
+
+ env.set_params(params)
+
+ #Just check that the services were correctly installed
+ #Check the monitor on all hosts
+ Logger.info("AMS Monitor service check was started.")
+ if not check_windows_service_exists(monitor_win_service_name):
+ raise Fail("AMS Monitor service was not properly installed. Check the logs and retry the installation.")
+ #Check the collector only where installed
+ if params.ams_collector_home_dir and os.path.isdir(params.ams_collector_home_dir):
+ Logger.info("AMS Collector service check was started.")
+ if not check_windows_service_exists(collector_win_service_name):
+ raise Fail("AMS Collector service was not properly installed. Check the logs and retry the installation.")
+
+ @OsFamilyFuncImpl(os_family=OsFamilyImpl.DEFAULT)
def service_check(self, env):
import params
@@ -51,7 +75,7 @@ class AMSServiceCheck(Script):
headers = {"Content-type": "application/json"}
- for i in xrange(1,self.AMS_CONNECT_TRIES):
+ for i in xrange(0, self.AMS_CONNECT_TRIES):
try:
Logger.info("Connecting (POST) to %s:%s%s" % (params.ams_collector_host_single,
params.metric_collector_port,
@@ -61,13 +85,13 @@ class AMSServiceCheck(Script):
conn.request("POST", self.AMS_METRICS_POST_URL, metric_json, headers)
break
except (httplib.HTTPException, socket.error) as ex:
- if i < self.AMS_CONNECT_TRIES:
- time.sleep(self.AMS_CONNECT_TIMEOUT)
- Logger.info("Connection failed. Next retry in %s seconds."
- % (self.AMS_CONNECT_TIMEOUT))
- else:
- Fail("AMS metrics were not saved. Service check has failed. "
- "\nConnection failed.")
+ time.sleep(self.AMS_CONNECT_TIMEOUT)
+ Logger.info("Connection failed. Next retry in %s seconds."
+ % (self.AMS_CONNECT_TIMEOUT))
+
+ if i == self.AMS_CONNECT_TRIES:
+ raise Fail("AMS metrics were not saved. Service check has failed. "
+ "\nConnection failed.")
response = conn.getresponse()
Logger.info("Http response: %s %s" % (response.status, response.reason))