AXP(Application eXtension Platform)/AXP CLI API

バージョン 5

    AXP(Application eXtension Platform)へ戻る

     

    AXP CLI API

    AXP CLI API によって、アプリケーションがホスト上の基本 CLI サーバと対話できるようになります。

    ※ ここでは、AXP SDKのインストールパスを、/opt/AXP/sdk としています。

     

    AXP CLI API 用のファイル

    Cisco AXP SDK には、 EXEC モードコマンドまたはコンフィギュレーションモードコマンドを作成するために必要なライブラリおよびモジュールが含まれます。以下に、SDK でサポートされる言語および関連ライブラリ/ モジュールを示します。

    言語ライブラリ/ モジュール/ ヘッダー ファイル
    C/C++{SDK}/include/appreapi.h {SDK}/lib/libappreapi.so
    Java{SDK}/jar/appreapi.jar
    Python{SDK}/python2.3/AppreAPI.py
    Perl{SDK}/perl/AppreAPI.pm

     

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

     

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

    appreapi [--mode name] cmdlist [--timeout ]
    appreapi [--mode name] --file filename [--timeout ]

    show clockを実行した例

    bash-3.2# appreapi --mode exec "show clock"
    07:00:54.581 GMT Tue Oct 19 2010

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

     

     

    Pythonの例

    1. helloworldの例に従い、clisampleパッケージフォルダを作成します。
      [~]# cd /opt/AXP/apps
      [apps]# mkdir clisample
      [apps]# cd clisample
      [clisample]# mkdir -p build/bin
      [clisample]# mkdir -p build/usr/local/src
      [clisample]# mkdir -p build/third_party_rpms_repository
      [clisample]# mkdir -p package
    2. PythonをインストールするようRPMを配置します。詳細については、AXP(Application eXtension Platform)/Installing RPMsを参照してください。       
      [clisample]# cp /media/cdrom/CentOS/python-2.4.3-21.el5.i386.rpm build/third_party_rpms_repository
    3. コンソールアクセスのための設定を行います。
      [clisample]# cat <<EOT> build/bin/post-install.sh
      #!/bin/bash
      ln -s /bin/login.sh /bin/console
      EOT

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

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

      api=AppreAPI()

      retcode, response = api.Config("interface eth1")
      print retcode, response

      retcode, response = api.Exec('show run')
      print retcode, response
      EOT

      [clisample]# chmod +x build/usr/local/src/test.py
    5. パッケージを作成します。
      [clisample]# uuidgen
      a2a833dd-dfb7-49b1-9636-724f1f9a6ff1

      [clisample]# pkg_build.sh \
        --project-dir '/opt/AXP/apps/clisample/package' \
        --auth-bundle '/opt/AXP/keys/auth_bundle.sig' \
        --private-key '/opt/AXP/keys/private.key' \
        --name 'clisample' --version '1.0'  \
        --uuid 'a2a833dd-dfb7-49b1-9636-724f1f9a6ff1' \
        --source-dir '/opt/AXP/apps/clisample/build' \
        --disk-limit '100M' --memory-limit '128M' --cpu-limit '500' \
        --postinstall 'bin/post-install.sh'

      [clisample]# cp package/pkg/clisample* /var/ftp
    6. AXPへインストールします。
      AXP# software install add url ftp://192.168.71.36/clisample.1.0.pkg
    7. AXPの再起動が完了したら、consoleへ接続します。
      AXP# app-service clisample
      AXP(exec-clisample)# connect console
    8. Pythonのテストプログラムを実行します。
      bash-2.05b# cd /usr/local/src
      bash-2.05b# ./test.py

     

    プログラム解説

    1. #!/bin/python
    2. from AppreAPI import *
    3.
    4. api=AppreAPI()
    5.
    6. retcode, response = api.Config("interface eth1")
    7. print retcode, response
    8.
    9. retcode, response = api.Exec('show run')
    10. print retcode, response

     

    • 2行目 ... AppreAPIモジュールをインポートします。(ゲストOSでPYTHONPATHを確認)
    • 行目 ... コンフィギュレーションモード CLI コマンドを発行します。コマンドは、カンマ区切り複数記述することができます。
      例) api.Config("interface eth1, ip address 192.168.3.25 255.255.255.0")
    • 9行目 ... EXEC モードコマンドを発行します。

    ゲストOS上で、viで編集することができるので、その他CLIをテストしてください。

     

     

    C/C++の例

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

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

      [clisample]# chmod +x build/bin/*.sh
    3. Cのテストコードを記述します。
      [clisample]# cd build/usr/local/src/
      [src]# cat <<EOT>test.c
      #include "appreapi.h"
      int main(int argc, char** argv)
      {
              char conf[] = "interface eth1";
              AppreMessage_t msg;
              msg.size = 0;
              msg.response = NULL;
              msg.request = conf;
              int status = APPRE_FAIL;
              status = appreapi_conf(&msg);
              if (status==APPRE_OK) {
                      printf("appreapi_conf : %s\n",msg.response);
              } else {
                      printf("appreapi_conf status=%d : %s\n",status,msg.response);
              }
              free(msg.response);

              char exec[] = "show run";
              msg.size = 0;
              msg.response = NULL;
              msg.request = exec;
              status = appreapi_exec(&msg);
              if (status==APPRE_OK) {
                      printf("appreapi_exec : %s\n",msg.response);
              } else {
                      printf("appreapi_exec status=%d : %s\n",status,msg.response);
              }
              free(msg.response);

              return status;
      }
      EOT

      [src]# gcc -I/opt/AXP/sdk/include -L/opt/AXP/sdk/lib -lappreapi -o test test.c
      ※ msg.responseをnullにした場合、アプリケーションはmsg.responseを解放する必要があります。
    4. パッケージを作成します。
      [clisample]# uuidgen
      a2a833dd-dfb7-49b1-9636-724f1f9a6ff1

      [clisample]# pkg_build.sh \
        --project-dir '/opt/AXP/apps/clisample/package' \
        --auth-bundle '/opt/AXP/keys/auth_bundle.sig' \
        --private-key '/opt/AXP/keys/private.key' \
        --name 'clisample' --version '1.0'  \
        --uuid 'a2a833dd-dfb7-49b1-9636-724f1f9a6ff1' \
        --source-dir '/opt/AXP/apps/clisample/build' \
        --disk-limit '100M' --memory-limit '128M' --cpu-limit '500' \
        --postinstall 'bin/post-install.sh'

      [clisample]# cp package/pkg/clisample* /var/ftp
    5. AXPへインストールします。
      AXP# software install add url ftp://192.168.71.36/clisample.1.0.pkg
    6. AXPの再起動が完了したら、consoleへ接続します。
      AXP# app-service clisample
      AXP(exec-clisample)# connect console
    7. Cのテストプログラムを実行します。
      bash-2.05b# cd /usr/local/src
      bash-2.05b# ./test

     

     

    Perlの例

    1. helloworldの例に従い、clisampleパッケージフォルダを作成します。
      [~]# cd /opt/AXP/apps
      [apps]# mkdir clisample
      [apps]# cd clisample
      [clisample]# mkdir -p build/bin
      [clisample]# mkdir -p build/usr/local/src
      [clisample]# mkdir -p build/third_party_rpms_repository
      [clisample]# mkdir -p package
    2. PerlをインストールするようRPMを配置します。詳細については、AXP(Application eXtension Platform)/Installing RPMsを参照してください。  
    3. コンソールアクセスのための設定 を行います。
      [clisample]# cat <<EOT>build/bin/post-install.sh
      #!/bin/bash
      ln -s /bin/login.sh
      EOT

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

      [clisample]# chmod +x build/bin/*.sh
    4. Perlのテストスクリプトを記述します。
      [clisample]# cat <<EOT>build/usr/local/src/test.pl
      #!/usr/bin/perl
      use AppreAPI;

      $api = new AppreAPI::AppreAPI();
      ($val,$res) = $api->config("interface eth1");
      print "$val $res\n";

      ($val,$res) = $api->exec("show run");
      print "$val $res\n";
      EOT

      [clisample]# chmod +x build/usr/local/src/test.pl
    5. パッケージを作成します。
      [clisample]# uuidgen
      a2a833dd-dfb7-49b1-9636-724f1f9a6ff1

      [clisample]# pkg_build.sh \
        --project-dir '/opt/AXP/apps/clisample/package' \
        --auth-bundle '/opt/AXP/keys/auth_bundle.sig' \
        --private-key '/opt/AXP/keys/private.key' \
        --name 'clisample' --version '1.0'  \
        --uuid 'a2a833dd-dfb7-49b1-9636-724f1f9a6ff1' \
        --source-dir '/opt/AXP/apps/clisample/build' \
        --disk-limit '100M' --memory-limit '128M' --cpu-limit '500' \
        --postinstall 'bin/post-install.sh'

      [clisample]# cp package/pkg/clisample* /var/ftp
  • AXPへインストールします。
    AXP# software install add url ftp://192.168.71.36/clisample.1.0.pkg
  • AXPの再起動が完了したら、consoleへ接続します。
    AXP# app-service clisample
    AXP(exec-clisample)# connect console
  • Perlのテストプログラムを実行します。
    bash-2.05b# cd /usr/local/src
    bash-2.05b# ./test.pl
  •  

     

    Javaの例

    1. helloworldの例に従い、clisampleパッケージフォルダを作成します。
      [~]# cd /opt/AXP/apps
      [apps]# mkdir clisample
      [apps]# cd clisample
      [clisample]# mkdir -p build/bin
      [clisample]# mkdir -p build/usr/local/src
      [clisample]# mkdir -p build/third_party_rpms_repository
      [clisample]# mkdir -p package
    2. javaをインストールするようRPMを配置します。詳細については、AXP(Application eXtension Platform)/Installing RPMsを参照してください。  
    3. コンソールアクセスのための設定を行います。
      [clisample]# cd build/usr/local/src/
      [src]# cat <<EOT>test.java
      import com.cisco.aesop.apphosting.appreapi.*;

      public class test {

          public static void main(String[] args) {
              try {
                  int status;
                  CommonServiceImpl apiCall = new CommonServiceImpl();
                  AppreMessage msg = new AppreMessage();

                  msg.setRequest("interface eth1");
                  status = apiCall.config(msg);
                  if(AppreAPI.FAIL == status){
                      System.out.println("failure:" + msg.getResponse());
                  } else {
                          System.out.println("success:" + msg.getResponse());
                  }

                  msg.setRequest("show run");
                  status = apiCall.exec(msg);
                  if(AppreAPI.FAIL == status){
                          System.out.println("failure:" + msg.getResponse());
                  } else {
                          System.out.println("success:" + msg.getResponse());
                  }
              } catch(Exception e) {
                      System.out.println(e.getMessage());
              } finally{
                      System.out.println("App done");
              }
          }
      }
      EOT

      [src]# javac -classpath .:/opt/AXP/sdk/jar/appreapi.jar test.java
    4. パッケージを作成します。
      [clisample]# uuidgen
      a2a833dd-dfb7-49b1-9636-724f1f9a6ff1

      [clisample]# pkg_build.sh \
        --project-dir '/opt/AXP/apps/clisample/package' \
        --auth-bundle '/opt/AXP/keys/auth_bundle.sig' \
        --private-key '/opt/AXP/keys/private.key' \
        --name 'clisample' --version '1.0'  \
        --uuid 'a2a833dd-dfb7-49b1-9636-724f1f9a6ff1' \
        --source-dir '/opt/AXP/apps/clisample/build' \
        --disk-limit '100M' --memory-limit '128M' --cpu-limit '500' \
        --postinstall 'bin/post-install.sh'

      [clisample]# cp package/pkg/clisample* /var/ft
    5. AXPへインストールします。
      AXP# software install add url ftp://192.168.71.36/clisample.1.0.pkg
    6. AXPの再起動が完了したら、consoleへ接続します。
      AXP# app-service clisample
      AXP(exec-clisample)# connect console
    7. Javaのテストプログラムを実行します。
      bash-2.05b# cd /usr/local/src
      bash-2.05b# java -classpath .:/usr/lib/java/appreapi.jar test