• CLIの最適化

 
 
Print Friendly, PDF & Email

はじめに

運用者の皆さんと色々な場面で会話していると、下記の様な声が聞こえる時があります。

  • 取らなきゃいけないshowコマンド増えたので、手順書作り直さなければいけない
  • コマンドは取り忘れない様に指差し確認をしている
  • ある表示が一緒にされれば分かりやすいのに

そもそもCLIは人間の言葉を機械の分かる言葉に変えてくれる、ただのシェルにも関わらず、ネットワーク機器では随分重宝されている気もします。

Arista EOSでこれを改善出来るか考えてみたいと思います。

aliasコマンド

恐らく、あらゆるベンダーの機器でサポートがされているalias(別名)コマンドを使う事で、異なるベンダーの機器でも同じコマンドを実施する事が出来ます。

上手く使うと、ベンダー間の相違からは解放する事が出来るかもしれません。

vEOS1#show interfaces counters | nz
Port                 InOctets     InUcastPkts     InMcastPkts     InBcastPkts
Et1                      2574               1              18               1
Et2                      1176               0               8               0
Ma1                   6510448           62735              11           11859

Port                OutOctets    OutUcastPkts    OutMcastPkts    OutBcastPkts
Et1                  12628692               0          100204               0
Et2                   8882765               1           70105               1
Et3                   8882378               1           70102               1
Ma1                   6966638           42053            6322            2604

vEOS1(config)#alias snz show interfaces counters | nz
vEOS1(config)#end
vEOS1#snz
Port                 InOctets     InUcastPkts     InMcastPkts     InBcastPkts
Et1                      4430               1              33               1
Et2                      1347               0               9               0
Ma1                   6519326           62828              13           11859

Port                OutOctets    OutUcastPkts    OutMcastPkts    OutBcastPkts
Et1                  12628692               0          100204               0
Et2                   8884450               1           70119               1
Et3                   8884063               1           70116               1
Ma1                   6973674           42103            6322            2604

Multi-line aliasコマンド

AristaのEOSではaliasコマンドにシーケンス番号をつけ、複数実施する事が出来ます。

これにより、例えば

  • 簡単な設定ウィザートの作成
  • 指差し確認で実施していた手順書をCLIで実行する。

なんて事も出来るかもしれません。

alias Arist-Japan
   10 echo Ariasta Japan Command Start!!
   20 show ip route
   30 echo Please confirm O(OSPF)!! If you don't find please call 440!!
   40 show version
   50 echo Please write down Serial Number to the report!!
   60 ping 8.8.8.8
   70 echo If does not response then please call 440!!
   80 bash curl https://www.arista.com
   90 echo If does not connect then please call 440!!
!

上記の例では

  1. show ip routeを実施。
  2. OSPFのルートがあるか確認。もしない場合は連絡をする(440)メッセージを表示
  3. show versionを実施。
  4. シリアル番号をレポートにメモする事を表示
  5. 通信確認実施(Ping)
  6. もし問題がある場合は連絡をする(440)
  7. 通信確認実施(アプリケーションレベル)

の様な手順書をaliasを使って、実行しています。

手順が追加になった時には、シーケンスナンバーを変更し、実施するコマンドは常に変えない。

という事も実施可能です。

表示のカスタマイズ

ネットワーク運用や検証をやっていると、

  • ある表示がshowコマンドと一緒に出てくれば。
  • 単位を再計算しなければいけない

などという事があると思います。

具体的な例では、

  • QoSのシェーピングの精度が使ってるASICによっては丸められる。設定値からの机上での計算では無く、”show policy-map interface”で表示すれば…
  • インターフェースカウンターの使用帯域はbpsで表示される。実際にはそれをGbpsで会話をしているので、CLIでもそれを表示してくれれば…
  • インターネットのルーティングテーブルはプレフィックス長が分散されている。それぞれのプレフィックス長が何個あるのかを”show ip route summary”で表示してくれれば…

などが考えられると思います。

Arista EOSではCLIは実はPythonで書かれており、これをネットワーク運用者の皆さんが分かりやすい様に表示しています。

上記にあげた様な改善は既に提供されているEOS CLIでは標準で提供されていますが、実際に運用者の皆さんに使って頂いて、変更をしていた内容をフィードバックをもらい、それを標準実装したケースが多く存在しています。

[admin@vEOS2 CliPlugin]$ pwd
/usr/lib/python2.7/site-packages/CliPlugin
[admin@vEOS2 CliPlugin]$ cat TestCli.py
# Copyright (c) 2013 Arista Networks, Inc.  All rights reserved.
# Arista Networks, Inc. Confidential and Proprietary.

import BasicCli
import CliParser
from CliModel import Model

# Behaviour
def sayHello( mode ):
   print 'Hello world!'
# Rule definition
tokenHello = CliParser.KeywordRule( 'hello',
                                    helpdesc='Print "Hello world!"' )
# Command definition
BasicCli.registerShowCommand( tokenHello, sayHello )
# Plugin definition
def Plugin( entityManager ):
   # Mount Sysdb state
   pass

bashモードで/usr/lib/python2.7/site-packages/CliPluginに入ると多くの*Cli*.pyのファイルが存在します。

これらを修正することで、お好みのCLIを提供することが可能です。

上記の例ではTestCli.pyというファイルでCLIに機能を追加してみました。

* 編集した後にはFastClid-serverのプロセスをリロードさせる必要があります。

vEOS2#show ?
  PcieNt                 Display PCIe NT devices error counters
  aaa                    Show AAA values
  agent                  Show agent settings
  aliases                List all configured aliases
  arp                    ARP table
  banner                 Show system banners
  bfd                    BFD information
  bgp                    BGP information
  boot                   Boot information
---snip---
  flowcontrol            Show interface flowcontrol information
  hardware               Hardware-specific information
  hello                  Print "Hello world!"
  history                Display the session command history
  hostname               Show the system hostname
  hosts                  IP domain-name, lookup style,  nameservers and host table
vEOS2#show hello
Hello world!

Hello World!を表示するコマンドを追加してみました。

 

動画デモ

ここまで記載させて頂いた内容を行っています。

-Aliasコマンドの実施
-Multi Sequence Aliasの実施
-show helloの実施
-show janogの実施

終わりに

EOSの機能を使って手順書の実施およびCLI自身の編集を行ってみました。

日々の運用の参考にして頂ければ幸いです。

参考

Follow

Get every new post on this blog delivered to your Inbox.

Join other followers: