らくがきちょう

なんとなく

Cisco ACI で APIC / Leaf / Spine の CLI から利用可能なコマンドを一覧表示する

以前に 「show cli list」で利用可能コマンド一覧を出力する というメモを書きました。 ACI 4.2(2e) がリリースされていたので、このバージョンで APIC / Leaf / Spine の show cli list 出力を取得し直したのですが、コマンドを全部貼り付けたところ、はてなブログ上で「行数が多すぎる」とエラーになってしまいました… 全コマンドを貼り付けるのは断念し、改めて show cli list に関する注意書きだけ追記しておきます。 ACI バージョンには依存しない内容になっていると思いますが、CLI の実行例は ACI 4.2(2e) 上で取得しました。

注意点

show cli list コマンドの注意点について記載しておきます。

iShell 上では実行できない (vsh 上から実行する)

Cisco ACI ではログインシェルとして iShell と呼ばれるプログラムが起動します。 ですが (APIC では実行可能なのですが) Leaf / Spine では iShell から show cli list コマンドが存在せず、実行することが出来ません。 その為、Leaf / Spine の場合は従来の NX-OS でも利用されている vsh (Virtual Shell) を起動し、その後に vsh 上から show cli list を実行します。 vsh 実行時は User should use ibash infrastructure as this will be deprecated. と表示され、以前は iBash と呼んでいたような気がするのですが、現在はドキュメントを調べても (iBash では無く) iShell と書かれているものしか見かけないように思います (定かなことは分かりません…)。

leaf# vsh
Cisco iNX-OS Debug Shell
This shell should only be used for internal commands and exists
for legacy reasons. User should use ibash infrastructure as this
will be deprecated.
leaf# show cli list
MODE exec
clear radius session
clear radius-server statistics <str>
clear hardware internal fc-mac statistics all-ports
clear hardware internal fc-mac statistics port <int-r:1-48>
    ・
    ・
    ・

iShell からの間接的実行も出来ない

vsh のコマンドであっても、iShell 上から vsh 起動時に -c オプションでコマンドを指定することで間接的に実行することが出来ます (iShell 上から vsh を起動し、指定コマンドを実行したら vsh を終了して iShell に戻ります。 従って vsh を起動 / 終了する時間、待たされます)。

leaf# vsh -c "show clock"
14:36:42.050 JST Sat Oct 12 2019

しかし、なぜか show cli list は iShell 上から vsh へ -c オプション経由で起動してもエラーになるわけでも無いのですが実行結果が表示されません。

leaf# vsh -c "show cli list"
leaf#

その為、show cli list を実行する際は「vsh を起動する」「show cli list を実行する」という、2 ステップを経る必要があります。

terminal length を指定すると結果が表示されない

Leaf / Spine の場合、vsh 上からでなければ show cli list を実行出来ないことは上述の通りです。 更にもう一点、vsh 上であっても terminal length が指定された状態だとなぜか show cli list の実行結果が表示されません。 下記ではゼロを指定していますが、他の数字を指定しても同様のようです。

leaf# terminal length 0
leaf# show cli list
leaf#

この現象は「vsh を起動しなおす (exit してから再度、vsh する) か、もしくは terminal no length で設定を打ち消せば解消します。

leaf# terminal no length
leaf# show cli list
MODE exec
clear radius session
clear radius-server statistics <str>
clear hardware internal fc-mac statistics all-ports
clear hardware internal fc-mac statistics port <int-r:1-48>
    ・
    ・
    ・

no-more を指定すると実行結果が表示されない

terminal length が指定されていると実行結果が表示されない、と上述しましたが、terminal length 指定の有無と関係なく、no-more を指定するとやはり実行結果が表示されません。

leaf# show cli list | no-more
leaf#

show cli list の使いどころ

show cli list は「全部眺める」というより、例えば「何かのコマンドを探す」という用途に向いています。

例.1 - APIC でエンドポイントの削除関連コマンドを探してみる

例えば「APIC 上からエンドポイントテーブルを削除するコマンドを探したい」というケースを考えます。 この場合は「削除 → clear」「エンドポイントテーブル → endpoint」とあたりをつけて以下のように grep でキーワードを絞って検索してみます。

apic# show cli list | grep clear | grep endpoint
[    ][cmd ] [exec            ]  clear endpoints leaf <WORD> tenant <WORD> bridge-domain   <WORD>
[    ][cmd ] [exec            ]  clear endpoints leaf <WORD> tenant <WORD> bridge-domain <WORD> vlan   <NUMBER>
[    ][cmd ] [exec            ]  clear endpoints leaf <WORD> tenant <WORD> vrf   <WORD>

「それっぽいコマンド」が見つかれば、本当にそのコマンドで当初の目的が達成出来そうか、コマンドリファレンス等を調査します。 ちなみに Leaf 上からエンドポイント情報を削除したい場合は Cisco ACI で EndPoint を手動でクリアする に記載のある通り、以下のコマンド等で削除可能です。

該当 Leaf 上の全エンドポイント情報を削除したい場合
leaf# vsh -c "clear system internal epm endpoint all"
該当 Leaf 上の特定エンドポイント情報のみ、削除したい場合
leaf# vsh -c "clear system internal epm endpoint key vrf TENANT-A:VRF-A ip 192.168.1.1"

例.2 - Leaf 上で OSPF 関連のクリアコマンドを探してみる

次は Leaf 上で OSPF 関連のクリアコマンドを探してみます。 先ほどのケースと同様に「clear」「ospf」といった具合でキーワードのあたりをつけ、grep で絞り込んでいきます。

leaf# show cli list | grep clear | grep ospf
clear ip ospf <str> statistics vrf <str>
clear ip ospf <str> statistics vrf <str>
clear ip ospf <str> statistics vrf all
clear ip ospf <str> statistics
clear ip ospf <str> traffic <if> vrf <str>
clear ip ospf <str> traffic <if> vrf <str>
clear ip ospf <str> traffic <if> vrf all
    ・
    ・
    ・

コマンドの数 (目安)

APIC / Leaf / Spine 各々の、凡そのコマンド数は下記の通りです (※ 正確な値ではありません)。

対象 コマンド数 確認したシェル
APIC 4,651 iShell
Leaf 45,628 vsh
Spine 36,694 vsh

確認方法は以下の通りです。 単純に wc で行数を数えているだけなのですが、コマンドによっては「1 コマンドだが、複数行の出力」になるものがある為、「1 コマンド ≠ 1 行」である為、上記の数字は「凡その概算」ということになります。

apic# show cli list | wc -l
4651

leaf# show cli list | wc lines
45628

spine# show cli list | wc lines
36694