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.
- Administración de sistemas
- Automatización de todo lo que se le acerque a una computadora
- Lenguaje de pegamento entre capas de bajo y alto nivel
- Web
- Testing
- Data Science
- Aplicaciones de GUI
- Análisis de trafico de red
- Visión por computadora
- Prototipos funcionales
- Bioinformatica
- 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
Devops con Python y Nix
By Joel Rivera
Devops con Python y Nix
Breve introducción al concepto de DevOps usando Nix y Python para ejemplificar un caso para empaquetar aplicaciones y sus implicaciones.
- 586