てくなべ (tekunabe)

ansible / network automation / 学習メモ

[Ansible] Ansible 実行環境としての Python とスクリプト実行環境としての Python の指定を合わせる

はじめに

ネットワークモジュールを中心に使っていると、ターゲットノードではなくコントロールノード(Ansible実行サーバー)の Python を利用することが多いです。

あくまで個人の主観ですが、Ansible 自体の実行環境としての Python (ansible_playbook_python ) と、Playbook から生成された Python スクリプトを実行する Python(ansible_python_interpreter) の境界が、あいまいになってしまうことがあります。。。

たとえば、Ansible をインストールした venv に、モジュールの実行に必要な Python モジュールをインストールしたのに「必要なパッケージがない」旨のエラーになってしまう、ということがあります。

その都度「そっか、ansible_python_interpreter に venv のパスを指定しなきゃだと気づいて、

ansible-playbook 略  -e ansible_python_interpreter=$(which python)

のようにしていました。また別の方法があったのでご紹介します。

ansible_python_interpreter 変数に ansible_playbook_python 変数を指定する

最近、以下の記事を読んで知りました。

blue-38.hatenablog.com

ansible_python_interpreter: '{{ ansible_playbook_python }}'

なるほどと思いました。

少し調べてみると、公式ドキュメントにもこの方法が載っていました。

docs.ansible.com

Be sure to set ansible_python_interpreter: “{{ ansible_playbook_python }}” in host_vars/localhost.yml, for example.

目からうろこでした。

なお、ansible_playbook_python 変数は公式ドキュメントの https://docs.ansible.com/ansible/latest/reference_appendices/special_variables.html#magic-variables の一覧に掲載されています。