Muy buenas, voy a empezar con una serie de tutoriales de introducción a ansible. Para el que no lo sepa, es una potente herramienta de despliegues automáticos.
En la actualidad es la herramienta mas de moda de automatización del mercado, su principal competencia son chef y puppet, entre otros. su principal ventaja, es que para hacer los despliegues se conecta por defecto por ssh.
Para mi estas seria las ventajas:
- No necesita agente
- Podemos usarlo en múltiples plataformas
Y estas las desventajas:
- Es lento en el despliegue
- Si hay bug tardan en repararlos
- No hay control de versiones necesitamos un una herramienta como git
Para instalarlo es muy sencillo. En mi caso va a ser para un centos/red hat.
yum install ansible
Una vez instalado la ruta de configuracion es esta:
#cd /etc/ansible
En esta ruta tenemos los principales ficheros de configuración que serian estos:
El fichero hosts, donde defino los servidores a que servidores voy a hacer el despliegue.
Y el fichero ansible.cfg, donde están de configuraciones globales que utilizaremos.
Para poder lanzar localmente ponemos en el fichero hosts esta opción:
Localhost ansible_connection=local
Ejemplo con localhost, ansible localhost -m ping
Con la opción –m, lanzamos un módulo ya predefinido. Y con la opción –a, lanzaríamos el comando que queremos entre comillas.
ansible nombre_servidor -a «comando»
Por ejemplo, ansible localhost -a «hostname»
Como os comento un poco más arriba, solo se instala en un servidor donde vamos a lanzar todo. Ahora lo que vamos a hacer es lanzarlo contra un servidor remoto.
ansible xx.xx.xx.xx -a «comando»
Al lanzarlo nos da este error:
Esto es debido a que no está definido en el fichero hosts. Lo añadimos debajo de la línea que hemos añadido para el local.
Ahora nos pide que añadamos al key de ssh, le ponemos yes, y nos vuelve a rechazar la conexión.
Para poder aceptar la conexión a servidores externos, vamos a generar una clave para conectarnos por ssh:
ssh-copy-id -f usuario@nombre_servidor
Recordar: Todo lo que hagamos debemos meterlo en el fichero host
ansible xx.xx.xx.xx –a “uptime”
Más opciones interesantes, si lanzamos el comando indicando en vez de, contra el servidor especifico, con la palabra all nos lo lanza a todos los servidores definidos en el fichero hosts
Ejemplo: ansible all –a “uptime”
Si necesitamos indicarlo con un usuario especifico debemos lanzarlo con él la opción –u
Ejemplo: ansible all –a “uptime” –u usuario
También podemos definir el usuario dentro del fichero hosts, poniendo lo siguiente:
ansible_user=usuario
Ahora me diréis, como escalamos los permisos ejecutado estos comandos si tengo que usar un sudo? Para ello ponemos el comando – -become
Por ejemplo, si necesitamos crear un usuario en todos los servidores y no somos root, nos va a dar un error del tipo que no puede acceder a /etc/passwd. En este caso debemos de hacerlo como sudo, siempre y cuando ese usuario con que lanzamos el comando tenga permisos para usar sudo.
ansible all –m usuario –a “name=usuario2 state=present” –become
Si usamos en comando id, vemos como lo ejecuta con usuarios diferentes:
Espero que os sirva