Topics で読み物として読む
この HLD は実装詳細を含みます。機能の概念・設定・運用を読み物として読みたい場合は Topics 12 章: Multi-ASIC / VoQ / Chassis を参照。
裏取りステータス: Code-verified
sonic-utilities config/main.py L99 で DEFAULT_GOLDEN_CONFIG_DB_FILE = '/etc/sonic/golden_config_db.json' 定義、L2520 で config reload 内から config override-config-table <golden> を呼ぶ経路、L2580-2620 の override_config_table 実装で multi_asic.is_multi_asic() のとき HOST_NAMESPACE (= "localhost") キーを host CONFIG_DB に、各 namespace キーを ASIC CONFIG_DB に振り分ける処理を確認。L1548-1549 で localhost / asicN 階層への serialize、L1630-1631 で逆向きに asic_name = HOST_NAMESPACE if ns == DEFAULT_NAMESPACE else ns で各 ASIC config を取り出す経路を確認。L1917-1965 の apply_patch で --parallel で各 ASIC に並列適用、_gcu_apply_patch_from_file ベースの実装を確認。L2341-2352 で load_minigraph --override_config -p <golden_config_path> 経路、L2520 で reload 経由の override も確認(verified at: 2026-05-09)。
multi-ASIC 用 Golden Config 単一 JSON フォーマット(localhost / asic0 / asic1 ...)¶
概要¶
SONiC は従来 minigraph を設定の真実の相としており、multi-ASIC 機でも 1 ファイルの minigraph を解釈してホスト + 各 ASIC の CONFIG_DB を生成していた。将来的に minigraph は廃止され、Network Device Management (NDM) チームが生成する Golden Config が新しい真実の相となる予定1。
問題: 単一 ASIC 機の Golden Config 流通 workflow は確立しているが、multi-ASIC 用の 「1 ファイルでホスト + 全 ASIC を表現するフォーマット」 が未定義であった。本 HLD は 既存 minigraph と同じ「1 ファイル投入」運用を Golden Config でも踏襲 するため、JSON スキーマと関連 CLI の挙動を定義する1。
動作仕様¶
スキーマ¶
最上位に localhost(ホスト)と asic0, asic1, ...(各 ASIC) を key として置き、その下にこれまでの CONFIG_DB 表現を入れる1:
{
"localhost": {
"FEATURE": { ... },
"ACL_TABLE": { ... }
},
"asic0": {
"FEATURE": { ... },
"ACL_TABLE": { ... }
},
"asic1": { ... }
}
要件 (関連 CLI)¶
| CLI | 期待される multi-ASIC Golden Config 対応 |
|---|---|
config reload <file> |
Golden Config 1 ファイルを host + 全 ASIC の各 CONFIG_DB に分配ロード |
config override-config-table |
同形式での override |
show runningconfiguration all |
host / 各 ASIC を 1 つの JSON として上記フォーマットで表示 |
config apply-patch |
JSON Patch (RFC6902) を /<asic>/<table>/... パスで指定可能に |
config save |
全設定を 1 ファイル Golden Config 形式で保存 |
config reload <file>¶
新たに 単一 Golden Config ファイル での reload を追加1:
| 機能 | 単一 ASIC | multi-ASIC(既存) | multi-ASIC(追加) |
|---|---|---|---|
config reload |
/etc/sonic/config_db.json を reload |
config_db.json + config_db{N}.json を reload |
- |
config reload tmp_config_db.json |
指定単一ファイル | カンマ区切り N 個 | config reload golden_config_db.json で 1 ファイルを host + 全 ASIC に展開 |
flowchart LR
GC[golden_config_db.json] --> CLI[config reload]
CLI --> HOST_CDB[host CONFIG_DB ← golden_config.localhost]
CLI --> A0_CDB[asic0 CONFIG_DB ← golden_config.asic0]
CLI --> A1_CDB[asic1 CONFIG_DB ← golden_config.asic1]
CLI --> AN[...]
config override¶
config override-config-table の multi-ASIC 対応1(PR: sonic-utilities#2738)。例: MACSEC_PROFILE を localhost で空 {}、asic0 / asic1 で値ありとした Golden Config:
{
"localhost": { "MACSEC_PROFILE": {} },
"asic0": { "MACSEC_PROFILE": { "entry": {"k":"v"} } },
"asic1": { "MACSEC_PROFILE": { "entry": {"k":"v"} } }
}
| ノード | MACSEC_PROFILE の状態 |
|---|---|
| host | テーブル削除(空 JSON はテーブル除去を意味する) |
| asic0 | golden config の値で 完全置換 |
| asic1 | golden config の値で 完全置換 |
config apply-patch¶
JSON Patch (RFC6902) のパスに /<asic>/<table>/... を含められるようにする1:
[
{ "op": "replace", "path": "/asic1/MACSEC_PROFILE/entry/k", "value": "value" },
{ "op": "replace", "path": "/asic0/MACSEC_PROFILE/entry/k", "value": "value" }
]
各 op を host / ASIC ループで対応 CONFIG_DB に適用する。
show runningconfiguration all¶
すべての CONFIG_DB を集約して上記スキーマで表示する。
sequenceDiagram
participant U as user
participant CLI as show runningconfiguration all
participant HCDB as host CONFIG_DB
participant ACDB0 as asic0 CONFIG_DB
participant ACDB1 as asic1 CONFIG_DB
U->>CLI: 実行
CLI->>HCDB: dump
CLI->>ACDB0: dump
CLI->>ACDB1: dump
CLI->>U: { "localhost": {...}, "asic0": {...}, "asic1": {...} }
config save¶
既存挙動(N 個のファイルに分散保存)も維持しつつ、config save all_config_db.json で 1 ファイル Golden Config として保存可能1:
| 形式 | 動作 |
|---|---|
config save (multi-ASIC) |
config_db.json + config_db0.json ... |
config save tmp_*.json,tmp_*0.json,... |
カンマ区切り指定 |
config save all_config_db.json |
1 ファイル Golden Config で保存 |
設定¶
関連する CONFIG_DB¶
スキーマ自体には変更なし。各 ASIC / host の 既存 CONFIG_DB を 1 階層上で集約 するのは ファイル形式上の表現 であり、Redis インスタンス自体は別物(host 側の DB と各 ASIC namespace 側の DB)として残る1。
関連する CLI¶
| Command | 用途 |
|---|---|
config reload <golden_config.json> |
1 ファイル Golden Config を全 CONFIG_DB に展開 |
config override-config-table <file> |
Golden Config で table 単位 override |
config apply-patch <patch.json> |
JSON Patch で /<asic>/<table>/... を指定して動的更新 |
config save <out.json> |
1 ファイル Golden Config として保存 |
show runningconfiguration all |
host + 全 ASIC を Golden Config 形式で表示 |
設定例¶
# Golden Config を一発でロード
config reload /etc/sonic/golden_config_db.json
# 動的 patch
cat > /tmp/patch.json <<'EOF'
[
{"op":"replace","path":"/asic0/MACSEC_PROFILE/entry/k","value":"value"},
{"op":"replace","path":"/asic1/MACSEC_PROFILE/entry/k","value":"value"}
]
EOF
config apply-patch /tmp/patch.json
# 全 ASIC を統合した出力で保存
config save /tmp/all_config.json
制限事項¶
- 旧来の N 個のファイル運用と Golden Config 1 ファイル運用の併存 は CLI 側で受理形式を判別して処理する設計(境界条件のテストが必要)
- YANG モデルには変更を加えない1。1 階層上の
localhost/asicNはファイル表現のみ、YANG 検証は各 ASIC / host 単位で行う config overrideで 空 JSON{}は table 削除 を意味する仕様1。誤って空にすると意図せぬ削除が起きる- minigraph 廃止が前提だが、過渡期は両立する。minigraph と Golden Config が混在した場合の優先順位は別途設計
- 各 ASIC の CONFIG_DB は namespace 内 redis インスタンス。Golden Config からの分配は CLI 側で各 namespace に対応する Redis を切り替える必要
干渉する機能¶
sonic-utilitiesのconfig/show各サブコマンド: 上記すべてが multi-ASIC 用に拡張対象hostcfgd/bgpcfgd等の per-namespace daemon: ASIC namespace ごとの設定反映を担うHwProxy/ NDM の Golden Config 配信パイプライン: 入力供給側- 既存 minigraph parser: 並列に存在し、minigraph → Golden Config 移行までは両者が動く
SONiC YANG models: 変更不要1
トラブルシューティング¶
config reload golden_config_db.jsonで一部 ASIC の設定が空 → JSON のasicNキーが正しい index で並んでいるか確認config overrideで table が消える → 空 JSON{}を入れていないか確認config apply-patchのパスが効かない →/<asic>/...のパスフォーマットを使っているか確認show runningconfiguration allが host のみ → multi-ASIC 拡張版 sonic-utilities が入っているか確認
コマンド例¶
multi-ASIC / VoQ chassis の各 namespace 状態を確認する。
# multi-ASIC / VoQ chassis
show chassis modules status
show platform summary
sudo ip netns list
for ns in $(sudo ip netns list | awk '{print $1}'); do
echo "== $ns =="
sudo ip netns exec "$ns" show interfaces status | head
done
参考リンク¶
引用元¶
関連 Topics¶
参考リンク¶
本ページに関連する参照ドキュメント: