Memo Log

PANTO MAIMU 's Personal Blog

Python Markdownを使ってみよう

Jupyter Notebookを使って運用する際、運用対象のホスト名称やIPアドレスを変数に定義して記述すると、実行手順を記述したNotebookの再利用がやりやすくなります。
この際、変数に定義した値がMarkdownにも使えると、ホスト名称などをMarkdown形式で記述した部分も、記述を変更することなく再利用することができるようになります。

そんな用途に使えるのが、Jupyter NotebookのextensionにあるPython Markdownです :-)

Python Markdownの説明は、この動画を観るとよくわかると思います。

IPython NB extension PythonMarkdown


今日は、このPython Markdownを有効にする方法などを書いてみようと思います。

Python Markdownの有効化

最初は、extensionにあるPython Markdownを有効にする方法です。

まず、Jupyter Notebookのホーム画面のNbextensionsを選択してください。
選択すると、下の画面のようにextensionを有効/無効にする画面になります。

f:id:PANTOMAIMU:20180402214930p:plain
Nbextensions
この画面にある、Python Markdownチェックボックスを選択すると、Python Markdownが使えるようになります。

Python Markdownの使用例

Notebookを作る際、運用対象のホスト名称やIPアドレスを変数に定義して、その変数の値をNotebookのコマンド実行セルに使用することで、Notebookの再利用性が上がったり、Notebookのメンテナンスがやりやすくなります。
たとえばこんな感じです。

f:id:PANTOMAIMU:20180402210135p:plain
変数を使ったNotebookの例
まず一番最初のセルに、変数にしたいホスト名称やIPアドレスの定義をします。
この例では、こんな感じに、検証対象のホスト名称と、疎通確認先のIPアドレスを定義しています。

host_name='dev01'
cent_dev_ip='10.0.1.1'

Markdownの記述の中で変数の中身を表示したい場合は、以下のように{{ }} で変数を囲みます。

検証ノード({{host_name}})の動作確認

このように記述すると、Python Markdownが変数の値を、Markdownとして出力してくれるようになります。

セルの中のコマンドで変数を使う場合は、以下のように変数名の先頭に$を付けると、セルの中で変数の値に展開されます。

!ansible  -b -m shell -a 'ping -c 3 $cent_dev_ip ' $host_name

こんな感じで、変数を使ったNotebookを実行してみた結果が、以下の画面になります。

f:id:PANTOMAIMU:20180402210131p:plain
変数を使ったNotebookの実行結果

Markdownのところを見ると、変数の値が展開されて「検証ノード(dev01)の動作確認」となっています。
Python Markdownが使えると、この例のように、変数名を指定することでMarkdownに変数値を出力できるようになるので、実際の変数値をコピペして記述するという、冗長でミスの増える作業から開放されます :-)

セルでのコマンド実行結果も、変数の値が展開されています。

dev01 | SUCCESS | rc=0 >>
PING 10.0.1.1 (10.0.1.1) 56(84) bytes of data.
64 bytes from 10.0.1.1: icmp_seq=1 ttl=64 time=0.313 ms
64 bytes from 10.0.1.1: icmp_seq=2 ttl=64 time=0.307 ms
64 bytes from 10.0.1.1: icmp_seq=3 ttl=64 time=0.270 ms

--- 10.0.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.270/0.296/0.313/0.027 ms

今回の例で作成したNotebookですが、このNotebookファイルをコピーして、最初に定義しているhost_nameの値を'dev02'と書き換えるだけで、dev02用Notebookとしてそのまま使えるようになります。

このように変数をうまく使うと、Notebook内での設定ミスを減らしたり、Notebookの再利用がやりやすくなります。

それでは :-)