• CloudvisionのCVP Rest API

 
 
Print Friendly, PDF & Email

アリスタはあらゆる場面で適切なプログラマビリティをご提供しますが、本記事では、先だってご紹介したeAPI、EOS SDK(前編&後編)に続き、CloudVisionのAPIの一つである CVP Rest API を活用したプログラマビリティをご紹介します。 CloudVisionについて馴染みの無い方は、まずはこちらをご参照ください。

はじめに

詳細は上述のサイトの解説に譲りますが、CloudVisionはアリスタのEOSデバイスで構成されたネットワークを抽象化し、上位オーケストレーターやコントローラー等との効率的な連携、ネットワーク管理・運用・可視化を容易にするフレームワークを提供します。 CVPはCloudVisionのコンポーネントの一つですが、GUIによる様々なネットワーク・オペレーションの自動化をサポートします。加えて、本記事でご紹介するRest APIを備えていますので、前述のGUIで行えるオペレーションを、プログラムからコールすることで、外部システムと連動したインフラ全体のソフトウェア駆動によるオーケストレーションが可能となります。  

CVP Rest APIを抽象化したパッケージ cvprac の準備

Rest APIそのものは任意の言語でコール可能ですが、既にいくつかの言語用に容易にRestコールができるラッパー・パッケージをgithubに準備しています。以下にgithubサイトに置かれたそれぞれのパッケージへのリンクを掲載しておきます。なお、本記事のコーディングにはPythonを用いますので、今回は 1. のPythonのパッケージを利用します。

  1. Python
  2. Ruby
  3. Go

以下のコマンドにてAPIの実行環境に cvprac をインストールします。

admin:~ admin$ sudo pip install cvprac

これで、pythonから cvprac をインポートしてCVP Rest APIをコールする準備が整いました。  

cvpracを使った CVP Rest APIコールの例

今回の例では、Spineノードを2台、Leafノードを4台、加えてCVXノードを1台、計7台のEOSデバイスをCVPにて管理しており、そのCVPに対してRest APIをコールします。 本セクションにてサンプルコードを示します。このPythonスクリプトを実行すると、vlan 2004を追加するconfigletである CVPAPI-DEMO-VLAN が作成され、上記トポロジー中のLeafノード4台に対して、同configletが適用されます。

-- Sample Code (CvpApiExample.py)
#!/usr/bin/python

import sys
from cvprac.cvp_client import CvpClient

def cvp_process(argv):
   # CVP IP & Username & Password
   cvp_ip = '198.51.100.1'
   cvp_user = 'cvpuser'
   cvp_pass = 'cvppass'
   # Params given to CVP
   container_name = argv[0]
   configlet_name = argv[1]
   config_added = 'vlan 2004'
   # Params - others
   error_num = 0

   # Instantiate Client and connect to CVP nodes
   client = CvpClient()
   client.connect([cvp_ip], cvp_user, cvp_pass)
   # Get Container List
   cont_dict = client.api.get_containers()
   cont_name_list = cont_dict.items()[1][1]
   # Check if the specified Container is present
   i = 0
   for cont_name in cont_name_list:
     if container_name == cont_name['name']:
     i += 1

   if i >= 1 :
     print "Container exists"
   else:
     print "Error: Container does not exist"
     error_num += 1
     exit(error_num)

   # Add a Configlet given by user
   client.api.add_configlet(configlet_name, config_added)
   # Set Configlet object for applying it to the devices
   conf_info = client.api.get_configlet_by_name(configlet_name)
   # Collect all devices in the Container
   dev_dict = client.api.get_devices_in_container(container_name)
   # Apply the configlet & Execute the task generated
   j = 0
   for dev in dev_dict:
     j += 1
     dev_for_config = client.api.get_device_by_name(dev['fqdn'])
     result_config = client.api.apply_configlets_to_device('CvpApiExample', dev_for_config, [conf_info], create_task=True)
     client.api.execute_task(result_config['data']['taskIds'][0])
     # Verify if all devices have the configlet applied
     conf_info = client.api.get_configlet_by_name(configlet_name)

   if j == conf_info['netElementCount']:
       print "Configlet application completed (" + str(j) + " devices)"
   else:
      print "Error: Configlet application failed in some devices"
      error_num += 1  
      exit(error_num)

if __name__ == '__main__':
   cvp_process(sys.argv[1:])
   exit(0)

以下に上記スクリプト (CvpApiExample.py)の実行例を示します。

admin:~ admin$ ./CvpApiExample.py Leaf CVPAPI-DEMO-VLAN 2>/dev/null 
Container exists
Configlet application completed (4 devices)
admin:~ admin$

次にCVP GUIにおける、上記スクリプト実行前後のconfigletの適用状態を示します。*Leaf4ノードを例に用います。

  • 実行前

  • 実行後

実行前にはなかった新規configlet (vlan 2004追加用) が作成され、当該ノードへ適用されています。  

CVP Rest APIと外部システムの連携例

私共アリスタネットワークス自身が、前セクションでご紹介したCVP Rest APIを活用した様々なソリューションをご提供しております。その中の一つに、主にエンタープライズ市場で利用されているServiceNow社のSaaS型 ITサービスマネージメントシステムと連携し、IT変更管理を最適化されたステップで実行するソリューションがございますので、外部システムとの連携例としてご紹介します。 この連携が無い場合、システムやネットワークインフラの変更を計画・実施する際に、ServiceNow側へシステム変更の承認申請を都度発行し、しかるべき承認取得の後、承認確認を経て、変更作業を実施する流れになります。 本連携においては、CVP Rest APIとServiceNowのAPIが協調することで、上記の承認申請、承認後の変更作業の実施を自動化することが可能となります。以下に連携のフローを示します。 本ソリューションを活用することで、変更申請の漏れや誤りなどの人的ミスを予防し、ITシステムを適切に管理できます。また変更そのものを迅速に実行することで競争力の高いITシステムの維持が可能となります。  

まとめ

本記事ではCloudVisionのCVP Rest APIを用いた、アリスタEOSデバイス群の一括config変更と外部システムとのAPI連携例をご紹介しました。 CVPは設定変更のみならず、ネットワーク全体のスナップショットやローリングアップデートやロールバックなど、今後、よりスケールしこれまでの管理手法では手に負えなくなるインフラを効率的に管理する様々な機能をご提供します。 これらの機能はGUIで利用することもできますし、Rest APIでコールすることで、よりプログラマブルに、外部システム等と有機的な連携を行い、皆様のインフラ全体の包括的なオーケストレーションに役立て頂くことが出来ます。ServiceNow社との連携はその一例としてご紹介しました。 最後になりますが、 CVP Rest APIガイド及びServiceNow社との連携ソリューションに必要となるパッケージ等はチャネル(販売代理店様)経由で提供する仕組みとさせて頂いております。チャネルに関する情報については、こちらからアリスタネットワークスジャパン合同会社の営業窓口へお問い合わせください。  

参考URL

  1. cvpracのサンプル集 (Python、Ruby、Go)
  2. AristaとServiceNowの連携デモビデオ
Follow

Get every new post on this blog delivered to your Inbox.

Join other followers: