LoginSignup
5
3

More than 5 years have passed since last update.

Jupyter Ansible Kernel 0.8.0でPythonコードが実行できるようになったので試してみた

Posted at

Jupyter Ansible Kernelを使う事でJupyter notebookのセルに直接Ansibleのインベントリーやタスク、テンプレートなどが書けて実行することができます。
色々使って試していたら開発者のBen Thomassonさんから0.8.0からPythonコードをAnsible Kernelで実行できるようになってregister変数もPythonコードに引き継げるという情報を頂きました。

そこで、色々試して観た結果を書いていきたいと思います :)

1. Pythonのコードが実行できるかの確認

ここでは、Ansibleで実行した結果をPythonコードに持っていけるか確認してみます。
Ansibleで shellモジュール を使って echo 結果をregister変数に入れてPythonで表示してみます。

スクリーンショット 2018-09-09 17.53.03.png

想定通りpythonで表示することができました。

2. 使い方応用編

registerに入っているAnsible実行結果をPythonコードで操作できるのはとても便利そうだと思ったので、試しにAnsibleで取得したVMwareのVM情報一覧をPythonで整形しテーブルで表示してみました。

作成したnotebookファイルは以下にアップしてあります。
https://github.com/sky-joker/ansible-vmware-learning-materials/blob/master/docs/jupyter/Ansible-Kernel/example/Ansibleで取得した結果をテーブルで表示する例.ipynb

ansible_kernel_table_display_test.gif

これは、使い方次第ではかなり便利になりそうです :)

3. 出来ないパターン

3-1. register以外

registerで格納した変数以外は、今の所Pythonコードに引き継げないようです。

スクリーンショット 2018-09-09 17.58.51.png

やはり一度registerに入れる必要があります。

スクリーンショット 2018-09-09 18.01.40.png

3-2. pythonの変数はAnsible側へ引き継げるか

Pythonコードに msg 変数を定義してAnsibleの debugモジュール で表示してみます。

スクリーンショット 2018-09-09 18.03.43.png

これも出来ません。
register以外は現在のバージョンでは対応していないようです。
issueを確認したらバグとして報告されていました。

Python variable not accessible in a Ansible task #67

4. Python3でエラーが発生する

以下のエラーが発生する場合は Ansible Kernel 0.8.0 did not work with Python3 #65 を参照してください。

Traceback (most recent call last):
  File "/usr/lib64/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/lib64/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/home/jupyter/venv/lib64/python3.6/site-packages/ansible_kernel/__main__.py", line 6, in <module>
    IPKernelApp.launch_instance(kernel_class=AnsibleKernel)
  File "/home/jupyter/venv/lib64/python3.6/site-packages/traitlets/config/application.py", line 658, in launch_instance
    app.start()
  File "/home/jupyter/venv/lib64/python3.6/site-packages/ipykernel/kernelapp.py", line 483, in start
    self.kernel.start()
  File "/home/jupyter/venv/lib64/python3.6/site-packages/ipykernel/kernelbase.py", line 290, in start
    self._publish_status('starting')
  File "/home/jupyter/venv/lib64/python3.6/site-packages/ipykernel/kernelbase.py", line 327, in _publish_status
    ident=self._topic('status'),
  File "/home/jupyter/venv/lib64/python3.6/site-packages/jupyter_client/session.py", line 748, in send
    stream.send_multipart(to_send, copy=copy)
  File "/home/jupyter/venv/lib64/python3.6/site-packages/ansible_kernel/kernel.py", line 68, in send_multipart
    result = channel.send_multipart(msg, *args, **kwargs)
  File "/home/jupyter/venv/lib64/python3.6/site-packages/ansible_kernel/kernel.py", line 1173, in send_multipart
    if msg0.startswith("comm"):
TypeError: startswith first arg must be bytes or a tuple of bytes, not str
5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3