■ Batfish 公式の 2つの Docker イメージ
Batfish には公式 Docker イメージが2つあります。
- イメージ1: batfish/batfish
- batfish 本体の イメージ
- イメージ2: batfish/allinone
- batfish 本体と かんたんにお試しできる Jupyter Notebook とサンプルコンフィグ入りイメージ
以前の Batfish 概要をお伝えした記事では、簡単に試すの目的だったため、batfish/allinone を利用しましたが、イメージサイズが少々大きめです。 Batfish 本体だけで良ければ、イメージサイズが小さめの batfish/batfish のほうが適しています。
この記事では、以下の点についてまとめます。
- Docker イメージ batfish/batfish を利用したコンテナの起動
- ホスト側に pybatfish をインストールして、コンテナ内の batfish にアクセスする
概要図
■ コンテナの起動
手順は docker/batfish.md at master · batfish/docker Batfish service docker container に記載されています。
mkdir -p data docker run -v $(pwd)/data:/data -p 9997:9997 -p 9996:9996 batfish/batfish
コンテナから見た /data
には、機器構成情報をまとめたスナップショットなどのデータが保存されます。
これらのデータを、ホスト側のデータとして永続的に保持するために、-v
オプションでマウントを指定しています。
権限の都合上 --privileged
が必要な場合もあります。
■ ホストへの pybatfish のインストール
主な手順は batfish/pybatfish: Python client for Batfish に記載されています。
# pybatfish リポジトリの clone git clone https://github.com/batfish/pybatfish.git cd pybatfish # pybatfish のインストール pip install .
現状は直接 pip install pybatfish
でインストールできませんが、いずれできるようになるかもしれません。
■ 動作確認
手順は pybatfish のドキュメントの Getting started に記載されているコードを参考にします。
あらかじめ python インタープリタを起動しておきます。
各種 import
from pybatfish.client.commands import * from pybatfish.question.question import load_questions, list_questions from pybatfish.question import bfq
クエスチョンのロード
load_questions()
スナップショットの初期化
bf_init_snapshot('jupyter_notebooks/networks/example')
jupyter_notebooks/networks/example
は、pybatfish リポジトリを clone した中に含まれる、サンプルのネットワーク機器のコンフィグなどが含まれています。
単なる動作確認目的のため、こちらを利用しています。
ログ
status: TRYINGTOASSIGN .... no task information status: ASSIGNED .... Fri Oct 26 08:51:18 2018 UTC Parse configurations 0 / 13 status: ASSIGNED .... Fri Oct 26 08:51:18 2018 UTC Parse configurations 0 / 13 status: ASSIGNED .... Fri Oct 26 08:51:18 2018 UTC Parse configurations 0 / 13 status: ASSIGNED .... Fri Oct 26 08:51:18 2018 UTC Parse configurations 0 / 13 status: ASSIGNED .... Fri Oct 26 08:51:18 2018 UTC Parse configurations 2 / 13 status: ASSIGNED .... Fri Oct 26 08:51:18 2018 UTC Parse configurations 8 / 13 Elapsed 00:00:05 status: ASSIGNED .... Fri Oct 26 08:51:18 2018 UTC Reading, unpacking, and deserializing files containing 'org.batfish.datamodel.GenericConfigObject' instances 10 / 15 status: TERMINATEDNORMALLY .... Fri Oct 26 08:51:18 2018 UTC Deserializing objects of type 'org.batfish.datamodel.Configuration' from files 15 / 15 Default snapshot is now set to ss_b10132b4-75db-4544-a2ba-8dc82f1706d2 'ss_b10132b4-75db-4544-a2ba-8dc82f1706d2'
IPアドレスの取得
ip_owners_ans = bfq.ipOwners().answer()
取得したIPアドレスの表示
ip_owners_ans.frame().head()
ログ
Node VRF Interface IP Mask Active 0 as2dist2 default Loopback0 2.1.3.2 32 True 1 as2dist1 default Loopback0 2.1.3.1 32 True 2 as2dept1 default GigabitEthernet1/0 2.34.201.4 24 True 3 as2dept1 default Loopback0 2.1.1.2 32 True 4 as3border2 default GigabitEthernet1/0 3.0.2.1 24 True
as1border1 の GigabitEthernet0/0 の情報を取得、表示
iface_ans = bfq.interfaceProperties(nodes='as1border1', interfaces='GigabitEthernet0/0', properties='all-prefixes').answer() iface_ans
ログ
Interface 0 as1border1:GigabitEthernet0/0
■ まとめ
Batfish 単体のコンテナの起動と pybatfish の環境構築方法をご紹介しました。 このあとは、Python でコードを書いたり、Junypter Notebook を準備するなどして、実現したいことを実装していくことになります。