#!/usr/bin/env python2
"""
    Execute remote commands on servers

    Copyright  Afrihost.com (PTY) Ltd 2005
    Original file by: Ed Pascoe <ed@pascoe.co.za>
"""
__author__  = "Ed Pascoe <ed@pascoe.co.za>"
__credits__ = "Afrihost.com -- The best webhosting. Ever."
__version__ = "1.0"


import os.path, sys
import optparse

def rexec(script,cmdline,site,mkdir=0,debug=0):
    scmd=[]
    if mkdir: #Create the tmp directory (we use this instead of /tmp incase of passwords or noexec flags
        scmd.append("ssh %s -q \'rm -rf /usr/src/tmp 2>/dev/null ; mkdir -p /usr/src/tmp; chmod 700 /usr/src/tmp\'" % (site))
    scmd.append('rsync -az -e \'ssh -q\' \'%s\' %s:/usr/src/tmp' % (script,site))
    script=os.path.basename(script)
    if not cmdline: cmdline=""
    scmd.append('ssh %s -q \'cd /usr/src/tmp; ( ./%s %s 2>&1) \'' % (site,script,cmdline))
    #print scmd
    for c in scmd:
        if debug: print c
        os.system(c)
    

if __name__=='__main__':
    usage="Usage: %prog [<options>]\n"+__doc__+"\n"
    parser=optparse.OptionParser(usage,version=__version__)
    parser.add_option("-s","--script", dest="script", type="string", help="Pointer to the actual script to execute")
    parser.add_option("-c","--cmdline", dest="cmdline", type="string", help="Command line options")
    parser.add_option("-d","--debug", dest="debug", action="store_true", default=0, help="Debug mode")
    parser.add_option("--mkdir", dest="mkdir", action="store_true", default=0, help="Create the /usr/src/tmp directory")
    (options,args) = parser.parse_args()
                                                                                                                           
    for site in args:
        print site
        rexec(options.script,options.cmdline,site,options.mkdir,options.debug)

