Mein IaC-Workflow mit Tmux (für OpenTofu und Terraform)
2021 begann für mich eine Reise in ein Rabbit Hole, dass bisher immer noch nicht sein Ende erreicht hat: Ich bin Terminal Enthusiasts geworden.
Von Mutt (Mails) über newsboat (RSS Feed Reader) bis hin zum spotify-player nutze ich in meinem Alltag nahezu immer Tools im Terminal. Spezifisch für meinen Arbeitsalltag oder Software-Entwicklung im Privaten setze ich auf Neovim als Code Editor und das Git CLI für Softwareversionierung. Terraform/OpenTofu sowie kubectl sind per se auch CLI Tools.
(Die einzige Aufnahme ist der Browser - Ich weiß auch nicht wieso, aber w3m
oder Lynx
ist mir dann doch zu abstract)
Diese exzessive Nutzung des Terminals vereinfacht mir tmux. tmux
ist ein sogenannter Terminal Multiplexer. Es ermöglicht, mehre Terminal Sessions zu erstellen und zu verwalten. Somit lassen sich quasi Tabs von Terminal Sessions erstellen.
Wie es sich für eine Unix-Anwendung gehört: Man kann wundbar mit der tmux
CLI Skripten:
#!/bin/bash
DIRECTORY=$(pwd)
BASENAME=$(basename $(pwd))
tmux rename-session $BASENAME
tmux rename-window nvim
tmux send-keys 'nvim' Enter
tmux new-window -c $DIRECTORY -n tofu
tmux new-window -c $DIRECTORY -n git
tmux send-keys 'git status' Enter
tmux new-window -c $DIRECTORY -n terminal
tmux select-window -t 1
Das vorhergehende Skript baut mir meine IaC spezifische Arbeitsumgebung aus vier Tabs:
- Neovim zum Bearbeiten des IaC Codes.
- Eine Terminal Session spezifisch zum Ausführen der IaC Tools, z.B. für
tofu init
oderterraform apply
. - Eine weitere Terminal Session für die Arbeit mit
git
. Es wird bei Aufbau der Arbeitsumgebung automatisch eingit status
ausgeführt. - Schlussendlich eine weitere Terminal Session für Experimente oder Spielereien, wie das Ausführen von Befehlen in der Azure CLI oder zum Ausführen von Lintern wie tflint.
All diese Tabs nutzen als Working Directory
das Directory, indem das Skript initial ausgeführt wurde.
In tmux
lassen sich mehrere Terminals als eine Session zusammenfassen. Jedes Projekt bekommt seine eigene Session, somit stelle ich einerseits sicher, dass der Index der Tabs bei jedem Projekt identisch sind (Neovim im Tab 1, Git im Tab 3, ... ). Andererseits wird so aus meiner Sicht dem Extraneous cognitive load
entgegen gewirkt, da man nur die relevanten und bekannten Elemente einer anstehenden Tätigkeit geöffnet hat/angezeigt bekommt.
Das war mal ein kleiner Überblick über meinen IaC Workflow mit tmux
.
Anregungen und Fragen gerne bei mir adressieren. Unter Kontakt findet man genug Möglichkeiten, um ins Gespräch zu kommen!