GeistHaus
log in · sign up

Pablo Iranzo Gómez blog

Part of iranzo.io

Recent content on Pablo Iranzo Gómez blog

stories primary
RHEL Slim Down
Learn how to slim down RHEL and its images for creating reduced images for disks
https://iranzo.io/blog/2024/11/15/rhel-slim-down/
RHEL bootable containers (BOOTC)
Learn how to use a container for being the baseline for your computer, making it easier to operate the operating system installation and maintenance.
https://iranzo.io/blog/2024/08/09/rhel-bootable-containers-bootc/
Enable GPU acceleration with the Kernel Module Management Operator
Learn how to enable GPU acceleration with the Kernel Module Management (KMM) Operator so you can can run AI workloads on top of Intel Data Center GPU Flex 140.
https://iranzo.io/blog/2024/04/26/enable-gpu-acceleration-with-the-kernel-module-management-operator/
Install gems on local user folder instead of system wide

In order to test locally a Gemfile, define local path for the gems to avoid attempting to write to system-wide folders:

bundle config set --local path '/home/username/.gem'
bundle install
https://iranzo.io/tips/bundle-localuser/
Advice for Telegram usage in education

Telegram is being used frequently at schools for allowing an easy communication flow using the ‘channels’, where teachers can send information to families without sharing their personal contact details so that they can’t be contacted outside of the official tools.

This comfort, came, probably because of not knowing the problems/dangers that were not taken into consideration.

For making it easier for parents to join the channel of the class, many times, public channels are created… this allows to use a shorter ‘alias’ but that everyone else can search and find… and here is the problem… ’everyone’ it’s not just parents or other teachers… if you do the test by searching for clase de or classe dels you’ll find lot of groups:

https://iranzo.io/blog/2024/01/05/advice-for-telegram-usage-in-education/
Red Hat Co.Lab for the day of Science for Development "Conversation Machine"

Red Hat has a program named Co.Lab which provides kits under request that employees can use to guide a STEM session on schools to perform different range of activities.

We performed 2 sessions this year, one for the “We Are Red Hat Week” (WARHW), which happens every year around Halloween, when the first official release was launched back in 31st October 1994 (‘Halloween Release’).

For the one at the office in Valencia, the range of ages was a bit wider so we did different kits and the parents were in charge of directing the lab for the kids.

https://iranzo.io/blog/2023/11/10/red-hat-co.lab-for-the-day-of-science-for-development-conversation-machine/
OpenShift Layered Images for patching

With recent releases of OpenShift like 4.13 you can use CoreOS Layering to apply custom images to the nodes.

The feature allows to build, via a Dockerfile a custom image that can later be applied to our nodes.

Let’s review the steps:

  1. First we need to find the base image being used in our environment with oc adm release info quay.io/openshift-release-dev/ocp-release:4.13.5-aarch64 --image-for=rhel-coreos
  2. Then we use the returned value in the FROM line in our Dockerfile
  3. If we want to add custom packages, we should have a server which is reachable and run createrepo on the folder containing the rpm’s so that rpm-ostree can download them for installation.

Example dockerfile:

https://iranzo.io/blog/2023/11/08/openshift-layered-images-for-patching/
mydlink Website from Linux

Hi had the chance to buy a Dlink camera, waterproof, with magnetic base and rated for exteriors for a really great price a while ago D-Link DCS 8600LH 🛒#ad and later a camera with pan and tilt from Dlink too D-Link DCS-6500LH 🛒#ad

The camera, of course has an application for configuration, viewing the image, etc named ‘mydlink’ which has a web counterpart at https://mydlink.com/, but unfortunately, when you try to access the website, there’s little you can do:

https://iranzo.io/blog/2023/11/05/mydlink-website-from-linux/
No matching key found

As you might have experienced… using a recent system to connect to a legacy one could be complicated as some insecure protocols have been disabled, with a message like:

Unable to negotiate with 192.168.2.82 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss

Create an entry like this in your .ssh/config file, so that insecure methods can be used to connect to a specific host:

Host 192.168.2.82
	HostKeyAlgorithms=+ssh-rsa
	KexAlgorithms=+diffie-hellman-group1-sha1
  PubkeyAcceptedKeyTypes=+ssh-rsa
	User root

or alternatively on the command line:

https://iranzo.io/tips/no-matching-key-found/
Upgrade Debian from buster to bullseye

I had two Raspberry Pi systems running Raspbian and they were failing to find updates for newer packages.

As Debian stable was upgraded too, moving from buster to bullseye the packages failed to get the newer ones.

Warning

Beware as this procedure might upgrade the system but might no render a bootable Raspberry Pi

A way to fix it is, to first, change references, if any, to the old codename version by running:

https://iranzo.io/tips/raspbian-upgrade/
KMM 1.1 Scale testing

Attention

First published at https://cloud.redhat.com/blog/scale-testing-kernel-module-management

Introduction

Kernel Module Management (KMM) Operator manages, builds, signs and deploys out-of-tree kernel modules and device plugins on OpenShift Container Platform clusters.

KMM adds, for the HUB/Spoke scenario, a new ManagedClusterModule which describes an out-of-tree kernel module and its associated device plugin. You can use ManagedClusterModule resources to configure how to load the module, define ModuleLoader images for kernel versions, and include instructions for building and signing modules for specific kernel versions.

https://iranzo.io/blog/2023/06/21/kmm-1.1-scale-testing/
Showing calendar events in Telegram

If you’ve a Telegram group, it might be interesting the ability of https://t.me/redken_bot for adding a calendar ical that automates publishing each day the events in the agenda for the day.

If you did read Python and iCalendar ICS processing, part of the basis in that article are part of the bot and are easily used:

For configuring, only a few simple steps are required:

  • Have a calendar ICS/webcal accessible (for example a public Google Calendar one)
  • Have a Telegram group where we do want to publish the events
  • Add @redken_bot to the group
  • Specify the URL del calendar and the name

Lets see some screenshots of the process for you to check how easily it can be achieved.

https://iranzo.io/blog/2023/03/21/showing-calendar-events-in-telegram/
Automating SSH keys loading for Ansible usage

For using Ansible it’s required to have a working set of ssh-keys already deployed.

If you get a set of systems that have not been provisioned by you and are missing the SSH keys, having it fixed might take a while if doing it manually. Good news is that you can use a script in expect to cover this part:

#!/usr/bin/expect -f
# set Variables
set password [lrange $argv 0 0]
set ipaddr [lrange $argv 1 1]

# now connect to remote system
spawn ssh-copy-id root@$ipaddr
match_max 100000

# Check for initial connection (add key of host)
set timeout 5
expect "yes/no" { send -- "yes\r" }

# Check for password prmpt
set timeout 120
# Look for passwod prompt
expect "password:" { send -- "$password\r" }
# send blank line (\r) to come back
send -- "\n"
expect eof

This script, when used like:

https://iranzo.io/tips/automatesshkeys/
Using ChatGPT for writing Risu Plugins

Lately, there’s a lot of interest on ChatGPT, and yes, it’s really impressive the way it processes the context to provide answers to the questions.

To give it a try, and put into play the requirements for writing a Risu plugin, I wrote some of the requirements in a paragraph:

I want to create a bash script for checking system status.

The script should use return codes to indicate success, failure, information, error or skipped via the values stored in the variables $RC_OKAY, $RC_SKIPPED, $RC_ERROR, $RC_FAILED and $RC_INFO.

https://iranzo.io/blog/2023/03/02/using-chatgpt-for-writing-risu-plugins/
Enable rootless podman on Fedora

With podman we can setup containers for being used for non root users by performing some simple steps:

Install required packages
dnf -y install slirp4netns fuse-overlayfs crun podman shadow-utils

Force the number of user namespaces (might be required on some environments):

echo "user.max_user_namespaces=28633" > /etc/sysctl.d/userns.conf
sysctl -p /etc/sysctl.d/userns.conf
Delegate

Allows to define which resources are available1:

mkdir -p /etc/systemd/system/user@.service.d

cat << EOF > /etc/systemd/system/user@.service.d/delegate.conf
[Service]
Delegate=cpu cpuset io memory pids
EOF

To verify it has been done correctly, logout and login with the user and execute:

https://iranzo.io/blog/2023/01/27/enable-rootless-podman-on-fedora/
Kernel Module Management testing

Following on the Using Kcli to prepare for OCM testing, we’re going to prepare KMM testing in Hub-Spoke approach.

First we need to prepare our .docker/config.json with the contents of our OpenShift pull secret used with Kcli.

mkdir -p ~/.docker/
cp openshift_pull.json ~/.docker/config.json
Warning advisories

Note

Semi-scripted version available at automate.sh

Warning

We’re using pre-release bits of the software, that’s why we need to define a custom catalog for both the Hub and the Spokes. Once KMM is released it will be available from the official one and just the Policy will be needed.

https://iranzo.io/blog/2023/01/19/kernel-module-management-testing/
Management Integration whereabouts
Management Integration whereabouts
What we’ve done so far?
  • ZTP Factory Workflow
  • Kernel Module Management
  • NVIDIA Bluefield support
  • OpenShift Virtualization with vGPU
  • Other supporting tasks

ZTP Factory Workflow
  • ZTP Stands for Zero Touch Provisioning: Automated OpenShift deployment that setup registry mirror, nodes,etc out of a configuration yaml.

  • The architecture was described as Openshift Container Agnostic TOPology Integrated Chassis. The architecture was based on a 3+1 chassis which had everything needed for the automation with nics for internal/external networks.

https://iranzo.io/blog/2023/01/19/management-integration-whereabouts/
Enable Libvirt rw socket on RHEL9

RHEL9 by default uses read-only socket which is not usable by some tools like Kcli… to enable it use:

systemctl enable --now libvirtd.socket libvirtd-ro.socket
systemctl stop libvirtd.service
systemctl enable --now virtproxyd.socket virtproxyd-ro.socket
systemctl stop virtproxyd.service
https://iranzo.io/tips/rhel9-libvirtd/
Using Kcli to prepare for Open Cluster Management testing

Kcli allows to quickly interact with different virtualization platforms to build machines with some specific configurations, and via the use of plans it allows to automate most of the setup required to have an environment ready.

In our case, let’s setup an environment to practice with Open Cluster Management but instead of using kind clusters, let’s use VM’s.

Note

We’ll require to setup an openshift_pull.json file for Kcli to consume when accessing the required resources for this to work. That file, contains the credentials for accessing several container registries used for the deployment.

https://iranzo.io/blog/2022/12/23/using-kcli-to-prepare-for-open-cluster-management-testing/
[python] Generate ranges from items

Some years ago, I added a script for updating headers for (C) in the python files I was developing for Risu.

In this way, the header got the list of authors and years working on the files updated automatically.

With the pass of the years, the list started to became a bit too long, so I worked on creating code for getting ranges instead.

This is the code I used:

def getranges(data):
    """
    From list of strings representing numbers, get ranges and return list of strings
    :param data: list of strings representing numbers
    :return: list of strings with number ranges when > 1
    """

    # Convert to integers
    data = [int(i) for i in data]

    result = []
    if not data:
        return result

    # Prepare iteration loop
    idata = iter(data)
    first = prev = next(idata)
    first = first
    prev = prev

    # Process next item
    for following in idata:
        if following - prev == 1:
            # Years are continuum, just update previous
            prev = following
        else:
            # Years are not continuum, end range and start again
            if first == prev:
                result.append(first)
            else:
                if first + 1 == prev:
                    # Only one item in difference, append items individually
                    result.append(first)
                    result.append(prev)
                else:
                    result.append("%s-%s" % (first, prev))
            first = prev = following

    # Catchall for regular execution or last remaining range

    if first == prev:
        result.append(first)
    else:
        if first + 1 == prev:
            # Only one item in difference, append items individually
            result.append(first)
            result.append(prev)
        else:
            result.append("%s-%s" % (first, prev))

    # Convert back to text
    result = [str(i) for i in result]
    return result

With it, previous headers like:

https://iranzo.io/blog/2022/11/25/python-generate-ranges-from-items/
Automate code build and deployment with ansible

Let’s say that we want to keep our system updated with some code which is not distributed as a regular package, but as a code in a repository (which unfortunately, it’s a pretty common situation).

As a part of the ansible playbooks used for the hosts, I can add a snippet like this:

gitrepos:
  - {
      url: "https://github.com/myrepo/repo.git",
      tag: "tagtocheckout",
      folder: "/root/path-for-check-out",
      chdir: "subdir to enter",
      build: "make build",
      exec: "build/mybuiltbinary",
    }

With this definition in the host inventory, we can then in our playbook to perform several steps:

https://iranzo.io/blog/2022/11/09/automate-code-build-and-deployment-with-ansible/
OpenShift's oc debug and parallel execution

A colleague reported some issues in the OpenShift troubleshooting and diagnosis scripts at OpenShift-checks.

Some time ago I did contribute some changes to use functions and allow using the RISU wrapper to the scripts, helping consuming the results via RISU’s HTML interface.

As my colleague reported, for some plugins, the output of the command was not shown in the HTML Interface.

After some investigation, it was found that parallel execution for the plugins was causing no output to be shown, but when filtering to individual ones via risu -i XXXXXXX/plugin -l it was working fine… the problem was not the check itself, as both of them worked fine when executed individually but failed when executing them together.

https://iranzo.io/blog/2022/11/03/openshifts-oc-debug-and-parallel-execution/
Ansible - dynamically include Jinja templates and tasks

For my ansible playbooks, I wanted to be able to add several new templates to be copied to target system, and additionally be able to perform some commands for them without having to specify each individual file/template to copy.

My approach:

Define for the hosts I want to find templates/playbooks define a var named extras for the relevant hosts:

extras:
  - ntp
  - certificates

The names defined (in above example ntp and certificates) are just name of folders laying inside tasks/templates/${folder} that are searched and included or excluded based on extras values.

https://iranzo.io/blog/2022/09/24/ansible-dynamically-include-jinja-templates-and-tasks/
Include Ansible playbooks sorted

Use sorted list for included files vs random provided by with_fileglob.

- name: Include tasks
  include_tasks: "{{item}}"
  loop: "{{ query('fileglob', 'tasks/*.yaml') | sort }}"
https://iranzo.io/tips/include-sorted-playbooks/
Check Agent status per state

Check agent status per state

watch -d "oc get agent -A -o jsonpath='{range .items[*]}{@.status.debugInfo.state}{\"\n\"}{end}' |sort | uniq --count"
https://iranzo.io/tips/acm-host-status/
RHCE and RHCSA tips and tricks

I did the RHCE exam some time ago, and still there are some tricks and advices I tell the people to bear in mind some of the things I used and that were also provided in the Red Hat Enterprise 8 Administration book:

  • Don’t remember every step, it’s not effective, for example as I don’t recall syntax for BIND, I do remember package that has some files with examples and I use that one to check what I need to do
  • Install mlocate and run updatedb as soon as you start, then you can use locate <file> to find out files in your system
  • Use your preferred editor… it’s common to use vi or vim as it’s pretty standard, but if you’re used to another, make yourself comfortable in the system.
  • As one instructor like to say: “Anyone with unlimited amount of time will be able to pass the exam”.
  • RHCE is a performance-based exam, that means that you need to cover all the required goals within the exam duration, and in the end, the goals is to accomplish, not to do in the smarter way.
    • For example, if you’re told to configure resolv.conf you can either use nmcli to modify the settings or you can pipe the results to it via echo nameserver 1.1.1.1 > /etc/resolv.conf, in the end, both will have the same effect, and of course, using nmcli will be smarter when you’re keeping multiple systems and using automation… but for the exam, the goal is to focus on the fastest path to master at it.

You can find more tricks at Red Hat Enterprise 8 Administration

Enjoy! (and if you do, you can Buy Me a Coffee )

https://iranzo.io/blog/2022/07/13/rhce-and-rhcsa-tips-and-tricks/
Lego 60335 Train station with bus

I loved the Bus and I was behind it for my city setup, so I went for it and got the Lego 60335 Train station with bus.

It contains three instruction manuals for the components:

  • Cart for repairs that can run over the tracks or the road
  • Bus
  • Train station itself

The train station.

  • It features a cafeteria with a croissant, coffee machine and another desk for the tickets.

  • Has ticket machine and a place to sit while waiting for the train

https://iranzo.io/blog/2022/06/18/lego-60335-train-station-with-bus/
Lego Volkswagen T2

I’ve been building the Lego Volkswagen T2 🛒#ad and took some pics about the final result and the comparison with the T1.

Feelings:

  • The rear door (above the motor) dismantles itself just by looking at it, the mechanism is interesting as it uses some sticks that get inserted inside the support, but the frame holding it, specially in the upper side is really weak…
  • The sliding door on the side is nice, and has a mechanism to ‘open it’ by pushing a small button in the lower part of the van
  • The bed opens a bit better than on T1, which also was easy to get dismantled, same as the table that can be folded which is a lot nicer.
  • The details on the fridge are really nice, and the one with the gas seems just to cover the spot
  • The steering wheel is not just decorative.. as with recent Creator Expert series, it actually moves the front wheels.
  • The roof, instead of being ‘pushed’ or ‘dropped’, has a sliding mechanism that holds it to the lower part, so in order to remove it, you need to open the rear door, and then slide it out. Interestingly it also has a spring that keeps the roof open.
Chairs in the roof
Cockpit area (driver seat)
Cockpit area
Interior (fridge)
Interior, gas bottle
Kitchen and sink
Upper view, with the foldable table and the couch that can transform in a bed
Rear view
Motor area
Extra stickers for decoration

Enjoy! (and if you do, you can Buy Me a Coffee )

https://iranzo.io/blog/2022/05/26/lego-volkswagen-t2/
Unsupported upgrade for RHEL-based distributions without reinstallation

Most systems, based on RHEL, were not able to upgrade without reinstallation, or best said, not supported. The new version, that was released at around 18 months later contained so many changes that it was hard to test the upgrades themselves until leapp was introduced.

Check the lifecycle here: https://access.redhat.com/support/policy/updates/errata

However, the biggest problem could be the incompatibility of packages or package formats… but as usually there were some middle layers it was possible to upgrade without reinstallation by performing some manual steps.

https://iranzo.io/blog/2022/04/23/unsupported-upgrade-for-rhel-based-distributions-without-reinstallation/
Lego The SkyWalker Saga Codes

Inside the game The Sky Walker Saga PS4, PS5, Xbox, Nintendo Switch, you can introduce some codes to unlock additional characters to use, so far this is the list I’ve found:

Code Character/vehicle 3FCPPVX Tarkin ARVALA7 Razor Crest BAC1CKP Mister Bones C3PHOHO C-3P0 (Party special) GR2VBXF Ratts Tyerell KH7P320 Aayla Secura KORDOKU Poe Dameron (Party special) LIFEDAY GNK Droid (Party special) OKV7TLR Dengar SHUTTLE Resistance ITS SIDIOUS Palpatine SKYSAGA Temmin Wexley T9LM1QF Shmi TIPYIPS D-O (Party special) VT1LFNH Shaak Ti WBFE4GO Nute Gunray WOOKIEE Chewbacca (Party special) WROSHYR Darth Vader (Party special) XV4WND9 Holdo Z55T8CQ Poggle

Enjoy! (and if you do, you can Buy Me a Coffee )

https://iranzo.io/blog/2022/04/10/lego-the-skywalker-saga-codes/
Logitech R400 remote presentation controller on Linux

Since long ago I had it in my mind getting one remote presenter, but most presenters just had two buttons, and the ones that looked to be valid for my use case, required four and seems that only Rii had similar devices, but I didn’t went for it as it was not a huge need, so I ended up with a mini keyboard I had for Raspberry Pi and some debugging in case I had that need.

https://iranzo.io/blog/2022/04/01/logitech-r400-remote-presentation-controller-on-linux/
In action...@redken_bot with examples
See how to use @redken_bot in Telegram or discord with some examples!
https://iranzo.io/blog/2022/01/20/in-action...@redken_bot-with-examples/
LDAP query from Python
This article describes how to use python to bind against an LDAP server and perform queries
https://iranzo.io/blog/2021/10/19/ldap-query-from-python/
The experience of writing a book

I wanted to write about my experience (before I forget about it), and as some colleagues asked about it… here we go…

As published in the blog entry RHEL8 Administration book, some colleagues and I wrote a book on RHEL8 administration, which can be bought here.

Many years ago I started one about Linux, but every time a new paragraph was added, a lot of new ‘TO-DO’ items were appended as the information growth… and as it was a ‘solo’ project, I had other stuff to work on and was parked.

https://iranzo.io/blog/2021/09/15/the-experience-of-writing-a-book/
Lego exclusive materials for Technic Owners
Lego promotional material for Technic Owners using your own's car license plate
https://iranzo.io/blog/2021/07/25/lego-exclusive-materials-for-technic-owners/
imapfilter for Gmail
Learn on how to use imapfilter against Gmail for classifying the messages
https://iranzo.io/blog/2021/07/07/imapfilter-for-gmail/
UEFI boot order change

Hi,

In case you’ve a dual boot machine, sometimes it might happen that grub menu is no longer appearing.

For systems using regular BIOS, a grub-install against the device it was installed might be required, but when using UEFI, it’s really easy to use a rescue media and execute efibootmgr to alter the boot order.

When executing efibootmgr, it might output some information like this:

BootCurrent: 0001
Timeout: 0 seconds
BootOrder: 0001,0019,001D,001C,0017,0018,001A,001B,001E,001F,0020,0000
Boot0000* Windows Boot Manager
Boot0001* Fedora
Boot0010  Setup
Boot0011  Boot Menu
Boot0012  Diagnostic Splash Screen
Boot0013  Lenovo Diagnostics
Boot0014  Startup Interrupt Menu
Boot0015  Rescue and Recovery
Boot0016  MEBx Hot Key
Boot0017* USB CD
Boot0018* USB FDD
Boot0019* NVMe0
Boot001A* NVMe1
Boot001B* ATA HDD2
Boot001C* ATA HDD3
Boot001D* ATA HDD0
Boot001E* ATA HDD1
Boot001F* USB HDD
Boot0020* PCI LAN
Boot0021* IDER BOOT CDROM
Boot0022* IDER BOOT Floppy
Boot0023* ATA HDD
Boot0024* ATAPI CD

Note there, the BootCurrent and the BootOrder, the numbers in the BootOrder correspond to the Boot#### that are listed below it.

https://iranzo.io/blog/2021/07/01/uefi-boot-order-change/
Redken machine learning for spam detection

For some of the telegram groups I’m in, I’ve been detecting users that after some period of time, just publish spam messages of any topic.

There are many bots for controlling when a user joins, by showing a CAPTCHA that user must resolve (either clicking a button, answering a mathematical operation, inputting a CAPTCHA image text, etc).

Some time ago, a colleague was using Machine Learning and I wanted to have a look at it and it would make a good feature to implement.

https://iranzo.io/blog/2021/06/24/redken-machine-learning-for-spam-detection/
Geo replication with syncthing

Some years ago I started using geo replication to keep a copy of all the pictures, docs, etc

After being using BitTorrent sync and later resilio sync (even if I didn’t fully liked the idea of it being not open source), I gave up. My NAS with 16 GB of ram, even if a bit older (HP N54L), seemed not to have enough memory to run it, and was constantly swapping.

https://iranzo.io/blog/2021/06/12/geo-replication-with-syncthing/
How to check if a system is virtual

I was improving a playbook in Ansible and wanted to find a way to find if a system was virtual or not to decide about some tunning like setting tuned-adm profile virtual-guest or disable the power off when the lid is closed.

After some research and try-except situations I got to this one that seemed to work (I had to tune it as one desktop machine was missing the /sys entry I was using before):

https://iranzo.io/blog/2021/05/10/how-to-check-if-a-system-is-virtual/
How to run a NYM Validator

As said in the article about mixnodes, NYM is a technology aiming for providing privacy for the communications.

Apart of the mixnodes, other key piece in the infrastructure are the validators.

As said, the project uses Open Source technology to run, and they have a nice docs with details on how to run a node at https://nymtech.net/docs/, and the one relevant for mixnodes at https://nymtech.net/docs/run-nym-nodes/validators/.

In this case, we can follow the instructions for compiling, but I faced some issues (compiling went fine, but initial sync failed), so in this case, we will use the pre-compiled version provided with the 0.10.0 release.

https://iranzo.io/blog/2021/05/09/how-to-run-a-nym-validator/
How to run a NYM mixnode

Some time ago I’ve started running a NYM mixnode. NYM is a project that targets improving privacy by decomposing network packages from different hosts, so that origin and target cannot be traced.

You can check more about the NYM project at their site at https://nymtech.net/.

The project uses Open Source technology to run, and they have a nice docs with details on how to run a node at https://nymtech.net/docs/, and the one relevant for mixnodes at https://nymtech.net/docs/run-nym-nodes/mixnodes/.

https://iranzo.io/blog/2021/05/09/how-to-run-a-nym-mixnode/
Lego Technic 42115 Lamborghini Sian FKP47

Xmas came with a good gift that I was able to finish mounting today, the Lego Lamborghini Sian FKP47 🛒#ad.

The build experience was good, except for some issues related with not building in the best conditions of light, but more or less fixable…

  • I forgot to add a gear that required me to bend a bit the model to put it back
  • Realized that the gear shift wasn’t working because I didn’t put the piece in the right direction, so it was being blocked between two options
  • Pick the wrong piece at one step so later on it was missing for another

The biggest issue was that for the 2nd issue, I got into the motor drive had to be resettled and included some more dismantling, but nothing impossible.

https://iranzo.io/blog/2021/01/15/lego-technic-42115-lamborghini-sian-fkp47/
Be lazy, automate: GitHub actions for static blogging
Be lazy, automate: GitHub Actions for static blogging

/me: Pablo Iranzo Gómez ( https://iranzo.io )


What is a blog?

A place to share knowledge, interests, tips, etc.

Usually features:

  • images
  • comments from visitors,
  • related articles,
  • etc.

What are the costs for a blog?

Web costs money:

  • Hosting
  • Domain
  • Maintenance
  • etc.

What is static blogging?

Generate a static webpage

  • Think of it as rendering templates into HTML
  • Has no requirements on the web server, any simple Webserver is enough:
    • Look ma!, no database!
    • Look ma!, no users!
    • Look ma!, no security issues!

What does it mean to us?
  • We write an article
  • Command for generating html from templates is used
  • New files uploaded to Webserver

Some Philosophy

Empty your mind, be shapeless, formless, like water. Now you put water in a cup, it becomes the cup, you put water into a bottle, it becomes the bottle You put water in a teacup, it becomes the teapot Now water can flow or it can crash. Be water my friend

https://iranzo.io/presentations/2021-01-14-be-lazy-automate-gha-for-static-blogging/2021-01-14-be-lazy-automate-gha-for-static-blogging/
Ubiquiti UniFi for WiFi network
Introduction

During the pandemic I wanted to work a bit on the wireless system at home, the router provided by the ISP was having already issues that resulted in WiFi devices not connecting and only new devices were able to report ‘AP full’ message when the connection failed.

First I started testing the ASUS devices like the AX92U which had WiFi 6 support. My flat is not that big, but as I had some issues with 2.4Ghz devices like smart power plugs, I decided to go for a second unit of the same router and test the AI-Mesh that was announced by ASUS as the best way to extend coverage.

https://iranzo.io/blog/2021/01/01/ubiquiti-unifi-for-wifi-network/
Configuring OpenShift with self-contained NTP
Introduction

In a regular OpenShift environment, NTP server is more less like this:

Diagram
Diagram

In a self-contained cluster with no connection to external networks NTP server is not reachable, but a reachable NTP server is required for proper cluster synchronization. Cluster does use SSL certificates that require validation and might fail if the dates between the systems are not in sync or at least pretty close in time.

Diagram
Diagram

We’ve several components already available in our OpenShift cluster that are very useful:

https://iranzo.io/blog/2020/12/07/configuring-openshift-with-self-contained-ntp/
Upstream/Downstream documentation workflow

During last year I’ve worked with the https://github.com/openshift-kni/baremetal-deploy/ repository after being working in the KNI Community team that was in charge of <KubeVirt.io> and <Metal3.io> where some of the below things were applied.

One of the goals we had was to streamline the upstream <-> downstream process to keep changes done in the right way: get changes upstream and copy over downstream with minimal changes.

We ended up using AsciiDoctor for building the documentation in the same way it’s done downstream so it’s just a matter of copying over the modules.

https://iranzo.io/blog/2020/12/01/upstream/downstream-documentation-workflow/
Lego Porsche 911 Led Kit

As with other kits, I bought the Led kit for the Porsche 911 GT3 RS 🛒#ad (more pics at Porsche 911 GT3) and just received my LED Kit 🛒#ad (or AliExpress 🛒#ad) after my experience with the Bugatti Chiron one.

Instructions were a photocopy which was hard to read, but seller provided electronic copy that was easier to understand.

The kit contains:

  • LED for front lights (main lights)
  • LED for rear lights (brake)
  • LED for the ceiling (driver area)
  • USB connector

Start installing them from the rear part, it will be easier to drive the wires trough the vehicle, it just comes with some bagged cables + pieces for each area listed above.

https://iranzo.io/blog/2020/10/12/lego-porsche-911-led-kit/
Lego Volkswagen T1 Camper Van Led Kit

I’ve the Lego Volkswagen T1 Camper van 🛒#ad (which I made a MOC for at Lego T1 Trailer MOC) and just received my LED Lightning Kit 🛒#ad (or AliExpress 🛒#ad) after my experience with the Bugatti Chiron one

It came with a very simple instruction manual (in comparison to the Chiron kit), and was able to have them installed within 10 minutes with minimal disruption to the pieces and powered via a power bank.

The kit contains:

https://iranzo.io/blog/2020/10/02/lego-volkswagen-t1-camper-van-led-kit/
Lego Bugatti Chiron Led Kit

I’ve the Lego Bugatti Chiron 🛒#ad (more pics at its review and just recently via a credit coupon I got a LED Lightning Kit from Lightailing 🛒#ad (or AliExpress 🛒#ad).

It came with an instruction manual with 118 steps to get them installed and a plastic box with all the components required. Power was not included as I was planning to use a power-bank.

To be honest, the installation is not hard, but neither easy, it requires being extremely careful to properly place the wires and replace the original pieces with the ones supplied (for brakes and front lights) and be careful about the laying of the wires to allow them to fit in the proper places and still have room to locate the battery box.

https://iranzo.io/blog/2020/09/25/lego-bugatti-chiron-led-kit/
Lego Volkswagen T1 Trailer

I got some pieces that were part of a Lego Volkswagen T1 🛒#ad but couldn’t make for the complete set (which I already owned), so I was checking what mods I could build based on it, and best one, based on the amount of pieces was this one found on Rebrickable.

As I found it to be a bit sad to leave the wheel, and some other elements outside I did some minor changes:

https://iranzo.io/blog/2020/09/17/lego-volkswagen-t1-trailer/
GitHub Actions for publishing

When I started with blog-o-matic I had to involve external ‘Travis-CI’, generating a token on GitHub, setting environment variables on Travis, etc

GitHub started enabling actions which allows to automate workflows in a similar way than Travis or other external providers allowed, but with one extra feature: configuration is defined inside .github/ folder of your repository, which makes incredibly easy to copy the setup for one tool to another (except of optional required tokens that are configured per repo).

https://iranzo.io/blog/2020/08/10/github-actions-for-publishing/
Go (golang) plugin in Citellus

I wanted to practice a bit Go programing, so I divided that task in two parts, one, adding a golang extension for Citellus and a sample, but working plugin using it.

If interested in the code it’s available at the review at https://review.gerrithub.io/c/citellusorg/citellus/+/495622.

The final sample code for it has been:

// Author: Pablo Iranzo Gómez (Pablo.Iranzo@gmail.com)
// Header for citellus metadata
// long_name: Report detected number of CPU's
// description: List the processors detected in the system
// priority: 200

package main

import (
	"bufio"
	"io"
	"os"
	"runtime"
	"strconv"
	"strings"
)

func main() {
	var OKAY, _ = strconv.Atoi(os.Getenv("RC_OKAY"))
	var SKIP, _ = strconv.Atoi(os.Getenv("RC_SKIPPED"))
	var INFO, _ = strconv.Atoi(os.Getenv("RC_INFO"))
	var CITELLUS_ROOT = os.Getenv("CITELLUS_ROOT")
	var CITELLUS_LIVE, _ = strconv.Atoi(os.Getenv("CITELLUS_LIVE"))
	var FAILED, _ = strconv.Atoi(os.Getenv("RC_FAILED"))
	if CITELLUS_LIVE == 1 {
		// Report # of CPU's
		var CPUS = runtime.NumCPU()
		os.Stderr.WriteString(strconv.Itoa(CPUS))
		os.Exit(INFO)
	} else if CITELLUS_LIVE == 0 {
		file, err := os.Open(CITELLUS_ROOT + "/proc/cpuinfo")
		if err != nil {
			os.Stderr.WriteString("Failure to open required file " + CITELLUS_ROOT + "/proc/cpuinfo")
			os.Exit(SKIP)
		}
		defer file.Close()
		counts := wordCount(file)
		os.Stderr.WriteString(strconv.Itoa(counts["processor"]))
		os.Exit(INFO)
	} else {
		os.Stderr.WriteString("Undefined CITELLUS_LIVE status")
		os.Exit(FAILED)
	}
	// Failback case, exiting as OK
	os.Exit(OKAY)
}

// https://forgetcode.com/go/2348-count-the-number-of-word-occurrence-in-given-a-file
func wordCount(rdr io.Reader) map[string]int {
	counts := map[string]int{}
	scanner := bufio.NewScanner(rdr)
	scanner.Split(bufio.ScanWords)
	for scanner.Scan() {
		word := scanner.Text()
		word = strings.ToLower(word)
		counts[word]++
	}
	return counts
}

Of course, lot of googling helped to start building the pieces.

https://iranzo.io/blog/2020/06/14/go-golang-plugin-in-citellus/
Dell racadm remote ISO load

In order to test IPv6 deployment on Dell hardware I was in need to patch the servers to ensure that UEFI boot mode is in use.

Normally I would had use the DSU that runs from within Linux, but as the servers are part of an OpenShift installation (using baremetal-deploy) and using CoreOS as the underlying system I wanted to load ISO from HTTP server on the deployhost (running RHEL).

The command is not that hard, let’s first define some variables:

https://iranzo.io/blog/2020/05/12/dell-racadm-remote-iso-load/
Lego 10266 NASA Lunar Lander

Today, as part of my confinement Lego catchup I was building the Lego NASA Lunar Lander Apollo 11 🛒#ad.

It covered the evening after work, and have some nice details. First bags are for the lunar surface and the remainder are for the module starting with the parts which are closer to the moon surface.

It includes lots of gold-colour plates and some stickers for the external side (flag, controls of the lunar module and some external surfaces).

https://iranzo.io/blog/2020/04/08/lego-10266-nasa-lunar-lander/
Language detection in @redken_bot
Introduction

Before the move to Python3, redken had per-group language configuration by using i18n, with the upgrade/rewrite of Python3 code there were some issues and I had to remove the support, defaulting everything to English (most of the outputs where already in English so not a great loss).

On another side, having to manually configure each channel could be problematic as most users just add the bot to their groups but don’t care about other settings that might be useful like welcome message, inactivity for kicking out inactive users, etc.

https://iranzo.io/blog/2020/03/25/language-detection-in-@redken_bot/
English Game - Baker Street
Introduction

Ian, our English teacher from Tailor-Made Communication has given to us this game.

There are 5 buildings with consecutive numbers and some data to fill.

A set of clues is given in order for the reader to deduct the data and to introduce some vocabulary.

Fill-in table Category 12 14 16 18 20 Name Marital status Pet Book Drink Clues
  1. Miss Dudd owns a dog
  2. The woman at number 12 has two pets. A tortoise and a rabbit.
  3. The dog owner drinks beer.
  4. Mrs Evans is married.
  5. Mr Abraham is a widower, his neighbour is divorced.
  6. The married woman reads thriller
  7. The woman who likes coffee does not own a pet.
  8. There are five pets in Baker Street, a cat, a dog, a canary, a rabbit and a tortoise.
  9. The bachelor likes historical novels.
  10. Mr Abraham cannot read, he watches TV.
  11. The widower and the spinster like beer.
  12. Mrs Birt likes to read books by Charles Dickens.
  13. The whisky drinker owns a canary.
  14. The dog owner living next door to the bachelor is keen on love stories.
  15. Mr Charles lives between Miss Dudd and Mrs Birt
  16. The married woman drinks wine
  17. The pet at number 14 is a dog.
  18. Mr Abraham lives at number 20
  19. The dog owner and the cat owner do not live next to each other

Fold here

https://iranzo.io/blog/2020/03/24/english-game-baker-street/
Live Migration in KubeVirt
KubeVirt leverages Live Migration to support workloads to keep running while nodes can be moved to maintenance, etc Check what is needed to get it working and how it works.
https://iranzo.io/eko/2020-03-22-live-migration/
Yaspeller hook for pre-commit

I’ve made a PR that got merged into Yaspeller repository which adds support for pre-commit to spell check your files.

It requires simple configuration, just add this snippet to your .pre-commit-config.yaml:

- repo: https://github.com/hcodes/yaspeller.git
  rev: master
  hooks:
    - id: yaspeller
      files: "\\.en\\.md"

The plugin will then initialize and spell check your files via yaspeller. It will use the standard .yaspeller.json file for dictionary and settings and automate it for each new commit you work on.

https://iranzo.io/blog/2020/03/12/yaspeller-hook-for-pre-commit/
Lego Ninjago City 70620

Some pics about the ‘almost’ modular Lego Ninjago City 🛒#ad.

Note that it’s HUGE compared to other buildings and has lot of details. The water on the lower floor is defined by a set of bricks plus another set of transparent ones on top.

Some of the details:

  • Has an elevator from the lower floor to the top restaurant
  • hidden areas to store advertisements
  • ATM for getting money
  • hidden area for ninja suite
  • etc.

Overall: one of the best sets I built.

Ninjago city bridge
Lower floor
Dock area
1st floor aerial view
lower floor aerial view
1st floor details
Minifigure with diamond
Docks view with robot

https://iranzo.io/blog/2020/02/24/lego-ninjago-city-70620/
Some Lego vintage minifigures

Just some pics I made during some sorting of minifigs from my childhood.

Space minifigures
Pirates, doctors and firefighters
Archer, ghost, soldiers and tribal

Enjoy! (and if you do, you can Buy Me a Coffee )

https://iranzo.io/blog/2020/02/22/some-lego-vintage-minifigures/
Lego Benny Spaceship 70821

I bought Lego 70821 Emmet Garage and Benny Spaceship 🛒#ad because I loved the astronaut minifigures from my childhood, and I even loved the broken helmet (as I used to have them broken in the same way).

In this case, the spacecraft is an adapted version of the typical spaceship at that time, the 497-Galaxy Explorer.

Front side view
Rear view with bay area for rover
Cockpit view rear
Cockpit view
Cockpit view

Enjoy! (and if you do, you can Buy Me a Coffee )

https://iranzo.io/blog/2020/02/20/lego-benny-spaceship-70821/
JavaScript for imgur gallery generation for PhotoSwipe and Pelican-Elegant

Hi,

Using the following code from the Browser console:

console.log("");
var images = $$("img");
for (each in images) {
  console.log(`
        <a href="${images[each].src}"  data-size="4032x3024">
            <img src="${images[each].src}" width="403" height="302"  alt="Image description" />
        </a>

    `);
}
console.log("</div>");

It will output a copy-paste ready code for integrating in your blog post and leverage the picture gallery.

Warning

Review the data-size to make it match the image size as PhotoSwipe requires it to match image and adjust the figcaption entry.

https://iranzo.io/blog/2020/02/19/javascript-for-imgur-gallery-generation-for-photoswipe-and-pelican-elegant/
Magnetic field, aurora, moon phases, eclipse and rockets
Disclaimer
  • Simple talk oriented to 4 y-o children
  • Vídeos, etc have been reduced from the originals (credits in bibliography)

Magnetic Field, Aurora, Moon Phases and Rockets

Pablo Iranzo Gómezhttps://iranzo.io

Thursday 13th, February 2020


Introduction
  • Magnetic field
    • Auroras
  • Moon-Earth-Sun movement
    • Moon phases
    • Eclipses
  • Rockets
  • End

Magnetic Field

Magnetic field surrounds us, but it’s invisible although we can detect and measure.

https://iranzo.io/presentations/campo-magnetico-auroras-fases-lunares-eclipses-y-cohetes/
Git commit reordering

While I was working for a presentation for kid’s school at Magnetic field, Aurora, Lunar Phases and Rockets, I added 4 big videos to the presentation (as I was going to use them offline while presenting).

I know what git is not the place for big binary files, and even Github proposed to use the LFS backend for that, but as it was just temporary, I went ahead.

After that commit, I also wrote two more articles, the one on Lego Speed Champions and the one on Galleria.io and PhotoSwipe, so it became a problem to have big files in between, when my plan was to remove them in the end.

https://iranzo.io/blog/2020/02/13/git-commit-reordering/
Galleria.io and PhotoSwipe
Introduction

I was looking for an alternative for my (this) blog and hold pictures. I’m a lego fan so I wanted to get some pictures uploaded but without bloating the site.

In the article Lego Mini Cooper MOC I did add lot of pictures, same for Lego Chinese dinner and Lego Dragon Dance.

I was checking and how telegram does handle some links and found that Instagram ’links’ get expanded to list the images inside directly to see if that could help in a task I was helping at Pelican-Elegant theme used at this site for creating a gallery.

https://iranzo.io/blog/2020/02/12/galleria.io-and-photoswipe/
Lego Speed Champions 2020 review
Introduction on the new models

I recently got the new Lego 2020 sets for the Speed Champions collection, which feature the new ‘8 studs’ wide.

Overall impression is that it allows more details on the vehicles (and thus, it gets more pieces, now separated in the instructions in bags 1 and 2).

The new baseplate allows enough space to hold two minifigs, but with a caveat, the side closer to the external place of the vehicle requires the minifig to have the arm lowered (not completely because it wouldn’t fit).

https://iranzo.io/blog/2020/02/08/lego-speed-champions-2020-review/
Projects
Projects I've been involved with
https://iranzo.io/projects/
API access for Google Calendar and Google Sheet access
Introduction

During last days I’ve been playing around with python and API access to Google Sheets.

Since some time ago, I already experimented with ICS parsing from python because added https://t.me/redken_bot access to calendar files (.ics) so that it can provide daily reminders on chats about the events happening for the specific date, and had the chance to propose it’s usage to cover a specific use case: Accessing a spreadsheet in Google Sheets and parse its contents and output an ICS file so that the events listed and the dates specific for each one are available in an easier-to-consume approach.

https://iranzo.io/blog/2019/11/28/api-access-for-google-calendar-and-google-sheet-access/
Cloning Lego Dimensions tags
Introduction

In the article Lego Dimensions, I covered all the available packs for playing with the console.

Unfortunately, not all of them are available for purchase anymore except from collectors, <brickset.com> or some resellers.

After some research, several pages provide instructions about the tags themselves and how to ‘fix’ or ‘clone’ them.

Materials

Each base is a NFC tag NTAG 213 which is either read only (characters) or rewritable (vehicles).

With an NFC writer/reader on your mobile phone, the tags can be cloned/copied so that you can ‘repair’ the broken ones, without buying again the pack (base can be opened with a precision screwdriver by pulling it out using the small marks (opposite in the base with + shape).

https://iranzo.io/blog/2019/09/29/cloning-lego-dimensions-tags/
Python and iCalendar ICS processing
This article covers how to do Internet Calendar processing of events in python and how those are leveraged in @redken_bot
https://iranzo.io/blog/2019/09/17/python-and-icalendar-ics-processing/
Baremetal Operator

This article was published originally at https://metal3.io/blog/2019/09/11/Baremetal-operator.html

Introduction

The baremetal operator, documented at https://github.com/metal3-io/baremetal-operator/blob/master/docs/api.md, it’s the Operator in charge of definitions of physical hosts, containing information about how to reach the Out of Band management controller, URL with the desired image to provision, plus other properties related with hosts being used for provisioning instances.

Quoting from the project:

The Bare Metal Operator implements a Kubernetes API for managing bare metal hosts. It maintains an inventory of available hosts as instances of the BareMetalHost Custom Resource Definition. The Bare Metal Operator knows how to: Inspect the host’s hardware details and report them on the corresponding BareMetalHost. This includes information about CPUs, RAM, disks, NICs, and more. Provision hosts with a desired image Clean a host’s disk contents before or after provisioning.

https://iranzo.io/eko/2019-09-11-baremetal-operator/
Lego Dimensions Review
Introduction

Lego Dimensions is a game for some platforms (Xbox, Wii U, PlayStation) which adds a base with NFC reader and colour LED that allows to interact with the video game from the real world.

The starter pack ‘starter pack’ has minifigs for Supercool, Batman and Gandalf plus additional blocks to ‘decorate’ the base by building a portal.

The main story is based on how those characters (Gandalf, Batman and Supercool) meet and attempt to find and rescue their friends while visiting several worlds.

https://iranzo.io/blog/2019/08/19/lego-dimensions-review/
Killercoda scenario redirection

After my post about killercoda, I did split my initial scenarios into ‘organizations’.

One of them, is in progress to get contributed upstream to KubeVirt project killercoda (still getting some reviews to land on final repo), and the other is under Citellus organization.

As the goal was not to lose visits using the prior links, I contacted the team behind killercoda Support (thanks a lot Ben!!) and the requirements to get a ‘redirect’ in place is to:

https://iranzo.io/blog/2019/07/31/killercoda-scenario-redirection/
Lego 80102 - Dragon dance
Lego Chinese Dragon Dance review
https://iranzo.io/blog/2019/06/28/lego-80102-dragon-dance/
Argos extension writing for Gnome3

I was using from time ago this extension for Gnome named Argos which allows to create useful data views using scripts written in whatever language of choice available, bash included.

So far I had just a simple extension writing a UNICODE character, but with the suggestion of my colleague Javi Ramírez, I decided to use the motivational idea to write a simple script to calculate how much you’ve earned so far in the day and show that information at a glance on your menu bar.

https://iranzo.io/blog/2019/06/27/argos-extension-writing-for-gnome3/
Killercoda scenario creation

After some time checking the scenarios at https://learn.openshift.com, I decided to give it a try.

With the help of Mario Vázquez, author of Getting Started with Kubefed, I did create two scenarios:

You can check how them can be created by looking at their code at: killercoda Scenarios or the ‘playable’ version at https://killercoda.com/iranzo/.

https://iranzo.io/blog/2019/06/11/killercoda-scenario-creation/
Lego 75894 - 1967 Mini Cooper S Rally and Buggy MOC adaptation as Mini Transporter

After seeing this MOC 75894-mini-transporter, I decided to:

After several times trying to pay for the instructions (which I was unable to get because PayPal complained on the web site), I decided to make my own based on what I could see, and the result, are the images you can see, the initial model which had a small driving area and no minifig could sit there and the final one which added some more options like sizing cabin for allowing a minifigure to drive, plus some other alternatives for the front facing engine area and better holding of the rear wheels area.

https://iranzo.io/blog/2019/06/09/lego-75894-1967-mini-cooper-s-rally-and-buggy-moc-adaptation-as-mini-transporter/
Use custom domain name with Blog-O-Matic

As a recipe, if you want to enable a custom domain name on blog-o-matic a special file needs to be created on the ‘GitHub Pages’ served ‘master’ branch.

In order to do so, edit pelicanconf.py and add the following differences:

diff --git a/pelicanconf.py b/pelicanconf.py
index 680abcb..fc3dd8f 100644
--- a/pelicanconf.py
+++ b/pelicanconf.py
@@ -46,13 +46,16 @@ AMAZON_ONELINK = "b63a2115-85f7-43a9-b169-5f4c8c275655"


 # Extra files customization
-EXTRA_PATH_METADATA = {}
+EXTRA_PATH_METADATA = {
+    'extra/CNAME': {'path': 'CNAME'},
+}
+

 EXTRA_TEMPLATES_PATHS = [
     "plugins/revealmd/templates",  # eg: "plugins/revealmd/templates"
 ]

-STATIC_PATHS = [ 'images' ]
+STATIC_PATHS = [ 'images' , 'extra']


 ## ONLY TOUCH IF YOU KNOW WHAT YOU'RE DOING!

This will copy the CNAME file created in content/extra/CNAME to the resulting ‘master’ branch as /CNAME.

https://iranzo.io/blog/2019/05/16/use-custom-domain-name-with-blog-o-matic/
@redken_bot
Learn about Redken Telegram Bot usage and configuration settings.
https://iranzo.io/redken_bot/
AwesomeSlides for converting LibreOffice ODP into revealjs
Introduction

For some time now, I wanted to put the presentations I did in the past to be available, and since I’ve added support to my blog to render revealjs slides, I wanted to also put other presentations that I did in the past, probably (or for sure) outdated, but that were sitting in my computer drive.

The presentations already got several transformations, but in the actual status they are stored as LibreOffice ODP files, that made it a bit difficult.

https://iranzo.io/blog/2019/01/22/awesomeslides-for-converting-libreoffice-odp-into-revealjs/
Fixing pelican revealjs plugin
Introduction

After my recent talk about blog-o-matic, I was trying to upload somewhere the slides I used.

Since some time ago I started using Reveal-MD, so I could use Markdown to create and show slides, but wanted also a way to upload them for consumption.

Pelican-revealmd plugin seemed to be the answer.

It does use pypandoc library and ‘pandoc’ for doing the conversion.

The problems found

After some test, it had 3 issues:

https://iranzo.io/blog/2019/01/20/fixing-pelican-revealjs-plugin/
Project automation with Travis, GitHub Pages and Quay
Project hosting and automation

/me: Pablo Iranzo Gómez ( https://iranzo.io )


You got a shinny new project? What now?
  • Code usually also requires a webpage

    • Documentation, General Information, Developer information, etc
  • Web costs money

    • Hosting, Domain, Maintenance, etc

Some Philosophy

Empty your mind, be shapeless, formless, like water. Now you put water in a cup, it becomes the cup, you put water into a bottle, it becomes the bottle You put water in a teacup, it becomes the teapot Now water can flow or it can crash. Be water my friend

https://iranzo.io/presentations/2019-01-16-automation-travis-ghpages-containers/
Blog-o-Matic - quickly get a GitHub hosted blog with Pelican, Elegant with little setup steps.
Introduction

I’ve already covered some articles about automation with Travis-CI, GitHub, and one step that seems a show-stopper for many users when trying to build a website is on one side, the investment (domain, hosting, etc), the backend being used (WordPress, static generators, etc)…

While preparing a talk for a group of co-workers covering several of those aspects, I came with the idea to create Blog-o-Matic, implementing many of those ’learnings’ in a ‘canned’ way that can be easy to consume by users.

https://iranzo.io/blog/2019/01/09/blog-o-matic-quickly-get-a-github-hosted-blog-with-pelican-elegant-with-little-setup-steps./
OSP Director baremetal hypervisor for CoreOS
OSP Director

OSP Director (or upstream TripleO) is a life-cycle manager for OpenStack based on the idea of using ‘OpenStack’ to deploy ‘OpenStack’.

To do so, it creates a management ‘Undercloud’, that is configured and prepared for later deploying an ‘overcloud’ which is the one that will later run the workloads.

TripleO/Director, also automates the inspection of hosts and tagging to the roles they will perform later in the ‘overcloud’ setup, such as ‘controller’, ‘compute’, ‘storage’, or even mixed roles via composable-roles support.

https://iranzo.io/blog/2019/01/08/osp-director-baremetal-hypervisor-for-coreos/