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.
kpttool (repo) (use)
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.htm file) then the file is served instead. In fact, you could serve this entire Hugo-powered blog with
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
These projects are smaller in size than the previous ones, but they still deserve a place in this list.
dockerCLI 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
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!
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!
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
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.
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.
google-analytics-reverse-proxy: a proof of concept to hide/bypass ad blockers
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.
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.
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.
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.
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.
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.