NETCONF を使用してネットワークを自動化#
このステップでは、NETCONF を使用してデバイスのネットワーク設定を管理する方法を、Python スクリプトの例を通して確認していきます。
実習:現在の設定の詳細情報を取得#
- テキスト エディタでファイル get_interface_list.py を開きます。確認すべき主な内容を順に見ていきましょう。
-
imports を確認します。 ncclient はすでに見ていますが、さらに xmltodict と xml.dom.minidom も確認します。 これらのライブラリにより、XML データでの操作が容易になります。
-
このスクリプトの目的は、ietf-interfaces モデルを使用してインターフェイスを取得することです。 リクエスト内で filter を指定しないと、NETCONF からは、すべてのデータ モデルで利用できるあらゆるものが返ってきます。 ネットワーク デバイスの面でもコードの面でも、filter を使用する方が効率的です。
-
Python で with ステートメントを使用すると、不要になったリソースを自動的に終了させるコンテキスト ハンドラが作成されます。 通常はファイルにアクセスする際に使用されますが、NETCONF 接続など、その他の接続にも使用できます。
-
接続がアクティブになったところで、次のステップとして、フィルタを含む
操作を実行します。 -
接続後、netconf_reply にデバイスからの RPC 応答が表示されます。 次の行では、XML の raw データを見やすく整えて出力しています。
-
次の行では、戻された XML の文字列を、処理しやすい Python Ordered Dictionary に変換し、データを精査してインターフェイスのリストを取得します。
-
最後に、インターフェイスの部分をループさせて、インターフェイスの名前とステータスを出力します。
-
スクリプトを閉じ、ターミナルから実行します。 python get_interface_list.py
実習:設定の追加#
- テキスト エディタでファイル add_loopback.py を開きます。 確認すべき新しい内容を順に見ていきましょう。
-
NETCONF による追加を実行するには、使用可能な YANG モデルに基づいてモデル化された希望の設定内容を持つ XML ペイロードを作成する必要があります。 下記に、ietf-interfaces モデルに基づいてインターフェイスを追加するための XML ペイロード用テンプレートを作成する例を示します。
# Create an XML configuration template for ietf-interfaces netconf_interface_template = """ <config> <interfaces xmlns="urn:ietf:params:xml:ns:yang:ietf-interfaces"> <interface> <name>{name}</name> <description>{desc}</description> <type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type"> {type} </type> <enabled>{status}</enabled> <ipv4 xmlns="urn:ietf:params:xml:ns:yang:ietf-ip"> <address> <ip>{ip_address}</ip> <netmask>{mask}</netmask> </address> </ipv4> </interface> </interfaces> </config>"""
-
次のスクリプトによって、追加すべき新しいループバック インターフェイスの詳細をユーザに尋ねます。
# Ask for the Interface Details to Add new_loopback = {} new_loopback["name"] = "Loopback" + input("What loopback number to add? ") new_loopback["desc"] = input("What description to use? ") new_loopback["type"] = IETF_INTERFACE_TYPES["loopback"] new_loopback["status"] = "true" new_loopback["ip_address"] = input("What IP address? ") new_loopback["mask"] = input("What network mask? ")
-
ここで、ユーザから提供されたデータがテンプレートに代入されます。
-
最後に、
操作が実行されます。 -
スクリプトを閉じ、ターミナルから実行します。 新しいインターフェイスの情報を求められたら、
python add_loopback.py
入力します。
実習:設定の削除#
これで、ループバックの追加が完了しました。では、それを設定から削除したい場合はどうすればいいでしょうか。
- テキスト エディタでファイル delete_loopback.py を開きます。 確認すべき新しい内容を順に見ていきましょう。
-
今度も XML ペイロードのテンプレートを使用します。ただし、今回は
の部分が operation="delete" になっている点に留意してください。 こうすることにより、オブジェクトに対する特定のアクティビティを指定できます。 -
以上です。追加する場合とほとんど変わりません。
- スクリプトを閉じ、ターミナルから
python delete_loopback.py
を実行します。 最後のステップで、追加したループバックの数を表示させます。
Warning
存在しないインターフェイスを削除しようとすると、NETCONF のエラーが表示されます。
実習:設定の保存#
変更後のネットワーク内容をスタートアップ コンフィギュレーションに保存しておいたほうがよい場合があります。 NETCONF では、各ベンダーのプラットフォームで独自のアクティビティが行えるように、ネイティブ RPC 操作をサポートしています。 IOS XE デバイスは、ネイティブ データ モデルの一部として、
- テキスト エディタでファイル save_config.py を開きます。 確認すべき新しい内容を順に見ていきましょう。
- カスタムの RPC を作成するには、ncclient パッケージから別のオブジェクトを利用します。
from ncclient import manager, xml_
と記述して、xml_ をインポートします。 -
今回は、NETCONF で
<filter>
または<config>
を作成するのではなく、モデルから RPC を明示的に呼び出します。 -
カスタム RPC を送信するのと同様に、dispatch メソッドを使用して、カスタム操作を送信します。
-
では、スクリプトを閉じ、ターミナルから
python save_config.py
を実行します。戻された応答の本文を見てください。 成功したことがはっきりと示されています。