miércoles, 28 de agosto de 2019

Draft, simplificando aún más el desarrollo con Kubernetes

El desafío constante: como reducir los tiempos desde que un desarrollador genera una actualización hasta que es probada.
Usualmente al desarrollar debemos seguir un proceso para desplegar nuestro código. Este proceso era muy extenso años atrás y con DevOps se ha simplificado notablemente.
Un ejemplo muy básico involucrará ingresar a un Jenkins, para construir (build) nuestra aplicación y posteriormente hacer el despliegue (deploy). En la realidad añadimos otras herramientas, haciendo este flujo algo no tan trivial. Justamente ahí es donde entra Draft, a integrar nuestro ambiente de desarrollo con Kubernetes, permitiéndonos hacer un despliegue en un par de pasos: "draft create" y "draft up", así de simple.

Con esto tendremos nuestra app desplegada en un sandbox de Kubernetes disponible con su URL publicada. Draft nos entrega entonces un gran potencial, simplificando y reduciendo los tiempos de generación de un sandbox aún más allá de lo que hemos visto en el ciclo de DevOps, dejándonos listos para ejecutar las pruebas iniciales de nuestro desarrollo.

Si quieres probar Draft, necesitarás Kubernetes evidentemente además de Draft. Sin embargo puedes usar minikube en reemplazo, que te dará lo necesario para tus pruebas de concepto.

Minikube está disponible para descargas en https://minikube.sigs.k8s.io/docs/start/windows/
Para descargar draft, puedes hacerlo con brew (brew install azure/draft/draft) o desde este link de binarios https://github.com/Azure/draft/releases
Una vez instalado, simplemente ejecutas :
  • draft init para configurar draft
  • draft create, para contenerizar tu app 
  • draft up, para desplegar tu sandbox.
Happy Sailing!


martes, 6 de agosto de 2019

Buscar los ultimos archivos modificados en Linux

Hace un tiempo pensé en publicar respecto al tópico que expongo hoy, sin embargo pensé que al ser un tema muy conocido no sería de interés. Después de un poco andar, me di cuenta que no resulta tan trivial y que puede ayudar a algunas personas que existan artículos como éste y en particular en español, por lo que decidí retomar y publicar un par de artículos, partiendo por este.
Quisiera sus comentarios, de si encuentran esta información útil o no, para ver si sigo haciendo publicaciones como ésta.

Problemática: por que buscar los últimos archivos modificados en Linux

Por diferentes razones tal vez queremos buscar los ultimos archivos modificados en Linux. Razones como, por ejemplo:
  • Instalé un programa y quiero saber que archivos modificó
  • Tengo una actualización y quiero saber el / los filesystem que está ocupando
  • Quiero identificar los archivos modificados recientemente
Cuando pensamos en buscar los ultimos archivos modificados en Linux, lo primero que se nos viene a la cabeza es usar el comando find, pero find es muy amplio y necesitamos acotar y esa es la razón de este artículo, algunas opciones que nos permitan acotar la búsqueda.

Solución: buscar los ultimos archivos modificados en Linux

En esta solución expongo dos simples opciones que combino:
  • Filtrar por tiempo
  • Filtrar directorios no relevantes

Filtrando los resultados de búsqueda: por tiempo, últimos modificados

Para filtrar por los ultimos archivos modificados en el tiempo podemos usar el parámetro cmin. cmin nos permitirá especificar una cantidad de minutos hacia atrás, buscando archivos que fueron modificados desde el momento actual hasta x minutos atrás.
Por ejemplo:

$ find . -cmin -30

En este ejemplo, find buscará archivos en el directorio actual (.) que fueron modificados hace 30 minutos (o menos)

Esto resuelve nuestro problema y podría quedar hasta ahí, pero en ocasiones, la busqueda retornará resultados de directorios que no nos interesan. Entonces iremos un paso más allá en el filtro, con la siguiente opción de búsqueda.

Filtrando los resultados de búsqueda: excluyendo directorios

Si, por ejemplo, hacemos una busqueda desde el directorio raiz (/) el resultado arrojará archivos modificados en los directorios /proc /var /sys, entre otros, que en la mayoría de los casos no son de interés ya que son directorios de sistema y no de una aplicación. Para filtrar los directorios "indeseados" usamos la opción -prune

Excluyendo un directorio

Para excluir solo un directorio ocupamos la opción prune con el flag o, como se muesta a continuación:

$ find / -path /proc -prune -o -cmin -30

Esto buscará en el directorio raiz (/) todos los archivos modificados en los últimos 30 minutos, excluyendo los que están el el directorio /proc

Excluyendo varios directorios

Para excluir varios directorios, listamos los directorios entre paréntesis, pudiendo añadir todos los directorios que queremos excluir

$find / \( -path /proc -o -path /sys -o -path /run -o -path /var \) -prune -o -cmin -30

Esto buscará en el directorio raiz (/) todos los archivos modificados en los últimos 30 minutos, excluyendo los que están el los directorios /proc , /sys , /run y /var



viernes, 22 de marzo de 2019

Como usar Atom con GitLab integrado

En un artículo anterior comentaba como configurar Atom con GitLab. Este artículo trata de como usar esa integración.
Para ello descargaremos el cliente Git, para luego clonar un repositorio localmente y finalmente configurar Atom para usar ese repositorio y actualizar Git directamente desde Atom.

Descargar cliente Git

Si no tienes un cliente Git puedes descargarlo desde https://git-scm.com/downloads. Simplemente lo descargas e instalas. Elige tu sistema operativo (ver imagen) e instálalo.

Clonar repositorio remoto

Una vez instalado el cliente Git, abres la aplicación GIT GUI y eliges clonar un repositorio.
Asumiremos que existe el repositorio sobre el cual quieres trabajar. Si no existe deberás crear un nuevo repositorio en vez de clonarlo.
Git Gui
En la pantalla de clonar el repositorio deberás ingresar la fuente remota (Source Location) y el destino local (Target Directory) en donde bajarás tu código. La imagen "Git Gui" muestra un ejemplo de estos valores.
Con las rutas elegidas, das click en Clone, lo cual tardará un tiempo dependiendo del tamaño del repositorio remoto y tu velocidad de conexión.  


Source location
Nota: Si no conoces la fuente remota (Source Location), debes ir a GitLab y ahí eliges tu proyecto, luego eliges detalles y das click en el botón derecho que dice Clone, tal como es ejemplifica en la imagen lateral: "Source Location". Usa la dirección "Clone with HTTPS" como "Source Location".




Abir el repositorio en Atom

Con el repositorio clonado, vamos a Atom finalmente elegimos File --> Add Project Folder y navegamos hasta la carpeta donde está nuestro repositorio clonado para abrirla. Con esto abriremos la carpeta donde clonamos el proyecto.
Modificaremos o agregaremos archivos (tal como lo hacemos normalmente trabajando) y cuando terminemos elegiremos del menú Packages --> GitHub --> Toggle Git Tab. Ahi veremos nuestro archivo como Unstaged, tal como se muestra en la imagen. Lo podemos añadir manualmente o simplemente elegir Stage All.
Agregamos un Commit message y damos click al botón Commit to master (o a otro branch si corresponde).
Para terminar, damos click en la opción de Publish, que está disponible en la parte inferior derecha de Atom, tal como se muestra en la imagen destacado en un cuadro rojo.

En resumen

Ahora, cada vez que deseemos actualizar el repositorio en GitLab, solo tenemos que hacer commit y publish desde Atom directamente. Dos simples pasos que nos garantizan seguir todo el proceso de branches que estemos manejando para nuestro proyecto.


GitLab con Atom integrado para devops

Usualmente buscamos herramientas livianas para el trabajo de integración del día a día en devops. Sin embargo cuando se trata de integrar con GitLab (salvo linea de comandos) todas las soluciones tienen un peso considerable, complicando el escenario. Afortunadamente hay algunas opciones, entre ellas Atom.

Atom editor

Atom es un editor de código muy bien catalogado. Está con evaluación 4.4 (de 5) en g2crowd https://www.g2crowd.com/products/atom/reviews . Además que es muy fácil de usar, es muy liviano, se integra con muchas herramientas y contiene un largo numero de paquetes, lo cual lo hace altamente customizable, o como dice Atom: Un editor de texto hackeable para el siglo 21. https://atom.io/ Otra tremenda ventaja es que es gratis. Con todo lo anterior, es mi editor preferido.

Instalar editor y acceso a GitLab


Para comenzar lo primero es tener el editor instalado. Lo puedes descargar desde el sitio de Atom. También necesitas una cuenta en GitLab. Si no tienes cuenta, puedes registrarte gratis en https://gitlab.com/users/sign_in#register-pane

Crear un token en GitLab

Un token es requerido para que Atom pueda acceder a GitLab. Es literalmente la llave de acceso. Puedes crearlo en GitLab directamente, bajo "User Settings" en "Access Tokens". O ir directo a https://gitlab.com/profile/personal_access_tokens
Este token debe incluir API, entonces selecciona SCOPES/API al momento de crearlo, tal como se muestra en la imagen lateral.
Al momento de crear este token, aparecerá un mensaje: "Make sure you save it - you won't be able to access it again." En otras palabras, debemos copiar el código del token de una vez, ya que después no será accesible. Así que cópialo y guárdalo en un lugar seguro.

GitLab integration

Ir a configuración de gitlab-integration
Uno de los tantos paquetes disponibles para Atom es justamente para la integración con GitLab, llamado tal cual: GitLab integration, disponible en https://atom.io/packages/gitlab-integration
Para usarlo, simplemente vas al link de descarga y selecciona install. El paquete se descargará y abrirá Atom editor para realizar la instalación.
Una vez instalado, vas a la configuración de Atom (File --> Settings) eliges Packages y bajo Gitlab-integration eliges Settings, como se muestra en la imagen de "Ir a configuración de gitlab-intetration".
Ingreso del token en gitlab-settings

Ya dentro de Settings aparecerá la opción "Gitlab API token", en donde podrás ingresar el token generado en GitLab, en el paso anterior, tal como se muestra en la imagen "Ingreso del token en gitlab-settings".

Con esto ya está listo, está configurado e integrado. Ahora el usarlo, lo cual es parte de mi siguiente publicación.


Notas:
- He elegido hacer publicaciones más cortas, para facilitar la lectura.
- He optado por hacer publicaciones en español, dado que aun es escaso el material en este lenguaje




miércoles, 6 de marzo de 2019

Cisco AnyConnect, generar una lista de VPNs

Introducción

Si te conectas a una VPN, es muy probable es que ya estés usando Cisco AnyConnect. De ser así, sabrás que la tienes con un perfil predeterminado y simplemente le das a conectar e ingresas tus credenciales. Todo funciona bien, hasta que te encuentras en la situación de que usas el mismo cliente para acceder a más de una VPN. Cuando tienes varias VPN a las
El objetivo de este blog es mostrarte como grabar estas direcciones y hacer tu vida un poco más fácil.
que quieres ingresar, te darás cuenta que el cliente no es muy amigable y debes cambiar manualmente la dirección a la que buscas conectarte cada vez. Si haces esto frecuentemente, entonces la situación se vuelve un poco molesta, sobre todo memorizando distintas URL de conexión.

Como configurar AnyConnect para usar una lista de perfiles

Cisco AnyConnect buscará un archivo profile.xml en la carpeta "C:\ProgramData\Cisco\Cisco AnyConnect Secure Mobility Client\Profile" Entonces, lo primero será crear el archivo profile.xml (si no existe) dentro de esta carpeta.

Es muy probable que esta carpeta (ProgramData) esté oculta, entonces debemos pegar la dirección en el finder, para ingresar en ella.
Elegimos nuestro editor preferido (puede ser notepad.exe) y editamos el archivo profile.xml dentro de esta carpeta.
Este archivo (profile.xml) puede ser muy extenso y contener variadas definiciones. Acá estamos haciendo una lista de servidores (ServerList) que tiene una serie de entradas (HostEntry). Por cada VPN que buscamos acceder, agregaremos una nueva HostEntry, como se muestra en el ejemplo.


Variables principales de profile.xml

En este ejemplo tenemos tres variables definidas para cada HostEntry:
Ejemplo de profile.xml

  • User: nombre de usuario
  • Hostname: Es un nombre cualquiera, para identificar mi VPN de la lista. Suele ser el mismo que HostAddress, aunque no es necesario
  • HostAddress: Es la URL de conexión, no es solo el nombre del host, sino que el path completo, como se ve en el ejemplo
Finalmente, con estos datos grabamos el archivo y abrimos Cisco AnyConnect. Nota: Si estaba abierto AnyConnect, debemos cerrarlo y luego abrirlo nuevamente, para que tome estos valores.



miércoles, 1 de agosto de 2018

Microsoft Azure VPN ya no soporta TLS 1.0 ni TLS 1.1

A partir de este 1 de Agosto del 2018, Microsoft ya no soporta conexiones de VPN que usen TLS 1.0 ni TLS 1.1. Solo TLS 1.2 es soportado, dejando a los usuarios de Azure con problemas de conectividad.

Para resolver esta situación es que seguiremos estos pasos:
  1. Instalar parche de actualización de seguridad
  2. Modificar registro (registry) de Windows
  3. Actualizar el catálogo de Windows
Nota: Esta restricción no afecta a los usuarios de Windows 10.

Instalar parche de actualización de seguridad


Hay una actualización de seguridad de Microsoft que es necesario instalar. Está bajo el "KB Articles: KB2977292".

Al ingresar a este link, debes bajar el parche para tu sistema operativo en particular. No hay parche para Windows 10, porque Windows 10 no está afectado por esta actualización dado que incorpora en forma base TLS 1.2.

Es importante considerar que el idioma del parche seleccionado debe ser "el mismo del sistema operativo". O sea, si Windows está en inglés, aunque tu idioma sea español, elige el parche e inglés y no en español.

Una vez actualizado, deberás reiniciar tu computadora y seguir con el siguiente paso, de modificar el registro.


Modificar registry


Debes seleccionar inicio en Windows y digitar "regedit" y luego presionar "enter". Con esto abrirás el editor de registro.
Desde el editor de registro ve a la ruta "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\RasMan\PPP\EAP\13"

Crear registro DWORD (32-bit) TlsVersion 

Selecciona "Edición", "Nuevo", "DWORD (32 bit) Value" y asignale el nombre "TlsVersion"
Da click en el nuevo registro y selecciona "Modificar". Luego ingresa el valor "c00" para ese registro.

Deberás reiniciar tu computadora nuevamente.

Microsoft Update Catalog

Como último paso, deberás actualizar el catálogo (KB Articles: KB3140245). Busca tu sistema operativo y descarga el catálogo respectivo. Lo debes instalar y reiniciar la computadora.




Una vez reiniciada la computadora podrás conectarte nuevamente a la VPN de Microsoft Azure sin problemas.




viernes, 1 de agosto de 2014

Acceso a discos NTFS en Mac (OS X) con permiso de lectura y escritura

Es usual tener un disco duro externo con una partición NTFS (usada por windows). Es el formato por defecto de Windows y además permite grandes archivos, lo cual no es posible con FAT32.
Ahora bien, cuando conectamos ese disco a nuestro Mac, lo podremos leer, pero no podremos grabar en él (gran problema). Elemento curioso si pensamos que Mac soporta NTFS, pero por alguna razón no han actualizado el sistema para que pueda grabar, por defecto.
Para este problema existen varias soluciones. Programas como Tuxera o MacFuse. Sin embargo es posible hacerlo sin instalar ningún programa externo, a través de unos simples comandos que explico a continuación.

Acceso de lectura escritura de NTFS en Mac


  1. Nombre del disco. Partamos por detectar el nombre del dispositivo. Imaginemos, como en este caso, que el disco externo se llama Data, tal como se muestra en la imagen lateral.
  2. Terminal. Vamos a Spotlight y digitamos Terminal. Con esto abriremos una ventana para ingresar los comandos a continuación.
  3. fstab. Abriremos el archivo /etc/fstab con un editor como nano o vi. Para eso digitaremos el siguiente comando:
  4. Editor nano. si quires usar el editor nano, simplemente cambias vi por nano: sudo nano /etc/fstab
  5. El sistema pedirá tu clave. La ingresas para ver el archivo
  6. En el archivo digitas:     LABEL='nombre-unidad' none ntfs rw,auto,nobrowse
         
  7.  Recuerda cambiar 'nombre-unidad' por el nombre de tu disco, como en este caso DATA.
  8. Si estás en vi presionas escape, dos puntos y X (ESC : x), una tecla a la vez, para salir y grabar. Este enlace entrega información de lo básico para usar vi.
  9. Link dinámico. Antes de terminar, creamos un link dinámico apuntando al directorio Volumes, ya que el volumen no será mostrado en el escritorio. Ingresamos el siguiente comando:
  10. Reiniciar. Finalmente podemos desmontar el disco y montarlo nuevamente, usando la aplicación de utilidades de disco, que podemos abrir desde Spotlight, o bien (más fácil) podemos reiniciar el computador (recomendado).
  11. Regresando al estado original. Si quieres volver al estado original, puedes simplemente eliminar la linea creada en /etc/fstab, borrar el archivo o renombrarlo: 
Recuerda que siempre es bueno tener un respaldo. A pesar de que este procedimiento es bastante simple (mucho más de lo que parece) ya que solamente estaremos montando el disco (accediendo) de forma diferente. Ten presente que si no estás seguro, mejor no lo hagas y usa una solución disponible, como las mencionadas al principio de este post.

Notas: Probado con OS X 10.9.4 (Mavericks)