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

2024.09.12

野原 拓実 野原 拓実

目次

 

→資料ダウンロード:大規模ネットワーク自動化成功への手引書

 

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

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

NAGATOの紹介

Nagato_Logo_Horizontal

概要

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)として公開されており、誰でも利用可能です!  

開発の目的と背景

robotxnagato

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 判定が進行します。 

terminal

テストが終了した後、Robot Frameworkによってlog.htmlという、テスト結果がまとめられたファイルが生成されます。  
Robot Frameworkで、ルータから情報を取得しテストをすることができました!

loghtml

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_system

 

→資料ダウンロード:大規模ネットワーク自動化成功への手引書

まとめ

今回はNAGATOの紹介をさせていただきました。  
このツールによって、ネットワーク作業や試験の自動化の導入が簡単になり、皆さんのお役に立てればと思っています。  

また、NAGATOはコントリビューションを歓迎しています!  
興味を持っていただいた皆さんから改善や機能追加の提案をいただき、一緒にネットワーク自動化を盛り上げていきましょう。  

大規模ネットワーク自動化成功への手引書
ネットワーク自動化の際に多くの企業が直面するハードルや、
実現に向けた最適な手段をご紹介します。

 

この記事をシェア

野原 拓実 野原 拓実

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