2018.01.22結局触ってみたNAPALMこれまでPythonのpexpectやNetmikoなどを触ってみて、ネットワーク機器の制御がスクリプトベースで出来るんだなぁということを学んだんですが、やっぱり気になってしょうがなくて今回napalmも触ってみました。当初は参照系の関数を使って遊んでたのですが、出力されるデータ形式がリスト変数だったりして、ちょっと理解するに時間がかかりそうな気がしたので、今回はまぁ、コンフィグを弄る関連の流れを掴んでみようということでそれを先に内容としてまとめました。やってみたこと以前、pexpectを使ってDELLスイッチ向けに実装したものを、今回napalmで実装してみました。当時はDELLスイッチが相手で、napalmでは対応してなかったのですが、今回そこはWS-C3750-24TS-Eに変わってますので、バッチリ対応しています。参考までに、pexpectで組んでいたやつの処理概要図を再掲します。NAPALMのインストールpipを使用してインストールします。napalm依存関係モジュールとして、IOS関連のnapalmモジュールもダウンロードされ、組み込まれます。実際組んだコード今回組んだコードは以下のとおりです。以下のようになっています。IOSの場合はTELNET/SSHどちらでも行けるみたいです。このあたりはNetmikoの処理を使っているようなんですが、基本的に一度NAPALMがラッパーとして動いており、定型的なパラメータは「hostname」「username」「password」の3つで、それ以外のパラメータは「optional_args」を追加し、「<パラメータ名>:<パラメータ」と言う形式で列挙していくようです。RouterOSの場合:rosと言う感じで行います(取り敢えず接続確認が取れたものだけ記載しました)。デフォルトではrosモジュールは入ってないので、pipで別途インストールする必要があります。napalm-ros書き込み処理については以下の流れで記載していくようです。これは現状IOSしか確認できていません。ドライバによって出来る処理とできない処理があるようです。■接続し、Enable状態にするdevice.open()■指定されたファイルに記載された設定をマージする(実質設定を突っ込む処理)device.load_merge_candidate(filename='<設定ファイル名>')■設定を確定するdevice.commit_config()■開いたセッションを閉じる(切断する)device.close()実際に実行してみる実際に実行してみるとこうなりました。session:OKスイッチに入って経路を確認するとこうなっていました。Vlan10末尾の行を見るとわかるのですが、デフォルトゲートウェイが切り替わっています。session:OK経路確認結果は以下のとおりです。192.168.100.4どういう仕組なのか?処理としては、ソースを見るのが手っ取り早いと思うんですが、ここにそのソースが転がっているようで、その他の処理に関連する関数なんかも確認できます。device.commit_configを外してスクリプトを実行した所、running_configにもstartup_configにも反映がなされていない経路情報にも変化がないということと、なんとかソースから読み取った部分から、恐らくこんな感じで処理が推移しているんだろうと推察しています。設定が即時反映されるIOS環境に対して、Juniperの様にCandidateとCommitの概念をもってきてるのは非常に面白いなぁと。自動設定投入スクリプトを組んだ場合に、最後の最後で「はい/いいえ」を確認させることが出来るのは面白いなぁと感じました。revertする関数やcompareする関数も準備されており、オペレーションの正確性をより確実なものにする仕組みが、少なくともIOS用ドライバには実装されているといえるんじゃないでしょうか。気になったことちなみに、コレを実装して動かしてる間に、L3スイッチの監視発報が出まして。内容は以下のとおりです。file.どうやらscpで転送したファイルのEOFがちゃんと入ってないようなメッセージなんですが、実際の所どーなんでしょうかね・・・。これ、バグなのかなぁ?コレを踏まえてやってみたいこと現状、インターネットゲートウェイは全部UTM9仮想アプライアンスが賄ってる状態です。GroupとInterlinkの2系統があるんですが、いずれもUTM9が両方を掴んでおり、これが止まると手動でデフォルトゲートウェイを切り替えないと代替経路に切り替わりません。よって、HinemosでこのUTMを監視し、それがダウンしたら検知してジョブとして上記切替処理を実行するようにすることで、UTM9メンテナンス時の手間を少し省くことが出来るのかなぁなんておもったりしておりまして。処理を作り込んで、スクリプトを一つにまとめたり、ログ出力処理などを入れたりして、使用に耐えうる形にすれば、運用に役立つんじゃないかとおもってまして。引き続き処理系統の勉強を進めていきたいなと思う次第です。あと、まだ記事にできてませんが、参照系の処理も色々叩いてみてる状況です。出力はJSON形式に近いんですが、何故か引用符が全部シングルクォートなんですよね。そのままだとブラウザでJSON形式として読めなかったり、ちょいと「?」なところがあったり。実際どのように活用されているのか、もう少し踏み込んで勉強してみようかなとおもってます。これまで完全にアレルギー状態だった、プログラム言語ですが、実際に手を出してみると、色んな方向性が見えてきて面白いなぁと感じています。やってみてよかった、Python。mininetはネットワークエミュレータです。仮想でホストとOpenFlowスイッチを構成し、その箱庭環境の中で色々な動作確認を行うことができます。デフォルトではこんなトポロジーになってます。Volumeについてちょっとあれこれ考えてみた。IPMPを組むIPMPを組んでみた!と言うわけで記事にする。今回の構成はこんな感じです。他のサーバと同じように、1つのGigabitスイッチに2つのインタフェースを接続します。2018へ行ってきました。Tokyoへ行くことにした最大の理由は、「登壇の依頼を受けたから」です。DKIMってなんじゃろ?と思う人や、名前は聞いたことがあるけどよーわからん・・と言う人いるんじゃないでしょうか。VSAはプール使用量に注意したほうが良さそうだ。昨日、こんなエラーが発生した。Backupを使ってWSUSサーバのシステムバックアップ採取をしていたのだけど、まさかの失敗となり。StoreOnce-CatalystタイトルとURLをコピーしました。