キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 
cancel
923
閲覧回数
15
いいね!
0
コメント
Akira Iwamoto
Cisco Employee
Cisco Employee

 

 

はじめに

NETCONF対応ネットワーク機器では、使用するデバイスモデルをYang形式でダウンロード出来るように、get-schema オペレーションが実装されています。それを使用して、NSOで使用するために必要なYang ファイルを取得する方法について説明します。

  

NETCONF 対応機器との通信の仕組み

NETCONF 対応機器へ接続する際、クライアント(NSO) はその機器がどのような機器かわかりません。サーバ側(ネットワーク機器側)も、クライアント側がどのような能力を持っているか不明です。そこで、プロトコルで規定されていますように、<hello>オペレーションをお互い実施し、capability 情報の交換を行います。

 

クライアント側では、相手が送信してくる<hello> に記述された capability より、必要なデータモデルのネットワークスペース(モジュール)名を認識します。また、それを元にクライアント側で必要なモジュールをロードします。

    

 必要なモジュールは事前に用意しておく必要がありますので、<hello>で送られてくるモジュールリストについて、<get-schema> オペレーションを使用して yang をリクエストし、取得します。

実施例 - hello

ネットワーク機器から送られる<hello> を確認するため、NSO に同梱されているnetconf-console を使用します。

 

$ netconf-console --host=192.168.10.1 --port=830 --user=cisco --password=cisco --hello
<?xml version="1.0"?>
<hello xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<capabilities>
<capability>urn:ietf:params:netconf:base:1.1</capability>
<capability>urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring?deviation=cisco-xr-netconf-monitoring-deviations</capability>
<capability>urn:ietf:params:netconf:capability:candidate:1.0</capability>
<capability>urn:ietf:params:netconf:capability:rollback-on-error:1.0</capability>
<capability>urn:ietf:params:netconf:capability:validate:1.1</capability>
<capability>urn:ietf:params:netconf:capability:confirmed-commit:1.1</capability>
<capability>http://cisco.com/ns/yang/Cisco-IOS-XR-aaa-lib-cfg?module=Cisco-IOS-XR-aaa-lib-cfg&amp;revision=2015-11-09</capability>
<capability>http://cisco.com/ns/yang/Cisco-IOS-XR-aaa-locald-admin-cfg?module=Cisco-IOS-XR-aaa-locald-admin-cfg&amp;revision=2015-11-09</capability>
<capability>http://cisco.com/ns/yang/Cisco-IOS-XR-aaa-locald-cfg?module=Cisco-IOS-XR-aaa-locald-cfg&amp;revision=2015-11-09</capability>
<capability>http://cisco.com/ns/yang/Cisco-IOS-XR-aaa-locald-oper?module=Cisco-IOS-XR-aaa-locald-oper&amp;revision=2015-11-09</capability>
<capability>http://cisco.com/ns/yang/Cisco-IOS-XR-aaa-protocol-radius-cfg?module=Cisco-IOS-XR-aaa-protocol-radius-cfg&amp;revision=2015-11-09</capability>
<capability>http://cisco.com/ns/yang/Cisco-IOS-XR-aaa-protocol-radius-oper?module=Cisco-IOS-XR-aaa-protocol-radius-oper&amp;revision=2015-11-09</capability>
<capability>http://cisco.com/ns/yang/Cisco-IOS-XR-aaa-tacacs-cfg?module=Cisco-IOS-XR-aaa-tacacs-cfg&amp;revision=2015-11-09</capability>
<capability>http://cisco.com/ns/yang/Cisco-IOS-XR-aaa-tacacs-oper?module=Cisco-IOS-XR-aaa-tacacs-oper&amp;revision=2015-11-09</capability>
...

この例のネットワーク機器は、IOS-XR を使用する機器です。IOS-XR で使用するモデルのリストが取得出来ることがわかります。

 

capability 一つを例に見てみます。

 <capability>http://cisco.com/ns/yang/Cisco-IOS-XR-aaa-lib-cfg?module=Cisco-IOS-XR-aaa-lib-cfg&amp;revision=2015-11-09</capability>

  

こちらの出力からは、

namespace: http://cisco.com/ns/yang/Cisco-IOS-XR-aaa-lib-cfg

module: Cisco-IOS-XR-aaa-lib-cfg

revision: 2015-11-09

が使用されていることがわかりました。

実施例 - get-schema

 

では、Cisco-IOS-XR-aaa-lib-cfg モジュールを機器から取得してみましょう。

 

$ netconf-console --host=192.168.10.1 --port=830 --user=cisco --password=cisco --get-schema=Cisco-IOS-XR-aaa-lib-cfg
<?xml version="1.0"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="1">
<data xmlns="urn:ietf:params:xml:ns:yang:ietf-netconf-monitoring">module Cisco-IOS-XR-aaa-lib-cfg {

/*** NAMESPACE / PREFIX DEFINITION ***/

namespace "http://cisco.com/ns/yang/Cisco-IOS-XR-aaa-lib-cfg";


prefix "aaa-lib-cfg";

/*** LINKAGE (IMPORTS / INCLUDES) ***/

import Cisco-IOS-XR-types { prefix "xr"; }
...
</data></rpc-reply>

NETCONF オペレーションに対する返答ですので、XML でエンコードされていて、/rpc-reply/data パスにYangが含まれていることがわかります。この Yang ファイルを Cisco-IOS-XR-aaa-lib-cfg.yang として保存すれば、このモジュールについて取得完了です。

シェルスクリプトでまとめて取得

これらを踏まえて、順に全てのモジュールをダウンロードするスクリプトを作成してみます。

 

hello から取得したモジュール一覧を配列とし、それぞれ取得し保存しています。

また、ファイル中にinclude文でsub-module が読み込まれていますので、それらも取得しています。

 

HOST=192.168.10.1
PORT=830
USER=cisco
PASS=cisco

modules=$(netconf-console --host=$HOST --port=$PORT --user=$USER --password=$PASS --hello | grep cisco.com | sed "s#.*http://cisco.com/ns/yang/.*?module=\(.*\)&amp.*#\1#")
for module in $modules
do
echo -n "$module ..."
netconf-console --host=$HOST --port=$PORT --user=$USER --password=$PASS --get-schema=$module | xmllint --xpath "/*[local-name()='rpc-reply']/*[local-name()='data']/text()" - > $module.yang;
echo "downloaded"
done

submodules=$(grep -h -e '^[ ]*include.*[ ]*{' *.yang | sed "s/.*include \(.*\) {/\1/")
for submodule in $submodules
do
if [ ! -e $submodule.yang ]; then
echo -n "$submodule ..."
netconf-console --host=$HOST --port=$PORT --user=$USER --password=$PASS --get-schema=$submodule | xmllint --xpath "/*[local-name()='rpc-reply']/*[local-name()='data']/text()" - > $submodule.yang;
echo "downloaded"
fi
done

 

Pioneer ツール

NETCONF 機器から必要な yang ファイルを取得し、コンパイルを行うPioneer ツールがあります。

https://github.com/NSO-developer/pioneer

これを使用すると、デバイス登録後に簡単に取得出来ます。

 

NSO の通常のパッケージとなっていますので、clone、make したあと、packages ディレクトリに配置してください。packages reload によって有効化も必要です。

 

デバイスの登録

admin@ncs# show running-config devices device iosxr
devices device iosxr
address 10.70.74.233
port 830
authgroup cisco
device-type netconf
state admin-state unlocked
!
admin@ncs#

 

必要な yang の確認 (fetch-list)

 

admin@ncs# devices device iosxr pioneer yang fetch-list
Retrieving module list from device
Device supports netconf-monitoring

Found out the names for a total of 348 modules
hello message: 212
netconf-monitoring subtree: 348
netconf-monitoring xpath: 0
Marked module Cisco-IOS-XR-ipv6-io-oper for download
Marked module Cisco-IOS-XR-es-acl-cfg for download
Marked module Cisco-IOS-XR-aaa-protocol-radius-oper-sub1 for download
Marked module Cisco-IOS-XR-lib-keychain-cfg for download
Marked module Cisco-IOS-XR-ip-rib-ipv4-oper for download
...
Marked module Cisco-IOS-XR-ipv4-ospf-oper-sub2 for download
message Marked 348 modules for download, skipped 0
yang-directory /tmp/download/iosxr
admin@ncs#

Yang のダウンロード

 

admin@ncs# devices device iosxr pioneer yang download
Downloading 348 modules to /tmp/download/iosxr
1/348 Downloading module bgp-multiprotocol -- succeeded
2/348 Downloading module bgp-operational -- succeeded
3/348 Downloading module bgp-policy -- succeeded
4/348 Downloading module bgp-types -- succeeded
5/348 Downloading module bgp -- succeeded
6/348 Downloading module Cisco-IOS-XR-aaa-lib-cf
...
345/348 Downloading module openconfig-mpls -- succeeded
346/348 Downloading module openconfig-types -- succeeded
347/348 Downloading module policy-types -- succeeded
348/348 Downloading module routing-policy -- succeeded
message Downloaded 346 modules, failed 2, skipped 0:
Downloaded bgp-multiprotocol
Downloaded bgp-operational
Downloaded bgp-policy
Downloaded bgp-types
Downloaded bgp
...
Downloaded openconfig-mpls-ldp
Downloaded openconfig-mpls-rsvp
Downloaded openconfig-mpls-sr
Downloaded openconfig-mpls-types
Downloaded openconfig-mpls
Downloaded openconfig-types
Downloaded policy-types
Downloaded routing-policy

yang-directory /tmp/download/iosxr
admin@ncs#

NETCONF NED のビルド

admin@ncs# devices device iosxr pioneer yang build-netconf-ned
Starting build of 346 YANG modules, this may take some time
...
Build complete. Run install-netconf-ned, then run 'packages reload' to use the package
ned-directory /tmp/packages/iosxr

NETCONF NED のインストール、及び有効化

ビルドが完了しましたら、NSO のランタイムディレクトリ中の packages ディレクトリに配置し、packareを読み込みし直す必要があります。

 

admin@ncs# devices device my-netconf-device pioneer yang install-netconf-ned
admin@ncs# packages reload

完了

NED の作成は完了しました。Pioneer パッケージを使用して、上記まで実施した場合は、既にリモートデバイスを使用できる状態です。

 

参考情報

Pioneer

https://github.com/NSO-developer/pioneer

Getting Started

検索バーにキーワード、フレーズ、または質問を入力し、お探しのものを見つけましょう

シスコ コミュニティをいち早く使いこなしていただけるよう役立つリンクをまとめました。みなさんのジャーニーがより良いものとなるようお手伝いします