Packet Tracerには実際にAnsibleやコントローラを動かす環境はありません。それでも「JSONを正確に読み書きする力」を鍛えるとしたら、手元にあるCLIの出力を使ってどう練習できるでしょうか?
自動化ツール自体が使えなくても、「機器の状態をJSON形式のデータとして表現する」練習は今の環境でもできます。show系コマンドの出力を、キーと値のペアに整理し直すイメージで考えてみてください。
この演習でできるようになること
show ip interface briefやshow vlan briefの実行結果を、正しい構文のJSONに書き起こせる- JSONのオブジェクト
{ }と配列[ ]の対応関係を、実機の出力から素早く読み取れる - 短いJSONのサンプルから、特定のキーの値を試験形式で正確に answerできる
使用トポロジ
ルーター1台とスイッチ1台、PC2台を接続したシンプルな構成です。ルーターには複数のインターフェースにIPアドレスを設定し(一部はno shutdown忘れで意図的にdownの状態にしておく)、スイッチには複数のVLANを作成しておきます。
準備
- Router 2911を1台、Switch 2960を1台、PC-PTを2台配置し、ストレートケーブルで接続します。
- ルーターの
GigabitEthernet0/0にIPアドレスを設定しno shutdown、GigabitEthernet0/1はあえてno shutdownを実行せずシャットダウン状態のままにしておきます。 - スイッチには
vlan 10(名前:SALES)、vlan 20(名前:DEV)を作成しておきます。 - 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/1にno shutdownを実行し、再度show ip interface briefを取り直して、JSONのstatus・protocolの値がどう変化するかを比べてみましょう。
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だったことも書き留めておく)
合格チェックリスト
show ip interface briefの出力を、構文の誤りなくJSONに書き起こせるshow vlan briefの出力も同様にJSONへ書き起こせる- オブジェクト
{ }と配列[ ]の使い分けを、自分の書いたJSONで説明できる no shutdown前後でのstatus/protocolの変化を、JSONの値の変化として表現できる- 書き起こしたJSONから、特定のキーの値を試験形式の設問で即答できる
つまずきポイント
- 文字列と数値の混同:VLAN IDのような数値はダブルクォートで囲まないのが正しいJSONですが、つい
"10"のように文字列として書いてしまいがちです。数値かどうかは元のshow出力の意味を考えて判断しましょう。 - 配列とオブジェクトの取り違え:複数の同じ形のデータ(インターフェース一覧、VLAN一覧など)は配列
[ ]でまとめるのが基本ですが、うっかりオブジェクト{ }だけで並べてしまうミスが定番です。 - 末尾カンマの付け忘れ・付けすぎ:配列やオブジェクトの要素を追加・削除した際に、カンマの数が合わなくなることがあります。要素ごとに
,区切りになっているか、最後の要素だけカンマが無いかを必ず見直しましょう。
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本前だよ。