てくなべ (tekunabe)

ansible / network / automation

[Ansible/AWX] カスタム venv でジョブ実行時 ansible-playbook コマンドが No such file or directory のエラーになる

はじめに

こちらの記事で紹介した方法で、ホスト側に カスタム venv を作って ansible をインストールし、awx_task コンテナにマウントさせてジョブテンプレートを実行したとろころ、以下のようなエラーが発生しました。

f:id:akira6592:20201025224951p:plain
エラー

  • 環境
    • AWX 15.0

エラー詳細

エラー全文は以下の通り。

Traceback (most recent call last): File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/tasks.py", line 1501, in run res = ansible_runner.interface.run(**params) File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/ansible_runner/interface.py", line 178, in run r.run() File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/ansible_runner/runner.py", line 179, in run use_poll=self.config.pexpect_use_poll, File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/pexpect/pty_spawn.py", line 204, in __init__ self._spawn(command, args, preexec_fn, dimensions) File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/pexpect/pty_spawn.py", line 303, in _spawn cwd=self.cwd, **kwargs) File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/pexpect/pty_spawn.py", line 314, in _spawnpty return ptyprocess.PtyProcess.spawn(args, **kwargs) File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/ptyprocess/ptyprocess.py", line 330, in spawn raise exception OSError: [Errno 2] No such file or directory: b'/opt/my-envs/a210/bin/ansible-playbook'

/opt/my-envs/a210 が作成したvenvです。

調査

エラーによると、/opt/my-envs/a210/bin/ansible-playbook がないとのことですが、awx_task` コンテナの中に入って調べてみるとちゃんとある状態でした。

そこで、awx_task コンテナで /opt/my-envs/a210/bin/ansible-playbook --version を実行してみました。

bash-4.4# /opt/my-envs/a210/bin/ansible-playbook --version
bash: /opt/my-envs/a210/bin/ansible-playbook: /opt/my-envs/a210/bin/python3: bad interpreter: No such file or directory

どうやら、Python インタープリタ/opt/my-envs/a210/bin/python3 がないようです。

対処

詳細は分からないですが、venv を作るときのちょっとした手違いかなにかかと思い、再度ホスト側で venv を作成しなおしたら、エラーはなくなり正常に実行できました。

ansible-playbook コマンドがないというエラーのときは、python インタープリター の有無もあわせて調べてみると良いかも知れません。