NSOサービステンプレート作成から実行までの流れ
サービステンプレート作成からデプロイまでの流れは下記のようになっています。LoopbackIFを新規作成するサービスという簡単な例をもとに、この流れを実際にやってみました。
- パッケージ作成
- サービスモデル(YANGファイル)の定義
- サービステンプレート(XMLファイル)の編集
- サービスモデルのコンパイル
- パッケージの読み込み
❶ パッケージの作成
packagesディレクトリ(ncsrun/packages)でncs-make-packageを実行する。
[nso@localhost ~]$ cd ncsrun/packages/
[nso@localhost packages]$ ncs-make-package --service-skeleton python-and-template add_loopback
[nso@localhost packages]$ ls
add_loopback ncs-5.5-cisco-iosxr-7.33.tar.gz
[nso@localhost packages]$ cd add_loopback/src/yang
[nso@localhost yang]$ pwd
/home/nso/ncsrun/packages/add_loopback/src/yang
[nso@localhost yang]$ ls
add_loopback.yang
[nso@localhost yang]$ vi add_loopback.yang
❷ サービスモデル(YANGファイル)の定義
/src/yang配下のadd_loopback.yangの”// replace with your own stuff here”の下にサービスパラメータを定義する。
<変更前>
// replace with your own stuff here
leaf dummy {
type inet:ipv4-address;
}
<変更後>
// replace with your own stuff here
leaf dev {
type string;
}
leaf id {
type string;
}
leaf addr {
type inet:ipv4-address;
}
leaf mask {
type inet:ipv4-address;
}
❸ サービステンプレート(XMLファイル)の編集
packages/add_loopback/templates配下のadd_loopback-template.xmlに❷で定義したパラメータをマップさせる。XMLテンプレートの原型は下記のように、NSOにて生成できる。
[nso@localhost yang]$ ncs_cli -C -u admin
admin@ncs#
admin@ncs# config t
Entering configuration mode terminal
admin@ncs(config)# devices device R3 config interface Loopback 10
admin@ncs(config-if)# ipv4 address 1.1.1.1 255.255.255.255
admin@ncs(config-if)# commit dry-run outformat xml
result-xml {
local-node {
data <devices xmlns="http://tail-f.com/ns/ncs">
<device>
<name>R3</name>
<config>
<interface xmlns="http://tail-f.com/ned/cisco-ios-xr">
<Loopback>
<id>10</id>
<ipv4>
<address>
<ip>1.1.1.1</ip>
<mask>255.255.255.255</mask>
</address>
</ipv4>
</Loopback>
</interface>
</config>
</device>
</devices>
}
}
admin@ncs(config-if)# commit dry-run outformat xml | save add_loopback_config.txt
admin@ncs(config-if)# end
Uncommitted changes found, commit them? [yes/no/CANCEL] no
admin@ncs#
admin@ncs# exit
NSOで生成したXMLテンプレートの原型 “add_loopback_config.txt” 内の変数を{/leaf}の形に編集する。
<変更前>
result-xml {
local-node {
data <devices xmlns="http://tail-f.com/ns/ncs">
<device>
<name>R3</name>
<config>
<interface xmlns="http://tail-f.com/ned/cisco-ios-xr">
<Loopback>
<id>10</id>
<ipv4>
<address>
<ip>1.1.1.1</ip>
<mask>255.255.255.255</mask>
</address>
</ipv4>
</Loopback>
</interface>
</config>
</device>
</devices>
}
}NSO
<変更後>
result-xml {
local-node {
data <devices xmlns="http://tail-f.com/ns/ncs">
<device>
<name>{/dev}</name>
<config>
<interface xmlns="http://tail-f.com/ned/cisco-ios-xr">
<Loopback>
<id>{/id}</id>
<ipv4>
<address>
<ip>{/addr}</ip>
<mask>{/mask}</mask>
</address>
</ipv4>
</Loopback>
</interface>
</config>
</device>
</devices>
}
}
packages/add_loopback/templates配下のadd_loopback-template.xmlの<devices xmlns=”http://tail-f.com/ns/ncs”>〜</devices>をXMLテンプレートの原型 “add_loopback_config.txt”内の<devices xmlns=”http://tail-f.com/ns/ncs”>〜</devices>に置き換える。
<変更前>
[nso@localhost templates]$ pwd
/home/nso/ncsrun/packages/add_loopback/templates
[nso@localhost templates]$ cat add_loopback-template.xml
<config-template xmlns="http://tail-f.com/ns/config/1.0">
<devices xmlns="http://tail-f.com/ns/ncs">
<device>
<!--
Select the devices from some data structure in the service
model. In this skeleton the devices are specified in a leaf-list.
Select all devices in that leaf-list:
-->
<name>{/device}</name>
<config>
<!--
Add device-specific parameters here.
In this skeleton the, java code sets a variable DUMMY, use it
to set something on the device e.g.:
<ip-address-on-device>{$DUMMY}</ip-address-on-device>
-->
</config>
</device>
</devices>
</config-template>
<変更後>
[nso@localhost templates]$ cat add_loopback-template.xml
<config-template xmlns="http://tail-f.com/ns/config/1.0">
<devices xmlns="http://tail-f.com/ns/ncs">
<device>
<name>R3</name>
<config>
<interface xmlns="http://tail-f.com/ned/cisco-ios-xr">
<Loopback>
<id>{/id}</id>
<ipv4>
<address>
<ip>{/addr}</ip>
<mask>{/mask}</mask>
</address>
</ipv4>
</Loopback>
</interface>
</config>
</device>
</devices>
</config-template>
❹ サービスモデルのコンパイル
/srcディレクトリでmakeを実行
[nso@localhost src]$ pwd
/home/nso/ncsrun/packages/add_loopback/src
[nso@localhost src]$ make
/home/nso/NSO-5.5/bin/ncsc `ls add_loopback-ann.yang > /dev/null 2>&1 && echo "-a add_loopback-ann.yang"` \
-c -o ../load-dir/add_loopback.fxs yang/add_loopback.yang
[nso@localhost src]$
ちなみに、もしyangにパラメータ重複があった場合は下記のようなエラーが表示されます。
[nso@localhost src]$ make
/home/nso/NSO-5.5/bin/ncsc `ls add_loopback-ann.yang > /dev/null 2>&1 && echo "-a add_loopback-ann.yang"` \
-c -o ../load-dir/add_loopback.fxs yang/add_loopback.yang
yang/add_loopback.yang:45: error: schema node 'device' already defined at yang/add_loopback.yang:38
make: *** [../load-dir/add_loopback.fxs] Error 1
[nso@localhost src]$
❺ パッケージの読み込み
package reloadし、作成したパッケージを読み込む。
[root@localhost nso]# ncs_cli -C -u admin
admin@ncs#
admin@ncs# packages reload
reload-result {
package add_loopback
result true
}
reload-result {
package cisco-iosxr-cli-7.33
result true
}
admin@ncs#
下記のようなエラーが表示された場合は、Python3がインストールされていないことが原因だったりするので、確認を行なってみてください。
admin@ncs# packages reload
reload-result {
package add_loopback
result false
info Python VM failed to start
}
reload-result {
package cisco-iosxr-cli-7.33
result true
}
サービスの作成
作成したサービスモデルを利用して、サービスの作成を行います。
admin@ncs# config terminal
Entering configuration mode terminal
admin@ncs(config)# add_loopback test
admin@ncs(config-add_loopback-test)# dev R3
admin@ncs(config-add_loopback-test)# id 10
admin@ncs(config-add_loopback-test)# addr 1.1.1.1
admin@ncs(config-add_loopback-test)# mask 255.255.255.255
admin@ncs(config-add_loopback-test)# commit dry-run outformat native
native {
device {
name R3
data interface Loopback 10
ipv4 address 1.1.1.1 255.255.255.255
no shutdown
exit
}
}
admin@ncs(config-add_loopback-test)#
admin@ncs(config-add_loopback-test)# commit
Commit complete.
admin@ncs(config-add_loopback-test)# end
admin@ncs#
実行結果
RP/0/RP0/CPU0:R3#show run int loopback 10
Tue Jul 27 15:28:58.697 UTC
interface Loopback10
ipv4 address 1.1.1.1 255.255.255.255
!
RP/0/RP0/CPU0:R3#
サービス削除をする場合は下記のように実行します。
admin@ncs# config t
Entering configuration mode terminal
admin@ncs(config)# no add_loopback test
admin@ncs(config)# commit
Commit complete.
admin@ncs(config)# end
admin@ncs#
ネットワーク自動化を基礎から体系的に学びたい方は下記の本がおすすめです。
コメント