[Ansible] Python interpreter not found

Mijn Rancher Cluster bevat nodes die allen draaien onder RancherOS. Nu zou ik die met Ansible playbooks willen beheren maar bij een standaard installatie van RancherOS krijg ik de foutmelding dat python niet gevonden kan worden en dat is een component dat Ansible nodig heeft om op de nodes de playbooks te kunnen uitvoeren.

$ ansible -m ping speeltuin-cp01
[WARNING]: No python interpreters found for host speeltuin-cp01 (tried ['/usr/bin/python', 'python3.7', 'python3.6', 'python3.5', 'python2.7', 'python2.6',
'/usr/libexec/platform-python', '/usr/bin/python3', 'python'])
speeltuin-cp01 | FAILED! => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "module_stderr": "Shared connection to 192.168.178.155 closed.\r\n",
    "module_stdout": "/bin/sh: /usr/bin/python: No such file or directory\r\n",
    "msg": "The module failed to execute correctly, you probably need to set the interpreter.\nSee stdout/stderr for the exact error",
    "rc": 127
}

Hier is echter een simpele oplossing voor…

RancherOS kan opgestart worden met verschillende console types, wat, zoals alles in RancherOS, in feite een docker container is waarop je inlogt op het console. Standaard is dat een busybox en die heeft geen python, vandaar de foutmelding. Een CentOS console heeft dit echter standaard wel en om dit te wijzigen, ook met een herstart van de node, passen we dit aan met het volgende commando:

$ sudo ros console switch centos

De volgende melding wordt weergegeven:

Switching consoles will
1. destroy the current console container
2. log you out
3. restart Docker
Continue [y/N]:

Na een bevestiging om door te gaan wordt de CentOS docker container ge-pulled en na een restart van de console-container is dit het standaard console geworden.

$ ansible -m ping speeltuin-cp01
speeltuin-cp01 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
},
    "changed": false,
    "ping": "pong"
}

#cloud-config

In het cloud-config.yml bestand kan dit als standaard ingesteld worden in het rancher gedeelte:

rancher:
  console: centos

Deze kan dan ge-merged worden m.b.v. ‘ros’:

$ sudo ros config merge -i cloud-config.yml