Categories
Community General OpenSource

OpenNebula User Group en Barcelona


 
Como sabéis, la comunidad de OpenNebula es un pilar muy importante para el proyecto. Comunidad que mediante un sistema de peticiones, listas de distribución y ahora foros, pueden expresar sus dudas, peticiones, o aportar ideas que para los desarrolladores es una información muy útil, además, puede contribuir ayudando a otros usuarios o desarrollando nuevas funcionalidades.
Para eso OpenNebula ha pensado en los User Groups. Los User Groups de Opennebula son comunidades a nivel local, donde los usuarios pueden discutir o compartir información y experiencias de una forma más directa en su misma ciudad. De esta forma también se consigue hacer una difusión más cercana, y encontrar gente que quiera colaborar con el proyecto.
También añadir que este 2015 la conferencia anual de OpenNebula viaja de Berlín a Barcelona, ciudad que será el punto de encuentro dónde desarrolladores, usuarios, administradores, investigadores,… podrán compartir experiencias, casos de estudio y lo que “proceda”.
ONE 2015 Conference
Por todo lo anterior algunos partícipes de este blog nos hemos puesto en contacto con OpenNebula y con otros usuarios del área de Barcelona y hemos decidido crear el OpenNebula User Group de Barcelona. Este grupo pretende ser una comunidad a pequeña escala donde podamos discutir y encontrar objetivos comunes en los que colaborar con el proyecto. Hemos creado un grupo de Google donde iremos informando de los pasos que se van dando y empezaremos a fijar objetivos.
Además, también participaremos en la charla de sudoers, un grupo que se reúne periódicamente en el Campus Nord de la UPC, dónde hablaremos sobre la OpenNebula y expondremos los objetivos del User Group de Barcelona.
Es un grupo totalmente abierto así que estáis invitados!. Primeros integrantes del Grupo:








Xavi Peralta
Colaborador www.cloudadmins.org
 
Algunos enlaces de interés:
OpenNebulaconf 2015 (Barcelona) http://2015.opennebulaconf.com/
OneBCN Google Group – https://groups.google.com/forum/embed/?place=forum%2Fopennebula-barcelona-usergroup
Sudoers Barcelona – http://sudoers-barcelona.wikia.com/wiki/Sudoers_Barcelona_Wiki

Categories
OpenSource

Ansible, automatización de tareas y despliegues de forma simple

índex
Hoy en día el número de servidores, virtuales o físicos, sigue creciendo a un ritmo muy alto y a los sysadmin no se nos debe pasar por alto esta realidad. Este hecho nos obliga a buscar nuevos métodos para desplegar, configurar y actualizar máquinas de forma que estas tareas mecánicas y que llegan a ser idénticas en muchos grupos de servidores nos hagan perder el menor tiempo posible.
A raíz de esta necesidad han surgido diferentes herramientas que nos permiten automatizar muchas tareas que se volverían repetitivas si las tuviéramos que aplicar en muchos de nuestros servidores. Algunas de las herramientas a las que me refiero son Puppet, Chef, Salt y de la que vamos a hablar hoy, Ansible.
Ansible es una herramienta open-source desarrollada en python y comercialmente ofrecida por AnsibleWorks que la definen como un motor de orquestación muy simple que automatiza las tareas necesarias en el campo de las TI. La palabra clave en esta definición es simple y es que Ansible posee unas características que junto su amplia e inteligible documentación hacen esta herramienta realmente atractiva para aquellos que aún no automatizan sus tareas de administración ya que su curva de aprendizaje crece muy rápido.
Estas son quizás las características más importantes:

  • Clientes sin agentes (Overhead muy bajo)
  • Método de autenticación por ssh (preferiblemente con claves) en paralelo
  • No necesita usuario root (permite la utilización de sudo)
  • Permite utilizar comandos básicos
  • Para configurar tareas complejas utiliza lenguaje YAML (Playbooks)

Como hemos remarcado Ansible funciona sin agentes y como único requisito necesita que el cliente tenga instalado python 2.4 o posterior.
Ansible permite diferentes formas de configuración, una podría ser mediante un solo fichero llamado playbook que contendría todos los parámetros para hacer una determinada tarea sobre un determinado grupo de servidores o mediante una estructura de directorios por cada proyecto separando los parámetros en ficheros, que luego nos permitirán importarlos desde otros playbooks.
A continuación haremos una introducción de la estructura simple de Ansible definiendo sus componentes para un proyecto concreto

.
├── hosts <- inventory
├── playbook.yml <-playbook
└── roles
    └── webserver <- role webserver
        ├── files
        │   └── index.php
        └── tasks
            └── main.yml <- fichero de tareas

Modules: Los módulos son las librerías que utiliza para controlar servicios, ficheros, paquetes o comandos. Por ejemplo más abajo veremos que en el fichero main.yml tenemos definidos tres tipos de módulos, apt, copy y service. Cualquiera puede crear sus propios módulos. Debido a que es una herramienta muy nueva todavía faltan por desarrollar muchos módulos, actualmente, existen módulos para EC2 y Rackspace en lo que a cloud se refiere.
Inventory: Fichero donde se definen hosts, o grupos de hosts y sus variables como podria ser el puerto ssh al que hay que conectarse. Por defecto /etc/ansible/hosts aunque también se puede crear uno por proyecto en la raiź del directorio.

# hosts
[webserver]
10.0.0.1    ansible_ssh_user=usuario    ansible_ssh_private_key_file=~/.ssh/id_rsa    ansible_ssh_port=2322
[dbserver]
10.0.0.2    ansible_ssh_user=usuario_db    ansible_ssh_private_key_file=~/.ssh/id_rsa    ansible_ssh_port=2022

Playbook: Este fichero es el encargado de definir todas las tareas que debemos realizar sobre un conjunto de hosts.

# playbook.yml
---
- hosts: all
  roles:
    - webserver

Roles: Los roles son grupos de ficheros y tareas parecidos sobre un determinado grupo de hosts, por ejemplo, en el caso de la instalación de un LAMP podríamos tener un role para webserver y otro para dbserver.
Files: En este directorio se almacenarán los ficheros que se deben copiar en los hosts que pertencen a ese role.
Tasks: Dentro de este directorio se debe crear el fichero main.yml donde definiremos las tareas que se deben ejecutar en los hosts que pertenecen a ese role.

# roles/webserver/tasks/main.yml
---
- name: 1. Instalar Apache
  apt: name=apache2 state=present
- name: 2. Instalar PHP
  apt: name=libapache2-mod-php5 state=present
- name: 3. Start Apache
  service: name=apache2 state=running enabled=yes
- name: 4. Copiar index.php
  copy: src=index.php dest=/var/www/index.php mode=0664

Una vez tenemos los ficheros ejecutamos Ansible.

ansible-playbook -i hosts playbook.yml --sudo --verbose
PLAY [webserver] **************************************************************
GATHERING FACTS ***************************************************************
ok: [10.0.0.1]
TASK: [webserver | 1. Instalar Apache] ****************************************
ok: [10.0.0.1] => {"changed": false, "item": ""}
TASK: [webserver | 2. Instalar PHP] *******************************************
ok: [10.0.0.1] => {"changed": false, "item": ""}
TASK: [webserver | 3. start Apache] *******************************************
ok: [10.0.0.1] => {"changed": false, "enabled": true, "item": "", "name": "apache2", "state": "started"}
TASK: [webserver | 4. Copiar index.php] ***************************************
changed: [10.0.0.1] => {"changed": true, "dest": "/var/www/index.php", "gid": 1000, "group": "xavi", "item": "", "md5sum": "d41d8cd98f00b204e9800998ecf8427e", "mode": "0664", "owner": "xavi", "size": 0, "src": "/home/xavi/.ansible/tmp/ansible-tmp-1398516303.41-96546412744806/source", "state": "file", "uid": 1000}
PLAY RECAP ********************************************************************
10.0.0.1                  : ok=5    changed=1    unreachable=0    failed=0

Si nos fijamos en el resumen de la última linea vemos que solo una tarea ha cambiado de estado y que las demás están OK. Esto significa que ya estaban en el estado correcto excepto la tarea 4 que ahora sí, está en el estado correcto después de ejecutar Ansible.
Instalar Ansible es tan sencillo como añadir los repositorios e instalarlo vía repositorios aunque también lo puedes instalar a través de pip.

sudo apt-add-repository ppa:rquillo/ansible
sudo apt-get update
sudo apt-get install ansible

Este es un pequeño resumen de la infinidad de posibilidades que ofrece Ansible. En su página web se pueden encontrar vídeos y documentación donde se explica con mucho detalle todo lo que puede hacer por nosotros.
Xavier Peralta
www.cloudadmins.org