Importar un proyecto existente en Terraform
En ocasiones podemos encontrarnos con proyectos Google Cloud ya existentes que no han sido nunca gestionados mediante Terraform, con lo cual si queremos empezar a usar ésta herramienta necesitamos importar el proyecto (y sus recursos, o al menos todos los posibles) a nuestra nueva configuración de Terraform. Para llevar a cabo esta operación hay que seguir los siguientes pasos: Crear nueva configuración de Terraform Lo primero que debemos hacer es crear una nueva configuración en Terraform para el proyecto existente. Podemos hacerlo creando un nuevo directorio: ...
Tipo `ENUM` en PostgreSQL
Ver todos los ENUMs registrados en la base de datos SELECT * FROM pg_type WHERE typcategory = 'E'; Ver todos los posibles valores para un ENUM determinado Suponiendo que nuestro ENUM se llame “status”… SELECT unnest(enum_range(NULL::status));
Funciones JSON en PostgreSQL
Acceder a un campo en una columna JSONB Supongamos que tenemos la tabla items, con la columna properties que es una columna JSONB con una fila que contiene estos datos: { "datetime": "2023-05-02T11:28:29.341176", "name": "Item 32", "type": "Petrol Engine", "price": 1043.25 } Si quisíéramos acceder al campo name del item con id 12345, la consulta sería: SELECT id, properties->>'name' FROM item WHERE id = 12345; Modificar valor de un campo en una columna JSONB Si en la columna mencionada anteriormente quisiéramos ahora cambiar el campo price de la fila de dicho item 12345, la consulta sería: ...
Backend personalizado de XCom para Airflow
Ésto fue lo que hice para implementar un backend de XCom para Apache Airflow que guarda los datos en un bucket de Google Cloud Storage. La implementación es flexible, de manera que podemos especificar el nombre del bucket en una variable de Airflow XCOM_BACKEND_DATA_GCS_NAME y así desplegar múltiples instancias de Airflow o de Cloud Composer, cada una con su bucket definido en sí misma. Como éste ejemplo se trata de una instancia de Airflow en GCP Cloud Composer, la conexión al bucket mediante IAM ya está definida por el propio Cloud Composer y por lo tanto no tenemos que hacer nada más que especificarla en el GCSHook: google_cloud_storage_default. Si estuviéramos ejecutando Airflow en algo que no fuera GCP, deberíamos arreglar ésto aparte y crear un usuario IAM para que Airflow pudiera acceder al bucket. ...
Aplicación en Docker con paquetes privados de GAR
En ocasiones, podemos necesitar acceder a entornos privados cuando estamos construyendo una imagen de Docker. Por ejemplo, instalar un paquete Python que está en un repositorio privado de Google Cloud Artifact Registry. Ésta referencia explica cómo hacerlo. Credenciales de Google Cloud Lo primero que vamos a necesitar son unas credenciales de GCP de una service account que tenga acceso a ese repositorio GAR privado. Una vez tengamos esas credenciales, que vienen en forma de un fichero JSON, podemos pasar al siguiente punto. ...
Configuración básica de shell `fish`
Instalación (Ubuntu/Debian) Para instalar fish shell en una máquina con SO Ubuntu o Debian, basta con el siguiente comando: sudo apt install fish fish-common Una vez finalizado el breve proceso de instalación, podemos configurar fish para que sea nuestra shell por defecto con el comando chsh, el cual nos presentará un diálogo como el siguiente: Changing the login shell for jose Enter the new value, or press ENTER for the default Login Shell [/bin/bash]: Introduciremos el valor para que nuestra shell sea fish: ...
Referencia de STAC API
A continuación se muestran una serie de peticiones que se pueden hacer a una API STAC para realizar determinadas acciones comunes. Éste documente pretende ser una referencia rápida para realizar peticiones de manera inmediata. Las especificaciones completas de STAC API están disponibles en GitHub. Ver Colecciones de datos curl -X GET "https://my-stac-api.com/collections" \ -H "Authorization: Bearer <API_TOKEN> Crear nueva Colección de datos curl -X POST "https://my-stac-api.com/collections" \ -H "Authorization: Bearer <API_TOKEN>" \ -d '{"id": "<NOMBRE_COLECCIÓN>", \ "type": "Collection", \ "license": "proprietary", \ "description": "<DESCRIPCIÓN_COLECCIÓN>", \ "stac_version": "1.0.0", \ "stac_extensions": [], \ "extent": {"spatial": {"bbox": [[-180.0, -90.0, 180.0, 90.0]]}, "temporal": {"interval": [["1970-01-01T00:00:00Z", null]]}}}'
Grabación de imágenes ISO en pendrive USB
Desmontar dispositivo USB Primero hay que asegurarse de que el dispositivo USB en el que vamos a grabar la imagen ISO está desmontado: udisksctl unmount --block-device /dev/sd<X> Grabar imagen ISO sudo dd if=/path/de/la/imagen.iso of=/dev/sd<X> El proceso puede durar unos minutos. Después de eso, el pendrive tendrá la imagen ISO grabada y podremos usarlo como disco de arranque, por ejemplo.
Comandos útiles de Git
Diff con estadísticas de directorios afectados por cambios Se puede ver qué porcentaje del total de cambios entre versiones corresponde a cada directorio mediante el uso de git diff con el siguiente comando: git diff --dirstat=files,0 <REVISIÓN> Donde: - files ordena a Git analizar los cambios teniendo en cuenta los ficheros afectados. Ésta es la forma computacionalmente más barata de sacar las estadísticas. Otras formas son cumulative y lines, que tienen en cuenta las líneas cambiadas y los cambios acumulados en subdirectorios, respectivamente. - 0 ordena a Git tener cuenta cualquier porcentaje de cambios, por pequeño que éste sea. De lo contrario, Git sólo analizará aquellos ficheros que tengan al menos un 3% de cambios. - REVISIÓN indica contra qué revisión del repositorio queremos comparar el estado actual. ...
Configuración de repositorios en Ubuntu
Listar repositorios configurados El siguiente comando nos mostrará una lista de los repositorios que hay configurados actualmente en nuestro sistema: apt policy La respuesta será más o menos: Package files: 100 /var/lib/dpkg/status release a=now 500 https://packages.microsoft.com/repos/ms-teams stable/main amd64 Packages release o=ms-teams stable,a=stable,n=stable,l=ms-teams stable,c=main,b=amd64 origin packages.microsoft.com 500 http://apt.postgresql.org/pub/repos/apt focal-pgdg/main amd64 Packages release o=apt.postgresql.org,a=focal-pgdg,n=focal-pgdg,l=PostgreSQL for Debian/Ubuntu repository,c=main,b=amd64 origin apt.postgresql.org 500 https://nvidia.github.io/nvidia-docker/ubuntu20.04/amd64 Packages release v=1.0,o=https://nvidia.github.io/nvidia-docker,a=bionic,n=bionic,l=NVIDIA CORPORATION <cudatools@nvidia.com>,c= origin nvidia.github.io 500 https://nvidia.github.io/nvidia-container-runtime/stable/ubuntu20.04/amd64 Packages release v=1.0,o=https://nvidia.github.io/nvidia-container-runtime,a=bionic,n=bionic,l=NVIDIA CORPORATION <cudatools@nvidia.com>,c= origin nvidia.github.io 500 https://nvidia.github.io/libnvidia-container/stable/ubuntu20.04/amd64 Packages release v=1.0,o=https://nvidia.github.io/libnvidia-container,a=bionic,n=bionic,l=NVIDIA CORPORATION <cudatools@nvidia.com>,c= origin nvidia.github.io 500 https://deb.nodesource.com/node_14.x focal/main amd64 Packages release o=Node Source,n=focal,l=Node Source,c=main,b=amd64 origin deb.nodesource.com 500 https://packages.microsoft.com/ubuntu/20.04/prod focal/main amd64 Packages release o=microsoft-ubuntu-focal-prod focal,a=focal,n=focal,l=microsoft-ubuntu-focal-prod focal,c=main,b=amd64 ... Borrar repositorio del sistema Se pueden eliminar repositorios que no necesitamos mediante el comando: ...