CTCロゴ
トップ

/

記事

/

NAGATO~CTCがNW自動化のOSSツール開発してみた~

その他

公開日:2024.09.11

NAGATO~CTCがNW自動化のOSSツール開発してみた~

    NAGATO~CTCがNW自動化のOSSツール開発してみた~

    この記事をシェア

    こんにちは、ネットワークテクノロジー課の野原です。

    私たちはネットワークに関する作業やテストの自動化のために、日々いろいろな開発を行っています。

    この記事では先日リリースした、NAGATOというツールについて紹介します。

    NAGATOの紹介

    Nagato_Logo

    概要

    NAGATO: Network Automation Gears And Test Orchestrator

    NAGATOは、ネットワークの作業やテストを自動化するための機能を備えるライブラリ&ツールです。

    Pythonで実装されており、テスト自動化のフレームワークであるRobot Frameworkと連携することを意識して設計されています。

    Robot Frameworkでは、テストの処理を担う部分(ライブラリと呼びます)はPythonなどの言語でプラグラミングして実装する必要がありますが、NAGATOでは、ネットワークの作業やテストでよく行う操作をこのライブラリの形で提供します。

    たとえば、以下の操作がRobot Frameworkでできるようになります。

    • ネットワーク機器へのSSH/Telnet接続とCLIコマンドの実行

    • ネットワーク機器へのPingやSNMPポーリング

    • トラフィックジェネレーターの操作

    またNAGATOはRobot Frameworkと連携することを意識していますが、

    中身は通常のPythonのコードのため、スクリプトでもインポートし使用することができます。

    NAGATOはオープンソースソフトウェア(OSS)として公開されており、誰でも利用可能です!

    開発の目的と背景

    開発の目的と背景

    NAGATOは次の2つの価値を提供することを目的としています。

    • オープンソースで繰り返し再利用可能な自動化ツール

    • これからネットワーク自動化を始める人にとっての、作業やテストの自動化のフレームワーク

    ネットワークエンジニアが行う作業は、一般的に多大な人的・時間的リソースがかかると思います。

    たとえば障害試験や性能試験では、わずかな条件の違いで何パターンにも試験項目が広がったり、 ネットワークOSのバージョンアップをしようとすれば、リグレッションテストが発生したりと、単純作業を繰り返す場面が多く発生します。

    そういったネットワークの作業に対して、私たちはRobot Frameworkを駆使し自動化を実現させてきました。

    数々の自動化の開発をしたことで、ネットワークの作業を自動化する時のある程度の実装パターンが見えてくるようになり、 これをライブラリとして提供すれば、さまざまなプロジェクトで繰り返し再利用できるのではないかと考えました。

    そのため、これをNAGATOとしてOSSにし、どんなプロジェクトでも使えるようしました。

    私たちのナレッジをCTC社内に止めず、少しでもみなさんの自動化へと貢献できればと思っています。

    使用例

    使用イメージを掴んでもらうために、早速コードを見てみましょう。

    NAGATOは、pipコマンドでパッケージをインストールすることで使えます。

    $ pip install nagato-network

    次に、NAGATOで提供されているキーワードを使って、Robot Frameworkのテストシナリオを書いてみます。

    * Settings *
    Library OperatingSystem
    Library NAGATO.NetmikoLibrary
    Resource NAGATO/Resources/Cisco_IOS_XR.resource
    
    Suite Setup Connect &{router1} alias=router1
    Suite Teardown Disconnect All
    
    * Variables *
    &{router1} = device_type=cisco_xr
    ... host=192.168.128.128
    ... username=ntdev
    ... password=ntdev2021
    ... session_log=router1.log
    
    * Test Cases *
    01. Check Running-config
    ${expected_config} = Get File test_config.cfg
    ${running_config} = Send Command show running-config alias=router1
    Log ${running_config}
    Running Config Should Be Equal ${expected_config} alias=router1
    
    02. Check Gi0/0/0/0 is Up
    ${intf_brief} = Send Command show interface brief use_genie=${True} alias=router1
    Log ${intf_brief} formatter=repr
    
    Should Be Equal ${intf_brief}[interface][ethernet][GigabitEthernet0/0/0/0][status] up

    このテストシナリオでは、大まかに以下の順序でテストを行なっています。

    1. (セットアップ) IOS-XRのルータにログイン

    2. show running-configを実行し、事前に用意したコンフィグファイルと内容が一致することを確認

    3. show interface brief を実行し、Gi0/0/0/0 のステータスが「up」であることを確認

    4. (クリーンアップ) ルータからログアウト

    このシナリオでNAGATOは、2つのライブラリを提供しています。

    • NetmikoLibrary

    • Cisco_IOS_XR.resource

    「NetmikoLibrary」は、pythonライブラリであるNetmikoのラッパーとして、Robot Frameworkにキーワードを提供します。

    シナリオの「Connect」や「Send Command」というキーワードは、この NetmikoLibrary のものです。

    「Cisco_IOS_XR.resource」では、NetmikoLibrary のキーワードを組み合わせ、IOS-XRでよく行う操作を1つのキーワードとしてまとめています。

    シナリオの「Running Config Should Be Equal」が該当します。

    このシナリオを実行してみましょう。

    $ python -m robot -d output test.robot

    ターミナルでは、テストの PASS/FAIL 判定が進行します。

    ターミナル画面

    テストが終了した後、Robot Frameworkによってlog.htmlという、テスト結果がまとめられたファイルが生成されます。

    Robot Frameworkで、ルータから情報を取得しテストをすることができました!

    レポート画面

    NetmikoLibraryで使用しているNetmikoは、さまざまなメーカのネットワーク機器の操作をサポートしています。

    そのためNAGATOも、このNetmikoがサポートしているネットワーク機器であれば操作ができます。

    今回の使用例のテストはとても簡単なものですが、 他にもNAGATOは、SNMP Get Requestの実行や、パケットキャプチャファイルを読み込み、パケットの解析する機能などを備えており、それらを組み合わせることで様々なシチュエーションのテストを自動化することができます。

    将来の展望

    現在のNAGATOはテストシナリオで使えるライブラリの提供のみですが、順次機能を追加する予定です。

    開発の目的に書いた通り、「これからネットワーク自動化を始める人にとっての、作業やテストの自動化のフレームワーク」を目指しています。

    当ブログの過去の記事「RobotFrameworkの代替になり得るRobocorpLibraryとは」でもお伝えしている通り、NW自動化におけるフレームワークは、Robot FrameworkからRobocorp Libraryの移行を検討している状況です。

    当初はRobot Frameworkのライブラリとして設計されたこのNAGATOも、Robot Frameworkに限定しない、汎用的なPythonツールとなるように創意工夫を進めていきます。

    具体的には、以下の機能を追加を検討しています。

    • CLI以外の機器操作ライブラリ

      現在、NW機器を操作するためのライブラリはCLIのみですが、NETCONFなどの他のインターフェースのライブラリを追加します。

    • コンテナ生成ライブラリ

      ネットワークの検証や試験で必要になることが多い、SNMPやSyslog等の受信サーバをコンテナを、テストシナリオから生成できるようにします。

      さらに、キーワードを使いコンテナから容易に情報を取り出せるようにもします。

    • ネットワーク自動化プロジェクト作成

      ネットワークの作業や試験の自動化に特化した、ソースコードを管理する時のディレクトリ構成を自動で生成します。

      また、テストシナリオのソースコードの雛形も生成し、すぐにコーディングに取り組めるようにします。

    これらの機能を含め、最終的には以下のようなシステムを実現することを目指します。

    まとめ

    今回はNAGATOの紹介をさせていただきました。

    このツールによって、ネットワーク作業や試験の自動化の導入が簡単になり、皆さんのお役に立てればと思っています。

    また、NAGATOはコントリビューションを歓迎しています!

    興味を持っていただいた皆さんから改善や機能追加の提案をいただき、一緒にネットワーク自動化を盛り上げていきましょう。

    当サイトに掲載されている情報(記事、資料、動画、テンプレート等)については、その正確性および妥当性の確保に努めておりますが、ご利用に際しては、利用者ご自身の責任においてご判断ください。なお、個別の事情に応じては、専門家へのご相談を含め、適切な対応をご検討いただくことを推奨いたします。

    この記事をシェア

    執筆者情報

    野原 拓実

    2016年CTC新卒入社。ネットワークエンジニアとして数々のネットワーク構築や検証業務に携わり、現在はネットワーク・インフラの自動化エンジニアとして開発に従事している。無類のコーヒー好き。お気に入りのコーヒー豆の精製方法はナチュラル。

    Documents

    お役立ち資料

    View All