Beispiel #1
0
def addsshcredits(ip, user, passwd):
    ansible_os_param = "/usr/bin/ansible " + ip + " -i " + ip + ", -m 'command' -a 'uname' -e 'ansible_user="******" ansible_ssh_pass="******"'"
    log().info('get OS Info::' + ansible_os_param)
    retVal = subprocess.check_output([ansible_os_param], shell=True)
    baseDir = ''
    osType = retVal.split('>>')[1].strip()
    ansible_param = ''
    if user == 'root':
        if osType.lower() == 'linux':
            baseDir = '/root/'
        elif osType.lower() == 'aix':
            baseDir = '/'
        elif osType.lower() == 'hp-ux':
            baseDir = '/'
        ansible_param = "/usr/bin/ansible " + ip + " -i " + ip + ", -m authorized_key -a 'user="******" key={{ lookup(\"file\",\"/root/.ssh/id_rsa.pub\") }} path='" + baseDir + ".ssh/authorized_keys''  -e 'ansible_user="******" ansible_ssh_pass="******"'"
    else:
        baseDir = '/home/' + user + '/'
        ansible_param = "/usr/bin/ansible " + ip + " -i " + ip + ", -m authorized_key -a 'user="******" key={{ lookup(\"file\",\"" + str(
            baseDir
        ) + ".ssh/id_rsa.pub\") }} path='" + baseDir + ".ssh/authorized_keys''  -e 'ansible_user="******" ansible_ssh_pass="******"'"
    log().info(ansible_param)
    retVal = subprocess.call([ansible_param], shell=True)
    if retVal == 0:
        return 'success'
    else:
        return 'fail'
Beispiel #2
0
 def getMqFixpack(self, path, version, ostype=None):
     log().debug('fp::getMqFixpack ' + path + ' ' + str(ostype))
     os_dict = {'linux': '(lin|x86)', 'aix': 'aix', 'windows': 'win'}
     os_exp = os_dict.get(ostype)
     out = []
     final = {}
     if os_exp:
         files = os.listdir(path + '/' + version)
         for elem in files:
             fix_search_Obj = re.search(
                 r'(^[0-9\.]+).+' + os_exp + '.+fp0+([1-9]+).*', elem, re.I)
             if fix_search_Obj:
                 fix_dict = {}
                 fix_dict = {
                     fix_search_Obj.group(1) + '.' + fix_search_Obj.group(3):
                     fix_search_Obj.group()
                 }
                 out.append(fix_dict)
                 final[version] = out
         fps = json.dumps(final)
         self.write(fps)
         self.finish()
     else:
         log().warning('fp::getMqFixPack  this os is not supported')
         self.write({'status': 0, 'message': 'this os is not support.'})
         self.finish()
Beispiel #3
0
 def getwasVersion(self, path, ostype=None):
     os_dict = {'linux': '(lin|x86)', 'aix': 'aix', 'windows': 'win'}
     os_exp = os_dict.get(ostype)
     ver_dict = {}
     out = []
     if os_exp:
         ver_list = os.listdir(path)
         ver_list.sort()
         for ver in ver_list:
             files = os.listdir(path + '/' + ver)
             for file in files:
                 ver_search_Obj = re.search(r'(wasnd_v' + ver + '.*)_.*zip',
                                            file, re.I)
                 if ver_search_Obj:
                     ver_dict.update(
                         {ver: ver_search_Obj.group(1) + '*zip'})
         #           ver_dict={}
         #           ver_dict[ver]=ver_search_Obj.group()
         #           out.append(ver_dict)
         vers = json.dumps(ver_dict)
         log().debug('fp::getwasVersion' + str(vers))
         self.write(vers)
         self.finish()
     else:
         print("this os is not supported")
         self.write([])
         self.finish()
Beispiel #4
0
 def login(self, name, passwd, role):
     try:
         log().debug('login::' + name + ' ' + passwd + ' ' + str(role))
         result = mongoOps.db().login.find_one({'name': name}, {'_id': 0})
         if result is None:
             self.write({'status': 0, 'message': '账号不存在,或账号权限非法!'})
             log().info('login::账号不存在,或账号权限非法!')
             self.finish()
         else:
             if passwd == result['password']:
                 del result['password']
                 del result['email']
                 product = result['product']
                 out = ','.join(product)
                 result['product'] = out
                 self.write({'status': 1, 'message': json.dumps(result)})
                 log().info('login::' + name + ' login success')
                 self.finish()
             else:
                 self.write({'status': 0, 'message': '密码错误!'})
                 log().info('login::密码错误!')
                 self.finish()
     except Exception, err:
         self.write({'status': 0, 'message': '登录异常,异常为:' + str(err)})
         log().error('login::登录异常,异常为' + str(err))
         self.finish()
Beispiel #5
0
 def post(self):
     playbookParam = self.createParam()
     jsonPath = self.createFile(playbookParam[1],
                                playbookParam[4])  #json参数文件地址
     playbookuuid = playbookParam[0]
     #读取配置文件
     #playbooksPath=get_conf('tornado','playbook_path')
     playbooksPath = getProjPath() + '/playbooks/deploy/'
     playbookymlpath = playbooksPath + playbookParam[1] + '.yml'
     playbook_yaml = yaml.load(file(playbookymlpath))
     # 创建playbooks 子节点plays
     plays = createPlaybookPlay(playbook_yaml)
     # create tasks
     (playlist, tasklist) = createPlayTask(playbook_yaml,
                                           demjson.decode(playbookParam[4]),
                                           playbookuuid)
     #mongoOps.InsertTasksDB(tasklist)
     #创建playbook
     tasklistNum = len(tasklist)  #获取task数量
     createPlaybook(playbookuuid, playbookParam, playbook_yaml, playlist,
                    tasklistNum)
     #去跑playbook
     log().info('run::post 开始运行playbook')
     #tasks.deploy_run_playbook.delay(playbookParam[1],jsonPath)
     tasks.deploy_run_playbook.apply_async(
         args=[playbookParam[1], jsonPath],
         queue='queue_deploy_run_playbook')
     self.write({
         'status': 'ok',
         'message': 'runhandler::初始化正确,开始运行Playbook!'
     })
     self.finish()
Beispiel #6
0
def judgeServerStatus(srvList):
    statusDict = getIPStatus(srvList)
    outDict = {}
    for srv in statusDict:
        try:
            if statusDict[srv] == 1:  #  reachable
                result = mongoOps.db().servers.find_one({'ip': srv},
                                                        {'_id': 0})
                ret = addsshcredits(srv, result['userid'], result['password'])
                log().info('addssh::' + ret)
                if ret == 'success':
                    osInfo = getOSInfo(srv)  # get update infomation
                    mongoOps.db().servers.update({'ip': srv}, {
                        '$set': {
                            'name': osInfo['name'],
                            'hvisor': osInfo['hvisor'],
                            'os': osInfo['os'],
                            'hconf': osInfo['hconf'],
                            'status': 'Active'
                        }
                    })
                    outDict[srv] = 1
                else:
                    outDict[srv] = 2  # 2 means ping is ok ,but ssh exist error
            else:  # the return valu is 0 or 2 means error
                mongoOps.db().servers.update({'ip': srv},
                                             {'$set': {
                                                 'status': 'Error'
                                             }})
                outDict[srv] = 0
        except Exception, e:
            print e
            outDict[srv] = 3  # 3 means non know error
Beispiel #7
0
    def post(self):
        log().debug('fp::post 收到数据' + self.request.body)
        body = json.loads(self.request.body)
        pName = body['pName']
        platform = body['platform']
        if pName == 'db2':
            db2Path = body['db2Path']
            if 'version' == body['type']:
                self.getDb2Version(db2Path, platform)
            elif 'fix' == body['type']:
                version = body['version']
                self.getDb2fixpack(db2Path, version, platform)
        elif pName == 'itmos':
            itmosPath = body['itmosPath']
            if 'version' == body['type']:
                self.getitmosVersion(itmosPath, platform)
            elif 'fix' == body['type']:
                version = body['version']
                self.getitmosFixpack(itmosPath, version, platform)
        elif pName == 'ihs':
            ihsPath = body['ihsPath']
            if 'version' == body['type']:
                self.getihsVersion(ihsPath, platform)
            elif 'fix' == body['type']:
                version = body['version']
                self.getihsfixpack(ihsPath, version, platform)
            elif 'im' == body['type']:
                version = body['version']
                self.getwasIM(ihsPath, version, platform)
        elif pName == 'was':
            wasPath = body['wasPath']
            if 'version' == body['type']:
                self.getwasVersion(wasPath, platform)
            elif 'fix' == body['type']:
                version = body['version']
                self.getwasFixpack(wasPath, version, platform)
            elif 'im' == body['type']:
                version = body['version']
                self.getwasIM(wasPath, version, platform)

        elif pName == 'mq':
            mqPath = body['mqPath']
            if 'fix' == body['type']:
                version = body['version']
                self.getMqFixpack(mqPath, version, platform)
            elif 'version' == body['type']:
                self.getMqVersion(mqPath, platform)
        else:
            self.write({'status': 0, 'message': 'you input a error message'})
            log().info('fp::post 你输入了错误的信息')
            self.finish()
Beispiel #8
0
def createPlayTask(yaml, json, playbook_uuid):
    for sub_item in yaml:
        sub_item['uuid'] = str(uuid.uuid1())
        sub_item['playbook_uuid'] = playbook_uuid
    tasklist = []
    playlist = []
    for sub_item in yaml:
        dict_temp = {}
        dict_temp['uuid'] = sub_item['uuid']
        dict_temp['name'] = sub_item['name']
        playlist.append(dict_temp)
    for sub_item in yaml:
        for final_item in sub_item['tasks']:
            if sub_item['hosts'] == 'localhost' or sub_item[
                    'hosts'] == '127.0.0.1':
                tasktemp = {}
                tasktemp['uuid'] = str(uuid.uuid1())
                tasktemp['host'] = '127.0.0.1'
                tasktemp['name'] = final_item['name']
                tasktemp['play_uuid'] = sub_item['uuid']
                tasktemp['status'] = 0
                tasktemp['playbook_uuid'] = playbook_uuid
                tasktemp['created_at'] = time.time()
                tasklist.append(tasktemp)
            else:
                iplist = json['ip_list']
                for ip in iplist:
                    if final_item.has_key('name'):
                        tasktemp = {}
                        tasktemp['uuid'] = str(uuid.uuid1())
                        tasktemp['host'] = str(ip)
                        tasktemp['name'] = final_item['name']
                        tasktemp['play_uuid'] = sub_item['uuid']
                        tasktemp['status'] = 0
                        tasktemp['playbook_uuid'] = playbook_uuid
                        tasktemp['created_at'] = time.time()
                        tasklist.append(tasktemp)
                    if final_item.has_key('block'):
                        for subBlockItem in final_item['block']:
                            tasktemp = {}
                            tasktemp['uuid'] = str(uuid.uuid1())
                            tasktemp['host'] = str(ip)
                            tasktemp['name'] = subBlockItem['name']
                            tasktemp['play_uuid'] = sub_item['uuid']
                            tasktemp['status'] = 0
                            tasktemp['playbook_uuid'] = playbook_uuid
                            tasktemp['created_at'] = time.time()
                            tasklist.append(tasktemp)
    mongoOps.InsertTasksDB(tasklist)
    log().info('run::createPlaybooktask 创建tasks成功')
    return (playlist, tasklist)
Beispiel #9
0
 def createServer(self,target):
     servers=[]
     servers.append(target['ip'])
     try:
        result=mongoOps.db().servers.insert(target)
        log().debug('servers::createServer'+str(result))
        if result is None:
           self.write({"status":0,"message":"创建服务器失败!"})
           log().info('servers::createServer'+'创建服务器失败')
           self.finish()
        else:
           #tasks.updateServerInfo.delay(servers)
           #tasks.updateServerInfo.delay(servers)
           del target['_id']  #删除_id 无法取出_id 值
           #tasks.updateServerInfo.delay(target)
           # addIP represitent operation is add a server then add ip to group
           tasks.updateServerInfo.apply_async(args=[target,'addIP'],queue='default')
           self.write({"status":1,"message":"创建服务器成功!"})
           log().info('servers::createServer'+"创建服务器成功!")
           self.finish()
           #tasks.updateServerInfo.apply_async(servers)
     except Exception ,e :
           print e 
           self.write({"status":0,"message":"调用mongoDB出错,出错为"+str(e)})
           log().error("servers::createServer调用mongoDB出错,出错为"+str(e))
           self.finish()
Beispiel #10
0
 def getDb2Version(self, path, ostype=None):
     os_dict = {'linux': '(lin|x86)', 'aix': 'aix', 'windows': 'win'}
     os_exp = os_dict.get(ostype)
     ver_dict = {}
     if os_exp:
         ver_list = os.listdir(path)
         ver_list.sort()
         for ver in ver_list:
             ver_dict.update({ver: ver})
         vers = json.dumps(ver_dict, indent=2)
         log().info(vers)
         self.write(vers)
         self.finish()
     else:
         log().info("this os is not supported")
         self.write([])
         self.finish()
Beispiel #11
0
def createPlaybook(playbookuuid, playbookParam, playbook_yaml, playlist,
                   tasklistNum):
    playbook_value = {}
    playbook_value['uuid'] = playbookuuid
    playbook_value['name'] = playbookParam[1]
    playbook_value['created_at'] = time.time()
    playbook_value['status'] = 0
    #playbook_value['total']=getTotalTaskNum(playbook_yaml,len(playbookParam[3]))
    playbook_value['total'] = tasklistNum
    playbook_value['completed'] = 0
    playbook_value['plays'] = playlist
    playbook_value['options'] = str(playbookParam[4])
    #print playbookParam[3]
    playbook_value['nodes'] = playbookParam[3]
    log().debug('run::createPlaybook' + str(playbook_value))
    mongoOps.InsertPlaybooksDB(playbook_value)
    log().info('run::createPlaybook success')
Beispiel #12
0
def getIPStatus(srvList):
    retDict = {}
    for srv in srvList:
        param = 'ping ' + srv + ' -c 1 -w 1'
        try:
            p = subprocess.Popen([param],
                                 stdout=subprocess.PIPE,
                                 stderr=subprocess.PIPE,
                                 shell=True)
            out = p.stdout.read()
            regex = re.compile('100% packet loss')
            if len(regex.findall(out)) == 0:  # the host is unreachable
                retDict[srv] = 1  # 1 means ok
            else:
                retDict[srv] = 0  # 0 means error
        except:
            log().info('the network work error')
            retDict[srv] = 2  # 2 means network error
    return retDict
Beispiel #13
0
 def post(self):
     try:
        log().debug('servers::'+self.request.body)
        body = json.loads(self.request.body)
        operType=body['type']
        if operType == 'createServer':
           server=body['server']
           self.createServer(server)             
        elif operType =='importExcel':
           servers=body['servers']
           self.importExcel(servers)
        elif operType =='IPCheck':
           ip=body['IP']
           self.IPCheck(ip)
        elif operType == 'deleteServer':
           servers=body['servers']
           self.deleteServers(servers)
        elif operType == 'modifyServer':
           server=body['server']
           self.modifyServer(server)
        else:
           self.write({"status":0,"message":"你提供了错误的代码,无法返回数据"})
           log().error("servers::你提供了错误的代码,无法返回数据")
           self.finish()
     except Exception ,e :
        log().error('servers::'+str(e))
        self.write({"status":0,"message":str(e)})
        self.finish()
Beispiel #14
0
 def post(self):
     try:
         body = json.loads(self.request.body)
         operType = body['type']
         if operType == 'login':
             log().info('login::user start login')
             name = body['name']
             password = body['password']
             role = body['role']
             self.login(name, password, role)
         elif operType == 'checkUser':
             name = body['name']
             self.checkUser(name)
         elif operType == 'addUser':
             name = body['name']
             password = body['password']
             role = body['role']
             email = body['email']
             product = body['product']
             self.addUser(name, password, role, email, product)
         elif operType == 'delUser':
             name = body['name']
             self.delUser(name)
         else:
             self.write({
                 "status": 0,
                 "message": "调用/api/v1/users/接口异常,请检查参数类型!"
             })
             log().error('调用/api/v1/users接口异常,请检查参数')
             self.finish()
     except Exception, e:
         self.write({"status": 0, "message": "JSon解析数据异常,出错为" + str(e)})
         log().error({"status": 0, "message": "JSon解析数据异常,出错为" + str(e)})
         self.finish()
Beispiel #15
0
 def createFile(self, playbookname, paramcontent):
     log().info('开始创建playbook json文件')
     jsonpath = get_conf('tornado', 'json_path')
     currentTime = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
     fileDir = jsonpath + "/deploy/" + playbookname + '/' + currentTime
     try:
         #os.mkdir(fileDir)
         os.makedirs(fileDir)
     except:
         retVal = {
             'status': 'error',
             'message': 'runHandler::创建存放json文件失败,请查找原因!'
         }
         log().error('run::createFile 创建存放json文件失败')
         self.write(retVal)
         self.finish()
         sys.exit(0)
     JsonPath = fileDir + '/' + playbookname + '.json'
     try:
         fs = open(JsonPath, 'w')
         fs.write(paramcontent)
         log().debug('run::createFile 写入文件的内容是' + paramcontent)
         fs.flush()
         fs.close()
     except Exception:
         if fs is None:
             pass
         else:
             fs.close()
     return JsonPath
Beispiel #16
0
 def getitmosVersion(self, path, ostype=None):
     os_dict = {'linux': '(lin|x86)', 'aix': 'aix', 'windows': 'win'}
     os_exp = os_dict.get(ostype)
     ver_dict = {}
     if os_exp:
         ver_list = os.listdir(path)
         ver_list.sort()
         for ver in ver_list:
             files = os.listdir(path + '/' + ver)
             for file in files:
                 ver_search_Obj = re.search(
                     r'(ITM_V' + ver + '.*)_.*tar.gz', file, re.I)
                 if ver_search_Obj:
                     ver_dict.update({ver: ver_search_Obj.group()})
         vers = json.dumps(ver_dict, indent=2)
         log().info(vers)
         self.write(vers)
         self.finish()
     else:
         print("this os is not supported")
         self.write([])
         self.finish()
Beispiel #17
0
 def getDb2fixpack(self, path, version, ostype=None):
     os_dict = {'linux': '(lin|x86)', 'aix': 'aix', 'windows': 'win'}
     os_exp = os_dict.get(ostype)
     fix_dict = {}
     if os_exp:
         files = os.listdir(path + '/' + version)
         for elem in files:
             fix_search_Obj = re.search(
                 r'^v' + version + 'fp([0-9]+).*' + os_exp + '.*tar.gz',
                 elem, re.I)
             if fix_search_Obj:
                 fix_dict.update({
                     version + '.0.' + fix_search_Obj.group(1):
                     fix_search_Obj.group()
                 })
         fps = json.dumps(fix_dict, indent=2)
         log().info(fps)
         self.write(fps)
         self.finish()
     else:
         log().info("this os is not supported")
         self.write([])
         self.finish()
Beispiel #18
0
 def getihsVersion(self, path, ostype=None):
     os_dict = {'linux': '(lin|x86)', 'aix': 'aix', 'windows': 'win'}
     os_exp = os_dict.get(ostype)
     ver_dict = {}
     if os_exp:
         ver_list = os.listdir(path)
         ver_list.sort()
         for ver in ver_list:
             files = os.listdir(path + '/' + ver)
             for file in files:
                 ver_search_Obj = re.search(
                     r'(was_v' + ver + '.*suppl).*zip', file, re.I)
                 if ver_search_Obj:
                     ver_dict.update(
                         {ver: ver_search_Obj.group(1) + '*zip'})
         vers = json.dumps(ver_dict, indent=2)
         log().debug('fp::getihsVersion' + str(vers))
         self.write(vers)
         self.finish()
     else:
         log().info("this os is not supported")
         self.write([])
         self.finish()
Beispiel #19
0
 def getitmosFixpack(self, path, version, ostype=None):
     os_dict = {'linux': '(lin|x86)', 'aix': 'aix', 'windows': 'win'}
     os_exp = os_dict.get(ostype)
     fix_dict = {}
     if os_exp:
         files = os.listdir(path + '/' + version)
         for elem in files:
             fix_search_Obj = re.search(
                 r'(^[0-9\.]+)(-TIV-ITM_TMV-Agents-FP0+)([1-9]+).tar.gz',
                 elem, re.I)
             if fix_search_Obj:
                 fix_dict.update({
                     fix_search_Obj.group(1) + '.' + fix_search_Obj.group(3):
                     fix_search_Obj.group(1) + fix_search_Obj.group(2) +
                     fix_search_Obj.group(3) + '.tar.gz'
                 })
         fps = json.dumps(fix_dict, indent=2)
         log().info(fps)
         self.write(fps)
         self.finish()
     else:
         log().info("this os is not supported")
         self.write([])
         self.finish()
Beispiel #20
0
 def getMqVersion(self, path, ostype=None):
     log().debug('fp::getMqVersion ' + path + ' ' + ostype)
     os_dict = {'linux': '(lin|x86)', 'aix': 'aix', 'windows': 'win'}
     os_exp = os_dict.get(ostype)
     out = []
     if os_exp:
         ver_list = os.listdir(path)
         ver_list.sort()
         for ver in ver_list:
             files = os.listdir(path + '/' + ver)
             for file in files:
                 ver_search_Obj = re.search(r'ws_mq.+' + os_exp + '[^fp].*',
                                            file, re.I)
                 if ver_search_Obj:
                     ver_dict = {}
                     ver_dict[ver] = ver_search_Obj.group()
                     out.append(ver_dict)
         vers = json.dumps(out)
         log().debug('fp::getMqVersion' + str(vers))
         self.write(vers)
         self.finish()
     else:
         self.write([])
         self.finish()
Beispiel #21
0
 def createParam(self):
     try:
         log().debug('run::createparam 收到数据' + self.request.body)
         body = json.loads(self.request.body)
     except Exception:
         retVal = {
             'status': 'error',
             'message': 'runHandler::收到的数据不满足Json格式,请处理!'
         }
         log().error('run::createParam' + '收到的数据不满足Json格式,请处理!')
         self.write(retVal)
         self.finish()
         sys.exit(0)
     playbookuuid = body['playbook-uuid']
     playbookname = body['playbook-name']
     productname = body['product-name']
     nodes = body['nodes']
     paramcontent = base64.b64decode(str(
         body['param-content']))  #playbook json参数文件 解码base64
     #print paramcontent
     log().info('run::createparam 分解数据正常')
     return (playbookuuid, playbookname, productname, nodes, paramcontent)