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

 

 

概要

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

例として作成するサービスは 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;
    +    }
     }

 

Getting Started

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

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