¿Cuál es tu herramienta de automatización favorita?

El objetivo eterno de todo buen administrador de sistemas es ser reemplazado por un script.

Parece condenado al fracaso, pero los administradores de sistemas saben que solo cuando una tecnología se entiende completamente se puede automatizar y cada año aparece nueva tecnología. Para cuando haya automatizado algo, habrá algo nuevo que aprender y posiblemente automatizar.

La automatización tiene sentido porque los ordenadores son mejores y más confiables en la repetición que los humanos. Y debido a que es una lente tan popular, existen docenas de herramientas para hacer posible la automatización, y la mayoría no son mutuamente excluyentes.

CUAL es tu favoritO?

Índice

Ansible

Ansible proporciona automatización de TI con archivos de configuración simples y consistentes. Es compatible con todos los administradores de paquetes populares de Linux, Mac y Windows.

El enfoque de Ansible es un poco diferente de la automatización personalizada que podría haber pirateado en el pasado. Cuando escribe un script de shell para realizar una tarea, generalmente tiene que pensar en los pasos, comando por comando. Ansible, sin embargo, se encarga de ello, pasando por alto la mayoría de los pasos necesarios para llegar a un estado específico.

Aquí hay un ejemplo simple. Supongamos que necesita un directorio llamado example existen en cada host. El método antiguo, con algunas comprobaciones de resiliencia muy básicas:

set -e 
mkdir "${DEST}"/example || true
mkdir -p "${DEST}"/example/{doc,img,share,src} || true
[[ -d example ]] && chmod --recursive u=rwx,g=rwx,o=r example

for i in {img,doc,share,src}
do 
  [[ -d example/$i ]] || echo "example/$i was not created."
done

Comparado con el método Ansible:

---
- name: "Create required directory structure"
  hosts: localhost
  tasks:
  - name: "Create directory"
    file:
      path: "{{ item }}"
      recurse: true
      mode: "u=rwx,g=rwx,o=r"
      state: directory
    with_items:
      - "doc"
      - "img"
      - "share"
      - "src"

La versión de Ansible tiene un mayor número de filas en este ejemplo, pero todo lo que hace es describir el estado final deseado por el host. No necesita escribir el código para realizar ninguna acción en un host, solo necesita describir cómo se ve el host como resultado. Ansible mismo se ocupa de los detalles, sin importar en qué tipo de host se esté ejecutando.

Guión de shell

Si puede realizar una tarea usando una terminal, puede automatizarla con un script de shell. No se requiere conversión entre ejecutar una tarea y automatizarla cuando se usa un script de shell, porque uno es solo una transcripción del otro. Un script de shell es una herramienta de automatización simple, accesible y eficiente.

Si bien los scripts de shell son excelentes para proporcionar instrucciones a los ordenadores, usarlos para la automatización puede ser difícil en algunos escenarios.

Por ejemplo, si está automatizando en diferentes distribuciones de Linux y Unix, un script de shell puede requerir modificaciones considerables. Un comando en una plataforma puede funcionar de manera diferente en otra, una peculiaridad que a menudo se debe a la diferencia entre la forma en que GNU y BSD implementan las utilidades comunes o el comportamiento de los diferentes shells.

El problema es peor cuando se escriben guiones en plataformas completamente diferentes.

Sin embargo, si conoce su entorno y sabe cómo rechazar de manera confiable la tarea en cuestión, un script de shell puede ser el camino más rápido y fácil hacia la solución.

cron

Similar a los scripts de shell, el cron subsistema es casi intrínseco a Linux. Este es el mecanismo de programación predeterminado que se proporciona con todos los sistemas Linux y su sintaxis está estandarizada:

minute hour day month weekday task

En algunas implementaciones ha habido adiciones recientes a esta sintaxis, incluidos atajos como @monthly, @weekly, @daily, y @hourly.

Independientemente de lo que cron binario proporcionado por su distribución, programar una tarea es tan fácil como editar su crontab con este comando:

$ crontab -e

Y anotando la hora, el día y la tarea:

0 1 * */2 0 /usr/local/bin/rsync --rsh=ssh -av /opt example:/opt

Este ejemplo especifica que un rsync el comando se ejecuta en la marca de 0 minutos de la 1 AM (01:00), independientemente del día (*), Cada dos meses (*/2), todos los domingos (día 0 de la semana).

La sintaxis requiere algo de decodificación, ya que su cerebro tiene que procesar un sistema de restricciones crecientes, pero tiene sentido lógico y es consistente en cualquier plataforma que se envíe con un cron solicitud.

Por supuesto, la integridad y la resiliencia de la tarea que está planeando depende de usted. el cron Al sistema no le importa si una tarea tiene éxito o falla, pero si está buscando un panel de control central para orquestar cualquier tarea en su red, este es un lugar fácil para comenzar.

Temporizadores de sistema

Me gusta cron, systemd se incluye en casi todas las distribuciones de Linux que instale, por lo que es una opción fácil y obvia para la programación de trabajos. Puedes usar temporizadores del sistema para programar y administrar tareas regulares en su sistema local, en contenedores y en su red.

contrariamente a cron, systemd incluye varias utilidades para limpiar y generar informes sobre tareas programadas. Por ejemplo, puede obtener un informe de tareas programadas el lunes:

$ sudo systemd-analyze calendar Mon
  Original form: Mon
Normalized form: Mon 00:00:00
    Next elapse: Mon 2020-08-10 00:00:00 NZDT
       (in UTC): Sun 2020-08-09 12:00:00 UTC

porque es parte de systemd, estos temporizadores también se benefician de systemd perros guardianes y otros systemd características que supervisan el éxito, la seguridad y la estabilidad general.

Pitón

Para Pitón Tanto para los aficionados como para los programadores, el uso de Python para la automatización ofrece todos los beneficios de un script de shell a los administradores de Linux desde hace mucho tiempo. Además de eso, agrega soporte casi universal en todas las plataformas, ya que Python puede ejecutarse en prácticamente cualquier cosa y tiene código para adaptarse a las diferencias del sistema.

Por supuesto, Python por sí solo no puede adaptarse a todo, por lo que aún necesita una buena dosis de if instrucciones para verificar en qué plataforma se está ejecutando el script. Proporciona un nivel robusto de abstracción que puede usar una vez que haya determinado el tipo de sistema con el que está tratando.

La flexibilidad de Python también significa que puede inventar nuevas formas de administrar sistemas mucho más allá del antiguo marco de un script Bash programado con cron.

Hay herramientas de Python para escribir una API personalizada para ayudarlo con tareas comunes, utilidades de Python para ayudarlo a navegar por una red, configurar hosts y contenedores, y más.

Ya sea que solo esté convirtiendo desde scripts de shell o código C personalizado, Python puede ayudarlo a mitad de camino para que pueda administrar a sus clientes de la manera que le resulte más conveniente.

Otra cosa

Las posibles soluciones a cualquier problema dado son casi infinitas cuando se trata de ordenadores y administradores de sistemas ingeniosos.

¿Cómo maneja su red, clúster o una extraña variedad de dispositivos?

Artículos de interés

Subir