RSSAmplifier

Blog

Cloud Alchemist

Personal blog with emphasis on cloud-native technologies, by a Senior DevOps Engineer experienced in AWS, Kubernetes, Terraform, ArgoCD, and NixOS.

sbulav.github.ioRSS feed ↗102 posts

Latest posts

jira-oil.nvim — Edit Jira like a Neovim buffer

As a team lead, managing and creating Jira tasks is something I have to do on a daily basis. Jumping between the code in my editor and the Jira web interface often breaks my flow, so I've spent a lot of time looking for a better way to handle my backlog. Over the years, I've tried multiple…

How I record clean GIF demos for Neovim plugins

When I released jira oil.nvim, I wanted a demo that looked clean and was easy to maintain. At first it sounded simple: open Neovim, do a few actions, record screen, publish GIF. In practice, there were three problems: 1. I could not expose real Jira issues from work. 2. Recording a good GIF from a…

Post #100 and a full blog redesign

This is the 100th post on this blog. I wrote the first one on April 15, 2020, mostly to see if I'd stick with it. Turns out I did, almost six years and a hundred posts later. To celebrate post 100, I decided to rebuild the entire site from scratch. Why redesign now The blog has been running on…

Calico Network Policy Visualiser

At work, we use Calico network policies extensively. Between NetworkPolicy and GlobalNetworkPolicy resources across multiple clusters, keeping track of what's allowed and what's blocked gets complicated fast. Reading raw YAML works when you have one simple policy, but once you're dealing with…

snacks-tea.nvim — Forgejo integration for Neovim

Lately, I’ve been spending most of my time working with Forgejo — a great self hosted Git service I use for both personal and work projects. Since almost all my coding happens inside Neovim , I rely heavily on a tight workflow between my editor and Git hosting. I’ve been using folke/snacks.nvim for…

TIL - WebRTC landing page for testing webcam and screen sharing

I discovered a useful WebRTC testing page created by Mozilla: https://mozilla.github.io/webrtc landing/gum test.html. This page is designed to demonstrate and test the getUserMedia (gUM) API — part of the WebRTC suite of browser APIs that let web applications access a user's camera and microphone…

Running Rootless Forgejo Runners in Kubernetes on Ubuntu 24.04

Forgejo is a self hosted Git service that provides a powerful CI/CD system through Forgejo Actions. However, running Forgejo runners in Kubernetes, especially in rootless mode, presents several challenges that require careful configuration. In this post, I'll walk you through setting up rootless…

Obsidian Sync Between Devices Using Nextcloud

I've been using Obsidian for managing notes across multiple devices for a while now. Initially, I relied on remote sync via Yandex Disk, mostly because it was convenient and free. However, recently I've encountered significant issues with it, primarily due to frequent HTTP 429 "Too Many Requests"…

(Re)Packaging Linux/Mac Kontur Talk Application with Nix

Our company recently decided to transition from Zoom to Kontur Talk (ktalk) for voice and video communications. Kontur provides official application packages as Linux AppImage and macOS DMG files, but to ensure consistency across developer workstations running both Linux and macOS, I set out to…

Understanding ZFS-ZED Service Failures on NixOS

Understanding ZFS ZED Service Failures on NixOS I'm running NixOS with ZFS, and couple timed during updates I've faced an issue with the ZFS Event Daemon ( zfs zed ) service. A typical error message looks like this: Why Does This Happen? When the Linux kernel updates on NixOS, the corresponding ZFS…

Using renovate to update Nix flakes

Renovate is an essential tool for managing dependencies automatically. Integrating Renovate with your Nix Flake based project ensures timely updates, maintains security, and keeps your project streamlined. Here's how to onboard your repository and configure Renovate effectively. Step by Step…

Switching from nil to nixd Language Server for Better Nix Development Experience

I was using nil language server for a while, and it was working fine. However, after a great video from vimjoyer's new video nixd seems to have more features, as it is in very active development state right now. Among the killer features for me was options auto completion. While vimjoyer did a…

Running testcontainers in Kubernetes with KubeDock

Testcontainers is great framework for replacing complicated mocks in tests with the real dependencies like databases, message queues, etc.. in containers. Developers love this framework, and it's really easy to get it running on the local machine. However, running testcontainers in Kubernetes, as…

Validating Gitlab CI in Neovim

I really enjoyed using nvim jenkinsfile linter when I was writing Jenkinsfiles. Simple yet useful, this plugin helped to speed up writing Jenkins pipelines as I didn't have to to Jenkins Web UI to check if my pipeline is correct. Now I'm writing Gitlab CI, and I couldn't find any plugin with such…

Fingerprint Authentication with fprintd on NixOS

Introduction If you're running NixOs on your laptop, and your laptop have fingrerprint scanner, it can be very convenient to use it for authentication. I couldn't find any articles on setting up fprintd on NixOS, so I'll share how I've done it. I am using regreet for my login manager, and, while it…

Nix Colemak-DH layout

NixOs is gaining a lot of attentions right now. I've also decided to try to use is as my daily driver. I won't go into the details of installation of nixos, or setting up flake. Check out Introduction to Nix & NixOS free ebook and Nix starter configis As I use Colemak Mod DH layout, this was must…

Vim numbered lists

When writing markdown, it's super common that you need numbered lists. (Neo)Vim has built in support which makes creating numbered lists like a breeze. Making a list of numbers article covers many approaches to creating lists, but it's hard to find the true gem automatic numbering. See :help v g…

Testing Infrastructure as Code: How to Solve The Common Challenges

If you're interested in Testing Infrastructure as Code, join me Feb 27 2023, 1:00pm with the By watching this webinar, you will learn: The importance of testing infrastructure code with Terraform How to use TFTest to test your devops infra modules Techniques for running tests in parallel and…

Truenas Scale UPS reporting

I continue my adventures with TrueNas Scale. After configuring UPS I wanted to see the UPS graphs on the reporting page, but they were empty. As it turns out, now reporting for UPS is broken, and you have to dig deep to make it work due to the following reasons: CollectD Debian maintainers disabled…

Truenas Scale monitoring Huawei UPS2000G

To protect my TrueNas Scale installation from power outage, I bought a UPS. I had a good deal on Huawei UPS2000G, and considering that it's an online UPS it was a no brainer for me. However, with all it's advantages, it has some drawbacks: Pretty loud fans, which doesn't make it a good fit for home…

Truenas Scale configure kubectl k9s

TrueNas Scale uses k3s, which is a lightweight Kubernetes distribution. It's intended to be used only as platform for APPS, but I don't see why you can't use it as your playground. Connecting to TrueNas k3s locally This way you connect to k3s locally, which is more secure than exposing your…

Truenas scale install fish

Recently I bought a server that I will be using as NAS/HomeLab. My OS of choice for this server is TrueNas Scale. It's a great OS with a polished web interface, but for HomeLab you want to play around with it and customize a lot of things. So I thought that I'll write a series of blog posts sharing…

GitOps Certified for Argo II

I've passed the course GitOps at Scale and follow up exam: This is a second course on ArgoCD. It has short and precise materials, useful pieces of advice on deploying and managing ArgoCD. The team did a great job on this course! During this course you'll learn: How to manage external clusters with…

TIL - Terraform refactor resources without recreation

Today I learned that since v1.1 , you can move Terraform resources into modules without recreation using moved block. Refactoring doc covers such use cases as renaming resources, enabling count or for each and splitting module into multiple modules. But this doc don't cover my use case, move one or…

TIL - Kubectl integrated Kustomize

Today I learned that since 1.14, 'kubectl' has Kustomize integrated in it: I don't know how I've missed this change, but it's nice to know. More info: Declarative Management of Kubernetes Objects Using Kustomize

Monitoring Calico with kube-stack-prometheus

Monitoring of each Kubernetes component is very important, and Calico is not exception. Today I learned that Calico provides capabilities to export Prometheus metrics out of the box. However, Official documentation is a bit misleading and examples from it doesn't work with Prometheus installed via…

Neovim opening GitHub repos URLs

I have a very useful mapping in my Neovim: gx , which opens the URL under the cursor in the browser. I even wrote a blog post on it: Neovim Opening URLs This blog post is a bit outdated,especially with the newly introduced way of setting up mappings through vim.keymap.set , but still works like a…

TIL - Adding maps to Github markdown files/blog posts

Today I learned that you can embed maps in geoJSON and topoJSON format into your markdown files. For example, you can select desired area in the geojson.io, copy the code and embed it like this: This snippet will be rendered automatically in your markdown files. To paste this in GitHub Pages, use…

Passed a few free Kubernetes Certifications

I've passed some free courses and corresponding certifications, which I find pretty useful. Certified Calico Operator: Level 1 CCO L1 course will arm you with the knowledge you need to understand how Kubernetes networking works, how to configure and manage a Calico network, and how to secure your…

Implementing Calico CNI on existing cluster

In one of our production clusters, we've faced the issue of depleting the IP addresses, due to how ENI assigns and reserves IP addresses. You can check out ENI Max Pods for the numbers. The most obvious choice is to use a different CNI plugin for the EKS, with Calico being the most popular one.…

Signing Git commits in NeoVim

While all commits to GitHub through the web interface are automatically signed, you have to do some configuration to make it work in the console. Signing Git commits might be a requirement for your job, OpenSource maintainers might only accept signed contributions or you might just want to increase…

TIL - Keda and DataDog don't work together

Today I learned that Keda and DataDog don't work together. I was trying to implement automatic scaling based on the AWS SQS Queue. While according to the Scaler Documentation, everything should work, I kept receiving weird error messages. After some in depth investigation, I’ve figured out that…

Two years to the blog

Today marks two years of this blog. I wrote my first post on this blog on 2020.04.15. For two years, I wrote 73 posts, some of which become popular. In this post, I'll share some statistics about my blog, and I will use Google Analytics for that. Audience My audience slowly grew from zero, recently…

Improving work with Terraform in Neovim

Working with Terraform on a daily basis and using Neovim as my main and only editor, I recently figured out a few improvements, which I'll share in this blog post. Correctly detecting TF filetype Many users of NeoVim use filetype.nvim, which replaces native filetype detection and speeds up Neovim…

Becoming Packt's technical reviewer

I've became a technical reviewer for the book Kubernetes – An Enterprise Guide Second Edition Today I've received my printed copy of the book: I thought that I should share my thoughts if it's worth it. When you agree to became a technical reviewer, you sign a contract with Packt. For me, the…

TIL - Neovim automatic highlighting references with LSP

Today I learned a pretty cool LSP feature automatic highlighting of references for the current text position: To make it work, a few requirements have to be met: Your LSP must support such capabilities Your colorscheme must support highlight groups defined Make it work by introducing autocommands…

Participating in Digital Ocean Kubernetes Challenge

When I saw that Digital Ocean @digitalocean is organizing a Kubernetes Challenge I decided that I'll participate. The idea behind the challenge is pretty cool you pick one of the proposed scenarios, DO give you some credit to implement this scenario, you create a write up describing your…

TIL - Neovim lsp uses tag stack

When you use Neovim LSP functions like vim.lsp.buf.definition() or vim.lsp.buf.implementation() , your cursor jumps to the corresponding position. Your previous position is added to the jumplist. However, if you start jumping around, your jumplist quickly becomes populated with irrelevant jumps and…

Kubernetes debug autoscaler issues

To understand what's going on on the market, it's useful to apply to open positions from time to time. This provides an opportunity to: figure out your weak spots understand fair pay for your skills and knowledge solve interesting technical challenges One of such interesting technical challenges…

TIL - Adding mp4 mov to Github markdown files/blog posts

In the beginning of 2021, Nat Friedman announced that Video files that you drop onto markdown files are now automatically embedded! While that sounded pretty cool, there were 2 things which didn't let me try this feature: 1. All demos showed that .mp4 files were added to the README.md, so I thought…

GitOps Certified for Argo

I've passed the course GitOps Fundamentals and follow up exam: The course is free, and all you need to pass the Exam is some time and patience. The course gives some insights how ArgoCD and Argo Rollouts works. In a simple way. Even if you never worked with ArgoCD you'll be taught how to install…

Neovim enhancing completion with TabNine

While everyone is hyped about GitHub's Copilot, I've discovered TabNine, an AI completion that I enjoy a lot. When Copilot is aiming to write the whole function for you, TabNine just tries to intelligently complete the current line. Furthermore, the current implementation of Copilot for vim looks…

TIL - Conventional Commits

In my daily work, I try to use sane commits messages. Here's a typical example of my commit messages: While they're make sense, there's a better approach to writing commit messages. Today I learned that there's a whole specification for writing Conventional Commits. They provide a nice and…

Neovim setting up snippets with luasnip

I've wanted to start using snippets for a while, but never actually invest time into figuring out how snippets work. The idea to expand blocks of text/code just but pressing a few key strokes seems very interesting. At the time of writing, there's a good amount of snippet plugins available for…

TIL - Kubernetes slow PV mount

During my investigation of Pods taking a long time to start (20+ minutes) I saw following message in Pod's logs: I figured out that PVs are unavailable for reattaching as, due to enforced fsGroup , every time before mounting PV, SetVolumeOwnership() is run against the volume. For small volumes,…

Using ArgoCD with Azure ACR

If you want to feel the taste of the GitOps approach one of the best tools on the market at the moment is ArgoCD. It has all the features you'd like to see from such tool and is stable enough to use it in production. As I'm a huge fan of Helm, the ability to deploy Helm charts is a killer feature…

TIL - Helm chart-testing custom values

Testing your changes to the Helm chart is a must if you want to minimize the risk of failure. There are a set of techniques, which you may use to validate your chart: Running helm lint Running helm template Running helm upgrade dry run against real installation Installing helm chart to Kubernetes…

TIL - Helm respect current replicas

When you upgrade deployed Helm chart, you probably have replicas defined in values or pass it through set . But sometimes it's useful to respect the current amount of replicas, for example: If you're using Horizontal Pod Autoscaler If you're managing replicas through external automatization/script.…

Neovim Telescope Github plugin

As an active user and developer of Github Actions, I spend a lot of time watching how the run goes on and reviewing logs of unsuccessful runs. So far I had to constantly hop between Neovim and Browser with opened runs. I was looking into how my workflow can be improved and usage of CLI tool gh was…

TIL - Learning github script

If you're managing a lot of GitHub repositories you're probably using GitHub Actions. One extremely powerful action is github script. Using this script you can access any of GitHub APIs to do such things as modify repository permissions, manage GitHub App Installations, spread secrets, and many…