シスコサポートコミュニティ
キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

NSO: テンプレートベースのサービス作成手順

 

 

概要

このドキュメントではテンプレートを使用したサービスの作成方法を紹介します。  

例として作成するサービスは IOS デバイスに loopback インタフェースを作成するだけの簡単なものです。

 

1. サービススケルトンの作成 

NSO がインストールされた Linux の CLI で ncs-make-package コマンドを使用して、テンプレートベースのサービススケルトンを作成します。サービス名は loopback とします。

サービススケルトンはサービス作成に必要となる一連のディレクトリ・ファイルを集めたサービスパッケージの雛型のようなものです。

$ ncs-make-package --service-skeleton template-based loopback

$ tree loopback/

loopback/
|-- load-dir
|-- package-meta-data.xml
|-- src
|   |-- Makefile
|   |-- java
|   |   `-- src
|   |        `-- com
|   |             `-- example
|   |                  `-- loopback
|   |                       `-- namespaces
|   `-- yang
|        `-- loopback.yang
|-- templates
|   `-- loopback-template.xml
`-- test
     |-- Makefile
     `-- internal
          |-- Makefile
          `-- lux
               |-- Makefile
               `-- basic
                    |-- Makefile
                    `-- run.lux

 

2. サンプルコンフィグの作成

サービスを使ってデバイスに設定するコンフィグを、 NSO の CLI から手動で設定して XML で表示します。この XML は以降の手順でテンプレートファイルを作成するために使用します。

admin@ncs(config)# devices device ios0 config ios:interface Loopback 1
admin@ncs(config-if)# ip address 10.0.0.1 255.255.255.255
admin@ncs(config-if)#
admin@ncs(config-if)# top
admin@ncs(config)#
admin@ncs(config)# commit dry-run outformat xml
result-xml <devices xmlns="http://tail-f.com/ns/ncs">
                  <device>
                    <name>ios0</name>
                    <config>
                      <interface xmlns="urn:ios">
                        <Loopback>
                          <name>1</name>
                          <ip>
                            <address>
                              <primary>
                                <address>10.0.0.1</address>
                                <mask>255.255.255.255</mask>
                              </primary>
                            </address>
                          </ip>
                        </Loopback>
                      </interface>
                    </config>
                  </device>
                </devices>

admin@ncs(config)# abort

 

3. サービステンプレート(XMLファイル)の作成

loopback/templates 配下にあるテンプレートファイルを編集していきます。

loopback-template.xml 編集前

$ cat loopback/templates/loopback-template.xml

<config-template xmlns="http://tail-f.com/ns/config/1.0" servicepoint="loopback">
  <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 service has a leaf "dummy"; use that
          to set something on the device e.g.:
          <ip-address-on-device>{/dummy}</ip-address-on-device>
      -->
      </config>
    </device>
  </devices>
</config-template>

 

<config>...</config> の間に手順2で作成したXMLをペーストします。

loopback サービスを使って設定する値を {変数名} で置き換えます。
この例ではループバックインタフェース名を {loopback-intf}、
IPアドレスを {ip-address} に置き換えています。サブネットマスクは一律 255.255.255.255 にすることとし、変数化していません。

loopback-template.xml 編集後

<config-template xmlns="http://tail-f.com/ns/config/1.0" servicepoint="loopback">
  <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>
          <interface xmlns="urn:ios">
            <Loopback>
              <name>{loopback-intf}</name>
              <ip>
                <address>
                  <primary>
                    <address>{ip-address}</address>
                    <mask>255.255.255.255</mask>
                  </primary>
                </address>
              </ip>
            </Loopback>
          </interface>
        </config>
    </device>
  </devices>
</config-template>

 

4. サービスモデル(YANGファイル)の作成

loopback/src/yang 配下にあるサービスモデルを編集していきます。

loopback.yang 編集前

$ cat loopback/src/yang/loopback.yang
module loopback {
  namespace "http://com/example/loopback";
  prefix loopback;

  import ietf-inet-types {
    prefix inet;
  }
  import tailf-ncs {
    prefix ncs;
  }

  augment /ncs:services {
    list loopback {
      key name;

      uses ncs:service-data;
      ncs:servicepoint "loopback";

      leaf name {
        type string;
      }

      // may replace this with other ways of refering to the devices.
      leaf-list device {
        type leafref {
          path "/ncs:devices/ncs:device/ncs:name";
        }
      }

      // replace with your own stuff here
      leaf dummy {
        type inet:ipv4-address;
      }
    }
  }
}

 

loopback.yang 編集後

module loopback {
  namespace "http://com/example/loopback";
  prefix loopback;

  import ietf-inet-types { prefix inet; }
  import tailf-ncs { prefix ncs; }
  import tailf-common { prefix tailf; }

  augment /ncs:services {
    list loopback {
      key servicename;
      unique "device loopback-intf";
      unique "ip-address";

      uses ncs:service-data;
      ncs:servicepoint "loopback";

      leaf servicename {
        tailf:info "Service Instance Name";
        type string;
      }

      leaf device {
        tailf:info "Router name";
        mandatory true;
        type leafref {
          path "/ncs:devices/ncs:device/ncs:name";
        }
      }

      leaf loopback-intf {
        tailf:info "Loopback Interface Number from 100 to 199";
        mandatory true;
        type uint32 {
          range "100..199";
        }
      }

      leaf ip-address {
        tailf:info "Valid IP range from 10.100.x.x to 10.199.x.x";
        mandatory true;
        type inet:ipv4-address {
          pattern "10\.1[0-9][0-9]\.[0-9]+\.[0-9]+";
        }
      }
    }
  }
}

 

5. コンパイル、サービスのデプロイ

Makefile が配置されている loopback/src ディレクトリに移動して make をコマンドを実行し、サービスコードをコンパイルします。

$ cd loopback/src/

$ make

/home/hkakehas/ncs/bin/ncsc `ls loopback-ann.yang > /dev/null 2>&1 && echo "-a loopback-ann.yang"` \

                      --yangpath yang -c -o ../load-dir/loopback.fxs yang/loopback.yang

 

 

作成したサービスのディレクトリへのリンクを、NSO のランタイムディレクトリの packages ディレクトリ配下に作成します。

$ ln -s ~/loopback ncs-run/packages/

 

最後に NSO の CLI から package reload コマンドを実行して、作成したパッケージを NSO にロードします。

$ ncs_cli -u admin -C

admin connected from .....
admin@ncs# packages reload

>>> System upgrade is starting.
>>> Sessions in configure mode must exit to operational mode.
>>> No configuration changes can be performed until upgrade has completed.
>>> System upgrade has completed successfully.
reload-result {
    package cisco-ios
    result true
}
reload-result {
    package loopback
    result true
}

 

動作確認

admin@ncs(config)# services loopback 1
Value for 'device' [ios0]: ios0
Value for 'loopback-intf' (<unsignedInt, 100 .. 199>): 100
Value for 'ip-address' (<IPv4 address>): 10.100.1.1
admin@ncs(config-loopback-1)# commit dry-run
cli  devices {
         device ios0 {
             config {
                 ios:interface {
    +                Loopback 100 {
    +                    ip {
    +                        address {
    +                            primary {
    +                                address 10.100.1.1;
    +                                mask 255.255.255.255;
    +                            }
    +                        }
    +                    }
    +                }
                 }
             }
         }
     }
     services {
    +    loopback 1 {
    +        device ios0;
    +        loopback-intf 100;
    +        ip-address 10.100.1.1;
    +    }
     }

 

バージョン履歴
改訂番号
5/5
最終更新:
‎09-20-2017 10:58 AM
更新者:
 
ラベル(1)