Ansible requires Python on remote hosts to execute modules. The relay-server is a minimal server image without Python 3 installed. When Ansible runs the setup (fact gathering) module, it fails with /usr/bin/python3: not found (rc: 127). This blocks all plays against that host.
The project currently has no ansible_python_interpreter configuration and no pre-play to bootstrap Python.
Goals:
Non-Goals:
raw pre-task play to bootstrap PythonChoice: Add a new play at the top of site.yml that uses the raw module (which doesn't require Python) to install python3 via apt.
Rationale: The raw module executes commands directly over SSH without requiring Python on the remote. This is the standard Ansible pattern for bootstrapping Python on minimal images. Using a dedicated play with gather_facts: false avoids the setup module entirely.
Alternatives considered:
ansible_python_interpreter: auto in group_vars/all.ymlChoice: Configure interpreter auto-discovery globally.
Rationale: auto tells Ansible to probe common Python paths on the remote host rather than assuming /usr/bin/python3. This handles cases where Python is at /usr/bin/python3.x or other locations. Applied globally since all hosts benefit from resilient interpreter discovery.
Alternatives considered:
/usr/bin/python3: Fragile; breaks on systems where the path differs.raw task uses apt-get. If a non-Debian host is added later, this will fail. -> Mitigated by the project being explicitly Debian/Ubuntu-only (all roles use apt).