STAGE 06 / 自動化とSDN

PT演習 6-2:show出力をJSONに書き起こす読み取り演習

考えてみよう

Packet Tracerには実際にAnsibleやコントローラを動かす環境はありません。それでも「JSONを正確に読み書きする力」を鍛えるとしたら、手元にあるCLIの出力を使ってどう練習できるでしょうか?

自動化ツール自体が使えなくても、「機器の状態をJSON形式のデータとして表現する」練習は今の環境でもできます。show系コマンドの出力を、キーと値のペアに整理し直すイメージで考えてみてください。

この演習でできるようになること

使用トポロジ

ルーター1台とスイッチ1台、PC2台を接続したシンプルな構成です。ルーターには複数のインターフェースにIPアドレスを設定し(一部はno shutdown忘れで意図的にdownの状態にしておく)、スイッチには複数のVLANを作成しておきます。

show ip interface briefの実行結果と、それを書き起こしたJSONのテキストファイルを並べて見比べている画面
show ip interface briefの実行結果と、それを書き起こしたJSONのテキストファイルを並べて見比べている画面

準備

  1. Router 2911を1台、Switch 2960を1台、PC-PTを2台配置し、ストレートケーブルで接続します。
  2. ルーターのGigabitEthernet0/0にIPアドレスを設定しno shutdownGigabitEthernet0/1はあえてno shutdownを実行せずシャットダウン状態のままにしておきます。
  3. スイッチにはvlan 10(名前:SALES)、vlan 20(名前:DEV)を作成しておきます。
  4. Packet Tracer上のテキストエディタ(あるいは手元のメモ帳)を使い、書き起こしたJSONを記録できるようにしておきます。

手順

まずルーターで実際のインターフェース状態を確認します。

Router# show ip interface brief
Interface              IP-Address      OK? Method Status                Protocol
GigabitEthernet0/0      192.168.1.1     YES manual up                    up
GigabitEthernet0/1      192.168.2.1     YES manual administratively down down

この出力を、次のようなJSON形式に手で書き起こします。「インターフェース名」「IPアドレス」「ステータス」「プロトコル」をキーとし、複数のインターフェースを配列にまとめるのがポイントです。

{
  "interfaces": [
    {
      "name": "GigabitEthernet0/0",
      "ip_address": "192.168.1.1",
      "status": "up",
      "protocol": "up"
    },
    {
      "name": "GigabitEthernet0/1",
      "ip_address": "192.168.2.1",
      "status": "administratively down",
      "protocol": "down"
    }
  ]
}

続いて、スイッチのVLAN情報も同じ要領で書き起こします。

Switch# show vlan brief
VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Fa0/3, Fa0/4
10   SALES                            active    Fa0/1
20   DEV                              active    Fa0/2

{
  "vlans": [
    { "id": 1, "name": "default", "status": "active" },
    { "id": 10, "name": "SALES", "status": "active" },
    { "id": 20, "name": "DEV", "status": "active" }
  ]
}

書き起こしが終わったら、GigabitEthernet0/1no shutdownを実行し、再度show ip interface briefを取り直して、JSONのstatusprotocolの値がどう変化するかを比べてみましょう。

Router(config)# interface GigabitEthernet0/1
Router(config-if)# no shutdown

確認

書き起こしたJSONが正しい構文になっているか、次の観点でセルフチェックします。

さらに、次のような「読み取り問題」を自分自身に出題し、書き起こしたJSONから即答できるか確認します。

Q. vlansの2番目の要素のnameは?
A. SALES
Q. interfacesの1番目の要素のstatusは?
A. up(no shutdown実行前はGi0/1がadministratively downだったことも書き留めておく)

合格チェックリスト

つまずきポイント

CCNA試験のJSON問題は、実際にコマンドを打たせるのではなく「短いJSONのサンプルを見せて、特定のキーの値を答えさせる」形式がほとんどです。この演習のように、見慣れたshow出力を自分の手でJSONに変換しておくと、初見のJSONに対しても「これはshow ip interface briefのデータ構造に似ている」と当たりをつけやすくなります。オブジェクト{ }とキー・値のペア、配列[ ]と要素の順序、この2つの対応関係さえ揺るがなければ、どんなに長いJSONでも慌てず読み解けます。

確認問題

次のJSONで、interfaces の2番目の要素の protocol は何でしょう。 ``json { "interfaces": [ { "name": "Gi0/0", "status": "up", "protocol": "up" }, { "name": "Gi0/1", "status": "administratively down", "protocol": "down" } ] } ``

答えを見る

答えは down です。interfacesは配列で、1番目の要素がGi0/0(status: up, protocol: up)、2番目の要素がGi0/1(status: administratively down, protocol: down)です。括弧の対応関係を目で追いながら、何番目の要素かを正確に数えることが大切です。

ゆみちゃん
ゆみ

Packet Tracerでは自動化ツールそのものは動かせないけど、show出力をJSONに書き起こすこの練習、地味に効くよ。括弧の対応関係を自分の手で書いて確認しておくと、試験本番で初見のJSONが出ても動じなくなるからね。次はSTAGE06の自動化と運用ドリル、総仕上げの1本前だよ。