Estas últimas jornadas he estado trabajando en un sistema de automatización de despliegue de cortafuegos en Softlayer. Llevo un tiempo trabajando con cortafuegos Vyatta, que si bien son bastante prácticos para desplegarlos tanto sobre entornos virtuales como sobre máquinas físicas, adolecen de un grave problema: carecen de un sistema de gestión centralizado. Y cuando manejas del orden de medio centenar de cortafuegos, esto se hace especialmente necesario, no sólo para mantener un sistema homogéneo y manejable, sino también para evitar, en la medida de lo posible, fallos humanos.
¿Y cuál ha sido el sistema elegido para automatizar ciertas tareas de despliegue y gestión? Pues como no podía ser menos, ha sido Ansible. Hasta este momento he sido capaz de:
Para ello, lo primero ha sido preparar un entorno de demo, que ha tenido casi más chicha que la propia configuracion con Ansible:
Ansible -y esto no pretente ser una descripción exhaustiva de sus características, por lo que ruego se me perdone cualquier incorrección que pueda perpetrar- puede actuar bien enviando comandos únicos a los equipos administrados, bien haciendo uso de recetas (playbooks). Estas recetas consisten en un grupo de tareas, plantillas y parámetros que se combinan para realizar las labores de automatización de configuración y labores de gestión en los dispositivos:
Una vez configurado el entorno, el recetario, las plantillas y parámetros, la configuración quedó lista para ser aplicada a los dispositivos. Las tareas de un recetario pueden ser ejecutadas de manera secuencial o en una sucesión específica, usando para ello las oportunas etiquetas. En mi entorno, y hasta el momento, he definido tres tipos de tareas:
Un ejemplo de ejecución de Ansible para este entorno sería el siguiente:
i82hisaj@debian:~/ansible/vyos# ansible-playbook main.yml -t initial
PLAY [all] ********************************************************************
GATHERING FACTS ***************************************************************
ok: [192.168.122.252]
ok: [192.168.122.253]
TASK: [initial-config | upload script for configuring description] ************
changed: [192.168.122.252]
changed: [192.168.122.253]
TASK: [initial-config | run script for configuring description] ***************
changed: [192.168.122.252]
changed: [192.168.122.253]
TASK: [initial-config | debug var=desc_value.stdout_lines] ********************
ok: [192.168.122.253] => {
"desc_value.stdout_lines": "{{ desc_value.stdout_lines }}",
"item": ""
}
ok: [192.168.122.252] => {
"desc_value.stdout_lines": "{{ desc_value.stdout_lines }}",
"item": ""
}
PLAY RECAP ********************************************************************
192.168.122.252 : ok=4 changed=2 unreachable=0 failed=0
192.168.122.253 : ok=4 changed=2 unreachable=0 failed=0
i82hisaj@debian:~/ansible/vyos# ansible-playbook main.yml -t add
PLAY [all] ********************************************************************
GATHERING FACTS ***************************************************************
ok: [192.168.122.253]
ok: [192.168.122.252]
TASK: [rules | retrieve Description for a firewall] ***************************
changed: [192.168.122.252]
changed: [192.168.122.253]
TASK: [rules | upload script for configuring description] *********************
changed: [192.168.122.252]
changed: [192.168.122.253]
TASK: [rules | run script for configuring description] ************************
changed: [192.168.122.252]
changed: [192.168.122.253]
TASK: [rules | debug var=desc_value.stdout_lines] *****************************
ok: [192.168.122.252] => {
"desc_value.stdout_lines": [
"Outside In"
],
"item": ""
}
ok: [192.168.122.253] => {
"desc_value.stdout_lines": [
"Outside In"
],
"item": ""
}
PLAY RECAP ********************************************************************
192.168.122.252 : ok=5 changed=3 unreachable=0 failed=0
192.168.122.253 : ok=5 changed=3 unreachable=0 failed=0
i82hisaj@debian:~/ansible/vyos# ansible-playbook main.yml -t delete
PLAY [all] ********************************************************************
GATHERING FACTS ***************************************************************
ok: [192.168.122.252]
ok: [192.168.122.253]
TASK: [initial-config | debug var=desc_value.stdout_lines] ********************
ok: [192.168.122.252] => {
"desc_value.stdout_lines": "{{ desc_value.stdout_lines }}",
"item": ""
}
ok: [192.168.122.253] => {
"desc_value.stdout_lines": "{{ desc_value.stdout_lines }}",
"item": ""
}
TASK: [rules | upload script for deleting rule] *******************************
changed: [192.168.122.252]
changed: [192.168.122.253]
TASK: [rules | run script for configuring description] ************************
changed: [192.168.122.253]
changed: [192.168.122.252]
TASK: [rules | debug var=desc_value.stdout_lines] *****************************
ok: [192.168.122.253] => {
"desc_value.stdout_lines": "{{ desc_value.stdout_lines }}",
"item": ""
}
ok: [192.168.122.252] => {
"desc_value.stdout_lines": "{{ desc_value.stdout_lines }}",
"item": ""
}
PLAY RECAP ********************************************************************
192.168.122.252 : ok=5 changed=2 unreachable=0 failed=0
192.168.122.253 : ok=5 changed=2 unreachable=0 failed=0
Algunas ideas hasta el momento:
En resumen, si bien Ansible este caso requiere de bastante trabajo para poder realizar de manera efectiva la automatización del despliegue y gestión de cortafuegos (vyatta, en este caso), las ventajas que proporciona y el trabajo final que ahorra hacen que valga la pena. Como diría nuestro amigo Barney, en este caso nos encontramos claramente por encima de la diagonal Vicky Mendoza:
El pasado verano fue un verano interesante. Con nuevos retos, rumbos y desafíos. En concreto, este verano pusimos rumbo aquí:
Acepté una oferta para trabajar como Ingeniero Senior de Comunicaciones en IBM, en el Campus Tecnológico de Dublín, en la división de Cloud Computing. Softlayer, F5, vRouter Vyattas. Trabajo más técnico, pero sumamente interesante. Y en lo económico, una de esas ofertas que no se pueden rechazar. Así que recogimos bártulos y enfilamos camino de Irlanda.
Llevo ya un mes largo trabajando en IBM, y hasta ahora la experiencia es muy buena. Una ciudad interesante, con gran vida y actividad, con una gente encantadora… y donde no llueve tanto como uno podría pensar. Y en la que siempre tienes tiempo para visitar viejos amigos.
Obviamente, es un gran cambio, pero un cambio que hemos cogido con alegría. Y ecología. Por fin estoy pudiendo hacer algo que quería hacer desde hace mucho tiempo:
Bici todos los días, trabajo técnico, centro comercial a 5 minutos, el centro histórico del barrio a la misma distancia, parques, pubs irlandeses… Me encanta esta zona.
Seguiremos informando.
Algo nuevo comienza.
Desde hace algunas semanas vengo notando una exasperante lentitud a la hora de hacer uso del IDE de Arduino en Windows 7. El tiempo de carga inicial es exagerado, pero aún lo es más el uso del menú de Herramientas (Tools). Y todo ello especialmente si lo comparamos con la respuesta del IDE en Debian, en una máquina mucho más limitada.
Por suerte, tirando del hilo he podido encontrar este artículo: Slow Arduino IDE, en el que explican que la causa del problema reside en una librerñia para comunicarse con los puertos de comunicación (rxtx), que al ser el IDE es un proyecto de plataforma cruzada, da algunos problemas en Windows, tanto Vista, como 7 en adelante.
¿La solución? Reemplazar la dichosa librería por una optimizada para Windows. Y aunque el artículo es antiguo, el mismo autor ha realizado una actualización este verano, indicando que la solución sigue siendo válida.
Llevo unas cuantas semanas sin escribir, y es que entre el trabajo y diversas ocupaciones no he podido ponerme a darle a la tecla. Sin embargo, no he estado ocioso todo este tiempo. Y este vídeo es la prueba de ello:
Como se puede ver (aunque un poco oscuro), se trata de un reloj de riego de jardín controlado por WhatsApp. Los mensajes son enviado por WhatsApp y recibidos por una Raspberry Pi, que activa el reloj de riego mediante radiofrecuencia.
El reloj, por otro lado, está controlado por un chip Attiny85, programado con Arduino. El conjunto está alimentado por una batería de 9v. Con un regulador se baja el voltaje a 5v, que proporciona alimentación tanto al sistema attiny como al propio motor de riego. El esquema básico de funcionamiento es el mismo que el de este diagrama…
…pero reemplazando el arduino por el attiny.
Otro día, con más tiempo, doy más detalles del funcionamiento.
Etiquetas: arduino, attiny85, jardín, radiofrecuencia, raspberry pi, riego, whatsapp