def copy_files(): # package trafodion binary into a tar file if not os.path.exists(TRAF_PKG_FILE): info('Creating trafodion packages of %s, this will take a while ...' % cfgs['traf_home']) run_cmd_as_user(cfgs['traf_user'], 'cd %s; tar czf %s ./* --exclude logs/* --exclude core.* --exclude tmp/*' % (cfgs['traf_home'], TRAF_PKG_FILE)) else: info('Using existing trafodion package %s' % TRAF_PKG_FILE) info('Copying trafodion files to new nodes, this will take a while ...') run_cmd('%s cp -rf %s/../.ssh /tmp' % (get_sudo_prefix(), cfgs['traf_home'])) run_cmd('%s chmod -R 755 /tmp/.ssh' % get_sudo_prefix()) traf_ssh_folder = '/tmp/.ssh' hbase_trx_file = cmd_output('ls %s/hbase-trx-*' % cfgs['hbase_lib_path']) trafodion_utility_file = cmd_output('ls %s/trafodion-utility-*' % cfgs['hbase_lib_path']) files = [TRAF_CFG_FILE, TRAF_PKG_FILE, traf_ssh_folder, hbase_trx_file, trafodion_utility_file] remote_insts = [Remote(h, pwd=pwd) for h in new_nodes] threads = [Thread(target=r.copy, args=(files, '/tmp')) for r in remote_insts] for thread in threads: thread.start() for thread in threads: thread.join() for r in remote_insts: if r.rc != 0: err_m('Failed to copy files to %s' % r.host)
def main(): """ db_uninstaller main loop """ # handle parser option options = get_options() notify = lambda n: raw_input('Uninstall Trafodion on [%s] [N]: ' % n) format_output('Trafodion Uninstall Start') if options.pwd: pwd = getpass.getpass('Input remote host SSH Password: '******'' node_list = '' # parse node list from trafodion_config if os.path.exists(TRAFODION_CFG_FILE): with open(TRAFODION_CFG_FILE, 'r') as f: traf_cfgs = f.readlines() try: line = [l for l in traf_cfgs if 'NODE_LIST' in l][0] node_list = re.search(r'NODE_LIST="(.*)"', line).groups()[0] except Exception as e: err_m('Cannot find node list info from %s: %s' % (TRAFODION_CFG_FILE, e)) # parse node list from installation config file elif options.cfgfile: if not os.path.exists(options.cfgfile): err_m('Cannot find config file \'%s\'' % options.cfgfile) config_file = options.cfgfile p = ParseInI(config_file, 'dbconfigs') cfgs = p.load() node_list = cfgs['node_list'] # user input else: node_lists = raw_input('Enter Trafodion node list to uninstall(separated by comma): ') if not node_lists: err_m('Empty value') node_list = ' '.join(expNumRe(node_lists)) if not options.silent: rc = notify(node_list) if rc.lower() != 'y': sys.exit(1) nodes = node_list.split() first_node = nodes[0] remotes = [Remote(node, pwd=pwd) for node in nodes] # stop trafodion on the first node remotes[0].execute('sudo su %s -l -c ckillall' % TRAF_USER, chkerr=False) # remove trafodion userid and group on all trafodion nodes, together with folders for remote in remotes: info('Remove Trafodion on node [%s] ...' % remote.host) remote.execute('ps -ef|grep ^%s|awk \'{print $2}\'|xargs sudo kill -9' % TRAF_USER, chkerr=False) remote.execute('sudo -n /usr/sbin/userdel -rf %s' % TRAF_USER, chkerr=False) remote.execute('sudo -n /usr/sbin/groupdel %s' % TRAF_USER, chkerr=False) remote.execute('sudo -n rm -rf /etc/security/limits.d/trafodion.conf /etc/trafodion /tmp/hsperfdata_%s 2>/dev/null' % TRAF_USER, chkerr=False) format_output('Trafodion Uninstall Completed')
def main(): """ db_uninstaller main loop """ # handle parser option options = get_options() notify = lambda n: raw_input('Uninstall Trafodion on [%s] [N]: ' % n) format_output('Trafodion Uninstall Start') if options.pwd: pwd = getpass.getpass('Input remote host SSH Password: '******'' try: traf_var = run_cmd_as_user(TRAF_USER,"echo $TRAF_VAR") node_list = run_cmd_as_user(TRAF_USER,"trafconf -name") except: if options.cfgfile: if not os.path.exists(options.cfgfile): err_m('Cannot find config file \'%s\'' % options.cfgfile) config_file = options.cfgfile p = ParseInI(config_file, 'dbconfigs') cfgs = p.load() traf_var = cfgs['traf_var'] node_list = cfgs['node_list'] # user input else: traf_var = '/var/lib/trafodion' node_lists = raw_input('Enter Trafodion node list to uninstall(separated by comma): ') if not node_lists: err_m('Empty value') node_list = ' '.join(expNumRe(node_lists)) if not options.silent: rc = notify(node_list) if rc.lower() != 'y': sys.exit(1) nodes = node_list.split() first_node = nodes[0] remotes = [Remote(node, pwd=pwd) for node in nodes] sudo_prefix = get_sudo_prefix() # remove trafodion userid and group on all trafodion nodes, together with folders for remote in remotes: info('Remove Trafodion on node [%s] ...' % remote.host) remote.execute('ps -f -u %s|awk \'{print $2}\'|xargs %s kill -9' % (TRAF_USER, sudo_prefix), chkerr=False) remote.execute('trafid=`getent passwd %s|awk -F: \'{print $3}\'`; if [[ -n $trafid ]]; then ps -f -u $trafid|awk \'{print $2}\'|xargs %s kill -9; fi' % (TRAF_USER, sudo_prefix), chkerr=False) remote.execute('%s /usr/sbin/userdel -rf %s' % (sudo_prefix, TRAF_USER), chkerr=False) remote.execute('%s /usr/sbin/groupdel %s' % (sudo_prefix, TRAF_USER), chkerr=False) remote.execute('%s rm -rf /etc/security/limits.d/%s.conf %s %s /tmp/hsperfdata_%s 2>/dev/null' % (sudo_prefix, TRAF_USER, TRAF_CFG_DIR, traf_var, TRAF_USER), chkerr=False) run_cmd('rm -f %s/*.status %s' % (INSTALLER_LOC, DBCFG_FILE)) format_output('Trafodion Uninstall Completed')
def _basic_check(self, name, answer): isYN = self.in_data[name].has_key('isYN') isdigit = self.in_data[name].has_key('isdigit') isexist = self.in_data[name].has_key('isexist') isfile = self.in_data[name].has_key('isfile') isremote_exist = self.in_data[name].has_key('isremote_exist') isIP = self.in_data[name].has_key('isIP') isuser = self.in_data[name].has_key('isuser') # check answer value basicly answer = answer.strip() if answer: if isYN: answer = answer.upper() if answer != 'Y' and answer != 'N': log_err('Invalid parameter for %s, should be \'Y|y|N|n\'' % name) elif isdigit: if not answer.isdigit(): log_err('Invalid parameter for %s, should be a number' % name) elif isexist: if not os.path.exists(answer): log_err('%s path \'%s\' doesn\'t exist' % (name, answer)) elif isfile: if not os.path.isfile(answer): log_err('%s file \'%s\' doesn\'t exist' % (name, answer)) elif isremote_exist: hosts = cfgs['node_list'].split(',') remotes = [Remote(host, pwd=self.pwd) for host in hosts] nodes = '' for remote in remotes: # check if directory exists on remote host remote.execute('ls %s 2>&1 >/dev/null' % answer, chkerr=False) if remote.rc != 0: nodes += ' ' + remote.host if nodes: log_err('%s path \'%s\' doesn\'t exist on node(s) \'%s\'' % (name, answer, nodes)) elif isIP: try: socket.inet_pton(socket.AF_INET, answer) except: log_err('Invalid IP address \'%s\'' % answer) elif isuser: if re.match(r'\w+', answer).group() != answer: log_err('Invalid user name \'%s\'' % answer) else: log_err('Empty value for \'%s\'' % name)