【実務・中級編】Ansible NetconfとYANGモデルを用いたネットワーク機器のコンフィグ管理:マルチベンダー対応の高度な自動化術 – インフラ構成管理(IaC)活用バイブル

脱・画面スクレイピング:NETCONFとYANGで到達するネットワーク自動化の「真実」

ネットワークエンジニア諸君。未だにCLIの出力を正規表現でパースして、`expect`モジュールでガチャガチャと設定を流し込んでいないか?

もしそうなら、今すぐその手を止めてほしい。CLIベースの自動化は、ネットワーク機器のコンフィグ変更において「技術的負債」以外の何物でもない。出力形式がマイナーアップデート一つで変わる世界で、正規表現のメンテナンスに人生を費やすのはもう終わりにしよう。

今日は、Ansibleを駆使して、Cisco (IOS-XE/XR)、Juniper (Junos) といったベンダーの壁を越え、NETCONFとYANGデータモデルを用いた「アトミックで冪等な」構成管理術を伝授する。これは小手先のテクニックではなく、インフラの信頼性を一段階引き上げるための「モダンな作法」だ。

—

1. なぜNETCONF + YANGなのか?

CLIは人間が読むためのインターフェースだが、NETCONFは「機械が読み書きするためのプロトコル」だ。

  • 構造化データ: YANGモデルにより、設定がXML/JSONとして厳密に定義される。これにより、構文エラーを機器へ投入する前に検証可能になる。
  • アトミック性 (Atomic Commit): CLIの「一行ずつ流し込む」方式とは違い、設定変更を一つのトランザクションとして扱える。失敗すればロールバック。これがネットワークにおける「冪等性」の正体だ。
  • ベンダー中立性: OpenConfigモデルを採用すれば、ベンダー固有のコマンド体系を意識せず、共通のデータ構造で設定を抽象化できる。

—

2. 実践的プロジェクト構成:ベストプラクティス

チーム開発において、「誰が書いても同じ品質になる」ディレクトリ構成こそが最強だ。以下をテンプレートとして推奨する。

.
├── group_vars/
│ └── all.yml # ansible_connection: netconf などの共通設定
├── host_vars/
│ └── sw-core-01.yml # 機器個別のYANGデータモデル値
├── roles/
│ └── network_config/
│ ├── tasks/
│ │ └── main.yml # 冪等性を担保したconfig投入ロジック
│ └── templates/ # YANGモデルに基づいたXMLテンプレート
└── inventory.ini # 接続情報

必須の神プラグインと設定

Ansibleでネットワークを扱うなら、以下のコレクションは必須だ。

  • `cisco.iosxe` / `junipernetworks.junos` (公式コレクション)
  • `ansible.netcommon`: `netconf_config` モジュールを使うために必須。

設定共有化のルール:
`ansible.cfg` に以下の設定を入れ、実行時間を可視化し、パイプラインを最適化せよ。

[defaults]
実行時間の計測(ボトルネック発見の第一歩)
callback_whitelist = profile_tasks
ログ出力の統一
log_path = ./ansible.log

[persistent_connection]
タイムアウト調整(大規模NWでは必須)
connect_timeout = 60
command_timeout = 60

—

3. 実装の極意:XMLテンプレートの運用

CLIテンプレート(Jinja2)ではなく、YANGモデルに準拠したXMLテンプレートを作成する。

例:インターフェース設定のXMLテンプレート (`interface.xml.j2`)



{{ interface_name }}
{{ interface_desc }}
{{ ‘true’ if interface_enabled else ‘false’ }}

Task側の実装:

  • name: Apply Interface Configuration via NETCONF

cisco.iosxe.iosxe_netconf:
config: “{{ lookup(‘template’, ‘interface.xml.j2’) }}”
commit: yes

—

4. 現場で震えるほど役立つ「テックリードの極秘テク」

① `ansible-vault` の運用は「属性」で分ける

機密情報(パスワード等)だけでなく、「環境依存の値」と「ロジック」を分離しろ。`group_vars`には環境変数を、`host_vars`にはYANGモデルの値を記述することで、コードの再利用性が劇的に向上する。

② VS Codeの最強拡張機能

  • `YAML` (by Red Hat): JSONスキーマを読み込ませることで、YANGデータモデルの入力補完が可能になる。
  • `XML` (by Red Hat): XMLのタグ閉じ忘れや構造ミスを即座に検知する。

③ 開発スピードを上げるショートカット (VS Code)

  • `Ctrl + Shift + P` -> `Ansible: Create task` (拡張機能利用): 定型文を瞬時に生成。
  • `Alt + Shift + F`: YAML/XMLのフォーマットを一括修正。インデントのズレによるシンタックスエラーはこれで撲滅できる。

—

結論:自動化は「書く」ことではなく「設計」すること

ネットワーク自動化の失敗パターンの多くは、CLIの自動化(スクレイピング)に固執し、機器の仕様変更という「外部要因」に振り回されることにある。

NETCONFとYANGを採用するということは、「機器の内部状態をデータとして正しく定義する」というエンジニアリングの基本に立ち返るということだ。

最初はXMLを書くことに苦戦するかもしれない。しかし、一度OpenConfigモデルに馴染んでしまえば、CiscoだろうがJuniperだろうが、同じ論理でネットワークを制御できる。この「抽象化の力」こそが、君を単なるオペレーターから、次世代のインフラアーキテクトへと引き上げる鍵になるはずだ。

さあ、コードを書いて、コンソールからネットワークを支配しよう。

タイトルとURLをコピーしました