Here’s a list of all the projects I’m working on. I’ll try to keep this list updated as much as possible. All of them link to GitHub. To see the most up-to-date information, consider checking out my work on GitHub.
All of the projects will show:
Let’s get into it!
kubectl-slice
: a YAML slicer for Kubernetes language Go technologies Go, Kubernetes, YAML
kubectl-slice
is a nifty and small Go application that takes in a multi-YAML file and slices them into individual files (you know, those YAML files that are separated by triple-dashes). It becomes super useful when you have multiple YAMLs in a single file, and you want to apply them individually, slice a specific kind out – like grabbing only type: Deployment
resources – or just to make it easier to read.
It’s available to install by downloading the binary directly from the Releases section, or you can also use krew
to install it via kubectl krew install slice
.
Used in the following places:
Thanks a lot to these organizations for using my software in an open source manner. Several private companies also use kubectl-slice
but they cannot be listed here due to obvious reasons.
kpt
tool (repo) (use)Link: kubectl-slice
http-server
: a simple HTTP server language Go technologies Go, Linux, Markdown, HTML
http-server
is a tiny Go application that allows you to expose a directory on your machine (or the machine where you’re running the application) as a web server. If an index
file is encountered (like an index.html
or index.htm
file) then the file is served instead. In fact, you could serve this entire Hugo-powered blog with http-server
.
The server can run standalone (as a single binary) or as a Docker Container via GitHub container registry: ghcr.io/patrickdappollonio/docker-http-server
. At the time of writing this page, the Docker container alone has over 208,000 pulls.
It supports a handful of nifty tricks like the ability to provide a directory listing if no index
file is found, or markdown rendering if there’s a README.md
file in the directory, or basic customization of the page’s architecture like title, links or even a banner message, or full air-gap support, so no request is being made to the internet: super useful for when you’re in an environment that doesn’t have internet access.
Authentication support via basic auth or using JSON Web Tokens is also supported, as well as providing CORS headers if needed.
Super easy to use and maintain and happy to take any request in its repository! Feel free to open an issue if you don’t see a feature you might need.
Used in the following places:
The following open source repositories use http-server
to serve their content. Additionally, some companies still use http-server
internally.
Link: http-server
wait-for
: wait for TCP resources before continuing language Go technologies Go, Docker, Kubernetes
wait-for
is my own version of another very popular tool to wait for TCP resources (such as a database to be up) before continuing. I wrote extensively about it here, but in short: give it a TCP hostname and a timeout, and the app will wait and exit-code-zero if the resource is available, or exit-code-one if the resource is not available: super useful to be used as an initContainer
in Kubernetes, for example.
In use by the following organizations:
Link: wait-for
These projects are smaller in size than the previous ones, but they still deserve a place in this list.
tabloid
: your kubectl
and docker
CLI output parser language Go technologies Go, Docker, Kubernetes, Linux, Shell
tabloid
was born out of a need: I spent way too much time looking at docker
, kubectl
and other CLI outputs, that I wanted to have a way to parse the columns printed by these CLIs into a software that would allow me to filter, sort and search the output, or even decide what columns I want to print.
I ended up learning a lot about awk
, but for long outputs (longer than 80 characters or where lines are really, really long), awk
will not regenerate the columns, and you’re left with a huge amount of empty space which makes it difficult to read for humans.
Yes, it’s true that some of these tools have JSON outputs that could be used to parse and process the output into better outputs, with filtering and all, but you would have to remember a tool to filter, sort and search the JSON outputs, then another tool to render your new JSON in the columns you want. That was too much for me!
Link: tabloid
tgen
: a Consul templates-like template tool language Go technologies Go, Go Templates, Linux, Shell
tgen
was born out of a personal need: every now and then I would need to work with Consul Templates, but I didn’t want to install the whole Consul stack just to use the templates. I wanted something that was small, fast and easy to use. That’s how tgen
was born: a very simple Go application that uses Go templates to render content.
From there, it morphed into a tool I use quite often. I’ve added Helm-like processing (so even a values.yaml
file would work). Its core feature is on pulling data from the environment as well, and fail if the environment, for example, did not provide the required configuration. I’ve used it in scenarios like YAML templating to standard Linux configuration (like Nginx configuration files).
Over 2.5k downloads (at the time of writing this) vouch for it!
Link: tgen
dotenv
: your environment variables’ best friend language Go technologies Go, Linux, Shell
Inspired by another few tools with the same name and behaviour, dotenv
is a simple tool that allows you to load environment variables from a file. It has a few cool features like the ability to create a folder in your home directory where you can have multiple environment variable files, and then load them by name. The environment variables can also provide a command to run, as well as a strict mode that will remove any environment variable that is not defined in the file (with the exception of a handful required like $HOME
and $PATH
).
My most useful tool on a day-to-day basis is to have OpenStack credentials stored in files and loaded using dotenv
. Similar situation with some AWS credentials.
Link: dotenv
google-analytics-reverse-proxy
: a proof of concept to hide/bypass ad blockers language Javascript technologies Cloudflare Workers
Now, don’t hate me for this one. This is a simple project that aims to see if it’s possible to proxy the Google Analytics tracker code using something like Cloudflare Workers. And the answer is yes, it is possible. It works for any script from before Google Analytics 4 (GA4). It will rewrite the Javascript code, on-the-fly, and allow you to track people even if they have an ad blocker installed.
Keep in mind its use though: Google Analytics is not GDPR compliant, and you should not use it to track people without their consent. This is just a proof of concept, and I don’t recommend using it in production.
Link: google-analytics-reverse-proxy
language Go technologies Go, Cloudflare, GitHub Actions
As an avid user of Cloudflare and their globally distributed CDN, I often see myself publishing new content and having to clear the cache manually when the cache is configured to aggressively cache content at the edge. I wanted to automate this process, and so I did. This tool allows you to clear the cache of an entire website using the Cloudflare API.
The tool can also be used as a GitHub action, considering GitHub Actions can be run off Docker Containers. Instructions on how to set it up both as a standalone binary, as a Docker image or as a GitHub Action can be found in the README.
Link: cloudflare-cache-purger
kubernetes-guestbook
: my personal implementation of the backend software language Go technologies Go, Docker, Kubernetes, Redis, SQL Server
Kubernetes has an official application to test environments and deployments to a Kubernetes cluster called guestbook
. It’s written in PHP and only supports Redis as a backend, as long as it’s a Redis Cluster.
My copy is a full rewrite of the Guestbook, but in Go, with support for multiple backend types, not just a Redis Cluster: in fact, it was written to support a standalone Redis instance, which is super useful when the clustering is done by a proxy on top of Redis. SQL Server support was added as a proof-of-concept while I was migrating a well known Canadian bank to Google Cloud.
Link: kubernetes-guestbook
localized
: find the user’s language off system settings language Go technologies Go, Multi-architecture, Cross Compilation
localized
is a Go library that allows you to detect the language of the Operating System where you’re running it. It uses environment variable details on Unix environments, and on Windows, it uses Windows API calls to get the language of the system. It supports providing a default language in case the detection doesn’t yield useful results.
Link: localized
crd-controller-tutorial
: a barebones training on Kubernetes CRDs and Operators language Go technologies Go, Kubernetes CRDs, Kubernetes Operators
At one of my previous jobs, I had to provide a quick training on how Kubernetes Operators work, from the bare-minimum for things like where to get Tokens, how to access the Kubernetes API from inside the operator, how to query and retrieve resources, how to add new resources to the Kubernetes ecosystem and more. This repository is a proof-of-concept for the training where I add a todo
(as in To-do list) resource to Kubernetes and render it through a Deployment.
The process does not use the Kubernetes Go SDK and instead it focuses on using bare-bones access to these resources. It’s a great way to learn how to build your own Kubernetes Operator.
Link: crd-controller-tutorial
haproxy-log-parser
: better output of HAProxy access logs language Go technologies Go, HAProxy
At a previous company, I had to skim through a lengthy list of logs collected from multiple nodes that had HAProxy running as a reverse proxy. One of the scenarios I had to deal with was to analyze the biggest consumers of HTTP requests and bandwidth, but to do that easily, I would had to submit my logs to a third-party service, which I didn’t want to do.
This app allows you to read one or many logs, and render them in a human-readable way.
Link: haproxy-parser