leanmind logo leanmind text logo

Blog

Refactorización Avanzada

Dominar el refactoring productivo para maximizar el retorno de la inversión.

Automatiza el setup y configuración de tu entorno local

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.

El problema

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.

La solución

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 al rescate

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.

¿Y a mi que?

¡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.

¿Como se usa?

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!

Publicado el 01/08/2023 por Eric Driussi Fabbro

¿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?

Impulsamos el crecimiento profesional de tu equipo de developers