こんにちは、ネットワークテクノロジー課の野原です。
私たちはネットワークに関する作業やテストの自動化のために、日々いろいろな開発を行っています。
この記事では先日リリースした、NAGATOというツールについて紹介します。
NAGATO: Network Automation Gears And Test Orchestrator
NAGATOは、ネットワークの作業やテストを自動化するための機能を備えるライブラリ&ツールです。
Pythonで実装されており、テスト自動化のフレームワークであるRobot Frameworkと連携することを意識して設計されています。
Robot Frameworkでは、テストの処理を担う部分(ライブラリと呼びます)はPythonなどの言語でプラグラミングして実装する必要がありますが、NAGATOでは、ネットワークの作業やテストでよく行う操作をこのライブラリの形で提供します。
たとえば、以下の操作がRobot Frameworkでできるようになります。
また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
このテストシナリオでは、大まかに以下の順序でテストを行なっています。
このシナリオでNAGATOは、2つのライブラリを提供しています。
「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ツールとなるように創意工夫を進めていきます。
具体的には、以下の機能を追加を検討しています。
これらの機能を含め、最終的には以下のようなシステムを実現することを目指します。
今回はNAGATOの紹介をさせていただきました。
このツールによって、ネットワーク作業や試験の自動化の導入が簡単になり、皆さんのお役に立てればと思っています。
また、NAGATOはコントリビューションを歓迎しています!
興味を持っていただいた皆さんから改善や機能追加の提案をいただき、一緒にネットワーク自動化を盛り上げていきましょう。