ネットワークエンジニアの皆さん、こんにちは。
「またCLIでログインして、`show run`して、`conf t`で流し込む……」。そんな作業に、そろそろ限界を感じていませんか?
もし、あなたが「自動化=スクリプトでCLIを叩くこと」だと思っているなら、今日でその考えは捨ててください。それはただの「手作業の代行」であり、本質的な自動化ではありません。
今日は、ネットワークインフラを「コードとして定義し、理想の状態へ強制的に収束させる」ための極限の技術、NETCONFとYANGモデルを用いたAnsibleによる構成管理について解説します。これをマスターすれば、マルチベンダー環境の運用が「作業」から「設計」へと昇華されますよ。
—
1. なぜ「CLI自動化」ではダメなのか?
従来のCLI自動化(ExpectやNetmikoなど)は、人間がコマンドを打つ動作をシミュレートするだけです。
- 冪等性(べきとうせい)がない: 何度実行しても同じ状態になる保証がありません。
- アトミック(原子性)がない: 設定の途中でエラーが起きると、中途半端な状態で止まります。
- 解析が困難: 機器が吐き出すテキストを人間が読む前提のフォーマットから、必要な値だけを抜き出す(パースする)のは、苦痛以外の何物でもありません。
そこで登場するのが、NETCONFとYANGです。
- NETCONF: ネットワーク機器を制御するための「標準化されたAPI」。SSH上でXML/JSONをやり取りします。
- YANG: 機器の設定モデルを定義する「言語」。どのベンダーでも「インターフェース」は「インターフェース」として定義されます。
つまり、これらを使えば「ベンダーに関係なく、共通のデータ構造でネットワークを操れる」のです。
—
2. 環境構築:最小にして最強のセットアップ
Ansibleでこれを行うには、ベンダーごとのコレクションが必要です。ここではCiscoとJuniperを例に、必要な環境を整えます。
必要なライブラリのインストール
まず、Ansible本体と、NETCONFを扱うためのライブラリをインストールします。
NETCONFライブラリとAnsible本体をインストール
pip install ncclient ansible
Cisco IOS XE用とJuniper Junos用のコレクションを追加
ansible-galaxy collection install cisco.iosxe junipernetworks.junos
インベントリファイルの設計(ここが重要)
接続情報をハードコードしてはいけません。`group_vars`で接続方法を一元管理するのがプロの作法です。
group_vars/all.yml
ansible_connection: netconf
ansible_netconf_port: 830
ansible_network_os: cisco.iosxe.iosxe # もしくは junipernetworks.junos.junos
ansible_user: your_username
ansible_password: your_password
—
3. HelloWorld:アトミックな設定変更
さあ、実際に設定を流し込んでみましょう。「HelloWorld」として、ループバックインターフェースを定義します。
`site.yml`
—
- name: ネットワーク設定の自動化(NETCONF版)
hosts: routers
tasks:
- name: ループバックインターフェースの構成
cisco.iosxe.iosxe_config:
# YANGモデルに基づいた構造化データとして設定を記述
config:
- interface: Loopback100
description: “Managed by Ansible”
enabled: true
ipv4:
address: 192.168.100.1
mask: 255.255.255.255
state: merged # 既存設定を壊さず、差分だけを適用(これが冪等性)
このコードの「凄み」
1. `state: merged`: これにより、Ansibleは「現在の状態」と「定義された状態」を比較し、必要な変更だけを適用します。既に設定済みなら、何もせず終了します。これが冪等性です。
2. XMLを意識させない: AnsibleのコレクションがYANGモデルを解釈し、背後で適切なXMLに変換してくれます。私たちは「あるべき姿」を書くだけです。
—
4. 次のステップへ:プロの思考
ここから先は、以下の技術を深掘りしてみてください。
- Diffモードの活用: `–check` オプションを付けて実行し、適用前に「何が変わるか」を可視化する習慣をつけましょう。
- YANGモデルの探索: 機器に対して `get-schema` を行い、その機器がサポートするYANGモデルを確認してください。これが見えれば、その機器の「すべて」を制御できるようになります。
- CI/CDへの組み込み: GitHubにプッシュされた瞬間に検証環境へ展開し、テストが通ったら本番へ……というパイプラインを構築しましょう。
最後に:あなたへのメッセージ
ネットワーク自動化は、単なる「スクリプト書き」ではありません。「インフラという巨大なシステムをコードで支配する」という、非常にクリエイティブで知的な冒険です。
最初は難しく感じるかもしれません。しかし、CLIから脱却したその先には、夜中に呼び出されることのない、安定した、そして何より「あなたが設計した通りに動く」美しいネットワークが待っています。
さあ、今日から「コード」でネットワークを語りましょう。応援しています!