コード例 #1
0
ファイル: NF5280M5_436.py プロジェクト: Inspur-isib/ansible
    def exportbioscfg(self, client, args):
        '''
        export bios setup configuration
        :param client:
        :param args:
        :return:
        '''
        export = ResultBean()

        file_path = os.path.dirname(args.fileurl)
        file_name = os.path.basename(args.fileurl)

        if not os.path.exists(file_path):
            try:
                os.makedirs(file_path)
            except BaseException:
                export.State("Failure")
                export.Message(["cannot build path."])
                return export
        if '.json' not in file_name and '.conf' not in file_name:
            export.State("Failure")
            export.Message(["please input filename with suffix .json/.conf."])
            return export
        # login
        headers = RestFunc.login(client)
        if headers == {}:
            login_res = ResultBean()
            login_res.State("Failure")
            login_res.Message(
                ["login error, please check username/password/host/port"])
            return login_res
        client.setHearder(headers)
        # get
        res = RestFunc.exportTwoBios_436_CfgByRest(client, args.fileurl,
                                                   file_name)

        if res == {}:
            export.State("Failure")
            export.Message(["export bios setup configuration file failed."])
        elif res.get('code') == 0:
            export.State('Success')
            export.Message([res.get('data')])
        elif res.get('code') == 4:
            export.State('Failure')
            export.Message([res.get('data')])
        else:
            export.State("Failure")
            export.Message([
                "export bios setup configuration file error, " +
                res.get('data')
            ])
        # logout
        RestFunc.logout(client)
        return export
コード例 #2
0
ファイル: backup.py プロジェクト: Inspur-isib/ansible
def bios(client, args):
    file_name = 'Bios.conf'
    responds = RestFunc.exportTwoBiosCfgByRest(
        client, os.path.join(args.backuppath, file_name), file_name)
    if responds['code'] == 0 and responds['data'] is not None:
        return 1, "ok"
    else:
        return -1, "can not get bios info"
コード例 #3
0
ファイル: NF5280M5.py プロジェクト: Inspur-isib/ansible
 def collectBlackboxlog(self, client, bbl_path, logtype):  # 查看黑盒日志是否存在
     bbl_file = os.path.join(bbl_path, logtype + ".log")
     log_exist_res = RestFunc.getblacklogfileexist(client, logtype)
     if log_exist_res.get("code") == 0:
         if log_exist_res.get("data").get('FileExistFlag') == 1:
             download_res = RestFunc.downloadBlackboxlogByRest(
                 client, bbl_file, logtype)
             if download_res.get("code") == 0:
                 a = ""
                 with open(download_res.get("data"), 'rb') as f:
                     a = f.read()
                 try:
                     b = a.decode("utf-8")
                 except BaseException:
                     # 需要解码
                     import platform
                     if platform.system() == 'Linux':
                         cmd = '/tools//blackbox_decrypt/blackbox_decrypt '
                     else:
                         cmd = "\\tools\\blackbox_decrypt\\blackbox_decrypt.exe "
                     cmd = os.path.dirname(os.path.dirname(
                         __file__)) + cmd + download_res.get(
                             "data") + " > " + os.path.join(
                                 bbl_path, "res")
                     try:
                         pathnow = os.getcwd()
                         os.chdir(os.path.dirname(download_res.get("data")))
                         result_cmd = os.popen(cmd)
                         result_cmd.close()
                         with open(os.path.join(bbl_path, "res")) as deres:
                             deresTxt = deres.read()
                         if deresTxt.find('Success') > -1:
                             logNameStart = deresTxt.find(
                                 'Decrypt Success to')
                             logName = deresTxt[logNameStart + 18:].strip()
                             if logName[-1] == '.':
                                 logName = logName[:-1]
                             import shutil
                             shutil.move(logName, download_res.get("data"))
                         os.chdir(pathnow)
                         if os.path.exists(os.path.join(bbl_path, "res")):
                             os.remove(os.path.join(bbl_path, "res"))
                     except Exception as e:
                         return
コード例 #4
0
ファイル: backup.py プロジェクト: Inspur-isib/ansible
def usergroup(client, args):
    responds = RestFunc.getUserGroupByRest(client)
    if responds['code'] == 0 and responds['data'] is not None:
        result = responds['data']
        f = open(args.backuppath + 'UserGroup.conf', 'w')
        f.write(json.dumps(result, indent=4))
        f.close()
        return 1, "ok"
    else:
        return -1, "can not get user group info"
コード例 #5
0
ファイル: backup.py プロジェクト: Inspur-isib/ansible
def ldap(client, args):
    responds = RestFunc.getLDAPM6(client)
    if responds['code'] == 0 and responds['data'] is not None:
        result = responds['data']
        f = open(args.backuppath + 'LDAP.conf', 'w')
        f.write(json.dumps(result, indent=4))
        f.close()
        return 1, "ok"
    else:
        return -1, "can not get ldap info"
コード例 #6
0
ファイル: backup.py プロジェクト: Inspur-isib/ansible
def service(client, args):
    responds = RestFunc.getServiceInfoByRest(client)
    if responds['code'] == 0 and responds['data'] is not None:
        result = responds['data']
        file_name = 'Services.conf'
        file_name_all = args.backuppath + file_name
        f = open(file_name_all, 'w')
        f.write(json.dumps(result, indent=4))
        f.close()
        return 1, "ok"
    else:
        return -1, "can not get service info"
コード例 #7
0
ファイル: backup.py プロジェクト: Inspur-isib/ansible
def dns(client, args):
    responds = RestFunc.getDNSByRestM5(client)
    if responds['code'] == 0 and responds['data'] is not None:
        result = responds['data']
        if platform.system() == 'Linux':
            f = open(args.backuppath + '/DNS.conf', 'w')
        else:
            f = open(args.backuppath + '\\DNS.conf', 'w')
        f.write(json.dumps(result, indent=4))
        f.close()
        return 1, "ok"
    else:
        return -1, "can not get dns info"
コード例 #8
0
ファイル: backup.py プロジェクト: Inspur-isib/ansible
def snmptrap(client, args):
    responds = RestFunc.getSnmpInfoByRest(client)
    if responds['code'] == 0 and responds['data'] is not None:
        result = responds['data']
        if platform.system() == 'Linux':
            f = open(args.backuppath + '/SNMPtrap.conf', 'w')
        else:
            f = open(args.backuppath + '\\SNMPtrap.conf', 'w')
        f.write(json.dumps(result, indent=4))
        f.close()
        return 1, "ok"
    else:
        return -1, "can not get snmp trap info"
コード例 #9
0
ファイル: NF5280M5.py プロジェクト: Inspur-isib/ansible
 def importbioscfg(self, client, args):
     '''
     import bios cfg
     :param client:
     :param args:
     :return:
     '''
     # login
     headers = RestFunc.login(client)
     if headers == {}:
         login_res = ResultBean()
         login_res.State("Failure")
         login_res.Message(
             ["login error, please check username/password/host/port"])
         return login_res
     client.setHearder(headers)
     # get
     res = RestFunc.importTwoBiosCfgByRest(client, args.fileurl)
     import_Info = ResultBean()
     if res == {}:
         import_Info.State("Failure")
         import_Info.Message(
             ["import bios setup configuration file failed."])
     elif res.get('code') == 0:
         import_Info.State('Success')
         import_Info.Message(
             ['import bios setup configuration file success.'])
     else:
         import_Info.State("Failure")
         import_Info.Message([
             "import bios setup configuration failed, " +
             str(res.get('data'))
         ])
     # logout
     RestFunc.logout(client)
     return import_Info
コード例 #10
0
ファイル: ism.py プロジェクト: Inspur-isib/ansible
 def logout(signum, frame):
     if hasattr(client, "header"):
         RestFunc.logout(client)
コード例 #11
0
ファイル: NF5280M5.py プロジェクト: Inspur-isib/ansible
    def collect(self, client, args):
        if args.component is not None:
            res = ResultBean()
            res.State("Not Support")
            res.Message(["param(-t) component is not support"])
            return res
        checkparam_res = ResultBean()
        if args.fileurl == ".":
            file_name = ""
            file_path = os.path.abspath(".")
            args.fileurl = os.path.join(file_path, file_name)
        elif args.fileurl == "..":
            file_name = ""
            file_path = os.path.abspath("..")
            args.fileurl = os.path.join(file_path, file_name)
        elif re.search(r"^[C-Zc-z]\:$", args.fileurl, re.I):
            file_name = ""
            file_path = os.path.abspath(args.fileurl + "\\")
            args.fileurl = os.path.join(file_path, file_name)
        else:
            file_name = os.path.basename(args.fileurl)
            file_path = os.path.dirname(args.fileurl)
        # 只输入文件名字,则默认为当前路径
        if file_path == "":
            file_path = os.path.abspath(".")
            args.fileurl = os.path.join(file_path, file_name)

        # 用户输入路径,则默认文件名dump_psn_time.tar
        if file_name == "":
            psn = "UNKNOWN"
            res = Base.getfru(self, client, args)
            if res.State == "Success":
                frulist = res.Message[0].get("FRU", [])
                if frulist != []:
                    psn = frulist[0].get('ProductSerial', 'UNKNOWN')
            else:
                return res
            import time
            struct_time = time.localtime()
            logtime = time.strftime("%Y%m%d-%H%M", struct_time)
            file_name = "dump_" + psn + "_" + logtime + ".tar"
            args.fileurl = os.path.join(file_path, file_name)
        else:
            p = r'\.tar$'
            if not re.search(p, file_name, re.I):
                checkparam_res.State("Failure")
                checkparam_res.Message(["Filename should be xxx.tar"])
                return checkparam_res
            file_name = file_name[0:-4] + ".tar"
        if not os.path.exists(file_path):
            try:
                os.makedirs(file_path)
            except BaseException:
                checkparam_res.State("Failure")
                checkparam_res.Message(["can not create path."])
                return checkparam_res
        else:
            if os.path.exists(args.fileurl):
                name_id = 1
                name_new = file_name[:-4] + "(1).tar"
                file_new = os.path.join(file_path, name_new)
                while os.path.exists(file_new):
                    name_id = name_id + 1
                    name_new = file_name[:-4] + "(" + str(
                        name_id) + ")" + ".tar"
                    file_new = os.path.join(file_path, name_new)
                args.fileurl = file_new

        # login
        headers = RestFunc.login(client)
        if headers == {}:
            login_res = ResultBean()
            login_res.State("Failure")
            login_res.Message(
                ["login error, please check username/password/host/port"])
            return login_res
        client.setHearder(headers)
        # 生成log
        bmcres = ResultBean()
        generate_res = RestFunc.generateOnekeylogByRest(client)
        if generate_res['code'] == 404:
            # bmcres.State("Not Support")
            # bmcres.Message([""])
            generate_res = RestFunc.triggeronekeylog(client)
            if generate_res == {}:
                bmcres.State("Failure")
                bmcres.Message(["cannot generate log"])
            elif generate_res.get('code') == 0:
                bmcres = NF5280M5.getProgressAndDown(client, args)
            elif generate_res['code'] == 404:
                bmcres.State("Not Support")
                bmcres.Message([""])
            else:
                bmcres.State("Failure")
                bmcres.Message([generate_res.get('data')])
        else:
            if generate_res.get('code') != 0:
                bmcres.State("Failure")
                bmcres.Message([generate_res.get('data')])
            else:
                export_res = RestFunc.exportOnekeylogByRest(client)
                if export_res.get('code') == 0:

                    count = 0
                    while True:
                        if count > 60:
                            break
                        count = count + 1
                        import time
                        time.sleep(5)
                    # get
                    res = RestFunc.getOnekeylogByRest(client, args.fileurl)
                    if res == {}:
                        bmcres.State("Failure")
                        bmcres.Message(["cannot download onekeylog"])
                    elif res.get('code') == 0 and res.get('data') is not None:
                        bmcres.State("Success")
                        data = res.get('data')
                        bmcres.Message([data])
                    elif res.get('code') != 0 and res.get('data') is not None:
                        bmcres.State("Failure")
                        bmcres.Message([res.get('data')])
                    else:
                        bmcres.State("Failure")
                        bmcres.Message(["download onekeylog error"])
                elif export_res.get('code') == 404:
                    bmcres.State("Not Support")
                    bmcres.Message([""])
                else:
                    bmcres.State("Failure")
                    bmcres.Message(["download onekeylog error"])
        if bmcres.State == "Not Support":
            # 收集黑盒
            bmcres = NF5280M5.collectblackbox(client, args)

        # logout
        RestFunc.logout(client)
        return bmcres
コード例 #12
0
ファイル: NF5280M5.py プロジェクト: Inspur-isib/ansible
 def getProgressAndDown(self, client, args):
     bmcres = ResultBean()
     count = 0
     error_count = 0
     error_info = ""
     while True:
         if count > 40:
             bmcres.State("Failure")
             bmcres.Message(
                 ["collect log time out. Last response is " + error_info])
             break
         if error_count > 3:
             bmcres.State("Failure")
             bmcres.Message([error_info])
             break
         count = count + 1
         import time
         time.sleep(15)
         # 循环查找直到完成
         process_res = RestFunc.checkonekeylogexist(client)
         if process_res == {}:
             error_info = "Failed to call BMC interface api/checkonekeylogexist, response is none."
             error_count = error_count + 1
             continue
         elif "code" in process_res and "data" in process_res:
             if process_res.get('code') == 0:
                 data = process_res.get('data')
                 error_info = data
                 if "FileExistFlag" in data and "FileName" in data:
                     # log收集成功
                     # if data["FileExistFlag"] == 1 and data["FileName"] != "":
                     if data["FileName"] != "":
                         # get folder
                         folder = data['FileName']
                         # download
                         download_res = RestFunc.downloadonekeylogByRest(
                             client, args.fileurl, folder)
                         if download_res == {}:
                             bmcres.State("Failure")
                             bmcres.Message([
                                 'Failed to call BMC interface ' +
                                 args.logpath + ', response is none'
                             ])
                         elif download_res.get('code') == 0:
                             bmcres.State("Success")
                             bmcres.Message([download_res.get('data')])
                         else:
                             bmcres.State("Failure")
                             bmcres.Message([download_res.get('data')])
                         break
                     # elif data["FileExistFlag"] == 0 and data["FileName"] == "":
                     elif data["FileName"] == "":
                         continue
                     else:
                         continue
                         # bmcres.State("Failure")
                         #bmcres.Message(["cannot find log file"])
                         # break
                 else:
                     error_info = data
                     error_count = error_count + 1
                     continue
             else:
                 bmcres.State("Failure")
                 bmcres.Message([process_res.get('data')])
                 continue
         else:
             error_info = "cannot check one key log status" + str(
                 process_res)
             error_count = error_count + 1
             continue
     return bmcres
コード例 #13
0
ファイル: NF5180M5.py プロジェクト: Inspur-isib/ansible
 def getnic(self, client, args):
     # login
     headers = RestFunc.login(client)
     client.setHearder(headers)
     try:
         # get
         res = RestFunc.getAdapterByRest(client)
         nicRes = ResultBean()
         if res == {}:
             nicRes.State("Failure")
             nicRes.Message(["cannot get information"])
         elif res.get('code') == 0 and res.get('data') is not None:
             port_status_dict = {0: "Not Linked", 1: "Linked", 2: "NA"}
             nicRes.State("Success")
             nicinfo = NicAllBean()
             nicinfo.OverallHealth("OK")
             nicinfo.Maximum(1)
             PCIEinfo = NICBean()
             PCIEinfo.CommonName("PCIE")
             PCIEinfo.Location(None)
             PCIEinfo.Manufacturer(None)
             PCIEinfo.Model(None)
             PCIEinfo.Serialnumber(None)
             PCIEinfo.State(None)
             PCIEinfo.Health(None)
             sys_adapters = res.get('data')['sys_adapters']
             controllerList = []
             for ada in sys_adapters:
                 for adaport in ada['ports']:
                     adapterinfo = NICController()
                     adapterinfo.Id(adaport['id'])
                     adapterinfo.Manufacturer(ada['vendor'])
                     adapterinfo.Model(ada['model'])
                     adapterinfo.Serialnumber(None)
                     adapterinfo.FirmwareVersion(None)
                     adapterinfo.PortCount(adaport['port_num'])
                     portlist = []
                     for x in range(4):
                         portBean = NicPort()
                         portBean.Id(x + 1)
                         if x == 0:
                             x = ""
                         portBean.MACAddress(adaport['mac_addr' + str(x)])
                         portBean.LinkStatus(None)
                         portBean.MediaType(None)
                         portlist.append(portBean.dict)
                     adapterinfo.Port(portlist)
                     controllerList.append(adapterinfo.dict)
             PCIEinfo.Controller(controllerList)
             nicinfo.NIC([PCIEinfo.dict])
             nicRes.Message([nicinfo.dict])
         elif res.get('code') == 0 and res.get('data') is not None:
             nicRes.State("Failure")
             nicRes.Message([res.get('data')])
         else:
             nicRes.State("Failure")
             nicRes.Message([
                 "get information error, error code " + str(res.get('code'))
             ])
         # logout
         RestFunc.logout(client)
         return nicRes
     except BaseException:
         RestFunc.logout(client)
         return CommonM5.getnic(self, client, args)