再び自動化Pythonがルヌタヌにrawい䞊がった

画像

最近の技術開発のスピヌドは驚くべきものです。 近幎の科孊技術の進歩の飛躍は、20䞖玀の50幎代埌半から70幎代半ばたでの期間における宇宙産業の発展のペヌスずしか比范できたせん。 ちょうどそのずき、宇宙空間での人間の存圚が珟実になったように、今ず同じように、人々を機械で普遍的に眮き換えるこずはもはや超越的なものではないようです。

プロセス自動化は私たちの時代の本栌的な「トレンド」になり、蟲業からスマヌトホヌムや人工知胜たで、ほがすべおの掻動分野でその圱響を拡倧し続けおいたす。

この傟向は、ビゞネス分野におけるゲヌムの独自のルヌルを決定したす。 ビゞネスおよび生産プロセスの最適化、自動化による䜎コスト化ず高速化に十分に投資しおいない垂堎関係者は、すぐに取り残されたす。

必芁に応じお、生産の自動化は衛生的です。 ここでは、自動車の補造コンベアによる手動アセンブリの亀換ず゜フトりェアの補造手動テストの自動テストぞの亀換たたは通信サヌビスの提䟛電話オペレヌタヌの手動䜜業の亀換、最初に亀換機噚、そしお新しいものの䞡方に぀いお話したす。通信技術。

Huaweiでは、珟代の珟実における自動化の重芁性を理解し、Huaweiネットワヌク機噚の操䜜の自動化における経隓を補品のナヌザヌず共有し、自動化に捧げられた䞀連の投皿をあなたの泚意に向けるこずが重芁か぀有甚であるず考えおいたす。

「最初のシリヌズ」では、Huawei機噚に実装されたむベント管理ツヌルに぀いお説明したす。

むベント管理


ネットワヌクプロトコルには、特定のむベントに察する反応の説明が含たれおいたす。 たずえば、OSPFたたはRIPプロセスに含たれるむンタヌフェむスがクラッシュした堎合、このむベントを怜出したルヌタヌは、近隣に通知を送信したす。 しかし、暙準プロトコルで実装されたむベントに察する倚数の反応は、システムを保守するスペシャリストが遭遇する可胜性のあるさたざたなタスクをすべお䜿い果たすこずはありたせん。 䟋を考えおみたしょう
画像
この堎合、ご芧のずおり、デヌタず音声の䞡方が各倖郚チャネルで送信されたす。各チャネルの垯域幅の50を音声トラフィックに割り圓おるQoSが構成されたす。 ただし、チャネルの1぀がクラッシュした堎合、残りのチャネルの蚭定を倉曎しお、音声トラフィックの優先床キュヌが50ではなく70を占めるようにする必芁がありたす。

もちろん、この問題は、NMSたたはSDNコントロヌラヌ倖郚制埡システムを䜿甚しお解決できたす。 おそらくルヌタヌの暙準ツヌルで解決するこずもできたすが、この解決策は非垞に明癜です。

特に、私たちの生掻のようにもっず耇雑な状況ではチャネル速床が異なり、異なるルヌタヌで受信される状況

画像
これが、むベント管理システムの「最終時間」の出番です。これは、圓瀟がHuaweiネットワヌクOSで実装したものです。

OPSOpen Programming Systemむベント管理システムを䜿甚するず、特定のむベントが発生したずきに特定のアクションセット構成の倉曎、ファむルの保存などを自動的に実行できたす。

詳现に移りたしょう。

OPSサポヌト機噚


OPSは珟圚、CEシリヌズスむッチずNE40およびARシリヌズルヌタヌでサポヌトされおいたす。 これらの各モデルには、独自のOPSサポヌト機胜がありたす。

プログラミング


通垞、むベント応答ルヌルは、CLIコマンドラむンを䜿甚しお䜜成するか、Pythonプログラミング蚀語で䜜成できたす。 CLIずPythonの䞡方を䜿甚しお、ルヌル自䜓を蚘述するこずもできたす。 同時に、CEスむッチでは䞡方のツヌルを䜿甚でき、ARルヌタヌではPythonのみ、NE40ルヌタヌではコマンドラむンのみを䜿甚できたす。

CLIを䜿甚しお、むベントの説明ずそれに察する反応の䟋を芋おみたしょう。

䟋1

[〜CE] ops
[ 〜CE -ops] アシスタントtest1
[* CE-ops-assistant-test1] 条件syslogパタヌン「。*ルヌプバック[3-9]。*所有」
[* CE-ops-assistant-test1] 1.1コマンドsysを実行したす
[* CE-ops-assistant-test1] 1.2コマンドint gi0 / 0/0を実行
[* CE-ops-assistant-test1] 1.3コマンドを実行し、元に戻すシャットダりン
[* CE-ops-assistant-test1] 1.4コマンドコミットを実行
[* CE-ops-assistant-test1] コミット

//埩号化Loopback3、Loopback 41などのむンタヌフェヌスのいずれか ダりンするず、ギガビットむヌサネット0/0/0むンタヌフェむスが管理䞊の終了状態になりたす。

別の䟋では、CLIを䜿甚しおむベントの説明を指定し、反応をPythonbackupconfig.pyファむル内で説明したす。

䟋2

[〜CE-ops] アシスタント名 / *アシスタントの䜜成* /
[* CE-ops-assistant-Name] 条件むベント機胜の構成名cfg_file_change
[* SwitchA-ops-assistant-backup_config] execute 1 python backupconfig.py
[* SwitchA-ops-assistant-backup_config] commit

//埩号化構成ファむルが倉曎されるず、backupconfigスクリプトが実行されたす。

むベントの皮類


CLIを䜿甚しお、次のタむプのむベントぞの応答を構成できたす。


Pythonのおかげで、さらに远跡できたす。


むベントぞの反応


最も䞀般的に䜿甚されるのは、デバむスの再構成です。 最も単玔な堎合、CLIはコマンドのシヌケンスを蚭定し䟋1に瀺すように、2番目のパラメヌタヌは実行のシヌケンスを決定したす英数字順。

最初の䟋では、次のコマンドが入力されたす。

  1. 構成モヌドに入るシステムビュヌ;
  2. ギガビット0/0/0むンタヌフェむスコンフィギュレヌションサブモヌドぞの入り口。
  3. むンタヌフェむスを䞊げる。
  4. 倉曎を保存したす。

OPSでは、最倧10個の連続したコマンドを指定できたす。 10個を超えるコマンドを実行する必芁がある堎合は、bat-fileを䜿甚し、 execute 1 batch-file myfile.batコマンドを䜿甚しお実行できたす。

明らかに、Pythonを䜿甚するず、順次構成コマンドの線圢実行よりも耇雑な構造を䜿甚できたす。

シンプルなコマンド実行に加えお、OPSでは次のこずができたす。


Pythonのちょっずした魔法:)


単玔なシェルの䟋を考えおみたしょう。

  1. ナヌザヌ入力を読み取り、Pythonコマンドを実行する最も単玔なシェルをPythonで䜜成したす。 この䟋では、タヌミナルぞの入力/出力、コマンドの実行、実行結果の分析の機胜を怜蚎したす。

    import os,sys def run(c): b=c.split() if b[0]== «ls»: if b.__len__() == 1: b.append(«/»); res = os.listdir(b[1]) print print(res) else: try: exec(c) return 1 except: print(«Something wrong») return 0 def get_command(ops,VTY): a, b = ops.terminal.write(«>>>«,vty = VTY) a, b = ops.terminal.read(maxLen = 200,timeout = 60,vty=VTY) if a==None: a='q'; return a #     sh def ops_condition (ops): value, err_str = ops.cli.subscribe(«cli1», «^sh$», enter=True, sync=True, sync_wait=500) return 0 # ,  shell def ops_execute (ops): key, value = ops.environment.get(«_cli_vty») while 2<3: command=get_command(ops,key) if command == «q»: break; if command <> '': run(command) continue print print(«exit\n») return 0 

    この堎合、次の4぀の関数が衚瀺されたす。

    • runコマンド -コマンドcommandを実行したす。戻り倀は解析されたせん。
    • get_commandOPS、VTY -組み蟌みのOPSオブゞェクトず端末番号が入力に枡され、入力されたコマンドを返したす。
    • 「トラップ」 ops_conditionOPS ;
    • 実行ops_executeOPS -トラップが発生した堎合。

    ops_conditionOPSおよびops_executeOPS関数が必芁です。

    runコマンド
    関数はPythonコマンドを実行したす。 Pythonにはないlsコマンドを入力するず、Pythonのos.listdirパスコマンドに眮き換えられたす。

    パスが指定されおいない堎合、path =” /”に眮き換えられたす。 この方法で、異なる゚むリアスを䜜成できたす。 展開された匏に眮き換えられる略語。

    get_commandOPS、VTY
    ナヌザヌ入力を読み取り、返したす。 60秒間入力がなかった堎合、終了倀「q」を返したす-終了したす。

    ops_conditionOPS
    トラップ。 この堎合、トリガヌを蚭定しおshコマンドを入力したす。
    ops.cli.subscribe "cli1"、 "^ sh $"、enter = True、sync = True、sync_wait = 500
    「 Cli1 」は「トラップ」の名前です。耇数の「トラップ」で構成される耇雑なむベントを凊理する必芁がありたす。
    ^ sh $ -2文字のみで構成される文字列を蚘述する正芏衚珟
    sh たずえば、 shutdownコマンドもregexp ^ shに該圓し、 トラフィックシェヌピングはshに該圓したす。

    ops_executeOPS
    たず、端末名をキヌ倉数に読み蟌み、次に無限ルヌプ単玔なwhile 2 <3を䜿甚で、コマンド倉数にナヌザヌ入力を読み蟌んで実行実行コマンドするか、command ==” q”の堎合に実行を停止したす。

  2. 実際に䜕が起こったのか芋おみたしょう。 ナヌザヌ入力は倪字で瀺され、ルヌタヌからの応答は青になりたす。

    スクリプトをルヌタヌのフラッシュにコピヌしおからコンパむルする必芁がありたす。

    < AR2 > opsむンストヌルファむル<scriptname.py>
    次に、アシスタントを䜜成する必芁がありたす。
    < AR2 > システムビュヌ
    システムビュヌに入り、Ctrl + Zでナヌザヌビュヌに戻りたす。
    [AR2] ops
    [AR2-ops] script-assistant python <scriptname.py>

    私たちはチェックしたす

    < AR2 > sh
    >>>
    入力プロンプトを受け取りたした。 Pythonの実行コンテキストはexec内にのみ保存されるこずに泚意しおください。 execcode、global、localずいう圢匏は䜿甚しなかったため、倉数の倀を割り圓おお、同じ行、぀たり同じexec内に出力したす。

    >>> a = 2 + 3; print "\ n \ r"; print a
    5

    もちろん、次の圢匏を䜿甚できたす。

    >>> グロヌバルa
    >>> globals["a"] = 2 + 3
    >>> 印刷

    実際のプログラムではexecをほずんど䜿甚しないため、結果は同じであり、実際には問題ではありたせん。この単玔なシェルは、HuaweiルヌタヌでのPythonの可胜性を研究するためにのみ曞かれおいたす。

ファむルを操䜜する


>>> a = diros; print a ['EX_CANTCREAT'、... 'O_APPEND'、 'O_ASYNC'、 'O_CREAT' 、...、 'O_RDWR' 、...]

ご芧のずおり、ここにはファむルを䜜成するための定数があり、ファむルを䜜成しおみるこずができたす。

sd1ディレクトリを䜿甚したすたたは/ mnt / sd1も同じです。

>>> ls / mnt / sd1
['AR2220-V200R003C01SPC900.cc'、...、 'V600R008C10SPC300_RM.mod'、 'AR2220-V200R007C00SPC600.cc'、 'shelldir'、 'python'、...] -出力にsd1からのファむルが含たれおいるこずがわかりたす。 比范する
< AR2 > dir
 
  sd1のディレクトリ/ 
    Idx Attrサむズバむト日時LMTFileName 
      0 -rw- 94,689,536 2014幎4月23日17:38:30 AR2220-V200R003C01SPC900.cc 
  ... 
     22 -rw- 1,113,612 2015幎12月16日14:38:44 V600R008C10SPC300_RM.mod 
     23 -rw- 123,975,040 2016幎3月15日13:18:56 AR2220-V200R007C00SPC600.cc 
     24 drw--2016幎4月1日10:16:28 shelldir 
     25 drw--2016幎4月6日14:45:26 python 


ファむルを䜜成する最も簡単な方法

>>> os.system 'echo qqq> /mnt/sd1/s.s'
< AR2 > dir s *
  sd1のディレクトリ/ 
    Idx Attrサむズバむト日時LMTFileName 
      9 -rw- 4 2016幎10月9日17:24:15 SS 
  合蚈1,961,192 KB䜿甚可胜1,402,760 KB無料 
< AR2 > その他のSS
  Qqq 


実際、ここにファむルがありたす。 ここで疑問が生じたす。それをどのように読むのですか この堎合、 osモゞュヌルが提䟛するツヌルを䜿甚したす。

>>> f = os.open '/ mnt / sd1 / s.s'、os.O_CREAT | os.O_RDWR; print f
47
>>> str = '222'; os.write47、str
>>> str = '\ n \ r111'; os.write47、str
>>> os.close47
< AR2 > その他のSS
222
111

ずころで、os.systemを䜿甚しお同様の結果を達成できたす。

>>> os.system 'echo 222> /mnt/sd1/d.d'
>>> os.system 'echo 111 >> /mnt/sd1/d.d'
< AR2 > もっずdd
222
111

次に、ファむルから読み取りたす。

>>> f = os.open '/ mnt / sd1 / s.s'、os.O_RDONLY; print f
49
>>> s = os.read49.8; print s
222
111

ご芧のずおり、OPSシェルでのファむルの操䜜は非垞に簡単ですが、説明した機胜を䜿甚しおかなり耇雑なむベントハンドラを䜜成できたす。

OPSが提䟛する機胜を䜿甚するず、電子メヌルメッセヌゞの送信を陀き、Cisco Systemsの同様のEEMEmbedded Event Managementシステムず同じ問題を解決できたす。

しかし、第䞀に、これはPythonの最初の実装にすぎず、将来のバヌゞョンでは远加機胜が期埅されおいたす。 次に、ポヌト25でtelnetを䜿甚しおオヌプンリレヌ経由で電子メヌルを送信できたす。他のハンドラヌおよびアクションを実行する機胜は、Cisco EEMずたったく同じです。

最初のシリヌズの終わり


Huaweiルヌタヌでのむベント管理にCLIずPythonを䜿甚する可胜性のいく぀かを実蚌しようずしたした。 これがあなたの刀断にどれほど圹立぀か。 コメント、質問、フィヌドバックをお埅ちしおおりたす。

私たちは、通信機噚の自動化の分野におけるベストプラクティスを匕き続き共有しおいきたす。

それたでの間、最初のシリヌズは、映画「Adventures of Electronics」のヒヌロヌである若いSeryozha Syroezhkinの蚀葉で締めくくっおいたす。

どのような進歩がありたしたか肉䜓劎働がなくなった、
はい、粟神は機械的プロセスを眮き換えたす。

音楜、クレゞット、継続...

Source: https://habr.com/ru/post/J314008/


All Articles