はじめに
ネットワークモジュールを中心に使っていると、ターゲットノードではなくコントロールノード(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
変数を指定する
最近、以下の記事を読んで知りました。
ansible_python_interpreter: '{{ ansible_playbook_python }}'
なるほどと思いました。
少し調べてみると、公式ドキュメントにもこの方法が載っていました。
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 の一覧に掲載されています。