== Semana del desarrollador == Miercoles 1 de Febrero del 2012 - Charming Juju - m_3 {{{#!IRC 11:01 < chilicuil> lo que sigue sera una charla por +m_3, sobre juju y las recetas que podemos hacer para crear servicios a traves de ubuntu 11:02 < chilicuil> esta es una platica enfocada a Ubuntu server 11:02 < chilicuil> desde este ciclo, ubuntu server ha tenido mucha actividad con orchestra y juju, dos tecnologias utilizadas para levantar servicios en cuestion de minutos 11:03 < chilicuil> comenzare la interpretacion ahora 11:04 < chilicuil> en lugar de concentrarnos en una receta particular, dare ejemplo de varias de ellas, y de como pueden ser usadas para levantar servicios populares 11:05 < chilicuil> hare un poco trampa, y utilizare una sesion que he preparado para esta sesion, usando ec2 para ello 11:11 < chilicuil> podran ver los ejemplos (con su navegador o cliente ssh) a traves de ec2-107-21-156-68.compute-1.amazonaws.com 11:11 < chilicuil> el usuario y contraseña son guest/guest 11:12 < chilicuil> bien, juju es un conjunto de herramientas hechas en ubuntu 11:13 < chilicuil> es un nuevo paradigma para el levantamiento de servicios, donde no solo te concentras en mantener sincronizadas los archivos de configuracion y de automatizar el proceso, sino que se ven como una infraestructura de servicios 11:13 < chilicuil> #esto no es completamente cierto, pero ciertamente es el primer esfuerzo en Ubuntu 11:14 < chilicuil> si vemos la administracion como un conjunto de servicios, podremos ver que unos servicios pueden interactuar con otros 11:14 < chilicuil> por ejemplo, aplicaciones web, con bases de datos, caches, monitores, almacenamiento de archivos.., etc 11:15 < chilicuil> el punto de juju es mantener ese conjunto de servicios dentro de tu infraestructura 11:16 < chilicuil> estamos hablando de tener los servicios de grandes compañias, en tus propios equipos 11:18 < chilicuil> bien, si se han conectado, ahora veran una lista de servicios 11:18 < chilicuil> eso es lo que el usuario final de juju tiene que ver 11:18 < chilicuil> juju bootstrap 11:18 < chilicuil> juju deploy [options] service 11:19 < chilicuil> juju add-relation servicio1 servicio2 11:19 < chilicuil> juju expose service 11:19 < chilicuil> el ultimo paso, pone el servicio en la red 11:20 < chilicuil> los pasos anteriores son los que se siguen para levantar un servicio 11:20 < chilicuil> la manera en la que juju representa servicios en a trave de charms 11:20 < chilicuil> tenemos charms para muchos servicios, algunos de ellos son mongo, ganglia, mediawiki, mysql, etc, etc, etc 11:21 < chilicuil> estos charms contienen las mejores practicas de los administradores que han trabajado con ellas 11:22 < chilicuil> para acceder via ssh, usen $ ssh guest@ec2-107-21-156-68.compute-1.amazonaws.com #entraran a una consola donde podran ver todo lo que hace m_3, impresionante"! 11:22 < chilicuil> el ejemplo mas dificil en el que puedo pensar ahora es openstack 11:23 < chilicuil> tenemos charms para instalar openstack en servidores locales usando juju 11:23 < chilicuil> sin embargo comenzaremos con servicios mas simples 11:27 < chilicuil> hablaremos sobre la estructura de estos charms, pero a grandes rasgos es importante saber que pueden combinarse para crear servicios mas complejos 11:29 < chilicuil> los logs del Ubuntu Developer Week estaran disponibles en wiki.ubuntu.com/UbuntuDeveloperWeek instantes despues de finalizadas las charlas, las de la interpretacion tambien estara disponible en wiki.ubuntu.com/SemanaDesarrollador 11:29 < chilicuil> los charms pueden escribirse en cualquier lenguaje 11:30 < chilicuil> y la curva de aprendizaje no es muy grande, juju es basicamente un framework de eventos 11:30 < chilicuil> usa agentes y zookeeper para saber que esta pasando con esos agentes 11:31 < chilicuil> justo ahora en la sesion ssh, podemos ver el juju para la configuracion de una wiki 11:32 < chilicuil> juju funciona sobre ec2, hpcloud, openstack, lxc, servidores locales y buena parte en eucalyptus 11:33 < chilicuil> se puede instalar juju en una sola maquina si asi lo requieren, se adapta a sus recursos 11:33 < chilicuil> como ejemplo, les contare que el otro dia estaba desarrollando una aplicacion para un nodo de mongo 11:34 < chilicuil> en produccion, tendriamos algo un proxy enfrente, algunas docenas de mongo y otras tantas de recuperacion 11:34 < chilicuil> mientras que en mi maquina, solo estaba usando una sola instancia de mongo 11:35 < chilicuil> juju es escalable, veremos como en un momento 11:37 < chilicuil> bien, pensemos en la configuracion de algun servicio 11:37 < chilicuil> hay algunas cosas que suelen hacer una vez instalado su SO 11:38 < chilicuil> estas cosas pueden ser muy simples, otras no tanto 11:39 < chilicuil> juju te permite instalar software a traves de los repositorios, pero tambien a traves de npm o de gems 11:39 < chilicuil> si tu aplicacion necesita una version especifica de django o de rails que no este en los repositorios, puedes instalarlo 11:40 < chilicuil> por supuesto que tambien puedes cagarla 11:40 < chilicuil> intentamos hacer que los charms que elaboramos sean seguros 11:41 < chilicuil> que las cosas que descarguemos sean verificadas, que los charms se vean por otros desarrolladores, que se prueben para ver que no estan rotos 11:42 < chilicuil> basicamente un charm es una lista de eventos, eventos que seran ejecutados cuando ciertas caracteristicas se cumplan 11:42 < chilicuil> ahora veremos en la sesion ssh un ejemplo de ello 11:43 < chilicuil> para este charm (postgresql), tenemos 'install, start, stop, upgrade-charm' 11:43 < chilicuil> en este caso el charm esta escrito en shell scripting, pero pueden crearse en cualquier lenguaje 11:43 < chilicuil> lo podrian escribir incluso en clojure ;) 11:44 < chilicuil> solo tienen que asegurarse de que install cree las condiciones necesarias para ejecutar el resto de instrucciones, start, stop.... 11:45 < chilicuil> como habia dicho, cada charm se puede relacionar con otros servicios 11:46 < chilicuil> los servicios con los que se puede relacionar, se definen en los metadatos del charm 11:46 < chilicuil> para el ejemplo de postresql 11:46 < chilicuil> y los que tienen la sesion ssh abierta, se puede ver que se relaciona con: 11:46 < chilicuil> unin-node 11:46 < chilicuil> ysql-oneway-replication 11:47 < chilicuil> interface: mysql 11:47 < chilicuil> slave: 11:47 < chilicuil> interface: mysql 11:47 < chilicuil> cache: 11:47 < chilicuil> interface: memcache 11:47 < chilicuil> provides: 11:47 < chilicuil> website: 11:47 < chilicuil> interface: http 11:47 < chilicuil> munin: 11:47 < chilicuil> interface: munin-node 11:47 < chilicuil> en ese caso se puede relacionar con memcache, http, munin-node, etc 11:48 < chilicuil> #nota del interprete, se me han pasado las relaciones de postresql, las que se mostraron fueron las de mysql 11:48 < chilicuil> por ejemplo, en el caso de mysql y postresql se puede ver que ofrecen el servicio db 11:49 < chilicuil> otros servicios como mediawiki, pueden consumir este recurso 11:49 < chilicuil> juju utiliza estas definiciones para combinar servicios 11:49 < chilicuil> y cuando se combinan, se disparan eventos, estos eventos pueden ser configurados para hacer lo que ustedes quieren 11:50 < chilicuil> cada vez que se crea un servicio, juju llama a las funciones "install" y "start" del respectivo charm 11:51 < chilicuil> una vez que tenemos varios servicios usamos 11:51 < chilicuil> $ juju add-relation mysql mediawiki y es donde la magia comienza 11:51 < chilicuil> bueno, de hecho no es magia, juju corre los eventos que corresponden y pueden pasar cosas sorprendentes 11:52 < chilicuil> nos podemos poner a pensar en la cantidad de cosas que necesitamos para levantar un servicio 11:53 < chilicuil> juju separa eso en las cosas que se pueden hacer en la instalacion, cosas basicas y pasos adicionales para relacionarlos con otros servicios 11:53 < chilicuil> asi, podemos aprender de una forma a instalar mediawiki o mysql 11:53 < chilicuil> solo eso 11:54 < chilicuil> y despues _relacionarlas_!, por ejemplo puedo crear una base de datos 11:54 < chilicuil> y despues describir la manera en la que alguna otra aplicacion puede relacionarse con ella 11:54 < chilicuil> no necesita saber mas! 11:54 < chilicuil> uno puede usar la misma base de datos para instalar mediawiki, que para instalar wordpress 11:55 < chilicuil> podemos tener instrucciones como 'create_database()', que crean una base de datos en el respectivo servicio y wordpress no tiene porque saber si esta creando esa base de datos en mysql o en pgsql 11:56 < chilicuil> para esto establecemos una relacion con "relation-set" 11:57 < chilicuil> y "relation-get" 11:58 < chilicuil> para obtener mas informacion sobre los charms, pueden entrar a https://juju.ubuntu.com/Charms 11:58 < chilicuil> tambien pueden descargarlos si instalan $ charm-tools 11:58 < chilicuil> y despues usan $ charm getall algun/directorio/oneiric para que se descarguen en ese directorio 11:59 < chilicuil> rm_ se pregunta si relation-set y relation-get son visibles desde la definicion de los hooks, es decir si se agregan al $PATH 12:00 < chilicuil> m_3 ha dicho que si, y tambien se exportan juju-log, open-port, config-get..., todos estan disponibles durante la ejecucion de los hooks 12:00 < chilicuil> eso es todo por esta sesion }}}