Repository: ambari Updated Branches: refs/heads/trunk 180640d94 -> f76f239d8
AMBARI-10577: [WinTP2] After refactoring YARN, HIVE services, some files are still located under HDPWIN\2.1\services\<ServiceName>\package (jluniya) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/f76f239d Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/f76f239d Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/f76f239d Branch: refs/heads/trunk Commit: f76f239d809c9ab9d1380a1bdb133c91d9eccb17 Parents: 180640d Author: Jayush Luniya <[email protected]> Authored: Fri Apr 17 15:44:42 2015 -0700 Committer: Jayush Luniya <[email protected]> Committed: Fri Apr 17 15:44:42 2015 -0700 ---------------------------------------------------------------------- .../files/validateYarnComponentStatus.py | 170 ------------------- .../files/validateYarnComponentStatusWindows.py | 161 ++++++++++++++++++ .../package/scripts/mapred_service_check.py | 2 +- .../2.1.0.2.0/package/scripts/service_check.py | 2 +- .../HIVE/package/files/templetonSmoke.sh | 96 ----------- .../HIVE/package/templates/webhcat-env.sh.j2 | 62 ------- .../files/validateYarnComponentStatus.py | 161 ------------------ 7 files changed, 163 insertions(+), 491 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/f76f239d/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/files/validateYarnComponentStatus.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/files/validateYarnComponentStatus.py b/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/files/validateYarnComponentStatus.py deleted file mode 100644 index 33ed8b1..0000000 --- a/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/files/validateYarnComponentStatus.py +++ /dev/null @@ -1,170 +0,0 @@ -#!/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. -''' - -import optparse -import subprocess -import json - -RESOURCEMANAGER = 'rm' -NODEMANAGER = 'nm' -HISTORYSERVER = 'hs' - -STARTED_STATE = 'STARTED' -RUNNING_STATE = 'RUNNING' - -#Return reponse for given path and address -def getResponse(path, address, ssl_enabled): - - command = "curl" - httpGssnegotiate = "--negotiate" - userpswd = "-u:" - insecure = "-k"# This is smoke test, no need to check CA of server - if ssl_enabled: - url = 'https://' + address + path - else: - url = 'http://' + address + path - - command_with_flags = [command,httpGssnegotiate,userpswd,insecure,url] - - proc = subprocess.Popen(command_with_flags, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - (stdout, stderr) = proc.communicate() - response = json.loads(stdout) - if response == None: - print 'There is no response for url: ' + str(url) - raise Exception('There is no response for url: ' + str(url)) - return response - -#Verify that REST api is available for given component -def validateAvailability(component, path, addresses, ssl_enabled): - responses = {} - for address in addresses.split(','): - try: - responses[address] = getResponse(path, address, ssl_enabled) - except Exception as e: - print 'Error checking availability status of component.', e - - if not responses: - exit(1) - - is_valid = validateAvailabilityResponse(component, responses.values()[0]) - if not is_valid: - exit(1) - -#Validate component-specific response -def validateAvailabilityResponse(component, response): - try: - if component == RESOURCEMANAGER: - rm_state = response['clusterInfo']['state'] - if rm_state == STARTED_STATE: - return True - else: - print 'Resourcemanager is not started' - return False - - elif component == NODEMANAGER: - node_healthy = bool(response['nodeInfo']['nodeHealthy']) - if node_healthy: - return True - else: - return False - elif component == HISTORYSERVER: - hs_start_time = response['historyInfo']['startedOn'] - if hs_start_time > 0: - return True - else: - return False - else: - return False - except Exception as e: - print 'Error validation of availability response for ' + str(component), e - return False - -#Verify that component has required resources to work -def validateAbility(component, path, addresses, ssl_enabled): - responses = {} - for address in addresses.split(','): - try: - responses[address] = getResponse(path, address, ssl_enabled) - except Exception as e: - print 'Error checking ability of component.', e - - if not responses: - exit(1) - - is_valid = validateAbilityResponse(component, responses.values()[0]) - if not is_valid: - exit(1) - -#Validate component-specific response that it has required resources to work -def validateAbilityResponse(component, response): - try: - if component == RESOURCEMANAGER: - nodes = [] - if response.has_key('nodes') and not response['nodes'] == None and response['nodes'].has_key('node'): - nodes = response['nodes']['node'] - connected_nodes_count = len(nodes) - if connected_nodes_count == 0: - print 'There is no connected nodemanagers to resourcemanager' - return False - active_nodes = filter(lambda x: x['state'] == RUNNING_STATE, nodes) - active_nodes_count = len(active_nodes) - - if connected_nodes_count == 0: - print 'There is no connected active nodemanagers to resourcemanager' - return False - else: - return True - else: - return False - except Exception as e: - print 'Error validation of ability response', e - return False - -# -# Main. -# -def main(): - parser = optparse.OptionParser(usage="usage: %prog [options] component ") - parser.add_option("-p", "--port", dest="address", help="Host:Port for REST API of a desired component") - parser.add_option("-s", "--ssl", dest="ssl_enabled", help="Is SSL enabled for UI of component") - - (options, args) = parser.parse_args() - - component = args[0] - - address = options.address - ssl_enabled = (options.ssl_enabled) in 'true' - if component == RESOURCEMANAGER: - path = '/ws/v1/cluster/info' - elif component == NODEMANAGER: - path = '/ws/v1/node/info' - elif component == HISTORYSERVER: - path = '/ws/v1/history/info' - else: - parser.error("Invalid component") - - validateAvailability(component, path, address, ssl_enabled) - - if component == RESOURCEMANAGER: - path = '/ws/v1/cluster/nodes' - validateAbility(component, path, address, ssl_enabled) - -if __name__ == "__main__": - main() http://git-wip-us.apache.org/repos/asf/ambari/blob/f76f239d/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/files/validateYarnComponentStatusWindows.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/files/validateYarnComponentStatusWindows.py b/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/files/validateYarnComponentStatusWindows.py new file mode 100644 index 0000000..073371a --- /dev/null +++ b/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/files/validateYarnComponentStatusWindows.py @@ -0,0 +1,161 @@ +#!/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. +''' + +import optparse +import subprocess +import json +import urllib2 + +RESOURCEMANAGER = 'rm' +NODEMANAGER = 'nm' +HISTORYSERVER = 'hs' + +STARTED_STATE = 'STARTED' +RUNNING_STATE = 'RUNNING' + +#Return reponse for given path and address +def getResponse(path, address, ssl_enabled): + if ssl_enabled: + url = 'https://' + address + path + else: + url = 'http://' + address + path + + try: + handle = urllib2.urlopen(url) + output = handle.read() + handle.close() + response = json.loads(output) + if response == None: + print 'There is no response for url: ' + str(url) + exit(1) + return response + except Exception as e: + print 'Error getting response for url:' + str(url), e + exit(1) + +#Verify that REST api is available for given component +def validateAvailability(component, path, address, ssl_enabled): + + try: + response = getResponse(path, address, ssl_enabled) + is_valid = validateAvailabilityResponse(component, response) + if not is_valid: + exit(1) + except Exception as e: + print 'Error checking availability status of component', e + exit(1) + +#Validate component-specific response +def validateAvailabilityResponse(component, response): + try: + if component == RESOURCEMANAGER: + rm_state = response['clusterInfo']['state'] + if rm_state == STARTED_STATE: + return True + else: + print 'Resourcemanager is not started' + return False + + elif component == NODEMANAGER: + node_healthy = bool(response['nodeInfo']['nodeHealthy']) + if node_healthy: + return True + else: + return False + elif component == HISTORYSERVER: + hs_start_time = response['historyInfo']['startedOn'] + if hs_start_time > 0: + return True + else: + return False + else: + return False + except Exception as e: + print 'Error validation of availability response for ' + str(component), e + return False + +#Verify that component has required resources to work +def validateAbility(component, path, address, ssl_enabled): + + try: + response = getResponse(path, address, ssl_enabled) + is_valid = validateAbilityResponse(component, response) + if not is_valid: + exit(1) + except Exception as e: + print 'Error checking ability of component', e + exit(1) + +#Validate component-specific response that it has required resources to work +def validateAbilityResponse(component, response): + try: + if component == RESOURCEMANAGER: + nodes = [] + if response.has_key('nodes') and not response['nodes'] == None and response['nodes'].has_key('node'): + nodes = response['nodes']['node'] + connected_nodes_count = len(nodes) + if connected_nodes_count == 0: + print 'There is no connected nodemanagers to resourcemanager' + return False + active_nodes = filter(lambda x: x['state'] == RUNNING_STATE, nodes) + active_nodes_count = len(active_nodes) + + if connected_nodes_count == 0: + print 'There is no connected active nodemanagers to resourcemanager' + return False + else: + return True + else: + return False + except Exception as e: + print 'Error validation of ability response', e + return False + +# +# Main. +# +def main(): + parser = optparse.OptionParser(usage="usage: %prog [options] component ") + parser.add_option("-p", "--port", dest="address", help="Host:Port for REST API of a desired component") + parser.add_option("-s", "--ssl", dest="ssl_enabled", help="Is SSL enabled for UI of component") + + (options, args) = parser.parse_args() + + component = args[0] + + address = options.address + ssl_enabled = (options.ssl_enabled) in 'true' + if component == RESOURCEMANAGER: + path = '/ws/v1/cluster/info' + elif component == NODEMANAGER: + path = '/ws/v1/node/info' + elif component == HISTORYSERVER: + path = '/ws/v1/history/info' + else: + parser.error("Invalid component") + + validateAvailability(component, path, address, ssl_enabled) + + if component == RESOURCEMANAGER: + path = '/ws/v1/cluster/nodes' + validateAbility(component, path, address, ssl_enabled) + +if __name__ == "__main__": + main() http://git-wip-us.apache.org/repos/asf/ambari/blob/f76f239d/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/mapred_service_check.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/mapred_service_check.py b/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/mapred_service_check.py index 78e8a35..9220b93 100644 --- a/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/mapred_service_check.py +++ b/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/mapred_service_check.py @@ -42,7 +42,7 @@ class MapReduce2ServiceCheckWindows(MapReduce2ServiceCheck): else: component_address = params.hs_webui_address - validateStatusFileName = "validateYarnComponentStatus.py" + validateStatusFileName = "validateYarnComponentStatusWindows.py" validateStatusFilePath = os.path.join(os.path.dirname(params.hadoop_home), "temp", validateStatusFileName) python_executable = sys.executable validateStatusCmd = "{0} {1} {2} -p {3} -s {4}".format( http://git-wip-us.apache.org/repos/asf/ambari/blob/f76f239d/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/service_check.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/service_check.py b/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/service_check.py index 547c687..7d095b9 100644 --- a/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/service_check.py +++ b/ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/service_check.py @@ -49,7 +49,7 @@ class ServiceCheckWindows(ServiceCheck): #temp_dir = os.path.abspath(os.path.join(params.hadoop_home, os.pardir)), "/tmp" temp_dir = os.path.join(os.path.dirname(params.hadoop_home), "temp") - validateStatusFileName = "validateYarnComponentStatus.py" + validateStatusFileName = "validateYarnComponentStatusWindows.py" validateStatusFilePath = os.path.join(temp_dir, validateStatusFileName) python_executable = sys.executable validateStatusCmd = "%s %s %s -p %s -s %s" % (python_executable, validateStatusFilePath, component_type, component_address, params.hadoop_ssl_enabled) http://git-wip-us.apache.org/repos/asf/ambari/blob/f76f239d/ambari-server/src/main/resources/stacks/HDPWIN/2.1/services/HIVE/package/files/templetonSmoke.sh ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/HDPWIN/2.1/services/HIVE/package/files/templetonSmoke.sh b/ambari-server/src/main/resources/stacks/HDPWIN/2.1/services/HIVE/package/files/templetonSmoke.sh deleted file mode 100644 index 2d07b8b..0000000 --- a/ambari-server/src/main/resources/stacks/HDPWIN/2.1/services/HIVE/package/files/templetonSmoke.sh +++ /dev/null @@ -1,96 +0,0 @@ -#!/usr/bin/env bash -# -# -# 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. -# -# - -export ttonhost=$1 -export smoke_test_user=$2 -export smoke_user_keytab=$3 -export security_enabled=$4 -export kinit_path_local=$5 -export ttonurl="http://${ttonhost}:50111/templeton/v1" - -if [[ $security_enabled == "true" ]]; then - kinitcmd="${kinit_path_local} -kt ${smoke_user_keytab} ${smoke_test_user}; " -else - kinitcmd="" -fi - -export no_proxy=$ttonhost -cmd="${kinitcmd}curl --negotiate -u : -s -w 'http_code <%{http_code}>' $ttonurl/status 2>&1" -retVal=`su - ${smoke_test_user} -c "$cmd"` -httpExitCode=`echo $retVal |sed 's/.*http_code <\([0-9]*\)>.*/\1/'` - -if [[ "$httpExitCode" -ne "200" ]] ; then - echo "Templeton Smoke Test (status cmd): Failed. : $retVal" - export TEMPLETON_EXIT_CODE=1 - exit 1 -fi - -exit 0 - -#try hcat ddl command -echo "user.name=${smoke_test_user}&exec=show databases;" /tmp/show_db.post.txt -cmd="${kinitcmd}curl --negotiate -u : -s -w 'http_code <%{http_code}>' -d \@${destdir}/show_db.post.txt $ttonurl/ddl 2>&1" -retVal=`su - ${smoke_test_user} -c "$cmd"` -httpExitCode=`echo $retVal |sed 's/.*http_code <\([0-9]*\)>.*/\1/'` - -if [[ "$httpExitCode" -ne "200" ]] ; then - echo "Templeton Smoke Test (ddl cmd): Failed. : $retVal" - export TEMPLETON_EXIT_CODE=1 - exit 1 -fi - -# NOT SURE?? SUHAS -if [[ $security_enabled == "true" ]]; then - echo "Templeton Pig Smoke Tests not run in secure mode" - exit 0 -fi - -#try pig query -outname=${smoke_test_user}.`date +"%M%d%y"`.$$; -ttonTestOutput="/tmp/idtest.${outname}.out"; -ttonTestInput="/tmp/idtest.${outname}.in"; -ttonTestScript="idtest.${outname}.pig" - -echo "A = load '$ttonTestInput' using PigStorage(':');" > /tmp/$ttonTestScript -echo "B = foreach A generate \$0 as id; " >> /tmp/$ttonTestScript -echo "store B into '$ttonTestOutput';" >> /tmp/$ttonTestScript - -#copy pig script to hdfs -su - ${smoke_test_user} -c "hadoop dfs -copyFromLocal /tmp/$ttonTestScript /tmp/$ttonTestScript" - -#copy input file to hdfs -su - ${smoke_test_user} -c "hadoop dfs -copyFromLocal /etc/passwd $ttonTestInput" - -#create, copy post args file -echo -n "user.name=${smoke_test_user}&file=/tmp/$ttonTestScript" > /tmp/pig_post.txt - -#submit pig query -cmd="curl -s -w 'http_code <%{http_code}>' -d \@${destdir}/pig_post.txt $ttonurl/pig 2>&1" -retVal=`su - ${smoke_test_user} -c "$cmd"` -httpExitCode=`echo $retVal |sed 's/.*http_code <\([0-9]*\)>.*/\1/'` -if [[ "$httpExitCode" -ne "200" ]] ; then - echo "Templeton Smoke Test (pig cmd): Failed. : $retVal" - export TEMPLETON_EXIT_CODE=1 - exit 1 -fi - -exit 0 http://git-wip-us.apache.org/repos/asf/ambari/blob/f76f239d/ambari-server/src/main/resources/stacks/HDPWIN/2.1/services/HIVE/package/templates/webhcat-env.sh.j2 ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/HDPWIN/2.1/services/HIVE/package/templates/webhcat-env.sh.j2 b/ambari-server/src/main/resources/stacks/HDPWIN/2.1/services/HIVE/package/templates/webhcat-env.sh.j2 deleted file mode 100644 index 220f420..0000000 --- a/ambari-server/src/main/resources/stacks/HDPWIN/2.1/services/HIVE/package/templates/webhcat-env.sh.j2 +++ /dev/null @@ -1,62 +0,0 @@ -{# -# 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. -#} - -# -# -# 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. -# -# -# - -# The file containing the running pid -PID_FILE={{pid_file}} - -TEMPLETON_LOG_DIR={{templeton_log_dir}}/ - - -WEBHCAT_LOG_DIR={{templeton_log_dir}}/ - -# The console error log -ERROR_LOG={{templeton_log_dir}}/webhcat-console-error.log - -# The console log -CONSOLE_LOG={{templeton_log_dir}}/webhcat-console.log - -#TEMPLETON_JAR=templeton_jar_name - -#HADOOP_PREFIX=hadoop_prefix - -#HCAT_PREFIX=hive_prefix - -# Set HADOOP_HOME to point to a specific hadoop install directory -export HADOOP_HOME=/usr/lib/hadoop http://git-wip-us.apache.org/repos/asf/ambari/blob/f76f239d/ambari-server/src/main/resources/stacks/HDPWIN/2.1/services/YARN/package/files/validateYarnComponentStatus.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/HDPWIN/2.1/services/YARN/package/files/validateYarnComponentStatus.py b/ambari-server/src/main/resources/stacks/HDPWIN/2.1/services/YARN/package/files/validateYarnComponentStatus.py deleted file mode 100644 index 073371a..0000000 --- a/ambari-server/src/main/resources/stacks/HDPWIN/2.1/services/YARN/package/files/validateYarnComponentStatus.py +++ /dev/null @@ -1,161 +0,0 @@ -#!/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. -''' - -import optparse -import subprocess -import json -import urllib2 - -RESOURCEMANAGER = 'rm' -NODEMANAGER = 'nm' -HISTORYSERVER = 'hs' - -STARTED_STATE = 'STARTED' -RUNNING_STATE = 'RUNNING' - -#Return reponse for given path and address -def getResponse(path, address, ssl_enabled): - if ssl_enabled: - url = 'https://' + address + path - else: - url = 'http://' + address + path - - try: - handle = urllib2.urlopen(url) - output = handle.read() - handle.close() - response = json.loads(output) - if response == None: - print 'There is no response for url: ' + str(url) - exit(1) - return response - except Exception as e: - print 'Error getting response for url:' + str(url), e - exit(1) - -#Verify that REST api is available for given component -def validateAvailability(component, path, address, ssl_enabled): - - try: - response = getResponse(path, address, ssl_enabled) - is_valid = validateAvailabilityResponse(component, response) - if not is_valid: - exit(1) - except Exception as e: - print 'Error checking availability status of component', e - exit(1) - -#Validate component-specific response -def validateAvailabilityResponse(component, response): - try: - if component == RESOURCEMANAGER: - rm_state = response['clusterInfo']['state'] - if rm_state == STARTED_STATE: - return True - else: - print 'Resourcemanager is not started' - return False - - elif component == NODEMANAGER: - node_healthy = bool(response['nodeInfo']['nodeHealthy']) - if node_healthy: - return True - else: - return False - elif component == HISTORYSERVER: - hs_start_time = response['historyInfo']['startedOn'] - if hs_start_time > 0: - return True - else: - return False - else: - return False - except Exception as e: - print 'Error validation of availability response for ' + str(component), e - return False - -#Verify that component has required resources to work -def validateAbility(component, path, address, ssl_enabled): - - try: - response = getResponse(path, address, ssl_enabled) - is_valid = validateAbilityResponse(component, response) - if not is_valid: - exit(1) - except Exception as e: - print 'Error checking ability of component', e - exit(1) - -#Validate component-specific response that it has required resources to work -def validateAbilityResponse(component, response): - try: - if component == RESOURCEMANAGER: - nodes = [] - if response.has_key('nodes') and not response['nodes'] == None and response['nodes'].has_key('node'): - nodes = response['nodes']['node'] - connected_nodes_count = len(nodes) - if connected_nodes_count == 0: - print 'There is no connected nodemanagers to resourcemanager' - return False - active_nodes = filter(lambda x: x['state'] == RUNNING_STATE, nodes) - active_nodes_count = len(active_nodes) - - if connected_nodes_count == 0: - print 'There is no connected active nodemanagers to resourcemanager' - return False - else: - return True - else: - return False - except Exception as e: - print 'Error validation of ability response', e - return False - -# -# Main. -# -def main(): - parser = optparse.OptionParser(usage="usage: %prog [options] component ") - parser.add_option("-p", "--port", dest="address", help="Host:Port for REST API of a desired component") - parser.add_option("-s", "--ssl", dest="ssl_enabled", help="Is SSL enabled for UI of component") - - (options, args) = parser.parse_args() - - component = args[0] - - address = options.address - ssl_enabled = (options.ssl_enabled) in 'true' - if component == RESOURCEMANAGER: - path = '/ws/v1/cluster/info' - elif component == NODEMANAGER: - path = '/ws/v1/node/info' - elif component == HISTORYSERVER: - path = '/ws/v1/history/info' - else: - parser.error("Invalid component") - - validateAvailability(component, path, address, ssl_enabled) - - if component == RESOURCEMANAGER: - path = '/ws/v1/cluster/nodes' - validateAbility(component, path, address, ssl_enabled) - -if __name__ == "__main__": - main()
