コンテンツにスキップ

DEVICE_RUNTIME_METADATA テーブル

概要

CONFIG_DB に永続化されない、起動時に計算で組み立てられる 仮想テーブル1sonic_py_common.device_info.get_device_runtime_metadata() が hwsku / chassis / port-config 情報から生成し、sonic-cfggen の Jinja 環境に投入される。FEATURE.has_per_asic_scope などのテンプレ条件式から DEVICE_RUNTIME_METADATA['ETHERNET_PORTS_PRESENT'] のように参照される。CONFIG_DB ファイルには通常永続化されない。

データフロー (自動生成)

flowchart LR
  CDB[("CONFIG_DB<br/>DEVICE_RUNTIME_METADATA")]
  DM["sonic-cfggen"]
  CDB --> DM

凡例

CONFIG_DB から SAI までの典型経路を docs/reference/config-db-orch-map.md から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。

key 構造

CONFIG_DB テーブル形式の慣習に従うが、実体は sonic-cfggen のテンプレ変数辞書である。論理的には:

DEVICE_RUNTIME_METADATA|CHASSIS_METADATA
DEVICE_RUNTIME_METADATA|ETHERNET_PORTS_PRESENT
DEVICE_RUNTIME_METADATA|MACSEC_SUPPORTED

サブキーとフィールド

サブキー フィールド 説明
CHASSIS_METADATA module_type supervisor / linecard シャーシ環境でのみ存在。is_supervisor() の判定結果
ETHERNET_PORTS_PRESENT (直値) True/False port_config.ini がプラットフォーム配下に存在するかどうか。get_path_to_port_config_file() の結果
MACSEC_SUPPORTED (直値) True/False プラットフォーム JSON で MACsec 機能が宣言されているか

実コードでは runtime_metadata 辞書に chassis_metadata / port_metadata / macsec_support_metadata を merge して返している1

用途 (Jinja からの参照例)

"has_per_asic_scope": "{% if not DEVICE_RUNTIME_METADATA['ETHERNET_PORTS_PRESENT']
  or ('CHASSIS_METADATA' in DEVICE_RUNTIME_METADATA
       and DEVICE_RUNTIME_METADATA['CHASSIS_METADATA']['module_type'] in ['supervisor']) %}False{% else %}True{% endif %}"

(init_cfg.json.j2FEATURE テーブル展開で使用)2

値依存挙動マトリクス

ETHERNET_PORTS_PRESENT (True/False)

挙動
True port_config.ini が存在。init_cfg.json.j2 が has_per_asic_scope = "True" を生成可能
False port_config.ini なし(supervisor 等)。init_cfg.json.j2 が has_per_asic_scope = "False" を生成

CHASSIS_METADATA.module_type (supervisor/linecard)

挙動
supervisor init_cfg.json.j2 の Jinja 条件式で per-asic インスタンスを False に設定
linecard per-asic インスタンス有効として扱う
キー自体が存在しない(非 chassis) linecard 相当として扱われる('CHASSIS_METADATA' in DEVICE_RUNTIME_METADATA が False)

MACSEC_SUPPORTED (True/False)

挙動
True init_cfg.json.j2 に MACsec 関連 FEATURE エントリが含まれる
False / キーなし MACsec FEATURE エントリは生成されない

明示的な enum 制約なし。YANG スキーマなし。CONFIG_DB に永続化されない仮想テーブル。

注意点

  • YANG モジュールは存在しない (sonic-yang-models/yang-models/ 配下にスキーマなし)
  • CONFIG_DB の永続テーブルではなく、sonic-cfggen 実行時にのみ存在するメモリ上の名前空間
  • ベンダー / hwsku によりキーの有無が変わる (chassis でない箱では CHASSIS_METADATA キー自体が存在しない)

関連リファレンス

  • (関連リンクなし)

引用元

関連ページ

運用ヒント

典型値

  • CONFIG_DB に永続化されない仮想テーブル。sonic-cfggen 実行時のメモリ上に展開される。
  • サブキー: CHASSIS_METADATA (chassis のみ) / ETHERNET_PORTS_PRESENT / MACSEC_SUPPORTED

よくある誤設定

  • 手動でこのテーブルを config_db.json に書こうとしても無視される (テンプレ生成専用)。
  • chassis でない箱で CHASSIS_METADATA が存在しないことを前提に書かれていないテンプレを使うとエラー。

確認コマンド

sonic-cfggen -d -v "DEVICE_RUNTIME_METADATA"
sonic-cfggen -d -v "DEVICE_RUNTIME_METADATA['ETHERNET_PORTS_PRESENT']"

例外条件・特殊挙動

consumer 条件 挙動
init_cfg.json.j2 ETHERNET_PORTS_PRESENT = False bgp / teamd feature の初期 state を disabled に設定(j2:67,75)
init_cfg.json.j2 CHASSIS_METADATA.module_type = supervisor bgp feature を disabledhas_per_asic_scope=False に設定(j2:67,107)
init_cfg.json.j2 CHASSIS_METADATA.module_type = linecard has_global_scope=False に設定(j2:106)
init_cfg.json.j2 MACSEC_SUPPORTED = False または platform_env.conf に macsec_enabled=0 device type が SpineRouter 系でも macsec feature を disabled に設定(j2:90)
device_info.py platform_env.conf が存在しない is_macsec_supported() が 0 を返し MACSEC_SUPPORTED=False となる(device_info.py:720-721)

Evidence: sonic-buildimage files/build_templates/init_cfg.json.j2:67,75,90,106-107; src/sonic-py-common/sonic_py_common/device_info.py:720-747