Ansibleでターゲットノード(リモート)とコントローラノード(ローカル)で異なるPythonパスを使用する場合、以下の方法でそれぞれのPythonインタプリタを明示的に指定できます。
1. ターゲットノードのPythonインタプリタを指定
Ansibleはデフォルトでリモートノード上で /usr/bin/python
を使用しますが、異なる場所にPythonがインストールされている場合や、異なるバージョンを使用したい場合は、ansible_python_interpreter
を指定することで制御できます。
方法:
インベントリファイルやプレイブックでターゲットノードのPythonパスを明示的に指定します。
インベントリファイルに指定:
例えば、Python 3.7 を /usr/local/bin/python3.7
にインストールしている場合、以下のように指定します。
[target_group]
target_node ansible_python_interpreter=/usr/local/bin/python3.7
または、プレイブック内でホスト変数として指定:
- hosts: target_group
vars:
ansible_python_interpreter: /usr/local/bin/python3.7
tasks:
- name: Ensure Python version
command: python --version
2. コントローラノードのPythonインタプリタを指定
コントローラノード(Ansibleを実行する側)のPythonバージョンは、AnsibleがインストールされているPythonのバージョンによって決まります。Ansibleを特定のPythonバージョンで動作させたい場合は、ANSIBLE_PYTHON_INTERPRETER
環境変数を設定します。
方法:
ansible.cfg
に以下のように設定します。
[defaults]
ansible_python_interpreter = /path/to/controller/python3.9
もしくは、Ansibleを実行する前に環境変数を設定します。
export ANSIBLE_PYTHON_INTERPRETER=/path/to/controller/python3.9
まとめ
- ターゲットノード(リモートノード)のPythonインタプリタは、
ansible_python_interpreter
をインベントリファイルやプレイブックで指定します。 - コントローラノード(ローカル)のPythonインタプリタは、
ansible_python_interpreter
をansible.cfg
または環境変数で指定します。
これにより、異なるPythonバージョンが各ノードで適切に使用されるように設定できます。