Ansible is agentless, but…

Ansible is supposed to be agentless. This is great and this is certainly a killer feature.

However, that doesn’t mean that there is no requirements on the client side, as I have just found out. I wanted to simply ping a client, like so :

$ ansible remotehost -m ping
remotehost | FAILED! => {
    "changed": false, 
    "failed": true, 
    "module_stderr": "", 
    "module_stdout": "sh: /usr/bin/python: not found\r\n", 
    "msg": "MODULE FAILURE", 
    "parsed": false
}

Problem: the remotehost machine is a very light Alpine Linux container. Very light. So light that it doesn’t have any interpreter : no perl, no php, no ruby… not even python !

So to manage your clients, you have to be prepared to have a big chunk of some interpreter, being ruby (for puppet, for example), or python.

I am not a huge fan of interpreted languages. But if I have to install one, I guess python is not the worst choice. Moreover, it is installed by default on CentOS, Debian, etc. And also, did I mention that Ansible is agentless? ;—)