示例#1
0
 def execCmdWithoutKillTimeout(cmd, ifPrint=None, env=None):
     if not cmd:
         return
     
     print('Executing cmd without timeout : %s' % cmd)
     output = None
     error = None
     outputFile = None
     outputFilePath = ""
     try :
         strTime = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
         strUUID = commands.getoutput('uuidgen')
         outputFileName = "output%s.%s.log" % (strTime, strUUID)
         if not os.path.exists(ShellCmdExecutor.OPENSTACK_INSTALL_LOG_TEMP_DIR) :
             os.system("mkdir -p %s" % ShellCmdExecutor.OPENSTACK_INSTALL_LOG_TEMP_DIR)
             pass
         
         outputFilePath = "%s/%s" % (ShellCmdExecutor.OPENSTACK_INSTALL_LOG_TEMP_DIR, outputFileName)
         print("OutputFileName=%s" % outputFilePath)
         outputFile=open(outputFilePath, 'w')
         
         if env != None :
             try:
                 import inspect
                 import json
                 stack = inspect.stack()
                 the_class = stack[2][0].f_locals["self"].__class__.__name__
                 if not os.path.exists("/var/log/autoops_env.json"):
                     record_env = {the_class: env}
                     content = json.dumps(record_env, sort_keys=True, indent=4)
                 else:
                     content_data = json.load(file("/var/log/autoops_env.json"))
                     content_data[the_class] = env
                     content = json.dumps(content_data, sort_keys=True, indent=4)
                 FileUtil.writeContent("/var/log/autoops_env.json", content)
             except Exception as ex:
                 print("Save parsed Env params Failed")
                 print(ex)
             env = dict(os.environ.items() + env.items())
             pass
         p = subprocess.Popen(cmd, shell=True, close_fds=True, stdout=outputFile, stderr=subprocess.PIPE, env=env)
         output, error = p.communicate()
         
         output = FileUtil.readContent(outputFilePath)
         
         if ifPrint :
             print("cmd output=%s---" % output)
         elif not ifPrint or ifPrint == None :
             pass
         
         if error!=None and error!="" :
             print("cmd error=%s---" % error)
             pass
         
         if error!=None and error!="" and cmd.find(".sh") > -1:
             error = "SOE: " + str(error)
     except Exception, e :
         print(e)
示例#2
0
#    INSTALL_TAG_FILE = '/opt/msyqlha_installed'
    
    print 'start to install======='
    #add HA
    mysql_ip_list_file_path = '/opt/mysql_ip_list'
    mysql_vip=JSONUtility.getValue('mysql_vip')
    haproxy_conf_file_path = '/etc/haproxy/haproxy.cfg'
    haproxy_conf = '/etc/haproxy'
    keepalived_conf_file_path = '/etc/keepalived/keepalived.conf'
    keepalived_conf = '/etc/keepalived'
    if not os.path.exists(mysql_ip_list_file_path):
        print 'mysql ip list not exist!'
        pass
    
    ShellCmdExecutor.execCmd('sudo chmod 777 %s' % mysql_ip_list_file_path)
    mysqlIPListContent = FileUtil.readContent(mysql_ip_list_file_path)
    mysqlIPListContent = mysqlIPListContent.strip()
    mysqlIPList = mysqlIPListContent.split(',')
    
    backendServerTemplate = 'server mysqldb-<INDEX> <SERVER_IP>:3309 weight 1'
    
    content = '''

listen mysql_cluster
  bind <MYSQL_VIP>:3306
  mode tcp
  balance roundrobin
  <SERVER_LIST>
    '''
    content = content.replace('<MYSQL_VIP>', mysql_vip)
    index = 1
示例#3
0
    def execCmdWithKillTimeout(cmd, ifPrint=None, kill_timeout=600, env=None):
        if not cmd:
            return
        
        output = None
        outputFile = None
        exitcode = -1
        outputFilePath = ""
        content = ""
        try :
            if kill_timeout == None :
                kill_timeout = ShellCmdExecutor.DEFAULT_TIMEOUT
                pass
            strTime = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
            strUUID = commands.getoutput('uuidgen')
            outputFileName = "output%s.%s.log" % (strTime, strUUID)
            
            ######################################
            cmd = cmd.strip()
            if cmd.startswith("bash") :
                scriptPath = cmd.strip().lstrip("bash").strip()
                content = FileUtil.readContent(scriptPath)
                #get script name
                content = content.strip()
                if content.startswith("bash") or content.startswith("sh") or content.startswith("python") or content.startswith("ruby"):
                    strCmd = content.strip()
                    elements = strCmd.split(" ")
                    scriptName = elements[1].split("/")[-1]
                    outputFileName = "%s-%s-%s.log" % (scriptName, strTime, strUUID)
                    pass
                elif content.startswith("./"):
                    pass
                pass
            ######################################
            outputDir = "/var/log/autoopsscriptslog"
            if not os.path.exists(outputDir) :
                os.system("mkdir -p %s" % outputDir)
                pass
            
            outputFilePath = "%s/%s" % (outputDir, outputFileName)
            print("OutputFileName=%s" % outputFilePath)
            print(content)
            outputFile=open(outputFilePath, 'w')
            
            current_dir = os.path.dirname(__file__)
            print "current_dir=%s" % current_dir
            timeout3ScriptPath= "%s/timeout3.sh" % current_dir
            timeoutCmd = "bash %s -t %s -i 1 -d 1 %s" % (timeout3ScriptPath, kill_timeout, cmd)
            #print("you can check the cmd %s logs @ %s if the cmd execution time is long" % (cmd, outputFilePath))
            if env != None :
                try:
                    import inspect
                    import json
                    stack = inspect.stack()
                    the_class = stack[2][0].f_locals["self"].__class__.__name__
                    if not os.path.exists("/var/log/autoops_env.json"):
                        record_env = {the_class: env}
                        content = json.dumps(record_env, sort_keys=True, indent=4)
                    else:
                        content_data = json.load(file("/var/log/autoops_env.json"))
                        content_data[the_class] = env
                        content = json.dumps(content_data, sort_keys=True, indent=4)
                    FileUtil.writeContent("/var/log/autoops_env.json", content)
                except Exception as ex:
                    print("Save parsed Env params Failed")
                    print(ex)

                env = dict(os.environ.items() + env.items())
                pass
            p = subprocess.Popen(timeoutCmd, shell=True, close_fds=True, stdout=outputFile, stderr=subprocess.STDOUT, env=env)
            #ToDo: start a thread to print the logs to log file
            output, error = p.communicate()
            exitcode = p.returncode
            
            output = FileUtil.readContent(outputFilePath)
            
            if ifPrint :
                print("cmd output=%s---" % output)
                print("The returncode is : %s" % exitcode)
                pass
            elif not ifPrint or ifPrint == None :
                pass
        except Exception, e :
            print(e)