Etiqueta: linux

Ansible: La automatización definitiva para servidores

El término ansible se usa en la literatura de ciencia ficción para describir un dispositivo hipotético de comunicación más rápida que la luz.

Ansible logo

Los creadores de la tecnología llamada Ansible, se basaron en este sistema para darle nombre, y aunque obviamente no hayan conseguido que vaya más rápido que la luz, si que esta tecnología consigue hacer muchísimo más simple la configuración remota de equipos.

Ansible se basa en el más que probado protocolo SSH, con el cual se pueden ejecutar ordenes remotas mediante un terminal introduciendo comandos. Además se han abstraído estos comandos (Llamados tasks en Ansible), para que no tengan que escribirse como tal, y que escribiendo un trozo de código en formato yml, Ansible lo traduzca a comandos Linux. Lo bueno de Ansible, es que no hay que instalar en servidor nada más que un servidor de SSH, y listo, Ansible funcionará perfectamente, ya que en realidad no ejecuta en servidor, sino en la máquina cliente que ataca esos servidores, por eso desde la máquina donde se lance la ejecución, si que debe tener Ansible instalado.

Inventarios

El inventario en Ansible no es mas que un archivo de texto plano, donde se definen los hosts a los que podemos atacar. Un fichero de inventario podría tener el siguiente aspecto

mail.example.com

[webservers]
foo.example.com
bar.example.com

[dbservers]
one.example.com
two.example.com
three.example.com

Se puede ver, que tiene una dirección por defecto como mail.example.com, y ademas mediante corchetes, se pueden crear grupos de máquinas como en este caso [webservers] o [dbservers], por si queremos ejecutar los mismos comandos directamente contra varios servidores de una sola vez.

A su vez, Ansible tiene unos posibles hosts donde ejecutar estos comandos. Estos hosts no son mas que configuraciones de conexión a los servidores donde se tiene que ejecutar los tasks. Se puede tener un solo host, o varios a la vez donde ejecutarse. Por supuesto, se debe tener el acceso correspondiente a cada máquina, ya sea via usuario y contraseña (Nada recomendable), o mediante una clave publica/privada que se haya instalado en el servidor donde se ejecutarán las tareas.

tareas

Un ejemplo básico de una tarea Ansible, en la que se copia un fichero de un directorio local, a uno remoto en el servidor sería este

- name: example copying file with owner and permissions
  copy:
    src: /srv/myfiles/foo.conf
    dest: /etc/foo.conf
    owner: foo
    group: foo
    mode: 0644

Los elementos son los siguientes:

  • name: Nombre de la tarea a ejecutar que la identifica de forma unica
  • copy: etiqueta que identifica el comando de la tarea. En este caso el tipo copy sirve para copiar archivos en servidor.
    • src: Fichero local a subir en nuestro servidor
    • dest: Ruta donde se dejará el fichero a subir. Se puede poner un nombre distinto al original si queremos renombrarlo.
    • owner: Propietario del fichero que se pondrá al subirlo.
    • group: Grupo del fichero que se pondrá al subirlo.
    • mode: Permisos en formato octal, que se le darán al fichero en servidor.

Como podéis ver es un formato yml muy claro, y fácilmente entendible. Por supuesto existen muchos mas tipos de tareas en Ansible que se traducirán a comandos ssh automáticamente cuando se ejecuten. Los ficheros que agrupan estas tareas, se les denomina en Ansible, playbooks, ya que pueden contener varias tareas a ejecutar.

ejecución

Una vez creado nuestro primero playbook, ya podremos ejecutarlo. Una ejemplo de ejecución seria este

ansible-playbook -i hosts.cfg -l webservers myPlaybookFile.yml

Este comando usa un fichero hosts.cfg (El del ejemplo escrito arriba), y un fichero de playbook llamado myPlaybookFile.yml donde se encuentran las tareas a ejecutar. Al ejecutar este comando, subirá a los hosts definidos dentro del grupo webservers (Con el argumento -l nombregrupo se indica que se quiere ejecutar contra un grupo de hosts) del ficheros hosts.cfg, el fichero que se indica en la tarea copy de nuestro fichero myPlaybookFile.yml.

Variables

La gran mayoria de veces las tareas que necesitamos ejecutar deben ser parametrizadas, ya que seguramente cambien con el tiempo. Para eso pueden usarse variables que puedan cogerse desde el mismo fichero de playbook, una fuente externa como un fichero de variables, o como parámetros dentro del propio comando de ejecución.

Para usar variables dentro de una tarea se debe poner el nombre de la variable dentro de dobles llaves {{ nombre_variable }}.

Un ejemplo dentro de una tarea podria ser el siguiente

- name: example copying file with owner and permissions
  copy:
    src: /srv/myfiles/{{ file_name }}
    dest: /etc/{{ file_name }}
    owner: foo
    group: foo
    mode: 0644

Y el comando a ejecutar pasándole la variable file_name

ansible-playbook -i hosts.cfg -l webservers myPlaybookFile.yml --extra-vars "file_name=ficherodeprueba.txt"

Con el parámetro –extra-vars (Aunque también vale con -e) se le pueden pasar variables extras que después se usen dentro de los playbooks.

Módulos

Ansible tienes unas tareas básicas que prácticamente pueden ejecutar en cualquier servidor Linux, sin embargo, estas son ampliables y pueden añadírsele módulos adicionales para poder manejar determinadas partes del host destino, como por ej. docker.

En la página web de Ansible tenéis todos los módulos disponibles que se pueden instalar para poder ampliar su funcionalidad.


Con esto espero haberos dado una idea aproximada de la potencia de Ansible, ya que para mi es imprescindible en estos momento, porque mis backups automatizados de servidores están hechos sobre Ansible, y en un futuro lo usaré para configuración completa de servidores nuevos.

La historia de mis Linux

Antes de nada, estoy haciendo pruebas con el nuevo sistema de Telegram de blogs instantáneos Telegraph, y esta entrada la he publicado también a través de Telegram, en el nuevo canal de Learning the Force en Telegram.



Llevo usando Linux, prácticamente desde el primer día que entré en la universidad, y de eso ha pasado hace ya mucho tiempo.
Antes de entrar en la universidad, sabía que existía Linux, pero no había tenido la oportunidad de trastear un rato con el, o simplemente estaba muy cómodo con Windows. Pero eso cambio mi primera semana en la universidad. Nos dieron una clase de introducción a Linux para la asignatura de programación, ya que íbamos a tener que manejarnos con el sistema en las aulas de prácticas. Me llamó tanto la atención, que me apunté a una charla de iniciación del GUL (Grupo de Usuarios de Linux), donde se explicaban los comandos básicos y alguna cosa más interesante sobre Linux. No faltó mucho más que esa charla para engancharme.
Cuando llegué a mi casa ese mismo día, entré en Internet, y gracias al nuevo y flamante ADSL de 256kbps que me acababan de instalar (Si, ya os dije que de eso hacía muuuuucho tiempo), bajé mi primera distribución de GNU/Linux para instalarla en mi PC.

 

Mandrake


Según leí en su momento, Linux Mandrake era una de las distribuciones más sencillas de instalar, ya que en ese instante, no tenía demasiada experiencia como para instalar algo desde consola. Mandrake, estaba basado en Red Hat, pero simplificando todo el proceso de instalación, y haciendo más amigable para alguien como yo en ese momento.
Guardo un buen recuerdo de esta distribución, ya que es donde empecé a ver otro entorno que no fueran las típicas ventanitas.
Mandrake pasó a mejor vida en 2011, aunque dejando un sucesor llamado Mandriva, que al final también paso a mejor vida, dejando un proyecto abierto llamado OpenMandriva que aun sobrevive.

Red hat


Después de un tiempo con Mandrake, me atreví a dar el paso a algo más puro, y más estable: Red Hat
Mandrake estaba basado en Red Hat, por lo que no me supuso mucho cambio, sobre todo a la hora de instalar paquetes, y demás entorno. Durante mucho mucho tiempo, fue mi sistema operativo principal, excepto las veces que quería jugar una partida a algo, que inevitablemente tenía que volver a Windows.
Red Hat, a día de hoy se encuentra activo, y se ha orientado a empresas, ya que el servicio técnico que ofrece, es sin duda el camino a seguir para los que quieran ganarse la vida con proyectos de software libre.

Ubuntu


Resulta curioso que no probase ninguna otra distribución hasta la llegada del todopoderoso Ubuntu, ya que pasaron unos cuantos años entre que empecé usar Red Hat, e instalé por primera vez Ubuntu en su versión 8.04.
A estas alturas, poca gente no conoce Ubuntu. Es sin ninguna duda la distribución de Linux más usada por la gente del mundillo, y tiene multitud de sabores a su alrededor (Kubuntu, Ubuntu Gnome, Ubuntu Mate, Lubuntu…) como para estar días y días intentando elegir cual instalar. Su facilidad de uso e instalación, su soporte LTS, y las continuas actualizaciones hicieron de él, lo que es hoy en día.
Ubuntu está basado en Debian, una de las distribuciones más antiguas, y más estables que sigue existiendo a día de hoy, y que gracias a sus paquetes de tipo deb se ha ganado su puesto a pulso.
Sigo usando Ubuntu a día de hoy, en su sabor Lubuntu, que es perfecto para dispositivos antiguos, o con poca capacidad gracias a su escritorio ligero LXDE. Aunque tengo que reconocer que también a la hora de trabajar sigo usando Ubuntu en su variante de Ubuntu Mate, ya que a la hora de tener compatibilidad con nuevo software, hay que reconocer que una Ubuntu, no tiene competencia.

Debian


Debian. Para todos los metidos en el mundillo de Linux, es imposible no haber oído hablar de esta distribución. Desde mi punto de vista, la más estable, con menos fallos, y con toda la potencia de los paquetes deb, de los que Debian fue origen.
La primera vez que toqué una Debian, fue en los PCs que había en las aulas de informática de la universidad, con la versión Potato instalada (Para los que no lo sepan, los nombres de las versiones en Debian, llevan nombres de personajes de Toy Story: Potato, Sid, Woody, Jessie, Whezzy…), casi recién salida del horno y con el entorno XFCE. Por ese entonces la instalación no era demasiado sencilla, y yo no tenía los conocimientos necesarios, por lo cual la descarté como mi primer Linux a instalar.
Después de algunas frustraciones pasadas con Ubuntu, decidí pasarme a Debian, y fue una de las mejores decisiones que pude haber tomado: Mi PC no se colgaba ni queriendo, y podía con todo lo que le pedía. Acierto al cien por cien, y en mi PC sigue instalado como un campeón.
A día de hoy, si tuviera que recomendar una distribución para su día a día, definitivamente Debian sería mi elección sin ninguna duda.

Arch Linux


Llegamos hasta la actualidad. Arch Linux, es un concepto de distribución distinto de todos los demás que he tenido instalados: Los paquetes que llevan siempre están actualizados a su última versión estable liberada por cada desarrollador, en vez de tener una sola versión estable de los paquetes, que solo se actualiza a una nueva versión cuando los creadores de la distribución deciden que así sea.
Esta distribución no es para todo el mundo, ya que en cuanto se insertar el CD/USB de instalación lo único que te da, es un terminal, y a partir de ahí apáñatelas tu como puedas, por lo que el proceso es complejo para alguien no iniciado en el mundo de Linux.
Y os preguntareis: ¿Por qué instalar Arch Linux, cuando Debian funciona tan bien? La respuesta es más sencilla de lo que os imagináis: Me aburro. Simple y llanamente. Hacía mucho tiempo que no probaba nada nuevo en Linux. Estaba asentado en mi Debian que no fallaba ni aunque se le azotara con un palo, y necesitaba algo nuevo que probar.
Primero lo instalé en máquina virtual, para estar seguro del proceso que había que seguir para su instalación, y una vez teniéndolo claro, cogí mi antiguo portátil del trabajo, y repliqué paso a paso lo que había hecho, junto con alguna variación para los drivers gráficos.
Éxito total es lo que yo definiría al ver Arch Linux instalado y funcionando a la perfección. Y lo mejor de todo es que simplemente con el comando

pacman -Syu

el sistema se actualiza a la última versión de todos sus componentes, sin ningún problema adicional. Lo dicho un autentico éxito, que acaba de dividir mi corazón entre Debian y Arch Linux.
 
Espero que esta historia de mis Linux, os sirva como inspiración para entrar en un mundo increíble, y empecéis a olvidaros de una vez de esas ventanitas que tantos quebraderos de cabeza nos dan a los informáticos.