DevOps con Python y Nix

Joel Rivera

27/08/2016

Día comunidades Dev Monterrey

Sobre el sujeto que esta hablando

  • Desarrollador de Software por los últimos 8 años
  • Linuxero por poco más de 10 años
  • Entusiasta de Software Libre
  • Fundador de Python Monterrey
  • Actual desarrollador (remoto) en el equipo de DevOps de 

Primero lo primero

... y luego lo segundo

... y así...

¿Qué es DevOps?

¿Qué es DevOps?

Es una practica, cultura y/o conjunto de técnicas que van orientadas a colaborar entre el desarrollo de producto y la operación de que conlleva día a día o al momento de ocurrir una transición en las etapas de desarrollo.

Algunas actividades relacionadas a DevOps

  • Analizar los procesos de desarrollo extremo a extremo
  • Agilizar en la medida de lo posible por medio de automatización
  • Monitorear la infraestructura (con software)
  • Tener deployments (desplieges :|) de aplicaciones replicables y seguras
  • Prevenir activamente riesgos de seguridad en todos los niveles de desarrollo

¿Qué es Python?

¿Qué es Python?

Es un lenguaje de programación de muy alto nivel, multiparadigma con énfasis en la orientación a objetos, interpretado, opinionado en sus practicas, de tipos dinámicos, de licencia abierta, con más de 20 años de existir y que hoy en día esta en casi todo lo que sea POSIX y muchas otras partes.

 

Tal vez esta en ti y aún no lo sabes...

¿Y pa'que es bueno ese Pitón?

Short answer

Para todo

Bueno, ya en serio.

  1. Administración de sistemas
  2. Automatización de todo lo que se le acerque a una computadora
  3. Lenguaje de pegamento entre capas de bajo y alto nivel
  4. Web
  5. Testing
  6. Data Science
  7. Aplicaciones  de GUI
  8. Análisis de trafico de red
  9. Visión por computadora
  10. Prototipos funcionales
  11. Bioinformatica
  12. Hacking de media noche, etc...

¿Qué es Nix?

¿Será *nix?

--Opinará el UNIX haxor

NO

¿Qué es Nix?

  • Lenguaje de programacón puramente funcional con lazy evaluation (o como me gusta decirle: evaluación flojeroza)

  • Administrador de paquetes puramente funcional para sistemas POSIX

El/la que no sepa que es POSIX (Portable Operating System Interface) que levante la mano

Es decir... Una yuxtaposición cosmica de magia empaquetadora de software

Lenguaje de programación

No es de propósito general, en términos más especifico se le considera un DSL para empaquetar software.

 

Es un lenguaje de semántica simple, pero con abstracciones funcionales de mucha importancia que le permite hacer muchas cosas.

Nix

  • lazy eval (aka evaluación flojeraoza)
  • tipos dinamicos
  • C++
  • funciona en POSIX (Linux / OS X / FreeBSD/ Cygwin)
  • soporte para multi usuarios
  • modelo binario y de código fuente

Características Importantes

  • Los paquetes se guardar en un sistema de archivos de solo lectura
  • Se determina que un paquete es el mismo cuando el hash que se calcula en base de sus dependencias y código fuente es el mismo (de aquí salen los paquetes binarios)
  • Permite hacer rollback al instalar nuevas versiones o paquetes distintos
  • La instalación de los paquetes es una operación atómica gracias a las ligas simbólicas.

Características Importantes

  • Nix existe como un conjunto de convenciones sobre el sistema de archivos y un conjunto de herramientas para operara bajo esas convenciones
  • No es paravirtualización o virtualización de hardware, tampoco son contenedores ni necesita soporte del kernel
  • Es un hack interesante de Eelco Dolstra (nix fue su proyecto de doctorado y actual mantenedor)

Nix

with import <nixpkgs> {};

buildPythonPackage {
   name = "awake-1.0";
   doCheck = false;
   src = pkgs.fetchurl {
      url = "https://pypi.python.org/packages/source/a/awake/${name}.tar.gz";
      md5 = "57b7a2e616e37fc29b4011a2e1cc60b2";
   };
}

Instalado Nix

$ curl https://nixos.org/nix/install | sh

Tristemente esa es la opción oficial

Nix

Una vez instalado crea una herarquia de directorios en /nix

/nix/store/98s2znxww6x7h2ch7cj1w5givahxmdna-glibc-2.23
/nix/store/m8qi9jrz51lqn7x0mifa9kpwpsp3b7dq-attr-2.4.47
/nix/store/8c5s33f5mzfn9z3yhjprxnxzl19dg7p2-acl-2.2.52
/nix/store/07axizqswlwc819xcd8dk2m1q0ylddmh-coreutils-8.25
/nix/store/sfypzdarn7pbmvqhw1vh4d73fl37j2qr-openssl-1.0.2h
/nix/store/xlqafmhfnzwg0c77ns8m41k2vn1frqz3-perl-5.22.2
/nix/store/ssm7ncg201c40dqb970v9g3zz10yblvd-openssl-1.0.2h-bin
/nix/store/1vfgnsbqyrb4146q8j0y5wwsls3rsw0n-openssl-1.0.2h-dev
/nix/store/pbikhmd34v10bkivvf9c6miidcq7s5zn-zlib-1.2.8
/nix/store/3cmh9l6r6cb0v7mkz5wnm2332hlfa991-libpng-apng-1.6.23
/nix/store/98s2znxww6x7h2ch7cj1w5givahxmdna-glibc-2.23
/nix/store/m8qi9jrz51lqn7x0mifa9kpwpsp3b7dq-attr-2.4.47
/nix/store/8c5s33f5mzfn9z3yhjprxnxzl19dg7p2-acl-2.2.52
/nix/store/07axizqswlwc819xcd8dk2m1q0ylddmh-coreutils-8.25
/nix/store/sfypzdarn7pbmvqhw1vh4d73fl37j2qr-openssl-1.0.2h
/nix/store/xlqafmhfnzwg0c77ns8m41k2vn1frqz3-perl-5.22.2
/nix/store/ssm7ncg201c40dqb970v9g3zz10yblvd-openssl-1.0.2h-bin
/nix/store/1vfgnsbqyrb4146q8j0y5wwsls3rsw0n-openssl-1.0.2h-dev
/nix/store/pbikhmd34v10bkivvf9c6miidcq7s5zn-zlib-1.2.8
/nix/store/3cmh9l6r6cb0v7mkz5wnm2332hlfa991-libpng-apng-1.6.23

Herramientas Importantes en Nix

  • nix-env
  • nix-shell
  • nix-build
  • nix-store
  • nix-copy-closure
  • nix-channel

Demo time

¿Cual es la relevancia de Nix en el contexto de DevOps?

Partes relevantes

  • Deployment inmutables
  • Conecta archivos estáticos, bases de datos, configuraciones, código fuente o substitutos binarios.
  • Versiones bajo control
  • Permite operar en la forma que se va a montar la aplicación desde el momento que se escribe el código de la misma
  • No necesita blobs binarios obscuros

Lo fundamental

Al integrar herramientas como Nix desde el punto inicial de desarrollo hasta el deployment, permite que los equipos (o los mini equipo en la mente del desarrollador) operen de una forma clara.

 

Hacer CI/CD con paquetes en Nix se vuelve casi trivial por que no hay ambiente que mantener

 

Otros componentes de los que no hablé

  • NixOS
  • Hydra
  • NixOS
  • NixOps
  • DisNix

Más información: http://nixos.org/

@cyraxjoe

charlas@joel.email