AXP(Application eXtension Platform)/IOS CLI API

バージョン 9

    AXP(Application eXtension Platform)へ戻る

     

    IOS CLI (旧IOS Service API) によって、ルータ情報にアクセスし、コンフィギュレーションモードおよび EXEC モードの Cisco IOS コマンドと同等のコマンドを使用してシステムコンフィギュレーションを変更するアプリケーションを作成できます。

     

    コンフィギュレーション

    IOS CLI API を利用するためには、Cisco IOSとCisco AXP Service Moduleの設定を行う必要があります。

    詳しくは、AXP Developerガイドの IOS CLI API を参照してください。

     

    Cisco IOS ソフトウェア内のコンフィギュレーション例

    IOS# conf t

    IOS(config)# username axpuser privilege 15 password 0 cisco

    IOS(config)# access-list 1 permit 192.168.71.0 0.0.0.255

    IOS(config)# line vty 5 15

    IOS(config-line)# login local

    IOS(config-line)# exit

    IOS(config)# sasl profile ANONYMOUS_SASL
    IOS(config-SASL-profile)# mechanism anonymous
    IOS(config-SASL-profile)# exit
    IOS(config)# ip access-list standard 1
    IOS(config-std-nacl)# 1 permit 192.168.71.0 0.0.0.255
    IOS(config-std-nacl)# exit
    IOS(config)# netconf beep listener 12345 acl 1 sasl ANONYMOUS_SASL
    IOS(config)# netconf max-sessions 16

     

    Cisco AXP Service Module 内のコンフィギュレーション例

    AXP# conf t

    AXP(config)# netconf ssh client 192.168.71.1 username axpuser password 0 cisco
    AXP(config)# netconf beep initiator 192.168.71.1 12345
    AXP(config)# netconf max-sessions 16

    192.168.71.1 は Cisco IOS ルータの IP アドレスです。

    ポート12345 は、Cisco IOS ソフトウェアおよび Cisco AXP の両方と一致するポートです。12345 という番号は 1 つの例です

    netconf beep ではなく、netconf ssh を使うようにしてください。

     

    IOS CLI API 用のファイル

    Cisco AXP SDK には、IOS CLI を使用するために必要なライブラリおよびモジュールが含まれます。以下に、SDK でサポートされる言語および関連ライブラリ/ モジュールを示します。

    言語ライブラリ/ モジュール/ ヘッダー ファイル
    C/C++{SDK}/include/iosapi.h {SDK}/lib/libiosapi.so
    Java{SDK}/jar/iosapi.jar
    python{SDK}/python2.3/iosapiPython.so, IosapiFactory.py, Iosapi.py
    Perl{SDK}/perl/Iosapi.pm

     

    1. Pythonの例
    2. C/C++の例
    3. Javaの例
    4. Perlの例

     

    コマンドラインからは、以下のiosapiコマンドを使うことができます。

    iosapi --mode [config|exec] cmdlist
    iosapi --mode config --file filename

    show clockを実行した例

    bash-3.2# iosapi --mode exec "show clock"

    16:49:23.159 JST Tue Oct 19 2010bash-3.2# echo $?
    0
    bash-3.2#

    show ip int bri | inc Giを実行した例

    bash-3.2# iosapi --mode exec "show ip int bri | inc gi"

    GigabitEthernet0/0         10.71.152.161   YES NVRAM  up                    up
    GigabitEthernet0/1         192.168.28.1    YES NVRAM  up                    up
    bash-3.2#

    show runを実行した例

    bash-3.2# iosapi --mode exec "show run"
    /var/iosapi/showlog.24445bash-3.2# echo $?
    2
    bash-3.2#cat /var/iosapi/showlog.24445

    gi0/1にdescriptionを設定した例

    bash-3.2# iosapi --mode config "interface GigabitEthernet0/1; description c3825 gi0/1" OKbash-3.2#

    これら詳細については、Developer Guide IOS CLI APIを参照してください。

     

    --mode exec で使用できるコマンドは、copy コマンド、show コマンドのみとなります。 例外として"write memory"も動作しますが、"copy runnning-config startup-config" を使用してください。

     

    Pythonの例

    1. helloworldの例に従い、iossampleパッケージフォルダを作成します。
      [~]# cd /opt/AXP/apps
      [apps]# mkdir iossample
      [apps]# cd iossample
      [iossample]# mkdir -p build/bin
      [iossample]# mkdir -p build/usr/local/src
      [iossample]# mkdir -p build/third_party_rpms_repository
      [iossample]# mkdir -p package
    2. コンソールアクセスのための設定 を行います。
      [iossample]# cat > build/bin/post-install.sh <<EOT
      #!/bin/bash
      ln -s /bin/login.sh /bin/console
      EOT

      [iossample]# cat > build/bin/login.sh <<EOT
      #!/bin/bash
      bash -login
      EOT

      [iossample]# chmod +x build/bin/*.sh
    3. Pythonのテストスクリプトを記述します。
      [iossample]# cat > build/usr/local/src/test.py <<EOT
      #!/bin/python
      import Iosapi
      import IosapiFactory

      type = "CommonService"
      request = "show run | include netconf"
      val, iosapi = IosapiFactory.getIosApi(type)
      val, response = iosapi.Exec(request)
      if val==0:
          print val,response
      else:
          print "failure",response

      request = "interface FastEthernet0/0;description here"
      val, response = iosapi.Config(request)
      if val==0:
          print val,response
      else:
          print "failure",response
      EOT

      [iossample]# chmod +x build/usr/local/src/test.py
    4. PythonをRPMからインストールする設定をおこないます。
      [iossample]# cp /media/cdrom/CentOS/python-2.4.3-21.el5.i386.rpm build/third_party_rpms_repository
    5. パッケージを作成します。
      [iossample]# uuidgen
      3f3350f8-4c5b-490e-ba95-09abfad7cd70
      [iossample]# pkg_build.sh \
        --project-dir '/opt/AXP/apps/iossample/package' \
        --auth-bundle '/opt/AXP/keys/auth_bundle.sig' \
        --private-key '/opt/AXP/keys/private.key' \
        --name 'iossample' --version '1.0' --description 'ios sample app' \
        --uuid '3f3350f8-4c5b-490e-ba95-09abfad7cd70' \
        --source-dir '/opt/AXP/apps/iossample/build' \
        --deps '8cec8ee5-54c3-4667-b62e-d4a31805d44a,all' \
        --disk-limit '100M' --memory-limit '128M' --cpu-limit '500' \
        --postinstall 'bin/post-install.sh'
      [iossample]# cp package/pkg/iossample* /var/ftp
      ※ IOS Service APIを利用するために、IOS Service API add-onを依存に設定しています。依存関係の設定については、アプリケーションに依存関係を設定を参照してください。
    6. AXPへインストールします。
      AXP# software install add url ftp://192.168.71.36/iossample.1.0.pkg
    7. AXPの再起動が完了したら、consoleへ接続します。
      AXP# app-service iossample
      AXP(exec-iossample)# connect console
    8. Pythonのテストプログラムを実行します。
      bash-3.2# cd /usr/local/src
      bash-3.2# ./test.py
      0 netconf max-sessions 16
      netconf beep listener 12345 acl 1 sasl ANONYMOUS_SASL

      0 OK
      bash-3.2#

     

     

     

    C/C++の例

    1. helloworldの例に従い、iossampleパッケージフォルダを作成します。
      [~]# cd /opt/AXP/apps
      [apps]# mkdir iossample
      [apps]# cd iossample
      [iossample]# mkdir -p build/bin
      [iossample]# mkdir -p build/usr/local/src
      [iossample]# mkdir -p package
    2. コンソールアクセスのための設定 を行います。
      [iossample]# cat > build/bin/post-install.sh <<EOT
      #!/bin/bash
      ln -s /bin/login.sh
      EOT

      [iossample]# cat > build/bin/login.sh <<EOT
      #!/bin/bash
      bash -login
      EOT

      [iossample]# chmod +x build/bin/*.sh
    3. C/C++のテストスクリプトを記述します。
      [iossample]# cd build/usr/local/src/
      [src]# cat > test.c <<EOT
      #include <stdio.h>
      #include "iosapi.h"

      int main(int argc, char* argv[]) {
          char *buf = "show run | include netconf";
          IosServiceAPI_t iosapi;
          IosapiMessage_t msg;
          msg.size = 0;
          msg.response = NULL;
          msg.request = buf;
          getIosApi("CommonService", &iosapi);
          if (iosapi.exec(&msg)==IOSAPI_OK) {
                  puts(msg.response);
          } else {
                  puts("failure");
          }

          buf = "interface FastEthernet0/0;description here";
          msg.size = 0;
          msg.response = NULL;
          msg.request = buf;
          if (iosapi.config(&msg)==IOSAPI_OK) {
                  puts(msg.response);
          } else {
                  puts("failure");
          }
          return 0;
      }
      EOT

      [src]# gcc -I/opt/AXP/sdk/include -L/opt/AXP/sdk/lib -liosapi -ldl -o test test.c
    4. パッケージを作成します。
      [iossample]# uuidgen
      3f3350f8-4c5b-490e-ba95-09abfad7cd70
      [iossample]# pkg_build.sh \
        --project-dir '/opt/AXP/apps/iossample/package' \
        --auth-bundle '/opt/AXP/keys/auth_bundle.sig' \
        --private-key '/opt/AXP/keys/private.key' \
        --name 'iossample' --version '1.0' --description 'ios sample app' \
        --uuid '3f3350f8-4c5b-490e-ba95-09abfad7cd70' \
        --source-dir '/opt/AXP/apps/iossample/build' \
        --deps 'all:8cec8ee5-54c3-4667-b62e-d4a31805d44a,all' \
        --disk-limit '100M' --memory-limit '128M' --cpu-limit '500' \
        --postinstall 'bin/post-install.sh'
      [iossample]# cp package/pkg/iossample* /var/ftp
      ※ IOS Service APIを利用するために、IOS Service API add-onを依存に設定しています。依存関係の設定については、アプリケーションに依存関係を設定を参照してください。
    5. AXPへインストールします。
      AXP# software install add url ftp://192.168.71.36/iossample.1.0.pkg
    6. AXPの再起動が完了したら、consoleへ接続します。
      AXP# app-service iossample
      AXP(exec-iossample)# connect console
    7. C/C++のテストプログラムを実行します。
      bash-3.2# cd /usr/local/src
      bash-3.2# ./test
      netconf max-sessions 16
      netconf beep listener 12345 acl 1 sasl ANONYMOUS_SASL

      OK
      bash-3.2#

     

     

     

    Perlの例

    1. helloworldの例に従い、iossampleパッケージフォルダを作成します。
      [~]# cd /opt/AXP/apps
      [apps]# mkdir iossample
      [apps]# cd iossample
      [iossample]# mkdir -p build/bin
      [iossample]# mkdir -p build/usr/local/src
      [iossample]# mkdir -p build/third_party_rpms_repository
      [iossample]# mkdir -p package
    2. コンソールアクセスのための設定 を行います。
      [iossample]# cat > build/bin/post-install.sh <<EOT
      #!/bin/bash
      ln -s /bin/login.sh
      EOT

      [iossample]# cat > build/bin/login.sh <<EOT
      #!/bin/bash
      bash -login
      EOT

      [iossample]# chmod +x build/bin/*.sh
    3. Perlのテストスクリプトを記述します。
      [iossample]# cat > build/usr/local/src/test.pl <<EOT
      #!/usr/local/bin/perl
      use lib qw(. /usr/local/lib/perl5/5.8.8/Iosapi);
      use Iosapi;

      $ios = new Iosapi::Iosapi();

      ($res,$val) = $ios->exec("show run | include netconf");
      if ($res eq 0) {
          print $val . "\n";
      } else {
          print "failure" . $val . "\n";
      }


      ($res,$val) = $ios->config("interface FastEthernet0/0;description here");
      if ($res eq 0) {
          print $val . "\n";
      } else {
          print "failure" . $val . "\n";
      }
      EOT

      [iossample]# chmod +x build/usr/local/src/test.pl
    4. PythonをRPMからインストールする設定をおこないます。
      [iossample]# cp /media/cdrom/CentOS/perl-5.8.8-10.el5.i386.rpm build/third_party_rpms_repository
    5. パッケージを作成します。
      [iossample]# uuidgen
      3f3350f8-4c5b-490e-ba95-09abfad7cd70
      [iossample]# pkg_build.sh \
        --project-dir '/opt/AXP/apps/iossample/package' \
        --auth-bundle '/opt/AXP/keys/auth_bundle.sig' \
        --private-key '/opt/AXP/keys/private.key' \
        --name 'iossample' --version '1.0' --description 'ios sample app' \
        --uuid '3f3350f8-4c5b-490e-ba95-09abfad7cd70' \
        --source-dir '/opt/AXP/apps/iossample/build' \
        --deps 'all:8cec8ee5-54c3-4667-b62e-d4a31805d44a,all:2c51c608-d07f-4842-954e-11c16304fe1e,all' \
        --disk-limit '100M' --memory-limit '128M' --cpu-limit '500' \
        --postinstall 'bin/post-install.sh'
      [iossample]# cp package/pkg/iossample* /var/ftp
      ※ IOS Service APIを利用するために、IOS Service API add-onを依存に設定しています。依存関係の設定については、アプリケーションに依存関係を設定を参照してください。
    6. AXPへインストールします。
      AXP# software install add url ftp://192.168.71.36/iossample.1.0.pkg
    7. AXPの再起動が完了したら、consoleへ接続します。
      AXP# app-service iossample
      AXP(exec-iossample)# connect console
    8. Perlのテストプログラムを実行します。
      bash-3.2# cd /usr/local/src
      bash-3.2# ./test.pl
      netconf max-sessions 16
      netconf beep listener 12345 acl 1 sasl ANONYMOUS_SASL

      OK
      bash-3.2#

     

     

     

    Javaの例

    1. helloworldの例に従い、iossampleパッケージフォルダを作成します。
      [~]# cd /opt/AXP/apps
      [apps]# mkdir iossample
      [apps]# cd iossample
      [iossample]# mkdir -p build/bin
      [iossample]# mkdir -p build/usr/local/src
      [iossample]# mkdir -p package
    2. コンソールアクセスのための設定 を行います。
      [iossample]# cat > build/bin/post-install.sh <<EOT
      #!/bin/bash
      ln -s /bin/login.sh
      EOT

      [iossample]# cat > build/bin/login.sh <<EOT
      #!/bin/bash
      bash -login
      EOT

      [iossample]# chmod +x build/bin/*.sh
    3. Javaのテストスクリプトを記述します。
      [iossample]# cd build/usr/local/src
      [src]# cat > test.java <<EOT
      import com.cisco.aesop.apphosting.iosapi.*;

      public class test {

          public static void main (String[] args) {
              int status = 0;
              IosServiceAPI iosapi = IosapiFactory.getIosApi("commonservice");
              IosapiMessage msg = new IosapiMessage();
              msg.setRequest("show run | include netconf");
              if (iosapi.exec(msg) != IosServiceAPI.FAIL ) {
                  System.out.println(msg.getResponse());
              } else {
                  System.out.println("failure");
                  System.out.println(msg.getResponse());
              }

              msg.setRequest("interface FastEthernet0/0;description here");
              if (iosapi.config(msg) != IosServiceAPI.FAIL ) {
                  System.out.println("success");
              } else {
                  System.out.println("failure");
                  System.out.println(msg.getResponse());
              }
          }
      }
      EOT

      [src]# javac -classpath .:/opt/AXP/sdk/jar/iosapi.jar test.java
    4. パッケージを作成します。
      [iossample]# uuidgen
      3f3350f8-4c5b-490e-ba95-09abfad7cd70
      [iossample]# pkg_build.sh \
        --project-dir '/opt/AXP/apps/iossample/package' \
        --auth-bundle '/opt/AXP/keys/auth_bundle.sig' \
        --private-key '/opt/AXP/keys/private.key' \
        --name 'iossample' --version '1.0' --description 'ios sample app' \
        --uuid '3f3350f8-4c5b-490e-ba95-09abfad7cd70' \
        --source-dir '/opt/AXP/apps/iossample/build' \
        --deps 'all:8cec8ee5-54c3-4667-b62e-d4a31805d44a,all' \
        --disk-limit '100M' --memory-limit '128M' --cpu-limit '500' \
        --postinstall 'bin/post-install.sh'
      [iossample]# cp package/pkg/iossample* /var/ftp
      ※ IOS Service APIを利用するために、IOS Service API add-onを依存に設定しています。依存関係の設定については、アプリケーションに依存関係を設定を参照してください。
    5. AXPへインストールします。
      AXP# software install add url ftp://192.168.71.36/iossample.1.0.pkg
    6. AXPの再起動が完了したら、consoleへ接続します。
      AXP# app-service iossample
      AXP(exec-iossample)# connect console
    7. Javaのテストプログラムを実行します。
      bash-3.2# cd /usr/local/src
      bash-3.2# java -classpath .:/usr/lib/java/iosapi.jar:/usr/lib/java/localsocket.jar test
      netconf max-sessions 16
      netconf beep listener 12345 acl 1 sasl ANONYMOUS_SASL

      OK
      bash-3.2#

     

     

    その他

    iosapiからreloadをする方法

    コマンドラインの部分で、--mode exec で使用できるコマンドは、copy コマンド、show コマンドのみであると説明しましたが、iosapiのexecモードから reload をすることはできません。reload を行う場合は、configモードで"do reload"を行います。

    bash-3.2# iosapi -mode config "do reload"