脱・画面スクレイピング: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`)
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だろうが、同じ論理でネットワークを制御できる。この「抽象化の力」こそが、君を単なるオペレーターから、次世代のインフラアーキテクトへと引き上げる鍵になるはずだ。
さあ、コードを書いて、コンソールからネットワークを支配しよう。