blob: 5d7571a5070566a22307146b9dc3829d608e545e [file] [log] [blame]
#!/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.
try:
import os
import json
import sys
import subprocess
from hawqpylib.HAWQ_HELP import *
from hawqpylib.hawqlib import *
except ImportError, e:
sys.exit('ERROR: Cannot import modules. Please check that you '
'have sourced greenplum_path.sh. Detail: ' + str(e))
global hawq_home, source_hawq_env
def print_version():
print 'HAWQ version $Revision$'
sys.exit(0)
def local_run(cmd):
'''Execute shell command on local machine.'''
result = subprocess.Popen(cmd, shell=True).wait()
return result
def check_master_or_standby_host(master_host_name='localhost', standby_host_name='None'):
if not check_hostname_equal(master_host_name, user = ""):
if standby_host_name.lower() != 'none':
if not check_hostname_equal(standby_host_name, user = ""):
return False
else:
return True
else:
return False
else:
return True
def main():
hawq_home = os.getenv('GPHOME')
if not hawq_home:
print "HAWQ home directory not defined, please check GPHOME settings."
sys.exit(1)
hawqsite = HawqXMLParser(hawq_home)
hawqsite.get_all_values()
hawq_dict = hawqsite.hawq_dict
master_host_name = hawq_dict['hawq_master_address_host']
cluster_host_list = list()
cluster_host_list.append(master_host_name)
if 'hawq_standby_address_host' in hawq_dict:
standby_host_name = hawq_dict['hawq_standby_address_host']
cluster_host_list.append(standby_host_name)
else:
standby_host_name = 'None'
segments_host_list = parse_hosts_file(hawq_home)
for host in segments_host_list:
cluster_host_list.append(host)
result = 0
cluster_type_list = ('cluster', 'segment', 'master', 'standby', 'allsegments')
cluster_init_list = ('cluster', 'segment', 'master', 'standby')
source_hawq_env = ". %s/greenplum_path.sh" % hawq_home
if len(sys.argv) > 2:
hawq_command = sys.argv[1]
second_arg = sys.argv[2]
sub_args_list = sys.argv[2:]
# Password can have special characters like semicolon (;), quotes(", ') etc, convert input password to a string
if hawq_command == 'ssh-exkeys' and '-p' in sub_args_list:
password_index = sub_args_list.index('-p') + 1
if len(sub_args_list) > password_index:
sub_args_list[password_index] = json.dumps(sub_args_list[password_index])
sub_args = " ".join(sub_args_list)
elif len(sys.argv) > 1:
hawq_command = sys.argv[1]
second_arg = ''
sub_args = ''
else:
hawq_command = ''
second_arg = ''
sub_args = ''
if (second_arg == 'cluster' or (hawq_command in ('remove', 'filespace', 'state'))):
if not check_hostname_equal(master_host_name, user = ""):
print "This can be run on master host only"
sys.exit(1)
if (hawq_command == 'config' or
(hawq_command in ('init', 'activate') and second_arg == 'standby')):
if not check_master_or_standby_host(master_host_name, standby_host_name):
print "This can be run only on master or standby host"
sys.exit(1)
if hawq_command == "start":
if second_arg not in cluster_type_list:
print START_HELP
sys.exit(1)
cmd = "%s; hawq_ctl %s %s" % (source_hawq_env, hawq_command, sub_args)
result = local_run(cmd)
elif hawq_command == "stop":
if second_arg not in cluster_type_list:
print STOP_HELP
sys.exit(1)
cmd = "%s; hawq_ctl %s %s" % (source_hawq_env, hawq_command, sub_args)
result = local_run(cmd)
elif hawq_command == "init":
if second_arg not in cluster_init_list:
print INIT_HELP
sys.exit(1)
cmd = "%s; hawq_ctl %s %s" % (source_hawq_env, hawq_command, sub_args)
result = local_run(cmd)
elif hawq_command == "restart":
if second_arg not in cluster_type_list:
print RESTART_HELP
sys.exit(1)
cmd = "%s; hawq_ctl stop %s" % (source_hawq_env, sub_args)
check_return_code(local_run(cmd))
cmd = "%s; hawq_ctl start %s" % (source_hawq_env, sub_args)
result = local_run(cmd)
elif hawq_command == "activate":
if second_arg in ['', 'help', '--help', '-h']:
print ACTIVE_HELP
sys.exit(1)
cmd = "%s; hawq_ctl %s %s" % (source_hawq_env, hawq_command, sub_args)
result = local_run(cmd)
elif hawq_command == "config":
if second_arg in ['', 'help', '--help', '-h']:
print CONFIG_HELP
sys.exit(1)
cmd = "%s; hawqconfig %s" % (source_hawq_env, sub_args)
result = local_run(cmd)
elif hawq_command == "extract":
cmd = "%s; hawqextract %s" % (source_hawq_env, sub_args)
result = local_run(cmd)
elif hawq_command == "check":
cmd = "%s; gpcheck %s" % (source_hawq_env, sub_args)
result = local_run(cmd)
elif hawq_command == "checkperf":
cmd = "%s; gpcheckperf %s" % (source_hawq_env, sub_args)
result = local_run(cmd)
elif hawq_command == "load":
cmd = "%s; gpload %s" % (source_hawq_env, sub_args)
result = local_run(cmd)
elif hawq_command == "filespace":
cmd = "%s; hawqfilespace %s" % (source_hawq_env, sub_args)
result = local_run(cmd)
elif hawq_command == "state":
cmd = "%s; hawqstate %s" % (source_hawq_env, sub_args)
result = local_run(cmd)
elif hawq_command == "ssh":
cmd = "%s; gpssh %s" % (source_hawq_env, sub_args)
result = local_run(cmd)
elif hawq_command == "ssh-exkeys":
cmd = "%s; gpssh-exkeys %s" % (source_hawq_env, sub_args)
result = local_run(cmd)
elif hawq_command == "scp":
cmd = "%s; gpscp %s" % (source_hawq_env, sub_args)
result = local_run(cmd)
elif hawq_command == "register":
if second_arg in ['', 'help', '--help', '-h']:
doc_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), '../docs/cli_help/','hawqregister_help')
with open(doc_path, 'r') as f:
REGISTER_HELP = f.read()
print REGISTER_HELP
sys.exit(1)
cmd = "%s; hawqregister %s" % (source_hawq_env, sub_args)
result = local_run(cmd)
elif hawq_command == "upgrade":
cmd = "%s; hawqupgrade %s" % (source_hawq_env, sub_args)
result = local_run(cmd)
elif hawq_command == "version" or hawq_command == "--version":
print_version()
else:
print COMMON_HELP
sys.exit(1)
check_return_code(result)
if __name__ == '__main__':
main()