端くれプログラマの備忘録 Ansible [Ansible] ターゲットノードとコントローラノードのpythonパスを指定する

[Ansible] ターゲットノードとコントローラノードのpythonパスを指定する

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_interpreteransible.cfg または環境変数で指定します。

これにより、異なるPythonバージョンが各ノードで適切に使用されるように設定できます。