<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blogs on Nicolas Massé</title><link>https://www.itix.fr/blog/</link><description>Recent content in Blogs on Nicolas Massé</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Tue, 10 Jun 2025 00:00:00 +0200</lastBuildDate><atom:link href="https://www.itix.fr/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Running qemu-user-static with Podman</title><link>https://www.itix.fr/blog/qemu-user-static-with-podman/</link><pubDate>Tue, 10 Jun 2025 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/qemu-user-static-with-podman/</guid><description>&lt;p>Recently, I had to run ARM64 containers on a customer&amp;rsquo;s x86 laptop.
Easy, you might say: just install qemu-user-static on the laptop!
And you also have a ready-made container on Docker Hub, just in case!&lt;/p>
&lt;p>That&amp;rsquo;s it?
Not so sure&amp;hellip;&lt;/p></description></item><item><title>Behind the scenes at Open Code Quest: how I designed the Leaderboard</title><link>https://www.itix.fr/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/</link><pubDate>Tue, 05 Nov 2024 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/</guid><description>&lt;p>At the 







&lt;a href="https://www.itix.fr/speaking/red-hat-summit-connect-france-2024/">

Red Hat Summit Connect France 2024

&lt;/a>



, I led a workshop for developers entitled &amp;ldquo;&lt;strong>Open Code Quest&lt;/strong>&amp;rdquo;.
In this workshop, developers had to code microservices using Quarkus, OpenShift and an Artificial Intelligence service: IBM&amp;rsquo;s Granite model.
The workshop was designed as a speed competition: the first to complete all three exercises received a reward.&lt;/p>
&lt;p>I designed and developed the &lt;strong>Leaderboard&lt;/strong> which displays the progress of the participants and ranks them according to their speed.
Was it easy?
Well, not really, because I imposed a certain style on myself: using &lt;strong>Prometheus&lt;/strong> and &lt;strong>Grafana&lt;/strong>.&lt;/p>
&lt;p>Follow me behind the scenes of Open Code Quest: how I designed the Leaderboard!&lt;/p></description></item><item><title>Behind the scenes at Open Code Quest: how I implemented the Leaderboard in Red Hat Advanced Cluster Management</title><link>https://www.itix.fr/blog/behind-the-scenes-at-open-code-quest-how-i-implemented-leaderboard-with-acm/</link><pubDate>Tue, 05 Nov 2024 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/behind-the-scenes-at-open-code-quest-how-i-implemented-leaderboard-with-acm/</guid><description>&lt;p>After revealing the behind-the-scenes design of the Leaderboard for the &amp;ldquo;Open Code Quest&amp;rdquo; workshop during the 







&lt;a href="https://www.itix.fr/speaking/red-hat-summit-connect-france-2024/">

Red Hat Summit Connect France 2024

&lt;/a>



, it&amp;rsquo;s time to delve deeper into its practical implementation!&lt;/p>
&lt;p>In this article, I&amp;rsquo;m going to take you through the configuration of &lt;strong>Red Hat Advanced Cluster Management&lt;/strong> as well as the various adaptations needed to connect the &lt;em>Leaderboard&lt;/em> created earlier with the &lt;strong>Open Code Quest&lt;/strong> infrastructure.&lt;/p>
&lt;p>Come on board with me for this new stage, which is more technical than the previous one, as I had to get creative to wire up a very &amp;ldquo;conceptual&amp;rdquo; Grafana dashboard with the reality of OpenShift clusters!&lt;/p></description></item><item><title>Homelab: 2U server, short depth, with front IO, based on Ampere Altra and Asrock Rack ALTRAD8UD-1L2T motherboard</title><link>https://www.itix.fr/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/</link><pubDate>Fri, 21 Jun 2024 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/homelab-server-2u-short-depth-front-io-ampere-altra-arm64-architecture/</guid><description>&lt;p>In March of this year, I decided to find a new server to host the family&amp;rsquo;s data (Jellyfin, Nextcloud, etc.), control the house with Home Assistant and run the VMs I need for my work.
In this article, I detail my constraints and the construction of this server, based on an &lt;strong>Ampere Altra&lt;/strong> CPU (&lt;strong>ARM64&lt;/strong> architecture).&lt;/p></description></item><item><title>Build multi-architecture container images with OpenShift, Buildah and Tekton on AWS</title><link>https://www.itix.fr/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/</link><pubDate>Thu, 02 May 2024 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-aws/</guid><description>&lt;p>In 2022, I wrote an article on this subject named 







&lt;a href="https://www.itix.fr/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-and-qemu/">

Build multi-architecture container images with Kubernetes, Buildah, Tekton and Qemu

&lt;/a>



.
The article described the configuration I had set up for my personal projects.
It even went beyond its initial purpose as it has also been used by several colleagues at Red Hat who had the same need.
While the configuration described in this previous article is still relevant, the approach is somewhat dated.
With the increasing availability of ARM servers in the Cloud, I revisited the topic of building multi-architecture container images using the AWS cloud.&lt;/p></description></item><item><title>Build multi-architecture container images with Kubernetes, Buildah, Tekton and Qemu</title><link>https://www.itix.fr/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-and-qemu/</link><pubDate>Wed, 24 Aug 2022 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/build-multi-architecture-container-images-with-kubernetes-buildah-tekton-and-qemu/</guid><description>&lt;p>ARM servers are becoming mainstream (Ampere Altra server, Raspberry Pi SoC, etc.) and people start using them with containers and Kubernetes.
While &lt;a href="https://hub.docker.com/search?q=&amp;amp;image_filter=official">official Docker Hub images&lt;/a> are built for all major architectures, the situation is less clear for other Open Source projects.
It is possible to acquire an ARM server and use it to build container images, but it puts an additional constraint on the Continuous Integration chain.
This article explores another option: build ARM container images on a regular x86 server, using Kubernetes, Buildah, Tekton and Qemu.&lt;/p></description></item><item><title>Deploy APIs from your CI/CD pipeline with the 3scale REST API</title><link>https://www.itix.fr/blog/deploy-apis-from-your-cicd-pipeline-with-the-3scale-rest-api/</link><pubDate>Mon, 26 Jul 2021 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/deploy-apis-from-your-cicd-pipeline-with-the-3scale-rest-api/</guid><description>In the past years, I spent time (maybe too much) designing and implementing CI/CD pipelines around 3scale. This led to the birth of the threescale_cicd ansible role. I also helped on the design of the 3scale_toolbox and crafted a Jenkins shared library as well as sample CI/CD pipelines using the 3scale_toolbox. I had the opportunity to train colleagues and transmit this knowledge but I never took the time to set it down on paper.</description></item><item><title>Consistent DNS name resolution for virtual machines and containers</title><link>https://www.itix.fr/blog/consistent-dns-name-resolution-for-virtual-machines-and-containers/</link><pubDate>Wed, 09 Jun 2021 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/consistent-dns-name-resolution-for-virtual-machines-and-containers/</guid><description>&lt;p>When developing on microservices, developers need to run a mix of software.
Some of them running in containers, others in virtual machines, some others in the cloud and the rest on the developer&amp;rsquo;s workstation.&lt;/p>
&lt;p>Microservices having a lot of connections between themselves in addition to technologies such as TLS or OpenID Connect implies DNS names to be consistent.&lt;/p>
&lt;p>Consistent DNS names means that no matter if a client on the developer workstation, on a VM or on a container, trying to reach a server on the developer workstation, on a VM or on a container, the server DNS name must always be the same.&lt;/p>
&lt;p>This article explains how to setup a developer workstation on Fedora, with Libvirt VMs and Podman containers and achieve consistent DNS name resolution.&lt;/p></description></item><item><title>Deploy OpenShift Single Node in KVM</title><link>https://www.itix.fr/blog/deploy-openshift-single-node-in-kvm/</link><pubDate>Wed, 09 Jun 2021 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/deploy-openshift-single-node-in-kvm/</guid><description>&lt;p>Starting with version 4.8, OpenShift can now officially be installed on a single virtual machine (instead of three).
This effectively lowers the resources requirements and open up new possibilities for home labs or developer workstations.
This article explores how to deploy OpenShift Single Node (SNO) using KVM on your Fedora workstation.&lt;/p></description></item><item><title>How to run performance tests with K6, Prometheus and Grafana</title><link>https://www.itix.fr/blog/how-to-run-performance-tests-with-k6-prometheus-grafana/</link><pubDate>Mon, 22 Feb 2021 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/how-to-run-performance-tests-with-k6-prometheus-grafana/</guid><description>&lt;p>K6 is a novel performance testing tool written in Go, using plain Javascript for the test definition and presenting the test results through Grafana.
An existing article written in 2018 &lt;a href="https://k6.io/blog/k6-loves-grafana">explains how to setup K6 with InfluxDB and Grafana&lt;/a>, however Prometheus gained popularity over InfluxDB since then.
Proper integration of K6 with Prometheus is a clear lack identified by the community.
Here I explain how to integrate K6 with Prometheus using the existing StatsD support in K6, present the Grafana dashboard I built, and show how to use it.
This integration fills a gap and provides a quick win for companies already using Prometheus.&lt;/p></description></item><item><title>Build your own distribution based on Fedora CoreOS</title><link>https://www.itix.fr/blog/build-your-own-distribution-on-fedora-coreos/</link><pubDate>Wed, 25 Nov 2020 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/build-your-own-distribution-on-fedora-coreos/</guid><description>&lt;p>&lt;a href="https://getfedora.org/fr/coreos">Fedora CoreOS&lt;/a> is a new Linux distribution from the &lt;a href="https://docs.fedoraproject.org/en-US/project/">Fedora Project&lt;/a> that features filesystem immutability (you cannot change the system while it is running) and atomic upgrades (you cannot break your system if there is a crash or power loss during the upgrade).
Upon installation, Fedora CoreOS (FCOS) can be tailored to your needs using &lt;a href="https://docs.fedoraproject.org/en-US/fedora-coreos/producing-ign/">Ignition files&lt;/a>.
Once installed, you can install RPMs, tweak configuration files, etc.&lt;/p>
&lt;p>This article tries to explore Fedora CoreOS customizability one step further by building your own distribution based on Fedora CoreOS.
The idea would be to have everything wired in the Operating System image and minimal configuration in the Ignition file.&lt;/p></description></item><item><title>Use JMeter to assess software performances</title><link>https://www.itix.fr/blog/jmeter-assess-software-performances/</link><pubDate>Fri, 24 Jul 2020 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/jmeter-assess-software-performances/</guid><description>&lt;p>One of my side projects (the &lt;a href="https://github.com/nmasse-itix/Telegram-Photo-Album-Bot">Telegram Photo Bot&lt;/a>), have some performance issues that I will have to tackle.
I could have jumped into the code and changed something, hoping it will improve performances.
But that would be ineffective and unprofessional.
So, I decided to have an honest measure of the current performances as well as a reproducible setup to have consistent measures over time.&lt;/p></description></item><item><title>A cleanup playbook for 3scale</title><link>https://www.itix.fr/blog/cleanup-playbook-3scale/</link><pubDate>Tue, 28 Apr 2020 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/cleanup-playbook-3scale/</guid><description>&lt;p>If you are running integration tests embedding 3scale or are doing a lot of 3scale demos, you might sooner or later &lt;strong>have plenty of services declared in the 3scale Admin console&lt;/strong>, which could reveal difficult to work with.
And with the new feature named &lt;em>API-as-a-Product&lt;/em>, there are now &lt;strong>Backends and Products&lt;/strong> to delete, making the cleanup by hand a bit tedious.&lt;/p>
&lt;p>This article explains how to cleanup a 3scale tenant using Ansible.&lt;/p></description></item><item><title>Install Kubernetes operators in OpenShift using only the CLI</title><link>https://www.itix.fr/blog/install-operator-openshift-cli/</link><pubDate>Fri, 24 Apr 2020 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/install-operator-openshift-cli/</guid><description>&lt;p>OpenShift 4 went all-in on Kubernetes operators: they are used for installation of the platform itself but also to install databases, middlewares, etc.
There are more and more operators available on the &lt;a href="https://operatorhub.io/">Operator Hub&lt;/a>.
Most software now provide an operator and describe how to use it.&lt;/p>
&lt;p>Nevertheless, almost every software documentation I read so far, includes the steps to install the operator using the nice GUI of OpenShift 4.
But since my OpenShift environments are provisioned by a playbook, I want to be able to install operators using the CLI only!&lt;/p></description></item><item><title>Secure your OpenShift 4 cluster with OpenID Connect authentication</title><link>https://www.itix.fr/blog/secure-openshift-4-openid-connect-authentication/</link><pubDate>Fri, 17 Apr 2020 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/secure-openshift-4-openid-connect-authentication/</guid><description>&lt;p>OpenShift, starting with the version 4, is installed with a temporary administrator account, &lt;a href="https://docs.openshift.com/container-platform/4.3/authentication/remove-kubeadmin.html">kubeadmin&lt;/a>.
When searching for a definitive solution, it might be tempting to go for the very classical &amp;ldquo;login and password&amp;rdquo; prompt, backed by an &lt;a href="https://docs.openshift.com/container-platform/4.3/authentication/identity_providers/configuring-htpasswd-identity-provider.html">htpasswd file&lt;/a>.
But this is yet another password to remember!&lt;/p>
&lt;p>OpenShift can handle the &lt;a href="https://openid.net/connect/">OpenID Connect&lt;/a> protocol and thus offers Single Sign On to its users.
No additional password to remember: you can login to the OpenShift console with your &lt;a href="../use-google-account-openid-connect-provider/">Google Account&lt;/a> for instance.&lt;/p></description></item><item><title>Configure Red Hat SSO for 3scale using the CLI!</title><link>https://www.itix.fr/blog/configure-redhat-sso-3scale-cli/</link><pubDate>Wed, 08 Apr 2020 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/configure-redhat-sso-3scale-cli/</guid><description>&lt;p>&lt;a href="https://3scale.github.io/">3scale API Management&lt;/a> can be used in conjunction with &lt;a href="https://access.redhat.com/products/red-hat-single-sign-on">Red Hat SSO&lt;/a> / &lt;a href="https://www.keycloak.org/">Keycloak&lt;/a> to secure APIs managed by 3scale using the OpenID Connect protocol.&lt;/p>
&lt;p>The &lt;a href="https://access.redhat.com/documentation/en-us/red_hat_3scale_api_management/2.8/html/administering_the_api_gateway/openid-connect#configure_red_hat_single_sign_on">official documentation&lt;/a> describes the steps to configure Red Hat SSO / Keycloak but it uses the Graphical User Interface, which can be tedious if you have multiple environments to configure. Let&amp;rsquo;s configure Red Hat SSO for 3scale using the CLI!&lt;/p></description></item><item><title>Install Miniflux on your Raspberry PI</title><link>https://www.itix.fr/blog/install-miniflux-raspberry-pi/</link><pubDate>Wed, 08 Apr 2020 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/install-miniflux-raspberry-pi/</guid><description>&lt;p>In the article &amp;ldquo;&lt;a href="../nginx-with-tls-on-openwrt/">Nginx with TLS on OpenWRT&lt;/a>&amp;rdquo;, I explained how to install Nginx with TLS support on a Raspberry PI.
But without an application to protect, Nginx is quite useless.
This article explains how to install &lt;a href="https://miniflux.app/">Miniflux&lt;/a> (a lightweight RSS reader) on your Raspberry PI and how to host it as an Nginx virtual host.&lt;/p></description></item><item><title>Send mails on OpenWRT with MSMTP and Gmail</title><link>https://www.itix.fr/blog/send-mails-openwrt-msmtp-gmail/</link><pubDate>Wed, 08 Apr 2020 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/send-mails-openwrt-msmtp-gmail/</guid><description>&lt;p>A previous article named &amp;ldquo;&lt;a href="../install-openwrt-raspberry-pi/">Install OpenWRT on your Raspberry PI&lt;/a>&amp;rdquo; goes through the setup process to use OpenWRT on your Raspberry PI.
As a consequence, you might now have a Raspberry PI running OpenWRT and full of services of which all your family relies on.
With great power comes great responsibilities.
So, you might want to be notified when something goes wrong, a cron job failed, a hard disk is dying, etc., so that you can fix the problem at earliest, maybe before anyone else could notice.&lt;/p>
&lt;p>This article explains how to send mails on OpenWRT with MSMTP and a GMail account.&lt;/p></description></item><item><title>Secure your Raspberry PI with Keycloak Gatekeeper on OpenWRT</title><link>https://www.itix.fr/blog/secure-raspberry-pi-keycloak-gatekeeper/</link><pubDate>Sat, 28 Mar 2020 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/secure-raspberry-pi-keycloak-gatekeeper/</guid><description>&lt;p>In the article &amp;ldquo;&lt;a href="../nginx-with-tls-on-openwrt/">Nginx with TLS on OpenWRT&lt;/a>&amp;rdquo;, I explained how to install nginx on a Raspberry PI running OpenWRT for hosting web applications.
Some of the web applications that I installed on my Raspberry PI do not feature any authentication mechanism at all.
No authentication means that anybody on the internet could reach those applications and play with them.
This article explains how to secure applications running on a Raspberry PI with &lt;a href="https://github.com/keycloak/keycloak-gatekeeper">Keycloak Gatekeeper&lt;/a>.&lt;/p></description></item><item><title>Use your Google Account as an OpenID Connect provider</title><link>https://www.itix.fr/blog/use-google-account-openid-connect-provider/</link><pubDate>Fri, 27 Mar 2020 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/use-google-account-openid-connect-provider/</guid><description>&lt;p>We have passwords everywhere: to unlock our computer, to reach our inbox, to login as root on our Raspberry PI, etc.
Unless you have a password vault to store your credentials securely, it is very difficult to keep all your credentials safe. With the OpenID Connect protocol, you can replace the individual passwords of every web application by a Google Login.&lt;/p>
&lt;p>This article goes through all the steps to use your Google Account as an &lt;a href="https://openid.net/connect/">OpenID Connect&lt;/a> provider and subsequent articles (check links at the bottom of this article) explain how to configure the different services and software to use your Google Account as an OpenID Connect provider.&lt;/p></description></item><item><title>Secure a Quarkus API with Keycloak</title><link>https://www.itix.fr/blog/secure-quarkus-api-with-keycloak/</link><pubDate>Tue, 17 Mar 2020 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/secure-quarkus-api-with-keycloak/</guid><description>&lt;p>&lt;a href="https://quarkus.io/">Quarkus&lt;/a> is a Java stack that is Kubernetes native, lightweight and fast.
Quarkus can be used for any type of backend development, including API-enabled backends.
&lt;a href="https://www.keycloak.org/">Keycloak&lt;/a> is an open source Single Sign On solution that can be used to secure APIs.&lt;/p>
&lt;p>In this article, I&amp;rsquo;m describing how to secure a Quarkus API with Keycloak using JWT tokens.&lt;/p></description></item><item><title>Install OpenWRT on your Raspberry PI</title><link>https://www.itix.fr/blog/install-openwrt-raspberry-pi/</link><pubDate>Thu, 19 Dec 2019 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/install-openwrt-raspberry-pi/</guid><description>&lt;p>&lt;a href="https://openwrt.org/">OpenWRT&lt;/a> is a Linux distribution for embedded systems.
It made design choices that take it apart from the usual Linux distributions: musl libc instead of the usual glibc, busybox instead of coreutils, ash instead of bash, etc.
As a result, the system is very light and blazing fast!&lt;/p></description></item><item><title>Nginx with TLS on OpenWRT</title><link>https://www.itix.fr/blog/nginx-with-tls-on-openwrt/</link><pubDate>Thu, 19 Dec 2019 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/nginx-with-tls-on-openwrt/</guid><description>&lt;p>In the article &amp;ldquo;&lt;a href="../install-openwrt-raspberry-pi/">Install OpenWRT on your Raspberry PI&lt;/a>&amp;rdquo;, I explained how to install OpenWRT on a Raspberry PI and the first steps as an OpenWRT user.
As I plan to use my Raspberry PI to host plenty of web applications, I wanted to setup a versatile reverse proxy to protect them all, along with TLS support to meet nowadays security requirements.&lt;/p></description></item><item><title>Airgap OpenShift Installation: move the registry created using oc adm release mirror between environments</title><link>https://www.itix.fr/blog/airgap-openshift-installation-move-registry-created-using-oc-adm-release-mirror-between-environments/</link><pubDate>Mon, 18 Nov 2019 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/airgap-openshift-installation-move-registry-created-using-oc-adm-release-mirror-between-environments/</guid><description>Some customers, especially large banks, have very tight security requirements. Most of them enforce a complete disconnection of their internal networks from the Internet.
When installing OpenShift in such environments (this is named &amp;ldquo;disconnected&amp;rdquo; or &amp;ldquo;airgap&amp;rdquo; installation), all the OpenShift images have to be fetched (thanks to oc adm release mirror) in a dedicated registry from a bastion host that is both on the internal network and on the Internet.</description></item><item><title>Ansible: Add a prefix or suffix to all items of a list</title><link>https://www.itix.fr/blog/ansible-add-prefix-suffix-to-list/</link><pubDate>Mon, 18 Nov 2019 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/ansible-add-prefix-suffix-to-list/</guid><description>&lt;p>Recently, in &lt;a href="../airgap-openshift-installation-move-registry-created-using-oc-adm-release-mirror-between-environments/">one of my Ansible playbooks&lt;/a> I had to prefix all items of a list with a chosen string.&lt;/p></description></item><item><title>Check the Ansible version number in a playbook</title><link>https://www.itix.fr/blog/check-ansible-version-number-playbook/</link><pubDate>Mon, 18 Nov 2019 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/check-ansible-version-number-playbook/</guid><description>&lt;p>My Ansible playbooks sometimes use features that are available only in a very recent versions of Ansible.&lt;/p>
&lt;p>To prevent unecessary troubles to the team mates that will execute them, I like to add a task at the very beginning of my playbooks to check the Ansible version number and abort if the requirements are not met.&lt;/p></description></item><item><title>Feed URLs for the most common CMS: Drupal, Wordpress, WiX and YouTube</title><link>https://www.itix.fr/blog/feed-url-drupal-wordpress-wix-youtube/</link><pubDate>Mon, 18 Nov 2019 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/feed-url-drupal-wordpress-wix-youtube/</guid><description>&lt;p>If like me you are using &lt;a href="../deploying-miniflux-openshift/">an RSS reader&lt;/a> to stay informed, there is nothing more frustrating than reading a website that does not advertise an RSS feed.&lt;/p>
&lt;p>But since most website are based on commonly found CMS, it is highly probable the RSS feeds are there, just not advertised.&lt;/p></description></item><item><title>Deploying Miniflux on OpenShift</title><link>https://www.itix.fr/blog/deploying-miniflux-openshift/</link><pubDate>Sun, 17 Nov 2019 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/deploying-miniflux-openshift/</guid><description>&lt;p>&lt;a href="https://miniflux.app">Miniflux&lt;/a> is a minimalist, open source and opinionated RSS feed reader. There is a &lt;a href="https://miniflux.app/hosting.html">hosted instance&lt;/a> available at a fair price point but wouldn&amp;rsquo;t it be cooler to host your own instance on your OpenShift cluster? Let&amp;rsquo;s do it!&lt;/p></description></item><item><title>Deploying Invidious on OpenShift</title><link>https://www.itix.fr/blog/deploying-invidious-openshift/</link><pubDate>Sat, 16 Nov 2019 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/deploying-invidious-openshift/</guid><description>&lt;p>&lt;a href="https://github.com/omarroth/invidious">Invidious&lt;/a> is an alternative frontend to YouTube that is slimmer, faster and at the same time offer more features than YouTube itself. And even more important: it&amp;rsquo;s Open Source!&lt;/p>
&lt;p>There is a hosted instance at &lt;a href="https://invidio.us/">invidio.us&lt;/a> if you want to give it a try. But, wouldn&amp;rsquo;t it be cooler to host your own instance on your OpenShift cluster? Let&amp;rsquo;s do it!&lt;/p></description></item><item><title>What is this 'Anonymous' policy configured by the 3scale toolbox?</title><link>https://www.itix.fr/blog/3scale-toolbox-anonymous-policy/</link><pubDate>Thu, 14 Nov 2019 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/3scale-toolbox-anonymous-policy/</guid><description>&lt;p>In this article on the Red Hat Developer blog, I explained &lt;a href="https://developers.redhat.com/blog/2019/07/29/3scale-toolbox-deploy-an-api-from-the-cli/">how to deploy an API from the CLI, using the 3scale toolbox&lt;/a>.
If you tried this approach by yourself you may end up, &lt;em>sooner or later&lt;/em>, with a 3scale service including an &lt;em>Anonymous&lt;/em> policy in its policy chain.
What is this policy and why is it there?
Let&amp;rsquo;s dig in!&lt;/p></description></item><item><title>What is this 'URL Rewriting' policy configured by the 3scale toolbox?</title><link>https://www.itix.fr/blog/3scale-toolbox-url-rewriting-policy/</link><pubDate>Thu, 14 Nov 2019 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/3scale-toolbox-url-rewriting-policy/</guid><description>&lt;p>In this article on the Red Hat Developer blog, I explained &lt;a href="https://developers.redhat.com/blog/2019/07/30/deploy-your-api-from-a-jenkins-pipeline/">how to deploy an API from a Jenkins Pipeline, using the 3scale toolbox&lt;/a>.
If you tried this approach by yourself you may have noticed that in some cases, the configured service includes the &lt;em>URL Rewriting&lt;/em> policy in its &lt;em>Policy Chain&lt;/em>.&lt;/p></description></item><item><title>Configure the TLS trust store in Apicurio Studio</title><link>https://www.itix.fr/blog/configure-truststore-apicurio-studio/</link><pubDate>Fri, 25 Oct 2019 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/configure-truststore-apicurio-studio/</guid><description>&lt;p>&lt;a href="http://microcks.github.io">Microcks&lt;/a> and &lt;a href="https://www.apicur.io/">Apicurio&lt;/a> are nice Open Source projects that can even talk to each other to deliver greater value than the sum of their parts.&lt;/p>
&lt;p>Unfortunately, sometimes TLS certificates can get in the way of proper communication between the two projects.
This post explains how to configure the trust store in Apicurio to overcome TLS communication issues between Apicurio and Microcks.&lt;/p></description></item><item><title>Running Red Hat SSO outside of OpenShift</title><link>https://www.itix.fr/blog/running-redhat-sso-outside-openshift/</link><pubDate>Thu, 10 Oct 2019 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/running-redhat-sso-outside-openshift/</guid><description>&lt;p>In an article named &lt;a href="https://developers.redhat.com/blog/2019/02/07/red-hat-single-sign-on-give-it-a-try-for-no-cost/">Red Hat Single Sign-On: Give it a try for no cost!&lt;/a>, I explained how to deploy Red Hat SSO very easily in any OpenShift cluster.&lt;/p>
&lt;p>As pointed by a reader in a comment, as widespread OpenShift can be, not everyone has access to a running OpenShift cluster. So, here is how to run Red Hat SSO outside of OpenShift: using only plain Docker commands.&lt;/p></description></item><item><title>Solving the Ansible error 'This module requires the OpenShift Python client'</title><link>https://www.itix.fr/blog/solving-this-module-requires-the-openshift-python-client-error/</link><pubDate>Fri, 13 Sep 2019 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/solving-this-module-requires-the-openshift-python-client-error/</guid><description>If you are using MacOS to develop Operators based on Ansible or simply running Ansible playbooks straight from your Mac, you might encounter this error:
This module requires the OpenShift Python client.
When coping with this error message, two items need to be checked:
The openshift python module needs to be installed using the pip command bundled with your Ansible. If you are not using the implicit localhost, your inventory needs to be updated.</description></item><item><title>Enable global policies on Apicast 3.6</title><link>https://www.itix.fr/blog/enable-global-policies-apicast/</link><pubDate>Tue, 10 Sep 2019 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/enable-global-policies-apicast/</guid><description>&lt;p>Recent versions of Apicast have a pluggable policy mechanism to apply different treatments to each exposed API.
This is very powerful since each service receives its specific configuration.
However, if the same treatment has to be applied to every service exposed, it becomes an administration overhead.&lt;/p>
&lt;p>Hopefully, Apicast has the concept of &lt;em>Global Policies&lt;/em> that applies to every service exposed by itself.&lt;/p></description></item><item><title>One-liner to decode a Kubernetes secret (base64 encoded)</title><link>https://www.itix.fr/blog/decode-kubernetes-secret-base64/</link><pubDate>Fri, 07 Jun 2019 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/decode-kubernetes-secret-base64/</guid><description>Creating a Kubernetes secret from a value is easy:
$ oc create secret generic my-secret --from-literal=secretValue=super-secret secret/my-secret created But getting back this value (from a Shell script, for instance) is not so easy since it is now base64 encoded:
$ oc get secret my-secret -o yaml apiVersion: v1 kind: Secret metadata: name: my-secret namespace: qlkube type: Opaque data: secretValue: c3VwZXItc2VjcmV0 Hopefully, since the latest versions of Kubernetes, there is now a one-liner to extract the field and base64 decode it:</description></item><item><title>Use QLKube to query the Kubernetes API</title><link>https://www.itix.fr/blog/use-qlkube-to-query-the-kubernetes-api/</link><pubDate>Fri, 07 Jun 2019 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/use-qlkube-to-query-the-kubernetes-api/</guid><description>&lt;p>&lt;a href="https://github.com/qlkube/qlkube">QLKube&lt;/a> is a project that exposes the Kubernetes API as GraphQL.
&lt;a href="https://en.wikipedia.org/wiki/GraphQL">GraphQL&lt;/a> is a data query and manipulation language for APIs developed initially by Facebook and released as open-source.
It strives to reduce the chattiness clients can experience when querying REST APIs.
It is very useful for mobile application and web development: by reducing the number of roundtrips needed to fetch the relevant data and by fetching only the needed field, the network usage is greatly reduced.&lt;/p></description></item><item><title>Bash Snippet: Print a config file without comments</title><link>https://www.itix.fr/blog/print-config-file-without-comments/</link><pubDate>Tue, 23 Apr 2019 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/print-config-file-without-comments/</guid><description>&lt;p>Logging in on a server, printing a configuration file and trying to find the relevant setting from thousands of comment lines.
Sounds familiar?&lt;/p>
&lt;p>Not that comments are useless in a configuration file but sometimes it&amp;rsquo;s handy to print a configuration file without the comment lines.
Especially when the file is thousand lines long but the useful lines fit the twenty five lines of a standard terminal.&lt;/p></description></item><item><title>Is my NTP daemon working?</title><link>https://www.itix.fr/blog/is-my-ntp-daemon-working/</link><pubDate>Fri, 29 Mar 2019 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/is-my-ntp-daemon-working/</guid><description>&lt;p>If the time on your workstation or server is not stable, strange errors might
appear, such as:&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-raw" data-lang="raw">$ tar zxvf /tmp/archive.tgz
tar: my-file: time stamp 2019-03-28 14:04:45 is 0.042713488 s in the future
&lt;/code>&lt;/pre>&lt;p>This can happen when your &lt;a href="https://en.wikipedia.org/wiki/Network_Time_Protocol">NTP&lt;/a>
daemon is not synchronized. This means it cannot reliably determine the current
time.&lt;/p></description></item><item><title>Testing hard-drive or SSD performance on Fedora</title><link>https://www.itix.fr/blog/testing-hard-drive-ssd-performance/</link><pubDate>Fri, 22 Mar 2019 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/testing-hard-drive-ssd-performance/</guid><description>&lt;p>If your Linux system appears to be slow, it might be an issue with your disks,
either hard drive or SSD. Hopefully, with a few commands you can get an idea
of the performances of your disks.&lt;/p></description></item><item><title>Bash Snippet: CLI World Clock</title><link>https://www.itix.fr/blog/cli-world-clock/</link><pubDate>Mon, 18 Mar 2019 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/cli-world-clock/</guid><description>&lt;p>When working in a global organization, colleagues are all around the world!
And thus answering to &lt;em>&amp;ldquo;What time is it in their timezone?&amp;rdquo;&lt;/em> becomes a frequent
task. I initially used an online service for this but it is cumbersome and
requires me to leave my terminal.&lt;/p>
&lt;p>Let&amp;rsquo;s meet the CLI World clock!&lt;/p></description></item><item><title>M4 as a replacement for sed</title><link>https://www.itix.fr/blog/m4-as-replacement-for-sed/</link><pubDate>Fri, 15 Mar 2019 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/m4-as-replacement-for-sed/</guid><description>Writing a tutorial often involves to replace a placeholder in a file, such as:
Replace FOO with the actual name of your image:
sed &amp;#39;s|IMAGE_NAME|docker.io/foo/bar:latest|g&amp;#39; template.yaml |kubectl apply -f - But this approach has several drawbacks:
If you have to replace multiple placeholders, the sed syntax becomes cumbersome. If the delimiter appears in your replacement string, you will have to find another delimiter (such as in the previous example where the usual slash has been replaced by a pipe to accomodate the slash in the image name).</description></item><item><title>Writing workshop instructions with Hugo and deploying in OpenShift</title><link>https://www.itix.fr/blog/writing-workshop-instructions-with-hugo-deploy-openshift/</link><pubDate>Wed, 27 Feb 2019 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/writing-workshop-instructions-with-hugo-deploy-openshift/</guid><description>&lt;p>This is the third part of my series covering how to
&lt;a href="../writing-workshop-instructions-with-hugo/">Write workshop instructions with Hugo&lt;/a>. In this article, we will deploy our &lt;a href="https://github.com/nmasse-itix/hugo-workshop/">Hugo mini-training&lt;/a> as a container in OpenShift.&lt;/p></description></item><item><title>Writing workshop instructions with Hugo, with variables in your content</title><link>https://www.itix.fr/blog/writing-workshop-instructions-with-hugo-variables/</link><pubDate>Thu, 21 Feb 2019 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/writing-workshop-instructions-with-hugo-variables/</guid><description>&lt;p>This is the second part of my series covering how to
&lt;a href="../writing-workshop-instructions-with-hugo/">Write workshop instructions with Hugo&lt;/a>.
In the first part, we saw how to:&lt;/p>
&lt;ul>
&lt;li>bootstrap a website with Hugo&lt;/li>
&lt;li>add content, organized in chapters and sections&lt;/li>
&lt;li>customize the look and feel to be suitable for workshop instructions&lt;/li>
&lt;/ul>
&lt;p>For this second part, we will add variables to our content so that we can easily
adjust the workshop instructions to different use cases.&lt;/p></description></item><item><title>Writing workshop instructions with Hugo</title><link>https://www.itix.fr/blog/writing-workshop-instructions-with-hugo/</link><pubDate>Wed, 20 Feb 2019 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/writing-workshop-instructions-with-hugo/</guid><description>&lt;p>In my professional life, I often have to lead workshops with customers or
partners. During those workshops, participants expect to be trained on
a piece of technology or software.&lt;/p>
&lt;p>I usually have to provision everything needed to deliver this training
and write the training instructions. Those instructions are organized as
a step-by-step guide with screenshots, text, verbatim sections, links,
files to downloads, etc.&lt;/p>
&lt;p>And maybe more important, those instructions have to be well organized,
each step has to be clearly stated, identified and formatted. The progression
needs to be logic and easy. At any time, the participant needs to know where
he is, which steps he has completed and which steps remain.&lt;/p>
&lt;p>And for the trainer, it has to be easy to maintain and collaborative.&lt;/p>
&lt;p>Crafting support materials that can meet all those requirements is
challenging. Slide decks could fit the participants needs but are
very difficult to maintain for the trainer. Markdown documentation
in a GIT repository are better for suited for maintenance and collaboration
but is difficult to work with for the participants.&lt;/p>
&lt;p>Hopefully &lt;a href="https://gohugo.io/">Hugo&lt;/a> can help us!&lt;/p></description></item><item><title>Use Ansible to manage the QoS of your OpenShift workload</title><link>https://www.itix.fr/blog/use-ansible-to-manage-the-qos-of-your-openshift-workload/</link><pubDate>Wed, 06 Feb 2019 00:00:00 +0200</pubDate><guid>https://www.itix.fr/blog/use-ansible-to-manage-the-qos-of-your-openshift-workload/</guid><description>&lt;p>As I was administering my OpenShift cluster, I found out that I had a too
much memory requests. To preserve a good quality of service on my cluster,
I had to tacle this issue.&lt;/p></description></item></channel></rss>