Skip to content

Python

resopnder で「 'typesystem' has no attribute 'SchemaDefinitions'」エラーを回避する

responder でアプリケーションを書いても AttributeError: module 'typesystem' has no attribute 'SchemaDefinitions' というエラーになる場合があります。 例えば以下のように pip で gunicorn や responder をインストールせずにインストールし、アプリケーションを実行した場合にエラーになるかも知れません。

Python の venv 環境を direnv で自動的に有効/無効化する

Python で venv 環境を作成した際、該当ディレクトリに移動する毎に source venv/bin/activate する必要があります。 direnv を使うことでこれを自動化することが出来ます。 direnv は現時点で Release v2.31.0 が最新ですがバイナリが登録されていない為、今回は Release v2.30.3 を利用します。 尚、今回は Ubuntu 20.04LTS 上でテストしました。

pybatfish で対象コンフィグが更新されている場合のみ、スナップショットを再作成する

batfish に同梱されているサンプルスクリプトや、インターネット上で見かけるスクリプト例は「スナップショットの有無に関わらず、スナップショットを生成する」ものが多いと思います ("例" なので、そういうものなのだと思います)。 仮に何度もスクリプトを実行し直す場合は、「コンフィグに変化が無いのであれば、毎回のスナップショット再作成は不要」という場合もあると思います。 そういった場合の実装例をメモしておきます。

例として Question には ipOwners を利用していますが、どの Question を利用してもスナップショット初期化部分の考え方は同じです。

Ubuntu 20.04 へ Python 3.9 をインストールする

以前に Ubuntu 21.04 へ Python 3.10 をインストールする というメモを書きました。 Ubuntu 20.x 系の標準リポジトリでは現時点で Python 3.10 系がリリースされていない為、Python 3.9 をインストールする手順をメモしておきます。

1
2
apt -y install python3.9 python3.9-venv python3-pip && \
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 10

venv で Python の仮想環境を作成する例は以下の通りです。

1
2
3
4
5
mkdir hello-world
cd hello-world
python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install --upgrade pip

python-keycloak で Keycloak の操作を自動化する

python-keycloak を使うと Keycloak の操作をプログラムから自動化することが出来ます。 今回は python-keycloak の基本的な使い方をメモしておきます。 検証は RockyLinux8 と Python 3.9.6 で実施しました。

Keycloak 自体の REST API ガイドは Keycloak Admin REST API にあるものの、現時点で python-keycloak のドキュメントはあまり充実しておらず、keycloak_admin.py のソースコード などを直接、読んだ方が理解が進みそうです。

ネットワーク機器の操作を自動化する scrapli の基本的な使い方

scrapli はネットワーク機器へ TELNET や SSH などを実行し、制御を自動化するのに利用出来るライブラリです。 今回は scrapli の基本的な使い方をメモしておきます。 自動化の対象は CML2 上に作成した CSR1000v としました。

  • scrapli
    • https://github.com/carlmontanari/scrapli
    • https://carlmontanari.github.io/scrapli/
    • https://developer.cisco.com/codeexchange/github/repo/carlmontanari/scrapli/