日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

腳本編寫說明

腳本是一段Python代碼,要求腳本里面定義好與模板名同名的函數(shù),作為執(zhí)行任務(wù)的入口函數(shù)。

代碼限制

  • 禁用內(nèi)置函數(shù)print,while。

  • 限制range使用,最大不超過1000。

  • import白名單列表:

    • re

    • json

    • time

    • datetime

    • IPy

    • hashlib

    • base64

    • uuid.uuid4

    • difflib

    • ipaddress

    • copy

    • random

    • math

    • string

  • 禁用下劃線開頭_命名的變量/函數(shù)。

內(nèi)置函數(shù)說明

  • logger

    • logger是標(biāo)準(zhǔn)模塊logging.Logger的一個實例。

    • 用戶可以參考下?的?式輸出日志,所有的日志都會記錄在數(shù)據(jù)庫中,可以在任務(wù)管理??查詢。

def logger_example():
    logger.error("an error message")
    logger.warn("a warning message")
    logger.info("an info message")
    logger.debug("a debug message")
  • login_device/device_login

    • login_device/device_login負(fù)責(zé)處理設(shè)備的登錄登出,以及保證設(shè)備操作的串?化。

  • exec_cli

    • exec_cli負(fù)責(zé)向設(shè)備下發(fā)命令,只能用于login_device裝飾的函數(shù)中。

    • 完整參數(shù)列表:

      • command: string|list,向設(shè)備下發(fā)的指令或指令列表。

      • timeout: int,默認(rèn)65s,系統(tǒng)等待設(shè)備響應(yīng)命令完成的超時時間,設(shè)備沒能在指定時間內(nèi)完成響應(yīng)則會有Timeout異常拋出。

      • style: string,控制返回內(nèi)容結(jié)構(gòu)。

        • simple: 回顯去除掉input command和終端提示符后剩余內(nèi)容。

        • tuple: 將回顯內(nèi)容進?拆分,返回(command,output)的列表。

        • verbose: 默認(rèn)值,將設(shè)備回顯內(nèi)容原樣返回。

        • strict: boolean,默認(rèn)值True,是否對回顯內(nèi)容作異常關(guān)鍵字判斷。如果命中關(guān)鍵字,則會拋出異常SYSTEM_BUSY或BAD_DEVICE_RESPONSE,?前關(guān)鍵字列表包括:

          • System is busy

          • Permission denied

          • syntax error.

          • Unrecognized command

          • Invalid command

          • Invalid parameter

          • at '^' marker

          • Unknown command

          • at '^' position.

          • Incomplete command

          • unknown command

          • Operation fail

          • error: configuration database locked by

          • TCAM region is not configured

          • Invalid input

          • Request denied

          • Authorization denied

          • error: commit failed

          • Unavailable command

          • Cannot apply ACL

  • exec_script

    • exec_script用于調(diào)用其他模板。

def exec_script_example(target, cli):
    # 調(diào)用exec_cli_example的設(shè)備模板
    return exec_script('exec_cli_example', _target=target, cli=cli)
  • exec_script_async

    • exec_script_async用于異步調(diào)用模板。

def exec_script_async_example(target, cli):
    # 異步調(diào)用device_login_example的設(shè)備模板
    task =  exec_script('exec_cli_example', _target=target, cli=cli)
    # 獲取異步任務(wù)的結(jié)果
    result = task.get()
    return result
  • current_device

    • current_device用于獲取當(dāng)前登錄的設(shè)備。

@login_device
def get_device():
    device = current_device()
    device['ip']  # 設(shè)備IP
    device['hostname'] # 主機名 
    device['domain'] # 安全域
    device['space'] # 物理空間
    device['status'] # 狀態(tài)
    device['role'] # 角色
    device['vendor'] # 廠商
    device['model'] # 型號
    device['sn'] # SN
    device['device_id'] # id
  • abort

    • abort用于終止任務(wù)執(zhí)行。

    • 如下示例代碼,運行時,任務(wù)會執(zhí)行失敗,返回為{"message": "xxx", "traceback": [[ "__shadow_{腳本MD5值}_abort_example_{版本ID}__",2,"abort_example",null]], "error_code": "OZ_USER_ABORT"}。

def abort_example():
    abort("xxx")
  • get_exc_code

    • 捕獲異常時,可用該函數(shù)獲取異常錯誤碼。

  • get_traceback

    • 捕獲異常時,可用該函數(shù)獲取錯誤堆棧。

def exc_example():
    try:
        abort("xxx")
    except Exception as e:
        e.message #返回"xxx"
        get_exc_code(e) #返回"OZ_USER_ABORT"
        get_traceback() #返回[["__shadow_{腳本MD值}_{模板名}_{版本ID}__",
                        #     {異常發(fā)生代碼行數(shù)},
                        #     {異常所在函數(shù)名},
                        #     null]]

輸入?yún)?shù)說明

  • 設(shè)備模板默認(rèn)第一個參數(shù)是_target,類型是string,可以是設(shè)備的id,設(shè)備的主機名或者IP。

輸出參數(shù)說明

  • 主要用于變更方案步驟編輯中。

代碼格式要求

  • 自動化模板代碼格式要求。

    • 例如一個名為example_template的用戶模板,代碼必須全寫在example_template這個函數(shù)里面,若有同級其他函數(shù),引用時需要申明global。

    • re, json, time, datetime已經(jīng)內(nèi)置,可以不需要寫import。

      • 正確示例

def func_a():
    pass

def example_template():
    import xxx
    global func_a
    
    def func_b():
        pass
    
    func_a()
    func_b()
  • 巡檢模板代碼格式要求。

    • 巡檢模板代碼里面只能允許有一個可執(zhí)行函數(shù)。