2017年04月14日

Brocade VDX NOS 7.0 は Python が動く!

はてなブックマークに登録

KLab では物理のサーバインフラを複数システム運用していますが、最近そのうちの1つでネットワークスイッチのリプレースを実施しようとしています。新たに導入するスイッチは Brocade 社の VDX6740 なのですが、このスイッチの OS である NOS 7.0 では、なんとスイッチ上で Python を動かすことができます。ということで少し触ってみました。

とりあえず触ってみる

使い方は、 UNIX の shell から Python を使うのと同じ感覚です。まず、通常通りスイッチに ssh などでログインします。

$ ssh -l admin vdx-switch


Welcome to the Brocade Network Operating System Software
admin connected from 192.168.0.10 using ssh on sw01
sw01#
この状態で VDX の CLI コマンドを入力するのと同様に、pythonと入力すれば、python が対話モードで起動します。
sw01# python
Python 3.3.2 (default, Apr 28 2016, 15:57:52)
[GCC 4.3.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
見て分かるように、バージョンは 3.3.2 です(ちょっと古いですね…)。

探索

普段 Python のスクリプトを利用するのと同様に python コマンドの引数にスクリプトファイル名や -m でモジュール名を指定すれば、対話モードを起動するのではなく、指定した Python スクリプトを動かすこともできます。

sw01# python -m pydoc
pydoc - the Python documentation tool

pydoc ...
Show text documentation on something. may be the name of a
Python keyword, topic, function, module, or package, or a dotted
reference to a class or function within a module or module in a
package. If contains a '/', it is used as the path to a
Python source file to document. If name is 'keywords', 'topics',
or 'modules', a listing of these things is displayed.
(略)

ライブラリ類はどうなっているのか、 python -m pydoc modulesの結果を整形したものを、Linux OS にインストールされていた同じバージョン 3.3.2 の Python のものと比べてみました。比較対象の Python 環境は概ね素に近い環境のはずです(ちょっと余計なものが見えてますが…)。左が VDX のもので、右が Linux のものになります。

2d1
< CLI
25a25
> _dbm
29a30
> _gdbm
36a38
> _lzma
103d104
< curl
137a139
> idlelib
147a150
> lib2to3
192d194
< pycurl
196d197
< pythonStarup
203d203
< requests
252a253,254
> turtle
> turtledemo
254a257
> unittest
1つめの CLI は、Pythonスクリプトから VDX の CLI コマンドを発行するためのライブラリです。それ以外では HTTP 関連のライブラリが追加されているようです…

さすがに setuptoolspip は入ってないので VDX の Python 環境内から新規パッケージを追加するのは無理そうですが、標準ライブラリの範囲内であればひと通り使えそうです。

ユーティリティの作成

ということで、早速ちょっとしたスクリプトを作ってみました。こちらで公開しています。

diff.py

スイッチの運用をする上で、同じ設定を複数のポートに施すことはよくありますが、本当に同じ設定になっているのか、という確認を CLI 上で行うには、人間の目で頑張ってチェックするしかなく、機械的行うにはスイッチの外に show コマンドの結果などをもっていって行う必要があります。しかし、毎回スイッチ上でのコマンドの実行結果を手元にコピーして比較するのは面倒でした。

Pythonの標準ライブラリには difflib があるので、diffコマンドぽいものを作ってみました。スイッチ上のファイル同士や引数に渡されたコマンド列の実行結果を使ってdiffを取ります。詳しい使い方は github にある README.mdを見て下さい。

sample__port_parse_and_compose.py

こちらは別に作ったスクリプトの、コマンド引数の解析部分を抜き出したものです。スクリプトに対して操作するスイッチのポート番号を指定するための引数を解析する argparse コードとチェック用関数、VDXスタイルのポート番号表現を組み立てる関数が入っています。VDX用のスクリプトを作成される際に活用できそうでしたら、作成されるスクリプトの目的に合うように修正しつつ、お使いください。

ykktsm at 16:29│Comments(0)TrackBack(0)network | 開発

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
Blog内検索
Archives
このブログについて
DSASとは、KLab が構築し運用しているコンテンツサービス用のLinuxベースのインフラです。現在5ヶ所のデータセンタにて構築し、運用していますが、我々はDSASをより使いやすく、より安全に、そしてより省力で運用できることを目指して、日々改良に勤しんでいます。
このブログでは、そんな DSAS で使っている技術の紹介や、実験してみた結果の報告、トラブルに巻き込まれた時の経験談など、広く深く、色々な話題を織りまぜて紹介していきたいと思います。
最新コメント