Cuando trabajamos con máquinas virtuales, especialmente con entornos creados mediante Vagrant, nos encontramos con un detalle importante a la hora de usar Ansible: el usuario remoto con el que nos conectamos. Por defecto, Ansible intenta ejecutar comandos con el usuario que lanza el comando, es decir, nuestro usuario local. Sin embargo, en muchas máquinas virtuales, como las que crea Vagrant, el usuario predeterminado es otro, típicamente llamado vagrant. Esto provoca que, si no indicamos nada, la conexión falle porque ese usuario local no existe en la máquina remota.
Para solucionar esto, podemos indicarle a Ansible con qué usuario queremos conectarnos usando la opción -u en la línea de comandos. Por ejemplo, si queremos conectarnos como vagrant, ejecutamos:
ansible all -m ping -u vagrant -i hosts
Esto funciona, pero puede resultar tedioso tener que especificarlo cada vez que ejecutamos un comando. Por eso, es más cómodo configurar esta opción de forma permanente.
Una forma sencilla de hacerlo es mediante un archivo de configuración llamado ansible.cfg. Este archivo puede ubicarse en el directorio actual, en nuestro directorio de usuario o a nivel global en el sistema. En él, organizamos las opciones por secciones, y la más importante para este caso es [defaults]. Ahí podemos definir el usuario remoto con la opción remote_user. Por ejemplo:
[defaults]
remote_user = vagrant
Con esta configuración, Ansible usará siempre el usuario vagrant para conectarse, sin necesidad de especificarlo en cada comando.
Otra alternativa es definir el usuario remoto directamente en el playbook. Dentro de la definición del playbook, podemos añadir la clave remote_user para indicar con qué usuario se debe conectar Ansible. Por ejemplo:
- hosts: all
remote_user: vagrant
tasks:
- name: Ping a los hosts
ping:
Esto es especialmente útil cuando queremos que la configuración de usuario sea parte del playbook y no dependa del entorno local.
Es importante destacar que, aunque el archivo de configuración es muy útil para ajustes locales, en algunos casos puede que no se aplique correctamente, por lo que definir el usuario en el playbook o usar la opción -u sigue siendo una buena práctica para asegurar la conexión.
En resumen, cuando trabajamos con máquinas virtuales o servidores que nos proporcionan un usuario por defecto, debemos asegurarnos de indicarle a Ansible con qué usuario conectarse. Esto lo podemos hacer de forma temporal con la opción -u, de forma local y persistente con un archivo ansible.cfg, o directamente en el playbook con la clave remote_user. Así evitamos errores de conexión y podemos aprovechar todo el potencial de Ansible para gestionar nuestras máquinas.