Por Eric Driussi Fabbro
Trabajando como consultora, rotamos de un colaborador a otro con cierta frecuencia. Con poco que hayamos rotado de esta forma acabamos con el ordenador lleno de, entre otras cosas, código, documentación y posiblemente credenciales de nuestros clientes. En un mundo ideal eliminaríamos el/los repos de turno al rotar y santas pascuas, pero no suele ser tan sencillo: Variables de entorno, CLIs in-house, scripts, etc. etc.
Esto supone cierto riesgo a nivel de seguridad: Si tenemos datos de cliente A, pero trabajamos con cliente B y éste tiene un fallo de seguridad cabe la posibilidad (aunque remota) de comprometer la seguridad de cliente A.
Por otra parte, a nadie le gusta tener un entorno de trabajo abarrotado y caótico. Nuestra máquina es (parte de) nuestro entorno de trabajo: ¿Porque descuidarla así? Es un poco como aquello de las mudanzas: No eres consciente de la cantidad insana de trastos y tonterías que tienes hasta que los tienes que cargar en cajas.
Los traslados son buen momento para recapitular y hacer limpieza.
La realidad es que para asegurarse de haber limpiado un sistema a fondo, la opción nuclear es la más segura y rápida: re-instala el sistema.
Aunque instalar un OS no requiere particular esfuerzo (normalmente es cuestión de picar en “Siguiente” y esperar), configurar tanto el OS como el software del que dependemos es otra historia. Por una parte sabemos que vamos a querer el entorno montado de cierta manera, por lo que no tiene misterio. Pero por otra, hay que sentarse a hacerlo y como todo proceso manual repetitivo resulta tedioso y es dado a errores.
Podemos o sentarnos con paciencia (y tiempo) y configurar cada pieza de software y parámetro de la máquina o adaptarnos a los settings que vengan por defecto.
La segunda opción puede funcionar para quienes son capaces de aprenderse de memoria los atajos por defecto de su IDE, pero como no es mi caso necesito que el software se adapte a mi y no viceversa.
Si fuera posible, quisiera tener una especie de Makefile (Taskfile?) pero a nivel de sistema.
No me interesa configurar docker a mano, quiero encontrarlo ya montado. No quiero instalar uno a uno los CLIs que necesito, quiero que ya estén ahí.
Si has trabajado en un entorno DevOps o gestionado servidores de alguna forma, posiblemente te suene.
Ansible es una herramienta del mundo DevOps con la que podemos aplicar aquello de infrastructure as code, configurando a golpe de .yml
tantos servidores como hagan falta.
En su uso más simple, consiste en tener un fichero con una serie de tasks, cada una reflejando una (serie de) acciones o cambios de estado que ocurrirán en la máquina objetivo.
Se ejecuta un comando tal que ansible-playbook run.yml
desde la máquina orquestradora y los cambios tendrán lugar en todas aquellas máquinas remotas (servidores) que se hayan definido.
¡Pues que la máquina orquestradora y la máquina a orquestrar pueden ser la misma!
Normalmente tendríamos una serie de IPs o dominions configurados como hosts sobre los que ejecutar las configuraciones, pero nada nos impide decirle a Ansible que el objetivo es localhost
.
Supón que tienes un fichero run.yml
tal que así:
- name: Docker & SSH
hosts: localhost
tasks:
- import_tasks: tasks/config.yml
Que apunta a un fichero tasks/config.yml
tal que:
- name: Create Docker Group
become: true
group:
name: docker
state: present
- name: Ensure User Groups
become: true
user:
name: "{{ user }}"
groups:
- docker
- wheel
state: present
shell: /bin/bash
- name: Create ssh dir
file:
path: ~/.ssh/
state: directory
mode: '0700'
- name: Create ssh keypair
become: true
openssh_keypair:
path: "/home/{{ user }}/.ssh/id_rsa"
owner: "{{ user }}"
type: rsa
size: 4096
state: present
Los pormenores de cómo usar Ansible están fuera del scope del artículo, pero seguro que se intuye lo que está pasando arriba:
Aquí puedes ver un uso algo más enrevesado: Me configura algunos de los programas que más uso a diario de una manera consistente y predecible.
Espero que se aprecie el ahorro de tiempo que esto supone, sin hablar de la paz mental de saber que tienes un sistema fresco, sin conflictos inesperados, programas sin usar o procesos innecesarios entorpeciendo su uso.
Un lienzo limpio y listo para (volver a) ensuciar!
¿Quieres más? te invitamos a suscribirte a nuestro boletín para avisarte cada vez que recopilemos contenido de calidad que compartir.
Si disfrutas leyendo nuestro blog, ¿imaginas lo divertido que sería trabajar con nosotros? ¿te gustaría?
Pero espera 🖐 que tenemos un conflicto interno. A nosotros las newsletter nos parecen 💩👎👹 Por eso hemos creado la LEAN LISTA, la primera lista zen, disfrutona y que suena a rock y reggaeton del sector de la programación. Todos hemos recibido newsletters por encima de nuestras posibilidades 😅 por eso este es el compromiso de la Lean Lista